|
|
|
@ -22,7 +22,7 @@ |
|
|
|
; SYSTEM INITIALIZATION, THE IMAGE OF THE RUNNING ROM BANK IS COPIED TO A RAM BANK |
|
|
|
; CREATING A SHADOW COPY IN RAM. EXECUTION IS THAN TRANSFERRED TO THE RAM SHADOW COPY. |
|
|
|
; THIS IS ESSENTIAL BECAUSE THE HBIOS CODE DOES NOT SUPPORT RUNNING IN READ ONLY MEMORY |
|
|
|
; (EXCEPT FOR THE INITIAL LAUNCHING CODE). IN THIS MODE, THE HBIOS INITIALIZATION WILL |
|
|
|
; (EXCEPT FOR THE INITIAL LAUNCHING CODE). IN THIS MODE, THE HBI OS INITIALIZATION WILL |
|
|
|
; ALSO COPY THE OS IMAGES BANK IN ROM TO THE USER RAM BANK AND LAUNCH IT AFTER HBIOS |
|
|
|
; IS INSTALLED. |
|
|
|
; |
|
|
|
@ -2232,6 +2232,29 @@ NOT_REC_M0: |
|
|
|
CALL DSKY_SHOW |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF FPENABLE |
|
|
|
; |
|
|
|
; IF FRONT PANEL IS ENABLED IN CONFIG, WE NEED TO CHECK TO SEE IF THE |
|
|
|
; HARDWARE REALLY EXISTS. THE ONLY WAY TO DO THAT IS TO SEE IF THE |
|
|
|
; FRONT PANEL PORT SEEMS TO BE VALID (NOT FLOATING). HERE WE JUST |
|
|
|
; DO THE CHECKING AND RECORD WHETHER THE FP SWITCHES ARE USEABLE. |
|
|
|
; |
|
|
|
; THE SWITCH HARDWARE MAY OR MAY NOT BE INSTALLED. SO, HERE WE |
|
|
|
; ATTEMPT TO CONFIRM WE HAVE A VALID PORT. CREDIT TO STEPHEN |
|
|
|
; COUSINS FOR THIS APPROACH. |
|
|
|
LD C,FPBASE ; ADR OF SWITCH PORT |
|
|
|
IN C,(C) ; READ IT USING IN (C) |
|
|
|
IN A,(FPBASE) ; READ IT USING IN (PORT) |
|
|
|
CP C ; PORT FLOATING ON MISMATCH |
|
|
|
JR NZ,HB_SWZ ; ABORT IF FLOATING |
|
|
|
CP $FF ; $FF ALSO MEANS PORT INACTIVE |
|
|
|
JR Z,HB_SWZ ; ABORT IF SO |
|
|
|
OR $FF ; SIGNAL FP EXISTS |
|
|
|
LD (HB_HASFP),A ; AND SAVE IT |
|
|
|
HB_SWZ: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF FALSE |
|
|
|
; |
|
|
|
; TEST DEBUG *************************************************************************************** |
|
|
|
@ -2248,7 +2271,6 @@ NOT_REC_M0: |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
#IF (BOOT_DELAY > 100) |
|
|
|
.ECHO "*** ERROR: INVALID BOOT_DELAY (BOOT_DELAY > 100)!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
@ -2288,10 +2310,10 @@ HB_CONRDY: |
|
|
|
; RETRIEVE THE CONFIG FROM THE CONSOLE PORT |
|
|
|
LD B,BF_CIOQUERY ; HBIOS QUERY CIO CONFIG |
|
|
|
LD A,(CB_CONDEV) ; GET CONSOLE DEVICE |
|
|
|
LD (HB_BOOTCONSAV),A ; SAVE IT FOR LATER |
|
|
|
LD (HB_BOOTCON),A ; SAVE IT FOR LATER |
|
|
|
LD C,A ; BOOT CONSOLE TO C |
|
|
|
CALL HB_DISPATCH ; INTERNAL HBIOS CALL |
|
|
|
LD (HB_CONCFGSAV),DE ; SAVE CONFIG |
|
|
|
LD (HB_BOOTCFG),DE ; SAVE CONFIG |
|
|
|
RES 5,D ; CLEAR RTS BIT |
|
|
|
LD B,BF_CIOINIT ; HBIOS CIO INIT |
|
|
|
LD A,(CB_CONDEV) ; GET CONSOLE DEVICE |
|
|
|
@ -2743,8 +2765,10 @@ HB_WDZ: |
|
|
|
LD HL,(CB_HEAPTOP) |
|
|
|
LD (HEAPCURB),HL |
|
|
|
; |
|
|
|
; NOW SWITCH TO CRT CONSOLE IF CONFIGURED |
|
|
|
; NOW SWITCH CONSOLES IF CONFIGURED |
|
|
|
; |
|
|
|
LD A,(CB_CONDEV) ; GET CURRENT CONSOLE |
|
|
|
LD (HB_NEWCON),A ; AND INIT NEW CONSOLE VAR |
|
|
|
#IF CRTACT |
|
|
|
; |
|
|
|
; BIOS IS CONFIGURED TO AUTO ACTIVATE CRT DEVICE. FIRST, |
|
|
|
@ -2763,39 +2787,107 @@ HB_WDZ: |
|
|
|
JR Z,INITSYS3 ; Z=SHORTED, BYPASS CONSOLE SWITCH |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; NOTIFY USER OF CONSOLE SWITCH ON BOOT CONSOLE |
|
|
|
CALL NEWLINE2 |
|
|
|
PRTX(STR_SWITCH) |
|
|
|
CALL NEWLINE |
|
|
|
LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE |
|
|
|
LD (HB_NEWCON),A ; AND QUEUE TO SWITCH |
|
|
|
; |
|
|
|
; SWITCH TO CRT CONSOLE |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF FPENABLE |
|
|
|
; |
|
|
|
; IF WE HAVE FRONT PANEL SWITCHES, THIS IS THE RIGHT PLACE TO HANDLE |
|
|
|
; ANY CONSOLE CHANGE REQUESTS. THE FRONT PANEL HAS TWO SWITCHES |
|
|
|
; RELATED TO THIS: 1) CRT/SER, AND 2) SEC/PRI. IF CRT/SER IS SET, |
|
|
|
; THEN WE SWITCH TO THE CRT DEVICE (IF THERE IS ONE). IF THE SEC/PRI |
|
|
|
; SWITCH IS SET, THEN WE ATTEMPT TO USE THE SECOND SERIAL OR CRT |
|
|
|
; DEVICE. |
|
|
|
; |
|
|
|
PRTS("\r\nFP: IO=0x$") |
|
|
|
LD A,FPBASE |
|
|
|
CALL PRTHEXBYTE |
|
|
|
; |
|
|
|
; THE EXISTENCE OF THE FP WAS TESTED EARLIER. IF IT DOESN'T |
|
|
|
; EXIST, BAIL OUT. |
|
|
|
LD A,(HB_HASFP) ; GET FP EXISTENCE FLAG |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR NZ,HB_FP1 ; IF WE HAVE ONE, CONTINUE |
|
|
|
; |
|
|
|
; HANDLE NO FP |
|
|
|
PRTS(" NOT PRESENT$") |
|
|
|
JR HB_FPZ |
|
|
|
; |
|
|
|
HB_FP1: |
|
|
|
; WE NOW BELIEVE WE HAVE A VALID SWITCH SETTINGS VALUE. |
|
|
|
; CHECK FOR CRT SWITCH VALUE AND SWITCH TO CRT IF SET. |
|
|
|
; NOTE THAT CB_CRTDEV WILL BE ZERO IF THERE IS NO CRT DEVICE |
|
|
|
; IN THE SYSTEM, SO WE DON'T NEED TO CHECK FOR THE EXISTENCE |
|
|
|
; OF A CRT DEVICE -- IT WILL JUST FAILBACK TO FIRST SERIAL |
|
|
|
; PORT. |
|
|
|
PRTS(" SWITCHES=0x$") ; TAG |
|
|
|
IN A,(FPBASE) ; GET SWITCH SETTINGS |
|
|
|
CALL PRTHEXBYTE ; DISPLAY VALUE |
|
|
|
LD B,A ; SAVE IN REG B |
|
|
|
AND SW_CRT ; TEST CRT BIT |
|
|
|
JR Z,HB_FP2 ; SKIP AHEAD IF NOT SET |
|
|
|
LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE |
|
|
|
LD (CB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE |
|
|
|
CP $FF ; $FF MEANS NO CRT PRESENT |
|
|
|
JR Z,HB_FP2 ; BYPASS IF SO |
|
|
|
LD (HB_NEWCON),A ; QUEUE NEW CONSOLE UNIT |
|
|
|
; |
|
|
|
HB_FP2: |
|
|
|
; IF SEC SWITCH IS SET, WE WANT TO BUMP TO SECONDARY |
|
|
|
; CRT OR SERIAL DEVICE. FOR NOW, WE ARE GOING TO CHEAT AND |
|
|
|
; JUST INCREMENT THE CONSOLE DEVICE UNIT. THIS SHOULD WORK |
|
|
|
; ASSUMING NORMAL ORDERING OF THE CHARACTER DEVICE UNITS. |
|
|
|
LD A,B ; RECOVER SWITCH SETTINGS |
|
|
|
AND SW_SEC ; TEST SEC BIT |
|
|
|
JR Z,HB_FPZ ; IF NOT SET, THEN ALL DONE |
|
|
|
; |
|
|
|
; INCREMENT CONSOLE UNIT, BUT MAKE SURE IT DOES NOT EXCEED |
|
|
|
; THE HIGHEST CHAR UNIT IN SYSTEM. |
|
|
|
LD A,(CIO_CNT) ; GET CHAR UNIT COUNT |
|
|
|
LD B,A ; MOVE TO B |
|
|
|
LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT |
|
|
|
INC A ; BUMP TO SECONDARY |
|
|
|
CP B ; A (UNIT) >= B (CNT)? |
|
|
|
JR NC,HB_FPZ ; ABORT IF UNIT TOO HIGH |
|
|
|
LD (HB_NEWCON),A ; UPDATE NEW CONSOLE UNIT |
|
|
|
; |
|
|
|
HB_FPZ: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
INITSYS3: |
|
|
|
; |
|
|
|
; IF WE ARE GOING TO SWITCH CONSOLES, IT IS IMPLEMENTED HERE. A |
|
|
|
; MESSAGE IS PRINTED ON THE OLD CONSOLE INDICATING WHERE THE NEW |
|
|
|
; CONSOLE IS AND THE NEW CONSOLE RECEIVES AN HBIOS BANNER. |
|
|
|
; |
|
|
|
LD A,(HB_BOOTCON) ; GET ORIGINAL BOOT CONSOLE DEV |
|
|
|
LD C,A ; PUT IN C |
|
|
|
LD A,(HB_NEWCON) ; GET NEW CONSOLE DEVICE |
|
|
|
CP C ; COMPARE |
|
|
|
JR Z,INITSYS3A ; NO CHANGE, BYPASS |
|
|
|
; |
|
|
|
LD DE,STR_CONSOLE ; CONSOLE CHANGE NOTIFY |
|
|
|
CALL WRITESTR ; PRINT IT |
|
|
|
LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT NUM |
|
|
|
CALL PRTDECB ; PRINT UNIT NUM |
|
|
|
LD (CB_CONDEV),A ; IMPLEMENT NEW CONSOLE! |
|
|
|
CALL NEWLINE2 ; FORMATTING |
|
|
|
LD DE,STR_BANNER ; POINT TO BANNER |
|
|
|
CALL NZ,WRITESTR ; OUTPUT IF CONSOLE MOVED |
|
|
|
; |
|
|
|
INITSYS3A: |
|
|
|
; |
|
|
|
; RESTORE BOOT CONSOLE CONFIGURATION |
|
|
|
; |
|
|
|
CALL LDELAY ; ALLOW SERIAL PORT TO FLUSH |
|
|
|
LD B,BF_CIOINIT ; HBIOS CIO INIT |
|
|
|
LD A,(HB_BOOTCONSAV) ; ORIGINAL BOOT CONSOLE DEVICE |
|
|
|
LD A,(HB_BOOTCON) ; ORIGINAL BOOT CONSOLE DEVICE |
|
|
|
LD C,A ; BOOT CONSOLE TO C |
|
|
|
LD DE,(HB_CONCFGSAV) ; SAVED ORIGINAL CONSOLE CFG |
|
|
|
LD DE,(HB_BOOTCFG) ; SAVED ORIGINAL CONSOLE CFG |
|
|
|
CALL HB_DISPATCH ; INTERNAL HBIOS CALL |
|
|
|
; |
|
|
|
LD A,(HB_BOOTCONSAV) ; GET ORIGINAL BOOT CONSOLE DEV |
|
|
|
LD C,A ; PUT IN C |
|
|
|
LD A,(CB_CONDEV) ; GET ACTIVE CONSOLE DEVICE |
|
|
|
CP C ; COMPARE |
|
|
|
JR Z,INITSYS3A ; SKIP AHEAD IF NO CHANGE |
|
|
|
; |
|
|
|
; DISPLAY HBIOS BANNER ON NEW CONSOLE IF WE SWITCHED TO NEW |
|
|
|
; CONSOLE DEVICE |
|
|
|
PRTX(STR_BANNER) ; DISPLAY HBIOS BANNER |
|
|
|
; |
|
|
|
INITSYS3A: |
|
|
|
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE |
|
|
|
; |
|
|
|
#IF 0 |
|
|
|
@ -4157,9 +4249,130 @@ SYS_GET: |
|
|
|
JP Z,SYS_GETBNKINFO |
|
|
|
CP BF_SYSGET_CPUSPD |
|
|
|
JP Z,SYS_GETCPUSPD |
|
|
|
CP BF_SYSGET_PANEL |
|
|
|
JP Z,SYS_GETPANEL |
|
|
|
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SERIAL UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETCIOCNT: |
|
|
|
LD A,(CIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SERIAL UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETCIOFN: |
|
|
|
BIT 7,E ; CHECK FOR SPECIAL UNIT CODE |
|
|
|
CALL NZ,SYS_GETCIOFN1 ; IF SO, HANDLE IT |
|
|
|
LD IY,CIO_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
SYS_GETCIOFN1: |
|
|
|
LD A,(CB_CONDEV) ; UNIT $80 -> CONSOLE UNIT |
|
|
|
LD E,A ; REPLACE UNIT VALUE IN C |
|
|
|
RET ; AND BACK TO REGULAR FLOW |
|
|
|
; |
|
|
|
; |
|
|
|
; GET DISK UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETDIOCNT: |
|
|
|
LD A,(DIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET DISK UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETDIOFN: |
|
|
|
LD IY,DIO_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; GET RTC UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETRTCCNT: |
|
|
|
LD E,0 ; ASSUME 0 RTC DEVICES |
|
|
|
LD A,(RTC_DISPACT) ; IS RTC ACTIVE? |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,SYS_GETRTCCNT1 ; IF NONE, DONE |
|
|
|
INC E ; SET ONE DEVICE |
|
|
|
SYS_GETRTCCNT1: |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET VIDEO UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETVDACNT: |
|
|
|
LD A,(VDA_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET VIDEO UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETVDAFN: |
|
|
|
LD IY,VDA_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; GET SOUND UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETSNDCNT: |
|
|
|
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SOUND UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETSNDFN: |
|
|
|
LD IY,SND_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; SHARED CODE TO COMPLETE A FUNCTION LOOKUP |
|
|
|
; ENTRY: |
|
|
|
; IY: DISPATCH FUNCTION TABLE |
|
|
|
; D: FUNCTION ID |
|
|
|
; E: UNIT NUMBER |
|
|
|
; EXIT: |
|
|
|
; HL: DRIVER FUNCTION ADDRESS |
|
|
|
; DE: DRIVER UNIT DATA ADDRESS |
|
|
|
; |
|
|
|
SYS_GETFN: |
|
|
|
LD A,D ; GET FUNC NUM FROM D |
|
|
|
LD B,A ; AND PUT IN B |
|
|
|
LD A,E ; GET UNIT NUM FROM E |
|
|
|
LD C,A ; AND PUT IN C |
|
|
|
CALL HB_DISPCALC ; CALC FN ADR & BLOB ADR |
|
|
|
PUSH IY ; MOVE DATA ADR |
|
|
|
POP DE ; ... TO DE |
|
|
|
RET ; AF STILL HAS RESULT OF CALC |
|
|
|
; |
|
|
|
; GET TIMER |
|
|
|
; RETURNS: |
|
|
|
; DE:HL: TIMER VALUE (32 BIT) |
|
|
|
@ -4317,124 +4530,27 @@ SYS_GETCPUSPD1: |
|
|
|
OR $FF |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SERIAL UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETCIOCNT: |
|
|
|
LD A,(CIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SERIAL UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; GET FRONT PANEL SWITCH VALUES BYTE |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETCIOFN: |
|
|
|
BIT 7,E ; CHECK FOR SPECIAL UNIT CODE |
|
|
|
CALL NZ,SYS_GETCIOFN1 ; IF SO, HANDLE IT |
|
|
|
LD IY,CIO_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; L: SWITCH VALUES BYTE |
|
|
|
; |
|
|
|
SYS_GETCIOFN1: |
|
|
|
LD A,(CB_CONDEV) ; UNIT $80 -> CONSOLE UNIT |
|
|
|
LD E,A ; REPLACE UNIT VALUE IN C |
|
|
|
RET ; AND BACK TO REGULAR FLOW |
|
|
|
; |
|
|
|
; |
|
|
|
; GET DISK UNIT COUNT |
|
|
|
SYS_GETPANEL: |
|
|
|
; |
|
|
|
SYS_GETDIOCNT: |
|
|
|
LD A,(DIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET DISK UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETDIOFN: |
|
|
|
LD IY,DIO_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; GET RTC UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETRTCCNT: |
|
|
|
LD E,0 ; ASSUME 0 RTC DEVICES |
|
|
|
LD A,(RTC_DISPACT) ; IS RTC ACTIVE? |
|
|
|
#IF FPENABLE |
|
|
|
LD A,(HB_HASFP) ; GET FP EXISTS FLAG |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,SYS_GETRTCCNT1 ; IF NONE, DONE |
|
|
|
INC E ; SET ONE DEVICE |
|
|
|
SYS_GETRTCCNT1: |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET VIDEO UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETVDACNT: |
|
|
|
LD A,(VDA_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET VIDEO UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETVDAFN: |
|
|
|
LD IY,VDA_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; GET SOUND UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETSNDCNT: |
|
|
|
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET SOUND UNIT API FN ADR AND DATA ADR |
|
|
|
; ENTRY: |
|
|
|
; D: FUNCTION |
|
|
|
; E: UNIT |
|
|
|
; RETURNS: |
|
|
|
; HL: FUNCTION ADDRESS |
|
|
|
; DE: DATA BLOB ADDRESS |
|
|
|
; |
|
|
|
SYS_GETSNDFN: |
|
|
|
LD IY,SND_TBL ; POINT TO UNIT TABLE |
|
|
|
JP SYS_GETFN ; GO TO COMMON CODE |
|
|
|
; |
|
|
|
; SHARED CODE TO COMPLETE A FUNCTION LOOKUP |
|
|
|
; ENTRY: |
|
|
|
; IY: DISPATCH FUNCTION TABLE |
|
|
|
; D: FUNCTION ID |
|
|
|
; E: UNIT NUMBER |
|
|
|
; EXIT: |
|
|
|
; HL: DRIVER FUNCTION ADDRESS |
|
|
|
; DE: DRIVER UNIT DATA ADDRESS |
|
|
|
; |
|
|
|
SYS_GETFN: |
|
|
|
LD A,D ; GET FUNC NUM FROM D |
|
|
|
LD B,A ; AND PUT IN B |
|
|
|
LD A,E ; GET UNIT NUM FROM E |
|
|
|
LD C,A ; AND PUT IN C |
|
|
|
CALL HB_DISPCALC ; CALC FN ADR & BLOB ADR |
|
|
|
PUSH IY ; MOVE DATA ADR |
|
|
|
POP DE ; ... TO DE |
|
|
|
RET ; AF STILL HAS RESULT OF CALC |
|
|
|
JR Z,SYS_GETPANEL1 ; HANDLE NOT EXISTS |
|
|
|
IN A,(FPBASE) ; READ SWITCHES |
|
|
|
LD H,0 ; FOR FUTURE |
|
|
|
LD L,A ; PUT SWITCHES VALUE IN L |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
#ENDIF |
|
|
|
SYS_GETPANEL1: ; HANDLE NON-EXISTENT FRONT PANEL |
|
|
|
LD HL,0 ; ZERO RESULT VALUE |
|
|
|
LD A,ERR_NOHW ; NO HARDWARE ERR |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; SET SYSTEM PARAMETERS |
|
|
|
; PARAMETER(S) TO SET INDICATED IN C |
|
|
|
@ -4449,6 +4565,8 @@ SYS_SET: |
|
|
|
JR Z,SYS_SETBOOTINFO |
|
|
|
CP BF_SYSSET_CPUSPD |
|
|
|
JR Z,SYS_SETCPUSPD |
|
|
|
CP BF_SYSSET_PANEL |
|
|
|
JP Z,SYS_SETPANEL |
|
|
|
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -4724,6 +4842,23 @@ SYS_SETCPUSPD_ERR: |
|
|
|
OR $FF ; NOT SUPPORTED |
|
|
|
RET |
|
|
|
; |
|
|
|
; SET FRONT PANEL LEDS |
|
|
|
; ON ENTRY: |
|
|
|
; L: LED VALUES BYTE |
|
|
|
; |
|
|
|
SYS_SETPANEL: |
|
|
|
; |
|
|
|
#IF DIAGENABLE |
|
|
|
LD A,L |
|
|
|
OUT (DIAGPORT),A |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
#ELSE |
|
|
|
LD A,ERR_NOHW ; NO HARDWARE ERR |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; RETURN A BYTE OF MEMORY FROM SPECIFIED BANK |
|
|
|
; ENTRY: D=BANK ID, HL=ADDRESS |
|
|
|
; RETURN: E=BYTE VALUE |
|
|
|
@ -7287,7 +7422,8 @@ HB_BOOT_REC .DB 0 ; BOOT MODE (0=NORMAL, 1=RECOVERY MODE) |
|
|
|
; |
|
|
|
STR_BANNER .DB "RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" |
|
|
|
STR_PLATFORM .DB PLATFORM_NAME, "$" |
|
|
|
STR_SWITCH .DB "*** Activating CRT Console ***$" |
|
|
|
;STR_SWITCH .DB "*** Activating CRT Console ***$" |
|
|
|
STR_CONSOLE .DB "\r\n\r\n Console on Unit #$" |
|
|
|
STR_BADINT .DB "\r\n*** BAD INT ***\r\n$" |
|
|
|
STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$" |
|
|
|
; |
|
|
|
@ -7311,8 +7447,11 @@ HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) |
|
|
|
; |
|
|
|
HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) |
|
|
|
; |
|
|
|
HB_BOOTCONSAV .DB 0 ; INITIAL BOOT CONSOLE SAVE AREA |
|
|
|
HB_CONCFGSAV .DW 0 ; CONSOLE CONFIG SAVE AREA |
|
|
|
HB_BOOTCON .DB 0 ; INITIAL BOOT CONSOLE SAVE AREA |
|
|
|
HB_BOOTCFG .DW 0 ; CONSOLE CONFIG SAVE AREA |
|
|
|
HB_NEWCON .DB 0 ; NEW CONSOLE TO SWITCH TO |
|
|
|
; |
|
|
|
HB_HASFP .DB 0 ; NON-ZERO MEANS FP EXISTS |
|
|
|
; |
|
|
|
HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER |
|
|
|
; |
|
|
|
|