General Information

NoICE is a Windows-hosted debugger for use with a variety of microprocessor targets. It consists of a target-specific Windows program, NoICExxx.EXE, and in some cases a target-resident monitor program. The two programs communicate via RS-232, BDM, JTAG, or other means. Processors currently supported are the ARM7, 6801/6301/6800, 68HC08/MC9S08, 68HC11, 68HC12, 8051, MSP430, Z80/Z180, 8080/8085, 8096/80196, 65(C)02 and 6809.

An earlier program, NoICE for DOS, also supports the Z8, 68(HC)05, M50740/M38000, and TMS370. These and other processors may be supported by NoICE for Windows in the future. Please contact us for information about availability.

NoICE includes:

NoICE may be operated via the menu and toolbar, or via a command line. Command keywords are case insensitive. Alphabetical list of NoICE commands

The current version of NoICE runs on Windows XP, Vista, and 7. Earlier versions ran on Windows 95, 98, ME, and 2000, and ancient versions ran on DOS. If you need an old version, please contact us.


Running NoICE

NoICE may be invoked by any standard Windows method. If a file name is specified in a Windows Shortcut or from a command line:

    C:\NoICE\NoICE51.exe "C:\foo.noi"

that file will be OPENed by NoICE. If the file or path contains a space, you must enclose the file name parameter in quotation marks.

If you associate a file type with NoICE in Windows Explorer, double-clicking on a file of that type will cause NoICE to run, and the file to be OPENed.

If you drag a file onto a NoICE icon, or onto a running NoICE program, that file will be OPENed.


If you specify the switch /show in the shortcut or on the command line, NoICE will display target communications in hex. This can be useful when debugging communications problems with the target. This action can also be invoked from the Options menu, via Show communications. However, the switch is useful when debugging the messages that NoICE sends as it starts up, before the menu is available.


Only one copy of NoICE for a particular target processor and configuration may be run at a time. Any attempt to run a second copy will simply cause the already-running copy to be brought to the foreground. If the second copy had a file to OPEN, that file will be passed to the already-running copy and OPENed by it. This allows you to double-click on NoICE-associated files in Windows Explorer without running multiple copies of NoICE.

If you need to run multiple copies of NoICE at the same time in order to debug multiple targets, you can specify the switch /settings=name in the shortcut or on the command line. This causes NoICE to run using a set of configuration and preference settings specified by the string "name" rather than the default settings. For example, suppose that COM1 connects to the NoICE target for the "master" project and COM2 connects to the NoICE target for the "slave" project. Create two shortcuts (modified as necessary to match the directory where you installed NoICE):

    "C:\Program Files\NoICE\bin\NoICE51.exe" /settings=master
and
    "C:\Program Files\NoICE\bin\NoICE51.exe" /settings=slave

Run each one and configure it as desired.

The /settings= switch can also be used to provide easy access to multiple configurations, even if you don't use them at the same time.


When NoICE starts, it will open target communications, read the target registers, and disassemble from the current program counter location. It will then look in the current directory and in the application directory for a command file whose name is the same as the .EXE file, but whose extension is .NOI. Thus, NoICE51.EXE will attempt to locate NoICE51.NOI, etc. If such a file is found, it will be PLAYed. This file is typically used to hold target-specific options, such as FRAMEPOINTER, DEFREG, etc.


NoICE supports DDE Execute messages in the traditional format. Thus,

will OPEN the specified file. Any NoICE command or command sequence may be specified, with any necessary parameters quoted and in parenthesis. Thus, the message

    [load("file.hex")][dump("0")]

will LOAD file.hex, and them DUMP memory beginning at location zero. Because of the requirements of DDE syntax, the parameter list may not contain other quotes, parenthesis, or square brackets. DDE may also impose length restrictions on the message.


Using NoICE Help

NoICE help uses the standard Microsoft HtmlHelp (.chm) format. This offers a table of contents, index, and search capability, along with context-sensitive help.

Versions of NoICE prior to 8.8 provided help in the form of HTML pages, opened by your system's default browser. This provided a convenient way to let users annotate and customize the help, but it lacked index and search capabilities. If you prefer to use the old-style help, follow these steps:


Debug Context

This feature is new in NoICE version 8.8. It is intended to enhance debugging by remembering watchpoints and breakpoints between LOADs of a target program, and between executions of NoICE.

Operation of the Debug Context feature should proceed without any assistance from the user. The explanation that follows is mostly for users who worry about the fine details.

There are three parts to the operation: defining the Debug Context, saving the context, and restoring the context

Defining a Debug Context

A Debug Context is defined when you LOAD a file, or PLAY a file that contains the LASTFILELOADED command, If operations are nested (for example, you PLAY a file that LOADs another file), the Debug Context is defined by the outermost operation.

The definition step first remembers the name and path of the file being LOADed or PLAYed, and its time-stamp (the date and time it was last modified). This information is used by the other steps.

The definition step then deletes all currently-defined breakpoints and watchpoints. This is done since the addresses of the breakpoints and watches may have changed due to a rebuild, or a totally unrelated file may be being loaded.

Saving a Debug Context

If a Debug Context has been defined by a previous Define step, the context is saved when you LOAD or PLAY a new file, or when NoICE exits. The save will occur whether you LOAD/PLAY a new file, or a file that was previously LOADed/PLAYed. For a LOAD or PLAY, the Save operation occurs just before the Define operation.

The Debug Context is saved to a file in the same directory as the file that defined the context, using the same name and the extension ".NoiCtx". Thus, LOADing a file called "C:\foobar\hello.elf" will create a Debug Context file called "C:\foobar\hello.elf.NoiCtx".

Any existing breakpoints are saved to the file. Breakpoints are saved both by address, and if possibla as a source file name and line number.

Any existing watches are saved to the file. Watches are stored both as address, and if possible as a symbol name.

The names and timestamps of the source files are also saved.

Restoring a Debug Context

The Debug Context is restored at the end of the LOAD or PLAY command. As described above, if you have just LOADed "C:\foobar\hello.elf", NoICE will attempt to load a Debug Context file called "C:\foobar\hello.elf.NoiCtx".

If an appropriate Debug Context file is found, the timestamp in the file is compared to the timestamp of the file just LOADed or PLAYed. If the timestamps match, then the file just LOADed or PLAYed has not changed, and breakpoints and watches may be restored by address.

If the timestamps differ, then any breakpoints and watches known only by address are not restored.

If a breakpoint was also stored by line/file, then the timestamp of that source file is compared. If it maches, then the source file has not changed, although it may have been moved in memory due to changes in other files. However, if line X was a source line, we can generally count on it still being a source file (with some expections for conditionally compiled code.) Thus, the breakpoint can be re-set by finding the new address of that line.

If the timestamp on a source file indicates that the source file has changed, the breakpoint(s) in that source file cannot be reset.

Similar logic is used for watches, except that a symbol name is used to restore the watch rather than a line number. If the format of the watch has been modified from the default, the modified format is restored as well.

Examples of Debug Context Processing

Here are a few examples to show how this all works

Initial debug session

  1. User runs NoICE. There is no active Debug Context.
  2. User LOADs the Elf file C:\foobar\hello.elf. Save Context does nothing, since there is no active Debug Context. Define Context remembers the name and timestamp of hello.elf, then deletes any breakpoints and watches (probably none, since we just started NoICE).
  3. When the LOAD completes, NoICE looks for the file C:\foobar\hello.elf.NoiCtx. In this example, we suppose that this is the first time we have loaded hello.elf, so no file is found, and no Debug Context is restored.
  4. User sets breakpoints and watches and debugs
  5. User gets hungry and exits NoICE. Save Context saves the breakpoints and watches in the file C:\foobar\hello.elf.NoiCtx.

