diff --git a/Source/HBIOS/Bank Layout.txt b/Source/HBIOS/Bank Layout.txt index a3a40d57..f7f957cb 100644 --- a/Source/HBIOS/Bank Layout.txt +++ b/Source/HBIOS/Bank Layout.txt @@ -43,8 +43,8 @@ Standard RAM Bank Layout (512K) Bank ID Usage ------- ------ 0x80 RomWBW HBIOS -0x81-0x88 RAM Disk Data (3) -0x89-0x8B App Banks (8) +0x81-0x88 RAM Disk Data (8) +0x89-0x8B App Banks (3) 0x8C CP/M 3 Buffers 0x8D CP/M 3 OS 0x8E User TPA diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 11176502..f9d85e8f 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1735,7 +1735,7 @@ ROMRESUME: ; ; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE ; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT. -; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBANK +; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = LOADBANK ; THERE IS NOTHING ON THE STACK AT THIS POINT SO, HERE, WE JUST RESET ; THE STACK TO HBX_LOC - 2. ; @@ -1757,7 +1757,7 @@ ROMRESUME: XOR A ; ZERO MEANS LOW BAT LD (HL),A ; FIRST RAM ACCESS INC A ; 1 MEANS BAT OK - LD (HL),A ; SECOND RAM ACCESS (BLOLCKED IF BATTERY ISSUE) + LD (HL),A ; SECOND RAM ACCESS (BLOCKED IF BATTERY ISSUE) ; ; INSTALL PROXY IN UPPER MEMORY ; @@ -1907,6 +1907,7 @@ MBC_SINGLE: ; COPY OURSELVES TO HBIOS BANK IN RAM ; LD A,(HB_CURBNK) ; GET CURRENT BANK ID + LD (HBX_LOC - 2),A ; SAVE THE LOAD BANK ; ; CHECK TO SEE IF WE ARE ALREADY RUNNING IN THE HBIOS RAM ; BANK AND SKIP THE COPY IF SO (DON'T COPY OVER OURSELVES). @@ -1914,7 +1915,7 @@ MBC_SINGLE: ; FULL RESTART OF A SYSTEM USING THE EXISTING HBIOS COPY. ; NOTE THAT THIS TEST WORKS BECAUSE BID_BIOS == BID_BOOT ; IN THESE SCENARIOS. - CP BID_BIOS ; SAVE AS BIOS BANK? + CP BID_BIOS ; SAME AS BIOS BANK? JR Z,HB_START1 ; IF SO, SKIP ; LD (HB_SRCBNK),A ; CURRENT BANK IS SOURCE @@ -1999,8 +2000,35 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK INC HL LD (HL),$4D #ENDIF +; + ; CHECK TO SEE IF THIS IS AN IN-PLACE RESTART. IF SO, + ; WE NEED TO SKIP THE COPY OF THE CONCATENATED OS IMAGES BELOW. + LD A,(HB_RAMFLAG) ; GET THE FLAG + OR A ; TEST IT + JR NZ,HB_START2 ; IF SET, SKIP + DEC A ; SET FLAG + LD (HB_RAMFLAG),A ; SAVE IT +; + ; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS + ; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER. + LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY + LD D,BID_AUX ; D = DEST BANK = AUX BANK + LD A,(HBX_LOC - 2) ; E = SRC BANK = LOAD BANK + LD E,A ; USE AS SOURCE + LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK + RST 08 ; DO IT + LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY + LD HL,HB_END ; COPY FROM END OF HBIOS + LD DE,0 ; TO START OF TARGET BANK + RST 08 ; DO IT + JR HB_START2 ; CONTINUE +; +HB_RAMFLAG .DB $00 +; #ENDIF ; +HB_START2: +; #IF FALSE ; ; POPULATE THE CRITICAL RAM BANK NUMBERS. @@ -8564,20 +8592,6 @@ STR_APPBOOT .DB "\r\n\r\n*** Launching RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP .DB "\r\n\r\n ", PLATFORM_NAME, "$" ; HB_APPBOOT2: - ; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS - ; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER. - ; THE AUX BANK WILL BE DESTROYED IF CP/M 3 IS LOADED. WE DON'T - ; LIVE IN A PERFECT WORLD. - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY - LD D,BID_AUX ; D = DEST BANK = AUX BANK - LD A,(HB_CURBNK) ; E = SRC BANK = CUR BANK - LD E,A ; USE AS SOURCE - LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK - RST 08 ; DO IT - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - LD HL,HB_END ; COPY FROM END OF HBIOS - LD DE,0 ; TO START OF TARGET BANK - RST 08 ; DO IT ; #IF (MEMMGR == MM_Z280) ; WE NEED TO SWITCH FROM USER MODE TO SYSTEM MODE, BUT CONTINUE @@ -8585,7 +8599,6 @@ HB_APPBOOT2: ; ; FIRST, OVERLAY PROXY CODE WITH FRESH CODE SO WE CAN USE THE ; PROXY ROUTINES SAFELY. - LD A,(HB_CURBNK) ; GET CURBNK LD DE,HBX_LOC ; RUNNING LOCATION LD HL,HBX_IMG ; LOCATION IN IMAGE @@ -8601,7 +8614,7 @@ HB_APPBOOT2: LDIR ; ; THEN SYSCALL IT. NOTE THAT THE ROUTINE CALLED DOES NOT - ; (RET)URN, IT JUMPS TO CONTINUE SO THAT THE SYSCALL DOES + ; (RET)URN, IT JUMPS TO HB_RESTART SO THAT THE SYSCALL DOES ; NOT RETURN TO USER MODE. SC HBX_BUF ; SYSCALL ROUTINE ; diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index f5444ee6..205a291e 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -17,6 +17,21 @@ ; F E D C B A 9 8 7 6 5 4 3 2 1 0 ; -- MCR -- -- LCR -- ; +; STANDARD UART BASE I/O ADDRESSES: +; - ECB SBC Z80 $68 +; - ECB CASSETTE $80 +; - ECB 4UART $C0,$C8,$D0,$D8 +; - ECB MFPIC $18 +; - ZETA $68 +; - DUODYNE Z80 $58 +; - DUODYNE SELFHOST $A8 +; - DUODYNE MULTI IO $70,$78 +; - NHYODYNE Z80 $68 +; - NHYODYNE DUART $80,$88 +; - RCBUS EPSER $A0,$A8 +; - RCBUS DUAL RS232 $80,$88 +; - EPITX $A0,$A8 +; - NABU $48 ; UART_DEBUG .EQU FALSE ;