Sto scrivendo un emulatore di cpu a 8 bit e attualmente ho una tabella di salto per diversi opcode. Voglio spostare questo per essere accurato al ciclo e mi chiedevo quale sarebbe l'approccio migliore nell'implementazione di un microtable?
Stavo pensando a qualcosa di simile al seguente:
//PSEUDO
static int (*microtable[][])(cpu *t_cpu) = {
{FETCH_OP, FETCH_OPERAND, DO_JMP, BURN_CYCLE},
{FETCH_OP, FETCH_OPERAND, DO_ADD, NIL},
};
Dove ogni riga è indicativa di un OP e ogni ciclo è definito da una serie di operazioni.
Ad esempio l'istruzione JMP (prima riga) impiegherebbe 3 cicli se dovesse accadere sulla stessa pagina, altrimenti 4 cicli eseguendo il BURN_CYCLE.
Questo deve essere guidato da una funzione esterna che è impostata per l'esecuzione ad una determinata frequenza di clock, quindi essenzialmente assegnerò / riferirò le micro-operazioni dal tavolo al volo durante l'esecuzione.
Qualche idea?