summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-05-24 00:26:27 -0700
committerMike Pavone <pavone@retrodev.com>2013-05-24 00:26:27 -0700
commit124a009d29c98d2f0eae2f9eafcbbf80aa42c348 (patch)
treec8e536c7b90797dda95a85f178b198f99f0d76f9
parentc4311b6471fa5d884eafb4adb835e4e0516c7c96 (diff)
Allow VDP/PSG writes from Z80
-rw-r--r--blastem.c9
-rw-r--r--zruntime.S21
2 files changed, 19 insertions, 11 deletions
diff --git a/blastem.c b/blastem.c
index 97c2ada..112637e 100644
--- a/blastem.c
+++ b/blastem.c
@@ -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)
diff --git a/zruntime.S b/zruntime.S
index 2eef4c9..2531eb4 100644
--- a/zruntime.S
+++ b/zruntime.S
@@ -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: