build still broken

Now we load all the code, but it overwrites the extended BIOS area.
640KB is no longer enough. Need to rethink loading strategy.
This commit is contained in:
Kartik K. Agaram 2021-08-29 08:31:43 -07:00
parent 1b18ec6ee9
commit 0e2a9ad93d
3 changed files with 30 additions and 2 deletions

View File

@ -164,6 +164,34 @@
cd/syscall 0x13/imm8/bios-disk-services
0f 82/jump-if-carry disk_error/disp16
# load two more tracks of disk into addresses [0x76000, 0x85c00)
b4/copy-to-ah 2/imm8/read-drive
# dl comes conveniently initialized at boot time with the index of the device being booted
b5/copy-to-ch 0/imm8/cylinder
b6/copy-to-dh 0xe/imm8/head # <====
b1/copy-to-cl 1/imm8/sector # 1-based
b0/copy-to-al 0x7e/imm8/num-sectors # 2*63 = 126
# address to write sectors to = es:bx = 0x56800, contiguous with boot segment
bb/copy-to-bx 0x7600/imm16 # <====
8e/->seg 3/mod/direct 3/rm32/bx 0/r32/es
bb/copy-to-bx 0/imm16
cd/syscall 0x13/imm8/bios-disk-services
0f 82/jump-if-carry disk_error/disp16
# load two more tracks of disk into addresses [0x85c00, 0x95800)
b4/copy-to-ah 2/imm8/read-drive
# dl comes conveniently initialized at boot time with the index of the device being booted
b5/copy-to-ch 0/imm8/cylinder
b6/copy-to-dh 0x11/imm8/head # <====
b1/copy-to-cl 1/imm8/sector # 1-based
b0/copy-to-al 0x7e/imm8/num-sectors # 2*63 = 126
# address to write sectors to = es:bx = 0x56800, contiguous with boot segment
bb/copy-to-bx 0x85c0/imm16 # <====
8e/->seg 3/mod/direct 3/rm32/bx 0/r32/es
bb/copy-to-bx 0/imm16
cd/syscall 0x13/imm8/bios-disk-services
0f 82/jump-if-carry disk_error/disp16
# reset es
bb/copy-to-bx 0/imm16
8e/->seg 3/mod/direct 3/rm32/bx 0/r32/es

View File

@ -35,7 +35,7 @@ cat a.survey |linux/hex > a.bin
dd if=/dev/zero of=code.img count=20160 # 20*16*63 512-byte sectors = almost 10MB
dd if=a.bin of=code.img conv=notrunc
if [ `stat --printf="%s" a.bin` -ge 451584 ] # 14 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
if [ `stat --printf="%s" a.bin` -ge 580608 ] # 18 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
then
echo "a.bin won't all be loaded on boot"
exit 1

View File

@ -39,7 +39,7 @@ cat a.survey |linux/bootstrap/bootstrap run linux/hex
dd if=/dev/zero of=code.img count=20160 # 20*16*63 512-byte sectors = almost 10MB
dd if=a.bin of=code.img conv=notrunc
if [ `stat --printf="%s" a.bin` -ge 451584 ] # 14 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
if [ `stat --printf="%s" a.bin` -ge 580608 ] # 18 tracks * 63 sectors per track * 512 bytes per sector (keep this sync'd with boot.subx)
then
echo "a.bin won't all be loaded on boot"
exit 1