Version 3.5.1 differences from 3.5.0 (January, 2008) BUG FIXES -- Fixed bug in machine instruction Fields dialog so that the help button now works. -- Fixed bug that caused an error when pc-relative addressing was used with a negative address (jumping backward). -- Fixed bug that caused unwanted name changes when the lists are sorted in the EQU dialog and Highlight Options dialog. ENHANCEMENTS -- Previously a macro name had to be distinct from an instruction name, and so you couldn't redefine instruction names by using a macro of the same name. That restriction has been lifted, so that now, if a macro and an instruction share the same name, the macro is the one that is executed when that name appears in assembly programs. -- By popular demand, the default font for text editor windows was changed to Monaco. The font can be changed using the Edit|Preferences menu item. ================================================= Version 3.5.0 differences from 3.4.2 (August, 2007) BUG FIXES -- Fixed bug that caused an exception to be thrown when user double-clicked on the "Set" folder in the "Edit machine instructions" and "Edit fetch sequence" dialogs. ENHANCEMENTS -- You can now specify, in the Edit|Preferences dialog, for each punctuation character in the list ! # $ % & * ( ) ^ _ = { } [ ] | \ : ; , . ? @ / ~ ` + - whether it is to be considered in assembly language programs to be (a) a token by itself, (b) part of symbol tokens, (c) illegal, (d) the comment char, (e) the pseudo char, and (f) the label char. Restriction: there is exactly one of each of the last three types and those three characters must all be distinct. The punctuation characters in the list < > " ' already have special meanings. The chevrons and double quote, are used to quote strings. The single quote is used to quote characters. The plus (+) and minus (-) characters have some special behavior. They are always legal before a digit but they can be symbol, token, or illegal characters otherwise. They cannot be the comment, pseudo, or label characters. The default uses for the punctuation characters are: ! # $ % & ^ _ ` * ? @ ~ + - are parts of a symbol token ( ) , / = [ \ ] { | } . : ; are individual tokens by themselves ; is the comment character . is the pseudo character : is the label character -- You now have many more options for specifying the fields of a machine instruction. In the old version, you could only specify a positive number of bits per field and whether the field was a "don't care" field. "Don't care" fields were indicated by using a negative number of bits or by putting parentheses around the number of bits in the field. Now you must specify (by choosing the menu item "Modify|MachineInstructions..." and, in the dialog, clicking the "Edit fields..." button) the following for each field: -- a name for the field. The name of a field must be either any single non-whitespace character or a mixture of two or more of letters, digits, and the hyphen character. -- the number of bits in the field (0 or more). -- whether the field is (a) required (that is, the user must include that field in each assembly language call to the instruction), (b) optional (that is, the user can choose whether or not to include it), and (c) ignored (that is, a "don't care" field--the user never includes it) -- a default value that is used when the user does not specify a value (used only by optional or ignored fields) -- optionally, a set of acceptable values for the field, with associated names. If such a set is specified, then one of the names must be used as the value for the field whenever an instruction containing that field is called. If such a set is not specified, then any value that fits in the field is acceptable. -- whether or not the field can hold signed or just unsigned values. If a field is signed, it can legally hold any value from -2^(n-1) to 2^n-1 where n is the number of bits. If the field is unsigned, the values must be in the range 0 to 2^n-1. -- whether the value to be placed in the field should be first subtracted from the address of the instruction in which it resides in the program (for pc-relative addressing modes) -- You specify the fields and their order for a machine instruction by listing them by name in the "format" cell (formerly the "fieldLengths" cell) for the instruction in the "Edit machine instructions" dialog. Spaces can be included in the format as necessary to avoid ambiguity. -- A field with length 0 is just used as punctuation in instruction calls. It can be optional or required but not ignored. In assembly language code, the field must be represented by the name of the field. All other attributes of a field of length 0 are unused. -- The set of acceptable values for a field can be specified only in the case that the field's value is not a relative value. -- There are two kinds of relative addressing: preincrement and postincrement. The value of the operand for a preincrement field in an instruction call in the assembly program is subtracted from the address of the instruction. The assembler replaces the original operand with the difference. In postincrement addressing, the value of the operand for the field in an instruction call in the assembly program is subtracted from the address of the next instruction _after_ the one containing the field. The assembler replaces the original operand with the difference. NOTES -- This new version should be backwards compatible with older versions of CPU Sim in the sense that CPU machines saved by the old versions can be loaded by the new version. This compatability is implemented by adding new fields with names "1" to "16" and "-16" to "-1" to a machine if the machine's .cpu file does not include any fields and instead just includes field lengths. -- These enhancements are not yet mentioned in the user's manual but are covered in the online help. ACKNOWLEDGEMENTS -- I thank Scott Hunter and his students at Siena College for the idea of enhancing the fields of an instruction and for providing a good portion of the code. ================================================= Version 3.4.2 differences from 3.4.1 (July, 2007) BUG FIXES -- ENHANCEMENTS -- You can now assemble the code in an assembly window even if that window is not highlighted. In that case, the most recently assembled window is reassembled, if that window hasn't been closed. -- In the preferences dialog, you can now specify 3 options regarding assembly language syntax. You can specify: -- the comment character (the character that indicates the start of the comment). The default comment character is ';' (semicolon). -- the pseudoinstruction character (the character that indicates the word is a pseudoinstruction). The default is '.' (period). -- the label character (the character that is at the end of every label). The default is ':' (colon). NOTES -- These enhancements are not yet mentioned in the user's manual or in the online help. ================================================= Version 3.4.1 differences from 3.4.0 (December 26, 2006) BUG FIXES -- ENHANCEMENTS -- You now have the option of using "console" io instead of io via the command line or via dialog boxes. If you choose console io for an IO microinstruction, then a console window appears at the bottom of the CPU Sim main window, in which you can type input and read output. NOTES -- These enhancements are not yet mentioned in the user's manual or in the online help. -- When the console has the focus, you cannot use the keyboard shortcut keys. Instead, you need to select CPU Sim menu items using a mouse. ================================================= Version 3.4.0 differences from 3.3.2 (December 15, 2006) BUG FIXES -- ENHANCEMENTS -- When data in a register or RAM is displayed in binary or hexadecimal, the bits or digits are put in groups of 4 and groups are separated by spaces to make the values more readable -- A new "Backup one micro" button was added to the DebugToolbar and allows the user to back up one microinstruction at a time. -- The DebugToolbar now displays a scrolling list of all microinstructions of the current instruction. In it the next micro to be executed is highlighted. -- When stepping through the code by microinstructions in debug mode, the values that were changed by the last micro are outlined in green. -- There is a new command line flag "-c". If this flag is present, then CPU Sim will start up and run the program specified by the "-t" flag on the machine specified by the "-m" flag. The -t and -m flags were added in version 3.2.1. Note that if the -c flag is present, then so must also be the -t and -m flags. It will direct all i/o with user-based or console-based channels to the command line and will not open any windows (and so won't use the Java Swing package at all). NOTES -- These enhancements are not yet mentioned in the user's manual or in the online help. ================================================= Version 3.3.2 differences from 3.3.1 (Sept 19, 2006) BUG FIXES -- NullPointerException when redisplaying RAM windows after modifying any modules (error fixed in cpusim.scrollabbledesktop.BaseInternalFrame.setTitle) ENHANCEMENTS -- (Planned but not yet implemented) In the machine instruction dialog, you can now specify a field length consisting of a "@" preceding a positive integer. In this case, the assembler treats the field as a relative offset. That is, the assembler subtracts the address of the current instruction from the integer value that would normally occupy the bits of the field. Example: Suppose an instruction "foo" has an 8-bit field specified to have length @8. Furthermore, suppose a program contains this instruction at address 6 and, in the assembly program, the 8-bit field has value 18. Then the assembler will put the value of 18 - 6 = 12 in the 8 bit field of the instruction. NOTES -- These enhancements are not yet mentioned in the user's manual or in the online help. ================================================= Version 3.3.1 differences from 3.3.0 (January 12, 2006) BUG FIXES -- A single quoted character is now saved properly as a token by the scanner. -- A missing ENDM at the end of a macro declaration is now properly detected. ENHANCEMENTS -- Stopped EFileChooser from shrinking the display of files & folders as you move down the directory structure. Also, its default size is now larger. -- You can now specify ".include" pseudoinstructions in two formats: using double-quotes, as before, or using left and right chevron quotes < and >. A pseudoinstruction using double-quotes such as .include "W1-1.i" will search for the file W1-1.i relative to the directory containing the file for the current assembly language program (the program with the .include pseudoinstruction). A pseudoinstruction using chevron quotes such as .include will search for the file W1-1.i relative to the directory containing the file for the current machine. If the current program or machine does not have an associated file, then the path in the quotes is treated as an absolute path. (Thanks to Scott B. Hunter for the implementation of this new feature). -- Two new menu items have been added to the Execute menu for convenience. (a) The "Clear, assemble, load & run" menu item's action is just the combination of the "Clear everything" and the "Assemble, load & run" menu item actions. (b) The "Clear registers & run" menu item action is just the combination of the "Clear registers & arrays" and the "Run" menu item actions. NOTES -- These enhancements are not yet mentioned in the user's manual or in the online help. ================================================= Version 3.3.0 differences from 3.2.4 (December 13, 2005) BUG FIXES: -- Non-positive widths of registers and lengths of register arrays are now properly detected and an error message is displayed. ENHANCEMENTS -- More shortcut keys were added for menu items and the shortcut keys are now platform-specific. That is, ctrl-N on a Windows PC is replaced with Cmd-N on a Macintosh. -- Syntax highlighting is now done in text editing windows, with options for choosing from several highlighting schemes. -- More text editor specific shortcut keys were added (see the user's manual). -- EFileChooser is used instead of JFileChooser. -- The desktop pane is now a JScrollableDesktopPane. -- Opened text editing windows are positioned more appropriately. -- Users can now input integers in binary and hexadecimal as well as decimal. To input binary, precede the binary value with "0b", as in "0b1101" or "-0b1101". Similarly use the prefix "0x" for hexadecimal. -- Data in the registers and RAMs can now be displayed and edited in Unicode or unsigned decimal in addition to decimal, binary, hexadecimal, or ascii. -- The contents of text editing windows can now be right-clicked (ctrl-clicked on Macintosh), which brings up a popup menu with cut, copy, paste, delete, and select all options. KNOWN ISSUES -- You can no longer set the line wrap option for text editing windows. -- Some shortcut keys are quirky on Macintosh computers. For example, the paste shortcut may only work if you click on the menu bar between copying and pasting. ================================================= Version 3.2.4 differences from 3.2.2 (June 19, 2005) BUG FIXES: -- ENHANCEMENTS -- When a program is executing in debug mode and a break is reached, the address in a RAM that caused the break is highlighted in red to distinguish it from other highlighting and to signal that the break was what caused execution to halt. If the RAM window for the RAM causing the break is not open, it is opened. Furthermore, the RAM window is scrolled to the break line. As soon as execution resumes, the break is unhighlighted. -- When a RAM or Register window is closed, it is actually just made invisible and so when it is reopened, it is in the same location and state as before (other than possibly the contents of the registers or RAM). (An Assembly text window, in contrast, is actually closed.) ================================================= Version 3.2.3 differences from 3.2.2 (June 18, 2005) BUG FIXES: -- ENHANCEMENTS -- There is a new "Break" column in the RAM windows when in debug mode. When you run a program in debug mode CPU Sim keeps track of memory accesses (read or write). If a memory location that has its break checkbox checked is accessed, then CPU Sim will halt. More precisely, it halts immediately after executing the MemoryAccess microinstruction that accessed that memory location. At that point, you can inspect and/or change the values of any part of the machine, back up, or continue execution. By checking the box in front of a line of program code, the program will halt when that instruction is executed (since there must be a memory access to bring that instruction into a register before execution). By checking the box in front of a line in the data part of memory, such as the stack, the program will halt when the data stored at that line is read or written. ================================================= Version 3.2.2 differences from 3.2.1 (June 13, 2005) BUG FIXES: -- ENHANCEMENTS -- There is a Preferences dialog that allows the user to specify the font, size, and style for text windows and Register and RAM windows. It also lets you turn on/off line wrap in text windows. The preferences selected are saved in the properties file if such a file is included on the command line. ================================================= Version 3.2.1 differences from 3.2.0 (June 10, 2005) BUG FIXES: -- ENHANCEMENTS -- The command line can now take the following three optional arguments in any order: -m -p -t If CPU Sim is unable to read any of those files, an error message appears. If the user does not specify a machine file, a new empty machine is opened. If the user does not specify a properties file or assembly program file, then no such files are opened. Note that the previous version did not use flags -m, -p, -t whereas this version requires them for all arguments. Furthermore, there is no default properties file anymore. You must explicitly specify it on the command line if you wish to use one. NOTE: You must be running CPU Sim under JRE 1.5 to use the properties file. ================================================= Version 3.2.0 differences from 3.1.18 (June 1, 2005) BUG FIXES: -- Labels can now be used in front of macro calls. ENHANCEMENTS -- There are two new "Reopen" menus in the File menu. These new menus store text and machine files that were previously opened, to make it easier to reopen those files. Note: The names of the files are saved between sessions of CPU Sim in a CPUSimProperties.xml file, which means that every time you start up CPU Sim, the two Reopen menus will be the same as they were the last time you quit CPU Sim. The CPUSimProperties.xml file must be in the same directory as the CPUSim jar file. [NOTE: There is no such default properties file in versions 3.2.1 or later] -- You can now change the base used to display the contents of a RAM independently of the base used to display the addresses of that RAM. -- When editing the field lengths of a machine instruction, you can use negative field lengths or positive field lengths surrounded by parentheses, either of which indicates a "don't care" field, which is not considered an operand of the instruction and instead is just filled with the constant 0. -- When you start up CPU Sim using a command line, you can include an argument consisting of the name of a CPU Sim machine file (containing a machine description in XML) and that machine will automatically be opened. [NOTE: this argument will not work in versions 3.2.1 or later] -- There is a new .ascii pseudoinstruction. The one argument must be a double-quoted string without newlines and double-quotes. This behaves like the .data pseudoinstruction in that it puts the ASCII value of each character in the string into the next byte of memory. Example: .ascii "hello" => fills 5 bytes with ascii values of 'h', 'e', 'l', 'l', 'o' -- The .data pseudoinstruction now allows other forms. In particular, you can specify a list of values and the size (number of bytes) of each value, and those values will be placed in memory. See online manual for details. -- The user can now include binary and hexadecimal literals anywhere in assembly code that a decimal literal is allowed. Such literals are indicated by a prefix of "0x" (hexadecimal) or "0b" (binary). Examples: 0b11 => 3, -0b11 => -3, 0x1F => 31, -0x1F => -31 -- The user can now include an ascii character in single quotes and use it wherever integer literals are allowed. The ASCII value of the character is the integer value used. Examples: 'a' => 0b01100001, '0' => 0b00110000 = 48 (decimal) -- When the user is asked for input via a dialog or when output is displayed via a dialog, the RAM and Register windows are first updated to display the current state at the time of the I/O. ================================================= Version 3.1.18 differences from 3.1.17 (January 3, 2005) BUG FIXES: -- In the previous version, there was a bug that caused an exception when you tried to choose the "Clear everything" menu item in the Execute menu. ENHANCEMENTS -- All Help windows are now modeless and so the user can now switch back and forth between a dialog and the associated Help window without closing either of them. ================================================= Version 3.1.17 differences from 3.1.16 (December 13, 2004) BUG FIXES: -- In the previous version, if you make a reference to an address, e.g., "iflt Done", and put "Done:" at the bottom of the program with nothing after it and tried to assemble the code, the Assembler crashed. This bug was fixed. -- In the previous version, RAM windows had a "Break" column that contained garbage. That column was removed. ================================================= Version 3.1.16 differences from 3.1.15 (November 29, 2004) BUG FIXES -- When running a program in debug mode and choosing "Clear Everything" followed by "Assemble & load", sometimes non-zero values appeared in a RAM. This bug was fixed. ENHANCEMENTS -- If the user tries to assemble code that uses the name of an instruction as a label (which is illegal), as in "jmpz A5 read" where "read" is both a label and the name of an instruction, a new error message appears that is more informative than the previous version's error message. -- In addition to allowing ascii characters in range 0-127 to appear in the assembly language text file, CPU Sim also now allows the following special characters to appear (decimal ascii value): 129 141 143 144 157 160 173 These characters are treated as white space. All other characters are illegal. -- After deleting a microinstruction from a microinstruction sequence in the machine instruction dialog, highlighting remains on the same line if possible. -- The Microinstruction dialog now saves its size and position within each session so that when you close and then reopen the dialog, it will reappear positioned where it had last appeared. ================================================= Version 3.1.15 differences from 3.1.14 (October 13, 2004) BUG FIXES -- Registers in a register array could be used in microinstructions in version 3.1.14, but when these micros were saved in a .cpu file, they were saved incorrectly and so the .cpu file could not be reopened. Version 3.1.15 corrects this. ================================================= Version 3.1.14 differences from 3.1.12 (September 30, 2004) BUG FIXES -- The Arithmetic micro's execute method was fixed to properly detect 2's complement overflow ENHANCEMENTS -- RAM and Register windows now have 4 options for displaying their data in each cell: binary, decimal, hexadecimal, and ascii The last option is the new one. -- The comments column of the RAM window is now the full text of the line of assembly code, not just the comments from that line