diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 4f21039c..275b6797 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 2fee8c60..468e8fde 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 39843e0c..f5f33b31 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 0ebfa20f..225e2dda 100644 Binary files a/Doc/RomWBW Getting Started.pdf and b/Doc/RomWBW Getting Started.pdf differ diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index 8db85458..6260d673 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -410,6 +410,28 @@ require double-buffering if the caller’s buffer is in the lower 32K of CPU address space. For optimal performance, such buffers should be placed in the upper 32K of CPU address space. +Error Codes +----------- + +The following error codes are defined generically for all HBIOS functions. +Most function calls will return a result in register A. + +_Code_ | _Meaning_ +------ | --------- +0 | function succeeded +-1 | undefined error +-2 | function not implemented +-3 | invalid function +-4 | invalid unit numberr +-5 | out of memory +-6 | parameter out of range +-7 | media not present +-8 | hardware not present +-9 | I/O error +-10 | write request to read-only media +-11 | device timeout +-12 | invalid configuration + `\clearpage`{=latex} Character Input/Output (CIO) diff --git a/Source/HBIOS/acia.asm b/Source/HBIOS/acia.asm index 4f7f0ee8..4c3c1255 100644 --- a/Source/HBIOS/acia.asm +++ b/Source/HBIOS/acia.asm @@ -165,7 +165,7 @@ ACIA_INIT1: ; ACIA0_INT: ACIA1_INT: - CALL PANIC + CALL PANIC ; NO RETURN ; #ENDIF ; diff --git a/Source/HBIOS/bqrtc.asm b/Source/HBIOS/bqrtc.asm index f1c6a751..274a56f0 100644 --- a/Source/HBIOS/bqrtc.asm +++ b/Source/HBIOS/bqrtc.asm @@ -161,7 +161,10 @@ BQRTC_DISPATCH: JP Z, BQRTC_SETALM ; Set Alarm DEC A JP Z, BQRTC_DEVICE ; Report RTC device info - CALL PANIC + CALL SYSCHK + LD A,ERR_NOFUNC + OR A + RET ; ; NVRAM FUNCTIONS ARE NOT AVAILABLE @@ -170,7 +173,10 @@ BQRTC_GETBYT: BQRTC_SETBYT: BQRTC_GETBLK: BQRTC_SETBLK: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; RTC Get Time ; A: Result (OUT), 0=OK, Z=OK, NZ=Error diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 1ceb847d..0cc31919 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -136,7 +136,10 @@ CVDU_VDADEV: RET CVDU_VDASCS: - CALL PANIC ; NOT IMPLEMENTED (YET) + CALL SYSCHK ; NOT IMPLEMENTED (YET) + LD A,ERR_NOTIMPL + OR A + RET CVDU_VDASCP: CALL CVDU_XY ; SET CURSOR POSITION diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index f0c57b42..24a9f26a 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -1400,7 +1400,7 @@ DISPLAYBUF: .FILL 8,0 #ELSE ; DSKY_ENTRY: - CALL PANIC + CALL PANIC ; NO RETURN ; #ENDIF ; diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index 01d2f171..d7cbb744 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -241,7 +241,10 @@ DSRTC_DISPATCH: JP Z,DSRTC_SETALM ; SET ALARM DEC A JP Z,DSRTC_DEVICE ; REPORT RTC DEVICE INFO - CALL PANIC + CALL SYSCHK + LD A,ERR_NOFUNC + OR A + RET ; ; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR ; @@ -249,7 +252,10 @@ DSRTC_GETBLK: DSRTC_SETBLK: DSRTC_GETALM: DSRTC_SETALM: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; ; RTC GET TIME ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index b35c1e73..98ff1ead 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -483,7 +483,10 @@ FD_FNTBL: FD_VERIFY: FD_FORMAT: FD_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -555,7 +558,8 @@ FD_MEDIARETRY: ;LD (HL),0 ; SET TO NO MEDIA LD (IY+FD_MEDTYP),0 ; SET DRIVE = NO MEDIA LD E,0 - OR $FF ; SIGNAL ERROR + LD A,ERR_NOMEDIA ; SIGNAL ERROR + OR A ; SET FLAGS RET FD_TESTMEDIA: @@ -784,7 +788,7 @@ FD_FDCRESET: LD (FCD_FDCRDY),A ; MARK ALL DRIVES AS NEEDING RECALIBRATION - ; NOTE THAT IF THE VALUE IS CURRENT $FF, + ; NOTE THAT IF THE VALUE IS CURRENTLY $FF, ; WE NEED TO LEAVE IT ALONE, SO WE 'OR' IN THE ; $FE TO AVOID THIS SCENARIO. @@ -972,8 +976,14 @@ FD_RETRY: CALL FC_PRTRESULTS #ENDIF + ; RETURN APPROPRIATE HBIOS ERROR LD A,(FST_RC) - OR A ; OTHERWISE SET FLAGS BASED ON RC (IN A) + CP FRC_NOTWRIT + LD A,ERR_READONLY ; ASSUME WRITE PROTECTED ERROR + JR Z,FD_RETRY1 + LD A,ERR_IO ; OTHERWISE I/O ERROR +FD_RETRY1: + OR A ; SET FLAGS RET ; AND GIVE UP ; ; @@ -1042,7 +1052,10 @@ FD_RUN1: JR Z,FC_WRITE CP DOP_READID JR Z,FC_READID - CALL PANIC + CALL SYSCHK + LD A,ERR_NOFUNC + OR A + RET FD_RUNCHK: #IF (DSKYENABLE) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index ce6bf8dd..a172f71d 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1796,7 +1796,7 @@ HB_DISPATCH: PUSH AF LD A,(HB_STACK - HB_STKSIZ + $08) CP $FF - CALL NZ,PANIC + CALL SYSCHK LD A,$FF LD (HB_STACK - HB_STKSIZ + $08),A POP AF @@ -1813,17 +1813,20 @@ HB_DISPCALL: CP BF_RTC + $10 ; $20-$2F: REAL TIME CLOCK (RTC) JP C,RTC_DISPATCH CP BF_EMU + $10 ; $30-$3F: EMULATION - CALL C,PANIC ; OBSOLETE! + JR C,HB_DISPERR CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER JP C,VDA_DISPATCH - CP BF_SND + $08 ; $50-$58: SOUND DRIVERS JP C,SND_DISPATCH - CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0 - CALL C,PANIC ; PANIC IF LESS THAN BF_SYS + JR C,HB_DISPERR ; ERROR IF LESS THAN BF_SYS JP SYS_DISPATCH ; OTHERWISE SYS CALL - CALL PANIC ; THIS SHOULD NEVER BE REACHED + ; FALL THRU +; +HB_DISPERR: + CALL SYSCHK + LD A,ERR_NOFUNC + OR A RET ; ;================================================================================================== @@ -2185,7 +2188,7 @@ RTC_DISPATCH: RET ; RTC_DISPERR: - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOHW OR A RET @@ -2340,7 +2343,7 @@ SYS_RESET: JR Z,SYS_RESWARM CP BF_SYSRES_COLD JR Z,SYS_RESCOLD - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOFUNC OR A ; SIGNAL ERROR RET @@ -2453,7 +2456,7 @@ SYS_ALLOC: ; ALL OTHER REGISTERS PRESERVED ; SYS_FREE: - ;CALL PANIC ; NOT YET IMPLEMENTED + CALL SYSCHK ; NOT YET IMPLEMENTED LD A,ERR_NOTIMPL ; NOT YET INMPLEMENTED OR A ; SET FLAGS RET @@ -2470,9 +2473,9 @@ SYS_GET: CP BF_SYSGET_RTCCNT JR Z,SYS_GETRTCCNT CP BF_SYSGET_VDACNT - JR Z,SYS_GETVDACNT + JP Z,SYS_GETVDACNT CP BF_SYSGET_SNDCNT - JR Z, SYS_GETSNDCNT + JP Z, SYS_GETSNDCNT CP BF_SYSGET_TIMER JR Z,SYS_GETTIMER CP BF_SYSGET_SECS @@ -2485,7 +2488,7 @@ SYS_GET: JR Z,SYS_GETMEMINFO CP BF_SYSGET_BNKINFO JR Z,SYS_GETBNKINFO - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOFUNC ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -2625,7 +2628,7 @@ SYS_SET: JR Z,SYS_SETSECS CP BF_SYSSET_BOOTINFO JR Z,SYS_SETBOOTINFO - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOFUNC ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -2722,7 +2725,7 @@ SYS_INT: JR Z,SYS_INTGET CP BF_SYSINT_SET JR Z,SYS_INTSET - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOFUNC ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -2750,7 +2753,7 @@ SYS_INTINFO: ; SYS_INTVECADR: #IF (INTMODE == 0) - ;CALL PANIC ; INVALID FOR INT MODE 0 + CALL SYSCHK ; INVALID FOR INT MODE 0 LD A,ERR_BADCFG ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -2766,7 +2769,7 @@ SYS_INTVECADR: LD A,E ; INCOMING INDEX POSITION TO A CP C ; COMPARE TO VECTOR COUNT JR C,SYS_INTGET1 ; CONTINUE IF POSITION IN RANGE - ;CALL PANIC ; ELSE ERROR + CALL SYSCHK ; ELSE ERROR LD A,ERR_RANGE ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -2985,13 +2988,13 @@ HB_DISPCALL: RET ; JUMP TO DRIVER FUNC ADR ON TOS ; HB_FUNCERR: - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOFUNC ; SIGNAL ERROR OR A ; SET FLAGS RET ; HB_UNITERR: - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOUNIT ; SIGNAL ERROR OR A ; SET FLAGS RET @@ -3080,7 +3083,7 @@ HB_ALLOC: HB_ALLOC1: ; ERROR RETURN POP DE ; RESTORE INCOMING DE - ;CALL PANIC + CALL SYSCHK LD A,ERR_NOMEM ; SIGNAL ERROR OR A ; SET FLAGS RET diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index d0734cd2..491f2422 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -132,6 +132,7 @@ ERR_IO .EQU -9 ; I/O ERROR ERR_READONLY .EQU -10 ; WRITE REQ TO READ-ONLY MEDIA ERR_TIMEOUT .EQU -11 ; DEVICE TIMEOUT ERR_BADCFG .EQU -12 ; INVALID CONFIGURATION +ERR_INTERNAL .EQU -13 ; INTERNAL ERROR ; ; MEDIA ID VALUES ; diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index e6643dd1..1d1b3c84 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -121,7 +121,10 @@ HDSK_FNTBL: HDSK_VERIFY: HDSK_FORMAT: HDSK_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -291,7 +294,10 @@ HDSK_RW6: 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 ; AND RETURN, A HAS RETURN CODE + RET Z ; RETURN IF SUCCESS + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS + RET ; AND DONE ; ; ; diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 02f3d813..d6164225 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -461,7 +461,10 @@ IDE_FNTBL: IDE_VERIFY: IDE_FORMAT: IDE_DEFMED: - CALL PANIC ; NOT IMPLEMENTED + CALL SYSCHK ; NOT IMPLEMENTED + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -520,7 +523,10 @@ IDE_IO3: LD E,C ; SECTOR READ COUNT TO E LD HL,(IDE_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE - RET ; AND RETURN, A HAS RETURN CODE + RET Z ; RETURN IF SUCCESS + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS + RET ; AND DONE ; ; ; @@ -574,6 +580,8 @@ IDE_MEDIA2: LD E,MID_HD ; ASSUME WE ARE OK RET Z ; RETURN IF GOOD INIT LD E,MID_NONE ; SIGNAL NO MEDIA + LD A,ERR_NOMEDIA ; NO MEDIA ERROR + OR A ; SET FLAGS RET ; AND RETURN ; ; diff --git a/Source/HBIOS/intrtc.asm b/Source/HBIOS/intrtc.asm index a7d05ac7..3765bf1d 100644 --- a/Source/HBIOS/intrtc.asm +++ b/Source/HBIOS/intrtc.asm @@ -56,7 +56,10 @@ INTRTC_DISPATCH: JP Z,INTRTC_SETALM ; SET ALARM DEC A JP Z,INTRTC_DEVICE ; REPORT RTC DEVICE INFO - CALL PANIC + CALL SYSCHK + LD A,ERR_NOFUNC + OR A + RET ; ; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR ; @@ -66,7 +69,10 @@ INTRTC_GETBLK: INTRTC_SETBLK: INTRTC_GETALM: INTRTC_SETALM: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; ; RTC GET TIME ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR @@ -197,7 +203,7 @@ INTRTC_INT2: JR NZ,INTRTC_INTX ; NOPE, DONE LD (HL),0 ; BACK TO YEAR ZERO INTRTC_INTX: - JP PANIC + JP SYSCHK INTRTC_VEC .EQU $-2 ; ; CONVERT FROM BINARY BUF (HL) TO BCD BUF (DE) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 9d290c0a..81567653 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -80,7 +80,10 @@ MD_FNTBL: MD_VERIFY: MD_FORMAT: MD_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -102,7 +105,10 @@ MD_CAP: JR Z,MD_CAP0 ; UNIT 0 DEC A ; TRY UNIT 1 JR Z,MD_CAP1 ; UNIT 1 - CALL PANIC ; PANIC ON INVALID UNIT + CALL SYSCHK ; INVALID UNIT + LD A,ERR_NOUNIT + OR A + RET MD_CAP0: LD A,(HCB + HCB_ROMBANKS) ; POINT TO ROM BANK COUNT JR MD_CAP2 diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index a15d35a5..6b795ed3 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -470,7 +470,10 @@ PPIDE_FNTBL: PPIDE_VERIFY: PPIDE_FORMAT: PPIDE_DEFMED: - CALL PANIC ; NOT IMPLEMENTED + CALL SYSCHK ; NOT IMPLEMENTED + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -529,7 +532,10 @@ PPIDE_IO3: LD E,C ; SECTOR READ COUNT TO E LD HL,(PPIDE_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE - RET ; AND RETURN, A HAS RETURN CODE + RET Z ; RETURN IF SUCCESS + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS + RET ; AND DONE ; ; ; @@ -583,6 +589,8 @@ PPIDE_MEDIA2: LD E,MID_HD ; ASSUME WE ARE OK RET Z ; RETURN IF GOOD INIT LD E,MID_NONE ; SIGNAL NO MEDIA + LD A,ERR_NOMEDIA ; NO MEDIA ERROR + OR A ; SET FLAGS RET ; AND RETURN ; ; @@ -978,7 +986,7 @@ PPIDE_RESET: ; OLDER CF CARDS DO NOT SEEM TO SET THE ; REGISTERS ON RESET, SO HERE WE FAKE THINGS BY ; SETTING THEM AS A RESET WOULD -#IF (IDETRACE >= 3) +#IF (PPIDETRACE >= 3) PRTS(" FAKE$") #ENDIF XOR A diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 0b45b1eb..e564db7d 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -338,7 +338,10 @@ PPPCON_OST: ; ; PPPCON_INITDEV: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -499,7 +502,10 @@ PPPSD_FNTBL: PPPSD_VERIFY: PPPSD_FORMAT: PPPSD_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -566,8 +572,11 @@ PPPSD_IO2: PPPSD_IO3: LD E,C ; SECTOR READ COUNT TO E LD HL,(PPPSD_DSKBUF) ; CURRENT BUF ADR 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 ; RETURN WITH A = STATUS + RET ; AND DONE ; ; ; @@ -697,6 +706,8 @@ PPPSD_MEDIA: LD E,MID_HD ; ASSUME WE ARE OK RET Z ; RETURN IF GOOD INIT LD E,MID_NONE ; SIGNAL NO MEDA + LD A,ERR_NOMEDIA ; NO MEDIA ERROR + OR A ; SET FLAGS RET ; AND RETURN ; ; diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index bb95606f..3ed73f09 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -211,7 +211,10 @@ PRPCON_OST1: ; ; PRPCON_INITDEV: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -396,7 +399,10 @@ PRPSD_FNTBL: PRPSD_VERIFY: PRPSD_FORMAT: PRPSD_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -463,8 +469,11 @@ PRPSD_IO2: PRPSD_IO3: LD E,C ; SECTOR READ COUNT TO E LD HL,(PRPSD_DSKBUF) ; CURRENT BUF ADR 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 ; RETURN WITH A = STATUS + RET ; AND DONE ; ; ; @@ -553,6 +562,8 @@ PRPSD_MEDIA: LD E,MID_HD ; ASSUME WE ARE OK RET Z ; RETURN IF GOOD INIT LD E,MID_NONE ; SIGNAL NO MEDA + LD A,ERR_NOMEDIA ; NO MEDIA ERROR + OR A ; SET FLAGS RET ; AND RETURN ; ; diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 2ecba90f..6fbedfe2 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -138,7 +138,10 @@ RF_FNTBL: RF_VERIFY: RF_FORMAT: RF_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -219,7 +222,8 @@ RF_WRITE: CALL RF_CHKWP ; WRITE PROTECTED? JR Z,RF_RW ; IF 0, NOT WP, CONTINUE WITH GENERIC R/W ROUTINE LD E,0 ; ZERO SECTORS WRITTEN - OR $FF ; SIGNAL ERROR + LD A,ERR_READONLY ; SIGNAL ERROR + OR A ; SET FLAGS RET ; AND DONE ; ; @@ -255,7 +259,10 @@ RF_RW3: LD E,C ; SECTOR READ COUNT TO E LD HL,(RF_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE - RET ; AND RETURN, A HAS RETURN CODE + RET Z ; RETURN SUCCESS + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS + RET ; AND DONE ; ; READ SECTOR ; diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 1568942b..ce6cebf7 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -672,7 +672,10 @@ SD_FNTBL: SD_VERIFY: SD_FORMAT: SD_DEFMED: - CALL PANIC ; INVALID SUB-FUNCTION + CALL SYSCHK ; INVALID SUB-FUNCTION + LD A,ERR_NOTIMPL + OR A + RET ; ; ; @@ -737,7 +740,10 @@ SD_IO3: LD E,C ; SECTOR READ COUNT TO E LD HL,(SD_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE - RET ; AND RETURN, A HAS RETURN CODE + RET Z ; RETURN IF SUCCESS + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS + RET ; AND DONE ; ; ; @@ -802,6 +808,8 @@ SD_MEDIA2: LD E,MID_HD ; ASSUME WE ARE OK RET Z ; RETURN IF GOOD INIT LD E,MID_NONE ; SIGNAL NO MEDIA + LD A,ERR_NOMEDIA ; NO MEDIA ERROR + OR A ; SET FLAGS RET ; AND RETURN ; ; @@ -1054,10 +1062,14 @@ SD_INITCARD5: ; GET SIZE OF DEVICE IN BLOCKS LD A,(IY+SD_TYPE) ; GET CARD TYPE OR A ; SET FLAGS - CALL Z,PANIC ; PANIC IF CARD TYPE UNKNOWN + JR Z,SD_INITCARD5A ; HANDLE CARD TYPE UNKNOWN CP SD_TYPESDHC ; COMPARE TO SDHC (V2) JP NC,SD_INITCARD8 ; HANDLE SDHC (V2) OR BETTER JR SD_INITCARD6 ; HANDLE MMC OR SDSC +; +SD_INITCARD5A: + CALL SYSCHK + JP SD_NOMEDIA ; ; CAPACITY CALCULATION FOR MMC OR SDSC (V1) CARDS: ; BYTES = (C_SIZE + 1) * 2^(2+C_SIZE_MULT+READ_BL_LEN) = (C_SIZE+1) << (2+C_SIZE_MULT+READ_BL_LEN) @@ -1165,6 +1177,9 @@ SD_SECTIO: CP SD_CMD_WRITE_BLOCK ; WRITE_BLOCK? JR Z,SD_SECTIO2 ; HANDLE WRITE CALL PANIC ; PANIC ON ANYTHING ELSE + LD A,ERR_INTERNAL + OR A + RET SD_SECTIO1: ; GET SECTOR DATA CALL SD_GETDATA ; GET THE BLOCK diff --git a/Source/HBIOS/simrtc.asm b/Source/HBIOS/simrtc.asm index 0185bd93..28394990 100644 --- a/Source/HBIOS/simrtc.asm +++ b/Source/HBIOS/simrtc.asm @@ -55,7 +55,10 @@ SIMRTC_DISPATCH: JP Z,SIMRTC_SETALM ; SET ALARM DEC A JP Z,SIMRTC_DEVICE ; REPORT RTC DEVICE INFO - CALL PANIC + CALL SYSCHK + LD A,ERR_NOFUNC + OR A + RET ; ; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR ; @@ -65,7 +68,10 @@ SIMRTC_GETBLK: SIMRTC_SETBLK: SIMRTC_GETALM: SIMRTC_SETALM: - CALL PANIC + CALL SYSCHK + LD A,ERR_NOTIMPL + OR A + RET ; ; RTC GET TIME ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR diff --git a/Source/HBIOS/sio.asm b/Source/HBIOS/sio.asm index 631cb605..9d7fc13a 100644 --- a/Source/HBIOS/sio.asm +++ b/Source/HBIOS/sio.asm @@ -839,7 +839,10 @@ SIO_INITGO: LD L,SIO1_VEC ; ASSUME CHIP 1 DEC A ; CHIP 1? JR Z,SIO_INITIVT ; IF SO, DO IT - CALL PANIC ; IMPOSSIBLE SITUATION + CALL SYSCHK ; IMPOSSIBLE SITUATION + LD A,ERR_NOUNIT + OR A + RET SIO_INITIVT: LD A,L ; VALUE TO A LD (SIO_WR2),A ; SAVE IT diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index b62a6486..a6ee8022 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -30,6 +30,10 @@ USEXIO .EQU 1 ; BASIC SERIAL DRIVER USEMIO .EQU 2 ; MEMORY BUFFER DRIVER WBWDEBUG .EQU USENONE ; +; DISPLAY SYSTEM CHECKS? +; +SYSCHKENABLE .EQU FALSE +; ; PRIMARY HARDWARE PLATFORMS ; PLT_SBC .EQU 1 ; SBC ECB Z80 SBC diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index fb594f93..6fae1b9b 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -224,7 +224,10 @@ TMS_VDADEV: RET TMS_VDASCS: - CALL PANIC ; NOT IMPLEMENTED (YET) + CALL SYSCHK ; NOT IMPLEMENTED (YET) + LD A,ERR_NOTIMPL + OR A + RET TMS_VDASCP: #IF (CPUFAM == CPU_Z180) diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 8dc066db..7a8868dd 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -381,17 +381,30 @@ TSTPT: POP DE JR REGDMP ; DUMP REGISTERS AND RETURN ; -; PANIC: TRY TO DUMP MACHINE STATE +; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE? ; -PANIC: +SYSCHK: +#IF (SYSCHKENABLE) PUSH DE - LD DE,STR_PANIC + LD DE,STR_SYSCHK CALL WRITESTR POP DE CALL XREGDMP ; DUMP REGISTERS CALL CONTINUE ; CHECK W/ USER +#ENDIF RET ; +; PANIC: DUMP MACHINE STATE AND HALT +; +PANIC: + PUSH DE + LD DE,STR_PANIC + CALL WRITESTR + POP DE + CALL XREGDMP ; DUMP REGISTERS + DI ; NO INTERRUPTS + HALT ; FULL STOP +; ; ; REGDMP: @@ -504,6 +517,7 @@ CONTINUE3: ; ; STR_PANIC .DB "\r\n\r\n>>> PANIC: $" +STR_SYSCHK .DB "\r\n\r\n>>> SYSCHK: $" STR_TSTPT .TEXT "\r\n+++ TSTPT: $" STR_CONTINUE .TEXT " Continue? (Y/N): $" ;STR_AF .DB " AF=$" diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index 30bb2b4e..dde3ae33 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -208,7 +208,10 @@ VGA_VDADEV: RET VGA_VDASCS: - CALL PANIC ; NOT IMPLEMENTED (YET) + CALL SYSCHK ; NOT IMPLEMENTED (YET) + LD A,ERR_NOTIMPL + OR A + RET VGA_VDASCP: CALL VGA_XY ; SET CURSOR POSITION diff --git a/Source/ver.inc b/Source/ver.inc index 863b88bf..74eae58b 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.10" +#DEFINE BIOSVER "3.1.1-pre.11" diff --git a/Source/ver.lib b/Source/ver.lib index d8f586c1..f0a72730 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.10" + db "3.1.1-pre.11" endm