From 5dc724785b6287909a22bc1309b8278e861cf873 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 19 Nov 2023 14:48:41 -0800 Subject: [PATCH] Completed CH37x Driver The ch.asm driver now supports SD Card operations (only possible for CH376). --- Source/HBIOS/ch.asm | 387 +++++++++++++++++++------------------------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 3 files changed, 166 insertions(+), 225 deletions(-) diff --git a/Source/HBIOS/ch.asm b/Source/HBIOS/ch.asm index 46ee3bbf..68c8fe87 100644 --- a/Source/HBIOS/ch.asm +++ b/Source/HBIOS/ch.asm @@ -1,5 +1,4 @@ ; -; ;================================================================================================== ; CH375/376 USB/SD DRIVER ;================================================================================================== @@ -19,7 +18,7 @@ ; added to the RESET routine when using CH376. ; ; TODO: -; - Implement auto-recovery on error status. +; - Implement auto-recovery on error status? ; - !!! Move CH_MODE to config variable !!! ; ; PORT OFFSETS FROM BASE PORT @@ -47,6 +46,7 @@ CH_CMD_EXIST .EQU $06 ; CHECK EXISTS CH_CMD_MAXLUN .EQU $0A ; GET MAX LUN NUMBER CH_CMD_PKTSEC .EQU $0B ; SET PACKETS PER SECTOR CH_CMD_SETRETRY .EQU $0B ; SET RETRIES +CH_CMD_FILESIZE .EQU $0C ; GET FILE SIZE (376) CH_CMD_MODE .EQU $15 ; SET USB MODE CH_CMD_TSTCON .EQU $16 ; TEST CONNECT CH_CMD_ABRTNAK .EQU $17 ; ABORT DEVICE NAK RETRIES @@ -55,6 +55,7 @@ CH_CMD_RD6 .EQU $27 ; READ USB DATA (375 & 376) CH_CMD_RD5 .EQU $28 ; READ USB DATA (375) CH_CMD_WR5 .EQU $2B ; WRITE USB DATA (375) CH_CMD_WR6 .EQU $2C ; WRITE USB DATA (376) +CH_CMD_WRREQDAT .EQU $2D ; WRITE REQUESTED DATA (376) CH_CMD_SET_FN .EQU $2F ; SET FILENAME (376) CH_CMD_DSKMNT .EQU $31 ; DISK MOUNT CH_CMD_FOPEN .EQU $32 ; FILE OPEN (376) @@ -143,6 +144,8 @@ CH_INIT2: LD A,(IY+CH_IOBASE) ; GET IO BASE ADDRES CALL PRTHEXBYTE ; DISPLAY IT ; + XOR A ; UNKNOWN MODE + LD (CH_MODE),A ; SAVE IT ;CALL CH_FLUSH ; FLUSH DEVICE OUTPUT QUEUE CALL CH_RESET ; FULL CH37X RESET CALL CH_DETECT ; DETECT CHIP PRESENCE @@ -363,46 +366,45 @@ CH_GETVER: ; ; SET MODE TO VALUE IN A ; AVOID CHANGING MODES IF CURRENT MODE = NEW MODE +; THE CH376 DOES NOT SEEM TO MAINTAIN SEPARATE OPERATING CONTEXTS FOR +; THE USB AND SD DEVICES. IF BOTH ARE IN OPERATION, THEN A MODE +; SWITCH REQUIRES A COMPLETE REINITIALIZATION OF THE REQUESTED +; DEVICE. ; CH_SETMODE: - PUSH BC - PUSH DE - PUSH HL - + PUSH BC ; SAVE BC + PUSH DE ; SAVE DE + PUSH HL ; SAVE HL ;PRTS("\r\nSETMODE:$") ; *DEBUG* - - LD L,A ; SAVE REQUESTED MODE LD A,(CH_MODE) ; GET CURRENT MODE - ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* - CP L ; COMPARE JR Z,CH_SETMODE_Z ; IF EQUAL, DONE ; ; NEED TO CHANGE MODES LD A,L ; GET REQUESTED MODE - CP CH_MODE_USB - JR Z,CH_SETMODE_USB - CP CH_MODE_SD - JR Z,CH_SETMODE_SD + CP CH_MODE_USB ; USB? + JR Z,CH_SETMODE_USB ; IF SO, DO IT + CP CH_MODE_SD ; SD? + JR Z,CH_SETMODE_SD ; IF SO, DO IT OR $FF ; SIGNAL ERROR JR CH_SETMODE_Z ; BAIL OUT ; CH_SETMODE_USB: - CALL CHUSB_RESET - JR CH_SETMODE_Z + CALL CHUSB_RESET ; FULL USB STACK RESET + JR CH_SETMODE_Z ; MOVE ON ; CH_SETMODE_SD: - CALL CHSD_RESET - JR CH_SETMODE_Z + CALL CHSD_RESET ; FULL SD STACK RESET + JR CH_SETMODE_Z ; MOVE ON ; CH_SETMODE_Z: - POP HL - POP DE - POP BC - RET + POP HL ; RECOVER HL + POP DE ; RECOVER DE + POP BC ; RECOVER BC + RET ; DONE ; ; ; @@ -742,29 +744,28 @@ CHUSB_RESET1: ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* CP $14 ; SUCCESS? - JR Z,CHUSB_RESET2 ; IF SO, CONTINUE - ;JR Z,CHUSB_RESET1A ; IF SO, CHECK READY + JR Z,CHUSB_RESET1A ; IF SO, CHECK READY CP $16 ; NO MEDIA JP Z,CHUSB_NOMEDIA ; HANDLE IT CALL CH_NAP ; SMALL DELAY DJNZ CHUSB_RESET1 ; LOOP AS NEEDED JP CHUSB_TO ; HANDLE TIMEOUT -;;;; -;;;CHUSB_RESET1A: -;;; CALL CHUSB_DSKRES ; DISK RESET -;;; CP $14 ; GOOD? -;;; JR Z,CHUSB_RESET2 -;;; CALL CHUSB_DSKRDY ; CHECK IF DISK READY -;;; CP $14 ; GOOD? -;;; JR Z,CHUSB_RESET2 ; IF SO, MOVE ON -;;; DJNZ CHUSB_RESET1 ; KEEP TRYING +; +CHUSB_RESET1A: + ;CALL CHUSB_DSKRES ; DISK RESET + ;CP $14 ; GOOD? + ;JR Z,CHUSB_RESET2 + ;CALL CHUSB_DSKRDY ; CHECK IF DISK READY + ;CP $14 ; GOOD? + ;JR Z,CHUSB_RESET2 ; IF SO, MOVE ON + ;DJNZ CHUSB_RESET1 ; KEEP TRYING ; CHUSB_RESET2: ; USE OF CH376 DISK_MOUNT COMMAND SEEMS TO IMPROVE ; COMPATIBILITY WITH SOME OLDER USB THUMBDRIVES. LD A,(IY+CH_TYPE) ; CH37X TYPE? CP CHTYP_376 ; IS CH376? - CALL Z,CHUSB_DSKMNT ; IF SO, ISSUE MOUNT + CALL Z,CHUSB_DSKMNT ; IF SO, TRY MOUNT, IGNORE ERRS ;CALL CHUSB_AUTOSET ; *DEBUG* ;CALL CHUSB_TSTCON ; *DEBUG* ;CALL CHUSB_MAXLUN ; *DEBUG* @@ -862,28 +863,34 @@ CHUSB_DSKMNT: ;CALL PRTHEXBYTE ; *DEBUG* CP $14 ; SUCCESS? RET NZ ; ABORT IF NOT +; +#IF FALSE CALL CH_CMD_RD ; SEND READ COMMAND CALL CH_RD ; GET LENGTH + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEXBYTE ; *DEBUG* LD B,A ; LOOP COUNTER LD HL,HB_WRKBUF ; USE WORK BUFFER FOR DATA -DSKMNT1: +CHUSB_DSKMNT1: CALL CH_RD ; GET A BYTE LD (HL),A ; SAVE IT INC HL ; BUMP BUF PTR - DJNZ DSKMNT1 ; LOOP FOR ALL DATA + DJNZ CHUSB_DSKMNT1 ; LOOP FOR ALL DATA ; ;LD DE,HB_WRKBUF ; *DEBUG* ;CALL DUMP_BUFFER ; *DEBUG* ; - ;CALL CHUSB_PRTPREFIX ; PRINT DEVICE PREFIX - ;LD HL,HB_WRKBUF + 8 - ;LD B,28 -DSKMNT2: - ;LD A,(HL) - ;INC HL - ;CALL COUT - ;DJNZ DSKMNT2 + CALL CHUSB_PRTPREFIX ; PRINT DEVICE PREFIX + LD HL,HB_WRKBUF + 8 + LD B,28 +CHUSB_DSKMNT2: + LD A,(HL) + INC HL + CALL COUT + DJNZ CHUSB_DSKMNT2 +#ENDIF ; + XOR A RET ; ; PERFORM DISK SIZE @@ -1161,6 +1168,8 @@ CHUSB_STR_STUNK .TEXT "UNKNOWN ERROR$" ; CH375/376 SD CARD SUB-DRIVER ;================================================================================================== ; +#DEFINE CHSD_IMGFILE "DISK.IMG" +; CHSD_FASTIO .EQU TRUE ; USE INIR/OTIR? ; ; CHUSB DEVICE STATUS @@ -1315,9 +1324,9 @@ CHSD_READ1: CALL CH_RD ; GET DATA LENGTH ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* - +; #IF (CHSD_FASTIO) - LD B,A + LD B,A ; BYTE COUNT TO READ LD C,(IY+CH_IOBASE) ; BASE PORT INIR ; DO IT FAST #ELSE @@ -1357,54 +1366,55 @@ CHSD_WRITE: CALL CH_SETMODE ; DO IT JP NZ,CHSD_CMDERR ; HANDLE ERROR ; - JP CHSD_IOERR - CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR LD (CHSD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,CH_CMD_DSKWR ; DISK READ COMMAND - CALL CHSD_RWSTART ; SEND CMD AND LBA + CALL CHSD_RWSTART ; SET LBA OFFSET' + RET NZ ; - ; WRITE THE SECTOR IN 64 BYTE CHUNKS - LD B,8 ; 8 CHUNKS OF 64 FOR 512 BYTE SECTOR - LD HL,(CHSD_DSKBUF) ; GET DISK BUF ADR + ;PRTS("\n\rWRITE:$") ; *DEBUG* + LD A,CH_CMD_BYTEWR ; BYTE WRITE + CALL CH_CMD ; SEND COMMAND + LD A,0 ; LSB + CALL CH_WR ; SEND IT + LD A,2 ; MSB + CALL CH_WR ; SEND IT + CALL CH_POLL ; GET RESULT + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEXBYTE ; *DEBUG* + CP $1E ; DATA READY TO GO? + JP NZ,CHSD_IOERR ; HANDLE I/O ERROR +; + LD HL,(CHSD_DSKBUF) CHSD_WRITE1: - CALL CH_POLL ; WAIT FOR DATA READY - CP $1E ; DATA READY TO WRITE - ;CALL PC_GT ; *DEBUG* + LD A,CH_CMD_WRREQDAT ; WRITE REQUESTED DATA CMD + CALL CH_CMD ; SEND IT + CALL CH_RD ; GET DATA LENGTH + ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* - JP NZ,CHSD_IOERR ; HANDLE IO ERROR - CALL CH_CMD_WR ; SEND WRITE USB DATA CMD - LD A,64 ; 64 BYTE CHUNK - CALL CH_WR ; SEND DATA BLOCK LENGTH ; #IF (CHSD_FASTIO) - ; WRITE 64 BYTE CHUNK - PUSH BC ; SAVE LOOP CONTROL - LD B,64 ; WRITE 64 BYTES + LD B,A ; BYTE COUNT TO WRITE LD C,(IY+CH_IOBASE) ; BASE PORT OTIR ; DO IT FAST - POP BC ; RESTORE LOOP CONTROL #ELSE - ; BYTE WRITE LOOP - PUSH BC ; SAVE LOOP CONTROL - LD B,64 ; WRITE 64 BYTES + LD B,A ; SAVE IT CHSD_WRITE2: - LD A,(HL) ; GET NEXT BYTE + CALL CH_WR ; WRITE DATA BYTE + LD (HL),A ; SAVE IN BUFFER INC HL ; INC BUF PTR - CALL CH_WR ; WRITE NEXT BYTE - DJNZ CHSD_WRITE2 ; LOOP AS NEEDED - POP BC ; RESTORE LOOP CONTROL + DJNZ CHSD_WRITE2 ; LOOP TILL DONE W/ ALL BYTES #ENDIF ; - ; PREPARE FOR NEXT CHUNK - LD A,CH_CMD_DSKWRGO ; CONTINUE DISK READ + LD A,CH_CMD_BYTEWRGO ; BYTE WRITE GO COMMAND CALL CH_CMD ; SEND IT - DJNZ CHSD_WRITE1 ; LOOP TILL DONE -; - ; FINAL CHECK FOR COMPLETION & SUCCESS - CALL CH_POLL ; WAIT FOR COMPLETION - CP $14 ; SUCCESS? - JP NZ,CHSD_IOERR ; IF NOT, HANDLE ERROR + CALL CH_NAP + CALL CH_POLL ; GET RESULT + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEXBYTE ; *DEBUG* + CP $1E ; MORE? + JR Z,CHSD_WRITE1 ; IF SO, SEND MORE + CP $14 ; GOOD FINISH? + JP NZ,CHSD_IOERR ; HANDLE ERROR ; ; INCREMENT LBA PUSH HL ; SAVE HL @@ -1469,30 +1479,6 @@ CHSD_STATUS: ; CHSD_RESET: ;PRTS("\n\rRES SD:$") ; *DEBUG* - ;CALL CH_FLUSH ; DISCARD ANY GARBAGE - ;CALL CH_RESET ; FULL CH37X RESET -;;;; -;;; ; RESET THE BUS -;;; LD A,CH_CMD_MODE ; SET MODE COMMAND -;;; CALL CH_CMD ; SEND IT -;;; LD A,7 ; RESET BUS -;;; CALL CH_WR ; SEND IT -;;; CALL CH_NAP ; SMALL WAIT -;;; CALL CH_RD ; GET RESULT -;;; CALL PC_SPACE ; *DEBUG* -;;; CALL PRTHEXBYTE ; *DEBUG* -;;; CALL CH_NAP ; SMALL WAIT -;;;; -;;; ; ACTIVATE USB MODE -;;; LD A,CH_CMD_MODE ; SET MODE COMMAND -;;; CALL CH_CMD ; SEND IT -;;; LD A,6 ; USB ENABLED, SEND SOF -;;; CALL CH_WR ; SEND IT -;;; CALL CH_NAP ; SMALL WAIT -;;; CALL CH_RD ; GET RESULT -;;; ;CALL PC_SPACE ; *DEBUG* -;;; ;CALL PRTHEXBYTE ; *DEBUG* -;;; CALL CH_NAP ; SMALL WAIT ; ; ACTIVATE SD MODE LD A,CH_CMD_MODE ; SET MODE COMMAND @@ -1507,70 +1493,18 @@ CHSD_RESET: ; LD A,CH_MODE_SD ; WE ARE NOW IN SD MODE LD (CH_MODE),A ; SAVE IT -;;;; -;;; ; INITIALIZE DISK -;;; LD B,24 ; TRY A FEW TIMES -;;;CHSD_RESET1: -;;; PRTS("\n\rDSKINIT:$") ; *DEBUG* -;;; LD A,CH_CMD_DSKINIT ; DISK INIT COMMAND -;;; CALL CH_CMD ; SEND IT -;;; LD DE,10000 ; 10000 * 16 = 160US ??? -;;; LD DE,20000 ; 10000 * 16 = 160US ??? -;;; LD DE,12500 ; 1250 * 16 = 200US ??? -;;; CALL VDELAY ; DELAY -;;; CALL CH_POLL ; WAIT FOR RESULT -;;; CALL PC_SPACE ; *DEBUG* -;;; CALL PRTHEXBYTE ; *DEBUG* -;;; CP $14 ; SUCCESS? -;;; JR Z,CHSD_RESET2 ; IF SO, CONTINUE -;;; ;JR Z,CHSD_RESET1A ; IF SO, CHECK READY -;;; CP $16 ; NO MEDIA -;;; JP Z,CHSD_NOMEDIA ; HANDLE IT -;;; CALL CH_NAP ; SMALL DELAY -;;; DJNZ CHSD_RESET1 ; LOOP AS NEEDED -;;; JP CHSD_TO ; HANDLE TIMEOUT -;;;;;;; -;;;;;;CHSD_RESET1A: -;;;;;; CALL CHSD_DSKRES ; DISK RESET -;;;;;; CP $14 ; GOOD? -;;;;;; JR Z,CHSD_RESET2 -;;;;;; CALL CHSD_DSKRDY ; CHECK IF DISK READY -;;;;;; CP $14 ; GOOD? -;;;;;; JR Z,CHSD_RESET2 ; IF SO, MOVE ON -;;;;;; DJNZ CHSD_RESET1 ; KEEP TRYING -; -CHSD_RESET2: +; CALL CHSD_DSKMNT ; MOUNT DISK RET NZ -; - ;CALL CHSD_AUTOSET ; *DEBUG* - ;CALL CHSD_TSTCON ; *DEBUG* - ;CALL CHSD_MAXLUN ; *DEBUG* - ;CALL CHSD_DSKRDY ; *DEBUG* - ;CALL CHSD_DSKINQ ; *DEBUG* -;; - CALL CHSD_DSKCAP ; GET AND RECORD DISK CAPACITY - RET NZ ; ABORT ON ERROR ; ; OPEN DISK IMAGE FILE LD DE,CHSD_FNAME CALL CHSD_FOPEN RET NZ -;;;; -;;; ; *DEBUG* -;;; LD HL,HB_WRKBUF -;;; LD E,1 -;;; CALL CHSD_READ -;;;; -;;;; -;;; LD DE,HB_WRKBUF ; *DEBUG* -;;; CALL DUMP_BUFFER ; *DEBUG* - - - - - - +; + ; GET FILESIZE + CALL CHSD_FILESIZE + RET NZ ; ; SET STATUS AND RETURN XOR A ; CLEAR STATUS @@ -1658,72 +1592,39 @@ CHSD_DSKMNT: CALL CH_POLL ; WAIT FOR RESPONSE ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* + CP $82 ; NO DISK? + JP Z,CHSD_NOMEDIA ; HANDLE NO MEDIA ERROR CP $14 ; SUCCESS? JP NZ,CHSD_CMDERR ; HANDLE ERROR ; -; CALL CH_CMD_RD ; SEND READ COMMAND -; CALL CH_RD ; GET LENGTH -; ;CALL PC_SPACE ; *DEBUG* -; ;CALL PRTHEXBYTE ; *DEBUG* -; LD B,A ; LOOP COUNTER -; LD HL,HB_WRKBUF ; USE WORK BUFFER FOR DATA -;CHSD_DSKMNT1: -; CALL CH_RD ; GET A BYTE -; CALL PC_SPACE -; CALL PRTHEXBYTE -; LD (HL),A ; SAVE IT -; INC HL ; BUMP BUF PTR -; DJNZ CHSD_DSKMNT1 ; LOOP FOR ALL DATA -;; -; ;LD DE,HB_WRKBUF ; *DEBUG* -; ;CALL DUMP_BUFFER ; *DEBUG* -;; -; CALL CHSD_PRTPREFIX ; PRINT DEVICE PREFIX -; PRTS(" \"$") -; LD HL,HB_WRKBUF + 8 -; LD B,28 -;CHSD_DSKMNT2: -; LD A,(HL) -; INC HL -; CALL COUT -; DJNZ CHSD_DSKMNT2 -; PRTS("\"$") +#IF FALSE + CALL CH_CMD_RD ; SEND READ COMMAND + CALL CH_RD ; GET LENGTH + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEXBYTE ; *DEBUG* + LD B,A ; LOOP COUNTER + LD HL,HB_WRKBUF ; USE WORK BUFFER FOR DATA +CHSD_DSKMNT1: + CALL CH_RD ; GET A BYTE + LD (HL),A ; SAVE IT + INC HL ; BUMP BUF PTR + DJNZ CHSD_DSKMNT1 ; LOOP FOR ALL DATA ; - XOR A - RET + ;LD DE,HB_WRKBUF ; *DEBUG* + ;CALL DUMP_BUFFER ; *DEBUG* ; -; PERFORM DISK CAPACITY + CALL CHSD_PRTPREFIX ; PRINT DEVICE PREFIX + LD HL,HB_WRKBUF + 8 + LD B,28 +CHSD_DSKMNT2: + LD A,(HL) + INC HL + CALL COUT + DJNZ CHSD_DSKMNT2 +#ENDIF ; -CHSD_DSKCAP: - ;PRTS("\n\rDSKCAP:$") ; *DEBUG* - LD A,CH_CMD_DSKCAP ; DISK CAPACITY COMMAND - CALL CH_CMD ; SEND IT - CALL CH_POLL ; WAIT FOR RESULT - ;CALL PC_SPACE ; *DEBUG* - ;CALL PRTHEXBYTE ; *DEBUG* - CP $14 ; SUCCESS? - JP NZ,CHSD_CMDERR ; HANDLE CMD ERROR - CALL CH_CMD_RD ; SEND READ USB DATA CMD - CALL CH_RD ; GET RD DATA LEN - ;CALL PC_SPACE ; *DEBUG* - ;CALL PRTHEXBYTE ; *DEBUG* - CP $04 ; MAKE SURE IT IS 8 - JP NZ,CHSD_CMDERR ; HANDLE CMD ERROR - LD A,CHSD_MEDCAP ; MEDIA CAPACITY OFFSET - CALL LDHLIYA ; HL := IY + A, REG A TRASHED - PUSH HL ; SAVE ADDRESS - CALL CH_RD - LD L,A - CALL CH_RD - LD H,A - CALL CH_RD - LD E,A - CALL CH_RD - LD D,A - POP BC ; RECOVER ADDRESS TO BC - CALL ST32 ; STORE IT - XOR A ; SIGNAL SUCCESS - RET ; AND DONE + XOR A + RET ; ; SET FILE NAME ; @@ -1754,10 +1655,48 @@ CHSD_FOPEN: CALL CH_POLL ; WAIT FOR RESULT ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* + CP $42 ; MISSING FILE? + JP Z,CHSD_NOFILE ; HANDLE ERROR CP $14 ; SUCCESS? - JP NZ,CHSD_NOFILE ; HANDLE ERROR + JP NZ,CHSD_IOERR ; HANDLE ERROR RET ; RETURN WITH ZF SET APPROPRIATELY ; +; GET FILE SIZE +; +CHSD_FILESIZE: + ;PRTS("\n\rFSIZE:$") + LD A,CH_CMD_FILESIZE ; FILE SIZE COMMAND + CALL CH_CMD ; SEND IT + LD A,$68 ; REQUIRED CMD PARAMETER + CALL CH_WR ; SEND IT + CALL CH_NAP + LD A,CHSD_MEDCAP ; MEDIA CAPACITY OFFSET + CALL LDHLIYA ; HL := IY + A, REG A TRASHED + PUSH HL ; SAVE ADDRESS + CALL CH_RD + LD L,A + CALL CH_RD + LD H,A + CALL CH_RD + LD E,A + CALL CH_RD + LD D,A + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEX32 ; *DEBUG* + LD B,9 ; ROTATE 9 BITS FOR DIV 512 +CHSD_FILESIZE1: + SRL D + RR E + RR H + RR L + DJNZ CHSD_FILESIZE1 ; LOOP TILL DONE + POP BC ; RECOVER ADDRESS TO BC + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEX32 ; *DEBUG* + CALL ST32 ; STORE IT + XOR A ; SIGNAL SUCCESS + RET ; AND DONE +; ; ERROR HANDLERS ; ; @@ -1853,7 +1792,7 @@ CHSD_PRTPREFIX: CHSD_DEVNUM .DB 0 ; TEMP DEVICE NUM USED DURING INIT CHSD_DSKBUF .DW 0 ; -CHSD_FNAME .DB "/DISK.IMG",0 +CHSD_FNAME .DB "/", CHSD_IMGFILE, 0 ; CHSD_STR_ST_MAP: .DW CHSD_STR_STOK @@ -1870,5 +1809,7 @@ CHSD_STR_STCMDERR .TEXT "COMMAND ERROR$" CHSD_STR_STIOERR .TEXT "IO ERROR$" CHSD_STR_STTO .TEXT "TIMEOUT$" CHSD_STR_STNOTSUP .TEXT "NOT SUPPORTED$" -CHSD_STR_STNOFILE .TEXT "MISSING DISK IMAGE FILE$" +CHSD_STR_STNOFILE .TEXT "MISSING " + .TEXT CHSD_IMGFILE + .TEXT " FILE$" CHSD_STR_STUNK .TEXT "UNKNOWN ERROR$" diff --git a/Source/ver.inc b/Source/ver.inc index 1388bcdf..5017e3bb 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 4 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.4.0-dev.20" +#DEFINE BIOSVER "3.4.0-dev.21" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 11d4c54a..73600fa8 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 4 rup equ 0 rtp equ 0 biosver macro - db "3.4.0-dev.20" + db "3.4.0-dev.21" endm