|
|
|
@ -7,6 +7,8 @@ |
|
|
|
; |
|
|
|
RF_U0IO .EQU $A0 |
|
|
|
RF_U1IO .EQU $A4 |
|
|
|
RF_U2IO .EQU $A8 |
|
|
|
RF_U3IO .EQU $AC |
|
|
|
; |
|
|
|
; IO PORT OFFSETS |
|
|
|
; |
|
|
|
@ -18,24 +20,51 @@ RF_ST .EQU 3 |
|
|
|
; MD DEVICE CONFIGURATION |
|
|
|
; |
|
|
|
RF_DEVCNT .EQU RFCNT ; NUMBER OF RF DEVICES SUPPORTED |
|
|
|
RF_CFGSIZ .EQU 6 ; SIZE OF CFG TBL ENTRIES |
|
|
|
RF_CFGSIZ .EQU 8 ; SIZE OF CFG TBL ENTRIES |
|
|
|
RF_MAXRF .EQU 4 ; MAXIMUM NUMBERS OF DEVICES SUPPORTED |
|
|
|
; |
|
|
|
RF_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE) |
|
|
|
RF_STAT .EQU 1 ; OFFSET OF STATUS (BYTE) |
|
|
|
RF_LBA .EQU 2 ; OFFSET OF LBA (DWORD) |
|
|
|
RF_IOAD .EQU 7 ; OFFSET OF DEVICE IO ADDRESS |
|
|
|
|
|
|
|
#IF ($RF_DEVCNT > RF_MAXRF) |
|
|
|
.ECHO "*** ONLY 4 RAM FLOPPY DEVICES SUPPORTED ***\n" |
|
|
|
RF_DEVCNT .SET RF_MAXRF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; DEVICE CONFIG TABLE (RAM DEVICE FIRST TO MAKE IT ALWAYS FIRST DRIVE) |
|
|
|
; |
|
|
|
RF_CFGTBL: |
|
|
|
; DEVICE 0 ($A0) |
|
|
|
; DEVICE 0 |
|
|
|
.DB 0 ; DRIVER DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
#IF (RF_DEVCNT >= 2) |
|
|
|
; DEVICE 1 ($A4) |
|
|
|
.DB 0 ; UNUSED |
|
|
|
.DB RF_U0IO ; DEVICE BASE ADDR |
|
|
|
#IF (RF_DEVCNT > 1) |
|
|
|
; DEVICE 1 |
|
|
|
.DB 1 ; DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
.DB 0 ; UNUSED |
|
|
|
.DB RF_U1IO ; DEVICE BASE ADDR |
|
|
|
#ENDIF |
|
|
|
#IF (RF_DEVCNT > 2) |
|
|
|
; DEVICE 2 |
|
|
|
.DB 2 ; DRIVER DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
.DB 0 ; UNUSED |
|
|
|
.DB RF_U2IO ; DEVICE BASE ADDR |
|
|
|
#ENDIF |
|
|
|
; ; DEVICE 3 |
|
|
|
#IF (RF_DEVCNT > 3) |
|
|
|
.DB 3 ; DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
.DB 0 ; UNUSED |
|
|
|
.DB RF_U3IO ; DEVICE BASE ADDR |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF ($ - RF_CFGTBL) != (RF_DEVCNT * RF_CFGSIZ) |
|
|
|
@ -48,38 +77,12 @@ RF_CFGTBL: |
|
|
|
; |
|
|
|
RF_INIT: |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("RF: IO=0x$") |
|
|
|
LD A,RF_U0IO |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTS(" DEVICES=$") |
|
|
|
LD A,RF_DEVCNT |
|
|
|
CALL PRTDECB |
|
|
|
PRTS(" WP=$") |
|
|
|
IN A,(RF_U0IO+3) |
|
|
|
AND 1 |
|
|
|
JR Z,NO_WP1 |
|
|
|
PRTS("ON$") |
|
|
|
JR D2_WP1 |
|
|
|
NO_WP1: |
|
|
|
PRTS("OFF$") |
|
|
|
D2_WP1: |
|
|
|
#IF (RF_DEVCNT >= 2) |
|
|
|
IN A,(RF_U1IO+3) |
|
|
|
AND 1 |
|
|
|
JR Z,NO_WP2 |
|
|
|
PRTS("-ON$") |
|
|
|
JR D2_WP2 |
|
|
|
NO_WP2: |
|
|
|
PRTS("-OFF$") |
|
|
|
D2_WP2: |
|
|
|
|
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; SETUP THE DIO TABLE ENTRIES |
|
|
|
; |
|
|
|
PRTS("RF:$") |
|
|
|
|
|
|
|
LD B,RF_DEVCNT ; LOOP CONTROL |
|
|
|
LD IY,RF_CFGTBL ; START OF CFG TABLE |
|
|
|
RF_INIT0: |
|
|
|
CALL RF_UNIT |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
LD BC,RF_FNTBL ; BC := FUNC TABLE ADR |
|
|
|
PUSH IY ; CFG ENTRY POINTER |
|
|
|
@ -89,10 +92,30 @@ RF_INIT0: |
|
|
|
ADD IY,BC ; BUMP IY TO NEXT ENTRY |
|
|
|
POP BC ; RESTORE BC |
|
|
|
DJNZ RF_INIT0 ; LOOP AS NEEDED |
|
|
|
|
|
|
|
PRTS(" DEVICES=$") ; DISPLAY NUMBER |
|
|
|
LD A,RF_DEVCNT ; OF DEVICES |
|
|
|
CALL PRTDECB |
|
|
|
; |
|
|
|
XOR A ; INIT SUCCEEDED |
|
|
|
RET ; RETURN |
|
|
|
; |
|
|
|
RF_UNIT: |
|
|
|
PRTS(" IO=0x$") ; DISPLAY |
|
|
|
LD A,(IY+RF_IOAD) ; PORT AND |
|
|
|
CALL PRTHEXBYTE ; WRITE |
|
|
|
PRTS(" WP=$") ; PROTECT |
|
|
|
ADD A,RF_ST ; STATUS OF |
|
|
|
LD C,A ; THIS DEVICE |
|
|
|
IN A,(C) |
|
|
|
AND 1 |
|
|
|
JR Z,RF_NO_WP1 |
|
|
|
PRTS("ON$") |
|
|
|
RET |
|
|
|
RF_NO_WP1: |
|
|
|
PRTS("OFF$") |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
RF_FNTBL: |
|
|
|
@ -265,21 +288,9 @@ RF_WRSEC: |
|
|
|
; |
|
|
|
; |
|
|
|
RF_SETIO: |
|
|
|
LD A,(IY+RF_DEV) ; GET DEVICE NUM |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR NZ,RF_SETIO1 |
|
|
|
LD A,RF_U0IO |
|
|
|
JR RF_SETIO3 |
|
|
|
RF_SETIO1: |
|
|
|
DEC A |
|
|
|
JR NZ,RF_SETIO2 |
|
|
|
LD A,RF_U1IO |
|
|
|
JR RF_SETIO3 |
|
|
|
RF_SETIO2: |
|
|
|
CALL PANIC ; INVALID UNIT |
|
|
|
RF_SETIO3: |
|
|
|
LD (RF_IO),A |
|
|
|
RET |
|
|
|
LD A,(IY+RF_IOAD) ; GET THE IO PORT |
|
|
|
LD (RF_IO),A ; OF THE DEVICE WE |
|
|
|
RET ; ARE WORKING ON |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
|