2011-09-07 16 views
5

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.

+0

¿Cuánto creció su proyecto? ¿Tiene un desensamblador o emulador? –

+0

Todavía estoy construyendo un script que genera una tabla de búsqueda completa. Alrededor del 70% hecho. – mwcz

+0

@CountablyInfinite ¿Estás trabajando en un proyecto similar? – mwcz

Respuesta

2

He decidido simplemente crear una tabla de consulta con todos los patrones posibles para cada instrucción. Fue mi primera idea, pero la descarté como "derrochadora, poco elegante". Ahora, lo estoy aceptando como "realmente rápido".

+1

Ah, la primera regla de la codificación del emulador: a veces el enfoque de fuerza bruta de aspecto torpe es el mejor uno. :) –

+1

Y depende mucho de la CPU que ejecuta la emulación. Un L2 de 16 megabytes puede hacer maravillas. :) –