diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 9bc94944..8c3e18e2 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -161,7 +161,7 @@ FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111] FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS ; RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-2) +RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) ; IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEMODE .EQU IDEMODE_NONE ; IDE: DRIVER MODE: IDEMODE_[DIO|DIDE] diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 7291659f..ef2131dc 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -116,7 +116,7 @@ FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111] FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS ; RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-2) +RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) ; IDEENABLE .EQU TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEMODE .EQU IDEMODE_MK4 ; IDE: DRIVER MODE: IDEMODE_[DIO|DIDE] diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index f63be838..0936dae8 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -119,7 +119,7 @@ FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111] FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS ; RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-2) +RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) ; IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEMODE .EQU IDEMODE_DIO ; IDE: DRIVER MODE: IDEMODE_[DIO|DIDE] diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 3622da7b..120b468c 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -119,7 +119,7 @@ FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111] FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS ; RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-2) +RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) ; IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEMODE .EQU IDEMODE_DIO ; IDE: DRIVER MODE: IDEMODE_[DIO|DIDE] diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index a259a58a..30588a57 100644 --- a/Source/HBIOS/rf.asm +++ b/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: @@ -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 ; ; ;