Ja de PDP11 had 2 operands. 3 bits voor het register, 3 bits voor de adresseringsmode dus totaal 12 bits voor de operands. Vervolgens hou je maar 4 bits per instructie over voor de eigenlijke instructie. Net te weinig.
Voor de 68000 hadden ze prachtig 5 bits voor register-adressering, 3 bits voor adresmode kunnen doen, blijven er 16 bits voor de opcode over.... Of drie operands en 8 bits voor de opcode. Volgens mij hebben ze dat net niet helemaal gedaan, toch? Ik ben begin jaren tachtig een tijdje bezig geweest om m'n eigen processor te ontwerpen. Totdat m'n pa een keer een 68000 handleiding mee naar huis nam. Whoa, die gasten hebben het vaker gedaan. Dat ziet er netjes uit! Daar kan ik nooit aan tippen, laat maar ik geef het op.
Voor interrupts heb je, als je meer registers hebt dan een 8086 of 6502 ongeveer twee opties: Ofwel je hebt in hardware een schaduw registerset zoals deKees al aangeeft. De andere optie is: Laat de software het maar doen. Dan pusht de hardware alleen de PC en mogelijk het statusregister op de stack en mag je de rest (alles wat je nodig hebt) zelf doen.
Dit levert natuurlijk leuke bugs op als je in je hoofdprogramma "zelden" register Rx gebruikt terwijl de interrupt routine... idem: zelden Rx gebruikt en die vergeten is om op de stack te bewaren...
Edit:
Ik vind het "oude computer architecturen" onderwerp best interessant, maar eigenlijk helpen we Trix daar geen zier mee....
* Bij het programmeren KAN je er altijd een zooitje van maken.
* Er zijn "programmeerstijl" regels die je niet MOET volgen maar dat is uiteindelijk toch echt beter om je er over het algemeen aan te houden: Ze helpen je om het overzichtelijk te houden.
Voorstel:
* Begin met functies te maken en die in aparte C-files te zetten.
* de globale variabelen die daarbijhoren, declareer je in dezelfde C-file. (int homeposition;)
* ALS een functie vanuit een ander file aangeroepen wordt, declareer je de functie in de bijbehorende header: extern somefunc (int a, float b);
* ALS een globale variabele van een module ook in een andere module gebruikt moet worden, dan declareer je die in de bijbehorende header: extern int homeposition;
* Als je een functie of variabele uit een andere module nodig hebt, dan zet je #include "module.h" boven aan je huidige C-file.
[Bericht gewijzigd door
rew
op woensdag 31 maart 2021 08:49:06
(28%)