Als Augenöffner könnte man die drei verschiedenen Interrupt-Modi des Z80 begutachten:
Sorry, aber wir wollen uns doch nach vorne entwickeln, der Z80 war doch schon Überholt wo von uns noch keiner gelebt hat,
Ich sprach vom Augen öffnen. Ob du nun ARM, MIPS oder x86 anschaust, dann hast du überall Vektorinterrupts, die von einem Interruptcontroller auf eine IRQ-Leitung plus das Bussystem gemultiplext werden. (Bei SoCs ist der Interruptcontroller natürlich auf dem Die mit drauf.) Der Z80 hatte da vollständig andere Ideen.
Geschichte wiederholt sich. Frühe CP/M- und Unixdateisysteme konnten keine Dateien vergrößern, wie deprimierend, untauglich und überholt. Das ISO-Dateisystem von CDs und DVDs kann das aber auch nicht... man soll die historischen Ideen nicht aus dem Auge verlieren. Die Technik mag komplett überholt sein - und ob du die Vektortabelle nun einsparst, weil dir der Platz im RAM zu knapp bemessen ist oder ob dir die Latenz zu hoch ist, spielt ja keine Rolle mehr. Aber die Idee ist da.
Ein wirklich rundum empfehlenswertes CPU-Vorbild gibt es IMHO einfach nicht, da hilft wohl nur sich selber nen Kopf zu machen.
IRQ-Nummer auf Datenbus, aber feste Sprungadresse - die Nummer taucht dann evtl. in einem Register auf
Vielleicht sollte der IRQ-Controller trotzdem auch die Sprungadresse mit auf den Bus packen, dann hätte man maximale Flexibilität ohne damit die CPU belasten zu müssen (eine in der CPU implementierte Tabelle ist immer entweder zu groß oder zu klein, eben dafür sollte der IRQ-Controller zuständig sein). Die Interrupt-Nummer sollte dem Handler natürlich trotzdem (in einem System-Register) zur Verfügung stehen.[/quote]Wozu? Jeder sinnvoll genutzte Interrupt ist dem System bekannt, also brauchst du in Hardware nicht doppelt arbeiten, um der CPU einmal eine interruptspezifische Funktion
und die Interruptnummer mitteilen zu können.
Kostet nur Silizium und im Endeffekt nutzt du genau eine von beiden Möglichkeiten sinnvoll. Maximale Flexibilität ist aber richtig.
Feste Adressen (wie bei ARM oder Z80) finde ich persönlich doof weil man dann dafür sorgen muss das an dieser Stelle auch wirklich RAM ist und weil dort eh nur ein Sprung auf den tatsächlichen Handler steht.
Bei ARM weiß ich es grad nicht, aber beim Z80 sind die Adressen nicht fest. Sie liegen nur alle zusammen in einem (kleinen) Bereich. Man muss ja die historischen Beschränkungen nicht mit dem Konzept übernehmen, außerdem sind die Grenzen heute ganz andere. Wenn IRQ-Handler in den unteren 4 GB des Speichers liegen müssen, sehe ich da kein Problem. Wenn sie in den unteren 256 Bytes liegen müssen, schon...
Was soll z.B. alles passieren von dem Moment an wo das System mit elektrischer Energie versorgt wird bis zu dem Moment wo das OS dem User ein Login bietet? Soll es ein BIOS geben das die HW rudimentär in Betrieb nimmt und ein beliebiges OS von einem beliebigen Massenspeicher holt oder soll das OS tiefer im System verankert sein und alles selber machen?
Ich habe das so geplant. wenn Strom kommt, dann wird als erstes ein BIOS geladen, welches den Speicher zählt und die wichtigsten komponenten auf Funktion prüft, dann wird von einem Massenspeicher ein Bootloader geladen und dem die kontrolle übergeben. was dann kommt ist Systemspezifisch.
Also das klassische Modell vom x86. Was ist an deinem Konzept eigentlich
anders als der Rest? Jede Architektur zeichnet sich durch irgendetwas aus, was zeichnet deine aus?
Eriks Architektur geht ganz neuartig mit Speicher um, meine Architektur ist (theoretisch) in TTL realisierbar.
In meine Plattform wird es kein BIOS o.ä. geben, da liegt das OS in einem Flash der durch die CPU direkt angesprochen werden kann (als ganz normaler Speicher) und davor kommt ein minimaler Initial-Loader der einfach nur das Image sucht und anspringt.
Also baust du ein NOR-Flash an eine Stelle im Adressraum, wo die CPU nach dem Reset die Ausführung beginnt und dort legst du einen Bootloader für z.B. NAND/IDE hin, der Prüfsumme berechnet und startet?
Ein full-featured BIOS finde ich jedenfalls heutzutage übertrieben. Auf keiner modernen mir bekannten Architektur (außer x86) nutzt das Betriebssystem irgendwelche Firmware-Funktionen (bei x86: ACPI, APM und was damit zusammenhängt), mal von der Informationsbeschaffung (Flash-Partitionierung, CPU-Typ und RAM-Größe) abgesehen. Das OS implementiert in der Regel alle Treiber selbst.
Gruß,
Svenska