;
; Label    Memory  Description
;
;----------------------------------------------------------------------
;              D E V I C E   C O N T R O L   B L O C K
;----------------------------------------------------------------------
;
; DDEVIC   $0300   Device serial bus ID, set up by handler, not user alterable
;
DDEVIC_D1                   EQU    031h ; Disk Drive 1
DDEVIC_D2                   EQU    032h ; Disk Drive 2
DDEVIC_D3                   EQU    033h ; Disk Drive 3
DDEVIC_D4                   EQU    034h ; Disk Drive 4
DDEVIC_D5                   EQU    035h ; Disk Drive 5
DDEVIC_D6                   EQU    036h ; Disk Drive 6
DDEVIC_D7                   EQU    037h ; Disk Drive 7
DDEVIC_D8                   EQU    038h ; Disk Drive 8
DDEVIC_D9                   EQU    038h ; RAM Disk
DDEVIC_P1                   EQU    040h ; Printer 1
DDEVIC_P2                   EQU    04Fh ; Printer 2
DDEVIC_R1                   EQU    050h ; RS232 Port 1
DDEVIC_R2                   EQU    051h ; RS232 Port 2
DDEVIC_R3                   EQU    052h ; RS232 Port 3
DDEVIC_R4                   EQU    053h ; RS232 Port 4
;
; DUNIT    $0301   Disk or device unit number, set up by user
;
DUNIT_ONE                   EQU    001h ; Unit Number
DUNIT_TWO                   EQU    002h ; Unit Number
DUNIT_THREE                 EQU    003h ; Unit Number
DUNIT_FOUR                  EQU    004h ; Unit Number
;
; DCOMND   $0302   Device operation to be performed, set up by user
;
DCOMND_READ                 EQU    052h ; Read
DCOMND_WRITE                EQU    057h ; Write with verify
DCOMND_STATUS               EQU    053h ; Status
DCOMND_PUT                  EQU    050h ; Put no verify
DCOMND_FORMAT               EQU    021h ; Format
DCOMND_DOWNLOAD             EQU    020h ; Download
DCOMND_READ_ADDRESS         EQU    054h ; Read address
DCOMND_READ_SPIN            EQU    051h ; Read spin
DCOMND_MOTOR_ON             EQU    055h ; Motor on
DCOMND_VERIFY_SECTOR        EQU    056h ; Verify sector
;
; DSTATS   $0303   Status code upon return to user
;
DSTATS_SEND                 EQU    040h ; Send data
DSTATS_RECEIVE              EQU    080h ; Receive data
;
; DBUFLO   $0304   Data buffer address of the source or destination of the
;                  data to be transferred, set by user
;
; DBUFHI   $0305   Data buffer address of the source or destination of the
;                  data to be transferred, set by user
;
; DTIMLO   $0306   Time-out value for the handler in one-second units
;
DTIMLO_STANDARD             EQU     031h ; Standard initialized to this value
DTIMLO_CASSETTE             EQU     035h ; Cassette time-out value
;
; DUNUSE   $0307   Unused byte
;
; DBYTLO   $0308   Bytes transferred to or from data buffer
;
; DBYTHI   $0309   Bytes transferred to or from data buffer
;
; DAUX1    $030A   Device specific information
;
DAUX1_GET                   EQU     052h ; Get sector
DAUX1_PUT                   EQU     050h ; Put sector
DAUX1_PUT_VERIFY            EQU     057h ; Put sector with verify
DAUX1_STATUS                EQU     053h ; Status request
DAUX1_FORMAT                EQU     021h ; Format entire disk
;
; DAUX2    $030B   Device specific information
;



;----------------------------------------------------------------------
;       I N P U T / O U T P U T   C O N T R O L   B L O C K
;----------------------------------------------------------------------
;
; NUMBER   intern  There are 8 IOCB's which can be used to transfer data
;                  from one device to another using these channels
;
IOCB0                       EQU    040h ; IOCB channel 0 starts at $0340
IOCB1                       EQU    050h ; IOCB channel 2 ......... $0350
IOCB2                       EQU    060h ; IOCB channel 3 ......... $0360
IOCB3                       EQU    070h ; IOCB channel 3 ......... $0370
IOCB4                       EQU    080h ; IOCB channel 4 ......... $0380
IOCB5                       EQU    090h ; IOCB channel 5 ......... $0390
IOCB6                       EQU    0A0h ; IOCB channel 6 ......... $03A0
IOCB7                       EQU    0B0h ; IOCB channel 7 ......... $03B0
;
; ICHID    $03x0   Index into device name table for currently OPEN file,
;                  set by Operating System
; ICDNO    $03x1   Device number, set by Operating System
;
; ICCOM    $03x2   Command for the type of action to be taken by the device
;
ICCOM_OPEN_CHANNEL          EQU    003h ; Open channel
ICCOM_GET_TEXT_RECORD       EQU    005h ; Get text record (line)
ICCOM_GET_BINARY_RECORD     EQU    007h ; Get binary record (buffer)
ICCOM_PUT_TEXT_RECORD       EQU    009h ; Put text record (line)
ICCOM_PUT_BINARY_RECORD     EQU    00Bh ; Put binary record (buffer)
ICCOM_CLOSE                 EQU    00Ch ; Close channel
ICCOM_STATUS                EQU    00Dh ; Channel status

