Using NoICE

Menu and Toolbar
Click on a menu item or button for more information about its function.

The NoICE user interface consists of a dockable (top or bottom) toolbar, and three panes separated by movable splitter bars. The bottom pane displays one of several views, selected by a row of clickable tabs or the Window Menu. The tabs are Data, Output, View, Watch, and Memory.

These tabbed views can also be made to float free, either by double-clicking on the tab, or by using the Window Menu.


Data Window

The Data Window is used to show the output from several commands, including DUMP, VERSION, VALUE, and SYMBOL. The scroll bars and cursor keys may be used to examine previous output. The window also has a Context Menu.


Output (Terminal) Window

When using some target communications mechanisms, the Output Window is used as a "dumb terminal" interface to the target. This allows "printf" output from the target. The only control characters supported are carriage return (0D hex), line feed (0A hex), tab (09 hex), bell (07 hex), and backspace (08 hex). All other characters will be displayed using the current Windows character set. In some cases (noted below), there are restrictions of the usage of characters with hex values 0x80 and above.

In some cases (noted below), user keyhits can be passed to the target.

The scroll bars and cursor keys may be used to examine previous output. The window also has a Context Menu.

This feature is available only for the following communications mechanisms:

Terminal Interface Using NoICE Serial Protocol

While the target is running, the target program may use the UART to communicate with NoICE on the PC. If the target sends a byte in the range 0 to 127 decimal, NoICE will display it in the Output Window. Values 128 (0x80) and above are used by the Serial Protocol, and may not be used. If your target sends such a character, NoICE communications may be disrupted.

If keyboard focus is in the Output window and the user presses any key other than a function or cursor key while the target is executing, the ASCII representation of the key will be sent to the target via the serial port.

Terminal Interface Using AN2140 (HCS08) and AN2548 (MC9S12) Serial Monitor

While the target is running, the target program may use the UART to communicate with NoICE on the PC. If the target sends a byte in the range 0 to 127 decimal, NoICE will display it in the Output Window. Values 128 (0x80) and above are used by the Serial Monitor, and may not be used. If your target sends such a character, NoICE communications may be disrupted.

The AN2140 and AN2548 monitors use receive interrupts. This allows NoICE to stop a running program, and to read and write memory while the target is running. However, it also means that if NoICE sends a keyhit character, the receive interrupt will cause entry to the monitor, where the character will be seen as an illegal command. The target program will never see it.

Thus, your AN2140 and AN2548 target can use printf, but not getchar during debugging.


View Window

The View Window is used to show the contents of files opened with the VIEW command for which no source information is available. The scroll bars and cursor keys may be used to navigate the file. The window also has a Context Menu.


Watch Window

This window contains a tree control displaying the contents of target memory in various formats as specified by the WATCH command.

When an item or sub-item is defined as a pointer, an array, or a structure/union, the item may be expanded or collapsed to control the amount of information shown.

When the item or sub-item is a primitive datatype, double-clicking it or pressing the Enter key when it is highlighted will bring up a dialog to allow the value of the item to be changed.

An item or sub-item may be deleted by highlighting it and then pressing the Delete key. The contents of the window may also be controlled by using the Context Menu.


Memory Window

The Memory Window displays the contents of a region of target memory in both hex and ASCII, and the allows the values to be edited in either format.

The memory address may be specified by the MEM command, or by entering an address expression into the edit box in the Memory Window and pressing the Read button. Sixteen bytes of data are read for each display line, and the number of display lines is determined by the size of the window.

Data is displayed in both hex and ASCII, and either format can be edited by clicking on the appropriate location. You can also use the Tab and Shift-Tab keys to move between the hex and ASCII fields. Note that the modified byte is written back to the target as each character is pressed, so two writes will occur for each byte entered in hex. This may cause problems when used with memory-mapped input/output devices. For such devices, the EDIT command should be used. The EDIT command and dialog also allow new values to entered as expressions, whereas the Memory Window allows entry only of hex values or ASCII characters.


Using the Command Edit Box

NoICE can be operated using the menus and toolbar. It also provides a command line interface for users who prefer it.

