GB: implement the undefined opcodes. according to sources, they completely lock up the machine; so they are emulated as DI; <repeat last opcode>, which should do the trick? testing needed. thanks to sanqui for pointing this out

This commit is contained in:
goyuken 2014-01-31 22:58:54 +00:00
parent d87978087d
commit 5ecc74c435
2 changed files with 25 additions and 0 deletions

View File

@ -2512,6 +2512,8 @@ void CPU::process(const unsigned long cycles) {
break; break;
case 0xD3: /*doesn't exist*/ case 0xD3: /*doesn't exist*/
skip = true;
memory.di();
break; break;
//call nc,nn (24;12 cycles): //call nc,nn (24;12 cycles):
@ -2578,6 +2580,8 @@ void CPU::process(const unsigned long cycles) {
break; break;
case 0xDB: /*doesn't exist*/ case 0xDB: /*doesn't exist*/
skip = true;
memory.di();
break; break;
//call z,nn (24;12 cycles): //call z,nn (24;12 cycles):
@ -2591,6 +2595,11 @@ void CPU::process(const unsigned long cycles) {
} }
break; break;
case 0xDD: /*doesn't exist*/
skip = true;
memory.di();
break;
case 0xDE: case 0xDE:
{ {
unsigned data; unsigned data;
@ -2626,8 +2635,12 @@ void CPU::process(const unsigned long cycles) {
FF_WRITE(0xFF00 | C, A); FF_WRITE(0xFF00 | C, A);
break; break;
case 0xE3: /*doesn't exist*/ case 0xE3: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xE4: /*doesn't exist*/ case 0xE4: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xE5: case 0xE5:
push_rr(H, L); push_rr(H, L);
@ -2682,10 +2695,16 @@ void CPU::process(const unsigned long cycles) {
break; break;
case 0xEB: /*doesn't exist*/ case 0xEB: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xEC: /*doesn't exist*/ case 0xEC: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xED: /*doesn't exist*/ case 0xED: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xEE: case 0xEE:
{ {
@ -2734,6 +2753,8 @@ void CPU::process(const unsigned long cycles) {
break; break;
case 0xF4: /*doesn't exist*/ case 0xF4: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xF5: /*push_rr(A, F); Cycles(16); break;*/ case 0xF5: /*push_rr(A, F); Cycles(16); break;*/
calcHF(HF1, HF2); calcHF(HF1, HF2);
@ -2806,8 +2827,12 @@ void CPU::process(const unsigned long cycles) {
break; break;
case 0xFC: /*doesn't exist*/ case 0xFC: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xFD: /*doesn't exist*/ case 0xFD: /*doesn't exist*/
skip = true;
memory.di();
break; break;
case 0xFE: case 0xFE:
{ {

Binary file not shown.