mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-09 11:51:09 +08:00
DOS FAT driver: When -o int 13 is in effect, automatically adjust disk geometry according to media byte so that DS_BLISS.EXE still works even if you initially image mounted a 1.44MB floppy image
This commit is contained in:
parent
13276da31b
commit
9fdafdbfe2
@ -1,4 +1,8 @@
|
|||||||
NEXT
|
NEXT
|
||||||
|
- DOS FAT driver: If INT 13h reports disk change, adapt floppy
|
||||||
|
disk geometry to new disk image according to media byte. This
|
||||||
|
allows DS_BLISS to present it's 720K fake floppy even if the
|
||||||
|
user initially mounted a 1.44MB floppy to drive A: (joncampbell123).
|
||||||
- INT 10 mode list: Add "pitch" parameter. If nonzero, the value
|
- INT 10 mode list: Add "pitch" parameter. If nonzero, the value
|
||||||
(in pixels) is how to program the pixels per scanline when
|
(in pixels) is how to program the pixels per scanline when
|
||||||
setting the mode.
|
setting the mode.
|
||||||
|
@ -3678,7 +3678,7 @@ void fatDrive::checkDiskChange(void) {
|
|||||||
* existence by intercepting INT 13h for floppy I/O and then expecting MS-DOS to call INT 13h
|
* existence by intercepting INT 13h for floppy I/O and then expecting MS-DOS to call INT 13h
|
||||||
* to read it. Furthermore, at some parts of the demo, the INT 13h hook changes the root
|
* to read it. Furthermore, at some parts of the demo, the INT 13h hook changes the root
|
||||||
* directory and FAT table to make the next "disk" appear, even if the volume label does not. */
|
* directory and FAT table to make the next "disk" appear, even if the volume label does not. */
|
||||||
if (loadedDisk->detectDiskChange() && !BPB.is_fat32()) {
|
if (loadedDisk->detectDiskChange() && !BPB.is_fat32() && partSectOff == 0) {
|
||||||
LOG(LOG_MISC,LOG_DEBUG)("FAT: disk change");
|
LOG(LOG_MISC,LOG_DEBUG)("FAT: disk change");
|
||||||
|
|
||||||
FAT_BootSector bootbuffer = {};
|
FAT_BootSector bootbuffer = {};
|
||||||
@ -3712,6 +3712,18 @@ void fatDrive::checkDiskChange(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* sometimes as part of INT 13h interception the new image will differ from the format we mounted against (DS_BLISS.EXE) */
|
||||||
|
/* TODO: Add any other format here */
|
||||||
|
if (BPB.v.BPB_Media == 0xF9) {
|
||||||
|
LOG(LOG_MISC,LOG_DEBUG)("NEW FAT: changing floppy geometry to 720k format according to media byte");
|
||||||
|
loadedDisk->Set_Geometry(2/*heads*/,80/*cylinders*/,9/*sectors*/,512/*sector size*/);
|
||||||
|
}
|
||||||
|
else if (BPB.v.BPB_Media == 0xF0) {
|
||||||
|
/* TODO: By the time DOS supported the 1.44MB format the BPB also provided the geometry too */
|
||||||
|
LOG(LOG_MISC,LOG_DEBUG)("NEW FAT: changing floppy geometry to 1.44M format according to media byte");
|
||||||
|
loadedDisk->Set_Geometry(2/*heads*/,80/*cylinders*/,18/*sectors*/,512/*sector size*/);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t RootDirSectors;
|
uint32_t RootDirSectors;
|
||||||
uint32_t DataSectors;
|
uint32_t DataSectors;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user