Command Edit box The Command Edit box on the toolbar has a drop-down containing a list of the most recently entered commands. After entering a command, selecting a command from the history list, or pasting command text, you may execute the command by pressing the Enter key, or clicking on the OK button. You can erase any text in the Edit box by pressing the Escape key or clicking on the CANCEL button. Clicking this button or pressing the Escape key will also cancel any lengthy DUMP or STEP command.

In most cases there is no need to manually move the focus to the Command Edit box. Simply type the first character of the command, and keyboard focus will move to the Edit box automatically.

Focus hand The cursor keys act on whichever window has the keyboard focus. The Edit box shows a blinking cursor when it has the keyboard focus. The other windows will show a "hand" in their lower right-hand corner when they have the focus. You can move the focus between windows with the mouse, the Tab key, or automatically as output is generated in each window.

A common problem with multi-window applications is that the keyboard focus always seems to be in the wrong window: you always need to click in some other window before you can do what you want. The NoICE user interface attempts to simplify your life with number of intelligent focus options.

Focus pin When the Focus Pin button is pressed, keyboard focus will stay in the window in which you place it. When this button is not pressed, keyboard focus will move from window to window according to the preference selected on the Options menu.


File Menu

Load... Load file into target memory. Brings up a file dialog. Same as the Load button button, or the LOAD command with no file name specified. Control+L is a shortcut.
Save... Save target memory to file. Brings up the Save dialog. Same as the SAVE command with no file name specified.
View... View the contents of a file. Brings up a file dialog. Same as the View button button, or the VIEW command with no file name specified.
Capture... Capture disassembly, dump, and target output to file. Brings up a file dialog. Same as the CAPTURE command with no file name specified.

If a capture file is open, a check mark will be shown in front of this item. Selecting the menu while a check mark is shown will close the capture file and end capture.

Play... Play a file of NoICE commands. Brings up a file dialog. Same as the Play button button, or the PLAY command with no file name specified. Control+P is a shortcut.
Record... Record subsequent commands entered into the command edit box into a file. Brings up the Record dialog. Same as the RECORD command with no file name specified.

If a recording file is open, a check mark will be shown in front of this item. Selecting the menu while a check mark is shown will close the recording file and end recording.

Delay... Set the delay after each command executed from a command file. Brings up the integer entry dialog. Same as the DELAY command with no parameter specified.
(recent files) A list of the files most recently LOADed, PLAYed, or VIEWed. Selecting the file will cause it to be opened.
Exit Exit NoICE. Same as the QUIT command.

Edit Menu

Copy Copies the selected item into the Windows Clipboard. Control+C is a shortcut.
Paste Pastes the contents of the Windows Clipboard. Control+V is a shortcut.
Select All Selects the entire contents of the Window. Control+A is a shortcut.
Find Brings up the standard Windows Find dialog. Control+F is a shortcut.
Find Next Search forward in the active window for a previously specified search string. F3 is a shortcut.
Find Previous Search backward in the active window for a previously specified search string. Shift+F3 is a shortcut.
Goto Line Go to a specified line in a file. Brings up and integer entry dialog. Same as the LINE command with no parameters. Control+G is a shortcut.
Clear Window Deletes the contents of the active window. Control+Z is a shortcut.

View Menu

Mixed source/disassembly Toggles the source window between source code, and source code interspersed with disassembled instructions. Same as the Disassemble button button or the MODE command.

If disassembly is selected, a check mark will be shown in front of the menu item, and the button will be shown depressed.

If source-level debug information is not available, the menu item and the button will be grayed out.

Source at... Display source code beginning at the specified address. Brings up the Address dialog. Same as the SOURCE command with no address specified. Control+S is a shortcut.
Disassemble at... Display disassembled instructions beginning at the specified address. Brings up the Address dialog. Same as the DISASSEMBLEcommand with no address specified. Control+U is a shortcut.
Source at PC Display source code beginning at the address in the program counter register. Same as the command SOURCE PC.
Select Source File... Brings up a tree showing the names of all currently defined source files. The tree may be expanded to show the functions in each file. Selecting a file or a function shows the associated source code in the source window. Same as the Source button button. Control+Q is a shortcut.
Missing Source Files... Brings up the Missing Source Files Dialog. This dialog allows you to control various aspects of NoICE's source-level debugging to account for quirks in various compilers and debug formats.
Clear Line Info Delete line number information used for source level debugging. Refer to the CLEARLINEINFO command.
Disassemble As... (ARM only) Controls disassembly as ARM or Thumb instructions.

Memory Menu

Dump... Display a region of memory as hex bytes and as ASCII characters. Brings up the Address Range dialog. Refer to the DUMP command. Control+D is a shortcut.
Dump Next Display the next region of memory. Same as the Dump buttonbutton, or the DUMP command with no parameters. F2 is a shortcut
Edit... Display and optionally edit memory as hex bytes, or formatted as specified. Brings up the Memory Edit dialog. Same as the Edit button button, or the EDITcommand with no parameters. Control+E is a shortcut.
Copy... Copy a region of memory to another location. Brings up the Memory Copy dialog. Refer to the COPY command.
Checksum... Compute the 32-bit sum and CRC-CCITT of the bytes in a region of memory. Refer to the CHECKSUM command.
Fill... Fill a region of memory with a value. Brings up the Memory Fill dialog. Refer to the FILL command.
Assemble... Enter processor instructions into memory. Brings up the Assembledialog. Refer to the ASSEMBLE command.
Add Watch... Specify a region of memory to be displayed in the Watch window. A variety of formats are supported. Brings up the Define Watch dialog. Same as the Watch button button. Refer to the WATCH command. Control+W is a shortcut.
Refresh Watches Refresh the Watch window with the values of the current watches. Equivalent to the WATCH command with no parameters. Control+R is a shortcut.
Refresh Watches every X seconds... Brings up the Timed Update dialog. This controls periodic updates of the Watch and/or Memory windows.

If this item is checked, periodic update is enabled. Selecting this item again will disable periodic update.

Watch all Locals If this item is checked, function-scope local variables are automatically added to and removed from the Watch window. Manually inserted watches are not affected by this setting.
Preserve Watches between runs If this item is checked, manually inserted watches will be remembered between debug sessions. For more information see Debug Context.

Symbol Menu

Define... Define and give a value to a symbol. Brings up the Define Symbol dialog. Refer to the DEFINE, DEFBASE, and DEFSCOPED commands.
List/Delete... Show a list of currently defined symbols and their values, and allow deletion and other operations. Same as the Symbols button button, or the DEFINE command with no parameters.
Symbol for... Show the symbol whose value is equal to an expression. Brings up the Expression dialog. Refer to the SYMBOL command.
Value of... Show the value of an expression in decimal and hex. Brings up the Expression dialog. Refer to the VALUE command.
Set Scope... View or change the current symbol scope. Refer to the SCOPE command.
Auto Generate Toggle the automatic generation of symbols during disassembly. If the option is on, a check mark will be shown before this item. Refer to the AUTOGENERATE command.
Ignore Case Turn off case sensitivity of the symbol evaluator. If case sensitivity is turned off, a bullet will be shown next to this item. Refer to the CASE command.
Case Sensitive Turn on case sensitivity of the symbol evaluator. If case sensitivity is turned on, a bullet will be shown next to this item. Refer to the CASE command.
C-style Turn on case sensitivity of the symbol evaluator and enable C-style symbols. If C-style symbols are turned on, a bullet will be shown next to this item. Refer to the CASE command.

Breakpoint Menu

Insert... Define a breakpoint. Brings up the Address dialog. Refer to the BREAKPOINT command. Control+B is a shortcut.
List/Delete Show a list of currently defined breakpoints, and allow insertion and deletion. Same as the Breakpoint list button button or the BREAKPOINT command with no parameters. F6 is a shortcut
Preserve Breakpoints between runs If this item is checked, breakpoints will be remembered between debug sessions. For more information see Debug Context.

Run Menu

Go From... Begin target execution at the specified address. Brings up the Address dialog. Refer to the GO command.
Go Begin target execution at the current program counter address. Same as the Go button button, or the GO command with no parameters. F5 is a shortcut.

When the target is running, the GO button will be shown as pressed and some other buttons and menu choices will be disabled.

