summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2019-02-02 15:35:15 -0800
committerMichael Pavone <pavone@retrodev.com>2019-02-02 15:35:15 -0800
commit53015149f581d73e44a75bb5322f8f803411a04e (patch)
treeb8f8b8cf43366d32849155e07c61eeb40db72076
parent8c126fe314843f54ca26e495c6bf656042513bd9 (diff)
Implemented RES instruction in new Z80 core
-rwxr-xr-xcpu_dsl.py7
-rw-r--r--z80.cpu43
2 files changed, 49 insertions, 1 deletions
diff --git a/cpu_dsl.py b/cpu_dsl.py
index 58b84b4..b38a83b 100755
--- a/cpu_dsl.py
+++ b/cpu_dsl.py
@@ -745,6 +745,13 @@ class NormalOp:
output.append(_opMap['mov'].generate(otype, prog, shortProc, shortParams, None))
else:
output.append(opDef.generate(otype, prog, procParams, self.params, flagUpdates))
+ for dstIdx in opDef.outOp:
+ dst = self.params[dstIdx]
+ while dst in prog.meta:
+ dst = prog.meta[dst]
+ if dst in parent.regValues:
+ del parent.regValues[dst]
+
elif self.op in prog.subroutines:
procParams = []
for param in self.params:
diff --git a/z80.cpu b/z80.cpu
index 57d3b2d..7a6b14c 100644
--- a/z80.cpu
+++ b/z80.cpu
@@ -1750,4 +1750,45 @@ fdcb 01BBBRRR bit_iyd
lsl 1 B tmp
lsr wz 8 last_flag_result
and scratch1 tmp tmp
- update_flags SZH1PN0 \ No newline at end of file
+ update_flags SZH1PN0
+
+cb 10BBBRRR res_reg
+ local tmp 8
+ lsl 1 B tmp
+ not tmp tmp
+ and main.R tmp main.R
+
+cb 10BBB110 res_hl
+ z80_fetch_hl
+ cycles 1
+ local tmp 8
+ lsl 1 B tmp
+ not tmp tmp
+ and scratch1 tmp scratch1
+ z80_store_hl
+
+z80_res_index
+ arg bit 8
+ arg tmp 8
+ lsl 1 bit tmp
+ not tmp tmp
+ mov wz scratch1
+ ocall read_8
+ cycles 1
+ and scratch1 tmp tmp
+ mov tmp scratch1
+ z80_store_index
+
+ddcb 10BBB110 res_ixd
+ local tmp 8
+ z80_res_index B tmp
+
+ddcb 10BBBRRR res_ixd_reg
+ z80_res_index B main.R
+
+fdcb 10BBB110 res_iyd
+ local tmp 8
+ z80_res_index B tmp
+
+fdcb 10BBBRRR res_iyd_reg
+ z80_res_index B main.R \ No newline at end of file