Later debug session

  1. User returns after lunch and runs NoICE. There is no active Debug Context.
  2. User LOADs the Elf file C:\foobar\hello.elf. Save Context does nothing, since there is no active Debug Context. Define Context remembers the name and timestamp of hello.elf, then deletes any breakpoints and watches (probably none, since we just started NoICE).
  3. When the LOAD completes, NoICE looks for the file C:\foobar\hello.elf.NoiCtx, and finds the file created in the last step of the previous example.
  4. NoICE sees that the timestamp on hello.elf has not changed. All breakpoints and watches may be restored.
  5. User does more debugging and finds a problem.
  6. User fixes the problem in module1.c and re-builds.
  7. User again LOADs the revised Elf file C:\foobar\hello.elf. Save Context saves the breakpoints and watches in the file C:\foobar\hello.elf.NoiCtx, along with the old timestamp of hello.elf - the timestamp of the file that was LOADed in step 2, not the timestamp of the rebuilt file from step 6. Define Context remembers the name and new timestamp of hello.elf, then deletes the currently-set breakpoints and watches, since the code may have moved.
  8. When the LOAD completes, NoICE looks for the file C:\foobar\hello.elf.NoiCtx, and finds the file created in step 7.
  9. NoICE sees that the timestamp on hello.elf has changed compared to the Debug Context. Any breakpoints in module1.c will not be restored, since that file has changed compared to the timestamp in the Debug Context. Any breakpoints in other files that were saved by line number can be restored, potentially to different addresses if the code has moved. Similarly, watches are re-set by symbol name.
  10. User continues debugging.
  11. User achieves perfection and exits NoICE. Save Context saves the breakpoints and watches in the file C:\foobar\hello.elf.NoiCtx.

Copyright Information

The entire NoICE distribution package, consisting of executable programs, DLLs, documentation and help files, target monitors, and data and utility files, is copyright © 1992-2012, by John Hartman.

The author reserves the exclusive right to distribute this package, or any part thereof, for profit.

Individuals, user groups, and clubs are authorized to distribute the unregistered version of NoICE under the following conditions:

  1. No charge is made for the software or documentation. A nominal distribution fee may be charged, provided that it is no more than $10 US total.
  2. The program and documentation are not modified in ANY way, and are distributed together.

Legal Information

Evaluation Version

NoICE is not free software. Subject to the terms below, you are hereby licensed to use NoICE for evaluation purposes without charge for a period of 30 days. If you use NoICE after the 30 day evaluation period, registration and payment are required.

Unregistered use of NoICE after the 30-day evaluation period is in violation of U.S. and international copyright laws and deprives the author of funds he needs to buy donuts.

Registered Version

One registered copy of NoICE may either be used by a single person who uses the software personally on one or more computers, or installed on a single computer used non-simultaneously by multiple people, but not both.

You may access the registered version of NoICE through a network, provided that you have obtained individual licenses for the software covering all computers that will access the software through the network. For instance, if 8 different computers will access NoICE on the network, each computer must have its own NoICE license, regardless of whether they use NoICE at different times or concurrently.

Disclaimer of Warranty

THIS SOFTWARE AND THE ACCOMPANYING FILES ARE SOLD "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OR MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. Because of the various hardware and software environments into which NoICE may be put, NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.

Good data processing procedure dictates that any program be thoroughly tested with non-critical data before relying on it. The user must assume the entire risk of using the program. ANY LIABILITY OF THE SELLER WILL BE LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE PRICE.


Support and Purchase Information

If you find a bug, have a question, or would like to suggest an enhancement, please contact us via e-mail at noice@noicedebugger.com

Did you know: whenever you see a message box (a dialog whose only button is "OK") in Windows, you can press Ctrl-C to copy the text from the box into the clipboard. This feature has apparently been in Windows since Windows 2000 - Microsoft just never bothered to tell you about it. Now that you know, you can use this to paste the exact text from error messages into an e-mail reporting a problem.

We answer all non-abusive non-spam email, generally within a few days. However, we know of instances where our ISP has blocked valid incoming messages as spam, and of instances where a user's ISP has blocked our replies. Such is life in a time of spam. If you don't receive an answer within a week, please resend your message, possibly from a different e-mail account if you have one.

The most current version of NoICE, including any bug corrections, may always be found on our website at https://www.noicedebugger.com

If you use NoICE, but have not yet paid for it, please do so now. Your purchase includes a free upgrade to any new version of NoICE which may be released within one year of the date of your purchase.

Don't be a parasite: if you use it, pay for it! In addition to being the right thing to do, your purchase encourages us to continue supporting and improving NoICE. Purchase and registration details maybe found at https://www.noicedebugger.com/purchase.html

Purchase on-line with credit card or PayPal.

If you would prefer to pay by bank wire, check, or other means, please contact us.


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

Using NoICE - Contact us - NoICE Home