Halt Stop the target if it is running. The function of this command depends on the target monitor used. Refer to the HALT command
Call... Call a target subroutine at the specified address. The proper functioning of this command depends on the target monitor used. Refer to the CALL command
Step Into Single step the target. Same as the Step In button button, or the STEP command. F7 and F11 are shortcuts.
Step Over Single step the target, stepping over subroutine calls. Same as the Step Over button button, or the NEXT command. F8 and F10 are shortcuts.
Step Instruction Single step the target by one processor instruction. Same as the Instruction Step button button, or the ISTEP command. F9 is a shortcut.
Animate... Perform repeated single step, with a user-specified delay after each step.
Go until main after load If this option is checked, LOADing some types of files will automatically set a breakpoint at "main", and execute the C startup code.

Processor Menu

Change Register... Examine and change processor registers. Brings up the Change Register dialog. You may also invoke this dialog by clicking on a register in the Register Window. Refer to the REGISTER command.
In... Input and display a byte from a target port. Invokes the Address dialog. Refer to the IN command.
In16... Input and display a 16-bit word from a target port. Invokes the Address dialog. Refer to the IN16 command.
In32... Input and display a 32-bit word from a target port. Invokes the Address dialog. Refer to the IN32 command.
Out... Output a byte to a target port. Invokes the Output dialog. Refer to the OUT command.
Out16... Output a 16-bit word to a target port. Invokes the Output dialog. Refer to the OUT16 command.
Out32... Output a 32-bit word to a target port. Invokes the Output dialog. Refer to the OUT32 command.
Reset Reset target hardware. This command is not available with all types of target communications. Refer to the RESETcommand.
Tune/Trim Bus Frequency (MC9S08 only) Used to calibrate non-crystal oscillator on some parts.

Options Menu

Manual Focus Toggles between manual and automatic control of keyboard focus. Same as the Focus pin button. If manual focus is selected, a check will appear next to this item and the button will appear depressed.

When manual focus is selected, keyboard focus will stay in the window in which you place it. When this button is not pressed, keyboard focus will move from window to window according to the intelligent focus preference selected on the Options menu.

Command Box Captures Focus This item brings up a submenu containing choices for focus control. A bullet will be shown next to the currently active sub-item.
(sub-item) Never If this option is selected, keyboard focus will never be retained by the Command Edit box. Instead, focus will pass to whichever Window receives output from each command.
(sub-item) Always If this option is selected, keyboard focus will be retained by the Command Edit box whenever a command is typed into the box.
(sub-item) On Click or Tab Key If this option is selected, keyboard focus will not be retained by the Command Edit box when a command is typed into the box. Focus will only be retained when the user explicitly selects the box, either by clicking in it, or by pressing the TAB key until the box receives the keyboard focus.
Status Bar Toggles the status bar on and off.
Leading Digit Required Toggles the format for the entry of hexadecimal numbers. A check will appear next to this item if a leading zero is required. This may be useful to prevent ambiguity between values such as "ABH", which could be interpreted either as a hex value or as a symbol name. Refer to the command LEADINGDIGIT
Decimal radix Use base ten for formatted input and output. A bullet will be shown next to this item if decimal radix is in use. Same as the command RADIX 10
Hexadecimal radix Use base sixteen for formatted numeric input and output. A bullet will be shown next to this item if hexadecimal radix is in use. Same as the command RADIX 16
Set Display Formats... Opens a dialog that lets you specify the default format to be used when displaying values in a Watch. For example, a 32-bit integer may be displayed in decimal, hexadecimal, binary, or as 4 hexadecimal bytes.
Fonts and Colors... Change the font and colors used in the various windows. Invokes the Fonts and Colors dialog.
Tab Size... Sets the tab size (in characters) used in the various windows. Due to implementation details, the setting does not take effect in the source window until a new file is loaded.
Extensions... Allows you to specify programs to be run as extensions to NoICE. Brings up the Extensions Dialog.
Run Extension EX1 Allows you to run a program as an extension to NoICE. See EX1. The program to be run is specified by the Extensions Dialog
Run Extension EX2 Allows you to run a program as an extension to NoICE. See EX2. The program to be run is specified by the Extensions Dialog
Target Communications... Change parameters associated with target communications, such as baud rate and communications port. Brings up the Communications Dialog.
Show comm Toggles the display of target communications. This can be useful when debugging communications problems with the target. A check will be shown next to this item if communications is to be shown.

Window Menu