ICCOM_S_GET_CHARACTER       EQU    007h ; Screen get character
ICCOM_S_PUT_CHARACTER       EQU    00Bh ; Screen put character
ICCOM_S_DRAW_LINE           EQU    011h ; Screen draw line
ICCOM_S_FILL_AREA           EQU    012h ; Screen fill area

ICCOM_D_RENAME              EQU    020h ; Rename file
ICCOM_D_DELETE              EQU    021h ; Delete file
ICCOM_D_LOCK                EQU    023h ; Lock   file
ICCOM_D_UNLOCK              EQU    024h ; Unlock file
ICCOM_D_POINT               EQU    025h
ICCOM_D_NOTE                EQU    026h
ICCOM_D_FORMAT              EQU    0FEh ; Format disk

ICCOM_R_OUTPUT_PART_BLOCK   EQU    020h ; RS232 Output partial block
ICCOM_R_CONTROL_RTS_XMT_DTR EQU    022h ; RS232 Control RTS, XMT, DTR
ICCOM_R_BAUD_STOPBITS_SIZE  EQU    024h ; RS232 Baudrate, Stop bits, Word size
ICCOM_R_TRANSLATION_MODE    EQU    026h ; RS232 Translation mode
ICCOM_R_CONCURRENT_MODE     EQU    028h ; RS232 Concurrent mode
;
; ICSTA    $03x3   Most recent status returned by the device,
;                  set by Operating System
; ICBAL    $03x4   Buffer address for data transfer or the address
;                  of the filename
; ICBAH    $03x5   Buffer address for data transfer or the address
;                  of the filename
; ICPTL    $03x6   Address of the device's put one byte routine minus 1,
;                  set by the operating system
; ICPTH    $03x7   Address of the device's put one byte routine minus 1,
;                  set by the operating system
; ICBLL    $03x8   Buffer length set to the maximum number of bytes
;                  to transfer in put and get commands
; ICBLH    $03x9   Buffer length set to the maximum number of bytes
;                  to transfer in put and get commands
; ICAX1    $03xA   Auxiliary byte 1, also referred to as AUX1
;
ICAX1_C_READ                EQU    004h ; Cassette Read
ICAX1_C_WRITE               EQU    008h ; Cassette Write

ICAX1_D_READ                EQU    004h ; Disk     Read file
ICAX1_D_READ_DIRECTORY      EQU    006h ; Disk     Read directory
ICAX1_D_WRITE               EQU    008h ; Disk     Write file
ICAX1_D_APPEND              EQU    009h ; Disk     Append to file
ICAX1_D_IO                  EQU    00Ch ; Disk     Read/Write file

ICAX1_E_WRITE               EQU    008h : Editor   S: output
ICAX1_E_KEYB_IN_SCREEN_OUT  EQU    012h ; Editor   K: input S: output
ICAX1_E_SCREEN_IN_OUT       EQU    013h ; Editor   S: input S: output

ICAX1_K_READ                EQU    004h ; Keyboard Read

ICAX1_P_WRITE               EQU    008h ; Printer  Output

ICAX1_R_CONCURRENT_READ     EQU    005h ; RS232    Concurrent read
ICAX1_R_BLOCK_WRITE         EQU    008h ; RS232    Block write
ICAX1_R_CONCURRENT_WRITE    EQU    009h ; RS232    Concurrent write
ICAX1_R_CONCURRENT_IO       EQU    00Dh ; RS232    Concurrent read and write

