Mercurial > repos > blastem
comparison genesis.c @ 2675:dbff641a33df
Implement Z80/PSG clock speed test register bit
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 14 Mar 2025 01:18:11 -0700 |
parents | 2c8f541af3c5 |
children |
comparison
equal
deleted
inserted
replaced
2674:07cc0f7109f0 | 2675:dbff641a33df |
---|---|
252 if (gen->expansion) { | 252 if (gen->expansion) { |
253 segacd_context *cd = gen->expansion; | 253 segacd_context *cd = gen->expansion; |
254 segacd_register_section_handlers(cd, buf); | 254 segacd_register_section_handlers(cd, buf); |
255 } | 255 } |
256 uint8_t tmss_old = gen->tmss; | 256 uint8_t tmss_old = gen->tmss; |
257 uint8_t old_z80_clock_bit = gen->vdp->test_regs[1] & 1; | |
257 gen->tmss = 0xFF; | 258 gen->tmss = 0xFF; |
258 while (buf->cur_pos < buf->size) | 259 while (buf->cur_pos < buf->size) |
259 { | 260 { |
260 load_section(buf); | 261 load_section(buf); |
261 } | 262 } |
284 cd->m68k->resume_pc = get_native_address_trans(cd->m68k, cd->m68k->last_prefetch_address); | 285 cd->m68k->resume_pc = get_native_address_trans(cd->m68k, cd->m68k->last_prefetch_address); |
285 } | 286 } |
286 #endif | 287 #endif |
287 free(buf->handlers); | 288 free(buf->handlers); |
288 buf->handlers = NULL; | 289 buf->handlers = NULL; |
290 uint8_t new_z80_clock_bit = gen->vdp->test_regs[1] & 1; | |
291 if (old_z80_clock_bit != new_z80_clock_bit) { | |
292 gen->z80->Z80_OPTS->gen.clock_divider = new_z80_clock_bit ? MCLKS_PER_YM : MCLKS_PER_Z80; | |
293 gen->psg->clock_inc = new_z80_clock_bit ? MCLKS_PER_YM * 16 : MCLKS_PER_PSG; | |
294 psg_adjust_master_clock(gen->psg, gen->master_clock); | |
295 z80_invalidate_code_range(gen->z80, 0, 0x4000); | |
296 z80_clock_divider_updated(gen->z80->Z80_OPTS); | |
297 } | |
289 } | 298 } |
290 | 299 |
291 static void deserialize(system_header *sys, uint8_t *data, size_t size) | 300 static void deserialize(system_header *sys, uint8_t *data, size_t size) |
292 { | 301 { |
293 genesis_context *gen = (genesis_context *)sys; | 302 genesis_context *gen = (genesis_context *)sys; |
1065 gen->bus_busy = 0; | 1074 gen->bus_busy = 0; |
1066 } | 1075 } |
1067 } | 1076 } |
1068 } else if (vdp_port < 0x18) { | 1077 } else if (vdp_port < 0x18) { |
1069 psg_write(gen->psg, value); | 1078 psg_write(gen->psg, value); |
1070 } else { | 1079 } else if (vdp_port < 0x1C) { |
1080 vdp_test_port_select(gen->vdp, value); | |
1081 } else { | |
1082 uint8_t old_z80_clock_bit = gen->vdp->test_regs[1] & 1; | |
1071 vdp_test_port_write(gen->vdp, value); | 1083 vdp_test_port_write(gen->vdp, value); |
1084 uint8_t new_z80_clock_bit = gen->vdp->test_regs[1] & 1; | |
1085 if (old_z80_clock_bit != new_z80_clock_bit) { | |
1086 gen->z80->Z80_OPTS->gen.clock_divider = new_z80_clock_bit ? MCLKS_PER_YM : MCLKS_PER_Z80; | |
1087 gen->psg->clock_inc = new_z80_clock_bit ? MCLKS_PER_YM * 16 : MCLKS_PER_PSG; | |
1088 psg_adjust_master_clock(gen->psg, gen->master_clock); | |
1089 z80_invalidate_code_range(gen->z80, 0, 0x4000); | |
1090 z80_clock_divider_updated(gen->z80->Z80_OPTS); | |
1091 } | |
1072 } | 1092 } |
1073 | 1093 |
1074 if (did_dma) { | 1094 if (did_dma) { |
1075 gen->refresh_counter = 0; | 1095 gen->refresh_counter = 0; |
1076 gen->last_sync_cycle = context->cycles; | 1096 gen->last_sync_cycle = context->cycles; |