diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-05-24 00:26:27 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-05-24 00:26:27 -0700 |
commit | 124a009d29c98d2f0eae2f9eafcbbf80aa42c348 (patch) | |
tree | c8e536c7b90797dda95a85f178b198f99f0d76f9 | |
parent | c4311b6471fa5d884eafb4adb835e4e0516c7c96 (diff) |
Allow VDP/PSG writes from Z80
-rw-r--r-- | blastem.c | 9 | ||||
-rw-r--r-- | zruntime.S | 21 |
2 files changed, 19 insertions, 11 deletions
@@ -333,7 +333,14 @@ m68k_context * vdp_port_write(uint32_t vdp_port, m68k_context * context, uint16_ 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) @@ -133,7 +133,8 @@ z80_write_byte_noinc: 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 @@ z80_write_ram: 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 @@ z80_write_ym2612: 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 @@ update_bank_ptr: 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: |