Downloads: on Sourceforge
Mission: To provide a pleasant and enriching debugging experience for beginning programmers of all assembly languages.
Status: Currently sports Qt and console interfaces, already providing LC-3 and Georgia Tech's LC2200 plus an extensible framework for more. There are plans to make it a superior alternative to SPIM.
Contact: email@example.com (Garry Boyer)
Downloads: See the SourceForge summary page and click on the green downloads bar.
History: Began as a project to provide a better LC-3 simulator experience to CS2110 students at Georgia Tech. After creating a very extensive user interface, the LC-3 simulator evolved to allow other architectures to plug in. Now it supports LC-3 and the old 8-bit LC-2200, plus a Mips simulator is in development, and interested developers can add anything else.
At a quick glance, here are features of interest for SimpLC.
This is the text interface for the simulator. As you can see, it is quite colorful. However, the color is not simply for prettiness; it aids in emphasizing consistency among various views. Addresses are green; dark blue is almost always a hexadecimal value, whereas light blue is decimal, and so on. However, the most obvious use of color is to separate each operand of the binary view. This is done automatically for all ISA's that use the powerful built-in assembler framework.
If you look at the first couple commands, the user is trying to set the instruction at x3007 to an assembly instruction. The user is trying to test R0 for the control code, but accidentally zeros it out. The symbolic disassembly makes this obvious by displaying "R0 <- 0", and the user can quickly change the instruction to what was intended.
This shows the simulator in action, with the verbose mode enabled. In verbose mode, every gruesome detail about execution is printed. Care is taken so that verbose mode interacts cleanly with input/output, so that any relevant prompts are displayed when input is requested. Of course, in non-verbose mode, the simulator does not display such prolific output.
This is the interface for pre-specifying canned input to be handled later.
ASCII characters are highlighted orange like usual and whitespace is
highlighted light blue. In addition to the
Like many simulators, this simulator provides a compact view of memory in much the way hexdump does. The green columns specify address, whereas the blue numbers are the bytes. The last two columns are text views of memory at the 16-bit (word) levels, and also at half-word levels for compact strings. If the color is a bit too much, the command "viewm -k" will nicely disable colors.
This is the basic graphical interface. It looks quite similar to the text interface in its use of colors. At this point in execution, the simulator is waiting on user input. On the top is a widget that lets you track various expressions as a memory address, and change memory values. On the bottom are controls for execution and for modifying registers. Like in the text interface, expressions are allowed to be complex, including arithmetic, register names, and dereferencing.
This is the console interface to the graphical simulator. On the top is all the output generated by the program. Below is a text box where you can interactively type input, or paste canned input.
Here, a stack-based Fibonacci program is shown in motion. Here, plain disassembly instead of symbolic disassembly is shown. (For interested developers: Once you define the assembly language, the disassembly requires zero extra code.) The simulator automatically tracks a call trace and thus offers an option to finish the current instance of FIB.
This is perhaps one of the most fun things about this simulator. A user can have any number of alternate memory views in addition to the main view; the code window and stack window are running side by side. In the "Track" text box, the value of register 6 is currently being tracked. The stack frames are automatically recognized and sectioned off for each instance of FIB. To watch the stack jump up and down, hold the F11 key in any window.
LC-2200-8 (GT8) is another architecture it supports, which is used at Georgia Tech for an introductory systems class. In this architecture, bytes and words are 8 bits, but instructions are 16 bits. Note how instruction disassembly works just the same and the data list views words in the right size. Finally, unlike the dump view in LC-3 with 16 bits in a single byte, 16 bytes (not 8) are fit onto a line, and the packed-string view is omitted since it does not apply to 8-bit-byte systems.
The on-the-fly assembly and other features all work in this version of the simulator too. Extra architectures are modeled by objects, in a way that it is possible to run two different types of machines at the same time (although I am not sure why you would want to).
No kidding, this is the entire assembler for a LC-2200: