From 0dba7af51bd1ea24738150bf02892ea3fb78fbdc Mon Sep 17 00:00:00 2001 From: Thomas Jentzsch Date: Fri, 7 May 2021 23:13:28 +0200 Subject: [PATCH] enhanced PromptWidget tab auto complete (camel case) --- docs/debugger.html | 313 +++++++-------- src/common/bspf.hxx | 44 ++- src/debugger/CartDebug.cxx | 8 +- src/debugger/Debugger.cxx | 64 +-- src/debugger/DebuggerParser.cxx | 566 +++++++++++++-------------- src/debugger/DebuggerParser.hxx | 74 ++-- src/debugger/gui/DebuggerDialog.cxx | 6 +- src/debugger/gui/PromptWidget.cxx | 2 +- src/debugger/gui/TiaOutputWidget.cxx | 6 +- src/yacc/YaccParser.cxx | 32 +- 10 files changed, 579 insertions(+), 536 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 8a3836630..d86d584c9 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -102,10 +102,10 @@ feature that no other 2600 debugger has; it's completely cross-platform.< breakpoints as you want.
  • Conditional breakpoints - Break running program when some arbitrary - condition is true (e.g. "breakif {a == $7f && c}" will break when the Accumulator value is $7f and the Carry flag is true, no matter where + condition is true (e.g. "breakIf {a == $7f && c}" will break when the Accumulator value is $7f and the Carry flag is true, no matter where in the program this happens). Unlike the cond breaks in PCAE, Stella's are *fast*: the emulation will run at full speed unless you use lots - of breakif's at the same time, or have a slow CPU.
  • + of breakIf's at the same time, or have a slow CPU.
  • Watches - View contents of a location/register before every debugger prompt.
  • @@ -172,7 +172,7 @@ feature that no other 2600 debugger has; it's completely cross-platform.<
  • Data sources for the CPU SP/A/X/Y registers, showing the resolved/source address of of load operands.
  • Scanline advance (like frame advance, break at beginning - of next scanline).
  • + of next scanLine).
  • TIA display is updated during step/trace, so we can see our scanlines being drawn as it happens. This isn't 100% perfect: unlike a real TIA, the one in Stella only updates when it's written to.
  • @@ -183,7 +183,7 @@ feature that no other 2600 debugger has; it's completely cross-platform.< named after the ROM image.
  • Saving the current debugger state to a script file (including breakpoints, traps, etc).
  • -
  • Built-in functions for use with "breakif", to support common conditions +
  • Built-in functions for use with "breakIf", to support common conditions (such as breaking when the user presses Game Select...)
  • Patching ROM in-place.
  • Save patched ROM
  • @@ -251,9 +251,9 @@ command on the command line, or alternatively within the ROM launcher in

    Using the ` key will always enter the debugger at the end of -the frame (for NTSC games usually scanline 262). This is because Stella only checks +the frame (for NTSC games usually scanLine 262). This is because Stella only checks for keystrokes once per frame. Once in the debugger, you can control -execution by stepping one instruction, scanline, or frame at a time +execution by stepping one instruction, scanLine, or frame at a time (or more than one at a time, using commands in the prompt). You can also set breakpoints or traps, which will cause the emulator to enter the debugger when they are triggered, even if it happens in mid-frame.

    @@ -408,7 +408,7 @@ in detail in the User's Guide.

    The debugger tracks changes to the CPU, TIA and RIOT registers and RAM by displaying changed locations or registers with a red background after each step, -trace, scanline, or frame advance. This sounds simple, and it is, but +trace, scanLine, or frame advance. This sounds simple, and it is, but it's also amazingly useful.

    One clarification about the change tracking: it only tracks when values @@ -476,7 +476,8 @@ completions (try with "tr" instead of "g"), you'll see a list of them, and your partial name will be completed as far as possible. After the first character, the autocompletion considers all characters in the right order as a match (e.g. "twf" will be completed to -"trapwriteif").

    +"trapWriteIf"). Alternatively you can make use of the camel case names and type +e.g. "tWI" ("trapWriteIf") or "lAS" ("LoadAllStates").

    Tab completion works on all labels: built-in, loaded from a symbol file, or set during debugging with the "define" command. It also works with @@ -630,10 +631,10 @@ set it. In the example, "break kernel" will remove the breakpoint. The "break" command can be thought of as a *toggle*: it turns the breakpoint on & off, like a light switch.

    -

    You could also use "clearbreaks" to remove all the breakpoints. Also, -there is a "listbreaks" command that will list them all.

    +

    You could also use "clearBreaks" to remove all the breakpoints. Also, +there is a "listBreaks" command that will list them all.

    -

    ¹ By enabling "logbreaks" you can log the current state into +

    ¹ By enabling "logBreaks" you can log the current state into the System Log and continue emulation instead.

    Conditional Breaks

    @@ -664,10 +665,10 @@ is the "!" operator): !(*SWCHB&1). The parentheses are necessary as we want to apply the ! to the result of the &, not just the first term (the "*SWCHB").

    -

    "breakif !(*SWCHB&1)" will do the job for us. However, it's an ugly mess +

    "breakIf !(*SWCHB&1)" will do the job for us. However, it's an ugly mess of letters, numbers, and punctuation. We can do a little better:

    -

    "breakif { !(*SWCHB & 1 ) }" is a lot more readable, isn't it? If +

    "breakIf { !(*SWCHB & 1 ) }" is a lot more readable, isn't it? If you're going to use readable expressions with spaces in them, enclose the entire expression in curly braces.

    @@ -676,9 +677,9 @@ condition that depends on input (like SWCHB) will always happen at the end of a frame. This is different from how a real 2600 works, but most ROMs only check for input once per frame anyway.

    -

    Conditional breaks appear in "listbreaks", numbered starting from -zero. You can remove a cond-break with "delbreakif number", where -the number comes from "listbreaks" or by entering the same conditional break again.

    +

    Conditional breaks appear in "listBreaks", numbered starting from +zero. You can remove a cond-break with "delBreakIf number", where +the number comes from "listBreaks" or by entering the same conditional break again.

    Any time the debugger is entered due to a trap, breakpoint, or conditional break, the reason will be displayed in the @@ -687,16 +688,16 @@ conditional break, the reason will be displayed in the

    Functions

    There is one annoyance about complex expressions: once we -remove the conditional break with "delbreakif" or "clearbreaks", +remove the conditional break with "delBreakIf" or "clearBreaks", we'd have to retype it (or search backwards with the up-arrow key) if we wanted to use it again.

    We can avoid this by defining the expression as a function, then using -"breakif function_name":

    +"breakIf function_name":

       function gameReset { !(*SWCHB & 1 ) }
    -  breakif gameReset
    +  breakIf gameReset
     

    Now we have a meaningful name for the condition, so we can use it again. @@ -706,16 +707,16 @@ if the Game Select switch is pressed. We want to break when the user presses both Select and Reset:

    -  breakif { gameReset && gameSelect }
    +  breakIf { gameReset && gameSelect }
     
    -

    User-defined functions appear in "listfunctions", which shows the label +

    User-defined functions appear in "listFunctions", which shows the label and expression for each function. Functions can be removed with -"delfunction label", where the labels come from "listfunctions".

    +"delFunction label", where the labels come from "listFunctions".

    Built-in Functions

    -

    Stella has some pre-defined functions for use with the "breakif" +

    Stella has some pre-defined functions for use with the "breakIf" command. These allow you to break and enter the debugger on various conditions without having to define the conditions yourself.

    @@ -726,24 +727,24 @@ Stella debugger.

    - - - - - - - - - - + + + + + + + + + + - - - - + + + +
    FunctionDefinitionDescription
    _joy0left !(*SWCHA & $40) Left joystick moved left
    _joy0right !(*SWCHA & $80) Left joystick moved right
    _joy0up !(*SWCHA & $10) Left joystick moved up
    _joy0down !(*SWCHA & $20) Left joystick moved down
    _joy0button !(*INPT4 & $80) Left joystick button pressed
    _joy1left !(*SWCHA & $04) Right joystick moved left
    _joy1right !(*SWCHA & $08) Right joystick moved right
    _joy1up !(*SWCHA & $01) Right joystick moved up
    _joy1down !(*SWCHA & $02) Right joystick moved down
    _joy1button !(*INPT5 & $80) Right joystick button pressed
    _joy0Left !(*SWCHA & $40) Left joystick moved left
    _joy0Right !(*SWCHA & $80) Left joystick moved right
    _joy0Up !(*SWCHA & $10) Left joystick moved up
    _joy0Down !(*SWCHA & $20) Left joystick moved down
    _joy0Fire !(*INPT4 & $80) Left joystick fire button pressed
    _joy1Left !(*SWCHA & $04) Right joystick moved left
    _joy1Right !(*SWCHA & $08) Right joystick moved right
    _joy1Up !(*SWCHA & $01) Right joystick moved up
    _joy1Down !(*SWCHA & $02) Right joystick moved down
    _joy1Fire !(*INPT5 & $80) Right joystick fire button pressed
    _select !(*SWCHB & $02) Game Select pressed
    _reset !(*SWCHB & $01) Game Reset pressed
    _color *SWCHB & $08 Color/BW set to Color
    _bw !(*SWCHB & $08) Color/BW set to BW
    _diff0b !(*SWCHB & $40) Left difficulty set to B (easy)
    _diff0a *SWCHB & $40 Left difficulty set to A (hard)
    _diff1b !(*SWCHB & $80) Right difficulty set to B (easy)
    _diff1a *SWCHB & $80 Right difficulty set to A (hard)
    _diff0B !(*SWCHB & $40) Left difficulty set to B (easy)
    _diff0A *SWCHB & $40 Left difficulty set to A (hard)
    _diff1B !(*SWCHB & $80) Right difficulty set to B (easy)
    _diff1A *SWCHB & $80 Right difficulty set to A (hard)

    Don't worry about memorizing them all: the Prompt "help" command @@ -759,36 +760,36 @@ that holds 'number of scanlines' on an actual console).

    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
    FunctionDescription
    _bank Currently selected bank
    _cclocks Color clocks on a scanline
    _cycleshi Higher 32 bits of number of cycles since emulation started
    _cycleslo Lower 32 bits of number of cycles since emulation started
    _fcount Number of frames since emulation started
    _fcycles Number of cycles since frame started
    _ftimreadcyclesNumber of cycles used by timer reads since frame started
    _fwsynccyclesNumber of cycles skipped by WSYNC since frame started
    _icycles Number of cycles of last instruction
    _scan Current scanline count
    _scanend Scanline count at end of last frame
    _scycles Number of cycles in current scanline
    _timwrapread Timer read wrapped on this cycle
    _timwrapwrite Timer write wrapped on this cycle
    _vblank Whether vertical blank is enabled (1 or 0)
    _vsync Whether vertical sync is enabled (1 or 0)
    _cClocks Color clocks on a scanLine
    _cyclesHi Higher 32 bits of number of cycles since emulation started
    _cyclesLo Lower 32 bits of number of cycles since emulation started
    _fCount Number of frames since emulation started
    _fCycles Number of cycles since frame started
    _fTimReadCyclesNumber of cycles used by timer reads since frame started
    _fWsyncCyclesNumber of cycles skipped by WSYNC since frame started
    _iCycles Number of cycles of last instruction
    _scan Current scanLine count
    _scanEnd Scanline count at end of last frame
    _sCycles Number of cycles in current scanLine
    _timWrapRead Timer read wrapped on this cycle
    _timWrapWrite Timer write wrapped on this cycle
    _vBlank Whether vertical blank is enabled (1 or 0)
    _vSync Whether vertical sync is enabled (1 or 0)
    -

    _scan always contains the current scanline count. You can use +

    _scan always contains the current scanLine count. You can use this to break your program in the middle of your kernel. Example:

    -    breakif _scan==#64
    +    breakIf _scan==#64
     

    This will cause Stella to enter the debugger when the TIA reaches the -beginning of the 64th scanline.

    +beginning of the 64th scanLine.

    _bank always contains the currently selected bank. For 2K or 4K (non-bankswitched) ROMs, it will always contain 0. One useful use is:

    -    breakif { pc==myLabel && _bank==1 }
    +    breakIf { pc==myLabel && _bank==1 }
     

    This is similar to setting a regular breakpoint, but it will only trigger @@ -807,8 +808,8 @@ pointed to by the Y register, even if the Y register changes.

    The watches are numbered. The numbers are printed along with the watches, so you can tell which is which. To delete a watch use the -"delwatch" command with the watch number (1 to whatever). You can -also delete them all with the "clearwatches" command.

    +"delWatch" command with the watch number (1 to whatever). You can +also delete them all with the "clearWatches" command.

    Note that there's no real point in watching a label or CPU register without dereferencing it: Labels are constants, and CPU registers @@ -821,7 +822,7 @@ accesses to a memory address, rather than specific location in the program. They're useful for finding code that modifies TIA registers or memory.

    -

    Traps can also combined with a condition ("trapif"). If an access +

    Traps can also combined with a condition ("trapIf"). If an access to a memory address is caught, the condition is evaluated additionally. Only if the condition is true too, the emulations stops. For details about conditions see Conditional Breaks described above.

    @@ -845,12 +846,12 @@ so the best we can do is stop before the next instruction runs.

    Traps come in two varieties: read access traps and write access traps. It is possible to set both types of trap on the same address (that's what the plain "trap" command does). To set a read or write only trap, -use "trapread(if)" or "trapwrite(if)". +use "trapRead(if)" or "trapWrite(if)". -

    All traps appear in "listtraps", numbered starting from zero. You -can remove a trap with "deltrap number", where the number comes from -"listtraps" or by entering the identical trap again. You can get rid of -all traps at once with the "cleartraps" command.

    +

    All traps appear in "listTraps", numbered starting from zero. You +can remove a trap with "delTrap number", where the number comes from +"listTraps" or by entering the identical trap again. You can get rid of +all traps at once with the "clearTraps" command.


    Save your work!

    @@ -872,45 +873,45 @@ later re-use.

    See Startup for details.
  • - saveconfig: The "saveconfig" command creates a + saveConfig: The "saveConfig" command creates a DiStella Configuration File which is based on Stella's dynamic and static analysis of the current ROM.

    This will be automatically loaded the next time your start the debugger. - From there on, you can continue analyzing the ROM and then use "saveconfig" - again to update the configuration. You can also use "loadconfig" to load it + From there on, you can continue analyzing the ROM and then use "saveConfig" + again to update the configuration. You can also use "loadConfig" to load it manually.

    Note that this is not tested for multi-banked ROMs.

  • - savedis: + saveDis: While your are playing or debugging a game, Stella will gather dynamic information about the ROM. It can then use that information together with a static analysis of the ROM and therefore create a better disassembly - than DiStella alone. "savedis" allows you to save that disassembly as the + than DiStella alone. "saveDis" allows you to save that disassembly as the result of this combined analysis.

    Note that this currently only works for single banked ROMs. For larger ROMs, the created disassembly is incomplete.

  • -

    saverom: - If you have manipulated a ROM, you can save it with "saverom". The file is +

    saveRom: + If you have manipulated a ROM, you can save it with "saveRom". The file is named "<rom_filename>.a26".

  • -

    saveses: - The "saveses" command dumps the whole prompt session into a file named +

    saveSes: + The "saveSes" command dumps the whole prompt session into a file named "<YYYY-MM-DD_HH-mm-ss>.txt". So you can later lookup what you did exactly when you were debugging at that time.

  • -

    saveallstates: +

    saveAllStates: This command works identical to the save all states hotkey (Alt + F9) during emulation. - The saved states can be loaded with "loadallstates".

    + The saved states can be loaded with "loadAllStates".

  • -

    savestate: +

    saveState: This command works identical to the save state hotkey (F9) during emulation. - Any previously saved state can be loaded with "loadstate" plus the slot + Any previously saved state can be loaded with "loadState" plus the slot number (0-9).

  • @@ -925,63 +926,63 @@ Type "help 'cmd'" to see extended information about the given command.

    a - Set Accumulator to <value> aud - Mark 'AUD' range in disassembly base - Set default number base to <base> (bin, dec, hex) - bcol - Mark 'BCOL' range in disassembly + bCol - Mark 'BCOL' range in disassembly break - Set/clear breakpoint at <address> and <bank> - breakif - Set/clear breakpoint on <condition> - breaklabel - Set/clear breakpoint on <address> (no mirrors, all banks) + breakIf - Set/clear breakpoint on <condition> + breakLabel - Set/clear breakpoint on <address> (no mirrors, all banks) c - Carry Flag: set (0 or 1), or toggle (no arg) cheat - Use a cheat code (see manual for cheat types) - clearbreaks - Clear all breakpoints - clearconfig - Clear DiStella config directives [bank xx] -clearsavestateifs - Clear all savestate points - cleartraps - Clear all traps - clearwatches - Clear all watches + clearBreaks - Clear all breakpoints + clearConfig - Clear DiStella config directives [bank xx] +clearSaveStateIfs - Clear all saveState points + clearTraps - Clear all traps + clearWatches - Clear all watches cls - Clear prompt area of text code - Mark 'CODE' range in disassembly col - Mark 'COL' range in disassembly - colortest - Show value xx as TIA color + colorTest - Show value xx as TIA color d - Decimal Mode Flag: set (0 or 1), or toggle (no arg) data - Mark 'DATA' range in disassembly - debugcolors - Show Fixed Debug Colors information + debugColors - Show Fixed Debug Colors information define - Define label xx for address yy - delbreakif - Delete conditional breakif <xx> - delfunction - Delete function with label xx - delsavestateif - Delete conditional savestate point <xx> - deltrap - Delete trap <xx> - delwatch - Delete watch <xx> - disasm - Disassemble address xx [yy lines] (default=PC) + delBreakIf - Delete conditional breakIf <xx> + delFunction - Delete function with label xx + delSaveStateIf - Delete conditional saveState point <xx> + delTrap - Delete trap <xx> + delWatch - Delete watch <xx> + disAsm - Disassemble address xx [yy lines] (default=PC) dump - Dump data at address <xx> [to yy] [1: memory; 2: CPU state; 4: input regs] [?] exec - Execute script file <xx> [prefix] - exitrom - Exit emulator, return to ROM launcher + exitRom - Exit emulator, return to ROM launcher frame - Advance emulation by <xx> frames (default=1) function - Define function name xx for expression yy gfx - Mark 'GFX' range in disassembly help - help <command> - joy0up - Set joystick 0 up direction to value <x> (0 or 1), or toggle (no arg) - joy0down - Set joystick 0 down direction to value <x> (0 or 1), or toggle (no arg) - joy0left - Set joystick 0 left direction to value <x> (0 or 1), or toggle (no arg) - joy0right - Set joystick 0 right direction to value (0 or 1), or toggle (no arg) - joy0fire - Set joystick 0 fire button to value <x> (0 or 1), or toggle (no arg) - joy1up - Set joystick 1 up direction to value <x> (0 or 1), or toggle (no arg) - joy1down - Set joystick 1 down direction to value <x> (0 or 1), or toggle (no arg) - joy1left - Set joystick 1 left direction to value <x> (0 or 1), or toggle (no arg) - joy1right - Set joystick 1 right direction to value <x> (0 or 1), or toggle (no arg) - joy1fire - Set joystick 1 fire button to value <x> (0 or 1), or toggle (no arg) + joy0Up - Set joystick 0 up direction to value <x> (0 or 1), or toggle (no arg) + joy0Down - Set joystick 0 down direction to value <x> (0 or 1), or toggle (no arg) + joy0Left - Set joystick 0 left direction to value <x> (0 or 1), or toggle (no arg) + joy0Right - Set joystick 0 right direction to value (0 or 1), or toggle (no arg) + joy0Fire - Set joystick 0 fire button to value <x> (0 or 1), or toggle (no arg) + joy1Up - Set joystick 1 up direction to value <x> (0 or 1), or toggle (no arg) + joy1Down - Set joystick 1 down direction to value <x> (0 or 1), or toggle (no arg) + joy1Left - Set joystick 1 left direction to value <x> (0 or 1), or toggle (no arg) + joy1Right - Set joystick 1 right direction to value <x> (0 or 1), or toggle (no arg) + joy1Fire - Set joystick 1 fire button to value <x> (0 or 1), or toggle (no arg) jump - Scroll disassembly to address xx - listbreaks - List breakpoints - listconfig - List DiStella config directives [bank xx] - listfunctions - List user-defined functions - listsavestateifs - List savestate points - listtraps - List traps - loadconfig - Load DiStella config file - loadallstates - Load all emulator states - loadstate - Load emulator state xx (0-9) - logbreaks - Logs breaks and traps and continues emulation + listBreaks - List breakpoints + listConfig - List DiStella config directives [bank xx] + listFunctions - List user-defined functions + listSaveStateIfs - List saveState points + listTraps - List traps + loadConfig - Load DiStella config file + loadAllStates - Load all emulator states + loadState - Load emulator state xx (0-9) + logBreaks - Logs breaks and traps and continues emulation n - Negative Flag: set (0 or 1), or toggle (no arg) palette - Show current TIA palette pc - Set Program Counter to address xx - pcol - Mark 'PCOL' range in disassembly - pgfx - Mark 'PGFX' range in disassembly + pCol - Mark 'PCOL' range in disassembly + pGfx - Mark 'PGFX' range in disassembly print - Evaluate/print expression xx in hex/dec/binary ram - Show ZP RAM, or set address xx to yy1 [yy2 ...] reset - Reset system to power-on state @@ -990,32 +991,32 @@ clearsavestateifs - Clear all savestate points rom - Set ROM address xx to yy1 [yy2 ...] row - Mark 'ROW' range in disassembly run - Exit debugger, return to emulator - runto - Run until string xx in disassembly - runtopc - Run until PC is set to value xx + runTo - Run until string xx in disassembly + runToPc - Run until PC is set to value xx s - Set Stack Pointer to value xx save - Save breaks, watches, traps and functions to file - saveaccess - Save access counters to CSV file [?] - saveconfig - Save DiStella config file (with default name) - savedis - Save DiStella disassembly to file [?] - saverom - Save (possibly patched) ROM to file [?] - saveses - Save console session to file [?] - savesnap - Save current TIA image to PNG file - saveallstates - Save all emulator states - savestate - Save emulator state xx (valid args 0-9) - savestateif - Create savestate on <condition> - scanline - Advance emulation by <xx> scanlines (default=1) + saveAccess - Save access counters to CSV file [?] + saveConfig - Save DiStella config file (with default name) + saveDis - Save DiStella disassembly to file [?] + saveRom - Save (possibly patched) ROM to file [?] + saveSes - Save console session to file [?] + saveSnap - Save current TIA image to PNG file + saveAllStates - Save all emulator states + saveState - Save emulator state xx (valid args 0-9) + saveStateIf - Create saveState on <condition> + scanLine - Advance emulation by <xx> scanlines (default=1) step - Single step CPU [with count xx] - stepwhile - Single step CPU while <condition> is true + stepWhile - Single step CPU while <condition> is true tia - Show TIA state trace - Single step CPU over subroutines [with count xx] trap - Trap read/write access to address(es) xx [yy] - trapif - On <condition> trap R/W access to address(es) xx [yy] - trapread - Trap read access to address(es) xx [yy] - trapreadif - On <condition> trap read access to address(es) xx [yy] - trapwrite - Trap write access to address(es) xx [yy] - trapwriteif - On <condition> trap write access to address(es) xx [yy] + trapIf - On <condition> trap R/W access to address(es) xx [yy] + trapRead - Trap read access to address(es) xx [yy] + trapReadIf - On <condition> trap read access to address(es) xx [yy] + trapWrite - Trap write access to address(es) xx [yy] + trapWriteIf - On <condition> trap write access to address(es) xx [yy] type - Show disassembly type for address xx [yy] - uhex - Toggle upper/lowercase HEX display + uHex - Toggle upper/lowercase HEX display undef - Undefine label xx (if defined) unwind - Unwind state state by one or [xx] steps/traces/scanlines/frames... v - Overflow Flag: set (0 or 1), or toggle (no arg) @@ -1115,12 +1116,12 @@ volume resulting from the two channel volumes.

    In the upper left of the debugger, you'll see the current frame of video as generated by the TIA. If a complete frame hasn't been drawn, the partial contents of the current frame will be displayed up to the -current scanline, with the contents of the old frame (in black & +current scanLine, with the contents of the old frame (in black & white) filling the rest of the display. Note that if 'phosphor mode' or TV effects are enabled, you won't see the effects here; this shows the raw TIA image only.

    -

    To e.g. watch the TIA draw the frame one scanline at a time, you can +

    To e.g. watch the TIA draw the frame one scanLine at a time, you can use the 'Scan+1' button, the prompt "scan" command or the Control-L key.

    You can also right-click anywhere in this window to show a context menu, @@ -1128,10 +1129,10 @@ as illustrated:

    The options are as follows:

      -
    • Fill to scanline: This option will draw all scanlines up to the +
    • Fill to scanLine: This option will draw all scanlines up to the vertical position where the mouse was clicked (see also TIA Zoom).
    • Toggle breakpoint: Will toggle a conditional breakpoint at the - scanline where the mouse was clicked. You can also use a left-click or + scanLine where the mouse was clicked. You can also use a left-click or the Prompt Tab commands to list and turn off the breakpoint (see also TIA Zoom).
    • Set zoom position: Influences what is shown in the TIA @@ -1152,27 +1153,27 @@ as illustrated:

      The indicators are as follows (note that all these are read-only):

      • Frame Cycls: The number of CPU cycles that have been executed this frame since -VSYNC was cleared at scanline 0.
      • +VSYNC was cleared at scanLine 0.
      • WSync Cycls: The number of CPU cycles that have been skipped by WSYNC this frame since -VSYNC was cleared at scanline 0.
      • +VSYNC was cleared at scanLine 0.
      • Timer Cycls: The number of CPU cycles (approximately) that have been used by timer read loops since -VSYNC was cleared at scanline 0.
      • +VSYNC was cleared at scanLine 0.
      • Total: The total number of CPU cycles since this ROM was loaded or reset.
      • Delta: The number of CPU cycles that have been executed since the last debugger interrupt.
      • Frame Cnt.: The number of frames since this ROM was loaded or reset.
      • -
      • Scanline: The scanline that's currently being drawn, and the count from the +
      • Scanline: The scanLine that's currently being drawn, and the count from the previous frame. Scanline 0 is the one on which VSYNC is cleared (after being set for 3 scanlines, as per the Stella Programmer's Guide).
      • Scan Cycle: The number of CPU cycles that have been executed since the beginning -of the current scanline.
      • +of the current scanLine.
      • Pixel Pos: The current number of visible color clocks that have been displayed on -the current scanline, starting from the beginning of the Horizontal Blank period. +the current scanLine, starting from the beginning of the Horizontal Blank period. During HBLANK, this value will be negative (representing the number of clocks until the first visible one). Since there are 68 color clocks per HBLANK and -160 visible clocks per scanline, the Pixel Position will range from -68 to 159.
      • +160 visible clocks per scanLine, the Pixel Position will range from -68 to 159.
      • Color Clock: The current number of total color clocks since the beginning of this -scanline's HBLANK. This counter starts at zero, but otherwise displays the same +scanLine's HBLANK. This counter starts at zero, but otherwise displays the same information as the Pixel Position (so Color Clock will always be 68 more than Pixel Position, and will range from 0 to 228).
      @@ -1190,10 +1191,10 @@ as illustrated:

      These options allow you to:

        -
      • Fill to scanline: This option will draw all scanlines up to the +
      • Fill to scanLine: This option will draw all scanlines up to the vertical position where the mouse was clicked.
      • Toggle breakpoint: Will toggle a conditional breakpoint at the - scanline where the mouse was clicked. You can also + scanLine where the mouse was clicked. You can also the Prompt Tab commands to list and turn off the breakpoint.
      • 2x|4x|8x zoom: Zoom in on the image for even greater detail.
      @@ -1379,7 +1380,7 @@ labels. Normally there will be nothing there: this indicates that there's no breakpoint set at that address. You can set and clear breakpoints by clicking in this area. When a breakpoint is set, there will be a red circle in this area. These are the same breakpoints as used -by the break command, not the conditional "breakif" breakpoints +by the break command, not the conditional "breakIf" breakpoints (which makes sense: conditional breaks can break on any condition, the Program Counter isn't necessarily involved).
    • Labels: Any labels assigned to the given address, either generated @@ -1477,7 +1478,7 @@ or lowercase for "illegal" 6502 instructions (like "dcp"). If automatic resolvin of code sections has been disabled for any reason, you'll likely see a lot of illegal opcodes if you scroll to a data table in ROM. This can also occur if the disassembler hasn't yet encountered addresses in the PC. -If you step/trace/scanline/frame advance into such an area, the disassembler +If you step/trace/scanLine/frame advance into such an area, the disassembler will make note of it, and disassemble it correctly from that point on.