
SIS - Sparc Instruction Simulator README file  (v2.0, 05-02-1996)
-------------------------------------------------------------------

1. Introduction

The SIS is a SPARC V7 architecture simulator. It consist of two parts,
the simulator core and a user defined memory module. The simulator
core executes the instructions while the memory module emulates memory
and peripherals. 

2. Usage

The simulator is started as follows: 

sis [-uart1 uart_device1] [-uart2 uart_device2] 
    [-nfp] [-freq frequency] [-c batch_file] [files] 

The default uart devices for SIS are /dev/ptypc and /dev/ptypd. The
-uart[1,2] switch can be used to connect the uarts to other devices.
Use 'tip /dev/ttypc'  to connect a terminal emulator to the uarts.
The '-nfp' will disable the simulated FPU, so each FPU instruction will
generate a FPU disabled trap. The '-freq' switch can be used to define
which "frequency" the simulator runs at. This is used by the 'perf'
command to calculated the MIPS figure for a particular configuration.
The give frequency must be an integer indicating the frequency in MHz.

The -c option indicates that sis commands should be read from 'batch_file' 
at startup.

Files to be loaded must be in one of the supported formats (see INSTALLATION),
and will be loaded into the simulated memory. The file formats are
automatically recognised.

The script 'startsim' will start the simulator in one xterm window and
open a terminal emulator (tip) connected to the UART A in a second
xterm window. Below is description of commands  that are recognized by 
the simulator. The command-line is parsed using GNU readline. A command
history of 64 commands is maintained. Use the up/down arrows to recall
previous commands. For more details, see the readline documentation.

batch <file>

Execute a batch file of SIS commands.

+bp <address>

Adds an breakpoint at address <address>.

bp

Prints all breakpoints

-bp <num>

Deletes breakpoint <num>. Use 'bp' to see which number is assigned to the 
breakpoints.

cont [inst_count]

Continue execution at present position, optionally for [inst_count] 
instructions.

dis [addr] [count]

Disassemble [count] instructions at address [addr]. Default values for
count is 16 and addr is the present address.

echo <string>

Print <string> to the simulator window.

float

Prints the FPU registers

go <address> [inst_count]

The go command will set pc to <address> and npc to <address> + 4, and start
execution. No other initialisation will be done. If inst_count is given, 
execution will stop after the specified number of instructions.

help

Print a small help menu for the SIS commands.

hist [trace_length]

Enable the instruction trace buffer. The 'trace_length' last executed 
instructions will be placed in the trace buffer. A 'hist' command without 
a trace_length will display the trace buffer. Specifying a zero trace 
length will disable the trace buffer.

load  <file_name>

Loads a file into simulator memory. 

mem [addr] [count]

Display memory at [addr] for [count] bytes. Same default values as above.

quit

Exits the simulator.

perf [reset]

The 'perf' command will display various execution statistics. A 'perf reset' 
command will reset the statistics. This can be used if statistics shall 
be calculated only over a part of the program. The 'run' and 'reset' 
command also resets the statistic information.

reg [reg_name] [value]

Prints and sets the IU regiters. 'reg' without parameters prints the IU
registers. 'reg [reg_name] [value]' sets the corresponding register to
[value]. Valid register names are psr, tbr, wim, y, g1-g7, o0-o7 and
l0-l7.

reset

Performs a power-on reset. This command is equal to 'run 0'.

run [inst_count]

Resets the simulator and starts execution from address 0. If an instruction
count is given (inst_count), the simulator will stop after the specified 
number of instructions. The event queue is emptied but any set breakpoints
remain.

step

Equal to 'trace 1'

tra [inst_count]

Starts the simulator at the present position and prints each instruction
it executes. If an instruction count is given (inst_count), the simulator 
will stop after the specified number of instructions.

Typing a 'Ctrl-C' will interrupt a running simulator. 

Short forms of the commands are allowed, e.g 'c' 'co' or 'con' are all
interpreted as 'cont'. 


3. Simulator core

The SIS emulates the behavior of the 90C601E and 90C602E sparc IU and
FPU from Matra MHS. These are roughly equivalent to the Cypress C601
and C602.  The simulator is cycle true, i.e a simulator time is
maintained and inremented according the IU and FPU instruction timing.
The parallel execution between the IU and FPU is modelled, as well as
stalls due to operand dependencies (FPU). The core interacts with the
user-defined memory modules through a number of functions. The memory
module must provide the following functions:

int memory_read(asi,addr,data,ws)
int asi;
unsigned int addr;
unsigned int *data;
int *ws;

int memory_write(asi,addr,data,sz,ws)
int asi;
unsigned int addr;
unsigned int *data;
int sz;
int *ws;

int sis_memory_read(addr, data, length)
unsigned int addr;
char   *data;
unsigned int length;

int sis_memory_write(addr, data, length)
unsigned int addr;
char    *data;
unsigned int length;

int init_sim()

int reset()

int error_mode(pc)
unsigned int pc;

