Mercurial > repos > blastem
comparison z80_to_x86.c @ 259:d9417261366f
Fix a remaining z80_write reg swap bug. Properly initialize the native map slots. Reset appropriate regs when z80_reset is called.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 30 Apr 2013 00:39:20 -0700 |
parents | 4c7933444df4 |
children | f0c53a4bbfa3 |
comparison
equal
deleted
inserted
replaced
258:852b8765bba6 | 259:d9417261366f |
---|---|
68 uint8_t * z80_check_cycles_int(uint8_t * dst, uint16_t address) | 68 uint8_t * z80_check_cycles_int(uint8_t * dst, uint16_t address) |
69 { | 69 { |
70 dst = cmp_rr(dst, ZCYCLES, ZLIMIT, SZ_D); | 70 dst = cmp_rr(dst, ZCYCLES, ZLIMIT, SZ_D); |
71 uint8_t * jmp_off = dst+1; | 71 uint8_t * jmp_off = dst+1; |
72 dst = jcc(dst, CC_NC, dst + 7); | 72 dst = jcc(dst, CC_NC, dst + 7); |
73 dst = mov_ir(dst, address, SCRATCH2, SZ_W); | 73 dst = mov_ir(dst, address, SCRATCH1, SZ_W); |
74 dst = call(dst, (uint8_t *)z80_handle_cycle_limit_int); | 74 dst = call(dst, (uint8_t *)z80_handle_cycle_limit_int); |
75 *jmp_off = dst - (jmp_off+1); | 75 *jmp_off = dst - (jmp_off+1); |
76 return dst; | 76 return dst; |
77 } | 77 } |
78 | 78 |
1164 case Z80_OTDR:*/ | 1164 case Z80_OTDR:*/ |
1165 default: { | 1165 default: { |
1166 char disbuf[80]; | 1166 char disbuf[80]; |
1167 z80_disasm(inst, disbuf); | 1167 z80_disasm(inst, disbuf); |
1168 fprintf(stderr, "unimplemented instruction: %s\n", disbuf); | 1168 fprintf(stderr, "unimplemented instruction: %s\n", disbuf); |
1169 FILE * f = fopen("zram.bin", "wb"); | |
1170 fwrite(context->mem_pointers[0], 1, 8 * 1024, f); | |
1171 fclose(f); | |
1169 exit(1); | 1172 exit(1); |
1170 } | 1173 } |
1171 } | 1174 } |
1172 return dst; | 1175 return dst; |
1173 } | 1176 } |
1434 | 1437 |
1435 void init_z80_context(z80_context * context, x86_z80_options * options) | 1438 void init_z80_context(z80_context * context, x86_z80_options * options) |
1436 { | 1439 { |
1437 memset(context, 0, sizeof(*context)); | 1440 memset(context, 0, sizeof(*context)); |
1438 context->static_code_map = malloc(sizeof(context->static_code_map)); | 1441 context->static_code_map = malloc(sizeof(context->static_code_map)); |
1442 context->static_code_map->base = NULL; | |
1439 context->static_code_map->offsets = malloc(sizeof(int32_t) * 0x2000); | 1443 context->static_code_map->offsets = malloc(sizeof(int32_t) * 0x2000); |
1440 memset(context->static_code_map->offsets, 0xFF, sizeof(int32_t) * 0x2000); | 1444 memset(context->static_code_map->offsets, 0xFF, sizeof(int32_t) * 0x2000); |
1441 context->banked_code_map = malloc(sizeof(native_map_slot) * (1 << 9)); | 1445 context->banked_code_map = malloc(sizeof(native_map_slot) * (1 << 9)); |
1446 memset(context->banked_code_map, 0, sizeof(native_map_slot) * (1 << 9)); | |
1442 context->options = options; | 1447 context->options = options; |
1443 } | 1448 } |
1444 | 1449 |
1445 void z80_reset(z80_context * context) | 1450 void z80_reset(z80_context * context) |
1446 { | 1451 { |
1452 context->im = 0; | |
1453 context->iff1 = context->iff2 = 0; | |
1447 context->native_pc = z80_get_native_address_trans(context, 0); | 1454 context->native_pc = z80_get_native_address_trans(context, 0); |
1448 } | 1455 } |
1449 | 1456 |
1450 | 1457 |