Nabend mal wieder,
(Opcodes)
Ich würde alles sehr Akku-orientiert aufbauen, um halt Entwicklungsaufwand zu sparen. Wenn du Mikrokodierte Instruktionen benutzen möchtest, kannst du auch auf allgemeines Zeug hinarbeiten.
Ich hatte zwar schonmal eine Art Architektur entworfen (und viele Gedanken daran verschwendet, wenn auch nichts praktisches bisher), aber viele Überlegungen hier sind da noch nicht drin. In meinem Konzept würde ich jeden Opcode in Hardware gießen, allerdings wahrscheinlich in vielen Platinen (pro Opcode eine, um bei Bugs austauschen zu können). Da reichen dann 8-Bit-Opcodes recht gut aus.
Auch würde ich nicht einfach sagen "8 Bit für alles", sondern einfach sagen "Opcode 00110011 (z.B. JMP) erfordert ein 8-Bit-Argument - bitte einmal Nachladen". In einer größtenteils 8-Bittigen CPU sind 16-Bit-Opcodes sowieso schlecht handhabbar, weil du dann doppelt breite Register anbasteln musst.
@RedEagle: Deine Idee ist zwar schön, enthält aber auch unnützes Zeug (z.B. 00111010 würde mov rA, rA bedeuten). Du kannst auch die Fälle beschränken und z.B. durch 2-3 Bit die Kombination auswählen. Damit hättest du schon 32 Opcodes - für eine einfache CPU ausreichend. Bei mir wird das eher über ne Art 3stufige Pipeline geregelt werden (Decodieren&Einlesen => Ausführen => Ausgeben).
Was die Adressierung usw. angeht - je komplizierter das wird, umso umfangreicher müssen die Opcodes werden. Bei der originalen RISC-Architektur gibt es allerdings nur zwei Opcodes, die auf den Speicher zugreifen (LOAD und STORE) - nur diese haben eine andere Länge.
Dynamische Opcodelängen bringen unheimlichen Dekodieraufwand mit sich.
Mit erweiterung meinte ich das so ähnlich wie beim PC RM und PM (nur nicht so extrem); also dass das Programm dieses Feature erst freischalten muss.
Das führt zu verschiedenen Betriebsmodi innerhalb der CPU, damit zu veränderten Opcodebelegungen usw. Meiner Meinung nach ist das nicht mehr einfach mit wenig Hardwareaufwand realisierbar. Genauso würde ich nicht mehrere Grafikmodi implementieren, weil einfach der Aufwand zu hoch wird.
Wenn du eine Architektur selbst entwickelst - gestalte sie so einfach wie möglich, aber gleichzeitig auch sehr flexibel. Verschiedene Betriebsmodi sind nicht flexibel, schließlich beraubst du dich in mindestens einem deiner Fähigkeiten.
MAW: Man sollte auch einige Kontrollregister einbauen.
Das ist notwendig, aber es müssen nicht viele sein. Carry-, Zero- und Interruptflag sind notwendig, auf den Rest kann man verzichten. (Signflag ist eventuell praktisch, aber mit zusätzlichem Hardwareaufwand verbunden - schließlich braucht man Erweiterungen für die arithmetischen Funktionen und ein Overflow-Flag).
@RedEagle: So hatte ich das gedacht, aber du warst schneller.
Gruß,
Svenska