Altair 8800 Simulator with Z80 support ====================================== 0. Revision History Original version of this document written by Charles E Owen Latest update 23-Mar-2002 by Peter Schorn 1. Background. The MITS (Micro Instrumentation and Telemetry Systems) Altair 8800 was announced on the January 1975 cover of Popular Electronics, which boasted you could buy and build this powerful computer kit for only $397. The kit consisted at that time of only the parts to build a case, power supply, card cage (18 slots), CPU card, and memory card with 256 *bytes* of memory. Still, thousands were ordered within the first few months after the announcement, starting the personal computer revolution as we know it today. Many laugh at the small size of the that first kit, noting there were no peripherals and the 256 byte memory size. But the computer was an open system, and by 1977 MITS and many other small startups had added many expansion cards to make the Altair quite a respectable little computer. The "Altair Bus" that made this possible was soon called the S-100 Bus, later adopted as an industry standard, and eventually became the IEE-696 Bus. 2. Hardware We are simulating a fairly "loaded" Altair 8800 from about 1977, with the following configuration: device simulates name(s) CPU Altair 8800 with Intel 8080 CPU board, 62KB of RAM, 2K of EPROM with start boot ROM. SIO MITS 88-2SIO Dual Serial Interface Board. Port 1 is assumed to be connected to a serial "glass TTY" that is your terminal running the Simulator. PTR Paper Tape Reader attached to port 2 of the 2SIO board. PTP Paper Tape Punch attached to port 2 of the 2SIO board. This also doubles as a printer port. DSK MITS 88-DISK Floppy Disk controller with up to eight drives. 2.1 CPU We have 2 CPU options that were not present on the original machine but are useful in the simulator. We also allow you to select memory sizes, but be aware that some sample software requires the full 64K (i.e. CP/M) and the MITS Disk Basic and Altair DOS require about a minimum of 24K. SET CPU 8080 Simulates the 8080 CPU (normal) SET CPU Z80 Simulates the Z80 CPU. Note that some software (e.g. most original Altair software such as 4K Basic) requires an 8080 CPU and will not or not properly run on a Z80. This is mainly due to the use of the parity flag on the 8080 which has not always the same semantics on the Z80. SET CPU ITRAP Causes the simulator to halt if an invalid opcode is detected (depending on the chosen CPU). SET CPU NOITRAP Does not stop on an invalid Opcode. This is how the real 8080 works. SET CPU 4K SET CPU 8K SET CPU 12K SET CPU 16K ...... SET CPU 64K All these set various CPU memory configurations. The 2K EPROM at the high end of memory is always present and will always boot. SET CPU BANKED Enables the banked memory support. The simulated memory has four banks with address range 0..'common' (see registers below) and a common area from 'common' to 0xfff which is common to all banks. The currently active bank is determined by register 'bank' (see below). You can only switch to banked memory if the memory is set to 64K. The banked memory is used by CP/M 3. SET CPU NONBANKED Disables banked memory support. The BOOT EPROM card starts at address FF00. Jumping to this address will always boot drive 0 of the floppy controller. If no valid bootable software is present there the machine crashes. This is historically accurate behavior. The real 8080, on receiving a HLT (Halt) instruction, freezes the processor and only an interrupt or CPU hardware reset will restore it. The simulator is alot nicer, it will halt but send you back to the simulator command line. CPU Registers include the following: name size comments PC 16 The Program Counter AF 16 The accumulator and the flag register F = S Z - AC - P/V N C S = Sign flag. Z = Zero Flag. AC = Auxillary Carry flag. P/V = Parity flag on 8080 Parity / Overflow flag on Z80 - = not used (undefined) N = Internal sign flag C = Carry flag. BC 16 The BC register pair. Register B is the high 8 bits, C is the lower 8 bits DE 16 The DE register pair. Register D is the high 8 bits, E is the lower 8 bits. HL 16 The HL register pair. Register H is the high 8 bits, L is the lower 8 bits. AF1 16 The alternate AF register (only on Z80) BC1 16 The alternate BC register (only on Z80) DE1 16 The alternate DE register (only on Z80) HL1 16 The alternate HL register (only on Z80) IX 16 The IX index register (only on Z80) IY 16 The IY index register (only on Z80) IFF 8 Interrupt flag (only on Z80, no effect) INT 8 Interrupt register (only on Z80, no effect) SR 16 The front panel switches (use D SR 8 for 4k Basic). WRU 8 The interrupt character. This starts as 5 (ctrl-E) but some Altair software uses this keystroke so best to change this to something exotic such as 035 (which is Ctl-]). BANK 2 The currently active memory bank (if banked memory is activated - see memory options above) COMMON 16 The starting address of common memory. Originally set to 0xc000 (note this setting must agree with the value supplied to GENCPM for CP/M 3 system generation) 2.2 The Serial I/O Card (2SIO) This simple programmed I/O device provides 2 serial ports to the outside world, which could be hardware jumpered to support RS-232 plugs or a TTY current loop interface. The standard I/O addresses assigned by MITS was 10-11 (hex) for the first port, and 12-13 (hex) for the second. We follow this standard in the Simulator. The simulator directs I/O to/from the first port to the screen. The second port reads from an attachable "tape reader" file on input, and writes to an attachable "punch file" on output. These files are considered a simple stream of 8-bit bytes. The SIO can be configured in SIMH with the following commands: SET SIO TTY Bit 8 is set to zero on console output SET SIO ANSI Bit 8 is not touched on console output SET SIO ALL Console input support lower- and upper case SET SIO UPPER Console input is transformed to upper case characters only (This feature is useful for most Altair software) SET SIO BS Map the delete character to backspace SET SIO DEL Map the backspace character to delete SET SIO QUIET Do not print warning messages SET SIO VERBOSE Print warning messages (useful for debugging) The register SIOWL determines how often the same warning is displayed. The default is 3. You can also attach the SIO to a port: ATTACH SIO 23 Console IO goes via a Telnet connection on port 23 DETACH SIO Console IO goes via the regular SIMH console 2.3 The SIMH pseudo device The SIMH pseudo device facilitates the communication between the simulated ALTAIR and the simulator environment. This device defines a number of (most R/O) registers (see source code) which are primarily useful for debugging purposes. The SIMH pseudo device can be configured with SET SIMH QUIET Do not print warning messages SET SIMH VERBOSE Print warning messages (useful for debugging) 2.4 The 88-DISK controller. The MITS 88-DISK is a simple programmed I/O interface to the MITS 8-inch floppy drive, which was basically a Pertec FD-400 with a power supply and buffer board builtin. The controller supports neither interrupts nor DMA, so floppy access required the sustained attention of the CPU. The standard I/O addresses were 8, 9, and 0A (hex), and we follow the standard. Details on controlling this hardware are in the altair_dsk.c source file. The only difference is that the simulated disks may be larger than the original ones: The original disk had 77 tracks while the simulated disks support up to 254 tracks (only relevant for CP/M). For debugging purposes you can set the trace level of some disk I/O functions. To do so the following bits in TRACE (a register of the disk) have been defined with the following meaning: 1 Trace all IN and OUT instructions on the disk ports 8 and 9 2 Trace all read and writes to full sectors on the disk 4 Print a message whenever an unnecessary step-in or step out of the disk head occurs (often an indication of an infinite loop) 8 Print a message whenever the disk head appears to be waiting for a sector which does not show up (often an indication of an infinite loop) For example the command "D TRACE 10" will trace options 2+8 from above. The DSK device can be configured with SET DSK QUIET Do not print warning messages for disk SET DSK VERBOSE Print warning messages for disk (useful for debugging) The register DSKWL determines how often the same warning is displayed. The default is 3. SET DSK WRITEENABLED Allow write operations for disk SET DSK LOCKED Disk is locked, i.e. no write operations will be allowed. 3. Sample Software Running an Altair in 1977 you would be running either MITS Disk Extended BASIC, or the brand new and sexy CP/M Operating System from Digital Research. Or possibly, you ordered Altair DOS back when it was promised in 1975, and are still waiting for it to be delivered in early 1977. We have samples of all three for you to check out. We can't go into the details of how they work, but we'll give you a few hints. 3.1 CP/M Version 2.2 This version is my own port of the standard CP/M to the Altair. There were some "official" versions but I don't have them. None were endorsed or sold by MITS to my knowledge, however. To boot CP/M: sim> attach dsk altcpmx.dsk sim> go ff00 62K CP/M Version 2.2 (ALTAIR 8800, BIOS V1.06, 14-Feb-02) A>DIR CP/M feels like DOS, sort of. DIR will work. I have included all the standard CP/M utilities, plus a few common public-domain ones. I also include the sources to the customized BIOS and some other small programs. TYPE will print an ASCII file. DUMP will dump a binary one. LS is a better DIR than DIR. ASM will assemble .ASM files to Hex, LOAD will "load" them to binary format (.COM). ED is a simple editor, #A command will bring the source file to the buffer, T command will "type" lines, L will move lines, E exits the editor. 20L20T will move down 20 lines, and type 20. Very DECish. DDT is the debugger, DO is a batch-type command processor. A sample batch file that will assemble and write out the bootable CP/M image (on drive A) is "SYSGEN.SUB". To run it, type "DO SYSGEN". In order to efficiently transfer files into the CP/M environment use the included program READ . If you have a file named foo.ext in the current directory (i.e. the directory where SIMH is), executing READ FOO.EXT under CP/M will transfer the file onto the CP/M disk. READ will only run with Z80 CPU so remember to "SET CPU Z80". The disk "altcpmx.dsk" contains the following files: Name Ext Size Comment ASM .COM 8K ; CP/M assembler BOOT .COM 1K ; transfer control to boot ROM BOOTGEN .COM 2K ; put a program on the boot sectors BOOTGEN .SPL 6K ; SPL source for BOOTGEN.COM C .SUB 1K ; compile an SPL program CALC .PRO 3K ; Prolog sample program (calculator) CBIOSX .MAC 10K ; CP/M 2 BIOS source for Altair CC .SUB 1K ; read and compile an SPL program COPY .COM 1K ; copy disks CPM62 .COM 9K ; CP/M BDOS and CCP DDT .COM 5K ; 8080 debugger DDTZ .COM 10K ; Z80 debugger DIF .COM 3K ; determine differences between two files DIF .SPL 7K ; SPL source for DIF.COM DIFF .PRO 2K ; Prolog sample program (symbolic differentiation) DO .COM 2K ; batch processing DSKBOOT .COM 1K ; code for boot ROM DSKBOOT .MAC 3K ; source for boot ROM DSKBOOT .SUB 1K ; create DKSBOOT.COM DUMP .COM 1K ; hex dump a file ED .COM 7K ; line editor ELIZA .BAS 9K ; Elisa game in Basic EX8080 .COM 9K ; exercise 8080 instruction set EX8080 .MAC 47K ; source for EX8080.COM EX8080 .SUB 1K ; benchmark execution of EX8080.COM EXZ80 .COM 9K ; exercise Z80 instruction set EXZ80 .MAC 47K ; source for EXZ80.COM EXZ80 .SUB 1K ; benchmark execution of EXZ80.COM FAMILY .PRO 3K ; Prolog sample program (family relations) FORMAT .COM 2K ; format disks GO .COM 0K ; start the currently loaded program at 100H KNAKE .PRO 2K ; Prolog sample program (logic puzzle) L80 .COM 11K ; Microsoft linker LADDER .COM 40K ; game LADDER .DAT 1K ; high score file for LADDER.COM LOAD .COM 2K ; load hex files LS .COM 3K ; directory utility LU .COM 20K ; library utility M80 .COM 20K ; Microsoft macro assembler MBASIC .COM 24K ; Microsoft Basic interpreter MC .SUB 1K ; assemble and link an assmbler program MCC .SUB 1K ; read, assemble and link an assmbler program MOVCPM .COM 12K OTHELLO .COM 12K ; Othello (Reversi) game PINST .COM 4K ; terminal installer for PROLOGZ PIP .COM 8K ; Peripheral Interchange Program PROLOGZ .COM 17K ; Prolog development environment PROLOGZ .TXT 40K ; PROLOGZ documentation in German QUEEN .PRO 1K ; Prolog sample program (n-queens problem) R .COM 3K ; read files from SIMH environment READ .SPL 9K ; SPL source for R.COM RSETSIMH.COM 1K ; reset SIMH interface RSETSIMH.MAC 1K ; assembler source for RSETSIMH.COM SHOWSEC .COM 3K ; show sectors on a disk SHOWSEC .SPL 6K ; assembler source for SHOWSEC.COM SPL .COM 37K ; SPL compiler SPL .TXT 56K ; SPL documentation in German SPLERROR.DAT 11K ; error messages for SPL compiler SPLIB .REL 6K ; SPL run time library STAT .COM 6K ; provide information about currently logged disks SURVEY .COM 2K ; system survey SURVEY .MAC 15K ; assembler source for SURVEY.COM SYSCOPY .COM 2K ; copy system tracks between disks SYSCOPY .SPL 5K ; SPL source for SYSCOPY.COM SYSGEN .SUB 1K ; create CP/M 2 on drive A: SYSGENDR.SUB 1K ; create CP/M 2 on arbitrary drive TSHOW .COM 1K ; show split time TSHOW .MAC 1K ; assembler source for TSHOW.COM TSTART .COM 1K ; create timer and start it TSTART .MAC 1K ; assembler source for TSTART.COM TSTOP .COM 1K ; show final time and stop timer TSTOP .MAC 1K ; assembler source for TSTOP.COM UNCR .COM 7K ; un-crunch utility UNERA .COM 2K ; un-erase a file UNERA .MAC 16K ; source for UNERA.COM UPDATE2 .SUB 2K ; batch file to update distribution disk USQ .COM 2K ; un-squeeze utility W .COM 3K ; write files to SIMH environment WM .COM 11K ; word master screen editor WM .HLP 3K ; help file for WM.COM WORM .COM 4K ; worm game for VT100 terminal WRITE .SPL 7K ; SPL source for W.COM XSUB .COM 1K ; support for DO.COM ZTRAN4 .COM 4K ; translate 8080 mnemonics into Z80 equivalents 3.2 CP/M Version 3 with banked memory CP/M 3 is the successor to CP/M 2.2. A customised BIOS (BIOS3.MAC) is included to facilitate modification if so desired. The defaults supplied in GENCPM.DAT for system generation can be used. BOOTGEN.COM is used to place the CP/M loader (LDR.COM) on the boot tracks of a disk. Running CP/M 3 with banked memory: sim> attach dsk cpm3b.dsk sim> reset cpu sim> set cpu banked sim> set cpu itrap sim> go ff00 Executing "do sysgen" will re-generate the banked version while "do sysgennb" will create a non-banked version of CP/M 3. You can boot CP/M 3 with or without a Z80 CPU. The Z80 CPU is needed for both sysgens due to the use of BOOTGEN.COM which requires it. The disk cpm3b.dsk contains the following files: ASM .COM 8K ; CP/M assembler ASSIGN .SYS 1K BDOS3 .SPR 10K BIOS .MAC 2K ; assembler routines for SPL library BIOS3 .MAC 20K ; CP/M 3 BIOS source for Altair SIMH BIOS3 .SPR 3K BNKBDOS3.SPR 14K BNKBIOS3.SPR 3K BOOT .COM 1K ; transfer control to boot ROM BOOTGEN .COM 2K ; put a program on the boot sectors BOOTGEN .SPL 6K ; SPL source for BOOTGEN.COM C .SUB 1K ; compile an SPL program CC .SUB 1K ; read and compile an SPL program CCP .COM 4K COPYSYS .COM 2K CPM3 .SYS 17K CPMLDR .COM 5K ; CP/M 3 loader CPMLDR .MAC 37K ; used to build CPMLDR.COM and LDR.COM CPMLDR .SUB 1K ; build CPMLDR.COM CREF80 .COM 4K ; Microsoft cross reference utility DATE .COM 4K ; date utility DDT .COM 5K ; 8080 debugger DDTZ .COM 10K ; Z80 debugger DEFS .LIB 1K ; include file for BIOS3.MAC to create banked CP/M 3 DEFSL .LIB 1K ; include file for BIOS3.MAC to create loader BIOS DEFSNB .LIB 1K ; include file for BIOS3.MAC to create non-banked CP/M 3 DEVICE .COM 8K DIF .COM 3K ; determine differences between two files DIF .SPL 7K ; SPL source for DIF.COM DIR .COM 15K ; directory utility DO .COM 6K ; batch processing DSKBOOT .COM 1K ; code for boot ROM DSKBOOT .MAC 3K ; source for boot ROM DUMP .COM 1K ED .COM 10K ERASE .COM 4K EX8080 .COM 9K ; exercise 8080 instruction set EX8080 .MAC 47K ; source for EX8080.COM EX8080 .SUB 1K ; benchmark execution of EX8080.COM EXZ80 .COM 9K ; exercise Z80 instruction set EXZ80 .MAC 47K ; source for EXZ80.COM EXZ80 .SUB 1K ; benchmark execution of EXZ80.COM FORMAT .COM 2K ; format disks GENCOM .COM 15K GENCPM .COM 21K GENCPM .DAT 3K ; CP/M generation information for banked version GENCPMNB.DAT 3K ; CP/M generation information for non-banked version GET .COM 7K HELP .COM 7K ; help utility HELP .HLP 62K ; help files HEXCOM .CPM 2K HIST .UTL 2K INITDIR .COM 32K L80 .COM 11K ; Microsoft linker LDR .COM 4K ; CP/M loader with optimised loader BIOS LDRBIOS3.MAC 9K ; optimised (for space) loader BIOS LIB .COM 7K ; Digital Research librarian LIB80 .COM 5K ; Microsoft librarian LINK .COM 16K ; Digital Research linker LOAD .COM 2K LU .COM 20K ; library utility M80 .COM 20K ; Microsoft macro assembler MC .SUB 1K ; assemble and link an assmbler program MCC .SUB 1K ; read, assemble and link an assmbler program PATCH .COM 3K PIP .COM 9K ; Peripheral Interchange Program PROFILE .SUB 1K ; commands to be executed at start up PUT .COM 7K R .COM 3K ; read files from SIMH environment READ .SPL 9K ; SPL source for R.COM RENAME .COM 3K RESBDOS3.SPR 2K RMAC .COM 14K ; Digital Research macro assembler RSETSIMH.COM 1K ; reset SIMH interface RSETSIMH.MAC 1K ; assembler source for RSETSIMH.COM SAVE .COM 2K SCB .MAC 1K SET .COM 11K SETDEF .COM 5K SHOW .COM 9K SHOWSEC .COM 3K ; show sectors on a disk SHOWSEC .SPL 6K ; assembler source for SHOWSEC.COM SID .COM 8K ; 8080 debugger SPL .COM 37K ; SPL compiler SPLERROR.DAT 11K ; error messages for SPL compiler SPLIB .REL 6K ; SPL run time library STDIO . 2K ; include file for SPL programs SUBMIT .COM 6K ; batch processor SYSCOPY .COM 2K ; copy system tracks between disks SYSCOPY .SPL 5K ; SPL source for SYSCOPY.COM SYSGEN .SUB 1K ; create banked CP/M 3 system SYSGENNB.SUB 1K ; create non-banked CP/M 3 system TRACE .UTL 2K TSHOW .COM 1K ; show split time TSHOW .MAC 1K ; assembler source for TSHOW.COM TSTART .COM 1K ; create timer and start it TSTART .MAC 1K ; assembler source for TSTART.COM TSTOP .COM 1K ; show final time and stop timer TSTOP .MAC 1K ; assembler source for TSTOP.COM TYPE .COM 3K UNERA .COM 2K ; un-erase a file UNERA .MAC 16K ; source for UNERA.COM UPDATE3 .SUB 2K ; batch file to update distribution disk W .COM 3K ; write files to SIMH environment WM .COM 11K ; word master screen editor WM .HLP 3K ; help file for WM.COM WRITE .SPL 7K ; SPL source for W.COM XREF .COM 16K ; cross reference utility ZSID .COM 10K ; Z80 debugger ZTRAN4 .COM 4K ; translate 8080 mnemonics into Z80 equivalents 3.3 MITS Disk Extended BASIC Version 4.1 This was the commonly used software for serious users of the Altair computer. It is a powerful (but slow) BASIC with some extended commands to allow it to access and manage the disk. There was no operating system it ran under. To boot: sim> set cpu 8080 ;Z80 will not work sim> attach dsk mbasic.dsk sim> set sio upper sim> go ff00 MEMORY SIZE? [return] LINEPRINTER? [C return] HIGHEST DISK NUMBER? [0 return] (0 here = 1 drive system) NUMBER OF FILES? [3 return] NUMBER OF RANDOM FILES? [2 return] 44041 BYTES FREE ALTAIR BASIC REV. 4.1 [DISK EXTENDED VERSION] COPYRIGHT 1977 BY MITS INC. OK [MOUNT 0] OK [FILES] 3.4 Altair DOS Version 1.0 This was long promised but not delivered until it was almost irrelevant. A short attempted tour will reveal it to be a dog, far inferior to CP/M. To boot: sim> attach dsk altdos.dsk sim> set sio upper sim> go ff00 MEMORY SIZE? [return] INTERRUPTS? N [return] HIGHEST DISK NUMBER? [0 return] (3 here = 4 drive system) HOW MANY DISK FILES? [3 return] HOW MANY RANDOM FILES? [2 return] 056449 BYTES AVAILABLE DOS MONITOR VER 1.0 COPYRIGHT 1977 BY MITS INC .[MNT 0] .[DIR 0] 3.5 Altair 4k Basic In order to run the famous 4k Basic, use the following commands (the trick is to get the Switch Register right). sim> set cpu 8080 ;note 4k Basic will not run on a Z80 CPU sim> set sio upper ;4k Basic does not like lower case letters as input sim> set sio ansi ;4k Basic produces 8-bit output, strip to seven bits sim> d sr 8 ;good setting for the Switch Register sim> load 4kbas.bin 0 ;load it at 0 sim> go 0 ;and start it MEMORY SIZE? [return] TERMINAL WIDTH? [return] WANT SIN? [Y] 61911 BYTES FREE BASIC VERSION 3.2 [4K VERSION] OK 3.6 Altair 8k Basic Running 8k Basic follows the procedure for 4k Basic. sim> set cpu 8080 ;note 8k Basic will not run on a Z80 CPU sim> set sio upper ;8k Basic does not like lower case letters as input sim> set sio ansi ;8k Basic produces 8-bit output, strip to seven bits sim> d sr 8 ;good setting for the Switch Register sim> load 8kbas.bin 0 ;load it at 0 sim> go 0 ;and start it MEMORY SIZE? [A] WRITTEN FOR ROYALTIES BY MICRO-SOFT MEMORY SIZE? [return] TERMINAL WIDTH? [return] WANT SIN-COS-TAN-ATN? [Y] 58756 BYTES FREE ALTAIR BASIC REV. 4.0 [EIGHT-K VERSION] COPYRIGHT 1976 BY MITS INC. OK 3.7 Altair Basic 4.0 Execute the following commands to run Altair Extended Basic. sim> set sio upper ;Extended Basic does not like lower case letters as input sim> set sio ansi ;Extended Basic produces 8-bit output, strip to seven bits sim> d sr 8 ;good setting for the Switch Register sim> load exbas.bin 0 ;load it at 0 sim> go 0 ;and start it 16384 Bytes loaded at 0. MEMORY SIZE? [return] WANT SIN-COS-TAN-ATN? [Y] 50606 BYTES FREE ALTAIR BASIC REV. 4.0 [EXTENDED VERSION] COPYRIGHT 1977 BY MITS INC. OK 4. Brief summary of all major changes to the original Altair simulator - Full support for Z80. CP/M software requiring a Z80 CPU now runs properly. DDTZ and PROLOGZ are included for demonstration purposes. - Added banked memory support. - PC queue implemented. - Full assembler and dis-assembler support for Z80 and 8080 mnemonics. Depending on the current setting of the CPU, the appropriate mnemonics are used. - The BOOT ROM was changed to fully load the software from disk. The original code basically loaded a copy of itself from the disk and executed it. - ROM and memory size settings are now fully honored. This means that you cannot write into the ROM or outside the defined RAM (e.g. when the RAM size was truncated with the SET CPU commands). This feature allows programs which check for the size of available RAM to run properly (e.g. 4k Basic). - The console can also be used via Telnet. This is useful when a terminal is needed which supports cursor control such as a VT100. PROLOGZ for example has a built-in screen editor which works under Telnet. - Simplified file exchange for CP/M. Using the READ program under CP/M one can easily import files into CP/M from the regular file system. Note that PIP does not work properly on non-text files on PTR. - The last character read from PTR is always Control-Z (the EOF character for CP/M). This makes sure that PIP (Peripheral Interchange Program on CP/M) will terminate properly. - Fixed a bug in the BIOS warm boot routine which caused CP/M to crash. - Modified the BIOS for CP/M to support 8 disks. - Added CP/3 both banked and non-banked versions as sample software - Changed from octal to hex which is more concise. - Made the DSK and SIO device more robust (previously malicious code could crash the simulator)