diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index e66c94bf..6fed2591 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 33939264..cb39c8a1 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index b13dc880..f6481251 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 13e8dfe6..aa21c8cf 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 96b6a037..9fa295ec 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index c5744315..eda5ee5a 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 911f0c75..b409549a 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.4 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -06 Oct 2023 +07 Oct 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 69260249..30d5d691 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -06 Oct 2023 +07 Oct 2023 diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 84900d30..b12d859f 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -1523,6 +1523,7 @@ DSK_MBR5: LD HL,(SEKLBA) ; SET DE:HL LD DE,(SEKLBA+2) ; ... TO STARTING LBA LD BC,(SPS) ; SECTORS PER SLICE + RES 7,D ; CLEAR LBA MODE BIT DSK_MBR6: OR A ; SET FLAGS TO CHECK LOOP CNTR JR Z,DSK_MBR8 ; DONE IF COUNTER EXHAUSTED @@ -1536,11 +1537,11 @@ DSK_MBR8: ; LBA OFFSET OF DESIRED SLICE IS NOW IN DE:HL ; NEED TO CHECK IF THE SLICE IS BEYOND CAPACITY OF MEDIA ; IF LBA_OFF + SPS >= DSK_CAP, ERROR! - +; ; SAVE LBA_OFF PUSH DE ; MSW PUSH HL ; LSW - +; ; ADD SPS TO COMPUTE LBA_REQ LD BC,(SPS) ; SECTORS PER SLICE ADD HL,BC ; ADD ONE SLICE TO LOW WORD diff --git a/Source/CPM3/diskio.z80 b/Source/CPM3/diskio.z80 index 6652f74d..c91caa4c 100644 --- a/Source/CPM3/diskio.z80 +++ b/Source/CPM3/diskio.z80 @@ -576,28 +576,29 @@ media4: ; adjust the sectors per slice and media id. ; Use new slice format sectors per slice value - ld hl,16384 ; new sectors per slice - ld (sps),hl ; save it + ld hl,16384 ; new sectors per slice + ld (sps),hl ; save it ; Update media id for new hard disk format - ld a,10 ; new media id - ld (medid),a ; save it + ld a,10 ; new media id + ld (medid),a ; save it media5: ; Adjust LBA offset based on target slice - ld a,(slice) ; get slice, A is loop cnt - ld hl,(lba) ; set DE:HL - ld de,(lba+2) ; ... to starting LBA - ld bc,(sps) ; sectors per slice + ld a,(slice) ; get slice, A is loop cnt + ld hl,(lba) ; set DE:HL + ld de,(lba+2) ; ... to starting LBA + ld bc,(sps) ; sectors per slice + res 7,d ; clear lba mode bit boot6: - or a ; set flags to check loop cntr - jr z,boot8 ; done if counter exhausted - add hl,bc ; add one slice to low word - jr nc,boot7 ; check for carry - inc de ; if so, bump high word + or a ; set flags to check loop cntr + jr z,boot8 ; done if counter exhausted + add hl,bc ; add one slice to low word + jr nc,boot7 ; check for carry + inc de ; if so, bump high word boot7: - dec a ; dec loop downcounter - jr boot6 ; and loop + dec a ; dec loop downcounter + jr boot6 ; and loop boot8: ; LBA offset of desired slice is now in DE:HL. diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index 36b813db..bf874919 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -165,6 +165,13 @@ Be aware that this command will allow you to reassign or remove the assignment of your system drive letter. This can cause your operating system to fail and force you to reboot. +The `ASSIGN` command does **not** prevent you from assigning a drive +letter to a slice that does not fit on the physical media. However, +any subsequent attempt to refer to that drive letter will result in +an immediate OS error of "no disk". Refer to "Hard Disk Capacity" +in the $doc_user$ for a discussion of the exact number of slices that +will fit on a specific physical disk size. + This command is particularly sensitive to being matched to the appropriate version of the RomWBW ROM you are using. Be very careful to keep all copies of `ASSIGN.COM` up to date with your ROM. diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index ff841422..dd7fd322 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -966,16 +966,24 @@ Drives E: thru L: have been assigned to the IDE0 hard disk device. The 4 entries for IDE0 are referring to 4 slices on that disk. Slices are discussed later. -The drive letter assignments **do not** change during an OS session -unless you use the `ASSIGN` command yourself to do it. Additionally, -the assignments at boot will stay the same on each boot as long as you -do not make changes to your hardware configuration. Note that the -assignments **are** dependent on the media currently inserted in hard -disk drives. So, notice that if you insert or remove an SD Card or CF -Card, the drive assignments will change. Since drive letter -assignments can change, you must be careful when doing destructive -things like using `CLRDIR` to make sure the drive letter you use is -referring to the desired media. +**WARNING**: Drive letter assignments do **not** ensure that the slice +referenced by the drive letter actually fits on the media you are using. +For example, a typical 64MB CF Card (which is typically a bit smaller +than 64MB) will only fit 7 slices. At startup, you will typically see +8 drive letters assigned to the CF Card. Attempting to access the +last drive letter will result in a "no disk" error from the operating +system. + +The drive letter assignments **do not** change during an OS session +unless you use the `ASSIGN` command yourself to do it. Additionally, the +assignments at boot will stay the same on each boot as long as you do +not make changes to your hardware configuration. Note that the +assignments **are** dependent on the media currently inserted in hard +disk drives when the operating system is started. So, notice that if you +insert or remove an SD Card or CF Card, the drive assignments will +change. Since drive letter assignments can change, you must be careful +when doing destructive things like using `CLRDIR` to make sure the drive +letter you use is referring to the desired media. When performing a ROM boot of an operating system, note that A: will be your RAM disk and B: will be your ROM disk. When performing a disk @@ -989,7 +997,8 @@ boot drive. A typical RomWBW system has 512KB of ROM and 512KB of RAM. Some portions of each are dedicated to loading and running applications and operating system. The space left over is available for an -operating system to use as a pseudo-disk device. +operating system to use as a pseudo-disk device (ROM Disk and RAM +Disk). The RAM disk provides a small CP/M filesystem that you can use for the temporary storage of files. Unless your system has a battery backed @@ -1018,13 +1027,13 @@ actual operating system and are not "bootable". However, they are accessible to any operating system (whether the operating system is loaded from ROM or a different disk device). -Neither RAM not ROM disks require explicit formatting or initialization. +Neither RAM nor ROM disks require explicit formatting or initialization. ROM disks are pre-formatted and RAM disks are formatted automatically with an empty directory when first used. #### Flash ROM Disks -The limitation of ROM disks being read only can be overcome on some +The limitation of ROM disks being read-only can be overcome on some platforms with the appropriate selection of Flash ROM chip and system configuration. In this case the flash-file system can be enabled which will allow the ROM disk to be read and written to. @@ -1208,7 +1217,7 @@ available storage devices. The allocation will depend on the number of mass storage devices available at boot. For example, if you have only one hard disk type media, you will see that 8 drive letters are assigned to the first 8 slices of that media. If you have two large -storage devices, you will see that each device is allocated four drive +storage devices, you will see that each device is allocated 4 drive letters. Referring to slices within a storage device is done by appending a : @@ -1223,14 +1232,14 @@ slice of IDE0, you would type "IDE0:3". Here are some examples: | `IDE0:` | First slice of disk in IDE0 | | `IDE0:3` | Fourth slice of disk in IDE0 | -So, if you wanted to use drive letter L: to refer to the fourth slice -of IDE0, you could use the command `ASSIGN L:=IDE0:3`. There are a -couple of rules to be aware of when assigning drive letters. First, -you may only refer to a specific device/slice with one drive letter at a time. -Said another way, you cannot have multiple drive letters referring -to a the same device/slice at the same time. Second, there must always -be a drive assigned to A:. Any attempt to violate these rules will -be blocked by the `ASSIGN` command. +So, if you wanted to use drive letter L: to refer to the fourth slice of +IDE0, you could use the command `ASSIGN L:=IDE0:3`. There are a couple +of rules to be aware of when assigning drive letters. First, you may +only refer to a specific device/slice with one drive letter at a time. +Said another way, you cannot have multiple drive letters referring to a +the same device/slice at the same time. Second, there must always be a +drive assigned to A:. Any attempt to violate these rules will be blocked +by the `ASSIGN` command. In case this wasn't already clear, you **cannot** refer directly to slices using CP/M. CP/M only understands drive letters, so @@ -1259,6 +1268,11 @@ absolutely sure you know what media and slice are assigned to that drive letter before using `CLRDIR` because CLRDIR will wipe out any pre-existing contents of the slice. +**WARNING**: The `CLRDIR` application does not appear to check for +disk errors when it runs. If you attempt to run `CLRDIR` on a drive +that is mapped to a slice that does not actually fit on the physical +disk, it may behave erratically. + Here is an example of using `CLRDIR`. In this example, the `ASSIGN` command is used to show the current drive letter assignments. Then the `CLRDIR` command is used to initialize the directory of drive 'G' @@ -1408,9 +1422,11 @@ was 512, it would indicate a legacy (hd512) disk layout. Although RomWBW can support many CP/M filesystem slices on a single hard disk, you are still constrained by the physical capacity of the -actual hard disk. In most scenarios, RomWBW does not prevent you -from attempting to use more slices than will fit on your hard disk -device. If you attempt to do so, disk I/O errors will be reported. +actual hard disk. RomWBW does not prevent you from assigning slices +to drive letters even if the location of the slice does not fit on the +physical disk. Any attempt to access a drive letter mapped to a slice +that does not fit will result in an error such as "no disk" from the +operating system. The exact number of CP/M filesystem slices that will fit on your specific physical hard disk can be determined as follows: @@ -1590,8 +1606,8 @@ but based on the idea that a 1GB CF or SD Card is easy and cheap to acquire. It is fine if your hard disk is smaller than 1GB. It just means that it will not be possible to use the pre-allocated FAT filesystem partition and any CP/M filesystem slices that don't fit. You -will get I/O errors if you attempt to access an area beyond the end of -the physical hard disk. +will get "no disk" errors if you attempt to access a slice past the +end of the physical hard disk. **WARNING**:Your hard disk may be too small to contain the full 64 CP/M filesystem slices. The true number of CP/M filesystem slices that diff --git a/Source/ver.inc b/Source/ver.inc index a6b9cd84..f40925ef 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 4 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.4.0-dev.2" +#DEFINE BIOSVER "3.4.0-dev.3" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 37db20ef..b9acfc95 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 4 rup equ 0 rtp equ 0 biosver macro - db "3.4.0-dev.2" + db "3.4.0-dev.3" endm