fatfs.c: allow bpbSectorsPerCluster == 0 to mean 256
This should be compatible to Enhanced DR-DOS. Tested by building a boot image like the following: nasm ../ldosmbr/oldmbr.asm -o oldmbr.bin nasm ../ldosboot/boot.asm -D_FAT16=1 -I ../lmacros/ \ -D_LOAD_NAME="'LDEBUG'" -o boot16.bin nasm bootimg.asm -I ../lmacros/ -o disk16.img \ -D_MBR -D_ALIGNDATA -D_BOOTPATCHFILE=boot16.bin \ -D_MBRPATCHFILE=oldmbr.bin -D_BPE=16 \ -D_SPI='(_SPC * 5000)' -D_NUMROOT=512 -D_SPC=256 \ -D_SPF='((_SPI / _SPC + 255) / 256)' \ -D_PAYLOADFILE=../ldebug/bin/ldebug.com,quit.com,\ ::rename,../k256spc/bin/kernel.sys,kernel.sys,\ command.com,::fill,1,32,autoexec.bat The repos bootimg, ldosboot, ldosmbr, and lmacros are available at https://hg.pushbx.org/ecm/ The file ldebug.com is a recent bootable lDebug debugger. The file command.com is a recent FreeCOM. The file quit.com is assembled with NASM from https://hg.pushbx.org/ecm/ldebug/file/e6035c05670a/misc/quit.asm Run like this: qemu-system-i386 -hda disk16.img -boot order=c -display curses To the lDebug prompt "-" enter "boot protocol freedos", then a "q" command. On success, the quit.com command can be run to quit the qemu VM. Not yet done: - initdisk.c:512 uses MAXCLUSTSIZE defined to 128. This is not difficult to change but it is unclear whether this should be changed. - The boot loaders are not yet adjuscted, requiring use of the ldosboot or lDebug loaders instead. - A patch for FORMAT (copylefted) version 0.91u is available from the Enhanced DR-DOS project. Mirrored in the directory at https://pushbx.org/ecm/download/edrdos/freedos/ This should be easy enough to update to the most recent version.
This commit is contained in:
parent
302b002adb
commit
28cd58688a
@ -1584,13 +1584,17 @@ VOID bpb_to_dpb(bpb FAR * bpbp, REG struct dpb FAR * dpbp)
|
||||
bpb sbpb;
|
||||
|
||||
fmemcpy(&sbpb, bpbp, sizeof(sbpb));
|
||||
for (shftcnt = 0; (sbpb.bpb_nsector >> shftcnt) > 1; shftcnt++)
|
||||
;
|
||||
if (sbpb.bpb_nsector == 0) {
|
||||
shftcnt = 8;
|
||||
} else {
|
||||
for (shftcnt = 0; (sbpb.bpb_nsector >> shftcnt) > 1; shftcnt++)
|
||||
;
|
||||
}
|
||||
dpbp->dpb_shftcnt = shftcnt;
|
||||
|
||||
dpbp->dpb_mdb = sbpb.bpb_mdesc;
|
||||
dpbp->dpb_secsize = sbpb.bpb_nbyte;
|
||||
dpbp->dpb_clsmask = sbpb.bpb_nsector - 1;
|
||||
dpbp->dpb_clsmask = (sbpb.bpb_nsector - 1) & 0xFF;
|
||||
dpbp->dpb_fatstrt = sbpb.bpb_nreserved;
|
||||
dpbp->dpb_fats = sbpb.bpb_nfat;
|
||||
dpbp->dpb_dirents = sbpb.bpb_ndirent;
|
||||
|
Loading…
Reference in New Issue
Block a user