Rev 30 | Rev 61 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 30 | Rev 46 | ||
---|---|---|---|
Line 186... | Line 186... | ||
186 | 186 | ||
Line 187... | Line 187... | ||
187 | use16 |
187 | use16 |
Line 188... | Line -... | ||
188 | - | ||
189 | pr_mode_exit: |
- | |
190 | - | ||
191 | mov ax,1000 |
188 | |
192 | mov ds,ax |
189 | pr_mode_exit: |
193 | mov es,ax |
190 | |
- | 191 | ; setup stack |
|
- | 192 | mov ax, 3000h |
|
- | 193 | mov ss, ax |
|
- | 194 | mov esp, 0EC00h |
|
- | 195 | ; setup ds |
|
- | 196 | push cs |
|
- | 197 | pop ds |
|
- | 198 | ; mov ax,1000 |
|
- | 199 | ; mov ds,ax |
|
- | 200 | ; mov es,ax |
|
194 | mov fs,ax |
201 | ; mov fs,ax |
195 | mov gs,ax |
202 | ; mov gs,ax |
Line 196... | Line 203... | ||
196 | mov ss,ax |
203 | ; mov ss,ax |
Line 206... | Line 213... | ||
206 | 213 | ||
207 | rdelay: |
214 | rdelay: |
208 | ret |
215 | ret |
Line 209... | Line 216... | ||
209 | real_mode: |
216 | real_mode: |
210 | - | ||
211 | lidt [cs:old_ints_h-0x10000] |
217 | |
212 | mov sp,0xfff0 |
218 | lidt [old_ints_h-0x10000] |
213 | ;remap IRQs |
219 | ;remap IRQs |
214 | mov al,0x11 |
220 | mov al,0x11 |
215 | out 0x20,al |
221 | out 0x20,al |
Line 235... | Line 241... | ||
235 | out 0x21,al |
241 | out 0x21,al |
236 | call rdelay |
242 | call rdelay |
237 | out 0xA1,al |
243 | out 0xA1,al |
238 | call rdelay |
244 | call rdelay |
Line 239... | Line -... | ||
239 | - | ||
240 | mov al,2 |
- | |
241 | out 0x21,al |
245 | |
- | 246 | mov al,0 |
|
- | 247 | out 0x21,al |
|
242 | mov al,0 |
248 | call rdelay |
243 | out 0xA1,al |
249 | out 0xA1,al |
Line 244... | Line 250... | ||
244 | sti |
250 | sti |
Line 323... | Line 329... | ||
323 | 329 | ||
324 | 330 | ||
Line 325... | Line 331... | ||
325 | restart_kernel_4000: |
331 | restart_kernel_4000: |
326 | cli |
332 | cli |
327 | 333 | ||
328 | mov di,0x1000 ; load kernel image from 0x8000:0 -> 0x1000:0 |
334 | ; mov di,0x1000 ; load kernel image from 0x8000:0 -> 0x1000:0 |
329 | 335 | ; |
|
330 | new_kernel_block_move: |
336 | ; new_kernel_block_move: |
331 | 337 | ; |
|
332 | mov ebx,0 |
338 | ; mov ebx,0 |
333 | 339 | ; |
|
334 | new_kernel_byte_move: |
340 | ; new_kernel_byte_move: |
- | 341 | ; |
|
- | 342 | ; mov ax,di |
|
- | 343 | ; add ax,0x7000 |
|
- | 344 | ; mov es,ax |
|
- | 345 | ; mov dl,[es:bx] |
|
- | 346 | ; mov es,di |
|
- | 347 | ; mov [es:bx],dl |
|
- | 348 | ; |
|
- | 349 | ; inc ebx |
|
- | 350 | ; cmp ebx,65536 |
|
- | 351 | ; jbe new_kernel_byte_move |
|
- | 352 | ; |
|
- | 353 | ; add di,0x1000 |
|
- | 354 | ; cmp di,0x2000 |
|
- | 355 | ; jbe new_kernel_block_move |
|
- | 356 | push ds |
|
- | 357 | pop es |
|
- | 358 | mov cx, 0x8000 |
|
- | 359 | push cx |
|
- | 360 | mov ds, cx |
|
- | 361 | xor si, si |
|
- | 362 | xor di, di |
|
- | 363 | rep movsw |
|
335 | 364 | mov ax, 0x9000 |
|
336 | mov ax,di |
365 | mov ds, ax |
337 | add ax,0x7000 |
366 | mov ax, 0x2000 |
338 | mov es,ax |
- | |
339 | mov dl,[es:bx] |
- | |
340 | mov es,di |
- | |
341 | mov [es:bx],dl |
- | |
342 | - | ||
343 | inc ebx |
- | |
344 | cmp ebx,65536 |
- | |
345 | jbe new_kernel_byte_move |
- | |
346 | - | ||
Line 347... | Line 367... | ||
347 | add di,0x1000 |
367 | mov es, ax |
Line 348... | Line 368... | ||
348 | cmp di,0x2000 |
368 | pop cx |
349 | jbe new_kernel_block_move |
369 | rep movsw |
350 | 370 | ||
351 | wbinvd ; write and invalidate cache |
371 | wbinvd ; write and invalidate cache |
352 | 372 | ||
- | 373 | ; mov ax,0x1000 |
|
- | 374 | ; mov es,ax |
|
- | 375 | ; mov ax,0x3000 |
|
- | 376 | ; mov ss,ax |
|
- | 377 | ; mov sp,0xec00 |
|
- | 378 | ; restore timer |
|
- | 379 | mov al, 00110100b |
|
- | 380 | out 43h, al |
|
- | 381 | jcxz $+2 |
|
353 | mov ax,0x1000 |
382 | mov al, 0xFF |
Line -... | Line 383... | ||
- | 383 | out 40h, al |
|
- | 384 | jcxz $+2 |
|
- | 385 | out 40h, al |
|
- | 386 | jcxz $+2 |
|
- | 387 | sti |
|
354 | mov es,ax |
388 | |
Line -... | Line 389... | ||
- | 389 | ; bootloader interface |
|
- | 390 | push 0x1000 |
|
- | 391 | pop ds |
|
- | 392 | mov si, .bootloader_block-0x10000 |
|
Line 355... | Line 393... | ||
355 | mov ax,0x3000 |
393 | mov ax, 'KL' |
356 | mov ss,ax |
394 | jmp 0x1000:0000 |
357 | mov sp,0xec00 |
395 | |
358 | sti |
396 | .bootloader_block: |