diff --git a/Doc/ROM Applications.pdf b/Doc/ROM Applications.pdf index 0eea282c..cabcf55c 100644 Binary files a/Doc/ROM Applications.pdf and b/Doc/ROM Applications.pdf differ diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 7b8f44ed..2f03b23c 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index f72f69b4..56c5def4 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index e204ef98..16622fc9 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 71978e42..56aff8a3 100644 Binary files a/Doc/RomWBW Getting Started.pdf and b/Doc/RomWBW Getting Started.pdf differ diff --git a/ReadMe.md b/ReadMe.md index b2abe703..8f8bbc8e 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ ## Z80/Z180 System Software Version 3.1 Pre-release -28 Feb 2022 +21 Mar 2022 Wayne Warthen diff --git a/ReadMe.txt b/ReadMe.txt index 5f17c6dc..70410157 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW Getting Started Wayne Warthen (mailto:wwarthen@gmail.com) -28 Feb 2022 +21 Mar 2022 @@ -17,7 +17,7 @@ RomWBW Z80/Z180 System Software Version 3.1 Pre-release -28 Feb 2022 +21 Mar 2022 Wayne Warthen wwarthen@gmail.com diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 197cee9c..e1e16b13 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -302,6 +302,13 @@ BOOT: ; STANDARD BOOT INVOCATION ;LD SP,STACK ; STACK FOR INITIALIZATION LD SP,CCP_LOC ; PUT STACK JUST BELOW CCP +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nCBIOS Starting...$" + CALL PRTSTRD + .DB "\r\nCopying INIT code to 0x8000...$" +#ENDIF ; ; COPY INITIALIZATION CODE TO RUNNING LOCATION $8000 LD HL,BUFPOOL @@ -311,6 +318,11 @@ BOOT: PUSH HL ; SAVE START ADR AGAIN FOR BELOW PUSH BC ; SAVE LENGTH FOR BELOW LDIR ; COPY THE CODE +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nClearing disk buffer...$" +#ENDIF ; ; CLEAR BUFFER POP BC ; RECOVER LENGTH @@ -320,10 +332,30 @@ BOOT: INC DE ; OFFSET DEST DEC BC ; REDUCE LEN BY ONE LDIR ; USE LDIR TO FILL +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nStarting INIT routine at 0x8000$" +#ENDIF ; CALL INIT ; PERFORM COLD BOOD ROUTINE +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nResetting CP/M...$" +#ENDIF CALL RESCPM ; RESET CPM +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nPerforming Auto Submit...$" +#ENDIF CALL AUTOSUB ; PREP AUTO SUBMIT, IF APPROPRIATE +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nLaunching CP/M...$" +#ENDIF ; JR GOCPM ; THEN OFF TO CP/M WE GO... ; @@ -444,6 +476,12 @@ GOCPM: CURDSK: LD A,(CDISK) ; GET CURRENT USER/DISK GOCCP: +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nTransfer to CCP...$" +#ENDIF +; LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK JP CCP_LOC ; JUMP TO COMMAND PROCESSOR ; @@ -2011,6 +2049,12 @@ BUFPOOL .EQU $ ; START OF BUFFER POOL HEAPEND .EQU CBIOS_END - 64 ; TOP OF HEAP MEM, END OF CBIOS LESS 32 ENTRY STACK ; INIT: +; +#IF DEBUG + CALL PRTSTRD + .DB "\r\nStarting INIT....$" +#ENDIF +; DI ; NO INTERRUPTS FOR NOW ; ADJUST BOOT VECTOR TO REBOOT ROUTINE @@ -2068,12 +2112,21 @@ INIT: LD (BNKBIOS),A ; ... AND SAVE IT LD A,E ; GET USER BANK RETURNED IN E LD (BNKUSER),A ; ... AND SAVE IT - +; + #IF DEBUG + CALL PRTSTRD + .DB "\r\nReseting HBIOS....$" + #ENDIF +; ; SOFT RESET HBIOS LD B,BF_SYSRESET ; HB FUNC: RESET LD C,BF_SYSRES_INT ; WARM START RST 08 ; DO IT - +; + #IF DEBUG + CALL PRTSTRD + .DB "\r\nCopying HCB....$" + #ENDIF ; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB) ; FOR REFERENCE USE DURING INIT LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY diff --git a/Source/CBIOS/config.asm b/Source/CBIOS/config.asm index 180feaeb..3df64569 100644 --- a/Source/CBIOS/config.asm +++ b/Source/CBIOS/config.asm @@ -4,6 +4,7 @@ CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS +DEBUG .EQU FALSE ; MISCELLANEOUS DEBUG TRACING ; CPM_LOC .EQU $D000 ; LOCATION OF START OF CCP ; diff --git a/Source/CBIOS/util.asm b/Source/CBIOS/util.asm index 1d32990e..3ef5e9e8 100644 --- a/Source/CBIOS/util.asm +++ b/Source/CBIOS/util.asm @@ -105,14 +105,61 @@ WRITESTR2: POP AF RET ; +#IF DEBUG +; +; PRINT A STRING AT ADDRESS SPECIFIED IN HL +; STRING MUST BE TERMINATED BY '$' +; USAGE: +; LD HL,MYSTR +; CALL PRTSTR +; ... +; MYSTR: .DB "HELLO$" +; +PRTSTR: + LD A,(HL) + INC HL + CP '$' + RET Z + CALL COUT + JR PRTSTR ; +; PRINT A STRING DIRECT: REFERENCED BY POINTER AT TOP OF STACK +; STRING MUST BE TERMINATED BY '$' +; USAGE: +; CALL PRTSTRD +; .DB "HELLO$" +; ... ; -TSTPT: - PUSH DE - LD DE,STR_TSTPT - CALL WRITESTR - POP DE - JR REGDMP ; DUMP REGISTERS AND RETURN +PRTSTRD: + EX (SP),HL + PUSH AF + CALL PRTSTR + POP AF + EX (SP),HL + RET +; +; PRINT A STRING INDIRECT: REFERENCED BY INDIRECT POINTER AT TOP OF STACK +; STRING MUST BE TERMINATED BY '$' +; USAGE: +; CALL PRTSTRI(MYSTRING) +; MYSTRING .DB "HELLO$" +; +PRTSTRI: + EX (SP),HL + PUSH AF + LD A,(HL) + INC HL + PUSH HL + LD H,(HL) + LD L,A + CALL PRTSTR + POP HL + INC HL + POP AF + EX (SP),HL + RET +; +#ENDIF ; ; PANIC: TRY TO DUMP MACHINE STATE ; diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index cff5522d..ed9a33e5 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -223,6 +223,18 @@ initialization routine. At this point, the prior HBIOS code has been discarded and overwritten. Finally, the Boot Loader is invoked just like a ROM Boot. +ROM-less Boot +------------- + +Some hardware supported by RomWBW has a special mechanism for loading +the initial code. These systems have no ROM chips. However, they +have a small hardware bootstrap that loads a chunk of code from a +disk device directlly into RAM at system startup. + +The startup then proceeds very much like the Application Boot +process described above. HBIOS is installed in it's operating bank +and control is passed to the loader. + Notes ----- diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 24cdd573..4382b343 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1530,21 +1530,51 @@ MBC_SINGLE: ; #ENDIF ; -; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE "APP" BANK TO -; TPA. IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE -; THE SOURCE OF THE APP BANK CODE MAY BE THE BANK THAT HBIOS WANTS TO -; USE AS IT'S FINAL LOCATION (PRIMARILY IN CASE OF RAMBOOT WHERE THE -; SYSTEM HAS THE MINIMUM 128KB OF RAM). +; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE PAYLOAD +; (LOADER, MONITOR, ZSDOS) THAT HAS BEEN LOADED TO PHYSICAL RAM +; BANKS 0 AND 1 TO THE USER TPA BANK TO RUN AFTER BOOT. +; IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE +; THE PAYLOAD MAY EXTEND INTO THE HBIOS OPERATING BANK. THIS +; HAPPENS PRIMARILY IN THE CASE WHERE THE +; SYSTEM HAS THE MINIMUM 128KB OF RAM. ; #IFDEF ROMBOOT #IF (ROMSIZE == 0) - LD A,(HB_CURBNK) + ; + ; THE PAYLOAD IS LIKELY TO CROSS OVER THE RAM BANK 0/1 + ; BOUNDARY. BNKCPY DOES NOT HANDLE THIS BECAUSE IT ASSUMES + ; THE COMMON BANK IS USED AFTER PASSING OVER THE BANK + ; BOUNDARY. WE WORK AROUND THAT HERE BY DOING TWO COPIES. + ; THE FIRST ONE HANDLES THE PORTION OF THE PAYLOAD FROM THE + ; END OF HBIOS TO THE BANK BOUNDARY ($8000). THE SECOND + ; ONE HANDLES THE PORTION THAT EXTENDS INTO THE SECOND + ; PHYSICAL RAM BANK. +; + ; COPY PORTION OF PAYLOAD FOLLOWING HBIOS TO THE BANK + ; BOUNDARY AT $8000 INTO START OF TPA. + LD A,BID_RAM0 LD (HB_SRCBNK),A LD A,BID_USR LD (HB_DSTBNK),A LD HL,HB_END LD DE,0 - LD BC,$8000 + LD BC,$8000-HB_END +; + #IF (MEMMGR == MM_Z280) + CALL Z280_BNKCPY + #ELSE + CALL HBX_BNKCPY + #ENDIF +; + ; COPY REMAINDER OF PAYLOAD EXTENDING INTO THE SECOND PHYSICAL + ; RAM BANK. NOTE THAT THE DESTINATION ADDRESS (DE) IS + ; ALREADY CORRECT FROM THE PRIOR COPY. + LD A,BID_RAM0+1 + LD (HB_SRCBNK),A + LD HL,$0000 + ; DE IS ALREADY CORRECT + LD BC,$8000-($8000-HB_END) +; #IF (MEMMGR == MM_Z280) CALL Z280_BNKCPY #ELSE @@ -3697,6 +3727,11 @@ SYS_RESINT: ; GO BACK TO ROM BOOT LOADER ; SYS_RESWARM: +; +#IF (ROMSIZE == 0) + JR SYS_RESCOLD +#ENDIF +; CALL SYS_RESINT ; #IF (MEMMGR == MM_Z280) @@ -3713,6 +3748,14 @@ SYS_RESWARM: ; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON ; SYS_RESCOLD: +; +#IF (ROMSIZE == 0) + LD DE,STR_RESTART + CALL Z,WRITESTR + DI + HALT +#ENDIF +; #IF (MEMMGR == MM_Z280) JP Z280_RESTART #ELSE @@ -7015,6 +7058,7 @@ STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$" STR_PANIC .TEXT "\r\n>>> PANIC: $" STR_SYSCHK .TEXT "\r\n>>> SYSCHK: $" STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $" +STR_RESTART .TEXT "\r\n\r\n>>> Press hardware reset button to restart system\r\n\r\n$" ; #IF (DSKYENABLE) ; 'H','B','I','O',' ',' ',' ',' ' #IF (DSKYMODE == DSKYMODE_V1) diff --git a/Source/ver.inc b/Source/ver.inc index 709318d5..d011272e 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.161" +#DEFINE BIOSVER "3.1.1-pre.162" diff --git a/Source/ver.lib b/Source/ver.lib index dd51943f..5fc0acbd 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.161" + db "3.1.1-pre.162" endm