The current version of Spim is 9.1 (July 2011), which is a minor
release that corrects minor bugs in first QtSpim release:
- Encountering a breakpoint during execution brings up dialog to continue,
single-step or abort.
- Fixed bug in writing log file.
- Fixed bug that printed only half of double floatint point registers.
- Fixed bug in formatting of instructions in text segments.
- Correct bugs in help files and fixed installation process.
- Speed up QtSpim by reducing frequency of screen update.
- Fixed bug in memory mapped IO in QtSpim.
- Fixed bug in timer code on Linux x64.
- Close QtSpim console window when main window closes.
- Added command line parsing to QtSpim.
- Synchronized Window menu items with state of windows.
The current version of Spim
is 9.0 (January 2011), which is a major
release that introduces QtSpim and fixes some bugs in all versions:
- Add Debian package and Linux desktop metadata.
- Moved SVN repository to SourceForge.
- Fit and finish bugs in PCSpim and error parsing quoted command line arguments.
- QtSpim!!!
- Single stepping hung at breakpoint.
- Did not display first 4K of the stack.
- Ported PCSpim to VisualStudio 2010.
- Fixed type errors so code compiles under Linux and on x64 systems.
- Moved version information into CPU/version.h and eliminated old, ad-hoc Configure
file for spim and xpsim.
The current version of Spim
is 8.0 (January 2010), which is a minor release
that cleans up bugs in 7.5 and moves to a BSD license:
- Changed install path from /usr to /usr/local and removed -D option to install
command (which doesn't exists on Mac OS X).
- Change license to a BSD license, update copyright notices, and eliminated
references to my old email address.
- Simplify alignment of data on stack to ensure enough room is left for environment
and args at top of stack.
- Initialize stack with arguments when running program from run dialog.
- read_input filled buffer with last character of file not terminated by newline.
- Links to MIPS documentation were broken.
- Did not return value from exit syscall.
The current version of Spim
is 7.5 (August 2009), which is a minor release
that cleans up bugs in 7.4:
- Correct problem with installer script that did not install appropriate versions
of msvcrt and mfc dlls for Visual Studio 9.0.
- Fix install scripts to put exceptions.s at /usr/lib/spim on Linux.
- Fixed major memory leak caused by overwritten instructions not being freed.
- Force redisplay of data segment in situations when register values (such
as $sp) have changed.
- Properly initialize PC at first invocation of step operation on PCSPim.
- Fixed bug in Xxpim that caused the step commend to reinitialize the stack.
The current version of Spim
is 7.4 (January 2009), which is a minor release
that cleans up bugs in 7.3:
1/14/09: Released new version of pcspim.zip to correct problem with installer
script that did not install appropriate versions of msvcrt and mfc dlls.
1/21/09:
Released new version of spim.tar.Z and spim.tar.gz to correct problem with install
command for spim program (but not xspim).
- Fixed install directories for Linux systems.
- Retained command line arguments in second and subsequent runs.
- Bug in overflow from low-order word in MADD, MSUB.
- Bug in decoding SPECIAL2 instructions (e.g. madd).
The previous version of Spim
is 7.3 (August 2006), which is a minor release
that cleans up a number of bugs in 7.2:
- Fix for flex 2.5.33 (internal change broke spim's scanner).
- Exception handler can be a semicolon-separated list of files that will be
loaded in order. On Unix, SPIM_EXCEPTION_HANDLER environment variable is consulted
before command line arguments.
- Memory corruption caused spim to crash when label was defined twice in succession.
- PCSpim updates register and memory display after a parse error while reading
a file.
- Eliminated unnecessary null char between strings in list of strings produced
by .asciiz.
- Makefiles (in spim/ and xspim/) now contain clearly defined paths for installing
executables, exception handler, and man pages. The man pages are no longer installed
by the "make install" command.
- Change psfig to epsfig in spim.tex (does anyone still use this obsolete documentation?).
The previous version of Spim
is 7.2.1 (August 2005), which is a minor
release that cleans up a number of bugs in 7.1:
- Fixed multiple problems in memory mapped IO in xspim and spim.
(Note: to make programming uniform across
all three platforms, memory mapped IO now follows"Unix" handling of carriage
return (CR) and new line (NL) characters . On input, a CR is translated to a
NL, and on output, a CR is printed after a NL. This was previously true for
PCSpim and xspim, but not spim.)
- Fixed bug in indexed address computation in LW and SW instructions.
- Eliminated non-POSIX flags IUCLC and IXANY to facilitate port to Mac OS X.
- Use termios(3) library calls instead of IOCTLs to fix bug introduced in port
from termio to termios struct.
- Test default case for jalr, without default $rd (=31).
- Trap handler in test extracted wrong bits from ExcCode field of Cause register.
- Pervasive restructuring of files to put 3 UIs (spim, xspim, PCSpim) in separate
directories and cleanup organization and Makefiles.
- Use correct help file in install process.
- Added work-around for bug in flex 2.5.31 that left yytext_ptr undefined.
- Epilogue code restored $at register, then used a pseduo instructions that
smashed it.
- Cleared filename when reinitializing PCSpim, which broke next reload command.
The previous version of Spim
is 7.1 (January 2005), which is a minor release
that cleans up a number of bugs in 7.0:
- Minor cleanup.
- Switched Windows installer to Microsoft .msi installer, from InstallShield.
- exceptions.s used wrong mask for exception cause field.
- Clearing the transmitter or receiver interrupt enable bits also clear interrupt
pending bits in Cause register.
- Code to poll for a console input character in X windows blocked and prevented
any output until input occured.
- Type of "mul" instruction was wrong, which lead to it being printed without
destination register.
- Print underlying instruction, not breakpoint.
- Unparing error that unparsed beq as beql.
- Eliminated dependence on obsolete termio.h in favor of POSIX termios.h since
Mac OS X doesn't have termio.h any more.
- Fix null pointer problem if no entries in registry.
- Turn off EXL bit after break instruction, since break is handled by spim,
not MIPS, code and the bit was never cleared.
- Set default path for exceptions.s to C:\Program Files\PCSpim, the default
installation directory.
- Test for SQRT.S used double constant, which failed on SPARC (but not x86).
The previous version of Spim
is 7.0 (August 2004), which is a major release
that contains a significant number of changes from version 6.5:
- Upgraded simulator to MIPS32, Version 1 architecture (except details of FPU
and memory).
- Exceptions and interrupts reimplemented, to make them closer to the actual
hardware.
- Memory mapped IO console reimplemented to make it work properly.
- Implemented timer in CPU.
- Renamed "trap" to "exception" to correspond to MIPS terminology.
- Introduced short forms of command line arguments and dropped need for "-file"
argument.
- Major internal cleanup and reorganization of code to eliminate unused code
and simplify implementation.
- PCSpim prompts about reinitialization when file reloaded.
- PCSpim lets user set font.
- Word align all segment boundaries and ensure sbrk returns word-aligned addresses.
- Added new syscall (EXIT2_SYSCALL) that returns value from SPIM.
- Improved implementation of delayed load instructions.
- Refactored the test cases, so that endian-independent code is in tt.core.s
- Many small bug fixes.
Outstanding bugs in 7.0:
- The trap handler (exceptions.s) fails when the trapping instruction is in
the delay slot of a branch or jump. The trap handler returns by simplemindedly
adding 4 to the EPC (which is the branch's address in this case), so it does
not return to the instruction executed after the trapping instruction.
- Handling of newlines and carriage returns is inconsistent between platforms.
When a program prints a newline, PCSpim also prints a carriage return, spim
and xspim don't. Or, is this consistent with the underlying platform?
The previous version of Spim
is 6.5 (January 2003), which contains the
following changes from version 6.4:
- If started program is started with only one argument, assume it is a file
name.
- Added Alt-F4 shortcut to PCSpim.
- Fixed trap.handler to return to instruction at EPC on interrupt.
- Fixed (real!) hardware exception on integer overflow in division.
- -trap_file did not properly parse argument in xspim.
- Fixed printing of error on last line without a carriage return.
- Print proper registers when printing hex FP numbers.
- Properly zero newly allocated memory.
- Added nops (addu $0, $0, 0) to trap handler, so that it works properly in
bare mode!
- PCSPIM.HLP file was corrupted.
The previous version of Spim
is 6.4 (January 2002), which contains the
following changes from version 6.3:
- PCSpim no longer shifts the focus of the register and data segments when
values change.
- Fixed bug in the expansion of USH pseudo-op.
- Add system calls for open, close, read, and write.
- Fixed the Configure file to work with Mac OSX.
- Made the REM pseudo-op require 3 arguments.
- Fixed PCSpim dumping code to dump contents of console window.
- Treat LUI's immediate value as unsigned, as it is not sign extended.
- More error checking for malformed programs.
- Make symbol "main" as global.
- Avoid clearing last few bytes of data segments when they expand.
- Check that high-order 4 bits in jump instruction's PC match bits in target
PC.
The previous version of Spim
is 6.3 (January 2001), which contains the
following changes from version 6.2:
- PCSpim interface simplified to 4 fixed panes, similar to xspim, which permit
cut and paste.
- PCSpim console stays on the screen after assembly program terminates.
- Comments in assembly source displayed in text segment.
- NOP is standardized to sll $0 $0 0 (= 0x00000000)
- Fixed several bugs and missed optimization in computing immediate values
in lw/sw instruction sequences.
- High 2 bits in negative branch offsets were incorrect.
- Display floating point registers with up to 18 digits of precision.
- New spim command (print_all_regs) prints all registers.
- Minor changes to compile spim under cygwin for Windows.
- Validate the range of immediate values in MIPS (but not pseudo) instructions.
- Fixed display of stack with non-word aligned $sp.
- New flags:
-
-delayed-branches Simulate MIPS delayed control transfers for branches,
jumps, and calls
-
-delayed-loads Simulate MIPS non-interlocked loads.