diff options
author | Ian C <ianc@noddybox.co.uk> | 2006-09-03 01:15:46 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2006-09-03 01:15:46 +0000 |
commit | 81295d66b59af1ca7cbd91f63c897d6f60b015b6 (patch) | |
tree | cd74a6e04e86f21a4966d884a7cd0cb779189fad | |
parent | 37141ac197eaefeae9dada0bcc1c429ff584df44 (diff) |
Fixed bugs on BIT,RES and SET opcode macros. Fixed serious bug in POKE
macro. Changes to GEMMA.
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | gemma.glade | 6 | ||||
-rw-r--r-- | interface.c | 5 | ||||
-rw-r--r-- | rundoc | 8 | ||||
-rw-r--r-- | z80_decode.c | 91 | ||||
-rw-r--r-- | z80_private.h | 14 |
6 files changed, 72 insertions, 62 deletions
@@ -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); @@ -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++]) |