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.

Décodage site de Z80 opcodes explique le décodage explicitement, ce qui est quelque chose que je ne l'ai pas trouvé dans la référence du programmeur 68k manuel ou par googler.

Était-ce utile?

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

scroll top