VeraCrypt
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Boot/Windows/BootSector.asm31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/Boot/Windows/BootSector.asm b/src/Boot/Windows/BootSector.asm
index 33674146..351b2c67 100644
--- a/src/Boot/Windows/BootSector.asm
+++ b/src/Boot/Windows/BootSector.asm
@@ -43,23 +43,24 @@ main:
call print
skip_loader_name_msg:
- ; Determine boot loader segment
- mov ax, TC_BOOT_LOADER_SEGMENT
-
- ; Check available memory
- cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
- jge memory_ok
-
- mov ax, TC_BOOT_LOADER_SEGMENT_LOW
-
- cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT_LOW / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
- jge memory_ok
-
- ; Insufficient memory
- mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
+ ; Determine boot loader segment
+ mov ax, word ptr [ds:413h] ;available kB from BIOS
+ sub ax, TC_BOOT_MEMORY_REQUIRED ;minus TC_BOOT_MEMORY_REQUIRED
+ jc mem_toolow
+ and ax, 0FFE0h ;32K align
+ shl ax, 6 ;convert kB to segment addr (*1024/16)
+ cmp ax, 8000h
+ jb mem_toolow ;we can't load below 8000h
+ cmp ax, TC_BOOT_LOADER_SEGMENT
+ jbe memory_ok ;don't load above TC_BOOT_LOADER_SEGMENT (9000h)
+ mov ax, TC_BOOT_LOADER_SEGMENT
+ jmp memory_ok
+
+mem_toolow:
+ mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
memory_ok:
- mov es, ax
+ mov es, ax
; Clear BSS section
xor al, al