From 3f46921c6cb202f5ba0b64eede35a4c7a1d3cfc4 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 18 May 2020 15:33:28 -0700 Subject: [PATCH] Change PANIC behavior a bit - Also includes a fix for a build issue in PPIDE identified by Richard Deane. --- Doc/RomWBW Applications.pdf | Bin 141708 -> 141708 bytes Doc/RomWBW Architecture.pdf | Bin 413847 -> 416848 bytes Doc/RomWBW Disk Catalog.pdf | Bin 130980 -> 130980 bytes Doc/RomWBW Getting Started.pdf | Bin 169500 -> 169500 bytes Source/Doc/Architecture.md | 22 ++++++++++++++++++ Source/HBIOS/acia.asm | 2 +- Source/HBIOS/bqrtc.asm | 10 ++++++-- Source/HBIOS/cvdu.asm | 5 +++- Source/HBIOS/dbgmon.asm | 2 +- Source/HBIOS/dsrtc.asm | 10 ++++++-- Source/HBIOS/fd.asm | 23 ++++++++++++++---- Source/HBIOS/hbios.asm | 41 ++++++++++++++++++--------------- Source/HBIOS/hbios.inc | 1 + Source/HBIOS/hdsk.asm | 10 ++++++-- Source/HBIOS/ide.asm | 12 ++++++++-- Source/HBIOS/intrtc.asm | 12 +++++++--- Source/HBIOS/md.asm | 10 ++++++-- Source/HBIOS/ppide.asm | 14 ++++++++--- Source/HBIOS/ppp.asm | 17 +++++++++++--- Source/HBIOS/prp.asm | 17 +++++++++++--- Source/HBIOS/rf.asm | 13 ++++++++--- Source/HBIOS/sd.asm | 21 ++++++++++++++--- Source/HBIOS/simrtc.asm | 10 ++++++-- Source/HBIOS/sio.asm | 5 +++- Source/HBIOS/std.asm | 4 ++++ Source/HBIOS/tms.asm | 5 +++- Source/HBIOS/util.asm | 20 +++++++++++++--- Source/HBIOS/vga.asm | 5 +++- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 30 files changed, 230 insertions(+), 65 deletions(-) diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 4f21039c004e38e70285a198dd2c79cf40f359ac..275b6797df9c21f6f96da3e2d07a7b1f32f8eeb8 100644 GIT binary patch delta 131 zcmeCV%+Yh1qhSl<`u`f1CPs#)x(4Rz1_tVyT>8HGDK3d6sR|k{Rz?O!1_q{vW`vZHZ*fHv@|v{a5Qyvadk4bbTlzDG&Z(yb~SUhQ?MbVWO}|PlPmz5 CDI#0| delta 131 zcmeCV%+Yh1qhSl<`u`e6CYGiKx(4Rz1_tVyT>8HGDK3d6sR|k{Rz?O!1_q{vW`fQ?MbVWO}|PlPmz7 CULt}3 diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 2fee8c60cba07c49a4fb0a559c764f8de05b16ad..468e8fde3e2339cf218e26920a872dfbf24fafb5 100644 GIT binary patch delta 66284 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 f^j7LLn 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 diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 0ebfa20fd1300c4ecc86fa45974421241e70d5b6..225e2dda61eae0d7bd14dc1c2dc7f47821796b4a 100644 GIT binary patch delta 109 zcmbQUhHK6mu7(!IElj7=SuIVB3=OAWNN19RFt>kBXF93tY+~+YZs6o<;o@ZBXyN2+ f>Sk!<>f&nQZ02TRZ0uxVV5eY1NXhj7Q<-D|1X~`k delta 109 zcmbQUhHK6mu7(!IElj7=S&d9AP0XfWNN19RFt>kBXF93tZ0urT=IrR?>SSzcWNKmL fVq|9M?CfN2;9_KM;OJuRYNudBNXhj7Q<-D|{T&{5 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