# HG changeset patch # User Mike Pavone # Date 1369380387 25200 # Node ID fa7ea48be9a9aad5339d69699613dace27c5766f # Parent 79e4b466e7d043102e11660f529f9713c34a1f34 Allow VDP/PSG writes from Z80 diff -r 79e4b466e7d0 -r fa7ea48be9a9 blastem.c --- a/blastem.c Thu May 23 23:55:42 2013 -0700 +++ b/blastem.c Fri May 24 00:26:27 2013 -0700 @@ -333,7 +333,14 @@ m68k_context * vdp_port_write_b(uint32_t vdp_port, m68k_context * context, uint8_t value) { - return vdp_port_write(vdp_port, context, vdp_port < 0x10 ? value | value << 8 : value); + return vdp_port_write(vdp_port, context, vdp_port < 0x10 ? value | value << 8 : ((vdp_port & 1) ? value : 0)); +} + +z80_context * z80_vdp_port_write(uint16_t vdp_port, z80_context * context, uint8_t value) +{ + genesis_context * gen = context->system; + vdp_port_write_b(vdp_port, gen->m68k, value); + return context; } uint16_t vdp_port_read(uint32_t vdp_port, m68k_context * context) diff -r 79e4b466e7d0 -r fa7ea48be9a9 zruntime.S --- a/zruntime.S Thu May 23 23:55:42 2013 -0700 +++ b/zruntime.S Fri May 24 00:26:27 2013 -0700 @@ -133,7 +133,8 @@ jb z80_write_ym2612 cmp $0x6100, %r14w jb z80_write_bank_reg - /* TODO: YM-2612, PSG/VDP */ + cmp $0x7F00, %r14w + jae z80_write_vdp ret z80_write_ram: and $0x1FFF, %r14 @@ -150,13 +151,6 @@ not_code: ret z80_write_bank: - and $0x7FFF, %r14 - cmp $0, %r12 - je slow_bank_write - /* 68K memory is byte swapped */ - xor $1, %r14 - mov %r13b, (%r12, %r14) - ret slow_bank_write: /* TODO: Call into C to implement this */ ret @@ -167,8 +161,7 @@ mov %r13b, %dl call z80_write_ym mov %rax, %rsi - call z80_load_context - ret + jmp z80_load_context z80_write_bank_reg: and $1, %r13w shr %r15w @@ -184,6 +177,14 @@ shl $15, %r12 add 80(%rsi), %r12 ret +z80_write_vdp: + and $0xFF, %r14w + call z80_save_context + mov %r14w, %di + mov %r13b, %dl + call z80_vdp_port_write + mov %rax, %rsi + jmp z80_load_context .global z80_read_word z80_read_word: