Estoy escribiendo un emulador de 68k interpretado como un proyecto personal/educativo. En este momento estoy tratando de desarrollar un mecanismo de decodificación simple y general.decodificación 68k instrucciones
Según tengo entendido, los primeros dos bytes de cada instrucción son suficientes para identificar de forma única la operación (con dos raras excepciones) y el número de palabras que quedan por leer, si las hay.
Esto es lo que me gustaría lograr en mi fase de decodificación:
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
simplemente no puede pasar los primeros dos bytes en una tabla de búsqueda como pude con los primeros bits en un arco de RISC , porque los operandos están "en el camino". ¿Cómo puedo lograr la parte 2
de una manera general?
En general, mi pregunta es: ¿Cómo elimino la variabilidad de los operandos del proceso de decodificación?
Más de fondo:
Aquí es una tabla parcial de la sección 8.2 del Manual de Referencia del Programador:
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...
Esto hizo mucho sentido para mí, pero luego miro a los patrones de bits para cada instrucciones y aviso de que no hay una sola instrucción donde los bits 15-12 son 0001, 0010 o 0011. Debe haber una gran parte de la imagen que me falta.
Este sitio Decoding Z80 Opcodes explica la decodificación explícitamente, que es algo que no he encontrado en el manual de referencia del programador 68k o en googlear.
¿Cuánto creció su proyecto? ¿Tiene un desensamblador o emulador? –
Todavía estoy construyendo un script que genera una tabla de búsqueda completa. Alrededor del 70% hecho. – mwcz
@CountablyInfinite ¿Estás trabajando en un proyecto similar? – mwcz