mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Miscellaneous
- Cosmetic updates - Fix fv.asm keyboard status function - Bump version number
This commit is contained in:
@@ -232,6 +232,7 @@ call Build SCZ180 sc131_std || exit /b
|
||||
call Build SCZ180 sc140_std || exit /b
|
||||
call Build SCZ180 sc503_std || exit /b
|
||||
call Build SCZ180 sc700_std || exit /b
|
||||
call Build GMZ180 std || exit /b
|
||||
call Build DYNO std || exit /b
|
||||
call Build RPH std || exit /b
|
||||
call Build Z80RETRO std || exit /b
|
||||
|
||||
@@ -40,6 +40,7 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc140_std"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc503_std"; bash Build.sh
|
||||
ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc700_std"; bash Build.sh
|
||||
ROM_PLATFORM="GMZ180"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="RPH"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="Z80RETRO"; ROM_CONFIG="std"; bash Build.sh
|
||||
@@ -51,7 +52,6 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then
|
||||
ROM_PLATFORM="NABU"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="FZ80"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="GMZ180"; ROM_CONFIG="std"; bash Build.sh
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
@@ -226,6 +226,7 @@ FV_STAT:
|
||||
IN A,(FV_KBDST) ; GET STATUS
|
||||
AND $01 ; ISOLATE DATA WAITING BIT
|
||||
JP Z,CIO_IDLE ; NO DATA, EXIT VIA IDLE PROCESS
|
||||
RET
|
||||
|
||||
FV_FLUSH:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
|
||||
@@ -377,6 +377,7 @@ VDADEV_TMS .EQU $03 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
|
||||
VDADEV_VGA .EQU $04 ; ECB VGA3 - HITACHI HD6445
|
||||
VDADEV_VRC .EQU $05 ; VGARC
|
||||
VDADEV_EF .EQU $06 ; EF9345
|
||||
VDADEV_FV .EQU $07 ; S100 FPGA VGA
|
||||
;
|
||||
; SOUND DEVICE IDS
|
||||
;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
; MK4 $80 N/A N/A
|
||||
; RC $10 N/A N/A
|
||||
; SMB $E0 N/A N/A
|
||||
; GIDE $20 $20 $28 - Genesis IDE controller - Note Read Hi Low - Write - Low High
|
||||
; GIDE $20 $20 $28 - Genesis IDE controller - Note Read Hi Low - Write - Low High
|
||||
;
|
||||
; +-----------------------------------------------------------------------+
|
||||
; | CONTROL BLOCK REGISTERS |
|
||||
@@ -510,7 +510,7 @@ IDE_INIT2:
|
||||
LD DE,IDE_STR_MODE_RC ; MODE LABEL
|
||||
CP IDEMODE_RC ; TEST FOR MODE
|
||||
JR Z,IDE_INIT2A ; IF SO, DISPLAY IT
|
||||
LD DE,IDE_STR_MODE_GIDE ; MODE LABEL
|
||||
LD DE,IDE_STR_MODE_GIDE ; MODE LABEL
|
||||
CP IDEMODE_GIDE ; TEST FOR MODE
|
||||
JR Z,IDE_INIT2A ; IF SO, DISPLAY IT
|
||||
JR IDE_INIT4 ; NO MODE? BYPASS ENTRY
|
||||
@@ -942,13 +942,13 @@ IDE_PKT_RDSEC:
|
||||
#ENDIF
|
||||
; SETUP LBA
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
;;;#IF (DSKYENABLE)
|
||||
;;; #IF (DSKYDSKACT)
|
||||
LD A,IDE_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;;; #ENDIF
|
||||
;;;#ENDIF
|
||||
;
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
|
||||
@@ -1011,13 +1011,13 @@ IDE_PKT_WRSEC:
|
||||
#ENDIF
|
||||
; SETUP LBA
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
;;;#IF (DSKYENABLE)
|
||||
;;; #IF (DSKYDSKACT)
|
||||
LD A,IDE_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;;; #ENDIF
|
||||
;;;#ENDIF
|
||||
;
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB)
|
||||
@@ -1043,13 +1043,13 @@ IDE_PKT_WRSEC:
|
||||
;
|
||||
IDE_SETADDR:
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
;;;#IF (DSKYENABLE)
|
||||
;;; #IF (DSKYDSKACT)
|
||||
LD A,IDE_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;;; #ENDIF
|
||||
;;;#ENDIF
|
||||
; SEND 3 LOWEST BYTES OF LBA IN REVERSE ORDER
|
||||
; IDE_REG_LBA3 HAS ALREADY BEEN SET
|
||||
; HSTLBA2-0 --> IDE_REG_LBA2-0
|
||||
@@ -1275,13 +1275,13 @@ IDE_GET16:
|
||||
RET
|
||||
;
|
||||
IDE_GET16A:
|
||||
#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED
|
||||
#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED
|
||||
LD C,E ; PORT FOR MSB
|
||||
INI ; GET IT, SAVE IT, AND DEC B
|
||||
LD C,D ; PORT FOR LSB
|
||||
LD C,D ; PORT FOR LSB
|
||||
INI ; GET IT, SAVE IT, AND DEC B
|
||||
#ELSE
|
||||
LD C,D ; PORT FOR LSB
|
||||
LD C,D ; PORT FOR LSB
|
||||
INI ; GET IT, SAVE IT, AND DEC B
|
||||
LD C,E ; PORT FOR MSB
|
||||
INI ; GET IT, SAVE IT, AND DEC B
|
||||
@@ -1347,7 +1347,7 @@ IDE_PUT16:
|
||||
RET
|
||||
;
|
||||
IDE_PUT16A:
|
||||
#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED
|
||||
#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED
|
||||
LD C,E ; PORT FOR MSB
|
||||
OUTI ; PUT IT AND DEC B
|
||||
LD C,D ; PORT FOR LSB
|
||||
@@ -2026,17 +2026,16 @@ IDE_OUT:
|
||||
EX (SP),HL ; GET PARM POINTER
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
|
||||
;
|
||||
#IF (IDE0MODE == IDEMODE_GIDE) ; SET TOP BYTE TO 0 FOR GENESIS BOARD
|
||||
|
||||
LD A,(HL)
|
||||
LD C,(IY+IDE_DATAHI)
|
||||
ADD A,C
|
||||
LD C,A
|
||||
LD A,0
|
||||
OUT (C),A
|
||||
|
||||
#ENDIF
|
||||
;
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD C,(IY+IDE_IOBASE)
|
||||
@@ -2047,7 +2046,6 @@ IDE_OUT:
|
||||
POP BC
|
||||
EX (SP),HL ; RESTORE STACK
|
||||
RET
|
||||
|
||||
;
|
||||
;=============================================================================
|
||||
; ERROR HANDLING AND DIAGNOSTICS
|
||||
@@ -2237,7 +2235,7 @@ IDE_STR_MODE_DIO .TEXT "DIO$"
|
||||
IDE_STR_MODE_DIDE .TEXT "DIDE$"
|
||||
IDE_STR_MODE_MK4 .TEXT "MK4$"
|
||||
IDE_STR_MODE_RC .TEXT "RC$"
|
||||
IDE_STR_MODE_GIDE .TEXT "GIDE$"
|
||||
IDE_STR_MODE_GIDE .TEXT "GIDE$"
|
||||
;
|
||||
IDE_STR_TYPEATA .TEXT " ATA$"
|
||||
IDE_STR_TYPEATAPI .TEXT " ATAPI$"
|
||||
|
||||
@@ -235,25 +235,25 @@ SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS)
|
||||
SD_OPRREG .EQU RTCIO ; USES RTC LATCHES FOR OPERATION
|
||||
SD_OPRDEF .EQU %00001100 ; QUIESCENT STATE (/CS1 & /CS2 DEASSERTED)
|
||||
SD_OPRMSK .EQU %00001100 ; MASK FOR BITS WE OWN IN RTC LATCH PORT
|
||||
SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD
|
||||
SD_CS1 .EQU %00001000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD
|
||||
SD_CNTR .EQU Z180_CNTR
|
||||
SD_TRDR .EQU Z180_TRDR
|
||||
SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD
|
||||
SD_CS1 .EQU %00001000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD
|
||||
SD_CNTR .EQU Z180_CNTR
|
||||
SD_TRDR .EQU Z180_TRDR
|
||||
SD_IOBASE .EQU SD_OPRREG ; IOBASE
|
||||
SD_INVCS .EQU TRUE ; INVERT CS
|
||||
DEVECHO "SC"
|
||||
RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SDMODE == SDMODE_GM) ; GM
|
||||
#IF (SDMODE == SDMODE_GM) ; GM
|
||||
SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS)
|
||||
SD_OPRREG .EQU RTCIO ; USES RTC LATCHES FOR OPERATION
|
||||
SD_OPRDEF .EQU %00000100 ; QUIESCENT STATE (/CS1 & /CS2 DEASSERTED)
|
||||
SD_OPRMSK .EQU %00000100 ; MASK FOR BITS WE OWN IN RTC LATCH PORT
|
||||
SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD
|
||||
SD_CS1 .EQU %00000000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD
|
||||
SD_CNTR .EQU Z180_CNTR
|
||||
SD_TRDR .EQU Z180_TRDR
|
||||
SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD
|
||||
SD_CS1 .EQU %00000000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD
|
||||
SD_CNTR .EQU Z180_CNTR
|
||||
SD_TRDR .EQU Z180_TRDR
|
||||
SD_IOBASE .EQU SD_OPRREG ; IOBASE
|
||||
SD_INVCS .EQU TRUE ; INVERT CS
|
||||
DEVECHO "GM"
|
||||
@@ -622,7 +622,7 @@ SD_INIT:
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
#IF ((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM))
|
||||
#IF ((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM))
|
||||
PRTS(" MODE=SC$")
|
||||
#IF (SDCSIOFAST)
|
||||
PRTS(" FAST$")
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
; 18. HEATH Les Bird's Heath Z80 Board
|
||||
; 19. EPITX Alan Cox' Mini-ITX System
|
||||
; 20. MON Jacques Pelletier's Monsputer
|
||||
; 21. GMZ180 Doug Jacksons' Genesis Z180 System
|
||||
; 21. GMZ180 Doug Jacksons' Genesis Z180 System
|
||||
; 22. NABU NABU w/ Les Bird's RomWBW Option Board
|
||||
; 23. FZ80 S100 Computers FPGA Z80
|
||||
;
|
||||
@@ -194,7 +194,7 @@ IDEMODE_DIO .EQU 1 ; DISKIO V1
|
||||
IDEMODE_DIDE .EQU 2 ; DUAL IDE
|
||||
IDEMODE_MK4 .EQU 3 ; MARK IV ONBOARD IDE (8 BIT ONLY)
|
||||
IDEMODE_RC .EQU 4 ; RCBUS CF MODULE (8 BIT ONLY)
|
||||
IDEMODE_GIDE .EQU 5 ; GENESIS MODULES STD BUS IDE CONTROLLER
|
||||
IDEMODE_GIDE .EQU 5 ; GENESIS MODULES STD BUS IDE CONTROLLER
|
||||
;
|
||||
; PPIDE MODE SELECTIONS
|
||||
;
|
||||
@@ -224,7 +224,7 @@ SDMODE_PIO .EQU 11 ; Z80 PIO bitbang
|
||||
SDMODE_Z80R .EQU 12 ; Z80 Retro
|
||||
SDMODE_EPITX .EQU 13 ; Mini ITX Z180
|
||||
SDMODE_FZ80 .EQU 14 ; S100 FPGA Z80
|
||||
SDMODE_GM .EQU 15 ; Genesis SD Driver
|
||||
SDMODE_GM .EQU 15 ; Genesis SD Driver
|
||||
;
|
||||
; AY SOUND CHIP MODE SELECTIONS
|
||||
;
|
||||
@@ -323,6 +323,7 @@ DMAMODE_VDG .EQU 7 ; VELESOFT DATAGEAR
|
||||
KBDMODE_NONE .EQU 0
|
||||
KBDMODE_PS2 .EQU 1 ; PS/2 KEYBOARD CONTROLLER
|
||||
KBDMODE_VRC .EQU 2 ; VGARC KEYBOARD CONTROLLER
|
||||
KBDMODE_FV .EQU 3 ; FPGA VGA KEYBOARD CONTROLLER
|
||||
;
|
||||
; SERIAL DEVICE CONFIGURATION CONSTANTS
|
||||
;
|
||||
@@ -494,6 +495,7 @@ KBDENABLE .EQU FALSE ; PS/2 KEYBOARD DRIVER
|
||||
PPKENABLE .EQU FALSE ; PPK KEYBOARD DRIVER
|
||||
MKYENABLE .EQU FALSE ; MSX KEYBOARD DRIVER
|
||||
NABUKBENABLE .EQU FALSE ; NABU KEYBOARD DRIVER
|
||||
FVKBDENABLE .EQU FALSE ; FPGA KEYBOARD DRIVER
|
||||
;
|
||||
; VIDEO MODES
|
||||
;
|
||||
|
||||
@@ -1,449 +0,0 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
; IO PORT ADDRESSES
|
||||
;
|
||||
HDSK_IO .EQU $FD
|
||||
;
|
||||
HDSK_CMDNONE .EQU 0
|
||||
HDSK_CMDRESET .EQU 1
|
||||
HDSK_CMDREAD .EQU 2
|
||||
HDSK_CMDWRITE .EQU 3
|
||||
HDSK_CMDPARAM .EQU 4
|
||||
;
|
||||
; HDSK DEVICE CONFIGURATION
|
||||
;
|
||||
HDSK_DEVCNT .EQU 2 ; NUMBER OF HDSK DEVICES SUPPORTED
|
||||
HDSK_CFGSIZ .EQU 6 ; SIZE OF CFG TBL ENTRIES
|
||||
;
|
||||
HDSK_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE)
|
||||
HDSK_STAT .EQU 1 ; OFFSET OF STATUS (BYTE)
|
||||
HDSK_LBA .EQU 2 ; OFFSET OF LBA (DWORD)
|
||||
;
|
||||
DEVECHO "HDSK: IO="
|
||||
DEVECHO HDSK_IO
|
||||
DEVECHO ", DEVICE COUNT="
|
||||
DEVECHO HDSK_DEVCNT
|
||||
DEVECHO "\n"
|
||||
;
|
||||
HDSK_CFGTBL:
|
||||
; DEVICE 0
|
||||
.DB 0 ; DRIVER DEVICE NUMBER
|
||||
.DB 0 ; DEVICE STATUS
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
#IF (HDSK_DEVCNT >= 2)
|
||||
; DEVICE 1
|
||||
.DB 1 ; DEVICE NUMBER
|
||||
.DB 0 ; DEVICE STATUS
|
||||
.DW 0,0 ; CURRENT LBA
|
||||
#ENDIF
|
||||
;
|
||||
#IF ($ - HDSK_CFGTBL) != (HDSK_DEVCNT * HDSK_CFGSIZ)
|
||||
.ECHO "*** INVALID HDSK CONFIG TABLE ***\n"
|
||||
#ENDIF
|
||||
;
|
||||
.DB $FF ; END MARKER
|
||||
;
|
||||
; STATUS
|
||||
;
|
||||
HDSK_STOK .EQU 0 ; OK
|
||||
HDSK_STNOTRDY .EQU -1 ; NOT READY
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_INIT:
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("HDSK:$")
|
||||
PRTS(" DEVICES=$")
|
||||
LD A,HDSK_DEVCNT
|
||||
CALL PRTDECB
|
||||
;
|
||||
; SETUP THE DISPATCH TABLE ENTRIES
|
||||
;
|
||||
XOR A ; ZERO ACCUM
|
||||
LD (HDSK_CURDEV),A ; INIT CURRENT DEVICE NUM
|
||||
LD IY,HDSK_CFGTBL ; START OF DEV CFG TABLE
|
||||
HDSK_INIT0:
|
||||
CALL HDSK_PROBE ; HARDWARE PROBE
|
||||
JR NZ,HDSK_INIT1 ; SKIP DEVICE IF NOT PRESENT
|
||||
LD BC,HDSK_FNTBL ; BC := DRIVER FUNC TABLE ADDRESS
|
||||
PUSH IY ; CFG ENTRY POINTER
|
||||
POP DE ; ... TO DE
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK TABLE
|
||||
CALL HDSK_INITDEV ; PERFORM DEVICE INITIALIZATION
|
||||
HDSK_INIT1:
|
||||
LD BC,HDSK_CFGSIZ ; SIZE OF CFG ENTRY
|
||||
ADD IY,BC ; BUMP IY TO NEXT ENTRY
|
||||
LD HL,HDSK_CURDEV ; POINT TO CURRENT DEVICE
|
||||
INC (HL) ; AND INCREMENT IT
|
||||
LD A,(IY) ; GET FIRST BYTE OF ENTRY
|
||||
INC A ; TEST FOR END OF TABLE ($FF)
|
||||
JR NZ,HDSK_INIT0 ; IF NOT, LOOP
|
||||
;
|
||||
XOR A ; INIT SUCCEEDED
|
||||
RET ; RETURN
|
||||
;
|
||||
; PROBE FOR DEVICE EXISTENCE
|
||||
;
|
||||
HDSK_PROBE:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND DONE
|
||||
;
|
||||
; INITIALIZE DEVICE
|
||||
;
|
||||
HDSK_INITDEV:
|
||||
LD (IY+HDSK_STAT),HDSK_STNOTRDY ; STATUS := NOT READY
|
||||
XOR A ; CLEAR ACCUM
|
||||
LD (IY+HDSK_LBA+0),A ; ZERO LBA
|
||||
LD (IY+HDSK_LBA+1),A ; ...
|
||||
LD (IY+HDSK_LBA+2),A ; ...
|
||||
LD (IY+HDSK_LBA+3),A ; ...
|
||||
XOR A ; SIGNAL SUCCESS (REDUNDANT)
|
||||
RET ; AND DONE
|
||||
;
|
||||
; DRIVER FUNCTION TABLE
|
||||
;
|
||||
HDSK_FNTBL:
|
||||
.DW HDSK_STATUS
|
||||
.DW HDSK_RESET
|
||||
.DW HDSK_SEEK
|
||||
.DW HDSK_READ
|
||||
.DW HDSK_WRITE
|
||||
.DW HDSK_VERIFY
|
||||
.DW HDSK_FORMAT
|
||||
.DW HDSK_DEVICE
|
||||
.DW HDSK_MEDIA
|
||||
.DW HDSK_DEFMED
|
||||
.DW HDSK_CAP
|
||||
.DW HDSK_GEOM
|
||||
#IF (($ - HDSK_FNTBL) != (DIO_FNCNT * 2))
|
||||
.ECHO "*** INVALID HDSK FUNCTION TABLE ***\n"
|
||||
#ENDIF
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_VERIFY:
|
||||
HDSK_FORMAT:
|
||||
HDSK_DEFMED:
|
||||
SYSCHKERR(ERR_NOTIMPL) ; INVALID SUB-FUNCTION
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_STATUS:
|
||||
LD A,(IY+HDSK_STAT) ; LOAD STATUS
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_RESET:
|
||||
JP HDSK_DSKRESET
|
||||
;
|
||||
; GET DISK CAPACITY
|
||||
; RETURN DE:HL=BLOCK COUNT, BC=BLOCK SIZE
|
||||
; ASSUME 1GB MEDIA SIZE, SO 1GB / 512B
|
||||
; IS $200000 SECTORS
|
||||
;
|
||||
HDSK_CAP:
|
||||
LD DE,$20 ; BLOCK COUNT MSW
|
||||
LD HL,0 ; BLOCK COUNT LSW
|
||||
LD BC,512 ; 512 BYTE SECTOR
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_GEOM:
|
||||
; FOR LBA, WE SIMULATE CHS ACCESS USING 16 HEADS AND 16 SECTORS
|
||||
; RETURN HS:CC -> DE:HL, SET HIGH BIT OF D TO INDICATE LBA CAPABLE
|
||||
CALL HDSK_CAP ; GET TOTAL BLOCKS IN DE:HL, BLOCK SIZE TO BC
|
||||
LD L,H ; DIVIDE BY 256 FOR # TRACKS
|
||||
LD H,E ; ... HIGH BYTE DISCARDED, RESULT IN HL
|
||||
LD D,$80 | 16 ; HEADS / CYL = 16, SET LBA BIT
|
||||
LD E,16 ; SECTORS / TRACK = 16
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_DEVICE:
|
||||
LD D,DIODEV_HDSK ; D := DEVICE TYPE
|
||||
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER
|
||||
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
|
||||
LD H,0 ; H := 0, DRIVER HAS NO MODES
|
||||
LD L,HDSK_IO ; L := BASE I/O ADDRESS
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
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 (IY+HDSK_LBA+0),L ; SAVE NEW LBA
|
||||
LD (IY+HDSK_LBA+1),H ; ...
|
||||
LD (IY+HDSK_LBA+2),E ; ...
|
||||
LD (IY+HDSK_LBA+3),D ; ...
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_READ:
|
||||
CALL HB_DSKREAD ; HOOK HBIOS DISK READ SUPERVISOR
|
||||
LD A,HDSK_CMDREAD
|
||||
JR HDSK_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_WRITE:
|
||||
CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR
|
||||
LD A,HDSK_CMDWRITE
|
||||
JR HDSK_RW
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_RW:
|
||||
LD (HDSK_CMD),A ; SET COMMAND BYTE
|
||||
LD (HDSK_DMA),HL ; SAVE INITIAL DMA
|
||||
LD A,E ; SECTOR COUNT TO A
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0
|
||||
LD B,A ; INIT SECTOR DOWNCOUNTER
|
||||
LD C,0 ; INIT SECTOR READ/WRITE COUNT
|
||||
LD A,(IY+HDSK_DEV) ; GET DEVICE NUMBER
|
||||
LD (HDSK_DRV),A ; ... AND SET FIELD IN HDSK PARM BLOCK
|
||||
|
||||
; RESET HDSK INTERFACE IF NEEDED
|
||||
LD A,(IY+HDSK_STAT) ; GET CURRENT STATUS
|
||||
OR A ; SET FLAGS
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
CALL NZ,HDSK_DSKRESET ; RESET IF NOT READY
|
||||
POP BC ; RESTORE COUNTERS
|
||||
JR NZ,HDSK_RW6 ; ABORT ON FAILURE
|
||||
|
||||
HDSK_RW0:
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
XOR A ; A = 0
|
||||
LD (HDSK_RC),A ; CLEAR RETURN CODE
|
||||
;
|
||||
#IF (DSKYENABLE)
|
||||
#IF (DSKYDSKACT)
|
||||
LD A,HDSK_LBA
|
||||
CALL LDHLIYA
|
||||
CALL HB_DSKACT ; SHOW ACTIVITY
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
; CONVERT LBA HHHH:LLLL (4 BYTES)
|
||||
; TO HDSK TRACK/SECTOR TTTT:SS (3 BYTES)
|
||||
; SAVING TO HDSK PARM BLOCK
|
||||
; (IY+HDSK_LBA+0) ==> (HDSK_SEC)
|
||||
LD A,(IY+HDSK_LBA+0)
|
||||
LD (HDSK_SEC),A
|
||||
; (IY+HDSK_LBA+1) ==> (HDSK_TRK+0)
|
||||
LD A,(IY+HDSK_LBA+1)
|
||||
LD (HDSK_TRK+0),A
|
||||
; (IY+HDSK_LBA+2) ==> (HDSK_TRK+1)
|
||||
LD A,(IY+HDSK_LBA+2)
|
||||
LD (HDSK_TRK+1),A
|
||||
|
||||
; EXECUTE COMMAND
|
||||
LD B,7 ; SIZE OF PARAMETER BLOCK
|
||||
LD HL,HDSK_PARMBLK ; ADDRESS OF PARAMETER BLOCK
|
||||
LD C,$FD ; HDSK CMD PORT
|
||||
OTIR ; SEND IT
|
||||
|
||||
; GET RESULT
|
||||
IN A,(C) ; GET RESULT CODE
|
||||
LD (HDSK_RC),A ; SAVE IT
|
||||
OR A ; SET FLAGS
|
||||
|
||||
#IF (HDSKTRACE > 0)
|
||||
PUSH AF ; SAVE RETURN CODE
|
||||
#IF (HDSKTRACE == 1)
|
||||
CALL NZ,HDSK_PRT ; DIAGNOSE ERRORS ONLY
|
||||
#ENDIF
|
||||
#IF (HDSKTRACE >= 2)
|
||||
CALL HDSK_PRT ; DISPLAY ALL READ/WRITE RESULTS
|
||||
#ENDIF
|
||||
POP AF ; RESTORE RETURN CODE
|
||||
#ENDIF
|
||||
|
||||
JR NZ,HDSK_RW5 ; BAIL OUT ON ERROR
|
||||
|
||||
; INCREMENT LBA
|
||||
LD A,HDSK_LBA ; LBA OFFSET IN CFG ENTRY
|
||||
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
|
||||
CALL INC32HL ; INCREMENT THE VALUE
|
||||
|
||||
; INCREMENT DMA
|
||||
LD HL,HDSK_DMA+1 ; POINT TO MSB OF DMA
|
||||
INC (HL) ; BUMP DMA BY
|
||||
INC (HL) ; ... 512 BYTES
|
||||
|
||||
XOR A ; A := 0 SIGNALS SUCCESS
|
||||
|
||||
HDSK_RW5:
|
||||
POP BC ; RECOVER COUNTERS
|
||||
JR NZ,HDSK_RW6 ; IF ERROR, GET OUT
|
||||
|
||||
INC C ; RECORD SECTOR COMPLETED
|
||||
DJNZ HDSK_RW0 ; LOOP AS NEEDED
|
||||
|
||||
HDSK_RW6:
|
||||
; RETURN WITH SECTORS READ IN E AND UPDATED DMA ADDRESS IN HL
|
||||
LD E,C ; SECTOR READ COUNT TO E
|
||||
LD HL,(HDSK_DMA) ; CURRENT DMA TO HL
|
||||
OR A ; SET FLAGS BASED ON RETURN CODE
|
||||
RET Z ; RETURN IF SUCCESS
|
||||
LD A,ERR_IO ; SIGNAL IO ERROR
|
||||
OR A ; SET FLAGS
|
||||
RET ; AND DONE
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_DSKRESET:
|
||||
;
|
||||
#IF (HDSKTRACE >= 2)
|
||||
CALL NEWLINE
|
||||
LD DE,HDSKSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_RESET
|
||||
CALL WRITESTR
|
||||
#ENDIF
|
||||
;
|
||||
LD B,32
|
||||
LD A,HDSK_CMDRESET
|
||||
HDSK_DSKRESET1:
|
||||
OUT ($FD),A
|
||||
DJNZ HDSK_DSKRESET1
|
||||
|
||||
XOR A ; STATUS = OK
|
||||
LD (IY+HDSK_STAT),A ; SAVE IT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSK_PRT:
|
||||
CALL NEWLINE
|
||||
|
||||
LD DE,HDSKSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_CMD
|
||||
CALL WRITESTR
|
||||
LD A,(HDSK_CMD)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(HDSK_CMD)
|
||||
LD DE,HDSKSTR_NONE
|
||||
CP HDSK_CMDNONE
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_RESET
|
||||
CP HDSK_CMDRESET
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_READ
|
||||
CP HDSK_CMDREAD
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_WRITE
|
||||
CP HDSK_CMDWRITE
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_PARAM
|
||||
CP HDSK_CMDPARAM
|
||||
JP Z,HDSK_PRTCMD
|
||||
LD DE,HDSKSTR_UNKCMD
|
||||
HDSK_PRTCMD:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
LD A,(HDSK_CMD)
|
||||
CP HDSK_CMDREAD
|
||||
JR Z,HDSK_PRTRW
|
||||
CP HDSK_CMDWRITE
|
||||
JR Z,HDSK_PRTRW
|
||||
RET
|
||||
|
||||
HDSK_PRTRW:
|
||||
CALL PC_SPACE
|
||||
LD A,(HDSK_DRV)
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
LD BC,(HDSK_TRK)
|
||||
CALL PRTHEXWORD
|
||||
CALL PC_SPACE
|
||||
LD A,(HDSK_SEC)
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_SPACE
|
||||
LD BC,(HDSK_DMA)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_ARROW
|
||||
CALL WRITESTR
|
||||
|
||||
CALL PC_SPACE
|
||||
LD DE,HDSKSTR_RC
|
||||
CALL WRITESTR
|
||||
LD A,(HDSK_RC)
|
||||
CALL PRTHEXBYTE
|
||||
|
||||
CALL PC_SPACE
|
||||
CALL PC_LBKT
|
||||
LD A,(HDSK_RC)
|
||||
LD DE,HDSKSTR_STOK
|
||||
CP HDSK_STOK
|
||||
JP Z,HDSK_PRTRC
|
||||
LD DE,HDSKSTR_STUNK
|
||||
|
||||
HDSK_PRTRC:
|
||||
CALL WRITESTR
|
||||
CALL PC_RBKT
|
||||
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
HDSKSTR_PREFIX .TEXT "HDSK:$"
|
||||
HDSKSTR_CMD .TEXT "CMD=$"
|
||||
HDSKSTR_RC .TEXT "RC=$"
|
||||
HDSKSTR_ARROW .TEXT "-->$"
|
||||
HDSKSTR_NONE .TEXT "NONE$"
|
||||
HDSKSTR_RESET .TEXT "RESET$"
|
||||
HDSKSTR_READ .TEXT "READ$"
|
||||
HDSKSTR_WRITE .TEXT "WRITE$"
|
||||
HDSKSTR_PARAM .TEXT "PARAM$"
|
||||
HDSKSTR_UNKCMD .TEXT "UNKCMD$"
|
||||
HDSKSTR_STOK .TEXT "OK$"
|
||||
HDSKSTR_STUNK .TEXT "UNKNOWN ERROR$"
|
||||
;
|
||||
;==================================================================================================
|
||||
; HDSK DISK DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
HDSK_RC .DB 0 ; CURRENT RETURN CODE
|
||||
HDSK_CURDEV .DB 0 ; CURRENT DEVICE NUMBER
|
||||
;
|
||||
HDSK_PARMBLK:
|
||||
HDSK_CMD .DB 0 ; COMMAND (HDSK_READ, HDSK_WRITE, ...)
|
||||
HDSK_DRV .DB 0 ; 0..7, HDSK DRIVE NUMBER
|
||||
HDSK_SEC .DB 0 ; 0..255 SECTOR
|
||||
HDSK_TRK .DW 0 ; 0..2047 TRACK
|
||||
HDSK_DMA .DW 0 ; ADDRESS FOR SECTOR DATA EXCHANGE
|
||||
@@ -2,7 +2,7 @@
|
||||
#DEFINE RMN 5
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.5.0-dev.74"
|
||||
#DEFINE BIOSVER "3.5.0-dev.75"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 5
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.5.0-dev.74"
|
||||
db "3.5.0-dev.75"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user