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.

È stato utile?

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".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top