Always On Top If this item is checked, NoICE will act as a "topmost window": it will remain in the foreground even when another application has the focus.
Float Current Tab Change the currently visible tab into a free-floating view, which may be moved and resized. To return a floating view to tabbed form, click on its closer box or use this menu. At least one tab must remain in the tab window at all times.
Dock All Floating Tabs Return all floating tab views to tabbed form.
Corral All Floating Windows Move all floating windows to NoICE's upper left corner. This can be useful of you "lose" a window off-screen or in a multi-screen environment.
(other) This menu contains a list of the tabs shown in the lower portion of the NoICE screen. Selecting an item brings it to the front. This item is primarily intended for keyboard use. If you have a mouse, it is probably more convenient to simply click on the tab.

Help Menu

Help Topics Brings up this help document. F1 is a shortcut.
About NoICE... Brings up a dialog containing information about NoICE, about your target, and about your computer. In particular, it contains a list of the DLLs used by NoICE and their versions.

Context Menu for the Source Window

Add Watch of Define a Watch for the selected variable, number, or expression. If the selected variable is not currently in scope, but is on a source line, then the scope of the source line is used to determine the scope of the variable.
Go Until line Define a temporary breakpoint at the address of the selected line, and GO until there. Other breakpoints are not inserted.
View Source at View Source at the address specified by the selected variable, number, or expression.
View Source at PC Display source code beginning at the address in the program counter register. Same as the command SOURCE PC.
Set PC to line Set Program Counter to address of the current line
Set Breakpoint on line Set a breakpoint on the current line
Remove Breakpoint on line Remove the breakpoint from the current line
Copy Copies the selected item into the Windows Clipboard. Control+C is a shortcut.
Select All Selects the entire contents of the Window. Control+A is a shortcut.
Clear Window Deletes the contents of the active window. Control+Z is a shortcut.
Find Brings up the standard Windows Find dialog. Control+F is a shortcut.
Find Next Search forward in the active window for a previously specified search string. F3 is a shortcut.
Find Previous Search backward in the active window for a previously specified search string. Shift+F3 is a shortcut.
Goto Line Go to a specified line in a file. Brings up and integer entry dialog. Same as the LINE command with no parameters. Control+G is a shortcut.

Context Menu for the Watch Window

Modify Change the value of the selected item in the Watch window. This allows editing in the format specified for the watched item.
1 Show as ... Change the format of the watched item: decimal, hexadecimal, binary, etc.
Refresh Watches Refresh the Watch window with the values of the current watches. Equivalent to the WATCH command with no parameters. Control+R is a shortcut.
Refresh Watches every X seconds... Brings up the Timed Update dialog. This controls periodic updates of the Watch and/or Memory windows.

If this item is checked, periodic update is enabled. Selecting this item again will disable periodic update.

Add Watch... Specify a region of memory to be displayed in the Watch window. A variety of formats are supported. Brings up the Define Watch dialog. Same as the Watch button button. Refer to the WATCH command. Control+W is a shortcut.
Delete Watch Delete the selected item(s) in the Watch window.
Delete All Watches Delete all items in the Watch window.
Watch all Locals If this item is checked, function-scope local variables are automatically added to and removed from the Watch window. Manually inserted watches are note affected by this setting.

Context Menu for the View, Output, and Data Windows

Add Watch of Define a Watch for the selected variable, number, or expression.
View Source at View Source at the address specified by the selected variable, number, or expression.
Copy Copies the selected item into the Windows Clipboard. Control+C is a shortcut.
Select All Selects the entire contents of the Window. Control+A is a shortcut.
Clear Window Deletes the contents of the active window. Control+Z is a shortcut.
Find Brings up the standard Windows Find dialog. Control+F is a shortcut.
Find Next Search forward in the active window for a previously specified search string. F3 is a shortcut.
Find Previous Search backward in the active window for a previously specified search string. Shift+F3 is a shortcut.
Goto Line Go to a specified line in a file. Brings up and integer entry dialog. Same as the LINE command with no parameters. Control+G is a shortcut.

Data Values, Addresses, and Expressions

NoICE allows the use of expressions almost everywhere that a data value or an address is expected on the command line or within a dialog box. Such expressions may consist of a number, a register name, a symbol, or a combination involving numbers, symbols, and/or register names.

Addresses are entered and displayed in hexadecimal. Decimal is used for certain items such as array indices.

WATCH and EDIT of integer data may be displayed and entered in either hexadecimal or decimal as specified by the RADIX command on the Options menu, or by the format of the watch. The selected radix preference is saved when you exit NoICE.

