thames: An ISIS-II Emulator

(John Elliott, 17 November 2012)

thames emulates enough of the ISIS-II environment to be able to run the following programs (used in the CP/M 3 build process):

Installing

Installation should just be a matter of the usual sequence of commands:

./configure
make
make install

In use

You will need to set up environment variables to map Unix directories to ISIS-II drives. For example, in a Bourne-style shell:

ISIS_F0=/home/me/isis
ISIS_F1=/home/me/isis/plm80
ISIS_F2=/home/me/isis/asm80
ISIS_F3=/home/me/isis/utils
export ISIS_F0 ISIS_F1 ISIS_F2 ISIS_F3

Or in a csh-style shell:

setenv ISIS_F0 /home/me/isis
setenv ISIS_F1 /home/me/isis/plm80
setenv ISIS_F2 /home/me/isis/asm80
setenv ISIS_F3 /home/me/isis/utils

It's also possible to set up character devices this way. For example, if the program you want to run needs to use the printer device :LP:, then you can set up a file to receive printer output:

ISIS_LP=/home/me/isis/lp.txt export ISIS_LP

setenv ISIS_LP /home/me/isis/lp.txt

Once the variables are set up, you should be able to run an ISIS program like this:

thames isis-command

For example:

thames :F3:locate put.mod "code(0100H)" "stacksize(100)"

Notes:

This sequence of commands should build PUT.COM from CP/M 3:

thames :F2:asm80 putf.asm debug
thames :F1:plm80 put.plm "pagewidth(100)" debug optimize
thames :F3:link mcd80a.obj,put.obj,parse.obj,putf.obj,:F3:plm80.lib to put.mod
thames :F3:locate put.mod "code(0100H)" "stacksize(100)"
thames :F3:objhex put to put.hex

Implementation notes

Areas of functionality not used by the CP/M 3 build tools are untested. These include the system calls RENAME, CONSOLE, ATTRIB, ERROR and WHOCON, and the ability to open files other than the console in line mode.

Debugging

Set the ISIS_TRACE environment variable to get debug logs. It should be set to an integer between 0 and 4:

0
No debug messages
1
Echoes command line, and reports on errors parsing executable files.
2
Logs all ISIS-II calls.
3
As 2, but also displays contents of buffers loaded/saved for READ, WRITE and EXEC calls.
4
All of the above, and also traces Z80 execution.

Acknowledgements


John Elliott, 17 November 2012