Fixed off by 1 bugs
authorRobert Pengelly <robertapengelly@hotmail.com>
Wed, 7 Aug 2024 11:11:41 +0000 (12:11 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Wed, 7 Aug 2024 11:11:41 +0000 (12:11 +0100)
build/chimaera.img
build/chimaera.vhd
src/apps/hello/hello.asm
src/kernel/file.asm

index c557ec32ece0d8483a2638fcac5af373429a7b09..2979e9a6ab4ad936b400bfd86c80bf5a0f0bdb0b 100644 (file)
Binary files a/build/chimaera.img and b/build/chimaera.img differ
index 4f0093bfadd441215f898dbee5b4b661fd9829b3..cb81b9896e35a529d13f514c119092e474b81155 100644 (file)
Binary files a/build/chimaera.vhd and b/build/chimaera.vhd differ
index 1e8ab640908cda37d64e829badcd94151e989c7f..805c24e83d39d2176a63400e79fe6931d633396e 100644 (file)
@@ -44,7 +44,7 @@ _main:
     mov     bx,     ax
     
     mov     ax,     HEX (4202)
-    mov     cx,     1024
+    mov     cx,     4096
     xor     dx,     dx
     int     HEX (21)
     jc      .exit
@@ -59,7 +59,7 @@ _main:
     jc      .exit
     
     mov     ax,     HEX (4200)
-    mov     cx,     16
+    mov     cx,     1000
     xor     dx,     dx
     int     HEX (21)
     jc      .exit
index 2b67d1fee2ebdd12c9b1350678a7b46fd278b6c6..92957e276cc1a9706715b6515612c68bb9f431c1 100644 (file)
@@ -1162,7 +1162,7 @@ _write_file:
     push    bp
     
     mov     bp,     sp
-    sub     sp,     12
+    sub     sp,     16
     
     push    bx
     push    cx
@@ -1221,6 +1221,13 @@ _write_file.truncate:
     
     mov     bx,     ax
     
+    and     dx,     dx
+    jz      .L3
+    
+    inc     bx
+
+.L3:
+
     mov     ax,     es:[si + 62]
     mov     dx,     es:[si + 64]
     
@@ -1228,6 +1235,14 @@ _write_file.truncate:
     div     cx
     
     mov     cx,     ax
+    
+    and     dx,     dx
+    jz      .L3
+    
+    inc     cx
+
+.L4:
+
     xchg    bx,     cx
     
     mov     ax,     es:[si + 58]
@@ -1241,11 +1256,11 @@ _write_file.truncate_walk:
     and     bx,     bx
     jz      _write_file.truncate_ok
     
+    dec     cx
+    
     call    cs:[_next_cluster]
     jc      _write_file.truncate_ok
     
-    dec     cx
-    
     dec     bx
     jnz     _write_file.truncate_walk
 
@@ -1254,6 +1269,9 @@ _write_file.truncate_ok:
     mov     ax,     word ptr [bp - 6]
     mov     dx,     word ptr [bp - 4]
     
+    mov     word ptr [bp - 16],     ax
+    mov     word ptr [bp - 14],     dx
+    
     mov     word ptr [bp - 12],     cx
 
 _write_file.truncate_loop:
@@ -1321,21 +1339,59 @@ _write_file.truncate_done:
     and     bx,     bx
     jz      _write_file.truncate_update
     
-    mov     ax,     es:[si + 58]
-    mov     dx,     es:[si + 60]
+    mov     cx,     word ptr [bp - 12]
+    
+    cmp     cx,     2
+    jb      _write_file.truncate_expand_done
+    
+    sub     cx,     2
+
+_write_file.truncate_expand:
+
+    and     cx,     cx
+    jz      _write_file.truncate_expand_done
+    
+    call    cs:[_find_free]
+    jc      _write_file.truncate_expand_done
+    
+    push    bx
+    push    cx
+    
+    mov     bx,     dx
+    mov     cx,     ax
+    
+    mov     ax,     word ptr [bp - 16]
+    mov     dx,     word ptr [bp - 14]
+    
+    call    cs:[_update_cluster]
     
+    mov     word ptr [bp - 16],     cx
+    mov     word ptr [bp - 14],     bx
+    
+    pop     cx
+    pop     bx
+    
+    dec     cx
+    jnz     _write_file.truncate_expand
+
+_write_file.truncate_expand_done:
+
     push    bx
     push    cx
     
     mov     bx,     HEX (FFFF)
     mov     cx,     HEX (FFF8)
     
+    mov     ax,     word ptr [bp - 16]
+    mov     dx,     word ptr [bp - 14]
+    
     call    cs:[_update_cluster]
     
     pop     cx
     pop     bx
     
-    dec     word ptr [bp - 12]
+    mov     ax,     es:[si + 58]
+    mov     dx,     es:[si + 60]
 
 _write_file.truncate_update:
 
@@ -1469,6 +1525,13 @@ _write_file.extend:
     
     mov     bx,     ax
     
+    and     dx,     dx
+    jz      .L2
+    
+    inc     bx
+
+.L2:
+
     mov     ax,     es:[si + 62]
     mov     dx,     es:[si + 64]
     
@@ -1477,6 +1540,13 @@ _write_file.extend:
     
     mov     cx,     ax
     
+    and     dx,     dx
+    jz      .L1
+    
+    inc     cx
+
+.L1:
+    
     mov     ax,     es:[si + 58]
     mov     dx,     es:[si + 60]
     
@@ -1741,7 +1811,7 @@ _write_file.done:
     pop     cx
     pop     bx
     
-    add     sp,     12
+    add     sp,     16
     clc
     
     mov     ax,     word ptr [bp - 2]
@@ -1761,7 +1831,7 @@ _write_file.error:
     pop     cx
     pop     bx
     
-    add     sp,     12
+    add     sp,     16
     stc
     
     mov     ax,     5