changeset 1736:06c2438c7641

Implemented conditional call/ret, cpi/cpd/cpir/cpdr and fixed ldir/lddr in new Z80 core
author Michael Pavone <pavone@retrodev.com>
date Mon, 04 Feb 2019 20:47:20 -0800
parents ca2336469397
children 2207cd2bae14
files z80.cpu
diffstat 1 files changed, 87 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/z80.cpu	Sun Feb 03 11:05:40 2019 -0800
+++ b/z80.cpu	Mon Feb 04 20:47:20 2019 -0800
@@ -1536,6 +1536,21 @@
 	z80_push
 	mov wz pc
 	
+11CCC100 call_cond
+	local pch 8
+	z80_fetch_immed16
+	z80_check_cond C
+	
+	if istrue
+	
+	lsr pc 8 pch
+	meta high pch
+	meta low pc
+	z80_push
+	mov wz pc
+	
+	end
+	
 11TTT111 rst
 	local pch 8
 	lsr pc 8 pch
@@ -1546,14 +1561,27 @@
 	mov scratch1 pc
 
 11001001 ret
-	#TODO: confirm this goes through wz
-	local wzh 16
-	meta high wzh
-	meta low wz
+	local pch 16
+	cycles 1
+	meta high pch
+	meta low pc
 	z80_pop
-	lsl wzh 8 wzh
-	or wzh wz wz
-	mov wz pc
+	lsl pch 8 pch
+	or pch pc pc
+	
+11CCC000 ret_cond
+	local pch 16
+	cycles 1
+	z80_check_cond C
+	if istrue
+	
+	meta high pch
+	meta low pc
+	z80_pop
+	lsl pch 8 pch
+	or pch pc pc
+	
+	end
 
 11011011 in_abs
 	z80_fetch_immed
@@ -2077,7 +2105,7 @@
 	if pvflag
 	
 	add 1 pc wz
-	sub 1 pc pc
+	sub 2 pc pc
 	cycles 5
 	
 	end
@@ -2087,10 +2115,60 @@
 	if pvflag
 	
 	add 1 pc wz
-	sub 1 pc pc
+	sub 2 pc pc
 	cycles 5
 	
 	end
 	
+z80_cpd_cpi
+	local tmp 16
+	local tmp8 8
+	arg change 16
+	
+	z80_fetch_mod_hl change
+	sub scratch1 a tmp8
+	update_flags SZHXN1
+	
+	and 0x2 tmp8 tmp8
+	lsl tmp8 4 tmp8
+	and 0x88 last_flag_result last_flag_result
+	or tmp8 last_flag_result last_flag_result
+	
+	lsl b 8 tmp
+	or c tmp tmp
+	sub 1 tmp tmp
+	
+	mov tmp c
+	lsr tmp 8 b
+	mov c pvflag
+	or b pvflag pvflag
+	
+	cycles 5
+	
+ed 10100001 cpi
+	z80_cpd_cpi 1
+	
+ed 10101001 cpd
+	z80_cpd_cpi -1
+	
+ed 10110001 cpir
+	z80_cpd_cpi 1
+	if pvflag
+	
+	add 1 pc wz
+	sub 2 pc pc
+	cycles 5
+	
+	end
+	
+ed 10111001 cpdr
+	z80_cpd_cpi -1
+	if pvflag
+	
+	add 1 pc wz
+	sub 2 pc pc
+	cycles 5
+	
+	end
 
 	
\ No newline at end of file