From 0510a02447455ad85f814c43222da49d1bd993aa Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 17 Feb 2020 15:58:17 -0800 Subject: [PATCH] Load CP/M 3 from disk Includes updated SYSCOPY application to put loader image on system tracks. --- ReadMe.txt | 2 +- Source/Apps/SysCopy.asm | 139 +++++++++++++++++---- Source/BPBIOS/@WBW Issues.txt | 15 +++ Source/BPBIOS/Build.cmd | 2 + Source/BPBIOS/cboot-ww.z80 | 4 +- Source/BPBIOS/hbios.z80 | 62 ++++++++- Source/CBIOS/ver.inc | 2 +- Source/CPM22/loader.asm | 2 +- Source/CPM22/ver.inc | 2 +- Source/CPM3/Build.cmd | 28 +++-- Source/CPM3/Clean.cmd | 1 + Source/CPM3/biosldr.z80 | 21 ++-- Source/CPM3/ldropts.lib | 7 ++ Source/CPM3/loader.asm | 228 ++++++++++++++++++++++++++++++++++ Source/CPM3/optcmd.lib | 7 ++ Source/CPM3/optdsk.lib | 7 ++ Source/CPM3/ver.inc | 2 +- Source/HBIOS/romldr.asm | 2 +- Source/HBIOS/ver.inc | 2 +- Source/Images/Build.cmd | 8 +- Source/Images/d_bp.txt | 1 + Source/Images/d_cpm22.txt | 6 +- Source/Images/d_cpm3.txt | 1 + Source/Images/d_nzcom.txt | 7 +- Source/Images/d_zpm3.txt | 4 +- Source/Images/d_zsdos.txt | 6 +- Source/ZPM3/Build.cmd | 20 ++- Source/ZPM3/Clean.cmd | 3 + Source/ZPM3/loader.asm | 228 ++++++++++++++++++++++++++++++++++ Source/ZSDOS/ver.inc | 2 +- 30 files changed, 758 insertions(+), 63 deletions(-) create mode 100644 Source/BPBIOS/@WBW Issues.txt create mode 100644 Source/CPM3/ldropts.lib create mode 100644 Source/CPM3/loader.asm create mode 100644 Source/CPM3/optcmd.lib create mode 100644 Source/CPM3/optdsk.lib create mode 100644 Source/ZPM3/loader.asm diff --git a/ReadMe.txt b/ReadMe.txt index ecfc0831..a97cc170 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -7,7 +7,7 @@ *********************************************************************** Wayne Warthen (wwarthen@gmail.com) -Version 2.9.2-pre.29, 2020-02-08 +Version 2.9.2-pre.30, 2020-02-17 https://www.retrobrewcomputers.org/ RomWBW is a ROM-based implementation of CP/M-80 2.2 and Z-System for diff --git a/Source/Apps/SysCopy.asm b/Source/Apps/SysCopy.asm index ffb146bf..144f9536 100644 --- a/Source/Apps/SysCopy.asm +++ b/Source/Apps/SysCopy.asm @@ -1,6 +1,6 @@ ;=============================================================================== ; SysCopy - Copy System Image to/from reserved tracks of disk for RomWBW -; adaptation of CP/M 2.2 +; adaptation of CP/M 2.2 & CP/M 3 ;=============================================================================== ; ; Author: Wayne Warthen (wwarthen@gmail.com) @@ -16,6 +16,7 @@ ; ; Change Log: ; 2016-04-24 [WBW] Updated to preserve MBR partition table +; 2020-02-17 [WBW] Updated for CP/M 3 ;_______________________________________________________________________________ ; ; ToDo: @@ -27,6 +28,9 @@ ; Definitions ;=============================================================================== ; +false .equ 0 ; define true +true .equ ~false ; define false +; stksiz .equ $40 ; we are a stack pig ; restart .equ $0000 ; CP/M restart vector @@ -86,6 +90,18 @@ main: init: ; add check for RomWBW? ; + ; get OS version + ld c,12 ; BDOS get os version + call bdos ; do it, L=version + cp $30 ; Test for v3.0 + jr c,init1 ; if <, pre v3.0 + ld a,true ; OS v3.0 or above + ld (v3os),a ; save it + jr init2 +init1: + ld a,false ; OS < v3.0 + ld (v3os),a ; save it +init2: ; locate cbios function table address ld hl,(restart+1) ; load address of CP/M restart vector ld de,-3 ; adjustment for start of table @@ -96,6 +112,20 @@ init: call bdos ; invoke BDOS function inc a ; 1-based index for fcb ld (defdrv),a ; save it + ; print version banner + call crlf ; formatting + ld de,msgban1 ; point to version message part 1 + call prtstr ; print it + ld a,(v3os) ; get OS version flag + or a ; set flags + ld de,msgv2 ; point to V2 mode message + call z,prtstr ; if V2, say so + ld de,msgv3 ; point to V3 mode message + call nz,prtstr ; if V3, say so + call crlf ; formatting + ld de,msgban2 ; point to version message part 2 + call prtstr ; print it + call crlf ; formatting ; return success xor a ret @@ -237,7 +267,7 @@ wrfil1: ; create target file ; write the image ld a,$15 ; setup for bdos write sequential ld (rwfun),a ; save bdos function - ld a,(imgsiz) ; number of records to read + ld a,(imgsiz) ; number of records to write ld (reccnt),a ; init record counter ld hl,imgbuf ; start of buffer ld (bufptr),hl ; init buffer pointer @@ -292,10 +322,8 @@ rddsk: call setdsk ; setup disk ret nz ; abort on error ; set function to read - ld hl,(cbftbl) ; get address of CBIOS function table - ld a,$27 ; $27 is CBIOS READ entry offset - call addhl ; set HL to resultant entry point - ld (actfnc),hl ; save it + ld a,13 ; CBIOS func 13: Read + ld (actfnc),a ; save it ; read the header ld a,12 ; start with 1536 byte header (12 records) ld (reccnt),a ; initialize record counter @@ -339,11 +367,10 @@ wrdsk: ld hl,mbrbuf ; override to read ld (bufptr),hl ; ... into MBR buffer ld a,4 ; 4 records = 1 512 byte sector + ld (reccnt),a ; initialize record counter ; set function to read - ld hl,(cbftbl) ; get address of CBIOS function table - ld a,$27 ; $27 is CBIOS READ entry offset - call addhl ; set HL to resultant entry point - ld (actfnc),hl ; save it + ld a,13 ; CBIOS func 13: Read + ld (actfnc),a ; save it ; read the existing MBR into memory call rwdsk ; read the sector ret nz ; abort on error @@ -366,10 +393,8 @@ wrdsk1: ; setup to write the image from memory to disk call setdsk ; setup disk ret nz ; abort on error ; set function to write - ld hl,(cbftbl) ; get address of CBIOS function table - ld a,$2A ; $2A is CBIOS WRITE entry offset - call addhl ; set HL to resultant entry point - ld (actfnc),hl ; save it + ld a,14 ; CBIOS func 14: Write + ld (actfnc),a ; save it ; setup the record count to write ld a,(imgsiz) ; get previously recorded image size ld (reccnt),a ; save it as pending record count @@ -399,7 +424,8 @@ setdsk: ld c,a ; move to c ld e,0 ; treat as first select call cbios ; invoke cbios with... - .db $1B ; SELDSK entry offset + ;.db $1B ; SELDSK entry offset + .db 9 ; SELDSK entry offset ; check return (sets HL to DPH address) ld a,h or l @@ -436,29 +462,47 @@ setdsk: ; Read or write (reccnt) sectors to/from disk via CBIOS ; rwdsk: + ld hl,128 ; assume rec len for < CP/M 3 + ld (reclen),hl ; and save it + ld a,(v3os) ; CP/M 3 or greater? + or a ; set flags + jr z,rwdsk0 ; if not, continue + ; adjust reccnt, logical (128) to physical (512) + ld a,(reccnt) ; get pending rec cnt + add a,3 ; round up + srl a ; shift to + srl a ; ... divide by 4 + ld (reccnt),a ; and resave it + ld hl,512 ; use physical rec len + ld (reclen),hl ; and save it +rwdsk0: ; setup to read/write a sector ld bc,(acttrk) ; get active track call cbios ; invoke cbios with... - .db $1E ; SETTRK entry offset + ;.db $1E ; SETTRK entry offset + .db 10 ; SETTRK entry offset ld bc,(actsec) ; get active sector call cbios ; invoke cbios with... - .db $21 ; SETSEC entry offset + ;.db $21 ; SETSEC entry offset + .db 11 ; SETSEC entry offset ld bc,(bufptr) ; get active buffer pointer call cbios ; invoke cbios with... - .db $24 ; SETDMA entry offset + ;.db $24 ; SETDMA entry offset + .db 12 ; SETDMA entry offset ; read/write sector ld a,(reccnt) ; get the pending record count dec a ; last record? ld c,2 ; allow cached writes by default jr nz,rwdsk1 ; not last record, continue ld c,1 ; last record, no caching please -rwdsk1: ld hl,(actfnc) ; load the CBIOS function vector - call jphl ; indirect call (read or write) +rwdsk1: + ld a,(actfnc) + call cbiosfn or a ; set flags on return code jp nz,errio ; if not zero, error abort ; adjust buffer pointer ld hl,(bufptr) ; get buffer pointer - ld de,128 ; record length is 128 bytes + ld de,(reclen) ; get rec len add hl,de ; adjust buffer ptr for next record ld (bufptr),hl ; save it ; next sector @@ -479,7 +523,7 @@ rwdsk1: ld hl,(actfnc) ; load the CBIOS function vector rwdsk2: ld hl,reccnt dec (hl) ; decrement pending record count ret z ; if zero, done, return with Z set - jr rwdsk ; otherwise, loop + jr rwdsk0 ; otherwise, loop ; jphl: jp (hl) ; indirect jump ; @@ -656,6 +700,15 @@ chkfcb4: or a ; set flags ret ; +; Print dot +; +prtdot: + push af + ld a,'.' + call prtchr + pop af + ret +; ; Print character in A without destroying any registers ; prtchr: @@ -775,13 +828,37 @@ delim1: ; cbios: ex (sp),hl - ld a,(hl) ; get the function offset + ld a,(hl) ; get the function number inc hl ; point past value following call instruction ex (sp),hl ; put address back at top of stack and recover HL + +cbiosfn: + ; enter here if function already in reg A + ld (bpb_fn),a ; save function +; + ld a,(v3os) ; CP/M 3 or greater? + or a ; set flags + jr nz,cbios2 ; if >= V3, handle it +; + ; CBIOS call for CP/M < v3 + ld a,(bpb_fn) ; get pending function number + ld l,a ; function number to L + add a,l ; ... and multiply by 3 for + add a,l ; ... jump table offset ld hl,(cbftbl) ; address of CBIOS function table to HL call addhl ; determine specific function address jp (hl) ; invoke CBIOS ; +cbios2: + ; CBIOS call for CP/M v3 or greater + ld (bpb_bc),bc + ld (bpb_de),de + ld (bpb_hl),hl + + ld c,50 ; direct bios call function number + ld de,bpb ; BIOS parameter block + jp bdos ; return via BDOS call +; ; Add the value in A to HL (HL := HL + A) ; addhl: @@ -862,10 +939,24 @@ actdsk .db 0 ; active disk no acttrk .dw 0 ; active track actsec .dw 0 ; active sector actspt .dw 0 ; active sectors per track -actfnc .dw 0 ; active function (read or write) +actfnc .db 0 ; active cbios i/o function (read or write) +v3os .db 0 ; true ($FF) if OS v3.0 or greater +reclen .dw 0 ; active record length +; +bpb: ; BIOS parameter block for CP/M 3 BIOS calls +bpb_fn .db 0 ; function +bpb_a .db 0 ; reg A +bpb_bc .dw 0 ; reg BC +bpb_de .dw 0 ; reg DE +bpb_hl .dw 0 ; reg HL ; ; Messages ; +msgban1 .db "SYSCOPY v2.0 for RomWBW CP/M, 17-Feb-2020$" +msgv2 .db " (CP/M 2 Mode)$" +msgv3 .db " (CP/M 3 Mode)$" +msgban2 .db "Copyright 2020, Wayne Warthen, GNU GPL v3$" + msguse .db "Usage: SYSCOPY [=]$" msgamb .db "Ambiguous file specification not allowed$" msgdlm .db "Invalid delimiter$" diff --git a/Source/BPBIOS/@WBW Issues.txt b/Source/BPBIOS/@WBW Issues.txt new file mode 100644 index 00000000..f7d12f4c --- /dev/null +++ b/Source/BPBIOS/@WBW Issues.txt @@ -0,0 +1,15 @@ +Loader uses CBIOS Disk I/O prior to CBOOT/WBOOT being run. As a +result, DIOBUF is not properly initialized. At present, it is +initialized to $7C00 which will work unless the location of the +physical disk buffer in HBIOS ever changes! + +The clock drivers supplied with BPBIOS (LDDS, LDP2D, and LDNZT) +load into ZSYS user memory. If the user segment is not at the +same location as the original BPBIOS ($E900), then the clock +driver will just overlay other code. At present, the N config +is OK because it does not relocate the user segment, but the T +config fails because it uses a user segment at $E700. Note that +this does not affect ZSDOS2 variants because they do not require +a loadable clock driver. + +BPBIOS needs to assign disk units dynamically via discovery of disk type diff --git a/Source/BPBIOS/Build.cmd b/Source/BPBIOS/Build.cmd index 76a44e01..54186541 100644 --- a/Source/BPBIOS/Build.cmd +++ b/Source/BPBIOS/Build.cmd @@ -59,6 +59,8 @@ rem if exist bpbio-ww.rel del bpbio-ww.rel zx ZMAC -BPBIO-WW -/P if exist bp%VER%.prn del bp%VER%.prn ren bpbio-ww.prn bp%VER%.prn +ren bpbio-ww.err bp%VER%.err +copy bpbio-ww.rel bp%VER%.rel rem pause diff --git a/Source/BPBIOS/cboot-ww.z80 b/Source/BPBIOS/cboot-ww.z80 index ce08a842..3febd543 100644 --- a/Source/BPBIOS/cboot-ww.z80 +++ b/Source/BPBIOS/cboot-ww.z80 @@ -304,7 +304,7 @@ MEMOK: IF MOVCPM ; Space is critical for boot tracks DEFB CR,LF,'P112 - ' ; Save all bytes possible ELSE ; Otherwise sign on with complete name - DEFB CR,LF,'D-X Designs P112 - ' + DEFB CR,LF,'RomWBW - ' ENDIF DEFB 'B/P 50.00k Bios' ;**** Do NOT alter this string **** @@ -322,7 +322,7 @@ MEMOK: DEFB ' ZCPR3+ Env' IF CLOCK IF DS1202 - DEFB CR,LF,' Dallas DS-1202 Clock, ' + DEFB CR,LF,' RomWBW HBIOS Clock, ' IF CLKSET DEFB 'with ' ELSE diff --git a/Source/BPBIOS/hbios.z80 b/Source/BPBIOS/hbios.z80 index 7899f6aa..c8671c87 100644 --- a/Source/BPBIOS/hbios.z80 +++ b/Source/BPBIOS/hbios.z80 @@ -115,7 +115,7 @@ HBX_INIT: LD (HB_SRCBNK),A LD (HB_DSTBNK),A - IF BANKED + IF BANKED ; Copy vectors from TPA page zero to SYS page zero LD BC,(TPABNK) ; C := TPABNK, B := SYSBNK @@ -127,8 +127,68 @@ HBX_INIT: LD A,(TPABNK) ; Set all Bank regs to TPA ENDIF + +; CSEG +;ORG_CSEG EQU $ +; DSEG +;ORG_DSEG EQU $ + IF BANKED + COMMON /BANK2/ +ORG_BANK2 EQU $ + COMMON /B2RAM/ +ORG_B2RAM EQU $ + ENDIF + + CSEG + + CALL NEWLINE2 + LD DE,HB_STR_TAG + CALL WRITESTR + + IF INTPXY + LD DE,HB_STR_INTPXY + ELSE + LD DE,HB_STR_EXTPXY + ENDIF + CALL WRITESTR + + CALL NEWLINE + LD DE,HB_STR_CSEG + CALL WRITESTR + LD BC,BIOSJT + CALL PRTHEXWORD + LD DE,HB_STR_DSEG + CALL WRITESTR + LD BC,CBOOT + CALL PRTHEXWORD + + IF BANKED + LD DE,HB_STR_BANK2 + CALL WRITESTR + LD BC,ROMJT + CALL PRTHEXWORD + LD DE,HB_STR_B2RAM + CALL WRITESTR + LD BC,CBOOT0 + CALL PRTHEXWORD + LD DE,HB_STR_RESVD + CALL WRITESTR + LD BC,ALV$50 + CALL PRTHEXWORD + ENDIF + + CALL NEWLINE RET + +HB_STR_TAG DB "HBIOS: $" +HB_STR_INTPXY DB "Internal Proxy$" +HB_STR_EXTPXY DB "External Proxy$" +HB_STR_CSEG DB "CSEG=$" +HB_STR_DSEG DB ", DSEG=$" +HB_STR_BANK2 DB ", BANK2=$" +HB_STR_B2RAM DB ", B2RAM=$" +HB_STR_RESVD DB ", RESVD=$" HBX_XCOPY: LD A,C diff --git a/Source/CBIOS/ver.inc b/Source/CBIOS/ver.inc index b65ec245..5861831f 100644 --- a/Source/CBIOS/ver.inc +++ b/Source/CBIOS/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 9 #DEFINE RUP 2 #DEFINE RTP 0 -#DEFINE BIOSVER "2.9.2-pre.29" +#DEFINE BIOSVER "2.9.2-pre.30" diff --git a/Source/CPM22/loader.asm b/Source/CPM22/loader.asm index 27dc735c..93cac556 100644 --- a/Source/CPM22/loader.asm +++ b/Source/CPM22/loader.asm @@ -1,5 +1,5 @@ ;=============================================================================== -; BL.ASM +; LOADER.ASM ; ; BOOTLOADER FOR ROMWBW DISK OPERATING SYSTEMS. ; diff --git a/Source/CPM22/ver.inc b/Source/CPM22/ver.inc index b65ec245..5861831f 100644 --- a/Source/CPM22/ver.inc +++ b/Source/CPM22/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 9 #DEFINE RUP 2 #DEFINE RTP 0 -#DEFINE BIOSVER "2.9.2-pre.29" +#DEFINE BIOSVER "2.9.2-pre.30" diff --git a/Source/CPM3/Build.cmd b/Source/CPM3/Build.cmd index f70ec6d2..003bd7eb 100644 --- a/Source/CPM3/Build.cmd +++ b/Source/CPM3/Build.cmd @@ -3,25 +3,31 @@ setlocal set TOOLS=../../Tools -set PATH=%TOOLS%\zx;%TOOLS%\cpmtools;%PATH% +set PATH=%TOOLS%\tasm32;%TOOLS%\zx;%TOOLS%\cpmtools;%PATH% + +set TASMTABS=%TOOLS%\tasm32 set ZXBINDIR=%TOOLS%/cpm/bin/ set ZXLIBDIR=%TOOLS%/cpm/lib/ set ZXINCDIR=%TOOLS%/cpm/include/ -rem cmd - -rem CPM Loader echo. echo. echo *** CPM Loader *** echo. zx RMAC -CPMLDR +copy optdsk.lib ldropts.lib zx Z80ASM -BIOSLDR/MF -zx LINK -CPMLDR[L100]=CPMLDR,BIOSLDR +move /Y biosldr.rel biosldrd.rel +zx LINK -CPMLDRD[L100]=CPMLDR,BIOSLDRD +move /Y cpmldrd.com cpmldr.bin +copy optcmd.lib ldropts.lib +zx Z80ASM -BIOSLDR/MF +move /Y biosldr.rel biosldrc.rel +zx LINK -CPMLDRC[L100]=CPMLDR,BIOSLDRC +move /Y cpmldrc.com cpmldr.com rem pause -rem Resident CPM3 echo. echo. echo *** Resident CPM3 BIOS *** @@ -41,7 +47,6 @@ zx GENCPM -AUTO -DISPLAY copy cpm3.sys cpm3res.sys rem pause -rem Banked CPM3 echo. echo. echo *** Banked CPM3 BIOS *** @@ -61,7 +66,6 @@ zx GENCPM -AUTO -DISPLAY copy cpm3.sys cpm3bnk.sys rem pause -rem Banked ZPM3 echo. echo. echo *** Banked ZPM3 BIOS *** @@ -82,9 +86,17 @@ rem copy cpm3.sys zpm3.sys rem pause rem *** Resident *** + rem copy cpm3res.sys cpm3.sys rem copy genres.dat getcpm.dat rem *** Banked *** + copy cpm3bnk.sys cpm3.sys copy genbnk.dat gencpm.dat + +rem Loader + +tasm -t80 -g3 -fFF loader.asm loader.bin loader.lst + +copy /b loader.bin + cpmldr.bin cpmldr.sys diff --git a/Source/CPM3/Clean.cmd b/Source/CPM3/Clean.cmd index 02fa2692..677a89b1 100644 --- a/Source/CPM3/Clean.cmd +++ b/Source/CPM3/Clean.cmd @@ -10,5 +10,6 @@ if exist *.err del *.err if exist *.lst del *.lst if exist *.sym del *.sym if exist *.sys del *.sys +if exist *.bin del *.bin if exist gencpm.dat del gencpm.dat if exist options.lib del options.lib diff --git a/Source/CPM3/biosldr.z80 b/Source/CPM3/biosldr.z80 index 754dc299..60f0c047 100644 --- a/Source/CPM3/biosldr.z80 +++ b/Source/CPM3/biosldr.z80 @@ -1,4 +1,6 @@ + maclib ldropts.lib + maclib cpm3.lib cseg @@ -50,16 +52,13 @@ jp 0 ; reserved for future expansion boot: - ;ld bc,0F8E0h ; HBIOS func: get boot info - ;call 0FFF0h ; do it, D := boot unit - ;ld a,d ; move to A - ;ld (unit),a ; save it - ;ret + if cmdline + +boot1: ld (stksav),sp ld sp,stack -boot1: ld de,prompt call writestr @@ -86,12 +85,19 @@ boot1: ld l,0 ; Bank call 0FFF0h ; do it + else + ld bc,0F8E0h ; HBIOS func: get boot info + call 0FFF0h ; do it, D := boot unit + ld a,d ; move to A + ld (unit),a ; save it + + endif ld a,(unit) ; Get boot unit ld c,a ; put in C ld b,18h ; HBIOS Media function - ld e,1 ; Enabled media check/discovery + ld e,1 ; Enable media check/discovery call 0FFF0H ; HBIOS call ld a,e ; Resultant media id to accum or a ; Set flags @@ -110,7 +116,6 @@ dsk$login1: ; hl is ptr to desired dpb ld de,dph0 ; load DPH pointer - ;halt ex de,hl ; de = DPB adr, hl = DPH adr push de ; save DPB adr ld de,12 ; offset of DPB in DPH diff --git a/Source/CPM3/ldropts.lib b/Source/CPM3/ldropts.lib new file mode 100644 index 00000000..3f74e713 --- /dev/null +++ b/Source/CPM3/ldropts.lib @@ -0,0 +1,7 @@ + ; global assembler options for CP/M loader + ; when loading from a command line + +true equ -1 +false equ not true + +cmdline equ true diff --git a/Source/CPM3/loader.asm b/Source/CPM3/loader.asm new file mode 100644 index 00000000..982f7205 --- /dev/null +++ b/Source/CPM3/loader.asm @@ -0,0 +1,228 @@ +;=============================================================================== +; LOADER.ASM +; +; BOOTLOADER FOR ROMWBW DISK OPERATING SYSTEMS. +; +; CP/M DISK FORMATS ALLOW FOR RESERVED TRACKS THAT CONTAIN AN IMAGE OF THE +; OPERATING SYSTEM TO BE LOADED WHEN THE DISK IS BOOTED. THE OPERATING SYSTEM +; IMAGE ITSELF IS NORMALLY PREFIXED BY A 1-N SECTORS CONTAINING OS BOOTSTRAP +; CODE AND DISK METADATA. +; +; THE RETROBREW COMPUTING GROUP HAS BEEN USING A CONVENTION OF PREFIXING THE +; OS IMAGE WITH 3 SECTORS (512 BYTES X 3 FOR A TOTAL OF 1536 BYTES): +; +; SECTOR 1: IBM-PC STYLE BOOT BLOCK CONTAINING BOOTSTRAP, +; PARTITION TABLE, AND BOOT SIGNATURE +; SECTOR 2: RESERVED +; SECTOR 3: METADATA +; +; THE HARDWARE BIOS IS EXPECTED TO READ AND LOAD THE FIRST TWO SECTORS FROM THE +; DISK TO MEMORY ADDRESS $8000 AND JUMP TO THAT LOCATION TO BEGIN THE BOOT +; PROCESS. THE BIOS IS EXPECTED TO VERIFY THAT A STANDARD BOOT SIGNATURE +; OF $55, $AA IS PRESENT AT OFFSET $1FE-$1FF. IF THE SIGNATURE IS NOT FOUND, +; THE BIOS SHOULD ASSUME THE DISK HAS NOT BEEN PROPERLY INITIALIZED AND SHOULD +; NOT JUMP TO THE LOAD ADDRESS. +; +;=============================================================================== +; +#INCLUDE "../HBIOS/ver.inc" +; +SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS +SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE +SYS_END .EQU $1480 ; ENDING ADDRESS OF SYSTEM IMAGE +; +BYT .EQU 1 ; used to describe METADATA_SIZE below +WRD .EQU 2 +; +SECTOR_SIZE .EQU 512 +BLOCK_SIZE .EQU 128 +PREFIX_SIZE .EQU (3 * SECTOR_SIZE) ; 3 SECTORS +METADATA_SIZE .EQU BYT+WRD+(4*BYT)+16+BYT+WRD+WRD+WRD+WRD ; (as defined below) +; +PARTTBL_LOC .EQU $1BE +PARTTBL_SIZ .EQU $40 +BOOTSIG_LOC .EQU $1FE +; +;------------------------------------------------------------------------------- +; SECTOR 1 +; +; THIS SECTOR FOLLOWS THE CONVENTIONS OF AN IBM-PC MBR CONTAINING THE OS +; BOOTSTRAP CODE, PARTITION TABLE, AND BOOT SIGNATURE +; +;---------------------------------------------------------------------------- +; +; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING +; ADDRESS OF $8000. +; + .ORG $8000 + JR BOOT +; +BOOT: + LD DE,STR_LOAD ; LOADING STRING + CALL PRTSTR ; PRINT + CALL PRTDOT ; PROGRESS +; + LD BC,$00FC ; UNA FUNC: GET BOOTSTRAP HISTORY + CALL $FFFD ; CALL UNA + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS + LD B,L ; MOVE BOOT UNIT ID TO B +; + LD C,$41 ; UNA FUNC: SET LBA + LD DE,0 ; HI WORD ALWAYS ZERO + LD HL,3 ; IMAGE STARTS AT FOURTH SECTOR + CALL $FFFD ; SET LBA + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS +; + LD C,$42 ; UNA FUNC: READ SECTORS + LD DE,$D000 ; STARTING ADDRESS FOR IMAGE + LD L,22 ; READ 22 SECTORS + CALL $FFFD ; DO READ + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS +; + LD DE,STR_DONE ; DONE MESSAGE + CALL PRTSTR ; PRINT IT +; + LD D,B ; PASS BOOT UNIT TO OS + LD E,0 ; ASSUME LU IS ZERO + JP SYS_ENT ; GO TO SYSTEM +; +PRTCHR: + PUSH BC + PUSH DE + LD BC,$0012 ; UNIT 0, WRITE CHAR + LD E,A ; CHAR TO PRINT + CALL $FFFD ; PRINT + POP DE + POP BC + RET +; +PRTSTR: + PUSH BC + PUSH HL + LD BC,$0015 ; UNIT 0, WRITE CHARS UNTIL TERMINATOR + LD L,0 ; TERMINATOR IS NULL + CALL $FFFD ; PRINT + POP HL + POP BC + RET +; +PRTDOT: + LD A,'.' ; DOT CHARACTER + JR PRTCHR ; PRINT AND RETURN +; +; PRINT THE HEX BYTE VALUE IN A +; +PRTHEXBYTE: + PUSH AF + PUSH DE + CALL HEXASCII + LD A,D + CALL PRTCHR + LD A,E + CALL PRTCHR + POP DE + POP AF + RET +; +; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE +; +HEXASCII: + LD D,A + CALL HEXCONV + LD E,A + LD A,D + RLCA + RLCA + RLCA + RLCA + CALL HEXCONV + LD D,A + RET +; +; CONVERT LOW NIBBLE OF A TO ASCII HEX +; +HEXCONV: + AND 0FH ;LOW NIBBLE ONLY + ADD A,90H + DAA + ADC A,40H + DAA + RET +; +ERROR: + LD DE,STR_ERR ; POINT TO ERROR STRING + CALL PRTSTR ; PRINT IT + HALT ; HALT +; +; DATA +; +STR_LOAD .DB "\r\nLoading",0 +STR_DONE .DB "\r\n",0 +STR_ERR .DB " Read Error!",0 +; + .ORG $ - $8000 ; RESTORE ORG + .FILL PARTTBL_LOC - $ ; FILL TO START OF PARTITION TABLE +; +; RESERVE SPACE FOR STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A +; PARTITION TABLE IS NOT RELEVANT FOR A FLOPPY DISK, IT DOES NO HARM. +; THE CONTENTS OF THE PARTITION TABLE MUST BE MANAGED BY FDISK80. +; +PARTTBL .FILL PARTTBL_SIZ,$00 ; PARTITION TABLE, FILL WITH ZEROES +; +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT +; SIGNATURE. +; +BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE +; +;------------------------------------------------------------------------------- +; SECTOR 2 +; +; THIS SECTOR HAS NOT BEEN DEFINED AND IS RESERVED. +; +;---------------------------------------------------------------------------- +; + .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES +; +;------------------------------------------------------------------------------- +; SECTOR 3 +; +; OS AND DISK METADATA +; +;---------------------------------------------------------------------------- +; + .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED +; +; THE FOLLOWING TWO BYTES ARE AN ADDITIONAL SIGNATURE THAT IS VERIFIED BY +; SOME HARDWARE BIOSES. +; +PR_SIG .DB $5A,$A5 ; SIGNATURE GOES HERE +; +; FIRST CHUNK OF METADATA IMMEDIATELY FOLLOWS THE SIGNATURE BYTES +; +PR_PLATFORM .DB 0 ; PLATFORM ID (SEE STD.ASM) +PR_DEVICE .DB 0 ; ? (PROBABLY UNUSED) +PR_FORMATTER .DB 0,0,0,0,0,0,0,0 ; ? (PROBABLY UNUSED) +PR_DRIVE .DB 0 ; ? (PROBABLY UNUSED) +PR_LOG_UNIT .DW 0 ; ? (PROBABLY UNUSED) +; +; FILLER TO PLACE SECOND CHUNK OF METADATA AT THE END OF THE SECTOR +; + .FILL ((PREFIX_SIZE - METADATA_SIZE) - $),00H +; +; SECOND CHUNK OF METADATA +; +PR_WP .DB 0 ; WRITE PROTECT BOOLEADN +PR_UPDSEQ .DW 0 ; PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; DEPRECATED +PR_LDLOC .DW SYS_LOC ; ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; ADDRESS TO ENTER SYSTEM (OS) +; +; +; + .END diff --git a/Source/CPM3/optcmd.lib b/Source/CPM3/optcmd.lib new file mode 100644 index 00000000..3f74e713 --- /dev/null +++ b/Source/CPM3/optcmd.lib @@ -0,0 +1,7 @@ + ; global assembler options for CP/M loader + ; when loading from a command line + +true equ -1 +false equ not true + +cmdline equ true diff --git a/Source/CPM3/optdsk.lib b/Source/CPM3/optdsk.lib new file mode 100644 index 00000000..c2caa8b3 --- /dev/null +++ b/Source/CPM3/optdsk.lib @@ -0,0 +1,7 @@ + ; global assembler options for CP/M loader + ; when loading from a boot disk + +true equ -1 +false equ not true + +cmdline equ false diff --git a/Source/CPM3/ver.inc b/Source/CPM3/ver.inc index 2fc0ccc8..81bc5d9b 100644 --- a/Source/CPM3/ver.inc +++ b/Source/CPM3/ver.inc @@ -3,5 +3,5 @@ rmn equ 9 rup equ 2 rtp equ 0 biosver macro - db "2.9.2-pre.29" + db "2.9.2-pre.30" endm diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index c6be9084..5c416f9d 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -680,7 +680,7 @@ GOBOOTDISK: OR A ; CLEAR CARRY SBC HL,DE ; HL := LENGTH TO LOAD LD A,H ; DETERMINE 512 BYTE SECTOR COUNT - RRCA ; ... BY DIVIDING MSB BY TWO + RRA ; ... BY DIVIDING MSB BY TWO LD (BL_COUNT),A ; ... AND SAVE IT ; #IF (BIOS == BIOS_UNA) diff --git a/Source/HBIOS/ver.inc b/Source/HBIOS/ver.inc index b65ec245..5861831f 100644 --- a/Source/HBIOS/ver.inc +++ b/Source/HBIOS/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 9 #DEFINE RUP 2 #DEFINE RTP 0 -#DEFINE BIOSVER "2.9.2-pre.29" +#DEFINE BIOSVER "2.9.2-pre.30" diff --git a/Source/Images/Build.cmd b/Source/Images/Build.cmd index 86533ade..dd90673c 100644 --- a/Source/Images/Build.cmd +++ b/Source/Images/Build.cmd @@ -12,8 +12,8 @@ echo : call BuildFD.cmd cpm22 ..\cpm22\cpm_wbw.sys call BuildFD.cmd zsdos ..\zsdos\zsys_wbw.sys call BuildFD.cmd nzcom ..\zsdos\zsys_wbw.sys -call BuildFD.cmd cpm3 -call BuildFD.cmd zpm3 +call BuildFD.cmd cpm3 ..\cpm3\cpmldr.sys +call BuildFD.cmd zpm3 ..\cpm3\cpmldr.sys call BuildFD.cmd ws4 echo : @@ -22,8 +22,8 @@ echo : call BuildHD.cmd cpm22 ..\cpm22\cpm_wbw.sys call BuildHD.cmd zsdos ..\zsdos\zsys_wbw.sys call BuildHD.cmd nzcom ..\zsdos\zsys_wbw.sys -call BuildHD.cmd cpm3 -call BuildHD.cmd zpm3 +call BuildHD.cmd cpm3 ..\cpm3\cpmldr.sys +call BuildHD.cmd zpm3 ..\cpm3\cpmldr.sys call BuildHD.cmd ws4 if exist ..\BPBIOS\bpbio-ww.rel call BuildHD.cmd bp diff --git a/Source/Images/d_bp.txt b/Source/Images/d_bp.txt index 0a5b33c5..7e975ddd 100644 --- a/Source/Images/d_bp.txt +++ b/Source/Images/d_bp.txt @@ -25,6 +25,7 @@ # ../BPBIOS/*.img 0: ../BPBIOS/*.rel 0: +../BPBIOS/*.zrl 0: ../BPBIOS/*.zex 0: ../BPBIOS/myterm.z3t 0: ../BPBIOS/Z34RCP11/z34rcp11.rel 0:rcp.zrl diff --git a/Source/Images/d_cpm22.txt b/Source/Images/d_cpm22.txt index d26c8af9..9a68283c 100644 --- a/Source/Images/d_cpm22.txt +++ b/Source/Images/d_cpm22.txt @@ -19,4 +19,8 @@ # Add Tune application and sample files # ../../Binary/Apps/tune.com 3: -../../Binary/Apps/Tunes/*.* 3: \ No newline at end of file +../../Binary/Apps/Tunes/*.* 3: +# +# Add OS image +# +../CPM22/cpm_wbw.sys 0:cpm.sys diff --git a/Source/Images/d_cpm3.txt b/Source/Images/d_cpm3.txt index f5024061..30aaaba8 100644 --- a/Source/Images/d_cpm3.txt +++ b/Source/Images/d_cpm3.txt @@ -2,6 +2,7 @@ # Add files from CPM3 build # ../CPM3/cpmldr.com 0: +../CPM3/cpmldr.sys 0: ../CPM3/ccp.com 0: ../CPM3/gencpm.com 0: ../CPM3/genres.dat 0: diff --git a/Source/Images/d_nzcom.txt b/Source/Images/d_nzcom.txt index d26c8af9..88a07621 100644 --- a/Source/Images/d_nzcom.txt +++ b/Source/Images/d_nzcom.txt @@ -19,4 +19,9 @@ # Add Tune application and sample files # ../../Binary/Apps/tune.com 3: -../../Binary/Apps/Tunes/*.* 3: \ No newline at end of file +../../Binary/Apps/Tunes/*.* 3: +# +# Add OS images +# +../CPM22/cpm_wbw.sys 0:cpm.sys +../ZSDOS/zsys_wbw.sys 0:zsys.sys \ No newline at end of file diff --git a/Source/Images/d_zpm3.txt b/Source/Images/d_zpm3.txt index 04e86482..2fa29b58 100644 --- a/Source/Images/d_zpm3.txt +++ b/Source/Images/d_zpm3.txt @@ -2,7 +2,9 @@ # Add files from CPM3 build # ../ZPM3/zpmldr.com 0: -../ZPM3/cpmldr.com 0: +../ZPM3/zpmldr.sys 0: +../CPM3/cpmldr.com 0: +../CPM3/cpmldr.sys 0: ../ZPM3/autotog.com 0: ../ZPM3/clrhist.com 0: ../ZPM3/setz3.com 0: diff --git a/Source/Images/d_zsdos.txt b/Source/Images/d_zsdos.txt index d26c8af9..7d76c6fb 100644 --- a/Source/Images/d_zsdos.txt +++ b/Source/Images/d_zsdos.txt @@ -19,4 +19,8 @@ # Add Tune application and sample files # ../../Binary/Apps/tune.com 3: -../../Binary/Apps/Tunes/*.* 3: \ No newline at end of file +../../Binary/Apps/Tunes/*.* 3: +# +# Add OS image +# +../ZSDOS/zsys_wbw.sys 0:zsys.sys \ No newline at end of file diff --git a/Source/ZPM3/Build.cmd b/Source/ZPM3/Build.cmd index 4fa2b7a3..47018c83 100644 --- a/Source/ZPM3/Build.cmd +++ b/Source/ZPM3/Build.cmd @@ -3,7 +3,9 @@ setlocal set TOOLS=../../Tools -set PATH=%TOOLS%\zx;%TOOLS%\cpmtools;%PATH% +set PATH=%TOOLS%\tasm32;%TOOLS%\zx;%TOOLS%\cpmtools;%PATH% + +set TASMTABS=%TOOLS%\tasm32 set ZXBINDIR=%TOOLS%/cpm/bin/ set ZXLIBDIR=%TOOLS%/cpm/lib/ @@ -15,15 +17,19 @@ copy ..\ZCCP\startzpm.com . copy ..\CPM3\genbnk.dat . copy ..\CPM3\zpmbios3.spr bnkbios3.spr copy ..\CPM3\gencpm.com . -copy ..\CPM3\biosldr.rel . -copy ..\CPM3\cpmldr.com . +copy ..\CPM3\biosldrd.rel . +copy ..\CPM3\biosldrc.rel . +rem copy ..\CPM3\cpmldr.com . rem ZPM Loader echo. echo. echo *** ZPM Loader *** echo. -zx LINK -ZPMLDR[L100]=ZPM3LDR,BIOSLDR +zx LINK -ZPMLDRD[L100]=ZPM3LDR,BIOSLDRD +move /Y zpmldrd.com zpmldr.bin +zx LINK -ZPMLDRC[L100]=ZPM3LDR,BIOSLDRC +move /Y zpmldrc.com zpmldr.com rem pause rem Banked ZPM3 @@ -34,3 +40,9 @@ echo. copy genbnk.dat gencpm.dat zx gencpm -auto -display rem pause + +rem Loader + +tasm -t80 -g3 -fFF loader.asm loader.bin loader.lst + +copy /b loader.bin + zpmldr.bin zpmldr.sys diff --git a/Source/ZPM3/Clean.cmd b/Source/ZPM3/Clean.cmd index 91ffcb36..57295d69 100644 --- a/Source/ZPM3/Clean.cmd +++ b/Source/ZPM3/Clean.cmd @@ -16,3 +16,6 @@ if exist cpmldr.com del cpmldr.com if exist startzpm.com del startzpm.com if exist gencpm.com del gencpm.com if exist *.dat del *.dat +if exist biosldr?.rel del biosldr?.rel +if exist *.bin del *.bin +if exist *.lst del *.lst diff --git a/Source/ZPM3/loader.asm b/Source/ZPM3/loader.asm new file mode 100644 index 00000000..982f7205 --- /dev/null +++ b/Source/ZPM3/loader.asm @@ -0,0 +1,228 @@ +;=============================================================================== +; LOADER.ASM +; +; BOOTLOADER FOR ROMWBW DISK OPERATING SYSTEMS. +; +; CP/M DISK FORMATS ALLOW FOR RESERVED TRACKS THAT CONTAIN AN IMAGE OF THE +; OPERATING SYSTEM TO BE LOADED WHEN THE DISK IS BOOTED. THE OPERATING SYSTEM +; IMAGE ITSELF IS NORMALLY PREFIXED BY A 1-N SECTORS CONTAINING OS BOOTSTRAP +; CODE AND DISK METADATA. +; +; THE RETROBREW COMPUTING GROUP HAS BEEN USING A CONVENTION OF PREFIXING THE +; OS IMAGE WITH 3 SECTORS (512 BYTES X 3 FOR A TOTAL OF 1536 BYTES): +; +; SECTOR 1: IBM-PC STYLE BOOT BLOCK CONTAINING BOOTSTRAP, +; PARTITION TABLE, AND BOOT SIGNATURE +; SECTOR 2: RESERVED +; SECTOR 3: METADATA +; +; THE HARDWARE BIOS IS EXPECTED TO READ AND LOAD THE FIRST TWO SECTORS FROM THE +; DISK TO MEMORY ADDRESS $8000 AND JUMP TO THAT LOCATION TO BEGIN THE BOOT +; PROCESS. THE BIOS IS EXPECTED TO VERIFY THAT A STANDARD BOOT SIGNATURE +; OF $55, $AA IS PRESENT AT OFFSET $1FE-$1FF. IF THE SIGNATURE IS NOT FOUND, +; THE BIOS SHOULD ASSUME THE DISK HAS NOT BEEN PROPERLY INITIALIZED AND SHOULD +; NOT JUMP TO THE LOAD ADDRESS. +; +;=============================================================================== +; +#INCLUDE "../HBIOS/ver.inc" +; +SYS_ENT .EQU $0100 ; SYSTEM (OS) ENTRY POINT ADDRESS +SYS_LOC .EQU $0100 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE +SYS_END .EQU $1480 ; ENDING ADDRESS OF SYSTEM IMAGE +; +BYT .EQU 1 ; used to describe METADATA_SIZE below +WRD .EQU 2 +; +SECTOR_SIZE .EQU 512 +BLOCK_SIZE .EQU 128 +PREFIX_SIZE .EQU (3 * SECTOR_SIZE) ; 3 SECTORS +METADATA_SIZE .EQU BYT+WRD+(4*BYT)+16+BYT+WRD+WRD+WRD+WRD ; (as defined below) +; +PARTTBL_LOC .EQU $1BE +PARTTBL_SIZ .EQU $40 +BOOTSIG_LOC .EQU $1FE +; +;------------------------------------------------------------------------------- +; SECTOR 1 +; +; THIS SECTOR FOLLOWS THE CONVENTIONS OF AN IBM-PC MBR CONTAINING THE OS +; BOOTSTRAP CODE, PARTITION TABLE, AND BOOT SIGNATURE +; +;---------------------------------------------------------------------------- +; +; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING +; ADDRESS OF $8000. +; + .ORG $8000 + JR BOOT +; +BOOT: + LD DE,STR_LOAD ; LOADING STRING + CALL PRTSTR ; PRINT + CALL PRTDOT ; PROGRESS +; + LD BC,$00FC ; UNA FUNC: GET BOOTSTRAP HISTORY + CALL $FFFD ; CALL UNA + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS + LD B,L ; MOVE BOOT UNIT ID TO B +; + LD C,$41 ; UNA FUNC: SET LBA + LD DE,0 ; HI WORD ALWAYS ZERO + LD HL,3 ; IMAGE STARTS AT FOURTH SECTOR + CALL $FFFD ; SET LBA + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS +; + LD C,$42 ; UNA FUNC: READ SECTORS + LD DE,$D000 ; STARTING ADDRESS FOR IMAGE + LD L,22 ; READ 22 SECTORS + CALL $FFFD ; DO READ + JR NZ,ERROR ; HANDLE ERROR + CALL PRTDOT ; PROGRESS +; + LD DE,STR_DONE ; DONE MESSAGE + CALL PRTSTR ; PRINT IT +; + LD D,B ; PASS BOOT UNIT TO OS + LD E,0 ; ASSUME LU IS ZERO + JP SYS_ENT ; GO TO SYSTEM +; +PRTCHR: + PUSH BC + PUSH DE + LD BC,$0012 ; UNIT 0, WRITE CHAR + LD E,A ; CHAR TO PRINT + CALL $FFFD ; PRINT + POP DE + POP BC + RET +; +PRTSTR: + PUSH BC + PUSH HL + LD BC,$0015 ; UNIT 0, WRITE CHARS UNTIL TERMINATOR + LD L,0 ; TERMINATOR IS NULL + CALL $FFFD ; PRINT + POP HL + POP BC + RET +; +PRTDOT: + LD A,'.' ; DOT CHARACTER + JR PRTCHR ; PRINT AND RETURN +; +; PRINT THE HEX BYTE VALUE IN A +; +PRTHEXBYTE: + PUSH AF + PUSH DE + CALL HEXASCII + LD A,D + CALL PRTCHR + LD A,E + CALL PRTCHR + POP DE + POP AF + RET +; +; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE +; +HEXASCII: + LD D,A + CALL HEXCONV + LD E,A + LD A,D + RLCA + RLCA + RLCA + RLCA + CALL HEXCONV + LD D,A + RET +; +; CONVERT LOW NIBBLE OF A TO ASCII HEX +; +HEXCONV: + AND 0FH ;LOW NIBBLE ONLY + ADD A,90H + DAA + ADC A,40H + DAA + RET +; +ERROR: + LD DE,STR_ERR ; POINT TO ERROR STRING + CALL PRTSTR ; PRINT IT + HALT ; HALT +; +; DATA +; +STR_LOAD .DB "\r\nLoading",0 +STR_DONE .DB "\r\n",0 +STR_ERR .DB " Read Error!",0 +; + .ORG $ - $8000 ; RESTORE ORG + .FILL PARTTBL_LOC - $ ; FILL TO START OF PARTITION TABLE +; +; RESERVE SPACE FOR STANDARD IBM-PC PARTITION TABLE. ALTHOUGH A +; PARTITION TABLE IS NOT RELEVANT FOR A FLOPPY DISK, IT DOES NO HARM. +; THE CONTENTS OF THE PARTITION TABLE MUST BE MANAGED BY FDISK80. +; +PARTTBL .FILL PARTTBL_SIZ,$00 ; PARTITION TABLE, FILL WITH ZEROES +; +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT +; SIGNATURE. +; +BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE +; +;------------------------------------------------------------------------------- +; SECTOR 2 +; +; THIS SECTOR HAS NOT BEEN DEFINED AND IS RESERVED. +; +;---------------------------------------------------------------------------- +; + .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES +; +;------------------------------------------------------------------------------- +; SECTOR 3 +; +; OS AND DISK METADATA +; +;---------------------------------------------------------------------------- +; + .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED +; +; THE FOLLOWING TWO BYTES ARE AN ADDITIONAL SIGNATURE THAT IS VERIFIED BY +; SOME HARDWARE BIOSES. +; +PR_SIG .DB $5A,$A5 ; SIGNATURE GOES HERE +; +; FIRST CHUNK OF METADATA IMMEDIATELY FOLLOWS THE SIGNATURE BYTES +; +PR_PLATFORM .DB 0 ; PLATFORM ID (SEE STD.ASM) +PR_DEVICE .DB 0 ; ? (PROBABLY UNUSED) +PR_FORMATTER .DB 0,0,0,0,0,0,0,0 ; ? (PROBABLY UNUSED) +PR_DRIVE .DB 0 ; ? (PROBABLY UNUSED) +PR_LOG_UNIT .DW 0 ; ? (PROBABLY UNUSED) +; +; FILLER TO PLACE SECOND CHUNK OF METADATA AT THE END OF THE SECTOR +; + .FILL ((PREFIX_SIZE - METADATA_SIZE) - $),00H +; +; SECOND CHUNK OF METADATA +; +PR_WP .DB 0 ; WRITE PROTECT BOOLEADN +PR_UPDSEQ .DW 0 ; PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; DEPRECATED +PR_LDLOC .DW SYS_LOC ; ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; ADDRESS TO ENTER SYSTEM (OS) +; +; +; + .END diff --git a/Source/ZSDOS/ver.inc b/Source/ZSDOS/ver.inc index b65ec245..5861831f 100644 --- a/Source/ZSDOS/ver.inc +++ b/Source/ZSDOS/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 9 #DEFINE RUP 2 #DEFINE RTP 0 -#DEFINE BIOSVER "2.9.2-pre.29" +#DEFINE BIOSVER "2.9.2-pre.30"