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