ICAX1_S                     EQU    028h ; Display
ICAX1_S_CS                  EQU    008h ; Display  Clear screen
ICAX1_S_CS_RO               EQU    00Ch
ICAX1_S_CS_TW               EQU    018h
ICAX1_S_CS_TW_RO            EQU    01Ch
ICAX1_S_TW                  EQU    038h ; Display  Text window
ICAX1_S_TW_RO               EQU    03Ch
ICAX1_S_RO                  EQU    02Ch ; Display  Read operation
;
; ICAX2    $03xB   Auxiliary byte 2, also referred to as AUX2
;
ICAX2_C_SHORT_RECORD_GAPS   EQU    080h ; Cassette Short inter-record gaps

ICAX2_P_820_SIDEWAYS        EQU    053h ; Printer  820 Sideways printing
ICAX2_P_NORMAL              EQU    04Eh ; Printer  40 characters per line
ICAX2_P_WIDE                EQU    057h ; Printer  Wide printing mode

ICAX2_S_GR_0                EQU    000h ; Display  Graphics mode 0
ICAX2_S_GR_1                EQU    001h ; Display  Graphics mode 1
ICAX2_S_GR_2                EQU    002h ; Display  Graphics mode 2
ICAX2_S_GR_3                EQU    003h ; Display  Graphics mode 3
ICAX2_S_GR_4                EQU    004h ; Display  Graphics mode 4
ICAX2_S_GR_5                EQU    005h ; Display  Graphics mode 5
ICAX2_S_GR_6                EQU    006h ; Display  Graphics mode 6
ICAX2_S_GR_7                EQU    007h ; Display  Graphics mode 7
ICAX2_S_GR_8                EQU    008h ; Display  Graphics mode 8
ICAX2_S_GR_9                EQU    009h ; Display  Graphics mode 9
ICAX2_S_GR_10               EQU    00Ah ; Display  Graphics mode 10
ICAX2_S_GR_11               EQU    00Bh ; Display  Graphics mode 11
;
; ICAX3    $03xC   Auxiliary byte 3, maintain a record of the disk sector
;                                    number for the Basic NOTE and POINT
; ICAX4    $03xD   Auxiliary byte 4, maintain a record of the disk sector
;                                    number for the Basic NOTE and POINT
; ICAX5    $03xE   Auxiliary byte 5, used by NOTE and POINT to maintain a
;                                    record of the byte within a sector
; ICAX6    $03xF   Auxiliary byte 6, spare auxiliary byte
;



;----------------------------------------------------------------------
;                  D E V I C E   C O M M A N D S
;----------------------------------------------------------------------
COMMAND_MOUNT_DISK          EQU    001h
COMMAND_MOUNT_DISK_PROTECT  EQU    002h
COMMAND_DISMOUNT_DISK       EQU    0FEh
COMMAND_DISMOUNT_DISK_SAVE  EQU    0FFh



;----------------------------------------------------------------------
;                  D R I V E   V A R I A B L E S
;----------------------------------------------------------------------
ATR_HEADER_SIZE             EQU     16
SECTOR_SIZE                 EQU    128
DISK_BLOCK_SIZE             EQU   1024
BLOCK_COUNT_SINGLE          EQU     90
BLOCK_COUNT_MEDIUM          EQU    130
BLOCK_COUNT_ENHANCED        EQU    140
BLOCK_COUNT_DOUBLE          EQU    180
BLOCK_COUNT_TEST            EQU      2
DISK_SECTORS_SINGLE         EQU    720
DISK_SECTORS_MEDIUM         EQU   1040
DISK_SECTORS_ENHANCED       EQU   1120
DISK_SECTORS_DOUBLE         EQU   1440
DISK_SECTORS_TEST           EQU      4
DISK_SINGLE                 EQU  92160  ; DISK_SECTORS_SINGLE   * SECTOR_SIZE
DISK_MEDIUM                 EQU 133120  ; DISK_SECTORS_MEDIUM   * SECTOR_SIZE
DISK_ENHANCED               EQU 143360  ; DISK_SECTORS_ENHANCED * SECTOR_SIZE
DISK_DOUBLE                 EQU 184320  ; DISK_SECTORS_DOUBLE   * SECTOR_SIZE
DISK_TEST                   EQU    512  ; DISK_SECTORS_TEST     * SECTOR_SIZE
DISK_TYPE_NONE              EQU    " "
DISK_TYPE_SINGLE            EQU    "S"
DISK_TYPE_MEDIUM            EQU    "M"
DISK_TYPE_ENHANCED          EQU    "E"
DISK_TYPE_DOUBLE            EQU    "D"
DISK_TYPE_TEST              EQU    "T"
DISK_FORMAT_NONE            EQU     0
DISK_FORMAT_ATR             EQU     1
DISK_FORMAT_XFD             EQU     2
