mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Revised disk API
This commit is contained in:
@@ -1972,7 +1972,7 @@ DEV_INIT:
|
||||
;
|
||||
DEV_INIT1:
|
||||
; PATCH IN COM0: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 1) ; COM0:
|
||||
LD A,(HCB + HCB_CDL + 0) ; COM0:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT2 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 0),A ; CONSOLE TTY
|
||||
@@ -1982,7 +1982,7 @@ DEV_INIT1:
|
||||
;
|
||||
DEV_INIT2:
|
||||
; PATCH IN COM1: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 2) ; COM1:
|
||||
LD A,(HCB + HCB_CDL + 1) ; COM1:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT3 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 3),A ; CONSOLE UC1
|
||||
@@ -1991,7 +1991,7 @@ DEV_INIT2:
|
||||
;
|
||||
DEV_INIT3:
|
||||
; PATCH IN COM2: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 3) ; COM2:
|
||||
LD A,(HCB + HCB_CDL + 2) ; COM2:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT4 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 6),A ; READER UR1
|
||||
@@ -1999,7 +1999,7 @@ DEV_INIT3:
|
||||
;
|
||||
DEV_INIT4:
|
||||
; PATCH IN COM3: DEVICE ENTRIES
|
||||
LD A,(HCB + HCB_CDL + 4) ; COM3:
|
||||
LD A,(HCB + HCB_CDL + 3) ; COM3:
|
||||
CP $FF ; $FF MEANS NO ENTRY
|
||||
JR Z,DEV_INIT5 ; IF SO, LEAVE IT ALONE
|
||||
LD (DEVMAP + 7),A ; READER UR2
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (N8 USES ASCI DRIVER)
|
||||
UARTCNT .EQU 0 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 2 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ MULTIFUNCTION PIC
|
||||
; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ MF/PIC
|
||||
;==================================================================================================
|
||||
;
|
||||
; BUILD CONFIGURATION OPTIONS
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_MFPIC ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 2 ; NUMBER OF UARTS
|
||||
@@ -27,7 +28,7 @@ UART0OSC .EQU 1843200 ; UART0 OSC FREQUENCY
|
||||
UART0BAUD .EQU CONBAUD ; UART0 BAUDRATE
|
||||
UART0FIFO .EQU TRUE ; UART0 TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
UART0AFC .EQU FALSE ; UART0 TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!)
|
||||
UART1IOB .EQU $88 ; UART1 IOBASE AT $88 FOR MFPIC
|
||||
UART1IOB .EQU $48 ; UART1 IOBASE AT $48 FOR MFPIC
|
||||
UART1OSC .EQU 1843200 ; UART1 OSC FREQUENCY
|
||||
UART1BAUD .EQU CONBAUD ; UART1 BAUDRATE
|
||||
UART1FIFO .EQU TRUE ; UART1 TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY)
|
||||
@@ -63,7 +64,7 @@ IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!
|
||||
IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
;
|
||||
PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
|
||||
PPIDEIOB .EQU $84 ; PPIDE IOBASE IS $84 FOR MFPIC (PRELIMINARY ADDRESS)
|
||||
PPIDEIOB .EQU $44 ; PPIDE IOBASE
|
||||
PPIDECNT .EQU 1 ; NUMBER OF PPIDE UNITS
|
||||
PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE)
|
||||
PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!)
|
||||
@@ -71,7 +72,7 @@ PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
PPIDESLOW .EQU FALSE ; ADD DELAYS TO HELP PROBLEMATIC HARDWARE (TRY THIS IF PPIDE IS UNRELIABLE)
|
||||
;
|
||||
SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT
|
||||
SDMODE .EQU SDMODE_JUHA ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD
|
||||
SDMODE .EQU SDMODE_NONE ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD
|
||||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
|
||||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB)
|
||||
SDCSIOFAST .EQU FALSE ; TABLE-DRIVEN BIT INVERTER
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU TRUE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -19,6 +19,7 @@ DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
|
||||
;
|
||||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
|
||||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
|
||||
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
|
||||
;
|
||||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
|
||||
UARTCNT .EQU 1 ; NUMBER OF UARTS
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
;
|
||||
; CONSTANTS
|
||||
;
|
||||
#IF (DSRTCMODE == DSRTCMODE_STD)
|
||||
;
|
||||
DSRTC_BASE .EQU RTC ; RTC PORT ON ALL SBC SERIES Z80 PLATFORMS
|
||||
;
|
||||
DSRTC_DATA .EQU %10000000 ; BIT 7 CONTROLS RTC DATA (I/O) LINE
|
||||
@@ -70,17 +72,41 @@ DSRTC_CLK .EQU %01000000 ; BIT 6 CONTROLS RTC CLOCK LINE, 1 = HIGH
|
||||
DSRTC_RD .EQU %00100000 ; BIT 5 CONTROLS DATA DIRECTION, 1 = READ
|
||||
DSRTC_CE .EQU %00010000 ; BIT 4 CONTROLS RTC CE LINE, 1 = HIGH (ENABLED)
|
||||
;
|
||||
DSRTC_RESET .EQU %00000000 ; ALL LOW
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DSRTCMODE == DSRTCMODE_MFPIC)
|
||||
;
|
||||
DSRTC_BASE .EQU $43 ; RTC PORT ON MF/PIC
|
||||
;
|
||||
DSRTC_DATA .EQU %00000001 ; BIT 0 CONTROLS RTC DATA (I/O) LINE
|
||||
DSRTC_CLK .EQU %00000100 ; BIT 2 CONTROLS RTC CLOCK LINE, 1 = HIGH
|
||||
DSRTC_WR .EQU %00000010 ; BIT 1 CONTROLS DATA DIRECTION, 1 = WRITE
|
||||
DSRTC_CE .EQU %00001000 ; BIT 3 CONTROLS RTC CE LINE, 0 = ENABLED
|
||||
;
|
||||
DSRTC_RESET .EQU %00001000 ; ALL LOW, BUT CE = 1
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW)
|
||||
;
|
||||
; RTC DEVICE INITIALIZATION ENTRY
|
||||
;
|
||||
DSRTC_INIT:
|
||||
PRTS("DSRTC: $")
|
||||
PRTS("DSRTC: MODE=$")
|
||||
;
|
||||
#IF (DSRTCMODE == DSRTCMODE_STD)
|
||||
PRTS("STD$")
|
||||
#ENDIF
|
||||
#IF (DSRTCMODE == DSRTCMODE_MFPIC)
|
||||
PRTS("MFPIC$")
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK FOR CLOCK HALTED
|
||||
CALL DSRTC_TSTCLK
|
||||
JR Z,DSRTC_INIT1
|
||||
PRTS("INIT CLOCK $")
|
||||
PRTS(" INIT CLOCK $")
|
||||
LD HL,DSRTC_TIMDEF
|
||||
CALL DSRTC_TIM2CLK
|
||||
LD HL,DSRTC_BUF
|
||||
@@ -88,6 +114,7 @@ DSRTC_INIT:
|
||||
;
|
||||
DSRTC_INIT1:
|
||||
; DISPLAY CURRENT TIME
|
||||
CALL PC_SPACE
|
||||
LD HL,DSRTC_BUF
|
||||
CALL DSRTC_RDCLK
|
||||
LD HL,DSRTC_TIMBUF
|
||||
@@ -291,6 +318,8 @@ DSRTC_WRCLK1:
|
||||
CALL DSRTC_PUT ; WRITE REQUIRED 8TH BYTE
|
||||
JP DSRTC_END ; FINISH IT
|
||||
;
|
||||
#IF (DSRTCMODE == DSRTCMODE_STD)
|
||||
;
|
||||
; SEND COMMAND IN C TO RTC
|
||||
; ALL RTC SEQUENCES MUST CALL THIS FIRST TO SEND THE RTC COMMAND.
|
||||
; THE COMMAND IS SENT VIA A PUT. CE AND CLK ARE LEFT HIGH! THIS
|
||||
@@ -394,6 +423,116 @@ DSRTC_END:
|
||||
POP AF ; RESTORE AF
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DSRTCMODE == DSRTCMODE_MFPIC)
|
||||
;
|
||||
;
|
||||
; SEND COMMAND IN C TO RTC
|
||||
; ALL RTC SEQUENCES MUST CALL THIS FIRST TO SEND THE RTC COMMAND.
|
||||
; THE COMMAND IS SENT VIA A PUT. CE AND CLK ARE LEFT ACTIVE! THIS
|
||||
; IS INTENTIONAL BECAUSE WHEN THE CLOCK IS LOWERED, THE FIRST BIT
|
||||
; WILL BE PRESENTED TO READ (IN THE CASE OF A READ CMD).
|
||||
;
|
||||
; 0) ASSUME ALL LINES UNDEFINED AT ENTRY
|
||||
; 1) DEASSERT ALL LINES (CE, RD, CLOCK, & DATA)
|
||||
; 2) WAIT 1US
|
||||
; 3) SET CE HI
|
||||
; 4) WAIT 1US
|
||||
; 5) PUT COMMAND
|
||||
;
|
||||
DSRTC_CMD:
|
||||
;XOR A ; ALL LINES LOW TO RESET
|
||||
LD A,DSRTC_RESET ; QUIESCENT STATE
|
||||
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT
|
||||
CALL DLY2 ; DELAY 2 * 27 T-STATES
|
||||
XOR DSRTC_CE ; NOW ASSERT CE
|
||||
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT
|
||||
CALL DLY2 ; DELAY 2 * 27 T-STATES
|
||||
LD A,C ; LOAD COMMAND
|
||||
CALL DSRTC_PUT ; WRITE IT
|
||||
RET
|
||||
;
|
||||
; WRITE BYTE IN A TO THE RTC
|
||||
; WRITE BYTE IN A TO THE RTC. CE IS IMPLICITY ASSERTED AT
|
||||
; THE START. CE AND CLK ARE LEFT ASSERTED AT THE END IN CASE
|
||||
; NEXT ACTION IS A READ.
|
||||
;
|
||||
; 0) ASSUME ENTRY WITH CE ASSERTED, OTHERS UNDEFINED
|
||||
; 1) CLOCK -> LOW
|
||||
; 2) WAIT 250NS
|
||||
; 3) SET DATA ACCORDING TO BIT VALUE
|
||||
; 4) CLOCK -> HIGH
|
||||
; 5) WAIT 250NS (CLOCK READS DATA BIT FROM BUS)
|
||||
; 6) LOOP FOR 8 DATA BITS
|
||||
; 7) EXIT WITH CE AND CLOCK ASSERTED
|
||||
;
|
||||
DSRTC_PUT:
|
||||
LD B,8 ; LOOP FOR 8 BITS
|
||||
LD C,A ; SAVE THE WORKING VALUE
|
||||
LD A,DSRTC_WR | DSRTC_CLK ; MODE=WRITE, CLOCK ON, CE ACTIVE (0)
|
||||
DSRTC_PUT1:
|
||||
XOR DSRTC_CLK ; FLIP CLOCK OFF
|
||||
OUT (DSRTC_BASE),A ; DO IT
|
||||
CALL DLY1 ; DELAY 27 T-STATES
|
||||
RRA ; PREP ACCUM TO GET DATA BIT IN CARRY
|
||||
RR C ; ROTATE NEXT BIT TO SEND INTO CARRY
|
||||
RLA ; ROTATE BITS BACK TO CORRECT POSTIIONS
|
||||
OUT (DSRTC_BASE),A ; ASSERT DATA BIT ON BUS
|
||||
XOR DSRTC_CLK ; FLIP CLOCK ON
|
||||
OUT (DSRTC_BASE),A ; DO IT, DATA BIT SENT ON RISING EDGE
|
||||
CALL DLY1 ; DELAY 27 T-STATES
|
||||
DJNZ DSRTC_PUT1 ; LOOP IF NOT DONE
|
||||
RET
|
||||
;
|
||||
; READ BYTE FROM RTC, RETURN VALUE IN A
|
||||
; READ THE NEXT BYTE FROM THE RTC INTO A. CE IS IMPLICITLY
|
||||
; ASSERTED AT THE START. CE AND CLK ARE LEFT HIGH AT
|
||||
; THE END. CLOCK *MUST* BE LEFT HIGH FROM DSRTC_CMD!
|
||||
;
|
||||
; 0) ASSUME ENTRY WITH CE HI, OTHERS UNDEFINED
|
||||
; 1) SET RD HI AND CLOCK LOW
|
||||
; 3) WAIT 250NS (CLOCK PUTS DATA BIT ON BUS)
|
||||
; 4) READ DATA BIT
|
||||
; 5) SET CLOCK HI
|
||||
; 6) WAIT 250NS
|
||||
; 7) LOOP FOR 8 DATA BITS
|
||||
; 8) EXIT WITH CE,CLK,RD HI
|
||||
;
|
||||
DSRTC_GET:
|
||||
LD C,0 ; INITIALIZE WORKING VALUE TO 0
|
||||
LD B,8 ; LOOP FOR 8 BITS
|
||||
LD A,DSRTC_CLK ; MODE=READ, CLOCK ON, CE ACTIVE (0)
|
||||
DSRTC_GET1:
|
||||
XOR DSRTC_CLK ; FLIP CLOCK OFF
|
||||
OUT (DSRTC_BASE),A ; DO IT
|
||||
CALL DLY2 ; DELAY 2 * 27 T-STATES
|
||||
IN A,(DSRTC_BASE) ; READ THE RTC PORT
|
||||
RRA ; DATA BIT TO CARRY
|
||||
RR C ; SHIFT INTO WORKING VALUE
|
||||
LD A,DSRTC_CLK ; CLOCK ON
|
||||
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT
|
||||
CALL DLY1 ; DELAY 27 T-STATES
|
||||
DJNZ DSRTC_GET1 ; LOOP IF NOT DONE
|
||||
LD A,C ; GET RESULT INTO A
|
||||
RET
|
||||
;
|
||||
; COMPLETE A COMMAND SEQUENCE
|
||||
; FINISHES UP A COMMAND SEQUENCE.
|
||||
; DOES NOT DESTROY ANY REGISTERS.
|
||||
;
|
||||
; 1) BACK TO QUIESCENT STATE
|
||||
;
|
||||
DSRTC_END:
|
||||
PUSH AF ; SAVE AF
|
||||
;XOR A ; ALL LINES OFF TO CLEAN UP
|
||||
LD A,DSRTC_RESET ; QUIESCENT STATE
|
||||
OUT (DSRTC_BASE),A ; WRITE TO RTC PORT
|
||||
POP AF ; RESTORE AF
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; WORKING VARIABLES
|
||||
;
|
||||
; DSRTC_BUF IS USED FOR BURST READ/WRITE OF CLOCK DATA TO DS-1302
|
||||
|
||||
@@ -390,41 +390,25 @@ FD_DISPATCH:
|
||||
DEC A
|
||||
JP Z,FD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,FD_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,FD_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,FD_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,FD_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,FD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,FD_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,FD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,FD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,FD_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
FD_VERIFY:
|
||||
FD_FORMAT:
|
||||
FD_GETPAR:
|
||||
FD_SETPAR:
|
||||
FD_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;;
|
||||
; LD A,B ; GET REQUESTED FUNCTION
|
||||
; AND $0F
|
||||
; JP Z,FD_READ
|
||||
; DEC A
|
||||
; JP Z,FD_WRITE
|
||||
; DEC A
|
||||
; JP Z,FD_STATUS
|
||||
; DEC A
|
||||
; JP Z,FD_MEDIA
|
||||
; DEC A
|
||||
; JP Z,FD_CAP
|
||||
; DEC A
|
||||
; JP Z,FD_GEOM
|
||||
; CALL PANIC
|
||||
;
|
||||
; FD_SENSE
|
||||
; FD_MEDIA
|
||||
;
|
||||
FD_SENSE:
|
||||
;CALL FD_SELECTUNIT
|
||||
FD_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,FD_MEDIA4 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
|
||||
#IF (FDMAUTO)
|
||||
; SETUP TO READ TRK 0, HD 0, SEC 0
|
||||
@@ -460,7 +444,9 @@ FD_MEDIARETRY:
|
||||
|
||||
DJNZ FD_MEDIARETRY
|
||||
|
||||
; NO JOY, RETURN WITH A=0 (NO MEDIA)
|
||||
; NO JOY, RETURN WITH E=0 (NO MEDIA)
|
||||
LD HL,(FDDS_MEDIAADR)
|
||||
LD (HL),0 ; SET TO NO MEDIA
|
||||
LD E,0
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET
|
||||
@@ -482,6 +468,8 @@ FD_MEDIA3:
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
|
||||
FD_MEDIA4:
|
||||
|
||||
#IF (FDTRACE >= 3)
|
||||
LD DE,FDSTR_SELECT
|
||||
CALL WRITESTR
|
||||
|
||||
@@ -892,11 +892,13 @@ DIO_STAT:
|
||||
; DISK: SHIM FOR OLD STYLE MEDIA CALL
|
||||
;
|
||||
DIO_MEDIA:
|
||||
LD B,BF_NDIOSENSE
|
||||
CALL NDIO_DISPATCH
|
||||
LD A,E
|
||||
OR A
|
||||
RET
|
||||
;
|
||||
LD B,BF_NDIOMEDIA ; FORWARD TO MEDIA REPORT
|
||||
LD E,%00000011 ; ENABLE MEDIA CHECK AND MEDIA DISCOVERY
|
||||
CALL NDIO_DISPATCH ; CALL NEW VERSION
|
||||
LD A,E ; MOVE RESULTANT MEDIA ID TO A
|
||||
OR A ; SET FLAGS
|
||||
RET ; DONE
|
||||
;
|
||||
; DISK: GET BUFFER ADDRESS
|
||||
;
|
||||
|
||||
@@ -30,11 +30,10 @@ BF_NDIOREAD .EQU BF_DIO + 3 ; DISK READ SECTORS
|
||||
BF_NDIOWRITE .EQU BF_DIO + 4 ; DISK WRITE SECTORS
|
||||
BF_NDIOVERIFY .EQU BF_DIO + 5 ; DISK VERIFY SECTORS
|
||||
BF_NDIOFORMAT .EQU BF_DIO + 6 ; DISK FORMAT TRACK
|
||||
BF_NDIOSENSE .EQU BF_DIO + 7 ; DISK SENSE MEDIA
|
||||
BF_NDIOCAP .EQU BF_DIO + 8 ; GET DISK CAPACITY
|
||||
BF_NDIOGEOM .EQU BF_DIO + 9 ; GET DISK GEOMETRY
|
||||
BF_NDIOGETPAR .EQU BF_DIO + 10 ; GET DISK PARAMS
|
||||
BF_NDIOSETPAR .EQU BF_DIO + 11 ; SET DISK PARAMS
|
||||
BF_NDIOMEDIA .EQU BF_DIO + 7 ; DISK MEDIA REPORT
|
||||
BF_NDIODEFMED .EQU BF_DIO + 8 ; DEFINE DISK MEDIA
|
||||
BF_NDIOCAP .EQU BF_DIO + 9 ; DISK CAPACITY REPORT
|
||||
BF_NDIOGEOM .EQU BF_DIO + 10 ; DISK GEOMETRY REPORT
|
||||
;
|
||||
BF_RTC .EQU $20
|
||||
BF_RTCGETTIM .EQU BF_RTC + 0 ; GET TIME
|
||||
|
||||
@@ -58,20 +58,17 @@ HDSK_DISPATCH:
|
||||
DEC A
|
||||
JP Z,HDSK_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,HDSK_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,HDSK_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,HDSK_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,HDSK_DEFMED ; SUB-FUNC 9: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,HDSK_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,HDSK_CAP ; SUB-FUNC 10: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,HDSK_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,HDSK_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,HDSK_GEOM ; SUB-FUNC 11: REPORT GEOMETRY
|
||||
;
|
||||
HDSK_VERIFY:
|
||||
HDSK_FORMAT:
|
||||
HDSK_GETPAR:
|
||||
HDSK_SETPAR:
|
||||
HDSK_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -87,14 +84,6 @@ HDSK_RESET:
|
||||
XOR A ; ALWAYS OK
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_SENSE:
|
||||
LD A,MID_HD ; HARD DISK MEDIA
|
||||
LD E,A ; VALUE TO E
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET DISK CAPACITY
|
||||
; RETURN DE:HL=BLOCK COUNT, BC=BLOCK SIZE
|
||||
; SLICE C/H/S = 65/16/16 OR 16,640 TOTAL SECTORS
|
||||
@@ -122,14 +111,22 @@ HDSK_GEOM:
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_MEDIA:
|
||||
LD E,MID_HD ; HARD DISK MEDIA
|
||||
LD D,0 ; D:0=0 MEANS NO MEDIA CHANGE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -141,7 +138,7 @@ HDSK_READ:
|
||||
;
|
||||
;
|
||||
HDSK_WRITE:
|
||||
LD (HDSK_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
LD (HDSK_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
LD A,HDSK_CMDWRITE
|
||||
JR HDSK_RW
|
||||
;
|
||||
|
||||
@@ -332,20 +332,17 @@ IDE_DISPATCH:
|
||||
DEC A
|
||||
JP Z,IDE_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,IDE_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,IDE_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,IDE_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,IDE_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,IDE_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,IDE_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,IDE_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,IDE_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,IDE_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
IDE_VERIFY:
|
||||
IDE_FORMAT:
|
||||
IDE_GETPAR:
|
||||
IDE_SETPAR:
|
||||
IDE_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -379,36 +376,50 @@ IDE_STATUS:
|
||||
OR A ; SET FLAGS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; IDE_SENSE
|
||||
; IDE_GETMED
|
||||
;
|
||||
IDE_SENSE:
|
||||
; THE ONLY WAY TO RESET AN IDE DEVICE IS TO RESET
|
||||
; THE ENTIRE INTERFACE. SO, TO HANDLE POSSIBLE HOT
|
||||
; SWAP WE DO THAT, THEN RESELECT THE DESIRED UNIT AND
|
||||
; CONTINUE.
|
||||
CALL IDE_RESET ; RESET ALL DEVICES ON BUS
|
||||
IDE_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,IDE_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
; GET CURRENT STATUS
|
||||
IDE_DPTR(IDE_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
#IF (IDETRACE == 1)
|
||||
CALL IDE_PRTERR ; PRINT ANY ERRORS
|
||||
#ENDIF
|
||||
JR NZ,IDE_MEDIA1 ; ERROR ACTIVE, TO RIGHT TO RESET
|
||||
;
|
||||
; USE IDENTIFY COMMAND TO CHECK DEVICE
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TOFAST ; USE FAST TIMEOUT DURING IDENTIFY COMMAND
|
||||
CALL IDE_IDENTIFY ; EXECUTE IDENTIFY COMMAND
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
JR Z,IDE_MEDIA2 ; IF SUCCESS, BYPASS RESET
|
||||
;
|
||||
IDE_MEDIA1:
|
||||
CALL IDE_RESET ; RESET IDE INTERFACE
|
||||
;
|
||||
IDE_MEDIA2:
|
||||
IDE_DPTR(IDE_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
LD E,MID_HD ; ASSUME WE ARE OK
|
||||
RET Z ; RETURN IF GOOD INIT
|
||||
LD E,MID_NONE ; SIGNAL NO MEDA
|
||||
LD E,MID_NONE ; SIGNAL NO MEDIA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
IDE_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -738,11 +749,9 @@ IDE_INITUNIT:
|
||||
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TOFAST ; USE FAST TIMEOUT DURING INIT
|
||||
|
||||
|
||||
CALL IDE_PROBE ; DO PROBE
|
||||
RET NZ ; ABORT IF ERROR
|
||||
|
||||
CALL IDE_INITDEV ; ATTEMPT TO INIT DEVICE
|
||||
CALL Z,IDE_INITDEV ; IF FOUND, ATTEMPT TO INIT DEVICE
|
||||
|
||||
LD HL,IDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),IDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
|
||||
@@ -87,7 +87,7 @@ CB_CDL: ; START OF LIST
|
||||
#ENDIF
|
||||
;
|
||||
CB_CDLEND:
|
||||
.FILL (CB_CDL + 7 - $),0 ; PAD REMAINDER OF CDL
|
||||
.FILL (CB_CDL + 7 - $),$FF ; PAD REMAINDER OF CDL
|
||||
;
|
||||
; PRINT DEVICE LIST AT $E8 (3 ENTRY MAX)
|
||||
;
|
||||
@@ -96,7 +96,7 @@ CB_CDLEND:
|
||||
CB_PDL: ; START OF LIST
|
||||
;
|
||||
CB_PDLEND:
|
||||
.FILL (CB_PDL + 3 - $),0 ; PAD REMAINDER OF PDL
|
||||
.FILL (CB_PDL + 3 - $),$FF ; PAD REMAINDER OF PDL
|
||||
;
|
||||
; VIDEO DISPLAY DEVICE LIST AT $EC (3 ENTRY MAX)
|
||||
;
|
||||
@@ -105,7 +105,7 @@ CB_PDLEND:
|
||||
CB_VDL: ; START OF LIST
|
||||
;
|
||||
CB_VDLEND:
|
||||
.FILL (CB_VDL + 3 - $),0 ; PAD REMAINDER OF VDL
|
||||
.FILL (CB_VDL + 3 - $),$FF ; PAD REMAINDER OF VDL
|
||||
;
|
||||
; DISK DEVICE LIST AT $F0 (7 ENTRY MAX)
|
||||
;
|
||||
@@ -187,7 +187,7 @@ CB_DDL: ; START OF LIST
|
||||
#ENDIF
|
||||
;
|
||||
CB_DDLEND:
|
||||
.FILL (CB_DDL + 15 - $),0 ; PAD REMAINDER OF DDL
|
||||
.FILL (CB_DDL + 15 - $),$FF ; PAD REMAINDER OF DDL
|
||||
;
|
||||
.FILL (CB + HCB_SIZ - $),0 ; PAD REMAINDER OF HCB
|
||||
;
|
||||
|
||||
@@ -46,20 +46,17 @@ MD_DISPATCH:
|
||||
DEC A
|
||||
JP Z,MD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,MD_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,MD_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,MD_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,MD_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,MD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,MD_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,MD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,MD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,MD_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
MD_VERIFY:
|
||||
MD_FORMAT:
|
||||
MD_GETPAR:
|
||||
MD_SETPAR:
|
||||
MD_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -76,15 +73,6 @@ MD_RESET:
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_SENSE:
|
||||
LD A,C ; DEVICE/UNIT IS IN C
|
||||
ADD A,MID_MDROM ; SET CORRECT MEDIA VALUE
|
||||
LD E,A ; VALUE TO E
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_CAP:
|
||||
LD A,C ; DEVICE/UNIT IS IN C
|
||||
AND $0F ; ISOLATE UNIT NUM
|
||||
@@ -124,6 +112,16 @@ MD_GEOM1:
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_MEDIA:
|
||||
LD A,MID_MDROM ; SET MEDIA TYPE TO ROM
|
||||
ADD A,C ; ADJUST BASED ON DEVICE
|
||||
LD E,A ; RESULTANT MEDIA IT TO E
|
||||
LD D,0 ; D:0=0 MEANS NO MEDIA CHANGE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
MD_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
|
||||
@@ -219,18 +219,20 @@ PPIDE_TOFAST .EQU 10 ; FAST TIMEOUT IS 0.5 SECS
|
||||
;=============================================================================
|
||||
;
|
||||
PPIDE_INIT:
|
||||
PRTS("PPIDE: IO=0x$") ; LABEL FOR IO ADDRESS
|
||||
PRTS("PPIDE:$") ; LABEL FOR IO ADDRESS
|
||||
;
|
||||
; COMPUTE CPU SPEED COMPENSATED TIMEOUT SCALER
|
||||
; AT 1MHZ, THE SCALER IS 961 (50000US / 52TS = 961)
|
||||
; SCALER IS THEREFORE 961 * CPU SPEED IN MHZ
|
||||
LD DE,961 ; LOAD SCALER FOR 1MHZ
|
||||
; AT 1MHZ, THE SCALER IS 218 (50000US / 229TS = 218)
|
||||
; SCALER IS THEREFORE 218 * CPU SPEED IN MHZ
|
||||
LD DE,218 ; LOAD SCALER FOR 1MHZ
|
||||
LD A,(HCB + HCB_CPUMHZ) ; LOAD CPU SPEED IN MHZ
|
||||
CALL MULT8X16 ; HL := DE * A
|
||||
LD (PPIDE_TOSCALER),HL ; SAVE IT
|
||||
;
|
||||
PRTS(" IO=0x$") ; LABEL FOR IO ADDRESS
|
||||
LD A,PPIDEIOB
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
#IF (PPIDE8BIT)
|
||||
PRTS(" 8BIT$")
|
||||
#ENDIF
|
||||
@@ -325,20 +327,17 @@ PPIDE_DISPATCH:
|
||||
DEC A
|
||||
JP Z,PPIDE_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,PPIDE_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,PPIDE_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,PPIDE_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,PPIDE_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,PPIDE_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,PPIDE_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PPIDE_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,PPIDE_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,PPIDE_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
PPIDE_VERIFY:
|
||||
PPIDE_FORMAT:
|
||||
PPIDE_GETPAR:
|
||||
PPIDE_SETPAR:
|
||||
PPIDE_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -392,6 +391,40 @@ PPIDE_SENSE:
|
||||
LD E,MID_NONE ; SIGNAL NO MEDA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; IDE_GETMED
|
||||
;
|
||||
PPIDE_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,PPIDE_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
; GET CURRENT STATUS
|
||||
PPIDE_DPTR(PPIDE_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,PPIDE_MEDIA1 ; ERROR ACTIVE, TO RIGHT TO RESET
|
||||
;
|
||||
; USE IDENTIFY COMMAND TO CHECK DEVICE
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TOFAST ; USE FAST TIMEOUT DURING IDENTIFY COMMAND
|
||||
CALL PPIDE_IDENTIFY ; EXECUTE IDENTIFY COMMAND
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
JR Z,PPIDE_MEDIA2 ; IF SUCCESS, BYPASS RESET
|
||||
;
|
||||
PPIDE_MEDIA1:
|
||||
CALL PPIDE_RESET ; RESET IDE INTERFACE
|
||||
;
|
||||
PPIDE_MEDIA2:
|
||||
PPIDE_DPTR(PPIDE_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
LD E,MID_HD ; ASSUME WE ARE OK
|
||||
RET Z ; RETURN IF GOOD INIT
|
||||
LD E,MID_NONE ; SIGNAL NO MEDIA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_SEEK:
|
||||
@@ -787,18 +820,16 @@ PPIDE_INITUNIT:
|
||||
|
||||
CALL PPIDE_SELUNIT ; SELECT UNIT
|
||||
RET NZ ; ABORT IF ERROR
|
||||
|
||||
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TOFAST ; USE FAST TIMEOUT DURING INIT
|
||||
|
||||
|
||||
CALL PPIDE_PROBE ; DO PROBE
|
||||
RET NZ ; ABORT IF ERROR
|
||||
|
||||
CALL PPIDE_INITDEV ; INIT DEVICE AND RETURN
|
||||
;
|
||||
CALL Z,PPIDE_INITDEV ; IF FOUND, ATTEMPT TO INIT DEVICE
|
||||
|
||||
LD HL,PPIDE_TIMEOUT ; POINT TO TIMEOUT
|
||||
LD (HL),PPIDE_TONORM ; BACK TO NORMAL TIMEOUT
|
||||
;
|
||||
|
||||
RET
|
||||
;
|
||||
; TAKE ANY ACTIONS REQUIRED TO SELECT DESIRED PHYSICAL UNIT
|
||||
@@ -962,24 +993,24 @@ PPIDE_CHKDEVICE:
|
||||
;
|
||||
;
|
||||
PPIDE_WAITRDY:
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS
|
||||
LD B,A ; PUT IN OUTER LOOP VAR
|
||||
PPIDE_WAITRDY1:
|
||||
LD DE,(PPIDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR
|
||||
PPIDE_WAITRDY2:
|
||||
;IN A,(PPIDE_REG_STAT) ; READ STATUS
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
LD C,A ; SAVE IT
|
||||
AND %11000000 ; ISOLATE BUSY AND RDY BITS
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
LD C,A ; SAVE IT
|
||||
AND %11000000 ; ISOLATE BUSY AND RDY BITS
|
||||
XOR %01000000 ; WE WANT BUSY(7) TO BE 0 AND RDY(6) TO BE 1
|
||||
RET Z ; ALL SET, RETURN WITH Z SET
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,PPIDE_WAITRDY2 ; INNER LOOP RETURN
|
||||
DJNZ PPIDE_WAITRDY1 ; OUTER LOOP RETURN
|
||||
JP PPIDE_RDYTO ; EXIT WITH RDYTO ERR
|
||||
RET Z ; ALL SET, RETURN WITH Z SET
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,PPIDE_WAITRDY2 ; INNER LOOP RETURN
|
||||
DJNZ PPIDE_WAITRDY1 ; OUTER LOOP RETURN
|
||||
JP PPIDE_RDYTO ; EXIT WITH RDYTO ERR
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -1012,39 +1043,39 @@ PPIDE_WAITBSY1:
|
||||
LD DE,(PPIDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR
|
||||
PPIDE_WAITBSY2:
|
||||
;IN A,(PPIDE_REG_STAT) ; READ STATUS
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
LD C,A ; SAVE IT
|
||||
AND %10000000 ; TO FILL (OR READY TO FILL)
|
||||
RET Z
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,PPIDE_WAITBSY2
|
||||
DJNZ PPIDE_WAITBSY1
|
||||
JP PPIDE_BSYTO ; EXIT WITH BSYTO ERR
|
||||
;
|
||||
CALL PPIDE_IN ; 17TS + 170TS
|
||||
.DB PPIDE_REG_STAT ; 0TS
|
||||
LD C,A ; SAVE IT ; 4TS
|
||||
AND %10000000 ; TO FILL (OR READY TO FILL) ; 7TS
|
||||
RET Z ; 5TS
|
||||
DEC DE ; 6TS
|
||||
LD A,D ; 4TS
|
||||
OR E ; 4TS
|
||||
JR NZ,PPIDE_WAITBSY2 ; 12TS
|
||||
DJNZ PPIDE_WAITBSY1 ; -----
|
||||
JP PPIDE_BSYTO ; EXIT WITH BSYTO ERR ; 229TS
|
||||
;
|
||||
;
|
||||
;
|
||||
PPIDE_IN:
|
||||
LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ
|
||||
OUT (PPIDE_IO_PPI),A ; DO IT
|
||||
EX (SP),HL ; GET PARM POINTER
|
||||
PUSH BC ; SAVE INCOMING BC
|
||||
LD B,(HL) ; GET CTL PORT VALUE
|
||||
LD C,PPIDE_IO_CTL ; SETUP PORT TO WRITE
|
||||
OUT (C),B ; SET ADDRESS LINES
|
||||
SET 6,B ; TURN ON WRITE BIT
|
||||
OUT (C),B ; ASSERT WRITE LINE
|
||||
IN A,(PPIDE_IO_DATALO) ; GET DATA VALUE FROM DEVICE
|
||||
RES 6,B ; CLEAR WRITE BIT
|
||||
OUT (C),B ; DEASSERT WRITE LINE
|
||||
POP BC ; RECOVER INCOMING BC
|
||||
INC HL ; POINT PAST PARM
|
||||
EX (SP),HL ; RESTORE STACK
|
||||
RET
|
||||
;
|
||||
;
|
||||
LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ; 7TS
|
||||
OUT (PPIDE_IO_PPI),A ; DO IT ; 11TS
|
||||
EX (SP),HL ; GET PARM POINTER ; 19TS
|
||||
PUSH BC ; SAVE INCOMING BC ; 11TS
|
||||
LD B,(HL) ; GET CTL PORT VALUE ; 7TS
|
||||
LD C,PPIDE_IO_CTL ; SETUP PORT TO WRITE ; 7TS
|
||||
OUT (C),B ; SET ADDRESS LINES ; 12TS
|
||||
SET 6,B ; TURN ON WRITE BIT ; 8TS
|
||||
OUT (C),B ; ASSERT WRITE LINE ; 12TS
|
||||
IN A,(PPIDE_IO_DATALO) ; GET DATA VALUE FROM DEVICE ; 11TS
|
||||
RES 6,B ; CLEAR WRITE BIT ; 8TS
|
||||
OUT (C),B ; DEASSERT WRITE LINE ; 12TS
|
||||
POP BC ; RECOVER INCOMING BC ; 10TS
|
||||
INC HL ; POINT PAST PARM ; 6TS
|
||||
EX (SP),HL ; RESTORE STACK ; 19TS
|
||||
RET ; 10TS
|
||||
; ; -----
|
||||
; ; 170TS
|
||||
;
|
||||
PPIDE_OUT:
|
||||
PUSH AF ; PRESERVE INCOMING VALUE
|
||||
@@ -1250,7 +1281,7 @@ PPIDE_STR_NO .TEXT "NO$"
|
||||
;=============================================================================
|
||||
;
|
||||
PPIDE_TIMEOUT .DB PPIDE_TONORM ; WAIT FUNCS TIMEOUT IN TENTHS OF SEC
|
||||
PPIDE_TOSCALER .DW CPUMHZ * 961 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
PPIDE_TOSCALER .DW CPUMHZ * 218 ; WAIT FUNCS SCALER FOR CPU SPEED
|
||||
;
|
||||
PPIDE_CMD .DB 0 ; PENDING COMMAND TO PROCESS
|
||||
PPIDE_DRVHD .DB 0 ; CURRENT DRIVE/HEAD MASK
|
||||
|
||||
@@ -379,34 +379,30 @@ PPPSD_DISPATCH:
|
||||
; DISPATCH ACCORDING TO DISK SUB-FUNCTION
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,PPPSD_STATUS ; SUB-FUNC 0: STATUS
|
||||
JP Z,MD_STATUS ; SUB-FUNC 0: STATUS
|
||||
DEC A
|
||||
JP Z,PPPSD_RESET ; SUB-FUNC 1: RESET
|
||||
JP Z,MD_RESET ; SUB-FUNC 1: RESET
|
||||
DEC A
|
||||
JP Z,PPPSD_SEEK ; SUB-FUNC 2: SEEK
|
||||
JP Z,MD_SEEK ; SUB-FUNC 2: SEEK
|
||||
DEC A
|
||||
JP Z,PPPSD_READ ; SUB-FUNC 3: READ SECTORS
|
||||
JP Z,MD_READ ; SUB-FUNC 3: READ SECTORS
|
||||
DEC A
|
||||
JP Z,PPPSD_WRITE ; SUB-FUNC 4: WRITE SECTORS
|
||||
JP Z,MD_WRITE ; SUB-FUNC 4: WRITE SECTORS
|
||||
DEC A
|
||||
JP Z,PPPSD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS
|
||||
JP Z,MD_VERIFY ; SUB-FUNC 5: VERIFY SECTORS
|
||||
DEC A
|
||||
JP Z,PPPSD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
JP Z,MD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,PPPSD_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,MD_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,PPPSD_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,MD_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,PPPSD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,MD_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PPPSD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,PPPSD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
;
|
||||
JP Z,MD_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
PPPSD_VERIFY:
|
||||
PPPSD_FORMAT:
|
||||
PPPSD_GETPAR:
|
||||
PPPSD_SETPAR:
|
||||
PPPSD_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
; READ AN LBA BLOCK FROM THE SD CARD
|
||||
@@ -546,7 +542,7 @@ PPPSD_RESET:
|
||||
; SETUP FOR SUBSEQUENT ACCESS
|
||||
; INIT CARD IF NOT READY OR ON DRIVE LOG IN
|
||||
;
|
||||
PPPSD_SENSE:
|
||||
PPPSD_MEDIA:
|
||||
; REINITIALIZE THE CARD HERE TO DETERMINE PRESENCE
|
||||
CALL PPPSD_INITCARD
|
||||
#IF (PPPSDTRACE == 1)
|
||||
|
||||
@@ -273,7 +273,6 @@ PRPSD_DISPATCH:
|
||||
CP PRPSD_UNITCNT
|
||||
CALL NC,PANIC ; PANIC IF TOO HIGH
|
||||
LD (PRPSD_UNIT),A ; SAVE IT
|
||||
;
|
||||
;
|
||||
; DISPATCH ACCORDING TO DISK SUB-FUNCTION
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
@@ -292,20 +291,17 @@ PRPSD_DISPATCH:
|
||||
DEC A
|
||||
JP Z,PRPSD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,PRPSD_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,PRPSD_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,PRPSD_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,PRPSD_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,PRPSD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,PRPSD_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,PRPSD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,PRPSD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,PRPSD_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
PRPSD_VERIFY:
|
||||
PRPSD_FORMAT:
|
||||
PRPSD_GETPAR:
|
||||
PRPSD_SETPAR:
|
||||
PRPSD_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -408,7 +404,7 @@ PRPSD_RESET:
|
||||
;
|
||||
; PRPSD_SENSE
|
||||
;
|
||||
PRPSD_SENSE:
|
||||
PRPSD_MEDIA:
|
||||
; REINITIALIZE THE CARD HERE
|
||||
CALL PRPSD_INITCARD
|
||||
#IF (PRPSDTRACE == 1)
|
||||
|
||||
@@ -52,33 +52,21 @@ RF_DISPATCH:
|
||||
DEC A
|
||||
JP Z,RF_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,RF_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,RF_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,RF_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,RF_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,RF_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,RF_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,RF_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,RF_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,RF_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
RF_VERIFY:
|
||||
RF_FORMAT:
|
||||
RF_GETPAR:
|
||||
RF_SETPAR:
|
||||
RF_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
;
|
||||
RF_SENSE:
|
||||
LD A,C ; DEVICE/UNIT IS IN C
|
||||
ADD A,MID_RF ; SET CORRECT MEDIA VALUE
|
||||
LD E,A ; VALUE TO E
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
RF_STATUS:
|
||||
XOR A ; STATUS ALWAYS OK
|
||||
RET
|
||||
@@ -117,14 +105,22 @@ RF_GEOM:
|
||||
;
|
||||
;
|
||||
;
|
||||
RF_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
RF_MEDIA:
|
||||
LD E,MID_RF ; RAM FLOPPY MEDIA
|
||||
LD D,0 ; D:0=0 MEANS NO MEDIA CHANGE
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
RF_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
|
||||
@@ -614,7 +614,7 @@ DB_READSEC:
|
||||
#ENDIF
|
||||
LD B,BF_DIOSETBUF ; HBIOS FUNC: SET BUF
|
||||
RST 08 ; CALL HBIOS
|
||||
|
||||
|
||||
LD A,(BL_DEVICE) ; GET ACTIVE DEVICE/UNIT BYTE
|
||||
AND $F0 ; ISOLATE DEVICE PORTION
|
||||
CP DIODEV_FD ; FLOPPY?
|
||||
@@ -636,7 +636,7 @@ DB_READSEC:
|
||||
DB_READSEC1:
|
||||
;
|
||||
; LBA STYLE ACCESS
|
||||
LD DE,(BL_CURTRK) ; GET TRACK INTO HL
|
||||
LD DE,(BL_CURTRK) ; GET TRACK INTO DE
|
||||
LD B,4 ; PREPARE TO LEFT SHIFT BY 4 BITS
|
||||
DB_READSEC2:
|
||||
SLA E ; SHIFT DE LEFT BY 4 BITS
|
||||
@@ -654,6 +654,8 @@ DB_READSEC2:
|
||||
LD D,A ; PUT IT BACK IN D
|
||||
LD A,(BL_LUTRK+1) ; MSB OF LU TRACK TO A
|
||||
CALL ADDHLA ; ADD LU OFFSET
|
||||
; FINAL LBA IN HL:DE
|
||||
SET 7,H ; SET HI BIT TO INDICATE LBA
|
||||
LD B,BF_DIORD ; FUNCTION IN B
|
||||
LD A,(BL_DEVICE) ; GET THE DEVICE/UNIT VALUE
|
||||
LD C,A ; PUT IT IN C
|
||||
|
||||
@@ -160,21 +160,21 @@ SD_TRDR .EQU Z180_TRDR
|
||||
;
|
||||
; SD CARD COMMANDS
|
||||
;
|
||||
SD_CSD_GO_IDLE_STATE .EQU $40 + 0 ; $40, CMD0 -> R1
|
||||
SD_CSD_SEND_OP_COND .EQU $40 + 1 ; $41, CMD1 -> R1
|
||||
SD_CSD_SEND_IF_COND .EQU $40 + 8 ; $48, CMD8 -> R7
|
||||
SD_CSD_SEND_CSD .EQU $40 + 9 ; $49, CMD9 -> R1
|
||||
SD_CSD_SEND_CID .EQU $40 + 10 ; $4A, CMD10 -> R1
|
||||
SD_CSD_SET_BLOCKLEN .EQU $40 + 16 ; $50, CMD16 -> R1
|
||||
SD_CSD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1
|
||||
SD_CSD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1
|
||||
SD_CSD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1
|
||||
SD_CSD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3
|
||||
SD_CMD_GO_IDLE_STATE .EQU $40 + 0 ; $40, CMD0 -> R1
|
||||
SD_CMD_SEND_OP_COND .EQU $40 + 1 ; $41, CMD1 -> R1
|
||||
SD_CMD_SEND_IF_COND .EQU $40 + 8 ; $48, CMD8 -> R7
|
||||
SD_CMD_SEND_CSD .EQU $40 + 9 ; $49, CMD9 -> R1
|
||||
SD_CMD_SEND_CID .EQU $40 + 10 ; $4A, CMD10 -> R1
|
||||
SD_CMD_SET_BLOCKLEN .EQU $40 + 16 ; $50, CMD16 -> R1
|
||||
SD_CMD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1
|
||||
SD_CMD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1
|
||||
SD_CMD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1
|
||||
SD_CMD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3
|
||||
;
|
||||
; SD CARD APPLICATION COMMANDS (PRECEDED BY APP_CMD COMMAND)
|
||||
;
|
||||
SD_ACSD_SEND_OP_COND .EQU $40 + 41 ; $69, ACMD41 -> R1
|
||||
SD_ACSD_SEND_SCR .EQU $40 + 51 ; $73, ACMD51 -> R1
|
||||
SD_ACMD_SEND_OP_COND .EQU $40 + 41 ; $69, ACMD41 -> R1
|
||||
SD_ACMD_SEND_SCR .EQU $40 + 51 ; $73, ACMD51 -> R1
|
||||
;
|
||||
; SD CARD TYPE
|
||||
;
|
||||
@@ -353,7 +353,7 @@ SD_INITUNIT1:
|
||||
CALL WRITESTR
|
||||
|
||||
; GET CID (WHICH CONTAINS PRODUCT NAME)
|
||||
LD A,SD_CSD_SEND_CID ; SEND_CID
|
||||
LD A,SD_CMD_SEND_CID ; SEND_CID
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
CALL SD_EXECCMD ; RUN COMMAND
|
||||
RET NZ ; ABORT ON ERROR
|
||||
@@ -412,7 +412,6 @@ SD_DISPATCH:
|
||||
CP SD_UNITCNT
|
||||
CALL NC,PANIC ; PANIC IF TOO HIGH
|
||||
LD (SD_UNIT),A ; SAVE IT
|
||||
;CALL SD_SELUNIT ; SELECT DESIRED UNIT
|
||||
;
|
||||
; DISPATCH ACCORDING TO DISK SUB-FUNCTION
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
@@ -431,20 +430,17 @@ SD_DISPATCH:
|
||||
DEC A
|
||||
JP Z,SD_FORMAT ; SUB-FUNC 6: FORMAT TRACK
|
||||
DEC A
|
||||
JP Z,SD_SENSE ; SUB-FUNC 7: SENSE MEDIA
|
||||
JP Z,SD_MEDIA ; SUB-FUNC 7: MEDIA REPORT
|
||||
DEC A
|
||||
JP Z,SD_CAP ; SUB-FUNC 8: GET DISK CAPACITY
|
||||
JP Z,SD_DEFMED ; SUB-FUNC 8: DEFINE MEDIA
|
||||
DEC A
|
||||
JP Z,SD_GEOM ; SUB-FUNC 9: GET DISK GEOMETRY
|
||||
JP Z,SD_CAP ; SUB-FUNC 9: REPORT CAPACITY
|
||||
DEC A
|
||||
JP Z,SD_GETPAR ; SUB-FUNC 10: GET DISK PARAMETERS
|
||||
DEC A
|
||||
JP Z,SD_SETPAR ; SUB-FUNC 11: SET DISK PARAMETERS
|
||||
JP Z,SD_GEOM ; SUB-FUNC 10: REPORT GEOMETRY
|
||||
;
|
||||
SD_VERIFY:
|
||||
SD_FORMAT:
|
||||
SD_GETPAR:
|
||||
SD_SETPAR:
|
||||
SD_DEFMED:
|
||||
CALL PANIC ; INVALID SUB-FUNCTION
|
||||
;
|
||||
;
|
||||
@@ -457,7 +453,7 @@ SD_READ:
|
||||
#ENDIF
|
||||
CALL SD_SELUNIT
|
||||
; READ A SECTOR
|
||||
LD C,SD_CSD_READ_SNGL_BLK ; SET READ_SINGLE_BLOCK COMMAND
|
||||
LD C,SD_CMD_READ_SNGL_BLK ; SET READ_SINGLE_BLOCK COMMAND
|
||||
JP SD_SECTIO ; DO SECTOR I/O
|
||||
;
|
||||
;
|
||||
@@ -472,7 +468,7 @@ SD_WRITE:
|
||||
CALL SD_CHKWP ; CHECK FOR WRITE PROTECT
|
||||
JP NZ,SD_WRTPROT ; HANDLE IT IF SO
|
||||
; WRITE A SECTOR
|
||||
LD C,SD_CSD_WRITE_BLOCK ; SET WRITE_BLOCK COMMAND
|
||||
LD C,SD_CMD_WRITE_BLOCK ; SET WRITE_BLOCK COMMAND
|
||||
JP SD_SECTIO ; DO SECTOR I/O
|
||||
;
|
||||
SD_STATUS:
|
||||
@@ -485,33 +481,62 @@ SD_STATUS:
|
||||
;
|
||||
;
|
||||
SD_RESET:
|
||||
XOR A ; ALWAYS OK
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_SENSE:
|
||||
CALL SD_SELUNIT ; SET CUR UNIT
|
||||
; RE-INITIALIZE THE SD CARD TO ACCOMMODATE HOT SWAPPING
|
||||
CALL SD_INITCARD ; RE-INIT SELECTED UNIT
|
||||
#IF (SDTRACE == 1)
|
||||
CALL SD_PRTERR ; PRINT ANY ERRORS
|
||||
#ENDIF
|
||||
OR A ; SET RESULT FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_MEDIA:
|
||||
LD A,E ; GET FLAGS
|
||||
OR A ; SET FLAGS
|
||||
JR Z,SD_MEDIA2 ; JUST REPORT CURRENT STATUS AND MEDIA
|
||||
;
|
||||
IDE_DPTR(SD_STAT) ; POINT TO UNIT STATUS
|
||||
LD A,(HL) ; GET STATUS
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,SD_MEDIA1 ; ERROR ACTIVE, TO RIGHT TO RESET
|
||||
;
|
||||
; USE SEND_CSD TO CHECK CARD
|
||||
CALL SD_SELUNIT ; SET CUR UNIT
|
||||
LD A,SD_CMD_SEND_CSD ; SEND_CSD
|
||||
CALL SD_EXECCMD ; EXECUTE COMMAND
|
||||
JR NZ,SD_MEDIA1 ; ERROR, NEED RESET
|
||||
LD BC,16 ; 16 BYTES OF CSD
|
||||
LD HL,SD_BUF ; PUT IN OUR PRIVATE BUFFER
|
||||
CALL SD_GETDATA ; GET THE DATA
|
||||
CALL SD_DONE ; CLOSE THE TRANSACTION
|
||||
JR Z,SD_MEDIA2 ; IF SUCCESS, BYPASS RESET
|
||||
;
|
||||
SD_MEDIA1:
|
||||
CALL SD_RESET ; RESET CARD
|
||||
;
|
||||
SD_MEDIA2:
|
||||
SD_DPTR(SD_STAT) ; HL := ADR OF STATUS, AF TRASHED
|
||||
LD A,(HL) ; GET STATUS OF SELECTED UNIT
|
||||
OR A ; SET FLAGS
|
||||
LD D,0 ; NO MEDIA CHANGE DETECTED
|
||||
LD E,MID_HD ; ASSUME WE ARE OK
|
||||
RET Z ; RETURN IF GOOD INIT
|
||||
LD E,MID_NONE ; SIGNAL NO MEDA
|
||||
LD E,MID_NONE ; SIGNAL NO MEDIA
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
SD_SEEK:
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
BIT 7,D ; CHECK FOR LBA FLAG
|
||||
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
|
||||
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
|
||||
LD BC,HSTLBA ; POINT TO LBA STORAGE
|
||||
CALL ST32 ; SAVE LBA ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -572,7 +597,7 @@ SD_INITCARD2:
|
||||
;
|
||||
; CMD8 IS REQUIRED FOR V2 CARDS. FAILURE HERE IS OK AND
|
||||
; JUST MEANS THAT IT IS A V1 CARD
|
||||
LD A,SD_CSD_SEND_IF_COND ; SEND_IF_COND
|
||||
LD A,SD_CMD_SEND_IF_COND ; SEND_IF_COND
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
LD HL,SD_CMDP2 ; POINT TO 3RD PARM BYTE
|
||||
LD (HL),1 ; VHS=1, 2.7-3.6V
|
||||
@@ -597,7 +622,7 @@ SD_INITCARD3:
|
||||
OR A ; SET FLAGS
|
||||
RET NZ ; ABORT IF ANY OTHER ERROR
|
||||
; SEND APP_OP_COND
|
||||
LD A,SD_ACSD_SEND_OP_COND ; SD_APP_OP_COND
|
||||
LD A,SD_ACMD_SEND_OP_COND ; SD_APP_OP_COND
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
LD A,$40 ; P0 = $40 INDICATES WE SUPPORT V2 CARDS
|
||||
LD (SD_CMDP0),A ; SET COMMAND PARM 0
|
||||
@@ -623,7 +648,7 @@ SD_INITCARD3B:
|
||||
LD DE,300 ; 16US * 300 = ~5MS
|
||||
CALL VDELAY ; CPU SPEED NORMALIZED DELAY
|
||||
; SEND OP_COND COMMAND
|
||||
LD A,SD_CSD_SEND_OP_COND ; SD_OP_COND
|
||||
LD A,SD_CMD_SEND_OP_COND ; SD_OP_COND
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
CALL SD_EXECCMDND ; EXEC COMMAND WITH NO DATA
|
||||
RET NZ ; ABORT ON ERROR
|
||||
@@ -645,7 +670,7 @@ SD_INITCARD3C:
|
||||
SD_INITCARD4:
|
||||
; CMD58 RETURNS THE 32 BIT OCR REGISTER (R3), WE WANT TO CHECK
|
||||
; BIT 30, IF SET THIS IS SDHC/XC CARD
|
||||
LD A,SD_CSD_READ_OCR ; READ_OCR
|
||||
LD A,SD_CMD_READ_OCR ; READ_OCR
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
CALL SD_EXECCMD ; EXECUTE COMMAND
|
||||
RET NZ ; ABORT ON ERROR
|
||||
@@ -661,7 +686,7 @@ SD_INITCARD4A:
|
||||
; SD_SPEC3 (BIT 47) IS SET IF CARD IS SDXC OR GREATER
|
||||
CALL SD_EXECACMD ; SEND APP COMMAND INTRODUCER
|
||||
RET NZ ; ABORT ON ERROR (THIS SHOULD ALWAYS WORK)
|
||||
LD A,SD_ACSD_SEND_SCR ; APP CMD SEND_SCR
|
||||
LD A,SD_ACMD_SEND_SCR ; APP CMD SEND_SCR
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
CALL SD_EXECCMD ; EXECUTE COMMAND
|
||||
RET NZ ; ABORT ON ERROR (THIS SHOULD ALWAYS WORK)
|
||||
@@ -703,7 +728,7 @@ SD_INITCARD5:
|
||||
#ENDIF
|
||||
|
||||
; SET OUR DESIRED BLOCK LENGTH (512 BYTES)
|
||||
LD A,SD_CSD_SET_BLOCKLEN ; SET_BLOCKLEN
|
||||
LD A,SD_CMD_SET_BLOCKLEN ; SET_BLOCKLEN
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
LD DE,512 ; 512 BYTE BLOCK LENGTH
|
||||
LD HL,SD_CMDP2 ; PUT VALUE INTO PARMS
|
||||
@@ -722,7 +747,7 @@ SD_INITCARD5:
|
||||
#ENDIF
|
||||
;
|
||||
; ISSUE SEND_CSD (TO DERIVE CARD CAPACITY)
|
||||
LD A,SD_CSD_SEND_CSD ; SEND_CSD
|
||||
LD A,SD_CMD_SEND_CSD ; SEND_CSD
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
CALL SD_EXECCMD ; EXECUTE COMMAND
|
||||
RET NZ ; ABORT ON ERROR
|
||||
@@ -852,9 +877,9 @@ SD_SECTIO:
|
||||
LD HL,(SD_DSKBUF)
|
||||
LD BC,512 ; LENGTH TO READ
|
||||
LD A,(SD_CMD) ; GET THE COMMAND
|
||||
CP SD_CSD_READ_SNGL_BLK ; READ_SINGLE_BLOCK?
|
||||
CP SD_CMD_READ_SNGL_BLK ; READ_SINGLE_BLOCK?
|
||||
JR Z,SD_SECTIO1 ; HANDLE READ
|
||||
CP SD_CSD_WRITE_BLOCK ; WRITE_BLOCK?
|
||||
CP SD_CMD_WRITE_BLOCK ; WRITE_BLOCK?
|
||||
JR Z,SD_SECTIO2 ; HANDLE WRITE
|
||||
CALL PANIC ; PANIC ON ANYTHING ELSE
|
||||
SD_SECTIO1:
|
||||
@@ -941,7 +966,7 @@ SD_GOIDLE1:
|
||||
;CALL VDELAY ; CPU SPEED NORMALIZED DELAY
|
||||
|
||||
; PUT CARD IN IDLE STATE
|
||||
LD A,SD_CSD_GO_IDLE_STATE ; CMD0 = ENTER IDLE STATE
|
||||
LD A,SD_CMD_GO_IDLE_STATE ; CMD0 = ENTER IDLE STATE
|
||||
CALL SD_INITCMD ; INIT COMMAND BUFFER
|
||||
LD A,$95 ; CRC FOR GO_IDLE_STATE COMMAND IS $95
|
||||
LD (SD_CMDCRC),A ; SET CRC
|
||||
@@ -971,7 +996,7 @@ SD_INITCMD1:
|
||||
; EXECUTE APP COMMAND
|
||||
;
|
||||
SD_EXECACMD:
|
||||
LD A,SD_CSD_APP_CMD ; APP_CMD, AN APP CMD IS NEXT
|
||||
LD A,SD_CMD_APP_CMD ; APP_CMD, AN APP CMD IS NEXT
|
||||
CALL SD_INITCMD ; SETUP COMMAND BUFFER
|
||||
JR SD_EXECCMDND ; EXEC COMMAND W/ NO DATA RETURNED
|
||||
;
|
||||
@@ -1203,15 +1228,11 @@ SD_OPRMSK .EQU (SD_CS | SD_CLK | SD_DI)
|
||||
; UNIT IS SPECIFIED IN A
|
||||
;
|
||||
SD_SELUNIT:
|
||||
LD HL,SD_UNIT ; POINT TO PREVIOUSLY SELECTED UNIT
|
||||
CP (HL) ; SAME?
|
||||
RET Z ; IF SO, NOTHING MORE TO DO
|
||||
LD A,(SD_UNIT)
|
||||
;
|
||||
CP SD_UNITCNT ; CHECK VALIDITY (EXCEED UNIT COUNT?)
|
||||
JP NC,SD_INVUNIT ; HANDLE INVALID UNIT
|
||||
;
|
||||
; NEW UNIT SELECTED, IMPLEMENT IT
|
||||
;LD (SD_UNIT),A ; SAVE CURRENT UNIT NUMBER
|
||||
#IF (SDMODE == SDMODE_DSD)
|
||||
; SELECT REQUESTED UNIT
|
||||
OUT (SD_SELREG),A ; ACTUALLY SELECT THE CARD
|
||||
|
||||
@@ -63,6 +63,12 @@ MID_FD360 .EQU 7
|
||||
MID_FD120 .EQU 8
|
||||
MID_FD111 .EQU 9
|
||||
;
|
||||
; DS RTC MODE SELECTIONS
|
||||
;
|
||||
DSRTCMODE_NONE .EQU 0 ; NO DSRTC
|
||||
DSRTCMODE_STD .EQU 1 ; ORIGINAL DSRTC CIRCUIT (SBC, ZETA, MK4)
|
||||
DSRTCMODE_MFPIC .EQU 2 ; MF/PIC VARIANT
|
||||
;
|
||||
; FD MODE SELECTIONS
|
||||
;
|
||||
FDMODE_NONE .EQU 0
|
||||
|
||||
BIN
Source/RomDsk/sbc_mfpic/PPIDETST.COM
Normal file
BIN
Source/RomDsk/sbc_mfpic/PPIDETST.COM
Normal file
Binary file not shown.
Reference in New Issue
Block a user