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);