memory_read() is used by the simulator to fetch instructions and
operands.  The address space identifier (asi) and address is passed as
parameters. The read data should be assigned to the data pointer
(*data) and the number of waitstate to *ws. 'memory_read' should return
0 on success and 1 on failure. A failure will cause a data or
instruction fetch trap. memory_read() always reads one 32-bit word.

sis_memory_read() is used by the simulator to display and disassemble
memory contants. The function should copy 'length' bytes of the simulated
memory starting at 'addr' to '*data'.
The sis_memory_read() should return 1 on success and 0 on failure.
Failure should only be indicated if access to unimplemented memory is attempted.

memory_write() is used to write to memory. In addition to the asi
and address parameters, the size of the written data is given by 'sz'.
The pointer *data points to the data to be written. The 'sz' is coded
as follows:

  sz	access type
  0	  byte
  1	  halfword
  2	  word
  3	  double-word

If a double word is written, the most significant word is in data[0] and
the least significant in data[1].

sis_memory_write() is used by the simulator during loading of programs.
The function should copy 'length' bytes from *data to the simulated
memory starting at 'addr'. sis_memory_write() should return 1 on 
success and 0 on failure. Failure should only be indicated if access 
to unimplemented memory is attempted. See erc32.c for more details 
on how to define the memory emulation functions.

The 'init_sim' is called once when the simulator is started. This function
should be used to perform initialisations of user defined memory or 
peripherals that only have to be done once, such as opening files etc.

The 'reset' is called every time the simulator is reset, i.e. when a
'run' command is given. This function should be used to simulate a power
on reset of memory and peripherals.

error_mode() is called by the simulator when the IU goes into error mode,
typically if a trap is caused when traps are disabled. The memory module
can then take actions, such as issue a reset.

sys_reset() can be called by the memory module to reset the simulator. A
reset will empty the event queue and perform a power-on reset.

4. Events and interrupts

The simulator supports an event queue and the generation of processor
interrupts. The following functions are available to the user-defined
memory module:

event(cfunc,arg,delta)
void (*cfunc)();
int arg;
unsigned int delta;

set_int(level,callback,arg)
int level;
void (*callback)();
int arg;

clear_int(level)
int level;

sim_stop()

The 'event' functions will schedule the execution of the function 'cfunc'
at time 'now + delta' clock cycles. The parameter 'arg' is passed as a 
parameter to 'cfunc'.

The 'set_int' function set the processor interrupt 'level'. When the interrupt
is taken, the function 'callback' is called with the argument 'arg'. This
will also clear the interrupt. An interrupt can be cleared before it is
taken by calling 'clear_int' with the appropriate interrupt level.

The sim_stop function is called each time the simulator stops execution.
It can be used to flush buffered devices to get a clean state during
single stepping etc.

See 'erc32.c' for examples on how to use events and interrupts.

5. Memory module

The supplied memory module (erc32.c) emulates the functions of memory and
the MEC asic developed for the 90C601/2. It includes the following functions:

* UART A & B
* Real-time clock
* General purpose timer
* Interrupt controller
* Breakpoint register
* Watchpoint register
* 512 Kbyte ROM
* 4 Mbyte RAM

See README.erc32 on how the MEC functions are emulated.  For a detailed MEC
specification, look at the ERC32 home page at URL:

http://www.estec.esa.nl/wsmwww/erc32

6. Compile and linking programs

The directory 'examples' contain some code fragments for SIS.
The script gccx indicates how the native sunos gcc and linker can be used
to produce executables for the simulator. To compile and link the provided
'hello.c', type 'gccx hello.c'. This will build the executable 'hello'.
Start the simulator by running 'startsim hello', and issue the command 'run.
After the program is terminated, the IU will be force to error mode through
a software trap and halt. 

The programs are linked with a start-up file, srt0.S. This file includes
the traptable and window underflow/overflow trap routines.

7. IU and FPU instruction timing.

The simulator provides cycle true simulation. The following table shows
the emulated instruction timing for 90C601E & 90C602E:

Instructions	      Cycles

jmpl, rett		2
load			2
store			3
load double		3
store double		4
other integer ops	1
fabs			2
fadds			4
faddd			4
fcmps			4
fcmpd			4
fdivs			20
fdivd			35
fmovs			2
fmuls			5
fmuld			9
fnegs			2
fsqrts			37
fsqrtd			65
fsubs			4
fsubd			4
fdtoi			7
fdots			3
fitos			6
fitod			6
fstoi			6
fstod			2

The parallel operation between the IU and FPU is modelled. This means
that a FPU instruction will execute in parallel with other instructions as
long as no data or resource dependency is detected. See the 90C602E data
sheet for the various types of dependencies. Tracing using the 'trace'
command will display the current simulator time in the left column. This
time indicates when the instruction is fetched. If a dependency is detetected,
the following fetch will be delayed until the conflict is resolved.

The load dependency in the 90C601E is also modelled - if the destination 
register of a load instruction is used by the following instruction, an 
idle cycle is inserted.

8. FPU implementation

The simulator maps floating-point operations on the hosts floating point
capabilities. This means that accuracy and generation of IEEE exceptions is 
host dependent.
