Rev 12 | Rev 34 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 12 | Rev 29 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; BOOTCODE.INC ;; |
3 | ;; BOOTCODE.INC ;; |
4 | ;; ;; |
4 | ;; ;; |
5 | ;; 16 bit bootcode for MenuetOS ;; |
- | |
6 | ;; ;; |
5 | ;; KolibriOS 16-bit loader, ;; |
7 | ;; Copyright 2002 Ville Turjanmaa ;; |
- | |
8 | ;; ;; |
6 | ;; based on bootcode for MenuetOS ;; |
9 | ;; See file COPYING for details ;; |
- | |
10 | ;; ;; |
7 | ;; ;; |
11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
8 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 16... | Line 13... | ||
16 | ; |
13 | ; |
17 | ; 16 BIT FUNCTIONS |
14 | ; 16 BIT FUNCTIONS |
18 | ; |
15 | ; |
19 | ;========================================================================== |
16 | ;========================================================================== |
Line 20... | Line 17... | ||
20 | 17 | ||
21 | print: push si |
18 | putchar: |
22 | mov si,leftpr-0x10000 |
19 | ; in: al=character |
23 | call printplain |
20 | mov ah, 0Eh |
- | 21 | mov bh, 0 |
|
- | 22 | int 10h |
|
Line -... | Line 23... | ||
- | 23 | ret |
|
24 | pop si |
24 | |
25 | 25 | print: |
|
- | 26 | ; in: si->string |
|
26 | printplain: pusha |
27 | mov al, 186 |
27 | mov dx,0x1000 |
28 | call putchar |
- | 29 | mov al, ' ' |
|
28 | mov es,dx |
30 | call putchar |
29 | cmp byte [es:display_atboot-0x10000],2 |
31 | |
30 | je printplain_exit |
32 | printplain: |
31 | mov ds,dx |
33 | ; in: si->string |
32 | cld |
34 | pusha |
33 | lodsb |
- | |
34 | prpl1: |
- | |
35 | mov ah,0xe |
35 | lodsb |
36 | xor bh,bh |
36 | @@: |
37 | int 0x10 |
37 | call putchar |
38 | lodsb |
38 | lodsb |
39 | cmp al,0 |
- | |
40 | jne prpl1 |
39 | cmp al, 0 |
41 | printplain_exit: |
40 | jnz @b |
Line 42... | Line -... | ||
42 | popa |
- | |
43 | ret |
41 | popa |
44 | 42 | ret |
|
45 | setbase1000: push ax |
- | |
46 | mov ax,0x1000 |
- | |
47 | mov es,ax |
- | |
48 | mov ds,ax |
43 | |
49 | pop ax |
44 | ; Now int 16 is used for keyboard support. |
50 | ret |
45 | ; This is shorter, simpler and more reliable. |
51 | 46 | if 0 |
|
52 | getkey: push ecx |
47 | getkey: push ecx |
Line 108... | Line 103... | ||
108 | gk3: |
103 | gk3: |
109 | sub eax,48 |
104 | sub eax,48 |
110 | pop edx |
105 | pop edx |
111 | pop ecx |
106 | pop ecx |
112 | ret |
107 | ret |
- | 108 | end if |
|
- | 109 | ||
- | 110 | getkey: |
|
- | 111 | ; get number in range [bl,bh] (bl,bh in ['0'..'9']) |
|
- | 112 | ; in: bx=range |
|
- | 113 | ; out: ax=digit (1..9, 10 for 0) |
|
- | 114 | mov ah, 0 |
|
- | 115 | int 16h |
|
- | 116 | cmp al, bl |
|
- | 117 | jb getkey |
|
- | 118 | cmp al, bh |
|
- | 119 | ja getkey |
|
- | 120 | push ax |
|
- | 121 | call putchar |
|
- | 122 | pop ax |
|
- | 123 | and ax, 0Fh |
|
- | 124 | jnz @f |
|
- | 125 | mov al, 10 |
|
- | 126 | @@: |
|
- | 127 | ret |
|
- | 128 | ||
- | 129 | setcursor: |
|
- | 130 | ; in: dl=column, dh=row |
|
- | 131 | mov ah, 2 |
|
- | 132 | mov bh, 0 |
|
- | 133 | int 10h |
|
- | 134 | ret |
|
- | 135 | ||
- | 136 | macro _setcursor row,column |
|
- | 137 | { |
|
- | 138 | mov dx, row*256 + column |
|
- | 139 | call setcursor |
|
- | 140 | } |
|
- | 141 | ||
- | 142 | ; 16-bit data |
|
- | 143 | ; videomodes table |
|
- | 144 | gr_table: |
|
- | 145 | dw 0x112+0100000000000000b , 640 , 480 ; 1 |
|
- | 146 | dw 0x115+0100000000000000b , 800 , 600 ; 2 |
|
- | 147 | dw 0x118+0100000000000000b , 1024 , 768 ; 3 |
|
- | 148 | dw 0x11B+0100000000000000b , 1280 , 1024 ; 4 |
|
- | 149 | dw 0x112 , 640 , 480 ; 5 |
|
- | 150 | dw 0x115 , 800 , 600 ; 6 |
|
- | 151 | dw 0x118 , 1024 , 768 ; 7 |
|
- | 152 | dw 0x11B , 1280 ,1024 ; 8 |
|
- | 153 | dw 0x13, 320, 200 ; 9 |
|
- | 154 | dw 0x12, 640, 480 ; 0 |
|
- | 155 | ||
- | 156 | ; table for move to extended memory (int 15h, ah=87h) |
|
- | 157 | movedesc: |
|
- | 158 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
- | 159 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
- | 160 | ||
- | 161 | db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0 |
|
- | 162 | db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0 |
|
Line -... | Line 163... | ||
- | 163 | ||
- | 164 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
- | 165 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
- | 166 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
Line 113... | Line 167... | ||
113 | 167 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
|
114 | 168 | ||
115 | ;========================================================================= |
169 | ;========================================================================= |
116 | ; |
170 | ; |
117 | ; 16 BIT CODE |
171 | ; 16 BIT CODE |
Line 118... | Line 172... | ||
118 | ; |
172 | ; |
- | 173 | ;========================================================================= |
|
- | 174 | ||
- | 175 | ||
- | 176 | start_of_code: |
|
- | 177 | cld |
|
- | 178 | ; \begin{diamond}[02.12.2005] |
|
- | 179 | cmp ax, 'KL' |
|
- | 180 | jnz @f |
|
Line 119... | Line -... | ||
119 | ;========================================================================= |
- | |
120 | - | ||
121 | - | ||
122 | start_of_code: |
181 | mov word [cs:cfgmanager.loader_block-0x10000], si |
123 | - | ||
124 | ; RESET 16 BIT SELECTORS/REGISTERS/STACK |
- | |
125 | 182 | mov word [cs:cfgmanager.loader_block+2-0x10000], ds |
|
126 | mov ax,0x1000 |
183 | @@: |
127 | mov es,ax |
184 | ; \end{diamond}[02.12.2005] |
128 | mov ds,ax |
- | |
129 | - | ||
130 | mov ax,0x3000 |
185 | |
131 | mov ss,ax |
186 | ; set up stack |
132 | mov sp,0xec00 |
187 | mov ax, 3000h |
133 | 188 | mov ss, ax |
|
134 | xor ax,ax |
- | |
135 | xor bx,bx |
- | |
136 | xor cx,cx |
- | |
137 | xor dx,dx |
- | |
138 | xor si,si |
- | |
139 | xor di,di |
189 | mov sp, 0EC00h |
140 | xor bp,bp |
- | |
141 | - | ||
142 | - | ||
143 | - | ||
144 | ; DRAW FRAMES |
- | |
Line 145... | Line -... | ||
145 | - | ||
146 | call setbase1000 |
190 | ; set up segment registers |
147 | 191 | push cs |
|
148 | cmp byte [es:display_atboot-0x10000],2 |
192 | pop ds |
Line 149... | Line -... | ||
149 | je no_mode_atboot |
- | |
150 | - | ||
151 | mov ax,0x0003 |
193 | push cs |
152 | mov bx,0x0000 |
194 | pop es |
153 | mov dx,0x0000 |
195 | |
154 | int 0x10 |
196 | ; set videomode |
155 | 197 | mov ax, 3 |
|
156 | no_mode_atboot: |
198 | int 0x10 |
157 | - | ||
158 | ; Load & set russian VGA font (RU.INC) |
- | |
159 | mov bp,RU_FNT1-10000h ; RU_FNT1 - First part |
199 | |
Line 160... | Line 200... | ||
160 | mov bx,1000h ; 768 bytes |
200 | ; Load & set russian VGA font (RU.INC) |
161 | mov cx,30h ; 48 symbols |
201 | mov bp,RU_FNT1-10000h ; RU_FNT1 - First part |
162 | mov dx,80h ; 128 - position of first symbol |
202 | mov bx,1000h ; 768 bytes |
163 | mov ax,1100h |
203 | mov cx,30h ; 48 symbols |
164 | push cs |
204 | mov dx,80h ; 128 - position of first symbol |
165 | pop es |
- | |
166 | int 10h |
- | |
167 | 205 | mov ax,1100h |
|
168 | mov bp,RU_FNT2-10000h ; RU_FNT2 -Second part |
206 | int 10h |
Line -... | Line 207... | ||
- | 207 | ||
- | 208 | mov bp,RU_FNT2-10000h ; RU_FNT2 -Second part |
|
- | 209 | mov bx,1000h ; 512 bytes |
|
- | 210 | mov cx,20h ; 32 symbols |
|
169 | mov bx,1000h ; 512 bytes |
211 | mov dx,0E0h ; 224 - position of first symbol |
170 | mov cx,20h ; 32 symbols |
212 | mov ax,1100h |
171 | mov dx,0E0h ; 224 - position of first symbol |
213 | int 10h |
- | 214 | ; End set VGA russian font |
|
172 | mov ax,1100h |
215 | |
173 | push cs |
216 | ; draw frames |
174 | pop es |
217 | push 0xb800 |
175 | int 10h |
218 | pop es |
- | 219 | xor di, di |
|
- | 220 | ; mov si,d80x25-0x10000 |
|
- | 221 | ; mov cx,80*25 |
|
- | 222 | ; mov ah,1*16+15 |
|
- | 223 | ; dfl1: |
|
- | 224 | ; lodsb |
|
- | 225 | ; stosw |
|
- | 226 | ; loop dfl1 |
|
- | 227 | mov ah, 1*16+15 |
|
- | 228 | ; draw top |
|
176 | ; End set VGA russian font |
229 | mov si, d80x25_top - 0x10000 |
- | 230 | mov cx, d80x25_top_num * 80 |
|
- | 231 | @@: |
|
177 | 232 | lodsb |
|
- | 233 | stosw |
|
178 | call setbase1000 |
234 | loop @b |
179 | mov ax,0xb800 |
235 | ; draw spaces |
- | 236 | mov si, space_msg - 0x10000 |
|
- | 237 | mov cx, 25 - d80x25_top_num - d80x25_bottom_num |
|
- | 238 | dfl1: |
|
180 | mov es,ax |
239 | push cx |
- | 240 | push si |
|
- | 241 | mov cx, 80 |
|
- | 242 | @@: |
|
- | 243 | lodsb |
|
- | 244 | stosw |
|
- | 245 | loop @b |
|
- | 246 | pop si |
|
Line 181... | Line 247... | ||
181 | mov di,0 |
247 | pop cx |
Line 182... | Line -... | ||
182 | mov si,d80x25-0x10000 |
- | |
183 | mov cx,80*25 |
- | |
184 | mov ah,1*16+15 |
- | |
185 | dfl1: |
- | |
186 | cld |
248 | loop dfl1 |
187 | lodsb |
- | |
188 | stosw |
- | |
Line 189... | Line 249... | ||
189 | loop dfl1 |
249 | ; draw bottom |
Line -... | Line 250... | ||
- | 250 | mov si, d80x25_bottom - 0x10000 |
|
190 | 251 | mov cx, d80x25_bottom_num * 80 |
|
191 | call setbase1000 |
252 | @@: |
192 | 253 | lodsb |
|
193 | 254 | stosw |
|
194 | ; SAY HI TO USER |
255 | loop @b |
195 | 256 | ||
196 | mov si,linef2-0x10000 |
257 | mov byte [space_msg-0x10000+80], 0 ; now space_msg is null terminated |
197 | call printplain |
258 | |
198 | mov si,version-0x10000 |
259 | _setcursor d80x25_top_num,0 |
199 | call print |
260 | |
200 | 261 | ||
201 | 262 | ; TEST FOR 386+ |
|
202 | ; TEST FOR 386+ |
263 | |
203 | 264 | mov bx, 0x4000 |
|
204 | pushf |
265 | pushf |
205 | pop ax |
266 | pop ax |
Line 206... | Line -... | ||
206 | mov dx,ax |
- | |
207 | xor ax,0x4000 |
- | |
208 | push ax |
- | |
209 | popf |
267 | mov dx,ax |
210 | pushf |
- | |
211 | pop ax |
- | |
212 | and ax,0x4000 |
- | |
213 | and dx,0x4000 |
- | |
214 | cmp ax,dx |
- | |
215 | jnz cpugood |
- | |
216 | mov si,not386-0x10000 |
- | |
217 | call print |
- | |
218 | jmp $ |
- | |
219 | cpugood: |
- | |
220 | 268 | xor ax,bx |
|
221 | ; RESET 32 BIT SELECTORS/REGISTERS/SELECTORS |
- | |
222 | - | ||
223 | mov ax,0x1000 |
- | |
224 | mov es,ax |
- | |
Line 225... | Line 269... | ||
225 | mov ds,ax |
269 | push ax |
Line 226... | Line 270... | ||
226 | 270 | popf |
|
227 | mov ax,0x3000 |
271 | pushf |
Line 281... | Line 325... | ||
281 | ; test al,2 ;ïðîâåðêà áèòà ãîòîâÃîñòè |
325 | ; test al,2 ;ïðîâåðêà áèòà ãîòîâÃîñòè |
282 | ; loopnz test_kbd |
326 | ; loopnz test_kbd |
Line 283... | Line 327... | ||
283 | 327 | ||
284 | mov al,0xf6 ; Ñáðîñ êëà âèà òóðû, ðà çðåøèòü ñêà Ãèðîâà Ãèå |
328 | mov al,0xf6 ; Ñáðîñ êëà âèà òóðû, ðà çðåøèòü ñêà Ãèðîâà Ãèå |
285 | out 0x60,al |
329 | out 0x60,al |
286 | mov cx,0 |
330 | xor cx,cx |
287 | wait_loop: ; variant 2 |
331 | wait_loop: ; variant 2 |
288 | ; reading state of port of 8042 controller |
332 | ; reading state of port of 8042 controller |
289 | in al,64h |
333 | in al,64h |
290 | and al,00000010b ; ready flag |
334 | and al,00000010b ; ready flag |
291 | ; wait until 8042 controller is ready |
335 | ; wait until 8042 controller is ready |
Line 292... | Line 336... | ||
292 | loopnz wait_loop |
336 | loopnz wait_loop |
Line 293... | Line 337... | ||
293 | 337 | ||
294 | ; DISPLAY VESA INFORMATION |
338 | ; DISPLAY VESA INFORMATION |
295 | 339 | ||
296 | mov ax,0x0 |
340 | push 0 |
297 | mov es,ax |
341 | pop es |
298 | mov ax,0x4f00 |
342 | mov ax,0x4f00 |
299 | mov di,0xa000 |
- | |
300 | int 0x10 |
- | |
301 | cmp ax,0x004f |
- | |
302 | je vesaok2 |
343 | mov di,0xa000 |
303 | mov dx,0x1000 |
- | |
304 | mov es,dx |
- | |
305 | mov si,novesa-0x10000 |
- | |
306 | call print |
344 | int 0x10 |
307 | mov ax,16 |
345 | cmp ax,0x004f |
308 | jmp novesafound |
- | |
309 | vesaok2: |
346 | mov si, novesa-0x10000 |
310 | mov ax,[es:di+4] |
- | |
311 | mov dx,ax |
- | |
312 | add ax,'0'*256+'0' |
347 | jnz @f |
313 | push word 0x1000 |
348 | mov ax,[es:di+4] |
314 | pop es |
- | |
315 | mov [es:vervesa+vervesa_off-0x10000], ah |
- | |
316 | mov [es:vervesa+vervesa_off+2-0x10000], al |
- | |
317 | ; ivan 24/11/2004 begin |
349 | add ax,'0'*256+'0' |
318 | ;push ax |
350 | mov [vervesa+vervesa_off-0x10000], ah |
319 | ; ivan 24/11/2004 end |
- | |
320 | mov si,vervesa-0x10000 |
- | |
321 | call print |
- | |
322 | novesafound: |
- | |
323 | call setbase1000 |
- | |
Line -... | Line 351... | ||
- | 351 | mov [vervesa+vervesa_off+2-0x10000], al |
|
- | 352 | mov si,vervesa-0x10000 |
|
- | 353 | @@: call print |
|
- | 354 | ||
- | 355 | ; \begin{diamond}[30.11.2005] |
|
- | 356 | cfgmanager: |
|
- | 357 | ; settings: |
|
- | 358 | ; a) preboot_graph = graphical mode |
|
- | 359 | ; preboot_gprobe = probe this mode? |
|
- | 360 | ; b) preboot_mtrr = use hardware acceleration? |
|
- | 361 | ; c) preboot_vrrm = use VRR? |
|
- | 362 | ; d) preboot_device = from what boot? |
|
- | 363 | mov si, preboot_graph-0x10000 |
|
- | 364 | ; check bootloader block |
|
- | 365 | cmp [.loader_block-0x10000], 0 |
|
- | 366 | jz .noloaderblock |
|
- | 367 | les bx, [.loader_block-0x10000] |
|
- | 368 | cmp byte [es:bx], 1 |
|
- | 369 | jz @f |
|
- | 370 | mov si, loader_block_error-0x10000 |
|
- | 371 | call print |
|
- | 372 | jmp $ |
|
- | 373 | @@: |
|
- | 374 | test byte [es:bx+1], 1 |
|
- | 375 | jz @f |
|
- | 376 | ; image in memory present |
|
- | 377 | cmp [si+preboot_device-preboot_graph], 0 |
|
- | 378 | jnz @f |
|
- | 379 | mov [si+preboot_device-preboot_graph], 3 |
|
- | 380 | @@: |
|
- | 381 | .noloaderblock: |
|
- | 382 | ; determine default settings |
|
- | 383 | mov [.bSettingsChanged-0x10000], 0 |
|
- | 384 | cmp byte [si], 0 |
|
- | 385 | jnz .preboot_gr_end |
|
- | 386 | mov [si+preboot_gprobe-preboot_graph], 0 |
|
- | 387 | mov al, [vervesa+vervesa_off-0x10000] |
|
- | 388 | cmp al, 'x' |
|
- | 389 | jz .novesa |
|
- | 390 | cmp al, '1' |
|
- | 391 | jz .vesa12 |
|
- | 392 | mov [si+preboot_gprobe-preboot_graph], 2 |
|
- | 393 | mov al, 3 |
|
- | 394 | jmp @f |
|
- | 395 | .vesa12: |
|
- | 396 | mov al, 7 |
|
- | 397 | jmp @f |
|
- | 398 | .novesa: |
|
- | 399 | mov al, 10 |
|
- | 400 | @@: |
|
- | 401 | mov [si], al |
|
- | 402 | .preboot_gr_end: |
|
- | 403 | cmp [si+preboot_mtrr-preboot_graph], 1 |
|
- | 404 | adc [si+preboot_mtrr-preboot_graph], 0 |
|
- | 405 | cmp [si+preboot_vrrm-preboot_graph], 1 |
|
- | 406 | adc [si+preboot_vrrm-preboot_graph], 0 |
|
- | 407 | cmp [si+preboot_device-preboot_graph], 1 |
|
- | 408 | adc [si+preboot_device-preboot_graph], 0 |
|
- | 409 | ; notify user |
|
- | 410 | mov si, linef-0x10000 |
|
- | 411 | call print |
|
- | 412 | mov si, start_msg-0x10000 |
|
- | 413 | call print |
|
- | 414 | mov si, time_msg-0x10000 |
|
- | 415 | call print |
|
- | 416 | ; get start time |
|
- | 417 | call .gettime |
|
- | 418 | mov [.starttime-0x10000], eax |
|
- | 419 | ; set timer interrupt handler |
|
- | 420 | cli |
|
- | 421 | push 0 |
|
- | 422 | pop es |
|
- | 423 | mov eax, [es:8*4] |
|
- | 424 | mov [.oldtimer-0x10000], eax |
|
- | 425 | mov word [es:8*4], .newtimer-0x10000 |
|
- | 426 | mov [es:8*4+2], cs |
|
- | 427 | .printcfg: |
|
- | 428 | _setcursor 9,0 |
|
- | 429 | mov si, current_cfg_msg-0x10000 |
|
- | 430 | call print |
|
- | 431 | mov si, curvideo_msg-0x10000 |
|
- | 432 | call print |
|
- | 433 | mov al, [preboot_graph-0x10000] |
|
- | 434 | cmp al, 8 |
|
- | 435 | ja .pnovesa |
|
- | 436 | mov dl, al |
|
- | 437 | and eax, 3 |
|
- | 438 | mov si, [modes_msg-0x10000+eax*2] |
|
- | 439 | call printplain |
|
- | 440 | mov si, modevesa20-0x10000 |
|
- | 441 | cmp dl, 4 |
|
- | 442 | jbe @f |
|
- | 443 | mov si, modevesa12-0x10000 |
|
- | 444 | @@: |
|
- | 445 | call printplain |
|
- | 446 | cmp dl, 4 |
|
- | 447 | ja .x |
|
- | 448 | mov si, probeno_msg-0x10000 |
|
- | 449 | cmp [preboot_gprobe-0x10000], 2 |
|
- | 450 | jnz @f |
|
- | 451 | mov si, probeok_msg-0x10000 |
|
- | 452 | @@: |
|
- | 453 | call printplain |
|
- | 454 | .x: |
|
- | 455 | jmp .c |
|
- | 456 | .pnovesa: |
|
- | 457 | cmp al, 9 |
|
- | 458 | mov si, mode9-0x10000 |
|
- | 459 | jz @b |
|
- | 460 | mov si, mode10-0x10000 |
|
- | 461 | jmp @b |
|
- | 462 | .c: |
|
- | 463 | mov si, linef-0x10000 |
|
- | 464 | call printplain |
|
- | 465 | mov si, mtrr_msg-0x10000 |
|
- | 466 | call print |
|
- | 467 | mov si, on_msg-0x10000 |
|
- | 468 | cmp [preboot_mtrr-0x10000], 1 |
|
- | 469 | jz @f |
|
- | 470 | mov si, off_msg-0x10000 |
|
- | 471 | @@: |
|
- | 472 | call printplain |
|
- | 473 | mov si, vrrm_msg-0x10000 |
|
- | 474 | call print |
|
- | 475 | mov si, on_msg-0x10000 |
|
- | 476 | cmp [preboot_vrrm-0x10000], 1 |
|
- | 477 | jz @f |
|
- | 478 | mov si, off_msg-0x10000 |
|
- | 479 | @@: |
|
- | 480 | call printplain |
|
- | 481 | mov si, preboot_device_msg-0x10000 |
|
- | 482 | call print |
|
- | 483 | mov al, [preboot_device-0x10000] |
|
- | 484 | and eax, 3 |
|
- | 485 | mov si, [preboot_device_msgs-0x10000+eax*2] |
|
- | 486 | call printplain |
|
- | 487 | .wait: |
|
- | 488 | ; empty BIOS keyboard buffer |
|
- | 489 | _setcursor 25,0 ; out of screen |
|
- | 490 | ; wait for keypressed |
|
- | 491 | mov ah, 0 |
|
- | 492 | int 16h |
|
- | 493 | push ax |
|
- | 494 | ; restore timer interrupt |
|
- | 495 | push 0 |
|
- | 496 | pop es |
|
- | 497 | mov ecx, [.oldtimer-0x10000] |
|
- | 498 | mov [es:8*4], ecx |
|
- | 499 | _setcursor 7,0 |
|
- | 500 | mov si, space_msg-0x10000 |
|
- | 501 | call printplain |
|
- | 502 | pop ax |
|
- | 503 | ; switch on key |
|
- | 504 | cmp al, 13 |
|
- | 505 | jz .continue |
|
- | 506 | or al, 20h |
|
- | 507 | cmp al, 'a' |
|
- | 508 | jz .change_a |
|
- | 509 | cmp al, 'b' |
|
- | 510 | jz .change_b |
|
- | 511 | cmp al, 'c' |
|
- | 512 | jz .change_c |
|
- | 513 | cmp al, 'd' |
|
- | 514 | jnz .wait |
|
- | 515 | _setcursor 15,0 |
|
- | 516 | mov si,bdev-0x10000 |
|
- | 517 | call printplain |
|
- | 518 | mov bx,'13' |
|
- | 519 | call getkey |
|
- | 520 | mov [preboot_device-0x10000], al |
|
- | 521 | _setcursor 13,0 |
|
- | 522 | .d: |
|
- | 523 | mov [.bSettingsChanged-0x10000], al |
|
- | 524 | mov si, space_msg-0x10000 |
|
- | 525 | call printplain |
|
- | 526 | _setcursor 15,0 |
|
- | 527 | mov cx, 6 |
|
- | 528 | @@: |
|
- | 529 | call printplain |
|
- | 530 | loop @b |
|
- | 531 | jmp .printcfg |
|
- | 532 | .change_a: |
|
- | 533 | _setcursor 15,0 |
|
- | 534 | mov si, gr_mode-0x10000 |
|
- | 535 | call printplain |
|
- | 536 | mov bx, '09' |
|
- | 537 | call getkey |
|
- | 538 | mov [preboot_graph-0x10000], al |
|
- | 539 | cmp al, 4 |
|
- | 540 | ja @f |
|
- | 541 | mov si, probetext-0x10000 |
|
- | 542 | call printplain |
|
- | 543 | mov bx, '12' |
|
- | 544 | call getkey |
|
- | 545 | mov [preboot_gprobe-0x10000], al |
|
- | 546 | @@: |
|
- | 547 | _setcursor 10,0 |
|
- | 548 | jmp .d |
|
- | 549 | .change_b: |
|
- | 550 | _setcursor 15,0 |
|
- | 551 | mov si, gr_acc-0x10000 |
|
- | 552 | call printplain |
|
- | 553 | mov bx, '12' |
|
- | 554 | call getkey |
|
- | 555 | mov [preboot_mtrr-0x10000], al |
|
- | 556 | _setcursor 11,0 |
|
- | 557 | jmp .d |
|
- | 558 | .change_c: |
|
- | 559 | _setcursor 15,0 |
|
- | 560 | mov si, vrrmprint-0x10000 |
|
- | 561 | call printplain |
|
- | 562 | mov bx, '12' |
|
- | 563 | call getkey |
|
- | 564 | mov [preboot_vrrm-0x10000], al |
|
- | 565 | _setcursor 12,0 |
|
- | 566 | jmp .d |
|
- | 567 | .oldtimer dd ? |
|
- | 568 | .starttime dd ? |
|
- | 569 | .bSettingsChanged db ? |
|
- | 570 | .loader_block dd 0 |
|
- | 571 | .gettime: |
|
- | 572 | mov ah, 0 |
|
- | 573 | int 1Ah |
|
- | 574 | xchg ax, cx |
|
- | 575 | shl eax, 10h |
|
- | 576 | xchg ax, dx |
|
- | 577 | ret |
|
- | 578 | .newtimer: |
|
- | 579 | push ds |
|
- | 580 | push cs |
|
- | 581 | pop ds |
|
- | 582 | pushf |
|
- | 583 | call [.oldtimer-0x10000] |
|
- | 584 | pushad |
|
- | 585 | call .gettime |
|
- | 586 | sub eax, [.starttime-0x10000] |
|
- | 587 | sub ax, 18*5 |
|
- | 588 | jae .timergo |
|
- | 589 | neg ax |
|
- | 590 | add ax, 18-1 |
|
- | 591 | mov bx, 18 |
|
- | 592 | xor dx, dx |
|
- | 593 | div bx |
|
- | 594 | if lang eq ru |
|
- | 595 | ; ¯®¤®¦¤¨â¥ 5 ᥪã¤, 4/3/2 ᥪã¤ë, 1 ᥪã¤ã |
|
- | 596 | cmp al, 5 |
|
- | 597 | mov cl, ' ' |
|
- | 598 | jae @f |
|
- | 599 | cmp al, 1 |
|
- | 600 | mov cl, 'ã' |
|
- | 601 | jz @f |
|
- | 602 | mov cl, 'ë' |
|
- | 603 | @@: mov [time_str+9-0x10000], cl |
|
- | 604 | else |
|
- | 605 | ; wait 5/4/3/2 seconds, 1 second |
|
- | 606 | cmp al, 1 |
|
- | 607 | mov cl, 's' |
|
- | 608 | ja @f |
|
- | 609 | mov cl, ' ' |
|
- | 610 | @@: mov [time_str+9-0x10000], cl |
|
- | 611 | end if |
|
- | 612 | add al, '0' |
|
- | 613 | mov [time_str+1-0x10000], al |
|
- | 614 | mov si, time_msg-0x10000 |
|
- | 615 | _setcursor 7,0 |
|
- | 616 | call print |
|
- | 617 | _setcursor 25,0 |
|
- | 618 | popad |
|
- | 619 | pop ds |
|
- | 620 | iret |
|
- | 621 | .timergo: |
|
- | 622 | push 0 |
|
- | 623 | pop es |
|
- | 624 | mov eax, [.oldtimer-0x10000] |
|
- | 625 | mov [es:8*4], eax |
|
- | 626 | mov sp, 0EC00h |
|
- | 627 | .continue: |
|
- | 628 | sti |
|
- | 629 | _setcursor 6,0 |
|
- | 630 | mov si, space_msg-0x10000 |
|
- | 631 | call printplain |
|
- | 632 | call printplain |
|
- | 633 | _setcursor 6,0 |
|
- | 634 | mov si, loading_msg-0x10000 |
|
- | 635 | call print |
|
- | 636 | _setcursor 15,0 |
|
- | 637 | cmp [.bSettingsChanged-0x10000], 0 |
|
- | 638 | jz .load |
|
- | 639 | cmp [.loader_block-0x10000], 0 |
|
- | 640 | jz .load |
|
- | 641 | les bx, [.loader_block-0x10000] |
|
- | 642 | mov eax, [es:bx+3] |
|
- | 643 | push ds |
|
- | 644 | pop es |
|
- | 645 | test eax, eax |
|
- | 646 | jz .load |
|
- | 647 | push eax |
|
- | 648 | mov si, save_quest-0x10000 |
|
- | 649 | call print |
|
- | 650 | .waityn: |
|
- | 651 | mov ah, 0 |
|
- | 652 | int 16h |
|
- | 653 | or al, 20h |
|
- | 654 | cmp al, 'n' |
|
- | 655 | jz .loadc |
|
- | 656 | cmp al, 'y' |
|
- | 657 | jnz .waityn |
|
- | 658 | call putchar |
|
- | 659 | pop eax |
|
- | 660 | push cs |
|
- | 661 | push .cont-0x10000 |
|
- | 662 | push eax |
|
- | 663 | retf |
|
- | 664 | .loadc: |
|
- | 665 | pop eax |
|
- | 666 | .cont: |
|
- | 667 | push cs |
|
- | 668 | pop ds |
|
- | 669 | _setcursor 15,0 |
|
- | 670 | mov si, space_msg-0x10000 |
|
Line 324... | Line 671... | ||
324 | ; ivan 24/11/2004 begin |
671 | call printplain |
Line 325... | Line 672... | ||
325 | ;pop bx |
672 | _setcursor 15,0 |
326 | ; ivan 24/11/2004 end |
673 | .load: |
327 | 674 | ; \end{diamond}[02.12.2005] |
|
328 | 675 | ||
329 | ; ASK GRAPHICS MODE |
676 | ; ASK GRAPHICS MODE |
330 | - | ||
331 | movzx eax,byte [es:preboot_graph-0x10000] |
677 | |
332 | cmp eax,0 |
678 | movzx ax, [preboot_graph-0x10000] |
333 | jne pre_graph |
679 | test ax, ax |
334 | mov si,gr_mode-0x10000 |
- | |
335 | call printplain |
- | |
336 | gml0: |
- | |
337 | mov ebx,0x0A01 |
- | |
338 | call getkey |
- | |
339 | pre_graph: |
- | |
340 | cmp eax,1 |
- | |
341 | jl sgml1 |
- | |
342 | cmp eax,8 |
- | |
343 | jg sgml1 |
- | |
344 | mov si,ax |
- | |
345 | sub si,1 |
- | |
346 | shl si,4 |
680 | jne pre_graph |
347 | add si,gr_table-0x10000 |
- | |
348 | mov bx,[es:si+0] |
- | |
349 | mov cx,[es:si+4] |
- | |
350 | mov dx,[es:si+8] |
- | |
351 | jmp gml10 |
- | |
352 | sgml1: |
- | |
353 | cmp al,9 |
- | |
354 | jnz gml00 |
- | |
355 | mov bx,0x13 |
- | |
356 | mov cx,640 |
- | |
357 | mov dx,480 |
- | |
358 | push word 0x0 |
- | |
359 | pop es |
- | |
360 | mov [es:0x9000],byte 32 |
- | |
361 | mov dword [es:0x9018],0x800000 |
- | |
362 | push word 0x1000 |
- | |
363 | pop es |
- | |
364 | jmp gml10 |
- | |
365 | gml00: |
- | |
366 | cmp al,0xa |
681 | mov si,gr_mode-0x10000 |
- | 682 | call printplain |
|
- | 683 | mov bx,'09' |
|
- | 684 | call getkey |
|
- | 685 | pre_graph: |
|
- | 686 | push 0 |
|
- | 687 | pop es |
|
- | 688 | ; address is gr_table+6*(ax-1)-0x10000 |
|
- | 689 | add ax, ax |
|
367 | jnz gml02 |
690 | lea si, [gr_table-0x10000 + eax + eax*2 - 6] |
368 | mov bx,0x12 |
691 | mov bx,[si+0] |
369 | mov cx,640 |
- | |
370 | mov dx,480 |
- | |
371 | push word 0x0 |
- | |
372 | pop es |
692 | mov cx,[si+2] |
373 | mov [es:0x9000],byte 32 |
- | |
374 | mov dword [es:0x9018],0x800000 |
- | |
375 | push word 0x1000 |
- | |
376 | pop es |
- | |
377 | jmp gml10 |
- | |
378 | gml02: |
- | |
379 | jmp gml0 |
- | |
380 | gr_table: |
- | |
381 | dd 0x112+0100000000000000b , 640 , 480 , 0 |
- | |
382 | dd 0x115+0100000000000000b , 800 , 600 , 0 |
- | |
383 | dd 0x118+0100000000000000b , 1024 , 768 , 0 |
- | |
384 | dd 0x11B+0100000000000000b , 1280 , 1024 , 0 |
- | |
385 | dd 0x112 , 640 , 480 , 0 |
- | |
386 | dd 0x115 , 800 , 600 , 0 |
693 | mov dx,[si+4] |
387 | dd 0x118 , 1024 , 768 , 0 |
694 | cmp al, 9*2 |
388 | dd 0x11B , 1280 ,1024 , 0 |
695 | jb @f |
389 | gml10: |
- | |
390 | push word 0x0000 |
- | |
391 | pop es |
696 | mov byte [es:0x9000], 32 |
392 | mov [es:0x9008],bx |
- | |
393 | mov [es:0x900A],cx |
697 | mov dword [es:0x9018], 0x800000 |
394 | mov [es:0x900C],dx |
- | |
395 | push word 0x1000 |
698 | @@: |
396 | pop es |
- | |
Line 397... | Line 699... | ||
397 | mov ax,32 |
699 | mov [es:0x9008],bx |
Line 398... | Line 700... | ||
398 | cmp bx,0x13 |
700 | mov [es:0x900A],cx |
Line 399... | Line 701... | ||
399 | je nov |
701 | mov [es:0x900C],dx |
400 | cmp bx,0x12 |
702 | mov ax,32 |
401 | je nov |
703 | test bh, bh |
402 | 704 | jz nov |
|
403 | 705 | ||
Line 404... | Line 706... | ||
404 | ; USE DEFAULTS OR PROBE |
706 | ; USE DEFAULTS OR PROBE |
405 | 707 | ||
Line 406... | Line 708... | ||
406 | ; bx - mode : cx - x size : dx - y size |
708 | ; bx - mode : cx - x size : dx - y size |
407 | 709 | ||
408 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
710 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
409 | movzx ax,[es:preboot_gprobe-0x10000] |
711 | movzx ax,[preboot_gprobe-0x10000] |
410 | test ax,ax |
712 | test ax,ax |
411 | jne pre_probe |
713 | jne pre_probe |
Line 412... | Line 714... | ||
412 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
714 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
413 | 715 | ||
414 | test bx,0100000000000000b |
716 | test bx,0100000000000000b |
Line 415... | Line 717... | ||
415 | jz noprobe |
717 | jz noprobe |
Line 416... | Line 718... | ||
416 | 718 | ||
Line 443... | Line 745... | ||
443 | probemore: |
745 | probemore: |
Line 444... | Line 746... | ||
444 | 746 | ||
445 | mov ax,0x4f01 |
747 | mov ax,0x4f01 |
446 | mov cx,bx |
748 | mov cx,bx |
447 | and cx,0xfff |
- | |
448 | push word 0x0000 |
- | |
449 | pop es |
749 | and cx,0xfff |
450 | mov di,0xa000 |
750 | mov di,0xa000 |
Line 451... | Line 751... | ||
451 | int 0x10 |
751 | int 0x10 |
452 | - | ||
453 | mov eax,[es:di] ; lfb ? |
752 | |
454 | test eax,10000000b |
- | |
455 | jz newprobe |
753 | test byte [es:di], 80h ; lfb? |
456 | 754 | jz newprobe |
|
457 | mov eax,[es:di+0x12] ; x size ? |
755 | mov ax, [es:di+0x12] ; x size? |
458 | cmp ax,word [esp+2] |
- | |
459 | jne newprobe |
756 | cmp ax, [esp+2] |
460 | - | ||
461 | mov eax,[es:di+0x14] ; y size ? |
757 | jnz newprobe |
462 | cmp ax,dx |
- | |
463 | jne newprobe |
- | |
464 | 758 | cmp [es:di+0x14], dx ; y size? |
|
465 | movzx eax,byte [es:di+0x19] |
759 | jnz newprobe |
Line 466... | Line -... | ||
466 | cmp eax,32 ;24 |
- | |
467 | jb newprobe |
- | |
468 | 760 | cmp byte [es:di+0x19], 32 ;24 |
|
469 | push word 0x0000 ; save probed mode |
761 | jb newprobe |
470 | pop es |
- | |
471 | add bx,0100000000000000b |
762 | |
472 | mov [es:0x9008],bx |
- | |
473 | push word 0x1000 |
- | |
474 | pop es |
- | |
475 | - | ||
476 | push bx |
- | |
477 | - | ||
478 | mov si,prid-0x10000 |
- | |
Line 479... | Line 763... | ||
479 | call printplain |
763 | add bx,0100000000000000b |
Line 480... | Line 764... | ||
480 | 764 | mov [es:0x9008],bx |
|
Line 481... | Line 765... | ||
481 | pop bx dx cx |
765 | pop dx cx |
482 | 766 | ||
483 | noprobe: |
767 | noprobe: |
484 | - | ||
485 | - | ||
486 | ; FIND VESA 2.0 LFB & BPP |
768 | |
487 | 769 | ||
488 | mov ax,0x4f01 |
770 | ; FIND VESA 2.0 LFB & BPP |
489 | mov cx,bx |
771 | |
490 | and cx,0xfff |
772 | mov ax,0x4f01 |
491 | push word 0x0000 |
- | |
492 | pop es |
- | |
493 | mov di,0xa000 |
- | |
494 | int 0x10 |
773 | mov cx,bx |
495 | ; LFB |
774 | and cx,0xfff |
496 | mov ecx,[es:di+0x28] |
- | |
497 | mov [es:0x9018],ecx |
775 | mov di,0xa000 |
498 | ; BPP |
776 | int 0x10 |
499 | movzx ax,byte [es:di+0x19] |
777 | ; LFB |
- | 778 | mov ecx,[es:di+0x28] |
|
500 | mov [es:0x9000],ax |
779 | mov [es:0x9018],ecx |
501 | ; ---- vbe voodoo |
780 | ; ---- vbe voodoo |
502 | BytesPerScanLine equ 0x10 |
781 | BytesPerScanLine equ 0x10 |
503 | push ax |
- | |
504 | mov ax, [es:di+BytesPerScanLine] |
782 | mov ax, [es:di+BytesPerScanLine] |
505 | mov [es:0x9001],ax |
783 | mov [es:0x9001],ax |
506 | pop ax |
- | |
507 | ; ----- |
784 | ; BPP |
508 | nov: |
- | |
509 | cmp ax,24 |
785 | movzx ax,byte [es:di+0x19] |
510 | jnz nbpp24 |
786 | mov [es:0x9000],al |
511 | mov si,bt24-0x10000 |
- | |
512 | jmp bppl |
787 | nov: |
513 | nbpp24: |
788 | cmp ax,24 |
514 | cmp ax,32 |
789 | mov si,bt24-0x10000 |
515 | jnz nbpp32 |
790 | jz bppl |
516 | mov si,bt32-0x10000 |
791 | cmp ax,32 |
Line 517... | Line 792... | ||
517 | jmp bppl |
792 | mov si,bt32-0x10000 |
Line -... | Line 793... | ||
- | 793 | jz bppl |
|
518 | nbpp32: |
794 | mov si,btns-0x10000 |
519 | mov si,btns-0x10000 |
795 | call print |
520 | call print |
796 | jmp $ |
521 | jmp $ |
797 | bppl: |
522 | bppl: |
- | |
523 | call printplain |
798 | call printplain |
524 | 799 | ||
525 | 800 | ||
526 | ; FIND VESA 1.2 PM BANK SWITCH ADDRESS |
801 | ; FIND VESA 1.2 PM BANK SWITCH ADDRESS |
527 | - | ||
528 | mov ax,0x4f0A |
802 | |
529 | mov bx,0x0 |
803 | push es |
530 | int 0x10 |
- | |
531 | xor eax,eax |
804 | mov ax,0x4f0A |
532 | xor ebx,ebx |
805 | xor bx, bx |
533 | mov ax,es |
- | |
534 | shl eax,4 |
- | |
535 | mov bx,di |
- | |
Line 536... | Line 806... | ||
536 | add eax,ebx |
806 | int 0x10 |
Line 537... | Line 807... | ||
537 | xor ebx,ebx |
807 | xor eax,eax |
538 | mov bx,[es:di] |
808 | mov ax,es |
539 | add eax,ebx |
809 | shl eax,4 |
540 | push word 0x0 |
810 | movzx ebx,di |
541 | pop es |
811 | add eax,ebx |
542 | mov [es:0x9014],eax |
812 | mov bx,[es:di] |
543 | push word 0x1000 |
813 | add eax,ebx |
544 | pop es |
814 | pop es |
545 | - | ||
546 | - | ||
547 | 815 | mov [es:0x9014],eax |
|
548 | ; GRAPHICS ACCELERATION |
816 | |
549 | - | ||
550 | mov al, [es:preboot_mtrr-0x10000] |
817 | |
551 | test al,al |
818 | ; GRAPHICS ACCELERATION |
Line 552... | Line 819... | ||
552 | jne pre_mtrr |
819 | |
Line 553... | Line 820... | ||
553 | mov si,gr_acc-0x10000 |
820 | mov al, [preboot_mtrr-0x10000] |
554 | call printplain |
821 | test al,al |
555 | mov ebx,0x0201 |
822 | jne pre_mtrr |
556 | call getkey |
823 | mov si,gr_acc-0x10000 |
557 | pre_mtrr: |
824 | call printplain |
558 | push word 0x0000 |
825 | mov bx,'12' |
559 | pop es |
826 | call getkey |
560 | mov [es:0x901C],al |
827 | pre_mtrr: |
561 | push word 0x1000 |
- | |
562 | pop es |
- | |
563 | mov si,linef-0x10000 |
828 | mov [es:0x901C],al |
564 | call printplain |
829 | ; commented by diamond - newlines are not used now |
565 | - | ||
566 | 830 | ; mov si,linef-0x10000 |
|
567 | ; VRR_M USE |
831 | ; call printplain |
Line 568... | Line 832... | ||
568 | 832 | ||
Line 569... | Line 833... | ||
569 | mov al,[es:preboot_vrrm-0x10000] |
833 | |
Line 649... | Line 913... | ||
649 | ; mov eax,1 ; paging disabled |
913 | ; mov eax,1 ; paging disabled |
650 | ; cmp eax,0 |
914 | ; cmp eax,0 |
651 | ; jne pre_lfb |
915 | ; jne pre_lfb |
652 | ; mov si,gr_direct-0x10000 |
916 | ; mov si,gr_direct-0x10000 |
653 | ; call printplain |
917 | ; call printplain |
654 | ; mov ebx,0x0201 |
918 | ; mov ebx,'12' |
655 | ; call getkey |
919 | ; call getkey |
656 | ; pre_lfb: |
920 | ; pre_lfb: |
657 | ; push word 0x0000 |
921 | ; push word 0x0000 |
658 | ; pop es |
922 | ; pop es |
659 | ; mov [es:0x901E],al |
923 | ; mov [es:0x901E],al |
660 | ; mov ax,0x1000 |
924 | ; mov ax,0x1000 |
661 | ; mov es,ax |
925 | ; mov es,ax |
662 | ; mov si,linef-0x10000 |
926 | ; mov si,linef-0x10000 |
663 | ; call printplain |
927 | ; call printplain |
664 | push 0 |
- | |
665 | pop es |
- | |
666 | mov [es:0x901E],byte 1 |
928 | mov [es:0x901E],byte 1 |
667 | push 0x1000 |
- | |
668 | pop es |
- | |
Line 669... | Line 929... | ||
669 | 929 | ||
Line 670... | Line 930... | ||
670 | 930 | ||
671 | 931 | ||
672 | ; BOOT DEVICE |
932 | ; BOOT DEVICE |
673 | 933 | ||
674 | movzx eax,byte [es:preboot_device-0x10000] |
934 | mov al, [preboot_device-0x10000] |
675 | cmp eax,0 |
935 | test al, al |
676 | jne pre_device |
936 | jnz pre_device |
677 | mov si,bdev-0x10000 |
937 | mov si,bdev-0x10000 |
678 | call printplain |
938 | call printplain |
679 | mov ebx,0x0301 |
939 | mov bx,'13' |
- | 940 | call getkey |
|
680 | call getkey |
941 | pre_device: |
681 | pre_device: |
942 | dec ax |
Line 682... | Line 943... | ||
682 | dec al |
943 | mov [boot_dev-0x10000],al |
Line 683... | Line 944... | ||
683 | mov [es:boot_dev-0x10000],al |
944 | ; commented by diamond - newlines are not used now |
684 | mov si,linef-0x10000 |
945 | ; mov si,linef-0x10000 |
685 | call printplain |
946 | ; call printplain |
686 | 947 | ||
687 | 948 | ||
688 | 949 | ||
689 | ; READ DISKETTE TO MEMORY |
950 | ; READ DISKETTE TO MEMORY |
690 | 951 | ||
691 | cmp [boot_dev-0x10000],0 |
952 | cmp [boot_dev-0x10000],0 |
692 | jne no_sys_on_floppy |
953 | jne no_sys_on_floppy |
693 | mov si,diskload-0x10000 |
954 | mov si,diskload-0x10000 |
694 | call print |
955 | call print |
695 | mov ax,0x0000 ; reset drive |
956 | xor ax, ax ; reset drive |
696 | mov dx,0x0000 |
957 | xor dx, dx |
697 | int 0x13 |
- | |
698 | mov cx,0x0001 ; startcyl,startsector |
- | |
699 | mov dx,0x0000 ; starthead,drive |
958 | int 0x13 |
700 | push word 80*2 ; read no of sect |
959 | mov cx,0x0001 ; startcyl,startsector |
701 | reads: |
960 | xor dx, dx ; starthead,drive |
702 | pusha |
961 | push word 80*2 ; read no of sect |
703 | xor si,si |
962 | reads: |
704 | newread: |
963 | pusha |
705 | push word 0x0 |
964 | xor si,si |
706 | pop es |
965 | newread: |
707 | mov bx,0xa000 ; es:bx -> data area |
966 | mov bx,0xa000 ; es:bx -> data area |
708 | mov ax,0x0200+18 ; read, no of sectors to read |
967 | mov ax,0x0200+18 ; read, no of sectors to read |
709 | int 0x13 |
968 | int 0x13 |
710 | cmp ah,0 |
969 | test ah, ah |
711 | jz goodread |
970 | jz goodread |
712 | add si,1 |
971 | inc si |
- | 972 | cmp si,10 |
|
713 | cmp si,10 |
973 | jnz newread |
714 | jnz newread |
974 | mov si,badsect-0x10000 |
715 | mov si,badsect-0x10000 |
975 | call printplain |
716 | call printplain |
976 | jmp $ |
717 | jmp $ |
977 | goodread: |
- | 978 | ; move -> 1mb |
|
Line 718... | Line 979... | ||
718 | goodread: |
979 | mov si,movedesc-0x10000 |
719 | ; move -> 1mb |
980 | push es |
720 | mov si,movedesc-0x10000 |
981 | push ds |
721 | push word 0x1000 |
982 | pop es |
722 | pop es |
983 | mov cx,256*18 |
723 | mov cx,256*18 |
984 | mov ah,0x87 |
724 | mov ah,0x87 |
985 | int 0x15 |
725 | int 0x15 |
986 | pop es |
726 | 987 | ||
Line 727... | Line -... | ||
727 | cmp ah,0 ; was the move successfull ? |
- | |
728 | je goodmove |
- | |
729 | mov dx,0x3f2 ; floppy motor off |
988 | test ah,ah ; was the move successfull ? |
730 | mov al,0 |
989 | je goodmove |
731 | out dx,al |
990 | mov dx,0x3f2 ; floppy motor off |
732 | mov si,memmovefailed-0x10000 |
991 | mov al,0 |
733 | call print |
992 | out dx,al |
734 | jmp $ |
993 | mov si,memmovefailed-0x10000 |
735 | goodmove: |
994 | call print |
736 | 995 | jmp $ |
|
737 | mov eax,[es:movedesc-0x10000+0x18+2] |
- | |
738 | add eax,512*18 |
- | |
739 | mov [es:movedesc-0x10000+0x18+2],eax |
- | |
740 | popa |
- | |
741 | inc dh |
- | |
742 | cmp dh,2 |
- | |
743 | jnz bb2 |
- | |
744 | mov dh,0 |
- | |
745 | inc ch |
- | |
746 | pusha ; print prosentage |
- | |
747 | push word 0x1000 |
- | |
748 | pop es |
- | |
749 | xor eax,eax ; 5 |
- | |
750 | mov al,ch |
- | |
751 | shr eax,2 |
- | |
752 | and eax,1 |
996 | goodmove: |
- | 997 | ||
- | 998 | add dword [movedesc-0x10000+0x18+2], 512*18 |
|
- | 999 | popa |
|
- | 1000 | inc dh |
|
- | 1001 | cmp dh,2 |
|
- | 1002 | jnz bb2 |
|
- | 1003 | mov dh,0 |
|
- | 1004 | inc ch |
|
- | 1005 | pusha ; print prosentage |
|
- | 1006 | mov si,pros-0x10000 |
|
753 | mov ebx,5 |
1007 | shr ch, 2 |
754 | mul bx |
1008 | mov al, '5' |
755 | add al,48 |
1009 | test ch, 1 |
756 | mov [es:pros+1-0x10000],al |
1010 | jnz @f |
757 | xor eax,eax ; 10 |
1011 | mov al, '0' |
758 | mov al,ch |
1012 | @@: |
759 | shr eax,3 |
- | |
760 | add al,48 |
- | |
761 | mov [es:pros-0x10000],al |
- | |
762 | mov si,pros-0x10000 |
- | |
763 | call printplain |
1013 | mov [si+1], al |
764 | popa |
- | |
765 | bb2: |
- | |
766 | pop ax |
- | |
767 | dec ax |
- | |
768 | push ax |
- | |
769 | cmp ax,0 |
- | |
770 | jnz rs |
- | |
771 | jmp readdone |
- | |
772 | rs: |
- | |
773 | jmp reads |
- | |
774 | movedesc: |
- | |
775 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1014 | shr ch, 1 |
776 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1015 | add ch, '0' |
777 | - | ||
778 | db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0 |
- | |
779 | db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0 |
- | |
780 | 1016 | mov [si], ch |
|
781 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1017 | call printplain |
782 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1018 | popa |
783 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1019 | bb2: |
784 | db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
1020 | pop ax |
785 | readdone: |
1021 | dec ax |
786 | pop ax |
1022 | push ax |
787 | mov dx,0x3f2 ; floppy motor off |
1023 | jnz reads |
788 | mov al,0 |
1024 | readdone: |
789 | out dx,al |
1025 | pop ax |
790 | mov si,backspace-0x10000 |
1026 | mov si,backspace-0x10000 |
791 | call printplain |
1027 | call printplain |
Line 792... | Line 1028... | ||
792 | call printplain |
1028 | call printplain |
793 | mov si,okt-0x10000 |
1029 | mov si,okt-0x10000 |
Line 794... | Line -... | ||
794 | call printplain |
- | |
795 | no_sys_on_floppy: |
- | |
796 | mov ax,0x0000 ; reset drive |
1030 | call printplain |
797 | mov dx,0x0000 |
- | |
Line 798... | Line 1031... | ||
798 | int 0x13 |
1031 | no_sys_on_floppy: |
Line 799... | Line 1032... | ||
799 | mov dx,0x3f2 ; floppy motor off |
1032 | xor ax, ax ; reset drive |
800 | mov al,0 |
1033 | xor dx, dx |
801 | out dx,al |
1034 | int 0x13 |
802 | 1035 | mov dx,0x3f2 ; floppy motor off |
|
803 | 1036 | mov al,0 |
|
804 | ; PAGE TABLE |
- | |
805 | 1037 | out dx,al |
|
806 | push word 0x0000 |
1038 | |
807 | pop es |
1039 | push es |
808 | mov ecx,[es:0x9018] |
1040 | ; PAGE TABLE |
809 | push ecx |
1041 | |
810 | 1042 | push dword [es:0x9018] |
|
811 | map_mem equ 64 ; amount of memory to map |
1043 | |
812 | 1044 | map_mem equ 64 ; amount of memory to map |
|
813 | mov bx,0x6000 |
1045 | |
814 | mov es,bx ; [es:di] = 6000:0 |
1046 | push 0x6000 |
815 | xor edi,edi |
1047 | pop es ; es:di = 6000:0 |
816 | mov ecx,256*map_mem ; Map (mapmem) M |
1048 | xor di,di |
817 | mov eax,7 |
1049 | mov cx,256*map_mem ; Map (mapmem) M |
Line 818... | Line 1050... | ||
818 | cld |
1050 | mov eax,7 |
819 | pt2: |
1051 | pt2: |
820 | cmp ecx,256*(map_mem-8) ; 8 M map to LFB |
1052 | cmp cx,256*(map_mem-8) ; 8 M map to LFB |
821 | jnz pt3 |
1053 | jnz pt3 |
822 | pop eax |
1054 | pop eax |
823 | add eax,7 |
1055 | add eax,7 |
824 | pt3: |
1056 | pt3: |
825 | cmp ecx,256*(map_mem-12) ; 12 M back to linear = physical |
1057 | cmp cx,256*(map_mem-12) ; 12 M back to linear = physical |
826 | jnz pt4 |
1058 | jnz pt4 |
Line 827... | Line 1059... | ||
827 | mov eax,12*0x100000 + 7 |
1059 | mov eax,12*0x100000 + 7 |
Line 828... | Line 1060... | ||
828 | pt4: |
1060 | pt4: |
829 | stosd |
1061 | stosd |
830 | add eax,4096 |
1062 | add eax,4096 |
831 | loop pt2 |
1063 | loop pt2 |
832 | 1064 | ||
833 | mov bx,0x7100 |
- | |
834 | mov es,bx |
1065 | push 0x7100 |
835 | xor edi,edi |
1066 | pop es |
836 | mov eax,8*0x100000+7 |
1067 | xor di,di |
837 | mov ecx,256*4 |
1068 | mov eax,8*0x100000+7 |
838 | pt5: |
1069 | mov cx,256*4 |
839 | stosd |
1070 | pt5: |
840 | add eax,0x1000 |
1071 | stosd |
841 | loop pt5 |
1072 | add eax,0x1000 |
842 | - | ||
843 | ; 4 KB PAGE DIRECTORY |
- | |
844 | 1073 | loop pt5 |
|
845 | mov bx , 0x7F00 |
- | |
846 | mov es , bx ; [es:di] = 7000:0 |
- | |
Line 847... | Line 1074... | ||
847 | xor edi, edi |
1074 | |
848 | mov ecx, 64 / 4 |
1075 | ; 4 KB PAGE DIRECTORY |
Line 849... | Line 1076... | ||
849 | mov eax, 0x60007 ; for 0 M |
1076 | |
Line -... | Line 1077... | ||
- | 1077 | push 0x7F00 |
|
850 | cld |
1078 | pop es ; es:di = 7F00:0 |
851 | pd4k: |
1079 | xor di, di |
852 | stosd |
1080 | mov cx, 64 / 4 |
853 | add eax, 0x1000 |
- | |
854 | loop pd4k |
1081 | mov eax, 0x60007 ; for 0 M |
855 | mov dword [es:0x800],0x71007 ;map region 0x80000000-0x803FFFFF to 0x800000-0xCFFFFF |
1082 | pd4k: |
856 | xor esi,esi |
1083 | stosd |
857 | mov edi,second_base_address shr 20 |
1084 | add eax, 0x1000 |
858 | mov ecx,64/4 |
1085 | loop pd4k |
859 | mov bx,0x7F00 |
1086 | mov dword [es:0x800],0x71007 ;map region 0x80000000-0x803FFFFF to 0x800000-0xCFFFFF |
860 | mov ds,bx |
1087 | xor si,si |
861 | rep movsd |
1088 | mov di,second_base_address shr 20 |
862 | mov bx,0x1000 |
1089 | mov cx,64/4 |
863 | mov ds,bx |
1090 | rep movs dword [es:di], [es:si] |
864 | 1091 | ||
865 | mov eax, 0x7F000 +8+16 ; Page directory and enable caches |
1092 | mov eax, 0x7F000 +8+16 ; Page directory and enable caches |
Line 866... | Line 1093... | ||
866 | mov cr3, eax |
1093 | mov cr3, eax |
867 | - | ||
868 | ; SET GRAPHICS |
- | |
869 | - | ||
870 | mov dx,0x0000 |
1094 | |
871 | mov es,dx |
- | |
872 | mov bx,[es:0x9008] |
1095 | ; SET GRAPHICS |
873 | mov ax,bx ; vga & 320x200 |
1096 | |
Line 874... | Line 1097... | ||
874 | cmp ax,0x13 |
1097 | pop es |
875 | je setgr |
1098 | mov bx,[es:0x9008] ; vga & 320x200 |
876 | cmp ax,0x12 |
1099 | mov ax, bx |
877 | je setgr |
1100 | push ax |
878 | mov ax,0x4f02 ; Vesa |
1101 | cmp ax,0x13 |
879 | setgr: |
1102 | je setgr |
Line 880... | Line 1103... | ||
880 | int 0x10 |
1103 | cmp ax,0x12 |
881 | cmp ah,0 |
1104 | je setgr |
882 | jz gmok |
1105 | mov ax,0x4f02 ; Vesa |
883 | mov si,fatalsel-0x10000 |
1106 | setgr: |
884 | call print |
1107 | int 0x10 |
885 | jmp $ |
1108 | test ah,ah |
Line 886... | Line 1109... | ||
886 | 1109 | jz gmok |
|
887 | gmok: |
1110 | mov si,fatalsel-0x10000 |
888 | mov dx,0x1000 |
1111 | call print |
889 | mov es,dx |
1112 | jmp $ |
Line 890... | Line 1113... | ||
890 | 1113 | ||
891 | ; set mode 0x12 graphics registers: |
1114 | gmok: |
892 | 1115 | ; set mode 0x12 graphics registers: |