changeset 357:fa7ea48be9a9

Allow VDP/PSG writes from Z80
author Mike Pavone <pavone@retrodev.com>
date Fri, 24 May 2013 00:26:27 -0700
parents 79e4b466e7d0
children 9498cfa7f7c8
files blastem.c zruntime.S
diffstat 2 files changed, 19 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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: