This commit is contained in:
2018-10-30 19:23:23 -04:00
parent faa0ed13a3
commit 7df88ffdf2

18
main.c
View File

@@ -346,46 +346,46 @@ int main(int argc, char **argv) {
reg = (opcode & 0x0F00) >> 8; reg = (opcode & 0x0F00) >> 8;
switch ((byte) opcode) switch ((byte) opcode)
{ {
case 0x07: case 0x07: // set reg to delay time
if (DEBUG) printf("Copying delay timer to reg %i (%hx)", reg, state.registers[reg]); if (DEBUG) printf("Copying delay timer to reg %i (%hx)", reg, state.registers[reg]);
state.registers[reg] = delay; state.registers[reg] = delay;
break; break;
case 0x0A: case 0x0A: // wait for input and store it in reg
wait = 1; wait = 1;
store = reg; store = reg;
break; break;
case 0x15: case 0x15: // set delay timer to value in reg
delay = state.registers[reg]; delay = state.registers[reg];
break; break;
case 0x18: case 0x18: // set sound timer to value in reg
sound = state.registers[reg]; sound = state.registers[reg];
break; break;
case 0x1E: case 0x1E: // Add value stored in VX to I
state.address_I += state.registers[reg]; state.address_I += state.registers[reg];
if (DEBUG) printf("Adding reg %i (%hx) to I (%x)", reg, state.registers[reg], state.address_I); if (DEBUG) printf("Adding reg %i (%hx) to I (%x)", reg, state.registers[reg], state.address_I);
break; break;
case 0x29: case 0x29: // set I to address of font character
state.address_I = state.registers[reg] * 5; state.address_I = state.registers[reg] * 5;
break; break;
case 0x33:; case 0x33:; // encode value in reg as a BCD at I, I+1, I+2
int value = state.registers[reg]; int value = state.registers[reg];
state.memory[state.address_I] = value / 100; state.memory[state.address_I] = value / 100;
state.memory[state.address_I + 1] = (value / 10) % 10; state.memory[state.address_I + 1] = (value / 10) % 10;
state.memory[state.address_I + 2] = value % 10; state.memory[state.address_I + 2] = value % 10;
break; break;
case 0x55: case 0x55: // dump registers V0 -> VX at I
for (int i = 0; i <= reg; ++i) for (int i = 0; i <= reg; ++i)
state.memory[state.address_I + i] = state.registers[i]; state.memory[state.address_I + i] = state.registers[i];
break; break;
case 0x65: case 0x65: // retrieve registers V0 -> VX from I
for (int i = 0; i <= reg; ++i) for (int i = 0; i <= reg; ++i)
state.registers[i] = state.memory[state.address_I + i]; state.registers[i] = state.memory[state.address_I + i];
break; break;