|
|
1.1 root 1: ;
2: ; Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
3: ;
4: ; Governed by the TrueCrypt License 2.4 the full text of which is contained
5: ; in the file License.txt included in TrueCrypt binary and source code
6: ; distribution packages.
7: ;
8:
9: .MODEL tiny
10: .386
11: _TEXT SEGMENT
12:
13: INCLUDE BootDefs.i
14:
15: ORG 7C00h ; Boot sector offset
16:
17: TC_PC_MEMORY_SEGMENT_SIZE = 64
18: TC_PC_BASE_MEMORY_SIZE = 640
19:
20: start:
21: ; BIOS executes boot sector from 0:7C00 or 7C0:0000 (default CD boot loader address).
22: ; Far jump to the next instruction ensures the offset matches the ORG directive.
23: db 0EAh ; jmp 0:main
24: dw main, 0
25:
26: db 'TrueCrypt'
27:
28: main:
29: mov ax, cs
30: mov ds, ax
31:
32: lea si, intro_msg
33: call print
34:
35: mov ax, TC_BOOT_LOADER_SEGMENT
36: mov es, ax ; Default load segment
37: xor si, si ; Default SP
38:
39: ; Check available memory
40: mov ax, word ptr [ds:413h]
41:
42: ; >= 640 KB?
43: mov bx, TC_PC_BASE_MEMORY_SIZE
44: cmp ax, bx
45: jge clear_memory
46:
47: ; < required memory?
48: cmp ax, TC_PC_BASE_MEMORY_SIZE - (TC_PC_MEMORY_SEGMENT_SIZE - TC_BOOT_MEMORY_REQUIRED)
49: jge s0
50:
51: ; Insufficient memory
52: mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
53: mov es, ax
54: jmp clear_memory
55:
56: s0:
57: ; SP = 0 - ((640 - *0:0413) * 1024)
58: sub bx, ax
59: shl bx, 10
60: sub si, bx
61:
62: ; Ensure clear BSS section
63: clear_memory:
64: xor al, al
65: mov di, TC_BOOT_LOADER_OFFSET
66: mov cx, TC_BOOT_MEMORY_REQUIRED * 1024 - 1
67: rep stosb
68:
69: ; Read boot loader
70: mov bx, TC_BOOT_LOADER_OFFSET
71: mov ch, 0 ; Cylinder
72: mov dh, 0 ; Head
73: mov cl, 2 ; Sector
74: mov al, TC_BOOT_LOADER_AREA_SECTOR_COUNT - 2
75: ; DL = drive number passed from BIOS
76: mov ah, 2
77: int 13h
78: jnc exec_loader
79:
80: lea si, read_error_msg
81: call print
82: jmp $
83:
84: ; Execute boot loader
85: exec_loader:
86:
87: ; DH = boot sector flags
88: mov dh, byte ptr [start + TC_BOOT_SECTOR_CONFIG_OFFSET]
89:
90: mov ax, es
91: mov ds, ax
92: cli
93: mov ss, ax
94: mov sp, si
95: sti
96:
97: mov word ptr [cs:jump_seg], es
98:
99: db 0EAh ; jmp TC_BOOT_LOADER_SEGMENT:TC_BOOT_LOADER_OFFSET
100: dw TC_BOOT_LOADER_OFFSET
101: jump_seg:
102: dw TC_BOOT_LOADER_SEGMENT
103:
104: ; Print string
105: print:
106: xor bx, bx
107: mov ah, 0eh
108:
109: @@: lodsb
110: test al, al
111: jz print_end
112:
113: int 10h
114: jmp @B
115:
116: print_end:
117: ret
118:
119: intro_msg db 13, 10, "TrueCrypt Boot Loader", 13, 10, 0
120: read_error_msg db "Disk read error", 13, 10, 7, 0
121:
122: db 508 - ($ - start) dup (0)
123: dw 0, 0AA55h ; Boot sector signature
124:
125: _TEXT ENDS
126: END start
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.