diff --git a/Source/BL/Build.cmd b/Source/BL/Build.cmd deleted file mode 100644 index 7b8c5353..00000000 --- a/Source/BL/Build.cmd +++ /dev/null @@ -1,14 +0,0 @@ -@echo off -setlocal - -set TOOLS=../../Tools - -set PATH=%TOOLS%\tasm32;%TOOLS%\zx;%PATH% - -set TASMTABS=%TOOLS%\tasm32 - -set ZXBINDIR=%TOOLS%/cpm/bin/ -set ZXLIBDIR=%TOOLS%/cpm/lib/ -set ZXINCDIR=%TOOLS%/cpm/include/ - -tasm -t80 -g3 -fFF bl.asm bl.bin bl.lst diff --git a/Source/BL/Clean.cmd b/Source/BL/Clean.cmd deleted file mode 100644 index 23ffc7b3..00000000 --- a/Source/BL/Clean.cmd +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -setlocal - -if exist *.bin del *.bin -if exist *.lst del *.lst -if exist *.sys del *.sys diff --git a/Source/BuildShared.cmd b/Source/BuildShared.cmd index bb8076d6..578af84e 100644 --- a/Source/BuildShared.cmd +++ b/Source/BuildShared.cmd @@ -1,14 +1,13 @@ @echo off setlocal -setlocal & cd Apps && call Build || exit /b 1 & endlocal +setlocal & cd CBIOS && call Build || exit /b 1 & endlocal setlocal & cd CPM22 && call Build || exit /b 1 & endlocal setlocal & cd ZCPR && call Build || exit /b 1 & endlocal setlocal & cd ZCPR-DJ && call Build || exit /b 1 & endlocal setlocal & cd ZSDOS && call Build || exit /b 1 & endlocal -setlocal & cd CBIOS && call Build || exit /b 1 & endlocal setlocal & cd CPM3 && call Build || exit /b 1 & endlocal setlocal & cd ZPM3 && call Build || exit /b 1 & endlocal +setlocal & cd Apps && call Build || exit /b 1 & endlocal setlocal & cd Forth && call Build || exit /b 1 & endlocal setlocal & cd Fonts && call Build || exit /b 1 & endlocal -setlocal & cd BL && call Build || exit /b 1 & endlocal diff --git a/Source/CPM22/Build.cmd b/Source/CPM22/Build.cmd index 93a836cb..5c1effaa 100644 --- a/Source/CPM22/Build.cmd +++ b/Source/CPM22/Build.cmd @@ -32,6 +32,14 @@ zx MLOAD25 -OS2CCP.BIN=OS2CCP.HEX zx MAC -OS3BDOS.ASM -$PO zx MLOAD25 -OS3BDOS.BIN=OS3BDOS.HEX +tasm -t80 -g3 -fFF loader.asm loader.bin loader.lst + +copy /b os2ccp.bin + os3bdos.bin + ..\cbios\cbios_wbw.bin cpm_wbw.bin +copy /b os2ccp.bin + os3bdos.bin + ..\cbios\cbios_una.bin cpm_una.bin + +copy /b loader.bin + cpm_wbw.bin cpm_wbw.sys +copy /b loader.bin + cpm_una.bin cpm_una.sys + goto :eof :asm diff --git a/Source/CPM22/Clean.cmd b/Source/CPM22/Clean.cmd index e2e6145a..243e3c08 100644 --- a/Source/CPM22/Clean.cmd +++ b/Source/CPM22/Clean.cmd @@ -5,3 +5,4 @@ if exist *.bin del *.bin if exist *.lst del *.lst if exist *.prn del *.prn if exist *.hex del *.hex +if exist *.sys del *.sys diff --git a/Source/BL/bl.asm b/Source/CPM22/loader.asm similarity index 100% rename from Source/BL/bl.asm rename to Source/CPM22/loader.asm diff --git a/Source/BL/ver.inc b/Source/CPM22/ver.inc similarity index 100% rename from Source/BL/ver.inc rename to Source/CPM22/ver.inc diff --git a/Source/Clean.cmd b/Source/Clean.cmd index 3c374280..a4420787 100644 --- a/Source/Clean.cmd +++ b/Source/Clean.cmd @@ -11,7 +11,6 @@ setlocal & cd CPM3 && call Clean.cmd & endlocal setlocal & cd ZPM3 && call Clean.cmd & endlocal setlocal & cd Forth && call Clean.cmd & endlocal setlocal & cd Fonts && call Clean.cmd & endlocal -setlocal & cd BL && call Clean.cmd & endlocal setlocal & cd BPBIOS && call Clean.cmd & endlocal setlocal & cd HBIOS && call Clean.cmd & endlocal setlocal & cd Doc && call Clean.cmd & endlocal diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index ad74d64f..1572af95 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -107,7 +107,7 @@ $ComFile = "${OutDir}/${RomName}.com" # Final name of COM image (command line lo $ImgFile = "${OutDir}/${RomName}.img" # Final name of IMG image (memory loadable HBIOS/CBIOS image) # Select the proper CBIOS to include in the ROM. UNA is special. -if ($Platform -eq "UNA") {$CBiosFile = '../CBIOS/cbios_una.bin'} else {$CBiosFile = '../CBIOS/cbios_wbw.bin'} +if ($Platform -eq "UNA") {$Bios = 'una'} else {$Bios = 'wbw'} # List of RomWBW proprietary apps to imbed in ROM disk. $RomApps = "assign","fdu","format","mode","osldr","rtc","survey","syscopy","sysgen","talk","timer","xm","inttest" @@ -155,14 +155,6 @@ ROMSIZE .EQU ${ROMSize} ; "@ | Out-File "build.inc" -Encoding ASCII -# Bring over previously assembled binary copy of the CP/M CCP and BDOS images for later use. -Copy-Item '..\cpm22\os2ccp.bin' 'ccp.bin' -Copy-Item '..\cpm22\os3bdos.bin' 'bdos.bin' - -# Bring over previously assembled binary copy of the ZSystem CCP and BDOS images for later use. -Copy-Item '..\zcpr-dj\zcpr.bin' 'zcpr.bin' -Copy-Item '..\zsdos\zsdos.bin' 'zsdos.bin' - # Bring over previously assembled binary copy of Forth for later use. Copy-Item '..\Forth\camel80.bin' 'camel80.bin' @@ -187,17 +179,10 @@ if ($Platform -ne "UNA") # "Building ${RomName} output files..." -# Combine the CCP and BDOS portions of CP/M and ZSystem to create OS images -Concat 'ccp.bin','bdos.bin',$CBiosFile 'cpm.bin' -Concat 'zcpr.bin','zsdos.bin',$CBiosFile 'zsys.bin' - -# Prepend a bit of boot code required to bootstrap the OS images -Concat 'prefix.bin','cpm.bin' 'cpm.sys' -Concat 'prefix.bin','zsys.bin' 'zsys.sys' - # Build 32K OS chunk containing the loader, debug monitor, and OS images -Concat 'romldr.bin', 'eastaegg.bin','dbgmon.bin', 'cpm.bin', 'zsys.bin' osimg.bin +Concat 'romldr.bin', 'eastaegg.bin','dbgmon.bin', "..\cpm22\cpm_${Bios}.bin", "..\zsdos\zsys_${Bios}.bin" osimg.bin Concat 'camel80.bin', 'nascom.bin', 'tastybasic.bin', 'game.bin', 'imgpad0.bin' osimg1.bin + # # Now the ROM disk image is created. This is done by starting with a # blank ROM disk image of the correct size, then cpmtools is used to @@ -225,7 +210,8 @@ foreach ($App in $RomApps) } # Add the CP/M and ZSystem system images to the ROM disk (used by SYSCOPY) -cpmcp -f $RomFmt $RomDiskFile *.sys 0: +cpmcp -f $RomFmt $RomDiskFile ..\cpm22\cpm_${Bios}.sys 0:cpm.sys +cpmcp -f $RomFmt $RomDiskFile ..\zsdos\zsys_${Bios}.sys 0:zsys.sys # # Finally, the individual binary components are concatenated together to produce diff --git a/Source/Images/Build.cmd b/Source/Images/Build.cmd index b1768e31..6e379154 100644 --- a/Source/Images/Build.cmd +++ b/Source/Images/Build.cmd @@ -6,20 +6,12 @@ echo : Cleaning... echo : call Clean.cmd -echo : -echo : Creating System Images -echo : -copy /b ..\bl\bl.bin + ..\cpm22\os2ccp.bin + ..\cpm22\os3bdos.bin + ..\cbios\cbios_wbw.bin cpm_wbw.sys -copy /b ..\bl\bl.bin + ..\cpm22\os2ccp.bin + ..\cpm22\os3bdos.bin + ..\cbios\cbios_una.bin cpm_una.sys -copy /b ..\bl\bl.bin + ..\zcpr-dj\zcpr.bin + ..\zsdos\zsdos.bin + ..\cbios\cbios_wbw.bin zsys_wbw.sys -copy /b ..\bl\bl.bin + ..\zcpr-dj\zcpr.bin + ..\zsdos\zsdos.bin + ..\cbios\cbios_una.bin zsys_una.sys - echo : echo : Building Floppy Disk Images... echo : -call BuildFD.cmd cpm22 cpm_wbw -call BuildFD.cmd zsdos zsys_wbw -call BuildFD.cmd nzcom zsys_wbw +call BuildFD.cmd cpm22 ..\cpm22\cpm_wbw +call BuildFD.cmd zsdos ..\zsdos\zsys_wbw +call BuildFD.cmd nzcom ..\zsdos\zsys_wbw call BuildFD.cmd cpm3 call BuildFD.cmd zpm3 call BuildFD.cmd ws4 @@ -27,9 +19,9 @@ call BuildFD.cmd ws4 echo : echo : Building Hard Disk Images... echo : -call BuildHD.cmd cpm22 cpm_wbw -call BuildHD.cmd zsdos zsys_wbw -call BuildHD.cmd nzcom zsys_wbw +call BuildHD.cmd cpm22 ..\cpm22\cpm_wbw +call BuildHD.cmd zsdos ..\zsdos\zsys_wbw +call BuildHD.cmd nzcom ..\zsdos\zsys_wbw call BuildHD.cmd cpm3 call BuildHD.cmd zpm3 call BuildHD.cmd ws4 diff --git a/Source/ZSDOS/Build.cmd b/Source/ZSDOS/Build.cmd index ad45fee5..984b376a 100644 --- a/Source/ZSDOS/Build.cmd +++ b/Source/ZSDOS/Build.cmd @@ -13,3 +13,11 @@ set ZXINCDIR=%TOOLS%/cpm/include/ zx ZMAC -ZSDOS -/P zx LINK -ZSDOS.BIN=ZSDOS[LD800] + +tasm -t80 -g3 -fFF loader.asm loader.bin loader.lst + +copy /b ..\zcpr-dj\zcpr.bin + zsdos.bin + ..\cbios\cbios_wbw.bin zsys_wbw.bin +copy /b ..\zcpr-dj\zcpr.bin + zsdos.bin + ..\cbios\cbios_una.bin zsys_una.bin + +copy /b loader.bin + zsys_wbw.bin zsys_wbw.sys +copy /b loader.bin + zsys_una.bin zsys_una.sys diff --git a/Source/ZSDOS/Clean.cmd b/Source/ZSDOS/Clean.cmd index 1d355724..65ff8877 100644 --- a/Source/ZSDOS/Clean.cmd +++ b/Source/ZSDOS/Clean.cmd @@ -9,3 +9,4 @@ if exist *.hex del *.hex if exist *.rel del *.rel if exist *.sym del *.sym if exist *.err del *.err +if exist *.sys del *.sys diff --git a/Source/ZSDOS/loader.asm b/Source/ZSDOS/loader.asm new file mode 100644 index 00000000..27dc735c --- /dev/null +++ b/Source/ZSDOS/loader.asm @@ -0,0 +1,228 @@ +;=============================================================================== +; BL.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 "ver.inc" +; +SYS_ENT .EQU $E600 ; SYSTEM (OS) ENTRY POINT ADDRESS +SYS_LOC .EQU $D000 ; STARTING ADDRESS TO LOAD SYSTEM IMAGE +SYS_END .EQU $FE00 ; 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 new file mode 100644 index 00000000..ed995cd7 --- /dev/null +++ b/Source/ZSDOS/ver.inc @@ -0,0 +1,5 @@ +#DEFINE RMJ 2 +#DEFINE RMN 9 +#DEFINE RUP 2 +#DEFINE RTP 0 +#DEFINE BIOSVER "2.9.2-pre.28"