-DEBUGGER

Upper Case Letter required, can omit Lower case letters

 ReSeT - Does RESET and then Stops
 PowerOnReset - Does POR and then Stops
 HALT - Stops execution NOW
 STOPrun  - Stops execution at instruction boundary
 Go - Loads PC and then Stops at New PC
 STep / Tr executes one instruction at current state and then Stops
 TrackTRace <x> x=0 no track x=1 track - causes each instruction stepped to be shown
 RUN - executes from current state
 VERsion[ <43|44|45>] - Sets Vdos Version for SYSPAR and CRASHSAVE
 SYSPAR - Displays VersaDOS SYSPAR
 CrashSave[ <address>] - Displays VersaDOS Crashsave area
 CCB[ <CCBAddress>] - displays VersaDOS CCB
 ITRace <x> x=1 Enable Trace Table or x=0 to Disable
 DTT <Count> - Display Trace Table
 EI  - Enable Interrupts
 DI  - Disable Interrupts
 DIS <x> x=1 - Disable Interrupts on Stop x=0 NOT
  Must use EI to re-enable interrupts after Stop
 ADDResses- Display SCM and I/O Channel addresses
 SCM - Display SCM registers
 DRAM x - Display SCM Display Ram  x=0|1
 GRAM - Display SCM Character Generator Ram
 ARAM - Display SCM Character Attribute Ram
 MMU - Display MMU registers
 MMUD - Display MMU Descriptors
 MMUC - Display MMU AST Cache
 TAD[ <address>[,<fc>]] - Translate Address using FC 1,2,5,6
 UMMU <x> x=1 Use MMU or x=0 Not use MMU for Dissassembly
 RWIN - Display RWIN's Command and Sense registers
 DRIVES - Display RWIN's Drive Parameters
 CLOCK - Display MC1468hc18 registers
 CRTC - Display MC6845 registers
 CMOS - Display CMOS RAM
 SN2661 - Display SN2661 registers
 M410 - Display MVME410's Command and Data registers
 M400Cx - x= 0 or 1 Display MVME400's 7201 and 6820 state
 DR / DF / RD Displays registers
 SBRx <address> Set Breakpoint x=0-3
 DBRx  Delete Breakpoint x=0-3
 BR  Show Breakpoints
 SMWx <addr> <count> Set Memory Watch 0-1
 SDMWx A<0-7> <count> Set Dynamic Memory Watch 0-1
 SM[.s] <address> <data> Set Memory s=B/W/L
 DM[.s] <address> <count> Display Memory s=B/W/L
 BF[.s] <addr32>,<data>,<len32> Block Fill Memory s=B/W/L
 ZM.B <addr32>,<len32> Zero Fill Memory
 URA <x> x=1 Use Ram Array or x=0 Use CPU access routines
  Must use CPU access routines to access IO devices
  safer to use Ram Array, to access Memory
 List <address> <count> Disassemble instructions
 7BIT <x> x=1 Display 7 bit Ascii or x=0 Display 8 bit ANSI
 DIH <x> x=1 Display Displacements in Hex or x=0 Display in Decimal
 SDC.s <start> <end> Disassemble as s=Byte/Word/Long Constants
 SCODE <start> <end> Disassemble as Instructions
 FreQuency <start address> <end address>
 FindFreQuency <Count>
 RFQ or CFQ  - reset Frequency

  Find.s <startaddr> <endaddr> [<FCnum>] s=B/W/L
  DefineFindCriteria[ FCnum][ AmbiguousSpec[ AmbiguousSpec]...]
   AmbiguousSpec= 0x<hex2>|0b<bin8>|<charstr> (Question marks match anything)
   example ...
     >>DFC 4 0x?4 0b11??0000 Te?t 0x20 it
     >>Find $10000 $20000 4

 Use . to refer to registers
 .<reg>.s <value> to Set register s=B/W/L
    .A0 - .A7 .D0 -.D7
    .SFC .DFC .VBR .PC .SR .CCR





Warning - the debugger assumes all addresses are Physical. If the MMU is enabled, this is NOT true, and things dont work quite right. For instance, a breakpoint at $1000 will occur when the PC contains the value $1000, even if the MMU is translating. If the PC contains 2000 and the MMU translates to 1000, NO break will occur. (may try to fix this later)

If a task is loaded at $1b000, and the MMU translates $1000 to $1b000, and a breakpoint is at $1000, note that the debugger will break at the Logical address $1000 ($1b000) or at physical address $1000($1000). As long as the PC contains $1000.

When the system stops, the register panel will display an instruction at the PC. The disassembler has been modified to translate the PC to physical, so that the right instruction gets dissassembled. 

Well sometimes NOT. Since, the MMU is dynamically loaded, if the Address in the PC does NOT have an MMU descriptor for it (right NOW), the translation fails (quietly) and the LOG address = Phy address. In this case, the wrong instruction gets disassembled. The Register display area turns PINK if the LOG is NOT equal to the PHY, whiich indicates that the MMU translated the LOG to a different PHY.

The LIST debugger command, also, translates the log=phy so that the dissassembly is at the physical memory address, using the current mode, Super or User, program space.

You can manually translate an address with the TAD command. This uses a special routine that uses the actual MMU descriptors to do the translation, without modifying the state of the MMU.

All translations are subject to a MMU descriptor being currently loaded for the address being translated. 

For stuff in the debugger, you can choose to Use MMU or Not Use MMU, with the UMMU 0/1 command.

The debugger was mainly implemented to debug the emulator. It is not removed, because some people may find it useful. 

Each OS has its own task level debuggers. CPM - DDT and SID...VersaDOS - Debug and SYMBUG...They do the LOG translation to PHY correctly. 

Versados has a program to study OS parameters, called SYSANAL