|
|
|
@ -3,10 +3,68 @@ |
|
|
|
; HBIOS |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
; THIS FILE CONTAINS THE HBIOS IMAGE THAT IS INTENDED TO RUN IN A DEDICATED RAM BANK. THE CODE IS |
|
|
|
; CONSTRUCTED SUCH THAT IT CAN BE LAUNCHED IN A VARIETY OF MODES AND INSTALL ITSELF. A SMALL 512 |
|
|
|
; BYTE PROXY IS PLACED AT THE TOP OF CPU MEMORY (FE00H-FFFFH). THIS PROXY CODE ALLOWS CODE |
|
|
|
; RUNNING FROM ANY BANK TO INVOKE HBIOS FUNCTIONS. NORMALLY, ANY BANK THAT RUNS CODE WOULD SETUP |
|
|
|
; THE RST 8 VECTOR TO POINT TO THE PROXY INVOKE ENTRY POINT AT FFF0H. CALLS VIA THE PROXY INVOKE |
|
|
|
; ENTRY POINT TRANSPARENTLY SWAP IN THE HBIOS BANK, PERFORM THE REQUESTED FUNCTION, AND RETURN |
|
|
|
; WITH THE ORIGINAL BANK ACTIVE. THE CODE USING HBIOS FUNCTIONS DOES NOT NEED TO BE AWARE OF |
|
|
|
; THE BANK SWITCHING THAT OCCURS. |
|
|
|
; |
|
|
|
; THIS FILE CAN BE COMPILED TO BOOT IN ONE OF 3 MODES (ROM, APPLICATION, OR IMAGE) AS DESCRIBED |
|
|
|
; BELOW. WHEN COMPILED, YOU MUST DEFINE EXACTLY ONE OF THE FOLLOWING MACROS: |
|
|
|
; |
|
|
|
; - ROMBOOT: BOOT FROM A ROM BANK |
|
|
|
; |
|
|
|
; WHEN ROMBOOT IS DEFINED, THE FILE IS ASSEMBLED TO BE IMBEDDED AT THE START OF A ROM |
|
|
|
; ASSUMING THAT THE CPU WILL START EXECUTION AT ADDRESS 0. AFTER PERFORMING MINIMAL |
|
|
|
; 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 |
|
|
|
; ALSO COPY THE OS IMAGES BANK IN ROM TO THE USER RAM BANK AND LAUNCH IT AFTER HBIOS |
|
|
|
; IS INSTALLED. |
|
|
|
; |
|
|
|
; - APPBOOT: BOOT FROM A CP/M STYLE APPLICATION FILE |
|
|
|
; |
|
|
|
; WHEN APPBOOT IS DEFINED, THE FILE IS ASSEMBLED AS A CP/M APPLICATION ASSUMING |
|
|
|
; THAT IT WILL BE LOADED AT 100H BY THE CP/M (OR COMPATIBLE) OS. NOTE THAT IN |
|
|
|
; THIS CASE IT IS ASSUMED THAT AN OS IMAGES FILE IS APPENDED TO THE END OF THE |
|
|
|
; HBIOS APPLICATION BINARY. THE APPENDED OS IMAGES ARE COPIED TO THE USER RAM |
|
|
|
; BANK AND LAUNCHED AFTER HBIOS HAS INSTALLED ITSELF. |
|
|
|
; |
|
|
|
; - IMGBOOT: BOOT FROM AN IMAGE FILE THAT HAS BEEN PLACED IN THE USER BANK |
|
|
|
; |
|
|
|
; WHEN IMGBOOT IS DEFINED, THE FILE IS ASSEMBLED SUCH THAT IT CAN BE PRELOADED |
|
|
|
; INTO THE RAM USER BANK BY AN EXTERNAL PROCESS THAT SUBSEQUENTLY LAUNCHES |
|
|
|
; THE CODE AT ADDRESS 0. THE MOST COMMON EXAMPLE OF THIS IS THE UNA FSFAT |
|
|
|
; TOOL WHICH CAN LOAD AN IMAGE FROM A DOS FAT FILESYSTEM PROVIDING A SIMPLE |
|
|
|
; WAY TO LOAD A TEST COPY OF HBIOS. AS IS THE CASE WITH APPBOOT, IT IS ASSUMED |
|
|
|
; THAT AN OS IMAGES FILE IS APPENDED TO THE END OF THE IMAGE AND IS LAUNCHED |
|
|
|
; AFTER HBIOS IS INSTALLED. |
|
|
|
; |
|
|
|
; INCLUDE GENERIC STUFF |
|
|
|
; |
|
|
|
#INCLUDE "std.asm" |
|
|
|
; |
|
|
|
; MAKE SURE EXACTLY ONE OF ROMBOOT, APPBOOT, IMGBOOT IS DEFINED. |
|
|
|
MODCNT .EQU 0 |
|
|
|
#IFDEF ROMBOOT |
|
|
|
MODCNT .SET MODCNT + 1 |
|
|
|
#ENDIF |
|
|
|
#IFDEF APPBOOT |
|
|
|
MODCNT .SET MODCNT + 1 |
|
|
|
#ENDIF |
|
|
|
#IFDEF IMGBOOT |
|
|
|
MODCNT .SET MODCNT + 1 |
|
|
|
#ENDIF |
|
|
|
#IF (MODCNT != 1) |
|
|
|
.ECHO "*** ERROR: PLEASE DEFINE ONE AND ONLY ONE OF ROMBOOT, APPBOOT, IMGBOOT!!!\n" |
|
|
|
!!! ; FORCE AN ASSEMBLY ERROR |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; |
|
|
|
#IFNDEF APPBOOT |
|
|
|
; |
|
|
|
.ORG 0 |
|
|
|
@ -62,11 +120,11 @@ DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2015, Wayne Warthen, GNU GPL v3", 0 |
|
|
|
HCB: |
|
|
|
JP HB_START |
|
|
|
; |
|
|
|
.DB 'W',~'W' ; MARKER |
|
|
|
.DB RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO |
|
|
|
CB_MARKER .DB 'W',~'W' ; MARKER |
|
|
|
CB_VERSION .DB RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO |
|
|
|
.DB RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO |
|
|
|
; |
|
|
|
CB_PLT .DB PLATFORM |
|
|
|
CB_PLATFORM .DB PLATFORM |
|
|
|
CB_CPUMHZ .DB CPUMHZ |
|
|
|
CB_CPUKHZ .DW CPUKHZ |
|
|
|
CB_RAMBANKS .DB RAMSIZE / 32 |
|
|
|
@ -513,6 +571,9 @@ HBX_STACK .EQU $ |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
HB_START: |
|
|
|
DI ; NO INTERRUPTS |
|
|
|
IM 1 ; INTERRUPT MODE 1 |
|
|
|
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY |
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4)) |
|
|
|
; SET BASE FOR CPU IO REGISTERS |
|
|
|
@ -528,17 +589,17 @@ HB_START: |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
OUT0 (Z180_CMR),A |
|
|
|
|
|
|
|
; SET DEFAULT WAIT STATES TO ACCURATELY MEASURE CPU SPEED |
|
|
|
; SET DEFAULT WAIT STATES |
|
|
|
LD A,$F0 |
|
|
|
OUT0 (Z180_DCNTL),A |
|
|
|
|
|
|
|
; MMU SETUP |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG |
|
|
|
#IFDEF ROMBOOT |
|
|
|
XOR A |
|
|
|
OUT0 (Z180_BBR),A ; BANK BASE = 0 |
|
|
|
#ENDIF |
|
|
|
;#IFDEF ROMBOOT |
|
|
|
; XOR A |
|
|
|
; OUT0 (Z180_BBR),A ; BANK BASE = 0 |
|
|
|
;#ENDIF |
|
|
|
LD A,(RAMSIZE + RAMBIAS - 64) >> 2 |
|
|
|
OUT0 (Z180_CBR),A ; COMMON BASE = LAST (TOP) BANK |
|
|
|
|
|
|
|
@ -580,7 +641,13 @@ HB_START: |
|
|
|
LD BC,HBX_SIZ |
|
|
|
LDIR |
|
|
|
; |
|
|
|
; INSTALL HBIOS TO RAM BANK |
|
|
|
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION |
|
|
|
; |
|
|
|
LD A,(HB_RAMFLAG) |
|
|
|
OR A |
|
|
|
JR NZ,HB_START1 |
|
|
|
; |
|
|
|
; INSTALL HBIOS IN RAM BANK |
|
|
|
; |
|
|
|
LD A,(HB_CURBNK) |
|
|
|
LD (HB_SRCBNK),A |
|
|
|
@ -597,10 +664,17 @@ HB_START: |
|
|
|
LD HL,HB_START1 ; EXECUTION RESUMES HERE |
|
|
|
CALL HBX_BNKCALL ; CONTINUE IN RAM BANK, DO NOT RETURN |
|
|
|
HALT ; WE SHOULD NOT COME BACK HERE! |
|
|
|
; |
|
|
|
HB_RAMFLAG .DB FALSE ; ASSUME FALSE, SET TO TRUE BELOW AFTER RAM TRANSITION |
|
|
|
; |
|
|
|
; EXECUTION RESUMES HERE AFTER SWITCH TO RAM BANK |
|
|
|
; |
|
|
|
HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK |
|
|
|
LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN |
|
|
|
LD A,TRUE ; ACCUM := TRUE |
|
|
|
LD (HB_RAMFLAG),A ; SET RAMFLAG |
|
|
|
; |
|
|
|
; |
|
|
|
; PERFORM DYNAMIC CPU SPEED DERIVATION |
|
|
|
; |
|
|
|
CALL HB_CPUSPD ; CPU SPEED DETECTION |
|
|
|
; |
|
|
|
@ -616,22 +690,11 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK |
|
|
|
; |
|
|
|
; INITIALIZE HEAP STORAGE |
|
|
|
; |
|
|
|
LD DE,HB_END ; GET ADDRESS OF START OF HEAP |
|
|
|
; |
|
|
|
; HEAP STARTS AT END OF HBIOS |
|
|
|
LD HL,HCB + HCB_HEAP ; POINT TO HEAP START ADDRESS VARIABLE |
|
|
|
LD (HL),E ; SAVE LSB |
|
|
|
INC HL ; BUMP |
|
|
|
LD (HL),D ; SAVE MSB |
|
|
|
; |
|
|
|
; INIT HEAP TOP TO HEAP START |
|
|
|
LD HL,HCB + HCB_HEAPTOP ; POINT TO HEAP TOP ADDRESS VARIABLE |
|
|
|
LD (HL),E ; SAVE LSB |
|
|
|
INC HL ; BUMP |
|
|
|
LD (HL),D ; SAVE MSB |
|
|
|
; |
|
|
|
; INITIALIZE POINTERS |
|
|
|
LD HL,HB_END ; HEAP FOLLOWS HBIOS CODE |
|
|
|
LD (CB_HEAP),HL ; INIT HEAP BASE ADDRESS |
|
|
|
LD (CB_HEAPTOP),HL ; INIT HEAP TOP ADDRESS |
|
|
|
; CLEAR HEAP |
|
|
|
LD HL,HB_END ; START OF HEAP |
|
|
|
LD BC,BNKTOP - HB_END ; MAX SIZE OF HEAP |
|
|
|
LD A,$FF ; FILL WITH $FF |
|
|
|
CALL FILL ; DO IT |
|
|
|
@ -650,7 +713,7 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK |
|
|
|
; VIA HBIOS. |
|
|
|
; |
|
|
|
XOR A ; CONSOLE DEVICE IS UNIT #0 BY FIAT |
|
|
|
LD (HCB + HCB_CONDEV),A ; SAVE IT, ACTIVATES CONSOLE ON HBIOS |
|
|
|
LD (CB_CONDEV),A ; SAVE IT, ACTIVATES CONSOLE ON HBIOS |
|
|
|
; |
|
|
|
; ANNOUNCE HBIOS |
|
|
|
; |
|
|
|
@ -659,7 +722,7 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK |
|
|
|
CALL NEWLINE2 |
|
|
|
PRTX(STR_PLATFORM) |
|
|
|
PRTS(" @ $") |
|
|
|
LD HL,(HCB + HCB_CPUKHZ) |
|
|
|
LD HL,(CB_CPUKHZ) |
|
|
|
CALL PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA |
|
|
|
PRTS("MHz ROM=$") |
|
|
|
LD HL,ROMSIZE |
|
|
|
@ -692,7 +755,7 @@ INITSYS1: |
|
|
|
; MARKS THE POINT IN THE HEAP AFTER WHICH MEMORY IS RELEASED |
|
|
|
; WHEN AN HBIOS RESET IS PEFORMED. |
|
|
|
; |
|
|
|
LD HL,(HCB + HCB_HEAPTOP) |
|
|
|
LD HL,(CB_HEAPTOP) |
|
|
|
LD (HEAPCURB),HL |
|
|
|
; |
|
|
|
; NOW SWITCH TO CRT CONSOLE IF CONFIGURED |
|
|
|
@ -714,8 +777,8 @@ INITSYS1: |
|
|
|
CALL NEWLINE |
|
|
|
; |
|
|
|
; SWITCH TO CRT CONSOLE |
|
|
|
LD A,(HCB + HCB_CRTDEV) ; GET CRT DISPLAY DEVICE |
|
|
|
LD (HCB + HCB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE |
|
|
|
LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE |
|
|
|
LD (CB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE |
|
|
|
; |
|
|
|
; DISPLAY HBIOS BANNER ON NEW CONSOLE |
|
|
|
PRTX(STR_BANNER) |
|
|
|
@ -920,7 +983,7 @@ CIO_DISPATCH: |
|
|
|
RET ; AND RETURN |
|
|
|
; |
|
|
|
CIO_DISPATCH_CON: |
|
|
|
LD A,(HCB + HCB_CONDEV) ; PUT CONSOLE UNIT NUMBER IN A |
|
|
|
LD A,(CB_CONDEV) ; PUT CONSOLE UNIT NUMBER IN A |
|
|
|
; FALL THRU |
|
|
|
; |
|
|
|
CIO_DISPATCH1: |
|
|
|
@ -1475,9 +1538,9 @@ SYS_GET: |
|
|
|
; DE: BOOT DISK VOLUME (UNIT/SLICE) |
|
|
|
; |
|
|
|
SYS_GETBOOTINFO: |
|
|
|
LD A,(HCB + HCB_BOOTBID) |
|
|
|
LD A,(CB_BOOTBID) |
|
|
|
LD L,A |
|
|
|
LD DE,(HCB + HCB_BOOTVOL) |
|
|
|
LD DE,(CB_BOOTVOL) |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -1489,9 +1552,9 @@ SYS_GETBOOTINFO: |
|
|
|
; |
|
|
|
SYS_GETCPUINFO: |
|
|
|
LD H,0 ; NOT YET DEFINED |
|
|
|
LD A,(HCB + HCB_CPUMHZ) |
|
|
|
LD A,(CB_CPUMHZ) |
|
|
|
LD L,A |
|
|
|
LD DE,(HCB + HCB_CPUKHZ) |
|
|
|
LD DE,(CB_CPUKHZ) |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -1512,9 +1575,9 @@ SYS_GETMEMINFO: |
|
|
|
; E: USER BANK ID |
|
|
|
; |
|
|
|
SYS_GETBNKINFO: |
|
|
|
LD A,(HCB + HCB_BIDBIOS) |
|
|
|
LD A,(CB_BIDBIOS) |
|
|
|
LD D,A |
|
|
|
LD A,(HCB + HCB_BIDUSR) |
|
|
|
LD A,(CB_BIDUSR) |
|
|
|
LD E,A |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
@ -1560,8 +1623,8 @@ SYS_SET: |
|
|
|
; |
|
|
|
SYS_SETBOOTINFO: |
|
|
|
LD A,L |
|
|
|
LD (HCB + HCB_BOOTBID),A |
|
|
|
LD (HCB + HCB_BOOTVOL),DE |
|
|
|
LD (CB_BOOTBID),A |
|
|
|
LD (CB_BOOTVOL),DE |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -1586,7 +1649,7 @@ SYS_POKE: |
|
|
|
; |
|
|
|
SYS_RESET: |
|
|
|
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD |
|
|
|
LD (HCB + HCB_HEAPTOP),HL ; RESTORE HEAP TOP |
|
|
|
LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
;; |
|
|
|
@ -1721,15 +1784,15 @@ HB_ALLOC: |
|
|
|
LD DE,4 ; SIZE OF HEADER |
|
|
|
ADD HL,DE ; ADD IT IN |
|
|
|
JR C,HB_ALLOC1 ; ERROR ON OVERFLOW |
|
|
|
LD DE,(HCB + HCB_HEAPTOP) ; CURRENT HEAP TOP |
|
|
|
LD DE,(CB_HEAPTOP) ; CURRENT HEAP TOP |
|
|
|
ADD HL,DE ; ADD IT IN, HL := NEW HEAP TOP |
|
|
|
JR C,HB_ALLOC1 ; ERROR ON OVERFLOW |
|
|
|
BIT 7,H ; TEST PAST END OF BANK (>= 32K) |
|
|
|
JR NZ,HB_ALLOC1 ; ERROR IF PAST END |
|
|
|
; |
|
|
|
; SAVE NEW HEAP TOP |
|
|
|
LD DE,(HCB + HCB_HEAPTOP) ; GET ORIGINAL HEAP TOP |
|
|
|
LD (HCB + HCB_HEAPTOP),HL ; SAVE NEW HEAP TOP |
|
|
|
LD DE,(CB_HEAPTOP) ; GET ORIGINAL HEAP TOP |
|
|
|
LD (CB_HEAPTOP),HL ; SAVE NEW HEAP TOP |
|
|
|
; |
|
|
|
; SET HEADER VALUES |
|
|
|
EX DE,HL ; HEADER ADR TO HL |
|
|
|
@ -1994,11 +2057,11 @@ HB_CPUSPD1: |
|
|
|
SLA L |
|
|
|
RL H |
|
|
|
; |
|
|
|
LD (HCB + HCB_CPUKHZ),HL |
|
|
|
LD (CB_CPUKHZ),HL |
|
|
|
LD DE,1000 |
|
|
|
CALL DIV16 |
|
|
|
LD A,C |
|
|
|
LD (HCB + HCB_CPUMHZ),A |
|
|
|
LD (CB_CPUMHZ),A |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -2247,7 +2310,7 @@ PS_PRTDC: |
|
|
|
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED) |
|
|
|
PRTS("MB$") ; PRINT SUFFIX |
|
|
|
CALL PC_COMMA |
|
|
|
PRTS(" LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
PS_PRTDC1: |
|
|
|
@ -2261,7 +2324,7 @@ PS_PRTDC1: |
|
|
|
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED) |
|
|
|
PRTS("KB$") ; PRINT SUFFIX |
|
|
|
CALL PC_COMMA |
|
|
|
PRTS(" LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
PS_PRTDC2: |
|
|
|
@ -2312,7 +2375,7 @@ PS_PRTDC2B: |
|
|
|
PS_PRTDC2C: |
|
|
|
CALL WRITESTR |
|
|
|
CALL PC_COMMA |
|
|
|
PRTS(" CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
|
|
|
; |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
@ -2430,17 +2493,17 @@ PS_PRTSC1: |
|
|
|
CALL PRTDECB ; PRINT IT |
|
|
|
CALL PC_COMMA |
|
|
|
#IF (VDAEMU == EMUTYP_TTY) |
|
|
|
PRTS(" TTY$") |
|
|
|
PRTS("TTY$") |
|
|
|
#ENDIF |
|
|
|
#IF (VDAEMU == EMUTYP_ANSI) |
|
|
|
PRTS(" ANSI$") |
|
|
|
PRTS("ANSI$") |
|
|
|
#ENDIF |
|
|
|
RET |
|
|
|
; |
|
|
|
PS_PRTSC2: |
|
|
|
PRTS("PropTerm$") ; ASSUME PROPELLER |
|
|
|
CALL PC_COMMA |
|
|
|
PRTS(" ANSI$") |
|
|
|
PRTS("ANSI$") |
|
|
|
RET |
|
|
|
; |
|
|
|
; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C |
|
|
|
@ -2663,7 +2726,7 @@ COUT: |
|
|
|
; |
|
|
|
; GET CURRENT CONSOLE UNIT |
|
|
|
LD E,A ; TEMPORARILY STASH OUTPUT CHAR IN E |
|
|
|
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
CP $FF ; TEST FOR $FF (HBIOS NOT READY) |
|
|
|
JR Z,COUT1 ; IF NOT READY, USE XIO |
|
|
|
; |
|
|
|
@ -2694,7 +2757,7 @@ CIN: |
|
|
|
PUSH DE |
|
|
|
PUSH HL |
|
|
|
; |
|
|
|
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
CP $FF ; TEST FOR $FF (HBIOS NOT READY) |
|
|
|
JR Z,CIN1 ; IF NOT READY, USE XIO |
|
|
|
; |
|
|
|
@ -2725,7 +2788,7 @@ CST: |
|
|
|
PUSH DE |
|
|
|
PUSH HL |
|
|
|
; |
|
|
|
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE |
|
|
|
CP $FF ; TEST FOR $FF (HBIOS NOT READY) |
|
|
|
JR Z,CST1 ; IF NOT READY, USE XIO |
|
|
|
; |
|
|
|
|