void InterpreterOpcode()
{
switch((Chip8.Opcode)&0xF000>>12)
{
case 0x00:
switch((Chip8.Opcode)&0x00FF)
{
case 0xE0: EXEC_CLS(); break;
case 0xEE: EXEC_RET(); break;
}
case 0x01: EXEC_JP(); break;
case 0x02: EXEC_CALL(); break;
case 0x03: EXEC_SE_byte(); break;
case 0x04: EXEC_SNE(); break;
case 0x05: EXEC_SE_vy(); break;
case 0x06: EXEC_LD_byte(); break;
case 0x07: EXEC_ADD_byte(); break;
case 0x08:
switch((Chip8.Opcode)&0x000F)
{
case 0x00: EXEC_LD_vy(); break;
case 0x01: EXEC_OR(); break;
case 0x02: EXEC_AND(); break;
case 0x03: EXEC_XOR(); break;
case 0x04: EXEC_ADD_vy(); break;
case 0x05: EXEC_SUB(); break;
case 0x06: EXEC_SHR(); break;
case 0x07: EXEC_SUBN(); break;
case 0x0E: EXEC_SHL(); break;
}
break;
case 0x09: EXEC_SNE_vy(); break;
case 0x0A: EXEC_LD_adress(); break;
case 0x0B: EXEC_JP_adress(); break;
case 0x0C: EXEC_RND(); break;
case 0x0D: EXEC_DRW(); break;
case 0x0E:
switch((Chip8.Opcode)&0x00FF)
{
case 0x9E: EXEC_SKP(); break;
case 0xA1: EXEC_SKNP(); break;
}
break;
case 0x0F:
switch((Chip8.Opcode)&0x00FF)
{
case 0x07: EXEC_LD_dt(); break;
case 0x0A: EXEC_LD_k(); break;
case 0x15: EXEC_LD_vx(); break;
case 0x18: EXEC_LD_st(); break;
case 0x1E: EXEC_ADD_vx(); break;
case 0x29: EXEC_LD_f(); break;
case 0x33: EXEC_LD_b(); break;
case 0x55: EXEC_LD_i(); break;
case 0x65: EXEC_LD_vxi(); break;
}
break;
default:
break;
}
}
void EXEC_RET()
{
Chip8.SP--;
Chip8.PC=Chip8.Pile[Chip8.SP];
Chip8.PC+=2;
cout << "opcode RET" << endl;
}
void EXEC_JP()
{
Chip8.PC=Chip8.Opcode & 0x0FFF;
cout << "opcode JP" << endl;
}
void EXEC_CALL()
{
Chip8.SP++;
Chip8.PC=Chip8.Pile[Chip8.SP];
Chip8.PC=Chip8.Opcode & 0x0FFF;
cout << "opcode CALL" << endl;
}
void EXEC_SE_byte() // SE Vx,Bytes
{
if(Chip8.Registre[(Chip8.Opcode & 0x0F00)>>8]==(Chip8.Opcode & 0x00FF)) Chip8.PC+=2;
cout << "opcode SE 1" << endl;
}
void DemarrerEmulation()
{
Chip8.Opcode=(Chip8.Opcode<<8)|Chip8.MemoireRom[Chip8.PC+1];
InterpreterOpcode();
if(Chip8.RegDelayTimer > 0) Chip8.RegDelayTimer--;
if(Chip8.RegSoundTimer > 0)
{
if(Chip8.RegSoundTimer==1) Beep(150,30);
Chip8.RegSoundTimer--;
}
Chip8.PC+=1;
}
void InterpreterOpcode()
{
switch((Chip8.Opcode)&0xF000>>12)
{
case 0x00:
switch((Chip8.Opcode)&0x00FF)
{
case 0xE0: EXEC_CLS(); break;
case 0xEE: EXEC_RET(); break;
}
break;
case 0x01: EXEC_JP(); break;
case 0x02: EXEC_CALL(); break;
case 0x03: EXEC_SE_byte(); break;
case 0x04: EXEC_SNE(); break;
case 0x05: EXEC_SE_vy(); break;
case 0x06: EXEC_LD_byte(); break;
case 0x07: EXEC_ADD_byte(); break;
case 0x08:
switch((Chip8.Opcode)&0x000F)
{
case 0x00: EXEC_LD_vy(); break;
case 0x01: EXEC_OR(); break;
case 0x02: EXEC_AND(); break;
case 0x03: EXEC_XOR(); break;
case 0x04: EXEC_ADD_vy(); break;
case 0x05: EXEC_SUB(); break;
case 0x06: EXEC_SHR(); break;
case 0x07: EXEC_SUBN(); break;
case 0x0E: EXEC_SHL(); break;
}
break;
case 0x09: EXEC_SNE_vy(); break;
case 0x0A: EXEC_LD_adress(); break;
case 0x0B: EXEC_JP_adress(); break;
case 0x0C: EXEC_RND(); break;
case 0x0D: EXEC_DRW(); break;
case 0x0E:
switch((Chip8.Opcode)&0x00FF)
{
case 0x9E: EXEC_SKP(); break;
case 0xA1: EXEC_SKNP(); break;
}
break;
case 0x0F:
switch((Chip8.Opcode)&0x00FF)
{
case 0x07: EXEC_LD_dt(); break;
case 0x0A: EXEC_LD_k(); break;
case 0x15: EXEC_LD_vx(); break;
case 0x18: EXEC_LD_st(); break;
case 0x1E: EXEC_ADD_vx(); break;
case 0x29: EXEC_LD_f(); break;
case 0x33: EXEC_LD_b(); break;
case 0x55: EXEC_LD_i(); break;
case 0x65: EXEC_LD_vxi(); break;
}
break;
default:
break;
}
}
If you are interested, I have written a chip8/schip8 emulator in MFC and OpenGL, you can find a link to it in my signature. (source code available)rockytrh said:I have a question for ya. I will be a first year comp sci student next year, but i have already learned c++ (too much time on my hands). I would like to program a chip8 emu, and have some questions. First off, is it possible to program a chip8 with MFC, or even stricty oop for that matter? I ask, because i don't know C, only know C++ form an oop standpoint. Secondly, i an new to programming graphics, and would like to know where i can get a handle on that.
Thanks all,
Rocky
hap said:Hmm, I've just created Sokoban on SCHIP
I've also updated my emulator (I don't think Sokoban works on the previous release), and also the collection at: http://www.emutalk.net/showpost.php?p=313299&postcount=622
I did think that with previous releases, but now, after finding/fixing silly bugs that have been there since day one, I won't anymoreachieved perfect chip8 compat?![]()