diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index a81cd991..7e733d99 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 4ae067d4..d6f85e18 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index ed132f42..a0b4a83e 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 ae38d703..c2e5de94 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ ## Z80/Z180 System Software Version 2.9.2 Prerelease -Monday 23 March 2020 +Tuesday 24 March 2020 Wayne Warthen @@ -704,6 +704,16 @@ usage (“CPM Manual.pdf”). If you are new to the CP/M world, I would recommend using this CP/M variant to start with simply because it is the most stable and you are less likely to encounter problems. +### Errata + + - The original versions of DDT, DDTZ, and ZSID used the RST 38 vector + which conflicts with interrupt mode 1 use of this vector. The DDT, + DDTZ, and ZSID applications in RomWBW have been modified to use RTS + 30 to avoid this issue. + + - Z-System applications will not run under CP/M 2.2. For example, the + `LDDS` date stamper with not run. + ## ZSDOS 1.1 ZSDOS is the most popular non-DRI CP/M “clone” which is generally @@ -718,6 +728,13 @@ Additionally, the official documentation for Z-System is included in the RomWBW distribution Doc directory (“ZSDOS Manual.pdf” and “ZCPR Manual.pdf”). +### Errata + + - Although most CP/M 2.2 applications will run under Z-System, some + may not work as expected. The best example is PIP which is not aware + of the ZSDOS paths and will fail in some scenarios (use `COPY` + instead). + ## NZCOM Automatic Z-System NZCOM is a much further refined version of Z-System (ZCPR 3.4). NZCOM @@ -728,11 +745,17 @@ On the RomWBW NZCOM disk images, the boot OS is ZSDOS 1.1. After you configure NZCOM, you can add a `PROFILE.SUB` file to automatically launch NZCOM at boot. -To use, NZCOM, you must run through a simple configuration process. This -is well documented in the NZCOM manual in the “NZCOM Users Manual.pdf” -file in the RomWBW Doc directory. Additionally, there are instructions -for automatically launching NZCOM when the disk is booted under the host -OS via an auto command submission process. +NZCOM is not pre-configured. You must run through a simple configuration +process before loading it. Run MKZCM to do this. + +NZCOM has substantially more functionality than CP/M or basic Z-System. +It is important to read the the “NZCOM Users Manual.pdf” file in the +RomWBW Doc directory. + +### Errata + + - SuperZap (`ZAP.COM`) is not working under NZCOM. + - There is no `DIR` command, you must use `SDZ` instead. ## Digital Research CP/M 3 @@ -744,7 +767,13 @@ support tools and help system. Note that to make a CP/M 3 boot disk, you actually place CPMLDR.SYS on the system tracks of the disk. You do not place CPM3.SYS on the system -tracks. +tracks. `CPMLDR.SYS` chain loads `CPM3.SYS`. + +### Errata + + - CLRDIR is not working right under CP/M 3. It only partially clears + the disk sectors of the directory area. The extent of this issue has + not been evaluated, but it is not a RomWBW issue. ## Simeon Cran’s ZPM3 @@ -754,12 +783,23 @@ ZCPR 3. Essentially, it has the features of and compatibility with both. Like CP/M 3, to make ZPM3 boot disk, you put CPMLDR.SYS on the system tracks of the disk. +### Errata + + - CLRDIR is not working right under ZPM3. It only partially clears the + disk sectors of the directory area. The extent of this issue has not + been evaluated, but it is not a RomWBW issue. + - ZPMLDR is included with ZPM3, but it is not working correctly. + - The ZPM operatins system is contained in the file called CPM3.SYS + which is confusing, but it is the author’s intended way of using + ZPM3. + - SuperZap (`ZAP.COM`) is not working under ZPM3. + ## FreeRTOS -Note that Phillip Stevens has also ported FreeRTOS to run under RomWBW. -FreeRTOS is not provided in the RomWBW distribution. FreeRTOS is -available under the [MIT licence](https://www.freertos.org/a00114.html) -and further general information is available at +Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is not +provided in the RomWBW distribution. FreeRTOS is available under the +[MIT licence](https://www.freertos.org/a00114.html) and further general +information is available at [FreeRTOS](https://www.freertos.org/RTOS.html). You can also contact Phillip for detailed information on the Z180 diff --git a/ReadMe.txt b/ReadMe.txt index 9dd43532..63c35051 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -3,7 +3,7 @@ RomWBW Z80/Z180 System Software Version 2.9.2 Prerelease -Monday 23 March 2020 +Tuesday 24 March 2020 Wayne Warthen wwarthen@gmail.com @@ -735,6 +735,16 @@ usage (“CPM Manual.pdf”). If you are new to the CP/M world, I would recommend using this CP/M variant to start with simply because it is the most stable and you are less likely to encounter problems. +Errata + +- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector + which conflicts with interrupt mode 1 use of this vector. The DDT, + DDTZ, and ZSID applications in RomWBW have been modified to use RTS + 30 to avoid this issue. + +- Z-System applications will not run under CP/M 2.2. For example, the + LDDS date stamper with not run. + ZSDOS 1.1 ZSDOS is the most popular non-DRI CP/M “clone” which is generally @@ -747,6 +757,13 @@ Z-System Notes. Additionally, the official documentation for Z-System is included in the RomWBW distribution Doc directory (“ZSDOS Manual.pdf” and “ZCPR Manual.pdf”). +Errata + +- Although most CP/M 2.2 applications will run under Z-System, some + may not work as expected. The best example is PIP which is not aware + of the ZSDOS paths and will fail in some scenarios (use COPY + instead). + NZCOM Automatic Z-System NZCOM is a much further refined version of Z-System (ZCPR 3.4). NZCOM @@ -757,11 +774,17 @@ On the RomWBW NZCOM disk images, the boot OS is ZSDOS 1.1. After you configure NZCOM, you can add a PROFILE.SUB file to automatically launch NZCOM at boot. -To use, NZCOM, you must run through a simple configuration process. This -is well documented in the NZCOM manual in the “NZCOM Users Manual.pdf” -file in the RomWBW Doc directory. Additionally, there are instructions -for automatically launching NZCOM when the disk is booted under the host -OS via an auto command submission process. +NZCOM is not pre-configured. You must run through a simple configuration +process before loading it. Run MKZCM to do this. + +NZCOM has substantially more functionality than CP/M or basic Z-System. +It is important to read the the “NZCOM Users Manual.pdf” file in the +RomWBW Doc directory. + +Errata + +- SuperZap (ZAP.COM) is not working under NZCOM. +- There is no DIR command, you must use SDZ instead. Digital Research CP/M 3 @@ -773,7 +796,13 @@ support tools and help system. Note that to make a CP/M 3 boot disk, you actually place CPMLDR.SYS on the system tracks of the disk. You do not place CPM3.SYS on the system -tracks. +tracks. CPMLDR.SYS chain loads CPM3.SYS. + +Errata + +- CLRDIR is not working right under CP/M 3. It only partially clears + the disk sectors of the directory area. The extent of this issue has + not been evaluated, but it is not a RomWBW issue. Simeon Cran’s ZPM3 @@ -783,12 +812,22 @@ ZCPR 3. Essentially, it has the features of and compatibility with both. Like CP/M 3, to make ZPM3 boot disk, you put CPMLDR.SYS on the system tracks of the disk. +Errata + +- CLRDIR is not working right under ZPM3. It only partially clears the + disk sectors of the directory area. The extent of this issue has not + been evaluated, but it is not a RomWBW issue. +- ZPMLDR is included with ZPM3, but it is not working correctly. +- The ZPM operatins system is contained in the file called CPM3.SYS + which is confusing, but it is the author’s intended way of using + ZPM3. +- SuperZap (ZAP.COM) is not working under ZPM3. + FreeRTOS -Note that Phillip Stevens has also ported FreeRTOS to run under RomWBW. -FreeRTOS is not provided in the RomWBW distribution. FreeRTOS is -available under the MIT licence and further general information is -available at FreeRTOS. +Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is not +provided in the RomWBW distribution. FreeRTOS is available under the MIT +licence and further general information is available at FreeRTOS. You can also contact Phillip for detailed information on the Z180 implementation of FreeRTOS for RomWBW. diff --git a/Source/CPM22/loader.asm b/Source/CPM22/loader.asm index 72febbef..d60c0b16 100644 --- a/Source/CPM22/loader.asm +++ b/Source/CPM22/loader.asm @@ -31,17 +31,16 @@ 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 +SEC_SIZE .EQU 512 ; DISK SECTOR SIZE +BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE ; -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) +PREFIX_SIZE .EQU (SEC_SIZE * 3) ; 3 SECTORS ; -PARTTBL_LOC .EQU $1BE -PARTTBL_SIZ .EQU $40 -BOOTSIG_LOC .EQU $1FE +META_SIZE .EQU 32 ; SEE BELOW +META_LOC .EQU (PREFIX_SIZE - META_SIZE) +; +PT_LOC .EQU $1BE +PT_SIZ .EQU $40 ; ;------------------------------------------------------------------------------- ; SECTOR 1 @@ -52,7 +51,8 @@ BOOTSIG_LOC .EQU $1FE ;---------------------------------------------------------------------------- ; ; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING -; ADDRESS OF $8000. +; ADDRESS OF $8000. THIS CODE IS *ONLY* FOR UNA. THE ROMWBW ROM BOOTLOADER +; USES THE METADATA TO LOAD THE OS DIRECTLY. ; .ORG $8000 JR BOOT @@ -145,10 +145,10 @@ HEXASCII: ; CONVERT LOW NIBBLE OF A TO ASCII HEX ; HEXCONV: - AND 0FH ;LOW NIBBLE ONLY - ADD A,90H + AND $0F ;LOW NIBBLE ONLY + ADD A,$90 DAA - ADC A,40H + ADC A,$40 DAA RET ; @@ -163,17 +163,17 @@ 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 + .ORG $ - $8000 ; BACK TO ABSOLUTE ADDRESS +; + .FILL PT_LOC - $,0 ; 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 +PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES ; -; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT -; SIGNATURE. +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE. ; BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; @@ -184,7 +184,7 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES + .FILL SEC_SIZE,0 ; JUST FILL SECTOR WITH ZEROES ; ;------------------------------------------------------------------------------- ; SECTOR 3 @@ -193,36 +193,34 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED + .FILL (BLK_SIZE * 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 + .FILL (META_LOC - $),0 ; -; SECOND CHUNK OF METADATA +; 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) +PR_WP .DB 0 ; (1) WRITE PROTECT BOOLEAN +PR_UPDSEQ .DW 0 ; (2) PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; (4) OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; (17) DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; (2) DEPRECATED +PR_LDLOC .DW SYS_LOC ; (2) ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; (2) ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; (2) ADDRESS TO ENTER SYSTEM (OS) ; +#IF (META_SIZE != ($ - META_LOC)) + .ECHO "META_SIZE VALUE IS WRONG!!!\r\n" + !!! +#ENDIF ; +#IF ($ != PREFIX_SIZE) + .ECHO "LOADER PREFIX IS WRONG SIZE!!!\r\n" + !!! +#ENDIF ; - .END + .END diff --git a/Source/CPM3/loader.asm b/Source/CPM3/loader.asm index 979ef532..0a417849 100644 --- a/Source/CPM3/loader.asm +++ b/Source/CPM3/loader.asm @@ -31,17 +31,16 @@ 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 +SEC_SIZE .EQU 512 ; DISK SECTOR SIZE +BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE ; -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) +PREFIX_SIZE .EQU (SEC_SIZE * 3) ; 3 SECTORS ; -PARTTBL_LOC .EQU $1BE -PARTTBL_SIZ .EQU $40 -BOOTSIG_LOC .EQU $1FE +META_SIZE .EQU 32 ; SEE BELOW +META_LOC .EQU (PREFIX_SIZE - META_SIZE) +; +PT_LOC .EQU $1BE +PT_SIZ .EQU $40 ; ;------------------------------------------------------------------------------- ; SECTOR 1 @@ -52,7 +51,8 @@ BOOTSIG_LOC .EQU $1FE ;---------------------------------------------------------------------------- ; ; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING -; ADDRESS OF $8000. +; ADDRESS OF $8000. THIS CODE IS *ONLY* FOR UNA. THE ROMWBW ROM BOOTLOADER +; USES THE METADATA TO LOAD THE OS DIRECTLY. ; .ORG $8000 JR BOOT @@ -145,10 +145,10 @@ HEXASCII: ; CONVERT LOW NIBBLE OF A TO ASCII HEX ; HEXCONV: - AND 0FH ;LOW NIBBLE ONLY - ADD A,90H + AND $0F ;LOW NIBBLE ONLY + ADD A,$90 DAA - ADC A,40H + ADC A,$40 DAA RET ; @@ -163,17 +163,17 @@ 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 + .ORG $ - $8000 ; BACK TO ABSOLUTE ADDRESS +; + .FILL PT_LOC - $,0 ; 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 +PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES ; -; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT -; SIGNATURE. +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE. ; BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; @@ -184,7 +184,7 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES + .FILL SEC_SIZE,0 ; JUST FILL SECTOR WITH ZEROES ; ;------------------------------------------------------------------------------- ; SECTOR 3 @@ -193,36 +193,34 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED + .FILL (BLK_SIZE * 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 + .FILL (META_LOC - $),0 ; -; SECOND CHUNK OF METADATA +; 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) +PR_WP .DB 0 ; (1) WRITE PROTECT BOOLEAN +PR_UPDSEQ .DW 0 ; (2) PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; (4) OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; (17) DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; (2) DEPRECATED +PR_LDLOC .DW SYS_LOC ; (2) ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; (2) ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; (2) ADDRESS TO ENTER SYSTEM (OS) ; +#IF (META_SIZE != ($ - META_LOC)) + .ECHO "META_SIZE VALUE IS WRONG!!!\r\n" + !!! +#ENDIF ; +#IF ($ != PREFIX_SIZE) + .ECHO "LOADER PREFIX IS WRONG SIZE!!!\r\n" + !!! +#ENDIF ; - .END + .END diff --git a/Source/Doc/GettingStarted.md b/Source/Doc/GettingStarted.md index 128d29f9..896b5f46 100644 --- a/Source/Doc/GettingStarted.md +++ b/Source/Doc/GettingStarted.md @@ -753,6 +753,16 @@ are new to the CP/M world, I would recommend using this CP/M variant to start with simply because it is the most stable and you are less likely to encounter problems. +### Errata + +- The original versions of DDT, DDTZ, and ZSID used the RST 38 +vector which conflicts with interrupt mode 1 use of this vector. +The DDT, DDTZ, and ZSID applications in RomWBW have been modified +to use RTS 30 to avoid this issue. + +- Z-System applications will not run under CP/M 2.2. For example, +the `LDDS` date stamper with not run. + ## ZSDOS 1.1 ZSDOS is the most popular non-DRI CP/M "clone" which is generally @@ -767,6 +777,12 @@ Additionally, the official documentation for Z-System is included in the RomWBW distribution Doc directory ("ZSDOS Manual.pdf" and "ZCPR Manual.pdf"). +### Errata + +- Although most CP/M 2.2 applications will run under Z-System, some +may not work as expected. The best example is PIP which is not aware +of the ZSDOS paths and will fail in some scenarios (use `COPY` instead). + ## NZCOM Automatic Z-System NZCOM is a much further refined version of Z-System (ZCPR 3.4). NZCOM @@ -777,11 +793,17 @@ a host OS. On the RomWBW NZCOM disk images, the boot OS is ZSDOS 1.1. After you configure NZCOM, you can add a `PROFILE.SUB` file to automatically launch NZCOM at boot. -To use, NZCOM, you must run through a simple configuration process. -This is well documented in the NZCOM manual in the "NZCOM Users -Manual.pdf" file in the RomWBW Doc directory. Additionally, there are -instructions for automatically launching NZCOM when the disk is -booted under the host OS via an auto command submission process. +NZCOM is not pre-configured. You must run through a simple +configuration process before loading it. Run MKZCM to do this. + +NZCOM has substantially more functionality than CP/M or basic +Z-System. It is important to read the the "NZCOM Users +Manual.pdf" file in the RomWBW Doc directory. + +### Errata + +- SuperZap (`ZAP.COM`) is not working under NZCOM. +- There is no `DIR` command, you must use `SDZ` instead. ## Digital Research CP/M 3 @@ -793,7 +815,13 @@ support tools and help system. Note that to make a CP/M 3 boot disk, you actually place CPMLDR.SYS on the system tracks of the disk. You do not place CPM3.SYS on the -system tracks. +system tracks. `CPMLDR.SYS` chain loads `CPM3.SYS`. + +### Errata + +- CLRDIR is not working right under CP/M 3. It only partially clears +the disk sectors of the directory area. The extent of this issue +has not been evaluated, but it is not a RomWBW issue. ## Simeon Cran's ZPM3 @@ -804,11 +832,21 @@ both. Like CP/M 3, to make ZPM3 boot disk, you put CPMLDR.SYS on the system tracks of the disk. +### Errata + +- CLRDIR is not working right under ZPM3. It only partially clears +the disk sectors of the directory area. The extent of this issue +has not been evaluated, but it is not a RomWBW issue. +- ZPMLDR is included with ZPM3, but it is not working correctly. +- The ZPM operatins system is contained in the file called CPM3.SYS +which is confusing, but it is the author's intended way of using ZPM3. +- SuperZap (`ZAP.COM`) is not working under ZPM3. + ## FreeRTOS -Note that Phillip Stevens has also ported FreeRTOS to run under -RomWBW. FreeRTOS is not provided in the RomWBW distribution. FreeRTOS -is available under the +Phillip Stevens has ported FreeRTOS to run under RomWBW. FreeRTOS is +not provided in the RomWBW distribution. FreeRTOS is available under +the [MIT licence](https://www.freertos.org/a00114.html) and further general information is available at [FreeRTOS](https://www.freertos.org/RTOS.html). diff --git a/Source/ZPM3/loader.asm b/Source/ZPM3/loader.asm index 979ef532..0a417849 100644 --- a/Source/ZPM3/loader.asm +++ b/Source/ZPM3/loader.asm @@ -31,17 +31,16 @@ 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 +SEC_SIZE .EQU 512 ; DISK SECTOR SIZE +BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE ; -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) +PREFIX_SIZE .EQU (SEC_SIZE * 3) ; 3 SECTORS ; -PARTTBL_LOC .EQU $1BE -PARTTBL_SIZ .EQU $40 -BOOTSIG_LOC .EQU $1FE +META_SIZE .EQU 32 ; SEE BELOW +META_LOC .EQU (PREFIX_SIZE - META_SIZE) +; +PT_LOC .EQU $1BE +PT_SIZ .EQU $40 ; ;------------------------------------------------------------------------------- ; SECTOR 1 @@ -52,7 +51,8 @@ BOOTSIG_LOC .EQU $1FE ;---------------------------------------------------------------------------- ; ; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING -; ADDRESS OF $8000. +; ADDRESS OF $8000. THIS CODE IS *ONLY* FOR UNA. THE ROMWBW ROM BOOTLOADER +; USES THE METADATA TO LOAD THE OS DIRECTLY. ; .ORG $8000 JR BOOT @@ -145,10 +145,10 @@ HEXASCII: ; CONVERT LOW NIBBLE OF A TO ASCII HEX ; HEXCONV: - AND 0FH ;LOW NIBBLE ONLY - ADD A,90H + AND $0F ;LOW NIBBLE ONLY + ADD A,$90 DAA - ADC A,40H + ADC A,$40 DAA RET ; @@ -163,17 +163,17 @@ 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 + .ORG $ - $8000 ; BACK TO ABSOLUTE ADDRESS +; + .FILL PT_LOC - $,0 ; 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 +PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES ; -; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT -; SIGNATURE. +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE. ; BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; @@ -184,7 +184,7 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES + .FILL SEC_SIZE,0 ; JUST FILL SECTOR WITH ZEROES ; ;------------------------------------------------------------------------------- ; SECTOR 3 @@ -193,36 +193,34 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED + .FILL (BLK_SIZE * 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 + .FILL (META_LOC - $),0 ; -; SECOND CHUNK OF METADATA +; 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) +PR_WP .DB 0 ; (1) WRITE PROTECT BOOLEAN +PR_UPDSEQ .DW 0 ; (2) PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; (4) OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; (17) DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; (2) DEPRECATED +PR_LDLOC .DW SYS_LOC ; (2) ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; (2) ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; (2) ADDRESS TO ENTER SYSTEM (OS) ; +#IF (META_SIZE != ($ - META_LOC)) + .ECHO "META_SIZE VALUE IS WRONG!!!\r\n" + !!! +#ENDIF ; +#IF ($ != PREFIX_SIZE) + .ECHO "LOADER PREFIX IS WRONG SIZE!!!\r\n" + !!! +#ENDIF ; - .END + .END diff --git a/Source/ZSDOS/loader.asm b/Source/ZSDOS/loader.asm index 74f2a6b7..d60c0b16 100644 --- a/Source/ZSDOS/loader.asm +++ b/Source/ZSDOS/loader.asm @@ -1,5 +1,5 @@ ;=============================================================================== -; BL.ASM +; LOADER.ASM ; ; BOOTLOADER FOR ROMWBW DISK OPERATING SYSTEMS. ; @@ -31,17 +31,16 @@ 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 +SEC_SIZE .EQU 512 ; DISK SECTOR SIZE +BLK_SIZE .EQU 128 ; OS BLOCK/RECORD SIZE ; -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) +PREFIX_SIZE .EQU (SEC_SIZE * 3) ; 3 SECTORS ; -PARTTBL_LOC .EQU $1BE -PARTTBL_SIZ .EQU $40 -BOOTSIG_LOC .EQU $1FE +META_SIZE .EQU 32 ; SEE BELOW +META_LOC .EQU (PREFIX_SIZE - META_SIZE) +; +PT_LOC .EQU $1BE +PT_SIZ .EQU $40 ; ;------------------------------------------------------------------------------- ; SECTOR 1 @@ -52,7 +51,8 @@ BOOTSIG_LOC .EQU $1FE ;---------------------------------------------------------------------------- ; ; THE FOLLOWING BOOTSTRAP CODE IS BUILT TO ASSUME IT WILL BE EXECUTED AT A STARTING -; ADDRESS OF $8000. +; ADDRESS OF $8000. THIS CODE IS *ONLY* FOR UNA. THE ROMWBW ROM BOOTLOADER +; USES THE METADATA TO LOAD THE OS DIRECTLY. ; .ORG $8000 JR BOOT @@ -145,10 +145,10 @@ HEXASCII: ; CONVERT LOW NIBBLE OF A TO ASCII HEX ; HEXCONV: - AND 0FH ;LOW NIBBLE ONLY - ADD A,90H + AND $0F ;LOW NIBBLE ONLY + ADD A,$90 DAA - ADC A,40H + ADC A,$40 DAA RET ; @@ -163,17 +163,17 @@ 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 + .ORG $ - $8000 ; BACK TO ABSOLUTE ADDRESS +; + .FILL PT_LOC - $,0 ; 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 +PARTTBL .FILL PT_SIZ,0 ; PARTITION TABLE, FILL WITH ZEROES ; -; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT -; SIGNATURE. +; THE END OF THE FIRST SECTOR MUST CONTAIN THE TWO BYTE BOOT SIGNATURE. ; BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; @@ -184,7 +184,7 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 512,0 ; JUST FILL SECTOR WITH ZEROES + .FILL SEC_SIZE,0 ; JUST FILL SECTOR WITH ZEROES ; ;------------------------------------------------------------------------------- ; SECTOR 3 @@ -193,36 +193,34 @@ BOOTSIG .DB $55,$AA ; STANDARD BOOT SIGNATURE ; ;---------------------------------------------------------------------------- ; - .FILL 128 * 3,0 ; FIRST 384 BYTES ARE NOT YET DEFINED + .FILL (BLK_SIZE * 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 + .FILL (META_LOC - $),0 ; -; SECOND CHUNK OF METADATA +; 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) +PR_WP .DB 0 ; (1) WRITE PROTECT BOOLEAN +PR_UPDSEQ .DW 0 ; (2) PREFIX UPDATE SEQUENCE NUMBER (DEPRECATED?) +PR_VER .DB RMJ,RMN,RUP,RTP ; (4) OS BUILD VERSION +PR_LABEL .DB "Unlabeled Drive ","$" ; (17) DISK LABEL (EXACTLY 16 BYTES!!!) + .DW 0 ; (2) DEPRECATED +PR_LDLOC .DW SYS_LOC ; (2) ADDRESS TO START LOADING SYSTEM +PR_LDEND .DW SYS_END ; (2) ADDRESS TO STOP LOADING SYSTEM +PR_ENTRY .DW SYS_ENT ; (2) ADDRESS TO ENTER SYSTEM (OS) ; +#IF (META_SIZE != ($ - META_LOC)) + .ECHO "META_SIZE VALUE IS WRONG!!!\r\n" + !!! +#ENDIF ; +#IF ($ != PREFIX_SIZE) + .ECHO "LOADER PREFIX IS WRONG SIZE!!!\r\n" + !!! +#ENDIF ; - .END + .END