diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 8cbf68c1..aa245aae 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -76,17 +76,6 @@ MEMTOP .EQU $10000 ; #IFDEF PLTUNA #INCLUDE "../UBIOS/ubios.inc" -; -; EQUATES BELOW SHOULD BE REPLACED WITH RUNTIME CALLS TO UNA GET BIOS INFO FUNCS -; -RAMSIZE .EQU 512 -; -BID_RAM0 .EQU $8000 -BID_RAMN .EQU (BID_RAM0 + ((RAMSIZE / 32) - 1)) -; -BID_RAMD0 .EQU BID_RAM0 ; FIRST RAM DRIVE BANK -BID_BIOS .EQU BID_RAMN - 2 ; BIOS BANK -BID_USR .EQU BID_RAMN - 1 ; USER BANK (CP/M TPA, ETC.) #ENDIF ; .ORG CBIOS_LOC ; DEFINED IN STD.ASM @@ -311,7 +300,6 @@ DPBCNT .EQU ($ - DPBMAP) / 2 BOOT: ; STANDARD BOOT INVOCATION LD SP,STACK ; STACK FOR INITIALIZATION - ; ; COPY INITIALIZATION CODE TO RUNNING LOCATION $8000 LD HL,BUFPOOL @@ -362,7 +350,7 @@ WBOOT: #IFDEF PLTUNA ; RESTORE COMMAND PROCESSOR FROM UNA BIOS CACHE LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_BIOS ; UBIOS_PAGE (SEE PAGES.INC) + LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) RST 08 ; DO IT PUSH DE ; SAVE PREVIOUS BANK @@ -1525,6 +1513,11 @@ BNKBIOS .DB 0 ; BIOS BANK ID BNKUSER .DB 0 ; USER BANK ID #ENDIF ; +#IFDEF PLTUNA +BNKBIOS .DW 0 ; BIOS BANK ID +BNKUSER .DW 0 ; USER BANK ID +#ENDIF +; ; DOS DISK VARIABLES ; DSKOP .DB 0 ; DISK OPERATION (DOP_READ/DOP_WRITE) @@ -1833,14 +1826,24 @@ INIT: LD (CBIOS_LOC + 1),HL ; STORE IT IN FIRST ENTRY OF CBIOS JUMP TABLE #IFDEF PLTUNA + ; GET CRITICAL BANK ID'S + LD BC,$03FA ; UNA FUNC = GET CUR EXEC ENV + CALL $FFFD ; DE = CUR EXEC PAGE, HL = UBIOS PAGE + LD (BNKBIOS),HL ; SAVE UBIOS PAGE + LD BC,$05FA ; UNA FUNC = GET USER EXEC ENV + CALL $FFFD ; DE = USER LOW PAGE, HL = USER HIGH PAGE (COMMMON) + LD (BNKUSER),DE ; SAVE USER PAGE + LD DE,$8000 ; RAM DRIVE STARTS AT FIRST RAM BANK + LD (BNKRAMD),DE ; SAVE STARTING RAM DRIVE BANK + ; MAKE SURE UNA EXEC PAGE IS ACTIVE LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_USR ; SWITCH BACK TO EXEC BANK + LD DE,(BNKUSER) ; SWITCH BACK TO EXEC BANK CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) ; COPY BIOS PAGE ZERO TO USER BANK LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_BIOS ; UBIOS_PAGE (SEE PAGES.INC) + LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) PUSH DE ; SAVE PREVIOUS BANK @@ -1863,6 +1866,7 @@ INIT: LD (8),A ; STORE AT 0x0008 LD HL,($FFFE) ; UNA ENTRY VECTOR LD (9),HL ; STORE AT 0x0009 + #ELSE ; GET CRITICAL BANK ID'S LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO @@ -1911,7 +1915,7 @@ INIT: LD (CCPBUF),HL ; SAVE THE ADDRESS (IN BIOS MEM) LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_BIOS ; UBIOS_PAGE (SEE PAGES.INC) + LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) RST 08 ; DO IT PUSH DE ; SAVE PREVIOUS BANK @@ -2201,7 +2205,7 @@ MD_INIT4: #IF (CLRRAMDISK != CLR_NEVER) DI ; NO INTERRUPTS LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_RAMD0 ; FIRST BANK OF RAM DISK + LD DE,(BNKRAMD) ; FIRST BANK OF RAM DISK CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) #IF (CLRRAMDISK == CLR_AUTO) @@ -2226,7 +2230,7 @@ CLRRAM1: CLRRAM2: #ENDIF LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_USR ; SWITCH BACK TO EXEC BANK FOR WRITESTR + LD DE,(BNKUSER) ; SWITCH BACK TO EXEC BANK FOR WRITESTR CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) CALL NEWLINE2 ; FORMATTING @@ -2234,7 +2238,7 @@ CLRRAM2: CALL WRITESTR ; DISPLAY IT LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_RAMD0 ; FIRST BANK OF RAM DISK + LD DE,(BNKRAMD) ; FIRST BANK OF RAM DISK CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) LD HL,0 ; SOURCE ADR FOR FILL @@ -2243,7 +2247,7 @@ CLRRAM2: CALL FILL ; DO IT CLRRAM3: LD BC,$01FB ; UNA FUNC = SET BANK - LD DE,BID_USR ; SWITCH BACK TO EXEC BANK + LD DE,(BNKUSER) ; SWITCH BACK TO EXEC BANK CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) EI ; RESUME INTERRUPTS @@ -2306,9 +2310,6 @@ CLRRAM3: #IFDEF PLTUNA ; DRV_INIT: - ; INIT DEFAULT DRIVE TO A: FOR NOW - XOR A ; ZERO - LD (DEFDRIVE),A ; STORE IT ; ; PERFORM UBIOS SPECIFIC INITIALIZATION ; BUILD DRVMAP BASED ON AVAILABLE UBIOS DISK DEVICE LIST @@ -2319,6 +2320,14 @@ DRV_INIT: LD D,L ; SAVE L AS UNIT LD E,0 ; SLICE IS ZERO LD (BOOTVOL),DE ; D -> UNIT, E -> SLICE +; + ; INIT DEFAULT + LD A,D ; BOOT UNIT? + CP 1 ; IF ROM BOOT, DEF DRIVE SHOULD BE B: + JR Z,DRV_INIT1 ; ... SO LEAVE AS IS AND SKIP AHEAD + XOR A ; ELSE FORCE TO DRIVE A: +DRV_INIT1: + LD (DEFDRIVE),A ; STORE IT ; ; SETUP THE DRVMAP STRUCTURE LD HL,(HEAPTOP) ; GET CURRENT HEAP TOP @@ -2366,6 +2375,14 @@ DRV_INIT5: LD A,E ; SLICES PER VOLUME VALUE TO ACCUM LD (HDSPV),A ; SAVE IT ; + LD DE,(BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) + LD A,1 ; ROM DISK UNIT? + CP D ; CHECK IT + JR Z,DRV_INIT5A ; IF SO, SKIP BOOT DRIVE + LD B,1 ; JUST ONE SLICE PLEASE + CALL DRV_INIT8A ; DO THE BOOT DEVICE +; +DRV_INIT5A: ; SETUP TO ENUMERATE DEVICES TO BUILD DRVMAP LD B,0 ; START WITH UNIT 0 ; @@ -2394,7 +2411,21 @@ DRV_INIT7: ; PROCESS CURRENT UNIT (SEE UNA PROTOIDS.INC) LD A,(HDSPV) ; GET SLICES PER VOLUME TO ACCUM LD B,A ; MOVE TO B FOR LOOP COUNTER ; -DRV_INIT8: ; SLICE CREATION LOOP +DRV_INIT8: + ; SLICE CREATION LOOP + ; DE=UNIT/SLICE, B=SLICE CNT + LD A,(BOOTVOL + 1) ; GET BOOT UNIT + CP 1 ; ROM BOOT? + JR Z,DRV_INIT8A ; IF SO, OK TO CONTINUE + CP D ; COMPARE TO CUR UNIT + JR NZ,DRV_INIT8A ; IF NE, OK TO CONTINUE + LD A,(BOOTVOL) ; GET BOOT SLICE + CP E ; COMPARE TO CUR SLICE + JR NZ,DRV_INIT8A ; IF NE, OK TO CONTINUE + INC E ; IS BOOT DU/SLICE, SKIP IT + JR DRV_INIT8 ; AND RESTART LOOP +; +DRV_INIT8A: ; ENTRY POINT TO SKIP BOOT DISK/LU CHECK ; ; INC DRVMAP ENTRY COUNT AND CHECK FOR 16 ENTRY MAXIMUM LD HL,(DRVMAPADR) ; POINT TO DRIVE MAP @@ -2546,7 +2577,7 @@ DRV_INIT5: ; LD B,E ; COUNT TO B ; LD C,0 ; USE C AS DEVICE LIST INDEX ; - LD DE,(HCB + HCB_BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) + LD DE,(BOOTVOL) ; BOOT VOLUME (UNIT, SLICE) LD A,1 ; ROM DISK UNIT? CP D ; CHECK IT JR Z,DRV_INIT5A ; IF SO, SKIP BOOT DRIVE @@ -3001,11 +3032,17 @@ DPHTOP .DW 0 ; CURRENT TOP OF DPH POOL DIRBUF .DW 0 ; DIR BUF POINTER HEAPTOP .DW BUFPOOL ; CURRENT TOP OF HEAP BOOTVOL .DW 0 ; BOOT VOLUME, MSB=BOOT UNIT, LSB=BOOT SLICE -BNKRAMD .DB 0 ; STARTING BANK ID FOR RAM DRIVE HDSPV .DB 2 ; SLICES PER VOLUME FOR HARD DISKS (MUST BE >= 1) DRVLST .FILL 32 ; ACTIVE DRIVE LIST USED DURINT DRV_INIT DRVLSTC .DB 0 ; ENTRY COUNT FOR ACTIVE DRIVE LIST ; +#IFDEF PLTWBW +BNKRAMD .DB 0 ; STARTING BANK ID FOR RAM DRIVE (WBW) +#ENDIF +#IFDEF PLTUNA +BNKRAMD .DW 0 ; STARTING BANK ID FOR RAM DRIVE (UNA) +#ENDIF +; CMD .DB CMDLEN - 2 .TEXT "SUBMIT PROFILE" .DB 0 diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 8da83d8e..844a1de4 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -737,6 +737,15 @@ GOBOOTDISK1: LD (BL_COUNT),A ; ... AND SAVE IT ; #IF (BIOS == BIOS_UNA) +; + ; START OS LOAD AT SECTOR 3 + LD C,$41 ; UNA FUNC: SET LBA + LD A,(BL_BOOTID) ; GET BOOT DEVICE ID + LD B,A ; MOVE TO B + LD DE,0 ; HI WORD OF LBA IS ALWAYS ZERO + LD HL,3 ; LOAD STARTING INFO SECTOR 2 + RST 08 ; SET LBA + JP NZ,DB_ERR ; HANDLE ERROR ; ; READ OS IMAGE INTO MEMORY LD C,$42 ; UNA FUNC: READ SECTORS