Better fix for prev commit: R register should not increase, and interrupts should not be able to happen during opcode fetching.

Yes, this reintroduces the possibility for host-OS stack overflow on a stream of thousands of dd/fd, but I'd rather pick this solution (no irq or r++ VS recursion). The problem should only happen if it's done on purpose, such as my own "crash your z80 emulator" rom for MSX over here: http://crap.tsk-tsk.net/msx_crash_emu.zip
This commit is contained in:
Michaël Banaan Ananas 2011-09-08 15:28:05 +00:00
parent 49f76e3977
commit 699e601224

View File

@ -2302,7 +2302,7 @@ OP(dd,d9) { illegal_1(z80); op_d9(z80); } /* DB DD */
OP(dd,da) { illegal_1(z80); op_da(z80); } /* DB DD */
OP(dd,db) { illegal_1(z80); op_db(z80); } /* DB DD */
OP(dd,dc) { illegal_1(z80); op_dc(z80); } /* DB DD */
OP(dd,dd) { illegal_1(z80); z80->PC--; } /* DB DD */
OP(dd,dd) { illegal_1(z80); EXEC(z80,dd,ARG(z80)); } /* DB DD */
OP(dd,de) { illegal_1(z80); op_de(z80); } /* DB DD */
OP(dd,df) { illegal_1(z80); op_df(z80); } /* DB DD */
@ -2320,7 +2320,7 @@ OP(dd,e9) { z80->PC = z80->IX; } /* JP (IX) */
OP(dd,ea) { illegal_1(z80); op_ea(z80); } /* DB DD */
OP(dd,eb) { illegal_1(z80); op_eb(z80); } /* DB DD */
OP(dd,ec) { illegal_1(z80); op_ec(z80); } /* DB DD */
OP(dd,ed) { illegal_1(z80); z80->PC--; } /* DB DD */
OP(dd,ed) { illegal_1(z80); EXEC(z80,ed,ARG(z80)); } /* DB DD */
OP(dd,ee) { illegal_1(z80); op_ee(z80); } /* DB DD */
OP(dd,ef) { illegal_1(z80); op_ef(z80); } /* DB DD */
@ -2338,7 +2338,7 @@ OP(dd,f9) { z80->SP = z80->IX; } /* LD SP,IX */
OP(dd,fa) { illegal_1(z80); op_fa(z80); } /* DB DD */
OP(dd,fb) { illegal_1(z80); op_fb(z80); } /* DB DD */
OP(dd,fc) { illegal_1(z80); op_fc(z80); } /* DB DD */
OP(dd,fd) { illegal_1(z80); z80->PC--; } /* DB DD */
OP(dd,fd) { illegal_1(z80); EXEC(z80,fd,ARG(z80)); } /* DB DD */
OP(dd,fe) { illegal_1(z80); op_fe(z80); } /* DB DD */
OP(dd,ff) { illegal_1(z80); op_ff(z80); } /* DB DD */
@ -2593,7 +2593,7 @@ OP(fd,d9) { illegal_1(z80); op_d9(z80); } /* DB FD */
OP(fd,da) { illegal_1(z80); op_da(z80); } /* DB FD */
OP(fd,db) { illegal_1(z80); op_db(z80); } /* DB FD */
OP(fd,dc) { illegal_1(z80); op_dc(z80); } /* DB FD */
OP(fd,dd) { illegal_1(z80); z80->PC--; } /* DB FD */
OP(fd,dd) { illegal_1(z80); EXEC(z80,dd,ARG(z80)); } /* DB FD */
OP(fd,de) { illegal_1(z80); op_de(z80); } /* DB FD */
OP(fd,df) { illegal_1(z80); op_df(z80); } /* DB FD */
@ -2611,7 +2611,7 @@ OP(fd,e9) { z80->PC = z80->IY; } /* JP (IY) */
OP(fd,ea) { illegal_1(z80); op_ea(z80); } /* DB FD */
OP(fd,eb) { illegal_1(z80); op_eb(z80); } /* DB FD */
OP(fd,ec) { illegal_1(z80); op_ec(z80); } /* DB FD */
OP(fd,ed) { illegal_1(z80); z80->PC--; } /* DB FD */
OP(fd,ed) { illegal_1(z80); EXEC(z80,ed,ARG(z80)); } /* DB FD */
OP(fd,ee) { illegal_1(z80); op_ee(z80); } /* DB FD */
OP(fd,ef) { illegal_1(z80); op_ef(z80); } /* DB FD */
@ -2629,7 +2629,7 @@ OP(fd,f9) { z80->SP = z80->IY; } /* LD SP,IY */
OP(fd,fa) { illegal_1(z80); op_fa(z80); } /* DB FD */
OP(fd,fb) { illegal_1(z80); op_fb(z80); } /* DB FD */
OP(fd,fc) { illegal_1(z80); op_fc(z80); } /* DB FD */
OP(fd,fd) { illegal_1(z80); z80->PC--; } /* DB FD */
OP(fd,fd) { illegal_1(z80); EXEC(z80,fd,ARG(z80)); } /* DB FD */
OP(fd,fe) { illegal_1(z80); op_fe(z80); } /* DB FD */
OP(fd,ff) { illegal_1(z80); op_ff(z80); } /* DB FD */