68k instructions de décodage
Question
J'écris un émulateur interprété 68k comme un projet personnel / éducation. En ce moment je suis en train de développer un mécanisme simple, général de décodage.
Si je comprends bien, les deux premiers octets de chaque instruction suffisent pour identifier l'opération (à deux exceptions rares) et le nombre de mots laissés à lire, le cas échéant.
Voici ce que je voudrais accomplir dans ma phase de décodage:
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
Je ne peux pas juste passer les deux premiers octets dans une table de recherche, comme je pouvais avec les premiers bits dans un arc RISC, car opérandes sont « la manière ». Comment puis-je accomplir 2
partiel d'une manière générale?
De façon générale, ma question est: Comment puis-je supprimer la variabilité des opérandes du processus de décodage
Plus d'arrière-plan:
Voici un tableau partiel de la section 8.2 du Manuel du programmeur Référence:
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...
Cela fait grand sens pour moi, mais je regarde les modèles binaires pour chaque instruction et avis qu'il n'y a pas une seule instruction où les bits 15-12 sont 0001, 0010 ou 0011. Il doit y avoir une grande pièce de l'image que je me manque.
La solution
I've decided to simply create a look-up table with every possible pattern for each instruction. It was my first idea, but I discarded it as "wasteful, inelegant". Now, I'm accepting it as "really fast".