Sto scrivendo un emulatore 68k interpretato come un progetto personale/educativo. In questo momento sto cercando di sviluppare un semplice meccanismo di decodifica generale.Decodifica istruzioni 68k
A quanto ho capito, i primi due byte di ciascuna istruzione sono sufficienti per identificare univocamente l'operazione (con due rare eccezioni) e il numero di parole da leggere, se presenti.
Ecco cosa desidero 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 può semplicemente passare i primi due byte in una tabella di ricerca come ho potuto con i primi bit di un arco RISC , perché gli operandi sono "nel modo". Come posso realizzare la parte 2
in modo generale?
In generale, la mia domanda è: Come si rimuove la variabilità degli operandi dal processo di decodifica?
più di fondo:
Ecco una tabella parziale dalla sezione 8.2 del di programmazione Manuale di riferimento:
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...
Ciò ha grande senso per me, ma poi guardo i modelli di bit per ogni istruzioni e si noti che non esiste una singola istruzione in cui i bit 15-12 sono 0001, 0010 o 0011. Deve esserci qualche pezzo grosso dell'immagine che mi manca.
Questo sito Decoding Z80 Opcodes spiega esplicitamente la decodifica, che è qualcosa che non ho trovato nel manuale di riferimento del programmatore 68k o su Google.
Quanto è cresciuto il tuo progetto, hai un disassemblatore o un emulatore? –
Sto ancora costruendo uno script che genera una tabella di ricerca completa. Circa il 70% fatto. – mwcz
@CountablyInfinite Stai lavorando a un progetto simile? – mwcz