- Código: Selecionar todos
switch(ram[pc])
{
case NOP:
nop();
break;
case ADD:
add();
break;
case SUB:
add();
break;
case MOV:
...
}
achei a ideia boa e pensei em fazer similar para o 68000. dei uma pesquisada e percebi que muitos compiladores otimizam o switch construindo uma lookup table com ponteiros, entao usei uma construcao equivalente :
- Código: Selecionar todos
void (*instruction[65536])();
instruction[0x4E75] = nop;
instruction[0x0024] = stop;
...
while()
{
instruction[ram[pc]]();
}
o salto de performance quando se usa uma lookup table eh muito alto... eh praticamente a arma nuclear da programacao!

tipo, aquela constante ideia "quero converter numero em ascii...":
- Código: Selecionar todos
ascii = numero + '0';
mas nao funciona com hexa. dae o cara jah inventa if numero>=0xA e blablabla ou faz um switch com 16 testes... resolve facil com uma lookup table:
- Código: Selecionar todos
char *table="0123456789abcdef";
ascii = table[numero];
a historia da tabela de 2^32 entradas eu conto outro dia (muito complexo, tem q fazer uns desenhos para explicar)...e dae jah eh a arma termonuclear do juizo final na programacao! hehehe
