summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2006-09-03 01:15:46 +0000
committerIan C <ianc@noddybox.co.uk>2006-09-03 01:15:46 +0000
commit81295d66b59af1ca7cbd91f63c897d6f60b015b6 (patch)
treecd74a6e04e86f21a4966d884a7cd0cb779189fad
parent37141ac197eaefeae9dada0bcc1c429ff584df44 (diff)
Fixed bugs on BIT,RES and SET opcode macros. Fixed serious bug in POKE
macro. Changes to GEMMA.
-rw-r--r--Makefile10
-rw-r--r--gemma.glade6
-rw-r--r--interface.c5
-rw-r--r--rundoc8
-rw-r--r--z80_decode.c91
-rw-r--r--z80_private.h14
6 files changed, 72 insertions, 62 deletions
diff --git a/Makefile b/Makefile
index 09d32ab..4ede2a0 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@
#
# -------------------------------------------------------------------------
#
-# $Id: Makefile,v 1.13 2006-08-30 22:24:41 ianc Exp $
+# $Id: Makefile,v 1.14 2006-09-03 01:15:46 ianc Exp $
#
#
@@ -95,7 +95,7 @@ emma: $(BASE_O) $(EMMA_O)
gemma: $(BASE_O) $(GEMMA_O)
cc -o gemma $(BASE_O) $(GEMMA_O) `pkg-config --libs gtk+-2.0`
-tests: emucpm.hex zexdoc.hex zexall.hex
+tests: emucpm.hex zexdoc.hex zexall.hex test.hex
emucpm.hex: emucpm.z80
tpasm -P Z80 -o intel emucpm.hex emucpm.z80
@@ -110,6 +110,12 @@ zexall.hex: zexall.z80
tail +4 _tmp | awk '{printf("%s 0x%s\n",$$2,$$1);}' > zexall.lbl
rm -f _tmp
+test.hex: test.z80
+ tpasm -P Z80 -o intel test.hex test.z80
+
+test.z80:
+ if [ ! -e test.z80 ] ; then touch test.z80 ; fi
+
clean:
rm -f emma gemma $(BASE_O) $(EMMA_O) $(GEMMA_O) core *.hex *.lbl
diff --git a/gemma.glade b/gemma.glade
index 073a0e5..59201da 100644
--- a/gemma.glade
+++ b/gemma.glade
@@ -151,7 +151,7 @@ PC</property>
<signal name="toggled" handler="OnViewMode" last_modification_time="Thu, 31 Aug 2006 22:47:09 GMT"/>
</widget>
<packing>
- <property name="padding">0</property>
+ <property name="padding">3</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
@@ -249,7 +249,7 @@ PC</property>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Run Until Expression: </property>
+ <property name="label" translatable="yes">Run Until Expression:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -257,7 +257,7 @@ PC</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
- <property name="xpad">0</property>
+ <property name="xpad">8</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
diff --git a/interface.c b/interface.c
index ad0defe..425a16b 100644
--- a/interface.c
+++ b/interface.c
@@ -110,7 +110,7 @@ create_top_window (void)
viewmode_check = gtk_check_button_new_with_mnemonic (_("View as Words"));
gtk_widget_show (viewmode_check);
- gtk_box_pack_start (GTK_BOX (hbox3), viewmode_check, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox3), viewmode_check, FALSE, FALSE, 3);
memory_view = gtk_label_new (_("<b>Memory View</b>"));
gtk_widget_show (memory_view);
@@ -135,9 +135,10 @@ create_top_window (void)
gtk_widget_show (hbox4);
gtk_box_pack_start (GTK_BOX (vbox4), hbox4, FALSE, TRUE, 0);
- label1 = gtk_label_new (_("Run Until Expression: "));
+ label1 = gtk_label_new (_("Run Until Expression:"));
gtk_widget_show (label1);
gtk_box_pack_start (GTK_BOX (hbox4), label1, FALSE, FALSE, 0);
+ gtk_misc_set_padding (GTK_MISC (label1), 8, 0);
breakpoint_text = gtk_entry_new ();
gtk_widget_show (breakpoint_text);
diff --git a/rundoc b/rundoc
index 3cd0df4..6bbf705 100644
--- a/rundoc
+++ b/rundoc
@@ -1,7 +1,7 @@
i emucpm.hex
i zexdoc.hex
D zexdoc.lbl
-#s
-#r 0x100
-p 0x100
-n
+s
+r 0x100
+#p 0x100
+#n
diff --git a/z80_decode.c b/z80_decode.c
index 1433b30..4b6929c 100644
--- a/z80_decode.c
+++ b/z80_decode.c
@@ -281,7 +281,7 @@ do { \
*/
#define RRCA \
do { \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&0xc8)|(cpu->AF.b[HI]&C_Z80); \
+ cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]&C_Z80); \
cpu->AF.b[HI]=(cpu->AF.b[HI]>>1)|(cpu->AF.b[HI]<<7); \
SETHIDDEN(cpu->AF.b[HI]); \
} while(0)
@@ -291,7 +291,7 @@ do { \
do { \
Z80Byte c; \
c=CARRY; \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&0xc8)|(cpu->AF.b[HI]&C_Z80); \
+ cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]&C_Z80); \
cpu->AF.b[HI]=(cpu->AF.b[HI]>>1)|(c<<7); \
SETHIDDEN(cpu->AF.b[HI]); \
} while(0)
@@ -319,7 +319,7 @@ do { \
#define RLCA \
do { \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&0xc8)|(cpu->AF.b[HI]>>7); \
+ cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]>>7); \
cpu->AF.b[HI]=(cpu->AF.b[HI]<<1)|(cpu->AF.b[HI]>>7); \
SETHIDDEN(cpu->AF.b[HI]); \
} while(0)
@@ -329,7 +329,7 @@ do { \
do { \
Z80Byte c; \
c=CARRY; \
- cpu->AF.b[LO]=(cpu->AF.b[LO]&0xc8)|(cpu->AF.b[HI]>>7); \
+ cpu->AF.b[LO]=(cpu->AF.b[LO]&(S_Z80|Z_Z80|P_Z80))|(cpu->AF.b[HI]>>7); \
cpu->AF.b[HI]=(cpu->AF.b[HI]<<1)|c; \
SETHIDDEN(cpu->AF.b[HI]); \
} while(0)
@@ -424,20 +424,21 @@ do { \
#define BIT(REG,B) \
do { \
cpu->AF.b[LO]=CARRY|H_Z80; \
- if ((REG)&&(1<<B)) \
+ if ((REG)&(1<<B)) \
{ \
- if (B==7) cpu->AF.b[LO]|=S_Z80; \
- if (B==5) cpu->AF.b[LO]|=B5_Z80; \
- if (B==3) cpu->AF.b[LO]|=B3_Z80; \
+ cpu->AF.b[LO]|=Z_Z80; \
+ cpu->AF.b[LO]|=P_Z80; \
} \
else \
{ \
- cpu->AF.b[LO]|=Z_Z80; \
- cpu->AF.b[LO]|=P_Z80; \
+ if (B==7) cpu->AF.b[LO]|=S_Z80; \
+ if (B==5) cpu->AF.b[LO]|=B5_Z80; \
+ if (B==3) cpu->AF.b[LO]|=B3_Z80; \
} \
} while(0)
-#define RES CLR
+#define BIT_SET(REG,B) (REG)|=(1<<B)
+#define BIT_RES(REG,B) (REG)&=~(1<<B)
/* ---------------------------------------- JUMP OPERATIONS
@@ -1670,23 +1671,23 @@ static void DecodeCB(Z80 *cpu, Z80Byte opcode)
CB_BITMANIP_BLOCK(0x70,BIT,6)
CB_BITMANIP_BLOCK(0x78,BIT,7)
- CB_BITMANIP_BLOCK(0x80,RES,0)
- CB_BITMANIP_BLOCK(0x88,RES,1)
- CB_BITMANIP_BLOCK(0x90,RES,2)
- CB_BITMANIP_BLOCK(0x98,RES,3)
- CB_BITMANIP_BLOCK(0xa0,RES,4)
- CB_BITMANIP_BLOCK(0xa8,RES,5)
- CB_BITMANIP_BLOCK(0xb0,RES,6)
- CB_BITMANIP_BLOCK(0xb8,RES,7)
-
- CB_BITMANIP_BLOCK(0xc0,SET,0)
- CB_BITMANIP_BLOCK(0xc8,SET,1)
- CB_BITMANIP_BLOCK(0xd0,SET,2)
- CB_BITMANIP_BLOCK(0xd8,SET,3)
- CB_BITMANIP_BLOCK(0xe0,SET,4)
- CB_BITMANIP_BLOCK(0xe8,SET,5)
- CB_BITMANIP_BLOCK(0xf0,SET,6)
- CB_BITMANIP_BLOCK(0xf8,SET,7)
+ CB_BITMANIP_BLOCK(0x80,BIT_RES,0)
+ CB_BITMANIP_BLOCK(0x88,BIT_RES,1)
+ CB_BITMANIP_BLOCK(0x90,BIT_RES,2)
+ CB_BITMANIP_BLOCK(0x98,BIT_RES,3)
+ CB_BITMANIP_BLOCK(0xa0,BIT_RES,4)
+ CB_BITMANIP_BLOCK(0xa8,BIT_RES,5)
+ CB_BITMANIP_BLOCK(0xb0,BIT_RES,6)
+ CB_BITMANIP_BLOCK(0xb8,BIT_RES,7)
+
+ CB_BITMANIP_BLOCK(0xc0,BIT_SET,0)
+ CB_BITMANIP_BLOCK(0xc8,BIT_SET,1)
+ CB_BITMANIP_BLOCK(0xd0,BIT_SET,2)
+ CB_BITMANIP_BLOCK(0xd8,BIT_SET,3)
+ CB_BITMANIP_BLOCK(0xe0,BIT_SET,4)
+ CB_BITMANIP_BLOCK(0xe8,BIT_SET,5)
+ CB_BITMANIP_BLOCK(0xf0,BIT_SET,6)
+ CB_BITMANIP_BLOCK(0xf8,BIT_SET,7)
}
}
@@ -1730,23 +1731,23 @@ static void ShiftedDecodeCB(Z80 *cpu, Z80Byte opcode, Z80Relative offset)
SHIFTED_CB_BITMANIP_BLOCK(0x70,BIT,6)
SHIFTED_CB_BITMANIP_BLOCK(0x78,BIT,7)
- SHIFTED_CB_BITMANIP_BLOCK(0x80,RES,0)
- SHIFTED_CB_BITMANIP_BLOCK(0x88,RES,1)
- SHIFTED_CB_BITMANIP_BLOCK(0x90,RES,2)
- SHIFTED_CB_BITMANIP_BLOCK(0x98,RES,3)
- SHIFTED_CB_BITMANIP_BLOCK(0xa0,RES,4)
- SHIFTED_CB_BITMANIP_BLOCK(0xa8,RES,5)
- SHIFTED_CB_BITMANIP_BLOCK(0xb0,RES,6)
- SHIFTED_CB_BITMANIP_BLOCK(0xb8,RES,7)
-
- SHIFTED_CB_BITMANIP_BLOCK(0xc0,SET,0)
- SHIFTED_CB_BITMANIP_BLOCK(0xc8,SET,1)
- SHIFTED_CB_BITMANIP_BLOCK(0xd0,SET,2)
- SHIFTED_CB_BITMANIP_BLOCK(0xd8,SET,3)
- SHIFTED_CB_BITMANIP_BLOCK(0xe0,SET,4)
- SHIFTED_CB_BITMANIP_BLOCK(0xe8,SET,5)
- SHIFTED_CB_BITMANIP_BLOCK(0xf0,SET,6)
- SHIFTED_CB_BITMANIP_BLOCK(0xf8,SET,7)
+ SHIFTED_CB_BITMANIP_BLOCK(0x80,BIT_RES,0)
+ SHIFTED_CB_BITMANIP_BLOCK(0x88,BIT_RES,1)
+ SHIFTED_CB_BITMANIP_BLOCK(0x90,BIT_RES,2)
+ SHIFTED_CB_BITMANIP_BLOCK(0x98,BIT_RES,3)
+ SHIFTED_CB_BITMANIP_BLOCK(0xa0,BIT_RES,4)
+ SHIFTED_CB_BITMANIP_BLOCK(0xa8,BIT_RES,5)
+ SHIFTED_CB_BITMANIP_BLOCK(0xb0,BIT_RES,6)
+ SHIFTED_CB_BITMANIP_BLOCK(0xb8,BIT_RES,7)
+
+ SHIFTED_CB_BITMANIP_BLOCK(0xc0,BIT_SET,0)
+ SHIFTED_CB_BITMANIP_BLOCK(0xc8,BIT_SET,1)
+ SHIFTED_CB_BITMANIP_BLOCK(0xd0,BIT_SET,2)
+ SHIFTED_CB_BITMANIP_BLOCK(0xd8,BIT_SET,3)
+ SHIFTED_CB_BITMANIP_BLOCK(0xe0,BIT_SET,4)
+ SHIFTED_CB_BITMANIP_BLOCK(0xe8,BIT_SET,5)
+ SHIFTED_CB_BITMANIP_BLOCK(0xf0,BIT_SET,6)
+ SHIFTED_CB_BITMANIP_BLOCK(0xf8,BIT_SET,7)
}
}
diff --git a/z80_private.h b/z80_private.h
index c10b15f..58b9584 100644
--- a/z80_private.h
+++ b/z80_private.h
@@ -146,17 +146,19 @@ struct Z80
#define POKE(addr,val) do \
{ \
- if (cpu->memctrl[(addr)/256]) \
+ Z80Word ba=addr; \
+ Z80Word bv=val; \
+ if (cpu->memctrl[(ba)/256]) \
{ \
- cpu->memory[addr]=val; \
+ cpu->memory[ba]=bv; \
} \
} while (0)
#define POKEW(addr,val) do \
{ \
- Z80Word once=val; \
- Z80Word once_addr=addr; \
- POKE(once_addr,once); \
- POKE(once_addr+1,once>>8); \
+ Z80Word wa=addr; \
+ Z80Word wv=val; \
+ POKE(wa,wv); \
+ POKE(wa+1,wv>>8); \
} while(0)
#define FETCH_BYTE (cpu->memory[cpu->PC++])