DEBUG - system rpl debugger ~~~~~~~~~~~~~~~~~~~~~~~~~~~ SDBG ( ob --> ) Starts system rpl debugger with the program on stk1 (Or ID/LAM/ROMPTR) ->SST Single steps one instruction. ->IN Single steps one instruction. Secondaries/romptrs/ids/lams are stepped into if they contain a program. SNXT Displays next commands. Second press displays return stack contents. SST-> Single steps in slow-mo. Second press starts fast-mo in which stack display is not updated. IN-> Similar to above with ->IN. DHALT Similar to HALT, but exits similarly to other debugger commands. (4/5/7 is executed if it is found to exist) DBRK ( ob --> ) Sets breakpoint command. SST-> and IN-> are stopped if ob was executed. DEXEC ( ob --> ) Executes stk1 on top of debugged program. Execution is done by adding COLA DHALT commands to stk1 and evaluating it on top of the debugged body that is on the return stack. With this you can make your own debugger commands but be careful not to use return stack levels below the program, you could mix up the original UI that is returned to after finished the debugger. Example commands: Skip next command: :: ' :: RSKIP ; DEXEC ; Drop current stream: :: ' RDROP DEXEC ; (The difference is due to the fact that RSKIP already is a secondary.) Drop return stack: :: ' :: RSWAP RDROP ; DEXEC ; Recall current stream: :: ' :: R@ ; DEXEC ; Setting new PC: (hxs --> ) :: CK1&Dispatch ELEVEN :: HXS># #5- PTR C612 (RclData) ' :: RDROP >R ; DEXEC ; ; LOOPS Displays data in loop environments. Use up/down arrows to scroll through the environments. LAMS Not implemented yet. IN? Toggles debugging into secondaries (to avoid unnecessary debugging of subroutines when using IN). Does not affect IN for IDs/LAMs/ROMPTRs . Notes about HP commands: CONT works normally. KILL does not destroy error traps nor loop environments. :( To use HALT (or DHALT) start SDBG first, then press CONT.