Back

Introduction to the ISIS environment:

This is a short introduction about using the ISIS environment under CP/M 2, intended for those who would like working with the original DRI OS sources. If more complete information about ISIS is required, the ISIS user's manual is available for download from the documentation page.

The ISIS environment is started from CP/M with the command a:isx. The first four disk drives can be accessed with the following syntax:

	:f0:	CP/M drive a:
	:f1:	CP/M drive b:
	:f2:	CP/M drive c:
	:f3:	CP/M drive d:
While the ISIS environment is running the command prompt is the drive number, followed by the greater symbol:
	CP/M	ISIS
	A:	0>
	B:	1>
	...
The ISIS program to leave the environment and return to CP/M is :f1:cpm, which can be used from submit scripts. If used interactive at the command prompt typing CTRL-C returns to CP/M too.

The transient CP/M commands DIR, ERA, TYPE and REN are available in the ISIS environment and work similar as under CP/M.

File specification under ISIS works a bit different as under CP/M, a complete file name consists of drive letter, followed by filename and suffix. The lenght of the filename part is limited to 6 characters, under CP/M 8 characters are allowed. This needs to be taken into account for files to be processed under ISIS. Also ISIS doesn't know about user numbers and file attributes, so this can't be used if files need to be processed under ISIS.

	dir		- show directory of current drive
	dir :f1:	- show directory of second drive
	dir :f1:*.com	- show files with suffix .com on second drive




ISIS drive search path:

If a file is specified without the drive part the ISIS system would first search this file on the current logged drive, and if not found there it would look on the first drive. Unfortunately this is pretty much broken in the ISIS emulation environment for CP/M 2, as the following example shows:

	2>dir
	F2: LOAD     PLM
	2>:f1:plm80 load.plm

	ISIS-II PL/M-80 COMPILER V3.1


	PL/M-80 I/O ERROR --
	  FILE: SOURCE
	  NAME: LOAD.PLM
	  ERROR: 13--NO SUCH FILE
	COMPILATION TERMINATED


	2>
This would not be a problem for very simple programs like load.plm, because one could specify the drive for the source file in the command line:
	2>dir
	F2: LOAD     PLM
	2>:f1:plm80 :f2:load.plm

	ISIS-II PL/M-80 COMPILER V3.1
	PL/M-80 COMPILATION COMPLETE.      0 PROGRAM ERROR(S)


	2>dir
	F2: LOAD     OBJ : LOAD     LST : LOAD     PLM
	2>
For larger programs build from many modules, like several CP/M 3 and MP/M 2 transient commands, this is a problem because the allowed command line lenght is exceeded when linking all the modules into the final program. Fortunately another odd bug was discovered:
	2>dir
	F2: LOAD     PLM
	2>:f3:
	3>:f1:plm80 load.plm

	ISIS-II PL/M-80 COMPILER V3.1
	PL/M-80 COMPILATION COMPLETE.      0 PROGRAM ERROR(S)


	3>:f2:
	2>dir
	F2: LOAD     PLM : LOAD     OBJ : LOAD     LST
	2>
If the drive part is missing the ISIS programs look at the drive one lower than the current logged drive for files. This bug is exploited a lot in the submit scripts to build CP/M 3 and MP/M transient programs to avoid command line lenght problems.



Exact file sizes and EOF:

One of the major differences between CP/M 2 and ISIS is how this OS's handle the size of files and where a text file ends. ISIS knows the exact size of any file in bytes just like modern OS's. CP/M 2 counts the number of 128 byte records for a file, which will cause problems with text files not ending with the last record boundary. As a convention every program writing text files appends a CTRL-Z character at the end of the file and every program reading text files needs to stop when this EOF mark was read.

If one just compiles a PL/M source under ISIS emulation the following will happen:

	0>:f1:plm80 :f3:load.plm

	ISIS-II PL/M-80 COMPILER V3.1
	PL/M-80 COMPILATION COMPLETE.    117 PROGRAM ERROR(S)

	0>type :f3:load.lst
	...
	...
	258   2      CALL BOOT;
 	259   2      END LOADCOM;
 	260   1      END;
	*** ERROR #2, STATEMENT #260, NEAR 'END',   UNPRINTABLE ASCII CHARACTER
	*** ERROR #2, STATEMENT #260, NEAR 'END',   UNPRINTABLE ASCII CHARACTER
	...
	...

The compiler doesn't stop at the final END statement, it reads the whole file and generates this error messages, caused by CTRL-Z characters terminating the last record. To overcome this problem Intel added a tool named SETEOF to the ISIS-II emulation. Sounds good, but doesn't work out of the box, the problem still exists after running SETEOF on a source file. A disassembly of this program shows what it does: A DRI standard BDOS ignores the value in the S1 FCB field of the last record, one also needs a modified BDOS to make this working. This probably is BDOS.MOD inluded with isx, but I haven't tested this, because this implementation has one another problem. Some CP/M editors won't fill the rest of the last record completely with CNTL-Z characters, they write only one and the rest of the record is some random garbage. So searching backwards still will fail on such files.

So instead I wrote another little utility named FIXEOF, which seeks to the last record of a file, searches forwards for the first CNTL-Z and fills the whole record from there with carriage return characters. This solution always works regardless which BDOS or editor is used.

Back