Browse Source

Update rf.asm

Standardize init message. Allow for up to 4 devices and at non-consecutive addresses. Limit maximum number devices and with warning.
pull/73/head
b1ackmai1er 6 years ago
parent
commit
32bdd461f6
  1. 89
      Source/HBIOS/rf.asm

89
Source/HBIOS/rf.asm

@ -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:

Loading…
Cancel
Save