Version: 1.2.0
Date: 2011/09/07


I. Introduction

sim980 is a simulator for the TI 980 computer. 


II. Build sim980

Lunix/Unix:

$ make

The make attempts to figure out which system to make for using uname.

WinBlows:

$ nmake nt


III. To run sim980

$ sim980 [-options]

Where options are:

   -c configfile - File from which to read configuration information.
                   The command format is the same as command mode.
   -p            - Run in Panel mode.
   -s memsize    - Size of memory in words (can use K, eg. 32K).
   -w NN         - Size of panel window.

In command mode the simulator commands are:

   a = attach device, syntax:

         a device[/switches] devaddr device.file

   B = begin trace pc (default 0), syntax:

         B location

   b = boot from device, syntax:

         b[n] device

   c = clear breakpoint/watchpoint

         c b|w

   D = disassemble instructions: syntax:

         D location [count]

   d = display memory, syntax:

         d[b] location [length]

   E = End trace pc (default >FFFF), syntax:

         E location

   g = go (run program)

   h = help

   i = instructions, dumps instruction buffer (last 60 instructions)

   k = set breakpoint, syntax:

         k location

   l = load program, syntax:

         l[n] [loadaddr] object.file

   m = modify memory, syntax:

         m location newvalue

   N = disassemble next instructions, syntax:

         N [count]

   n = display next memory locations, syntax:

         n [length]

   p = set pc, syntax:

         p location

   q = quit the simulator

   R = reset the system

   r = Register display or modify

         r d|m reg [newvalue]

   s = single step program

   t = trace program, syntax:

         t [count] trace.file

   W = set watchpoint, syntax:

         W location

   w = set Sense Switch:

         w switch

   z = toggle panel mode, syntax:

         z [windowlen]

Where:

   device      = ci - console input
		 co - console output
		 cp - card punch
		 cr - card reader
		 dn - DISK, n = 0-3
		 mn - TAPE, n = 0-3
                 pr - printer

   switches    = device specific switches:

	       TAPE:
	          /c      - Create tape file.
	          /r      - Read only.

	       DISK:
	          /r      - Read only.

   devaddr     = device address. For data bus devices the address has the
                 group as well as the external register number.

   device.file = file to be associated with a device.
		 A NULL specification for the device.file means that the
		 device is available but is offline.

   location    = memory location.

   newvalue    = contents of displayed memory replaced with value.

   loadaddr    = load address for relocatable objects.

   object.file = file containing 980 object.

   trace.file  = file containing the instruction trace.

   count       = count of instructions to process before beginning trace.

All numbers can be in either decimal for hexadecimal. Hexadecimal numbers are
indicated with a beginning greater than (>) sign. The 'n' for the boot and load
commands means do not start. This allows you to set breakpoints, etc.

Panel mode operation displays the current registers, front panel value, and
operation status. The panel display is updated after every 10 clock ticks.
Also, the console is displayed under the panel display.

When the simulator is running the simulated program you enter the command break
character, CTRL-E, to regain command mode. The program is suspended and the
command prompt is displayed. You may enter any of the above commands and the
go command "g" resumes the simulated program.

The simulator adds support for single and double density floppy disks, FD800
and FD1000. Although the real TI-980 did not support these devices. It is
configured as a DMA device like other disks.


VII. Known problems/limitations

1. All CPU conditions not fully tested.
2. Interrupts have been implemented. But, need testing with "real" 980 code.
3. Disk and Tape I/O is not fully implemented. Need real examples.
4. Vectored interrupts have not been implemented.
5. The card punch was implemented as an inverse of the card reader. Need 
   documentation of actual operation.

