: .b ( n -- ) base @ >r hex 00 <# # # #> r> base ! type space ;
: .w ( n -- ) base @ >r hex 00 <# # # # # #> r> base ! type space ;
: .l ( n -- ) base @ >r hex 00 <# # # # # # # # # #> r> base ! type space ;
: ?b ( a -- ) @ .b ; : ?byte ( a -- ) @byte .b ;
: ?w ( a -- ) @ .w ; : ?word ( a -- ) @word .w ;
: ?l ( a -- ) @ .l ; : ?long ( a -- ) @long .l ;
\ Ascii dump
: .addr ( n -- ) base @ >r hex 00 <# 58 hold # # # # # # # # #> r> base ! cr type space ;
: .a ( n -- )
dup 32 < if 46 else
dup 128 < if dup else
46
then then emit drop ;
: ?a @byte .a ;
: da ( addr count -- )
over + over
do
i over - 64 mod 0= if i .addr then
i ?a
loop drop cr ;
\ Word dump
: dw ( addr count -- )
2 * over + over
do
i over - 24 mod 0= if i .addr then
i ?word
2 +loop drop cr ;
\ Long dump
: dd ( addr count -- )
4 * over + over
do
i over - 24 mod 0= if i .addr then
i ?long
4 +loop drop cr ;
\ Backtrace - dump the stack.
: bt ( -- )
pc @ fp @
begin
swap ln dup 4 + @long swap dup @long dup rot > 0=
until 2drop ;
\ Single step.
: step ( -- ) 0x8000 sr w@ or sr w! go ;
\ Step over, a next replacement (next doesn't work for bra, bcc and rts).
\ 0x61 = bsr, 0x4e4f = Systrap, 0x4E 10xx xxxx = JSR
: over ( -- )
pc @ @byte 0x61 = pc @ @word 0x4e4f = or
pc @ @word 0xFFC0 and 0x4E80 = or
if next else step then ;
\ Step out of the current routine.
: out ( addr -- ) fp @ 4 + @long to ;
\ Define more user-friendly "go" and "wait" words.
: wait-msg ( -- ) ." Waiting for debug event... " cr ;
: go ( -- ) wait-msg go ;
: wait ( -- ) wait-msg wait ;
\ Go directly into wait mode.
\ .( Type "bye" to exit. Type "help" for online help. ) cr
wait