Difference between revisions of "GeneveOS Device Operation"

From Ninerpedia
Jump to navigation Jump to search
Line 29: Line 29:


The actual operation is contained in the Peripheral Access Block (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:
{| class="plainc" style="margin-left:1%"
|-
! width="5%" | 00
! width="5%" | 01
! width="5%" | 02
! width="5%" | 03
! width="5%" | 04
! width="5%" | 05
! width="5%" | 06
! width="5%" | 07
! width="5%" | 08
! width="5%" | 09
! width="5%" | 0A
! width="5%" | 0B
! width="5%" | 0C
! width="5%" | 0D
! width="5%" | 0E
! width="5%" | 0F
! width="5%" | 10 ...
|-
| Opcode
| Mode
| Error code
| colspan="3" | Buffer address
| colspan="2" | Record number
| colspan="2" | Record length
| Memory type
| colspan="3" | Character count
| Status byte
| Name length
| Name
|-
|}

Revision as of 18:06, 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