Decodifica 68k istruzioni
Domanda
sto scrivendo un interpretato 68k emulatore come un progetto personale / educativo. In questo momento sto cercando di sviluppare un semplice, meccanismo generale di decodifica.
A quanto mi risulta, i primi due byte di ogni istruzione sono sufficienti a identificare in modo univoco l'operazione (con due rare eccezioni), e il numero di parole lasciate da leggere, se del caso.
Ecco quello che vorrei realizzare nella mia fase di decodifica:
1. read two bytes
2. determine which instruction it is
3. extract the operands
4. pass the opcode and the operands on to the execute phase
Non posso passare solo i primi due byte in una tabella di ricerca come ho potuto con i primi bit di un arco RISC, perché operandi sono "nel senso". Come posso fare parte 2
in modo generale?
In linea di massima, la mia domanda è:? Come faccio a rimuovere la variabilità degli operandi dal processo di decodifica
più di fondo:
Ecco una tabella parziale dalla sezione 8.2 del riferimento di programmazione manuale:
Table 8.2. Operation Code Map
Bits 15-12 Operation
0000 Bit Manipulation/MOVEP/Immediate
0001 Move Byte
...
1110 Shift/Rotate/Bit Field
1111 Coprocessor Interface...
Questo ha reso grande senso per me, ma poi guardo i modelli di bit per ogni istruzione e notare che non c'è una singola istruzione in cui i bit 15-12 sono 0001, 0010 o 0011. Ci deve essere qualche pezzo grosso del quadro che mi manca.
decodifica Z80 Opcodes spiega decodifica in modo esplicito, che è qualcosa che non ho trovato in di riferimento del programmatore 68k manuale o googling.
Soluzione
Ho deciso di creare semplicemente un look-up table con ogni possibile modello per ogni istruzione. Era la mia prima idea, ma ho scartato come "uno spreco, poco elegante". Ora, sto accettando come "molto veloce".