1 | ; AiR-BOOT (c) Copyright 1998-2008 M. Kiewitz
|
---|
2 | ;
|
---|
3 | ; This file is part of AiR-BOOT
|
---|
4 | ;
|
---|
5 | ; AiR-BOOT is free software: you can redistribute it and/or modify it under
|
---|
6 | ; the terms of the GNU General Public License as published by the Free
|
---|
7 | ; Software Foundation, either version 3 of the License, or (at your option)
|
---|
8 | ; any later version.
|
---|
9 | ;
|
---|
10 | ; AiR-BOOT is distributed in the hope that it will be useful, but WITHOUT ANY
|
---|
11 | ; WARRANTY: without even the implied warranty of MERCHANTABILITY or FITNESS
|
---|
12 | ; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
---|
13 | ; details.
|
---|
14 | ;
|
---|
15 | ; You should have received a copy of the GNU General Public License along with
|
---|
16 | ; AiR-BOOT. If not, see <http://www.gnu.org/licenses/>.
|
---|
17 | ;
|
---|
18 |
|
---|
19 | ;JUMPS
|
---|
20 |
|
---|
21 | Include ../../../INCLUDE/ASM.INC
|
---|
22 |
|
---|
23 | .386p
|
---|
24 | .model large, basic
|
---|
25 |
|
---|
26 | code_seg segment public use16
|
---|
27 | assume cs:code_seg, ds:nothing, es:nothing, ss:nothing
|
---|
28 | org 100h
|
---|
29 | air_boot_setup: jmp INITHDD_Start
|
---|
30 |
|
---|
31 | Introduction db 'INITHDD - AiR-BOOT Initialize HDD Utility (DOS) - (c) 2004 by M. Kiewitz',13,10
|
---|
32 | db 0
|
---|
33 |
|
---|
34 | TXT_ERROR_IO db 'Could not access harddrive', 13, 10, 0
|
---|
35 | TXT_ERROR_NotNeeded db 'INITHDD: Initialization not needed.', 13, 10, 0
|
---|
36 | TXT_Done db 'INITHDD: HDD was successfully initialized.', 13, 10, 0
|
---|
37 | TXT_Cleared db 'INITHDD: Reserved Sectors successfully cleared.', 13, 10, 0 ; Rousseau: added
|
---|
38 |
|
---|
39 | StandardMBR:
|
---|
40 | dw 02BFAh, 08EC0h, 0B8D0h, 07C00h, 0E08Bh, 0FCFBh, 0C02Bh, 0D88Eh, 000BEh
|
---|
41 | dw 0B87Ch, 00060h, 0C08Eh, 0FF2Bh, 000B9h, 0F301h, 0EAA5h, 00024h, 00060h
|
---|
42 | dw 0C88Ch, 0D88Eh, 004B9h, 0BF00h, 001BEh, 0158Bh, 0FA80h, 07480h, 0800Ch
|
---|
43 | dw 000FAh, 05075h, 0C783h, 0E210h, 0CDEFh, 08B18h, 0EBF7h, 0830Dh, 010C7h
|
---|
44 | dw 0058Bh, 0803Ch, 03C74h, 0003Ch, 03875h, 0F1E2h, 005B9h, 0B800h, 00000h
|
---|
45 | dw 0C08Eh, 000BBh, 0B47Ch, 0B002h, 05101h, 04C8Bh, 0CD02h, 05913h, 00B73h
|
---|
46 | dw 000B4h, 013CDh, 0E5E2h, 0C9BEh, 0EB00h, 02616h, 0BF81h, 001FEh, 0AA55h
|
---|
47 | dw 00575h, 000EAh, 0007Ch, 0BE00h, 000B5h, 003EBh, 09DBEh, 0AC00h, 0243Ch
|
---|
48 | dw 0FE74h, 0BB56h, 00007h, 00EB4h, 010CDh, 0EB5Eh, 049F0h, 0766Eh, 06C61h
|
---|
49 | dw 06469h, 07020h, 07261h, 06974h, 06974h, 06E6Fh, 07420h, 06261h, 0656Ch
|
---|
50 | dw 04E24h, 0206Fh, 0706Fh, 07265h, 07461h, 06E69h, 02067h, 07973h, 07473h
|
---|
51 | dw 06D65h, 04F24h, 06570h, 06172h, 06974h, 0676Eh, 07320h, 07379h, 06574h
|
---|
52 | dw 0206Dh, 06F6Ch, 06461h, 06520h, 07272h, 0726Fh, 00024h, 00000h, 00000h
|
---|
53 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
54 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
55 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
56 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
57 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
58 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
59 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
60 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
61 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
62 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
63 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
64 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
65 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
66 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
67 | dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
|
---|
68 | dw 00000h, 00000h, 00000h, 0AA55h
|
---|
69 |
|
---|
70 | ; Include ../../../INCLUDE\DOS\CONST.ASM
|
---|
71 |
|
---|
72 | INITHDD_Start: mov ax, cs
|
---|
73 | mov ds, ax
|
---|
74 | mov es, ax ; DS==ES==CS
|
---|
75 | ; Show Introduction message
|
---|
76 | mov si, offset Introduction
|
---|
77 | call MBR_Teletype
|
---|
78 |
|
---|
79 | mov ax, cs
|
---|
80 | mov es, ax
|
---|
81 | mov bx, offset CurMBR
|
---|
82 | mov dx, 0080h ; First harddrive, Sector 1
|
---|
83 | mov cx, 0001h
|
---|
84 | mov ax, 0201h ; Read 1 sector
|
---|
85 | int 13h
|
---|
86 | jnc Clear ; Rousseau: added (only clear)
|
---|
87 | jnc LoadMBR_NoError
|
---|
88 | mov si, offset TXT_ERROR_IO
|
---|
89 | call MBR_Teletype
|
---|
90 | jmp GoByeBye
|
---|
91 | LoadMBR_NoError:
|
---|
92 | ; Check Master-Boot-Record Signature
|
---|
93 | cmp wptr ds:[CurMBR+01FEh], 0AA55h
|
---|
94 | ;;je AlreadyInitialized ; Rousseau: always initialize
|
---|
95 |
|
---|
96 | mov ax, cs
|
---|
97 | mov es, ax ; Make sure that ES is right
|
---|
98 | mov bx, offset StandardMBR
|
---|
99 | mov dx, 0080h ; First harddrive, Sector 1...
|
---|
100 | mov cx, 0001h
|
---|
101 | mov ax, 0301h ; Function 03, 1 sector to write
|
---|
102 | int 13h
|
---|
103 | jnc Done
|
---|
104 | mov si, offset TXT_ERROR_IO
|
---|
105 | call MBR_Teletype
|
---|
106 | jmp GoByeBye
|
---|
107 | Done:
|
---|
108 | mov si, offset TXT_Done
|
---|
109 | call MBR_Teletype
|
---|
110 |
|
---|
111 | ; Rousseau: added
|
---|
112 | Clear:
|
---|
113 | call MBR_ClearReservedSectors
|
---|
114 | mov si, offset TXT_Cleared
|
---|
115 | call MBR_Teletype
|
---|
116 | ; Rousseau: end added
|
---|
117 |
|
---|
118 | jmp GoByeBye
|
---|
119 |
|
---|
120 | AlreadyInitialized:
|
---|
121 | mov si, offset TXT_Error_NotNeeded
|
---|
122 | call MBR_Teletype
|
---|
123 |
|
---|
124 | GoByeBye: mov ax, 4C00h
|
---|
125 | int 21h ; Terminate us...
|
---|
126 | ; End-Of-Code
|
---|
127 |
|
---|
128 | ; In: SI - Pointer to begin of string (EOS is 0)
|
---|
129 | ; Destroyed: SI
|
---|
130 | MBR_Teletype Proc Near Uses ax bx cx
|
---|
131 | mov ah, 0Eh
|
---|
132 | mov bx, 7
|
---|
133 | MBR_Teletype_Loop:
|
---|
134 | lodsb
|
---|
135 | or al, al
|
---|
136 | jz MBR_Teletype_End
|
---|
137 | int 10h
|
---|
138 | jmp MBR_Teletype_Loop
|
---|
139 | MBR_Teletype_End:
|
---|
140 | ret
|
---|
141 | MBR_Teletype EndP
|
---|
142 |
|
---|
143 |
|
---|
144 | ; Rousseau: added
|
---|
145 | MBR_ClearReservedSectors Proc Near
|
---|
146 | mov ax, cs
|
---|
147 | mov es, ax ; Make sure that ES is right
|
---|
148 | mov cx, 2 ; Index of first reserved sector to clear
|
---|
149 | MBR_ClearReservedSectors_loop:
|
---|
150 | push cx ; Put on stack for later use
|
---|
151 | mov bx, offset ZeroSEC ; Block of 0's
|
---|
152 | mov dx, 0080h ; First harddrive, Sector in cx
|
---|
153 | ;mov cx, 0001h
|
---|
154 | mov ax, 0301h ; Function 03, 1 sector to write
|
---|
155 | int 13h
|
---|
156 | pop cx ; Pop sector-index
|
---|
157 | inc cx ; Next sector
|
---|
158 | cmp cx, 62 ; If below 63 (Possible LVM) then...
|
---|
159 | jbe MBR_ClearReservedSectors_loop ; Repeat
|
---|
160 | ret
|
---|
161 | MBR_ClearReservedSectors EndP
|
---|
162 |
|
---|
163 |
|
---|
164 |
|
---|
165 | CurMBR db 512 dup (?)
|
---|
166 | ZeroSEC db 512 dup (0) ; Rousseau: added
|
---|
167 |
|
---|
168 | code_seg ends
|
---|
169 | end air_boot_setup
|
---|