summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2014-02-13 00:10:36 -0800
committerMike Pavone <pavone@retrodev.com>2014-02-13 00:10:36 -0800
commit3ef25e453e0c72b7dd19046f27977345f5dc0d2f (patch)
treeac7f8c065a91752f90036f33c4e8007f71bdd2f3
parent10bf5c797c6fa99656a6af3b723c11c641fbc090 (diff)
Properly sync hardware when frame end is reached during DMA
-rw-r--r--blastem.c49
1 files changed, 8 insertions, 41 deletions
diff --git a/blastem.c b/blastem.c
index 05d2fd8..c4072e3 100644
--- a/blastem.c
+++ b/blastem.c
@@ -319,28 +319,11 @@ m68k_context * vdp_port_write(uint32_t vdp_port, m68k_context * context, uint16_
while(v_context->flags & FLAG_DMA_RUN) {
vdp_run_dma_done(v_context, mclks_per_frame);
if (v_context->cycles >= mclks_per_frame) {
- if (!headless) {
- //printf("reached frame end | 68K Cycles: %d, MCLK Cycles: %d\n", context->current_cycle, v_context->cycles);
- wait_render_frame(v_context, frame_limit);
- } else if(exit_after){
- --exit_after;
- if (!exit_after) {
- exit(0);
- }
- }
- vdp_adjust_cycles(v_context, mclks_per_frame);
- genesis_context * gen = context->system;
- io_adjust_cycles(gen->ports, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- io_adjust_cycles(gen->ports+1, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- io_adjust_cycles(gen->ports+2, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- if (busack_cycle != CYCLE_NEVER) {
- if (busack_cycle > mclks_per_frame/MCLKS_PER_68K) {
- busack_cycle -= mclks_per_frame/MCLKS_PER_68K;
- } else {
- busack_cycle = CYCLE_NEVER;
- busack = new_busack;
- }
+ context->current_cycle = v_context->cycles / MCLKS_PER_68K;
+ if (context->current_cycle * MCLKS_PER_68K < mclks_per_frame) {
+ ++context->current_cycle;
}
+ sync_components(context, 0);
}
}
//context->current_cycle = v_context->cycles / MCLKS_PER_68K;
@@ -353,27 +336,11 @@ m68k_context * vdp_port_write(uint32_t vdp_port, m68k_context * context, uint16_
while(v_context->flags & FLAG_DMA_RUN) {
vdp_run_dma_done(v_context, mclks_per_frame);
if (v_context->cycles >= mclks_per_frame) {
- if (!headless) {
- wait_render_frame(v_context, frame_limit);
- } else if(exit_after){
- --exit_after;
- if (!exit_after) {
- exit(0);
- }
- }
- vdp_adjust_cycles(v_context, mclks_per_frame);
- genesis_context * gen = context->system;
- io_adjust_cycles(gen->ports, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- io_adjust_cycles(gen->ports+1, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- io_adjust_cycles(gen->ports+2, v_context->cycles/MCLKS_PER_68K, mclks_per_frame/MCLKS_PER_68K);
- if (busack_cycle != CYCLE_NEVER) {
- if (busack_cycle > mclks_per_frame/MCLKS_PER_68K) {
- busack_cycle -= mclks_per_frame/MCLKS_PER_68K;
- } else {
- busack_cycle = CYCLE_NEVER;
- busack = new_busack;
- }
+ context->current_cycle = v_context->cycles / MCLKS_PER_68K;
+ if (context->current_cycle * MCLKS_PER_68K < mclks_per_frame) {
+ ++context->current_cycle;
}
+ sync_components(context, 0);
}
}
if (blocked < 0) {