diff -r -u z80-asm-org/AUTHORS z80-asm/AUTHORS --- z80-asm-org/AUTHORS Wed Apr 26 14:36:39 2000 +++ z80-asm/AUTHORS Mon Oct 15 17:29:36 2001 @@ -3,3 +3,10 @@ e-mail: brain@artax.karlin.mff.cuni.cz URL: http://artax.karlin.mff.cuni.cz/~brain/ + + +Breakpoint, quiet run, follow other registers than PC and change default view +of parameters from dec to hex: +(c) 2001 Marek Wodzinski +e-mail: majek@mamy.to +URL: http://rex.mamy.to/ diff -r -u z80-asm-org/disasm.c z80-asm/disasm.c --- z80-asm-org/disasm.c Fri Apr 28 15:28:14 2000 +++ z80-asm/disasm.c Sun Oct 14 19:42:04 2001 @@ -181,7 +181,7 @@ switch(t1) { case A_PODLE_NUM: - sprintf(arg1,"(%u)",a1); + sprintf(arg1,"(%04x)",a1); break; default: @@ -191,11 +191,11 @@ switch(t2) { case A_PODLE_NUM: - sprintf(arg2,"(%u)",a2); + sprintf(arg2,"(%04x)",a2); break; case A_NUM: - sprintf(arg2,"%u",a2); + sprintf(arg2,"%04x",a2); break; default: @@ -368,10 +368,10 @@ if (t1==A_FLAG) { flag_str(t,a1); - sprintf(txt,"call %s,%u",t,a2); + sprintf(txt,"call %s,%04x",t,a2); } else - sprintf(txt,"call %d",a1); + sprintf(txt,"call %04x",a1); print(txt); break; @@ -720,7 +720,7 @@ { case M_PRINT: reg_str(t,a1,t1); - if (t2==A_NUM)sprintf(tt,"%d",a2); + if (t2==A_NUM)sprintf(tt,"%04x",a2); else reg_str(tt,a2,t2); sprintf(txt,"add %s,%s",t,tt); print(txt); @@ -857,7 +857,7 @@ switch(mode) { case M_PRINT: - if (t1==A_NUM)sprintf(t,"%u",a1); + if (t1==A_NUM)sprintf(t,"%04x",a1); else reg_str(t,a1,t1); sprintf(txt,"sub %s",t); print(txt); @@ -917,7 +917,7 @@ { case M_PRINT: reg_str(t,a1,t1); - if (t2==A_NUM)sprintf(tt,"%d",a2); + if (t2==A_NUM)sprintf(tt,"%04x",a2); else reg_str(tt,a2,t2); sprintf(txt,"sbc %s,%s",t,tt); print(txt); @@ -1022,7 +1022,7 @@ { case M_PRINT: reg_str(t,a1,t1); - if (t2==A_NUM)sprintf(tt,"%d",a2); + if (t2==A_NUM)sprintf(tt,"%04x",a2); else reg_str(tt,a2,t2); sprintf(txt,"adc %s,%s",t,tt); print(txt); @@ -1149,7 +1149,7 @@ { case A_FLAG: flag_str(t,a1); - sprintf(txt,"jp %s,%u",t,a2); + sprintf(txt,"jp %s,%04x",t,a2); break; case A_PODLE_REG: @@ -1158,7 +1158,7 @@ break; default: - sprintf(txt,"jp %d",a1); + sprintf(txt,"jp %04x",a1); break; } print(txt); @@ -1352,7 +1352,7 @@ switch(mode) { case M_PRINT: - if (t1==A_NUM)sprintf(t,"%d",a1); + if (t1==A_NUM)sprintf(t,"%02x",a1); else reg_str(t,a1,t1); sprintf(txt,"and %s",t); print(txt); @@ -1412,7 +1412,7 @@ switch(mode) { case M_PRINT: - if (t1==A_NUM)sprintf(t,"%d",a1); + if (t1==A_NUM)sprintf(t,"%02x",a1); else reg_str(t,a1,t1); sprintf(txt,"xor %s",t); print(txt); @@ -1472,7 +1472,7 @@ switch(mode) { case M_PRINT: - if (t1==A_NUM)sprintf(t,"%d",a1); + if (t1==A_NUM)sprintf(t,"%02x",a1); else reg_str(t,a1,t1); sprintf(txt,"or %s",t); print(txt); @@ -1532,7 +1532,7 @@ switch(mode) { case M_PRINT: - if (t1==A_NUM)sprintf(t,"%d",a1); + if (t1==A_NUM)sprintf(t,"%02x",a1); else reg_str(t,a1,t1); sprintf(txt,"cp %s",t); print(txt); @@ -1712,7 +1712,7 @@ if (mode==M_PRINT) { - if (t1==A_PODLE_NUM)sprintf(tf,"%d",a1); + if (t1==A_PODLE_NUM)sprintf(tf,"%02x",a1); else sprintf(tf,"c"); reg_str(ts,a2,t2); sprintf(txt,"out (%s),%s",tf,ts); @@ -1730,7 +1730,7 @@ if (mode==M_PRINT) { - if (t2==A_PODLE_NUM)sprintf(ts,"%d",a2); + if (t2==A_PODLE_NUM)sprintf(ts,"%02x",a2); else sprintf(ts,"c"); reg_str(tf,a1,t1); sprintf(txt,"in %s,(%s)",tf,ts); diff -r -u z80-asm-org/k_layout.h z80-asm/k_layout.h --- z80-asm-org/k_layout.h Wed Apr 26 14:36:15 2000 +++ z80-asm/k_layout.h Mon Oct 15 17:27:36 2001 @@ -34,14 +34,16 @@ c_goto(0,15); c_print("m set memory dump start address"); c_goto(0,16); -c_print("t toggle turbo"); +c_print("t cycle turbo (NO,TURBO,QUIET)"); c_goto(0,17); -c_print("tab toggle follow"); +c_print("tab cycle follow (mem,PC,HL,DE,BC,IX,IY)"); c_goto(0,18); c_print("f toggle flags"); c_goto(0,19); c_print("d toggle EI/DI"); c_goto(0,20); c_print("i change IM"); +c_goto(0,21); +c_print("o set breakpoint"); #endif diff -r -u z80-asm-org/z80-dis.c z80-asm/z80-dis.c --- z80-asm-org/z80-dis.c Tue May 2 15:28:38 2000 +++ z80-asm/z80-dis.c Sun Oct 14 22:08:07 2001 @@ -16,7 +16,7 @@ _uchar A,B,C,D,E,F,H,L,I,R; _uchar A_,B_,C_,D_,E_,F_,H_,L_; _uchar IM,EI; -_ushort PC,SP,IX,IY,MEMP; +_ushort PC,SP,IX,IY,MEMP,BKP; char string[256]; char load_name[256]; char save_name[256]; @@ -289,7 +289,7 @@ sprintf(txt," %04x ",current_pc); c_goto(0,row); - c_setcolor(row==12?15:11); + if (current_pc==BKP) c_setcolor(9); else c_setcolor(row==12?15:11); c_print(txt); c_setcolor(row==12?15:7); c_print(str); @@ -577,8 +577,22 @@ int r,c; _ushort memp; - if (follow)memp=PC; - else memp=MEMP; + memp=MEMP; + switch(follow) + { + case 1: memp=PC; + break; + case 2: memp=256*H+L; + break; + case 3: memp=256*D+E; + break; + case 4: memp=256*B+C; + break; + case 5: memp=IX; + break; + case 6: memp=IY; + break; + } c_goto(14,0); c_setcolor(10); @@ -616,11 +630,29 @@ { c_goto(0,23); c_setcolor(13); - c_print(follow?"FOLLOW ":" "); - c_goto(7,23); + switch(follow) + { + case 0: c_print(" "); + break; + case 1: c_print("FOLLOW PC "); + break; + case 2: c_print("FOLLOW HL "); + break; + case 3: c_print("FOLLOW DE "); + break; + case 4: c_print("FOLLOW BC "); + break; + case 5: c_print("FOLLOW IX "); + break; + case 6: c_print("FOLLOW IY "); + break; + } + c_goto(10,23); c_print(run?"RUN ":" "); - c_goto(11,23); - c_print(turbo?"TURBO ":" "); + c_goto(14,23); + if (turbo==0) c_print(" "); + else if (turbo==1) c_print("TURBO "); + else c_print("QUIET "); c_setcolor(7); } @@ -653,6 +685,7 @@ void reset(void) { + BKP=0; PC=0; MEMP=0; A=0;B=0;C=0;D=0;E=0;F=0;H=0;L=0;I=0;R=0; @@ -825,8 +858,14 @@ { mode=M_EXEC; decode(0,1); - if (!turbo)print_panel(); - else print_regs(); + if (turbo==0) print_panel(); + else + if (turbo==1) print_regs(); + if (PC==BKP) + { + run=0; + print_panel(); + } } else { @@ -894,7 +933,8 @@ case 't': /* turbo */ case 'T': - turbo^=1; + turbo+=1; + if (turbo==3) turbo=0; print_panel(); break; @@ -984,7 +1024,8 @@ break; case K_TAB: - follow^=1; + follow+=1; + if (follow==7) follow=0; print_panel(); break; @@ -1016,6 +1057,15 @@ write_header(stream,PC); fwrite(memory+PC,1,x,stream); fclose(stream); + print_panel(); + break; + + case 'o': /* breakpoint */ + case 'O': + x=ask("Breakpoint=",BKP); + if (x<0||x>65535){c_bell();print_status();break;} + run=0; + BKP=x; print_panel(); break; }