Hexadecimal numbers may use either upper or lower case for the characters A through F. Hexadecimal numbers may be specified regardless of the default radix by a prefix of "0x" or "0X" (i.e., C format), or by following the number with "h" or "H" (Intel assembler format). Numbers may be entered in decimal regardless of the default radix by following them with a period: "10." is ten decimal.

If hexadecimal radix is selected, numbers beginning with "A" through "F" may be entered without a leading zero, unless the LEADINGDIGIT command (also found on the Options menu) has been used to specify otherwise. Entry of hexadecimal numbers in this fashion is convenient, but may cause ambiguity with respect to symbol and register names. The preference is saved when NoICE exits.

Symbols are defined and given values using the DEFINE commands. When a symbol name is used as a term in an expression, the value of the symbol is used as the value of the term. Symbol names are case sensitive by default. Case sensitivity may be turned off and on with the CASE command.

Symbol selection button Many dialogs which require you to enter an address or other expression pair the combo box with a "Select Symbol" button. Press this button to select from a list of currently defined symbols.

When a register name is used as a term in an expression, the value contained in the register is used as the value of the term. The legal register names will depend on the processor being debugged. The names and current values of the registers are displayed in the register window in the upper portion of the screen. Register names are case insensitive.

If a symbol is defined whose name is the same as the name of a processor register, NoICE will noramlly use the value of the symbol in expressions which use the name.

To force NoICE to interpret a string as a processor register rather than as a symbol or number, enclose the string in curly brackets:

    {SP}

When used in an expression, a register or symbol name may optionally be preceded by a single quote ('). This forces the following characters to be evaluated as a register or symbol name, rather than as a number. This allows register names such as "A" or "BC" on the Z80, or symbols such as "A1" to be distinguished from hex numbers. The alternative would have been to require a leading zero on hex numbers. Since numbers are used more often than symbols in a typical debug session, this was considered to be undesirable. However, you can require a leading zero by using the LEADINGDIGIT command (also found on the Options Menu).

If a symbol in an expression is defined as an array or a structure, then elements of the array or structure may be specified. For example, if "ai" is an array, then

    ai[2]

specifies the second element of the array, and the value of the expression is equal to the address of that element. If "foo" is a structure, then

    foo.bar

specifies the element "bar" of the structure, and the value of the expression is equal to the address of that element. More information about array and structure data types.

Valid operators in expressions are addition (+), subtraction (-), multiplication (*), integer division (/), bit-wise logical AND (&), and bit-wise logical OR (|).

An expression may specified as relative to a register. For example,

    SP+21

and

    21+SP

each specify a value equal to 21 plus the value of the register SP. Any processor register which appears in the register window may be specified as the register.

The expression "SP+21" differs from "21+SP" in that "21+SP" is evaluated at the time the expression is entered, using the current value of SP, while SP+21 defers evaluation until the expression is used. If such a "register plus offset" expression is entered as the value when defining a symbol, then whenever the symbol is used, the current value of the register will be added to the offset to derive the actual value of the expression. This same behavior applies if a "register plus offset" expression or symbol is specified as the address for a WATCH. Register plus offset expressions will be found useful when debugging high-level languages which allocate variables on the stack. They may also be used whenever a register points at a data structure.

Memory Paging/Banking and Multiple Memory Spaces

Some targets support paged or bank-switched memory. The HC12 family has this capability built in, using the PPAGE register. Support may be added to processors using off-chip memory by means of Two Bit Memory Management hardware.

Processors with several address spaces, such as the 8051, may use NoICE's paged address syntax as well, with the page field denoting an address space. For more details, please refer to 8051 Address Spaces

If paged memory is supported by the target, addresses within the paged region will be shown as

    xx:yyyy

where "xx" denotes the page, and "yyyy" denotes the address within that page. When entering an address in the paged region, the page may optionally be entered as a numeric value, followed by a colon (:), when an address is specified. If no page is specified, then the current page as shown in the register window will be used. If a symbol is specified, the page value (if any) of the symbol will be used, unless it is overridden by the entry of an explicit page number and colon.


NoICE (tm) Debugger, Copyright © 2019 by John Hartman

Using NoICE - Contact us - NoICE Home