From 2fd65ab4b03c28bc09af4a0c6ccee53ab267d752 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 4 Sep 2024 11:25:41 -0700 Subject: [PATCH] Miscellaneous - Cosmetic updates - Fix fv.asm keyboard status function - Bump version number --- Source/HBIOS/Build.cmd | 1 + Source/HBIOS/Build.sh | 2 +- Source/HBIOS/fv.asm | 1 + Source/HBIOS/hbios.inc | 1 + Source/HBIOS/ide.asm | 44 ++-- Source/HBIOS/sd.asm | 20 +- Source/HBIOS/std.asm | 8 +- Source/HDIAG/hdsk.asm | 449 ----------------------------------------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 10 files changed, 42 insertions(+), 488 deletions(-) delete mode 100644 Source/HDIAG/hdsk.asm diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index d04ba589..35162fd4 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -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 diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index cd9c06b2..98c763d4 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -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 diff --git a/Source/HBIOS/fv.asm b/Source/HBIOS/fv.asm index 0c7b6cc5..57041386 100644 --- a/Source/HBIOS/fv.asm +++ b/Source/HBIOS/fv.asm @@ -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 diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index f1a42802..b04d610f 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -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 ; diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 0730636d..5cc77a0d 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -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$" diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 4865ed3f..3873e36e 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -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$") diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 5f68199c..95bc15bf 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -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 ; diff --git a/Source/HDIAG/hdsk.asm b/Source/HDIAG/hdsk.asm deleted file mode 100644 index 6dfc426f..00000000 --- a/Source/HDIAG/hdsk.asm +++ /dev/null @@ -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 diff --git a/Source/ver.inc b/Source/ver.inc index 56ae7445..055305ab 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -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 diff --git a/Source/ver.lib b/Source/ver.lib index f93ece95..d15eaaba 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -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