diff z80_to_x86.c @ 255:572b935dd030

Properly handle wrapping around to 0 in translate_z80_stream
author Mike Pavone <pavone@retrodev.com>
date Mon, 29 Apr 2013 22:52:05 -0700
parents 64feb6b67244
children 4c7933444df4
line wrap: on
line diff
--- a/z80_to_x86.c	Mon Apr 29 22:37:47 2013 -0700
+++ b/z80_to_x86.c	Mon Apr 29 22:52:05 2013 -0700
@@ -1345,7 +1345,7 @@
 				opts->code_end = opts->cur_code + size;
 				jmp(opts->cur_code, opts->cur_code);
 			}
-			if (address > 0x4000 & address < 0x8000) {
+			if (address > 0x4000 && address < 0x8000) {
 				opts->cur_code = xor_rr(opts->cur_code, RDI, RDI, SZ_D);
 				opts->cur_code = call(opts->cur_code, (uint8_t *)exit);
 				break;
@@ -1366,7 +1366,12 @@
 			z80_map_native_address(context, address, opts->cur_code, next-encoded, after - opts->cur_code);
 			opts->cur_code = after;
 			address += next-encoded;
-			encoded = next;
+			if (address > 0xFFFF) {
+				address &= 0xFFFF;
+				
+			} else {
+				encoded = next;
+			}
 		} while (!(inst.op == Z80_RET || inst.op == Z80_RETI || inst.op == Z80_RETN || inst.op == Z80_JP || (inst.op == Z80_NOP && inst.immed == 42)));
 		process_deferred(&opts->deferred, context, (native_addr_func)z80_get_native_address);
 		if (opts->deferred) {