Difference between revisions of "GeneveOS Device Operation"

From Ninerpedia
Jump to navigation Jump to search
m
Line 107: Line 107:
 
| colspan="3" | -
 
| colspan="3" | -
 
| colspan="2" | Records to reserve
 
| colspan="2" | Records to reserve
| colspan="2" | File record length
+
| colspan="2" | Record length
 
| -
 
| -
 
| colspan="3" | -
 
| colspan="3" | -
Line 115: Line 115:
 
|-
 
|-
 
|}
 
|}
 +
 +
The '''Record Length''' must match the length of the records when the file already exists. If the length is unknown, 0 may be passed. When the file does not yet exist, the record length must be set and must be greater than 0.
  
 
After the OPEN operation has completed, the PAB delivers information about the result:
 
After the OPEN operation has completed, the PAB delivers information about the result:
Line 145: Line 147:
 
| colspan="3" | -
 
| colspan="3" | -
 
| colspan="2" | -
 
| colspan="2" | -
| colspan="2" | Actual record length
+
| colspan="2" | Actual Record Length
 
| -
 
| -
| colspan="3" | True record length
+
| 0
 +
| colspan="2" | True Record Length
 
| -
 
| -
 
| Name length
 
| Name length
Line 153: Line 156:
 
|-
 
|-
 
|}
 
|}
 +
 +
The '''Actual Record Length''' is the length of the records of the existing file. When 0 was passed on the call, this delivers the record length of the file; otherwise this is the value that was passed for the call. The '''True Record Length''' is the record length of the file when it already exists.

Revision as of 20:30, 22 July 2016

Accessing devices (floppy disk, hard disk, serial connector, printer) is possible in GeneveOS via XOP calls.

User-task XOPs

User-task XOPs are available for use in application programs. Here is a typical example:

PABADD EQU  >F180   
FILE   DATA 8
...
       LI   R0,PABADD
       XOP  @FILE,0
       MOVB @PABADD+2,R0
       JNE  ERROR
       ...

Similar as with the TI-99/4A device service routine concept (DSR), a Peripheral Access Block (PAB) must be set up prior to invoking the XOP.

Device Service Routine Call

Input Output
R0 Pointer to PAB -

The actual operation is contained in the Peripheral Access Block (PAB).

Peripheral Access Block

While the TI-99/4A DSRs expect the PAB to be stored in VDP RAM, the Geneve OS DSRs use CPU RAM for the PAB, which means the PAB need not be copied to the video RAM before use. Also, you can choose to have the I/O buffers in VDP or CPU RAM.

The general layout of the PAB is as follows:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ...
Opcode Mode Error code Buffer address Record number Record length Memory type Character count Status byte Name length Name

After the operation, the PAB contains information about the results of the operation.

Operations

OPEN

Open a record-oriented file. A file must be opened before it can be read from or written to. This operation is not required for flat memory image files.

The PAB must be set up prior to invoking the operation:

IN

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ...
00 Mode - - Records to reserve Record length - - - Name length Name

The Record Length must match the length of the records when the file already exists. If the length is unknown, 0 may be passed. When the file does not yet exist, the record length must be set and must be greater than 0.

After the OPEN operation has completed, the PAB delivers information about the result:

OUT

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ...
- - Error code - - Actual Record Length - 0 True Record Length - Name length Name

The Actual Record Length is the length of the records of the existing file. When 0 was passed on the call, this delivers the record length of the file; otherwise this is the value that was passed for the call. The True Record Length is the record length of the file when it already exists.