Prev cluster must be zero not 2 for FAT32 directory entry and update info sector...
authorRobert Pengelly <robertapengelly@hotmail.com>
Mon, 5 Aug 2024 10:25:35 +0000 (11:25 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Mon, 5 Aug 2024 10:25:35 +0000 (11:25 +0100)
build/chimaera.img
build/chimaera.vhd
src/Makefile.unix
src/kernel/make.asm

index c8767c1233d093e2b062d5037a6c062af85f2813..759b6197612384af68ee2b86871c1b7fefb655a1 100644 (file)
Binary files a/build/chimaera.img and b/build/chimaera.img differ
index 38de4898930509ab5fe0f056527f9fb315daf253..f3a04cbe879f8acffdc1701f63627400b7bd2736 100644 (file)
Binary files a/build/chimaera.vhd and b/build/chimaera.vhd differ
index 5fc771150c6c1b36474d16a0b8ccf0a64798fc6e..ad0e40e3e88fba55085845191a502813acc47921 100644 (file)
@@ -48,5 +48,5 @@ chimaera.vhd: all
        utils/dosfstools/mcopy --arca --offset 17 -i $@ apps/pcomm/pcomm.com ::command.com
 
 run-qemu: chimaera.img chimaera.vhd
-       qemu-system-i386 -cpu 486 -drive file="chimaera.img",format=raw,if=floppy,index=0 -m 4M
+#      qemu-system-i386 -cpu 486 -drive file="chimaera.img",format=raw,if=floppy,index=0 -m 4M
        qemu-system-i386 -cpu 486 -drive file="chimaera.vhd",format=raw,if=ide,index=0 -m 4M
index 741438feca96d1c342000c93135c558a8764372b..4216d22b1f9780a8a23b7d0d7f29b1991298fe61 100644 (file)
@@ -116,6 +116,26 @@ _make_dos_entry:
     mov     word ptr [bp - 48],     ax
     mov     word ptr [bp - 46],     dx
     
+    cmp     dx,     cs:[_root_cluster + 2]
+    jne     _make_dos_entry.got_prev
+    
+    cmp     ax,     cs:[_root_cluster]
+    jne     _make_dos_entry.got_prev
+    
+    push    ax
+    push    dx
+    
+    xor     ax,     ax
+    xor     dx,     dx
+    
+    mov     word ptr [bp - 48],     ax
+    mov     word ptr [bp - 46],     dx
+    
+    pop     dx
+    pop     ax
+
+_make_dos_entry.got_prev:
+
     mov     word ptr [bp - 36],     cx
     mov     word ptr [bp - 32],     bx
     
@@ -443,6 +463,52 @@ _make_dos_entry.got_clust:
     xor     bx,     bx
     call    _write_sectors
     
+    mov     ax,     cs:[_info_sector]
+    
+    and     ax,     ax
+    jz      _make_dos_entry.done
+    
+    xor     dx,     dx
+    
+    add     ax,     cs:[_hidden_sectors]
+    adc     dx,     cs:[_hidden_sectors + 2]
+    
+    mov     bx,     cs:[_disk_scratch]
+    mov     es,     bx
+    xor     bx,     bx
+    
+    mov     cx,     1
+    call    _read_sectors
+    
+    mov     di,     HEX (01E0)
+    
+    mov     ax,     es:[di + 8]
+    mov     dx,     es:[di + 10]
+    
+    sub     ax,     1
+    sbb     dx,     0
+    
+    mov     es:[di + 8],    ax
+    mov     es:[di + 10],   dx
+    
+    mov     ax,     es:[di + 12]
+    mov     dx,     es:[di + 14]
+    
+    add     ax,     1
+    adc     dx,     0
+    
+    mov     es:[di + 12],   ax
+    mov     es:[di + 14],   dx
+    
+    mov     ax,     cs:[_info_sector]
+    xor     dx,     dx
+    
+    add     ax,     cs:[_hidden_sectors]
+    adc     dx,     cs:[_hidden_sectors + 2]
+    
+    mov     cx,     1
+    call    _write_sectors
+    
     jmp     _make_dos_entry.done
 
 _make_dos_entry.error: