Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
254:64feb6b67244 | 255:572b935dd030 |
---|---|
1343 size_t size = 1024*1024; | 1343 size_t size = 1024*1024; |
1344 opts->cur_code = alloc_code(&size); | 1344 opts->cur_code = alloc_code(&size); |
1345 opts->code_end = opts->cur_code + size; | 1345 opts->code_end = opts->cur_code + size; |
1346 jmp(opts->cur_code, opts->cur_code); | 1346 jmp(opts->cur_code, opts->cur_code); |
1347 } | 1347 } |
1348 if (address > 0x4000 & address < 0x8000) { | 1348 if (address > 0x4000 && address < 0x8000) { |
1349 opts->cur_code = xor_rr(opts->cur_code, RDI, RDI, SZ_D); | 1349 opts->cur_code = xor_rr(opts->cur_code, RDI, RDI, SZ_D); |
1350 opts->cur_code = call(opts->cur_code, (uint8_t *)exit); | 1350 opts->cur_code = call(opts->cur_code, (uint8_t *)exit); |
1351 break; | 1351 break; |
1352 } | 1352 } |
1353 uint8_t * existing = z80_get_native_address(context, address); | 1353 uint8_t * existing = z80_get_native_address(context, address); |
1364 } | 1364 } |
1365 uint8_t *after = translate_z80inst(&inst, opts->cur_code, context, address); | 1365 uint8_t *after = translate_z80inst(&inst, opts->cur_code, context, address); |
1366 z80_map_native_address(context, address, opts->cur_code, next-encoded, after - opts->cur_code); | 1366 z80_map_native_address(context, address, opts->cur_code, next-encoded, after - opts->cur_code); |
1367 opts->cur_code = after; | 1367 opts->cur_code = after; |
1368 address += next-encoded; | 1368 address += next-encoded; |
1369 encoded = next; | 1369 if (address > 0xFFFF) { |
1370 address &= 0xFFFF; | |
1371 | |
1372 } else { | |
1373 encoded = next; | |
1374 } | |
1370 } while (!(inst.op == Z80_RET || inst.op == Z80_RETI || inst.op == Z80_RETN || inst.op == Z80_JP || (inst.op == Z80_NOP && inst.immed == 42))); | 1375 } while (!(inst.op == Z80_RET || inst.op == Z80_RETI || inst.op == Z80_RETN || inst.op == Z80_JP || (inst.op == Z80_NOP && inst.immed == 42))); |
1371 process_deferred(&opts->deferred, context, (native_addr_func)z80_get_native_address); | 1376 process_deferred(&opts->deferred, context, (native_addr_func)z80_get_native_address); |
1372 if (opts->deferred) { | 1377 if (opts->deferred) { |
1373 address = opts->deferred->address; | 1378 address = opts->deferred->address; |
1374 printf("defferred address: %X\n", address); | 1379 printf("defferred address: %X\n", address); |