Browse Source

Finalize ROM-Less Booting

pull/287/head v3.1.1-pre.162
Wayne Warthen 4 years ago
parent
commit
7549789248
  1. BIN
      Doc/ROM Applications.pdf
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Architecture.pdf
  4. BIN
      Doc/RomWBW Disk Catalog.pdf
  5. BIN
      Doc/RomWBW Getting Started.pdf
  6. 2
      ReadMe.md
  7. 4
      ReadMe.txt
  8. 57
      Source/CBIOS/cbios.asm
  9. 1
      Source/CBIOS/config.asm
  10. 59
      Source/CBIOS/util.asm
  11. 12
      Source/Doc/Architecture.md
  12. 58
      Source/HBIOS/hbios.asm
  13. 2
      Source/ver.inc
  14. 2
      Source/ver.lib

BIN
Doc/ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

2
ReadMe.md

@ -3,7 +3,7 @@
## Z80/Z180 System Software
Version 3.1 Pre-release
28 Feb 2022
21 Mar 2022
Wayne Warthen <wwarthen@gmail.com>

4
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

57
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

1
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
;

59
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
;

12
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
-----

58
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)

2
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"

2
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

Loading…
Cancel
Save