summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-09-10 00:30:39 -0700
committerMike Pavone <pavone@retrodev.com>2013-09-10 00:30:39 -0700
commitec1959edf864cf98de267cb0f17b8b2f044a8762 (patch)
tree08378dcf375b910ad1267990d8520e4dda3e4d93
parent929bc24ebe9477fec8993be92b24dd0a96d001cd (diff)
parent773d8bb91c3d4684e3e6a76e8584e6a97eda31ec (diff)
Merge
-rw-r--r--blastem.c4
-rw-r--r--m68k_to_x86.c4
-rw-r--r--vdp.c3
3 files changed, 6 insertions, 5 deletions
diff --git a/blastem.c b/blastem.c
index a2cae6c..c093402 100644
--- a/blastem.c
+++ b/blastem.c
@@ -347,7 +347,6 @@ m68k_context * vdp_port_write(uint32_t vdp_port, m68k_context * context, uint16_
blocked = 0;
}
}
- context->current_cycle = v_context->cycles / MCLKS_PER_68K;
} else {
adjust_int_cycle(context, v_context);
}
@@ -356,7 +355,7 @@ m68k_context * vdp_port_write(uint32_t vdp_port, m68k_context * context, uint16_
exit(1);
}
if (v_context->cycles != before_cycle) {
- //printf("68K paused for %d cycles at cycle %d\n", v_context->cycles / MCLKS_PER_68K - context->current_cycle, context->current_cycle);
+ //printf("68K paused for %d (%d) cycles at cycle %d (%d)\n", v_context->cycles / MCLKS_PER_68K - context->current_cycle, v_context->cycles - before_cycle, context->current_cycle, before_cycle);
context->current_cycle = v_context->cycles / MCLKS_PER_68K;
}
} else if (vdp_port < 0x18) {
@@ -420,7 +419,6 @@ uint16_t vdp_port_read(uint32_t vdp_port, m68k_context * context)
value = vdp_hv_counter_read(v_context);
//printf("HV Counter: %X at cycle %d\n", value, v_context->cycles);
}
- context->current_cycle = v_context->cycles/MCLKS_PER_68K;
} else {
printf("Illegal read from PSG or test register port %X\n", vdp_port);
exit(1);
diff --git a/m68k_to_x86.c b/m68k_to_x86.c
index 785dac3..e78fe0d 100644
--- a/m68k_to_x86.c
+++ b/m68k_to_x86.c
@@ -2952,7 +2952,9 @@ uint8_t * translate_m68k(uint8_t * dst, m68kinst * inst, x86_68k_options * opts)
case M68K_BCLR:
case M68K_BSET:
case M68K_BTST:
- dst = cycles(dst, inst->extra.size == OPSIZE_BYTE ? 4 : 6);
+ dst = cycles(dst, inst->extra.size == OPSIZE_BYTE ? 4 : (
+ inst->op == M68K_BTST ? 6 : (inst->op == M68K_BCLR ? 10 : 8))
+ );
if (src_op.mode == MODE_IMMED) {
if (inst->extra.size == OPSIZE_BYTE) {
src_op.disp &= 0x7;
diff --git a/vdp.c b/vdp.c
index af14ef4..04fd705 100644
--- a/vdp.c
+++ b/vdp.c
@@ -1521,7 +1521,7 @@ uint16_t vdp_control_port_read(vdp_context * context)
}
uint32_t line= context->cycles / MCLKS_LINE;
uint32_t linecyc = context->cycles % MCLKS_LINE;
- if (line >= (context->latched_mode & BIT_PAL ? PAL_ACTIVE : NTSC_ACTIVE) || context->cycles < (context->latched_mode & BIT_H40 ? 16*4 : 16*5)) {
+ if (line >= (context->latched_mode & BIT_PAL ? PAL_ACTIVE : NTSC_ACTIVE)) {
value |= 0x8;
}
if (linecyc < (context->latched_mode & BIT_H40 ? HBLANK_CLEAR_H40 : HBLANK_CLEAR_H32)) {
@@ -1533,6 +1533,7 @@ uint16_t vdp_control_port_read(vdp_context * context)
if (context->latched_mode & BIT_PAL) {//Not sure about this, need to verify
value |= 0x1;
}
+ //printf("status read at cycle %d returned %X\n", context->cycles, value);
//TODO: Sprite overflow, sprite collision, odd frame flag
return value;
}