diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-12-26 20:18:58 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-12-26 20:18:58 -0800 |
commit | b1940d5f9fa6cbb97aa0f7cef0a5fa61b6cb2c95 (patch) | |
tree | c8265d79777cbfa68901ab6779a84ca63e1f03c3 | |
parent | f0d831f2b1e343592d0987dffdb5eb1064bd83ae (diff) |
vertical interrupts now work
-rw-r--r-- | m68k_to_x86.c | 2 | ||||
-rw-r--r-- | runtime.S | 12 | ||||
-rw-r--r-- | vdp.c | 10 |
3 files changed, 18 insertions, 6 deletions
diff --git a/m68k_to_x86.c b/m68k_to_x86.c index 7a7a90c..8daa11e 100644 --- a/m68k_to_x86.c +++ b/m68k_to_x86.c @@ -50,7 +50,7 @@ uint8_t * cycles(uint8_t * dst, uint32_t num) uint8_t * check_cycles_int(uint8_t * dst, uint32_t address) { - dst = cmp_rr(dst, LIMIT, CYCLES, SZ_D); + dst = cmp_rr(dst, CYCLES, LIMIT, SZ_D); uint8_t * jmp_off = dst+1; dst = jcc(dst, CC_NC, dst + 7); dst = mov_ir(dst, address, SCRATCH1, SZ_D); @@ -16,6 +16,7 @@ handle_cycle_limit_int: cmp 88(%rsi), %eax jb skip_int push %rcx + /* call print_int_dbg */ /* swap USP and SSP if not already in supervisor mode */ bt $5, 5(%rsi) jc already_supervisor @@ -50,6 +51,17 @@ already_supervisor: jmp *%rcx skip_int: ret + +int_dbg_msg: + .asciz "Executing Interrupt!" +print_int_dbg: + call m68k_save_context + push %rsi + lea int_dbg_msg(%rip), %rdi + call puts + pop %rsi + call m68k_load_context + ret .global get_sr get_sr: @@ -313,7 +313,7 @@ void external_slot(vdp_context * context) } break; case CRAM_WRITE: - printf("CRAM Write: %X to %X, autoinc: %d\n", start->value, context->address, context->regs[REG_AUTOINC]); + //printf("CRAM Write: %X to %X\n", start->value, context->address); context->cram[(context->address/2) & (CRAM_SIZE-1)] = start->value; break; case VSRAM_WRITE: @@ -1029,7 +1029,7 @@ int vdp_control_port_write(vdp_context * context, uint16_t value) context->address = (context->address & 0x3FFF) | (value << 14); context->cd = (context->cd & 0x3) | ((value >> 2) & 0x3C); context->flags &= ~FLAG_PENDING; - printf("New Address: %X, New CD: %X\n", context->address, context->cd); + //printf("New Address: %X, New CD: %X\n", context->address, context->cd); if (context->cd & 0x20) { if((context->regs[REG_DMASRC_H] & 0xC0) != 0x80) { //DMA copy or 68K -> VDP, transfer starts immediately @@ -1044,11 +1044,11 @@ int vdp_control_port_write(vdp_context * context, uint16_t value) //Register write uint8_t reg = (value >> 8) & 0x1F; if (reg < VDP_REGS) { - printf("register %d set to %X\n", reg, value & 0xFF); + //printf("register %d set to %X\n", reg, value & 0xFF); context->regs[reg] = value; - if (reg == REG_MODE_2) { + /*if (reg == REG_MODE_2) { printf("Display is now %s\n", (context->regs[REG_MODE_2] & DISPLAY_ENABLE) ? "enabled" : "disabled"); - } + }*/ } } else { context->flags |= FLAG_PENDING; |