CONBUF_SIZE equ 80 ;Size of console input buffer\r
EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints\r
BP_CNT equ 12 ;Number of breakpoints\r
-BP_SIZE equ 8 ;Size of a breakpoint record\r
+BP_SIZE equ 6 ;Size of a breakpoint record\r
\r
;-------------------------------------------------------------------------------\r
\r
dw ERROR ;cmd_@ ;examine/substitute the displacement register @\r
dw ERROR ;cmd_A ;Assemble\r
dw cmd_B ;Breakpoints display/set/clear\r
- dw cmd_C ;trace over Calls\r
+ dw ERROR ;cmd_C ;trace over Calls\r
dw cmd_D ;Display memory in hex and ascii\r
dw ERROR ;\r
dw cmd_F ;specify Filename and command line\r
call bp_clr_temporary\r
ld hl,(cmd_rpt)\r
ld de,mainloop\r
+ push de\r
call cp_hl_de\r
ld a,'>'\r
call outchar\r
call get_line\r
call skipbl\r
jr z,exe_hl\r
- ld hl,mainloop\r
+ pop hl\r
+ push hl\r
ld (cmd_rpt),hl\r
inc de\r
sub '@'\r
inc hl\r
ld h,(hl)\r
ld l,a\r
-\r
exe_hl:\r
- call CALL_HL\r
- jr mainloop\r
+ jp (hl)\r
\r
;-------------------------------------------------------------------------------\r
\r
\r
cmd_G:\r
sub a\r
- ld (trace_call_flag),a\r
ld (bp_p_cpu_flag),a\r
call expr\r
jr c,l0740h\r
ld a,(ix+000h)\r
and 0f1h\r
ld (ix+000h),a\r
- call bp_clr_condition\r
\r
call bpl_next\r
ret\r
; clear breakpoints\r
;\r
; where breakp is:\r
-; [R] expression [I condition]\r
+; expression\r
\r
cmd_B:\r
call skipbl\r
jr nz,l07aeh\r
l07a7h:\r
ld (ix+000h),000h\r
- call bp_clr_condition\r
l07aeh:\r
pop af\r
call bpl_next\r
ret\r
\r
bp_print:\r
+ ld c,0\r
call bpl_init\r
\r
bit 0,(ix+000h)\r
jr z,bp_pr_cont\r
- ld a,'R'\r
- bit 4,(ix+000h)\r
- jr nz,l07cdh\r
- ld a,' '\r
-l07cdh:\r
- call outchar\r
- call outbl\r
ld l,(ix+002h)\r
ld h,(ix+003h)\r
call out_hl\r
- call pstr_inl\r
- dc ' :'\r
- ld l,(ix+004h)\r
- ld h,(ix+005h)\r
- call out_hl\r
- ld l,(ix+006h)\r
- ld h,(ix+007h)\r
- ld a,h\r
- or l\r
- jr z,l0805h\r
- call outbl4\r
- call pstr_inl\r
- dc 'I '\r
- call pstr\r
-l0805h:\r
- call crlf\r
+ call outbl2\r
+ inc c\r
bp_pr_cont:\r
call bpl_next\r
+ ld a,c\r
+ or a\r
+ call nz,crlf\r
ret\r
\r
;-------------------------------------------------------------------------------\r
ld b,a\r
call skipbl\r
ret z\r
- cp 'R'\r
- jr nz,bp_e_1\r
- inc de\r
- set 4,b\r
-bp_e_1:\r
+\r
push bc\r
call expr\r
jr c,error12\r
call bp_get_count\r
ld (ix+004h),l\r
ld (ix+005h),h\r
- call bp_get_condition\r
- ld (ix+006h),l\r
- ld (ix+007h),h\r
call next_arg\r
pop af\r
ld (ix+000h),a\r
jr c,error12\r
ret\r
\r
-bp_get_condition:\r
- call skipbl\r
- cp 'I'\r
- ld hl,0\r
- ret nz\r
- inc de\r
- call skipbl\r
- push de\r
- call expr\r
- jr c,error12\r
- ex de,hl\r
- pop de\r
- push de\r
- sbc hl,de\r
- ld b,h\r
- ld c,l\r
- ld hl,(expr_p1)\r
- push hl\r
- add hl,bc\r
- ld de,expr_bufe\r
- call cp_hl_de\r
- jr nc,error12\r
- pop de\r
- pop hl\r
- push de\r
- ldir\r
- ex de,hl\r
- ld (hl),c ; trailing 0\r
- inc hl\r
- ld (expr_p1),hl\r
- pop hl\r
- ret\r
-\r
;-------------------------------------------------------------------------------\r
; Breakpoint handling routine.\r
\r
ex af,af'\r
res 7,a\r
ex af,af'\r
- ld e,(ix+006h)\r
- ld d,(ix+007h)\r
- ld a,d\r
- or e\r
- ld hl,0ffffh\r
- call nz,expr\r
- ld a,h\r
- or l\r
- jr z,l0969h\r
ld e,(ix+004h)\r
ld d,(ix+005h)\r
dec de\r
jr z,l0974h\r
ld (ix+004h),e\r
ld (ix+005h),d\r
-l0969h:\r
- bit 4,(ix+000h)\r
- ret z\r
- ld a,001h\r
- ld (bp_p_cpu_flag),a\r
ret\r
l0974h:\r
ex af,af'\r
ld (ix+005h),000h\r
ld (ix+002h),l\r
ld (ix+003h),h\r
- ld (ix+006h),000h\r
- ld (ix+007h),000h\r
ld a,(b_21e2_start)\r
and a\r
ld a,008h\r
ld sp,(reg_sp)\r
jp reg.iff\r
\r
-;-------------------------------------------------------------------------------\r
-\r
-bp_clr_condition:\r
- ld a,(ix+000h)\r
- and 003h\r
- ret nz\r
- ld e,(ix+006h)\r
- ld d,(ix+007h)\r
- ld a,d\r
- or e\r
- ret z\r
- push bc\r
- ld h,d\r
- ld l,e\r
- sub a\r
- ld (ix+006h),a\r
- ld (ix+007h),a\r
- ld bc,0ffffh\r
- cpir\r
-l0a7dh:\r
- push de\r
- ld de,(expr_p1)\r
- call cp_hl_de\r
- pop de\r
- jr nc,l0a93h\r
- call sub_0a99h\r
-l0a8bh:\r
- ld a,(hl)\r
- ldi\r
- and a\r
- jr nz,l0a8bh\r
- jr l0a7dh\r
-l0a93h:\r
- ld (expr_p1),de\r
- pop bc\r
- ret\r
-\r
-sub_0a99h:\r
- ld iy,bp_tab\r
- push de\r
-l0a9eh:\r
- ld e,(iy+006h)\r
- ld d,(iy+007h)\r
- call cp_hl_de\r
- jr z,l0ab0h\r
- ld de,BP_SIZE\r
- add iy,de\r
- jr l0a9eh\r
-l0ab0h:\r
- pop de\r
- ld (iy+006h),e\r
- ld (iy+007h),d\r
- ret\r
-\r
;-------------------------------------------------------------------------------\r
; > Y\r
; examine all Y variables\r
ex de,hl\r
ld hl,t_reg_names\r
call sel_dc_string\r
-l0c12h:\r
call l0c33h\r
\r
call outbl\r
; Input a byte from port\r
\r
cmd_I:\r
- ld hl,cmd_I\r
ld (cmd_rpt),hl\r
ld hl,(last_I)\r
call get_lastarg_def\r
; Output a byte to a port\r
\r
cmd_O:\r
- ld hl,cmd_O\r
ld (cmd_rpt),hl\r
ld hl,(last_O_val)\r
call get_arg_def\r
; off all loaded files, and Top address of available memory\r
; > H expression\r
; evaluate expression and display result in hex, decimal and other formats\r
-; > H expression expression\r
-; display sum und difference of expressions\r
\r
cmd_H:\r
call expr\r
jp c,p_max_high0\r
- call next_arg\r
- push hl\r
- call expr\r
- push af\r
call assert_eol\r
- pop af\r
- ex de,hl\r
- pop hl\r
- jr c,l0e5eh\r
- push hl\r
- push de\r
- add hl,de\r
- call l0e5eh\r
- pop de\r
- pop hl\r
- and a\r
- sbc hl,de\r
-l0e5eh:\r
call out_hl\r
call outbl2\r
call out_hl_neg\r
; Display memory in hex and ASCII\r
\r
cmd_D:\r
- ld hl,cmd_D\r
ld (cmd_rpt),hl\r
ld hl,(last_D)\r
ld bc,128\r
; List disassembled code\r
\r
cmd_L:\r
- ld hl,cmd_L\r
ld (cmd_rpt),hl\r
call expr\r
jr nc,l18dbh\r
;-------------------------------------------------------------------------------\r
; call mn call cc,mn\r
l2080h:\r
- ld a,(b_21e2_start)\r
- and a\r
- jr nz,l208bh\r
- ld a,(trace_call_flag)\r
- and a\r
- ret nz\r
\r
; jp mn jp cc,mn\r
l208bh:\r
jp (hl)\r
\r
l20dch:\r
- ld a,(b_21e2_start)\r
- and a\r
- jr nz,l20edh\r
- ld a,(trace_call_flag)\r
- and a\r
- jr z,l20edh\r
- call l20edh\r
- pop hl\r
- ret\r
l20edh:\r
ld hl,(reg_sp)\r
ld e,(hl)\r
ld h,000h\r
ld a,(b_21e2_start)\r
and a\r
- jr nz,l2113h\r
- ld a,(trace_call_flag)\r
- and a\r
- ret nz\r
-l2113h:\r
+ ret z\r
+\r
scf\r
ret\r
\r
; >>C[N][J] U expression\r
; trace over Calls [No list] [Jumps only] /.While./.Until.\r
\r
-cmd_C:\r
- ld hl,cmd_C\r
- ld a,1\r
- jr cmd_tc\r
\r
;-------------------------------------------------------------------------------\r
; >>T[N][J] [steps]\r
; Trace [no List] [Jumps only] / .While. / .Until.\r
\r
cmd_T:\r
- xor a\r
- ld hl,cmd_T\r
-cmd_tc:\r
ld (cmd_rpt),hl\r
- ld (trace_call_flag),a\r
- call get_char_upper\r
- sub 'N'\r
- jr nz,tc_non\r
- inc de\r
-tc_non:\r
- ld (trace_N_flag),a\r
- call get_char_upper\r
- sub 'J'\r
- jr nz,tc_noj\r
- inc de\r
-tc_noj:\r
- ld (trace_J_flag),a\r
- call tc_chk_u_or_w\r
- jr z,tc_save_uw_expr_ptr\r
ld hl,1 ;default: 1 step\r
call get_lastarg_def\r
-tc_save_uw_expr_ptr:\r
ld (trace_cnt_or_ptr),hl\r
sub a\r
ld (bp_p_cpu_flag),a\r
-l214ch:\r
call tc_set_bp\r
jr user_go1\r
\r
l2151h:\r
call bp_clr_temporary\r
- ld a,(trace_J_flag)\r
- and a\r
- jr nz,l216bh\r
- ld iy,(reg.pc)\r
- call sub_21c8h\r
- jr z,l216bh\r
- ld hl,b_2048_start\r
- call lookup_opc\r
- jr nc,l214ch\r
-l216bh:\r
- ld a,(trace_UW_flag) ;0 or 'U' or 'W'\r
- and a\r
- jr z,tc_cnt ;flag is 0, check for step count.\r
- ld de,(trace_cnt_or_ptr)\r
- call expr\r
- ld a,h\r
- or l\r
- add a,0ffh\r
- sbc a,a\r
- ld hl,trace_UW_flag ;'U' or 'W'\r
- xor (hl)\r
- bit 1,a ;'U' = 55H, 'W' = 57H\r
- jr z,l2193h\r
-do_break0: ;print registers and go to main loop\r
- jp do_break\r
-\r
-tc_cnt:\r
ld hl,(trace_cnt_or_ptr)\r
dec hl\r
ld (trace_cnt_or_ptr),hl\r
ld a,h\r
or l\r
- jr z,do_break0\r
-l2193h:\r
+ jp z,do_break\r
+\r
call tc_set_bp\r
- jr nc,do_break0\r
- ld a,(trace_N_flag)\r
- ld b,a\r
- ld a,(bp_p_cpu_flag)\r
- or b\r
+ jp nc,do_break\r
+ sbc a,a\r
ld (bp_p_cpu_flag),a\r
user_go1:\r
jp user_go\r
\r
-tc_chk_u_or_w:\r
- call skipbl\r
- xor a\r
- ld (trace_UW_flag),a\r
- call get_char_upper\r
- cp 'U'\r
- jr z,l21b5h\r
- cp 'W'\r
- ret nz\r
-l21b5h:\r
- inc de\r
- push af\r
- push de\r
- call expr\r
- jp c,ERROR\r
- call assert_eol\r
- pop hl\r
- pop af\r
- ld (trace_UW_flag),a\r
- sub a\r
- ret\r
-\r
-sub_21c8h:\r
- ld a,(iy+000h)\r
- cp 0edh\r
- jr z,l21dah\r
- and 0dfh\r
- cp 0ddh\r
- ret nz\r
- ld a,(iy+001h)\r
- cp 0e9h\r
- ret\r
-l21dah:\r
- ld a,(iy+001h)\r
- and 0f7h\r
- cp 045h\r
- ret\r
-\r
;-------------------------------------------------------------------------------\r
\r
con_col:\r
\r
b_21e2_start:\r
db 0\r
-trace_call_flag:\r
- db 0 ;1=call, 0=trace\r
-trace_UW_flag:\r
- db 0 ;0 or 'U' or 'W'\r
trace_cnt_or_ptr:\r
dw 0\r
-trace_N_flag:\r
- db 0 ;0 if 'N'\r
-trace_J_flag:\r
- db 0 ;0 if 'J'\r
\r
bp_p_cpu_flag:\r
db 0\r
endm\r
endm\r
\r
-expr_p1:\r
- dw expr_buf\r
-\r
expr_buf:\r
current_cseg defl $ - current_cseg\r
.phase current_phase + current_cseg\r