Rev 684 | Rev 712 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 684 | Rev 709 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; |
2 | ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. |
3 | ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. |
4 | ;; PROGRAMMING: |
4 | ;; PROGRAMMING: |
5 | ;; Ivan Poddubny |
5 | ;; Ivan Poddubny |
6 | ;; Marat Zakiyanov (Mario79) |
6 | ;; Marat Zakiyanov (Mario79) |
7 | ;; VaStaNi |
7 | ;; VaStaNi |
8 | ;; Trans |
8 | ;; Trans |
Line 53... | Line 53... | ||
53 | ;; |
53 | ;; |
54 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
54 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 55... | Line 55... | ||
55 | 55 | ||
Line 56... | Line 56... | ||
56 | include 'macros.inc' |
56 | include 'macros.inc' |
Line 57... | Line 57... | ||
57 | 57 | ||
Line 58... | Line 58... | ||
58 | $Revision: 684 $ |
58 | $Revision: 709 $ |
Line 130... | Line 130... | ||
130 | include "boot/bootge.inc" ; german system boot messages |
130 | include "boot/bootge.inc" ; german system boot messages |
131 | end if |
131 | end if |
Line 132... | Line 132... | ||
132 | 132 | ||
133 | include "boot/bootcode.inc" ; 16 bit system boot code |
133 | include "boot/bootcode.inc" ; 16 bit system boot code |
- | 134 | include "bus/pci/pci16.inc" |
|
Line 134... | Line 135... | ||
134 | include "bus/pci/pci16.inc" |
135 | include "detect/biosdisk.inc" |
135 | 136 | ||
136 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
137 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
137 | ;; ;; |
138 | ;; ;; |
Line 361... | Line 362... | ||
361 | cmp [SCR_MODE],word 0x12 ; VGA 640x480 |
362 | cmp [SCR_MODE],word 0x12 ; VGA 640x480 |
362 | je @f |
363 | je @f |
363 | mov ax,[BOOT_VAR+0x9001] ; for other modes |
364 | mov ax,[BOOT_VAR+0x9001] ; for other modes |
364 | mov [BytesPerScanLine],ax |
365 | mov [BytesPerScanLine],ax |
365 | @@: |
366 | @@: |
- | 367 | mov esi, BOOT_VAR+0x9080 |
|
- | 368 | movzx ecx, byte [esi-1] |
|
- | 369 | mov [NumBiosDisks], ecx |
|
- | 370 | mov edi, BiosDisksData |
|
- | 371 | rep movsd |
|
Line 366... | Line 372... | ||
366 | 372 | ||
Line 367... | Line 373... | ||
367 | ; GRAPHICS ADDRESSES |
373 | ; GRAPHICS ADDRESSES |
368 | 374 | ||
Line 503... | Line 509... | ||
503 | mov [ipc_pdir], eax |
509 | mov [ipc_pdir], eax |
Line 504... | Line 510... | ||
504 | 510 | ||
505 | add eax, ebx |
511 | add eax, ebx |
Line -... | Line 512... | ||
- | 512 | mov [ipc_ptab], eax |
|
- | 513 | ||
- | 514 | stdcall kernel_alloc, unpack.LZMA_BASE_SIZE+(unpack.LZMA_LIT_SIZE shl (unpack.lc+unpack.lp)) |
|
506 | mov [ipc_ptab], eax |
515 | mov [unpack.p], eax |
507 | 516 | ||
508 | call init_events |
517 | call init_events |
509 | mov eax, srv.fd-SRV_FD_OFFSET |
518 | mov eax, srv.fd-SRV_FD_OFFSET |
Line 535... | Line 544... | ||
535 | mov [BgrDataHeight],eax |
544 | mov [BgrDataHeight],eax |
536 | mov [mem_BACKGROUND],4095 |
545 | mov [mem_BACKGROUND],4095 |
537 | stdcall kernel_alloc, [mem_BACKGROUND] |
546 | stdcall kernel_alloc, [mem_BACKGROUND] |
538 | mov [img_background], eax |
547 | mov [img_background], eax |
Line -... | Line 548... | ||
- | 548 | ||
- | 549 | mov [SLOT_BASE + 256 + APPDATA.dir_table], sys_pgdir - OS_BASE |
|
- | 550 | ||
- | 551 | ; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f |
|
- | 552 | ||
- | 553 | call rerouteirqs |
|
- | 554 | ||
- | 555 | ; Initialize system V86 machine |
|
Line 539... | Line 556... | ||
539 | 556 | call init_sys_v86 |
|
540 | 557 | ||
541 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
558 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
Line 599... | Line 616... | ||
599 | shr ebx, 20 |
616 | shr ebx, 20 |
600 | mov edi, 1 |
617 | mov edi, 1 |
601 | mov eax, 0x00040000 |
618 | mov eax, 0x00040000 |
602 | call display_number_force |
619 | call display_number_force |
Line 603... | Line -... | ||
603 | - | ||
604 | ; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f |
- | |
605 | - | ||
606 | mov esi,boot_irqs |
- | |
607 | call boot_log |
- | |
608 | call rerouteirqs |
- | |
609 | - | ||
610 | mov esi,boot_tss |
- | |
611 | call boot_log |
- | |
612 | 620 | ||
Line 613... | Line 621... | ||
613 | ; BUILD SCHEDULER |
621 | ; BUILD SCHEDULER |
Line 614... | Line 622... | ||
614 | 622 | ||
Line 681... | Line 689... | ||
681 | mov dword [SLOT_BASE+256+APPDATA.app_name+4], dword 'DLE ' |
689 | mov dword [SLOT_BASE+256+APPDATA.app_name+4], dword 'DLE ' |
682 | mov edi, [os_stack_seg] |
690 | mov edi, [os_stack_seg] |
683 | mov dword [SLOT_BASE+256+APPDATA.pl0_stack], edi |
691 | mov dword [SLOT_BASE+256+APPDATA.pl0_stack], edi |
684 | add edi, 0x2000-512 |
692 | add edi, 0x2000-512 |
685 | mov dword [SLOT_BASE+256+APPDATA.fpu_state], edi |
693 | mov dword [SLOT_BASE+256+APPDATA.fpu_state], edi |
- | 694 | mov dword [SLOT_BASE+256+APPDATA.saved_esp0], edi ; just for case |
|
686 | mov dword [SLOT_BASE+256+APPDATA.io_map],\ |
695 | mov dword [SLOT_BASE+256+APPDATA.io_map],\ |
687 | (tss._io_map_0-OS_BASE+PG_MAP) |
696 | (tss._io_map_0-OS_BASE+PG_MAP) |
688 | mov dword [SLOT_BASE+256+APPDATA.io_map+4],\ |
697 | mov dword [SLOT_BASE+256+APPDATA.io_map+4],\ |
689 | (tss._io_map_1-OS_BASE+PG_MAP) |
698 | (tss._io_map_1-OS_BASE+PG_MAP) |
Line 2055... | Line 2064... | ||
2055 | sysfn_shutdown: ; 18.1 = BOOT |
2064 | sysfn_shutdown: ; 18.1 = BOOT |
2056 | mov [BOOT_VAR+0x9030],byte 0 |
2065 | mov [BOOT_VAR+0x9030],byte 0 |
2057 | for_shutdown_parameter: |
2066 | for_shutdown_parameter: |
Line 2058... | Line 2067... | ||
2058 | 2067 | ||
2059 | mov eax,[TASK_COUNT] |
- | |
2060 | add eax,2 |
- | |
2061 | mov [shutdown_processes],eax |
2068 | mov eax,[TASK_COUNT] |
- | 2069 | mov [SYS_SHUTDOWN],al |
|
2062 | mov [SYS_SHUTDOWN],al |
2070 | mov [shutdown_processes],eax |
2063 | and dword [esp+32], 0 |
2071 | and dword [esp+32], 0 |
2064 | ret |
2072 | ret |
2065 | uglobal |
2073 | uglobal |
2066 | shutdown_processes: dd 0x0 |
2074 | shutdown_processes: dd 0x0 |
Line 2440... | Line 2448... | ||
2440 | draw_background_temp: |
2448 | draw_background_temp: |
2441 | ; cmp [bgrchanged],1 ;0 |
2449 | ; cmp [bgrchanged],1 ;0 |
2442 | ; je nosb31 |
2450 | ; je nosb31 |
2443 | ;draw_background_temp: |
2451 | ;draw_background_temp: |
2444 | ; mov [bgrchanged],1 ;0 |
2452 | ; mov [bgrchanged],1 ;0 |
2445 | mov [REDRAW_BACKGROUND],byte 1 |
- | |
2446 | mov [background_defined], 1 |
2453 | mov [background_defined], 1 |
- | 2454 | call force_redraw_background |
|
- | 2455 | mov [REDRAW_BACKGROUND], byte 2 |
|
2447 | nosb31: |
2456 | nosb31: |
2448 | ret |
2457 | ret |
2449 | nosb3: |
2458 | nosb3: |
Line 2450... | Line 2459... | ||
2450 | 2459 | ||
Line 2549... | Line 2558... | ||
2549 | ret |
2558 | ret |
Line 2550... | Line 2559... | ||
2550 | 2559 | ||
2551 | nosb7: |
2560 | nosb7: |
Line -... | Line 2561... | ||
- | 2561 | ret |
|
- | 2562 | ||
- | 2563 | force_redraw_background: |
|
- | 2564 | mov [draw_data+32 + RECT.left],dword 0 |
|
- | 2565 | mov [draw_data+32 + RECT.top],dword 0 |
|
- | 2566 | push eax ebx |
|
- | 2567 | mov eax,[ScreenWidth] |
|
- | 2568 | mov ebx,[ScreenHeight] |
|
- | 2569 | mov [draw_data+32 + RECT.right],eax |
|
- | 2570 | mov [draw_data+32 + RECT.bottom],ebx |
|
- | 2571 | pop ebx eax |
|
Line 2552... | Line 2572... | ||
2552 | ret |
2572 | mov byte [REDRAW_BACKGROUND], 1 |
Line 2553... | Line 2573... | ||
2553 | 2573 | ret |
|
Line 3516... | Line 3536... | ||
3516 | mouse_not_active: |
3536 | mouse_not_active: |
3517 | cmp [REDRAW_BACKGROUND],byte 0 ; background update ? |
3537 | cmp [REDRAW_BACKGROUND],byte 0 ; background update ? |
3518 | jz nobackgr |
3538 | jz nobackgr |
3519 | cmp [background_defined], 0 |
3539 | cmp [background_defined], 0 |
3520 | jz nobackgr |
3540 | jz nobackgr |
3521 | ; mov [REDRAW_BACKGROUND],byte 2 |
3541 | cmp [REDRAW_BACKGROUND], byte 2 |
3522 | ; call change_task |
3542 | jnz no_set_bgr_event |
3523 | xor edi, edi |
3543 | xor edi, edi |
3524 | mov ecx, [TASK_COUNT] |
3544 | mov ecx, [TASK_COUNT] |
3525 | set_bgr_event: |
3545 | set_bgr_event: |
3526 | add edi, 256 |
3546 | add edi, 256 |
3527 | or [edi+SLOT_BASE+APPDATA.event_mask], 16 |
3547 | or [edi+SLOT_BASE+APPDATA.event_mask], 16 |
3528 | loop set_bgr_event |
3548 | loop set_bgr_event |
- | 3549 | no_set_bgr_event: |
|
3529 | mov [draw_data+32 + RECT.left],dword 0 |
3550 | ; mov [draw_data+32 + RECT.left],dword 0 |
3530 | mov [draw_data+32 + RECT.top],dword 0 |
3551 | ; mov [draw_data+32 + RECT.top],dword 0 |
3531 | mov eax,[ScreenWidth] |
3552 | ; mov eax,[ScreenWidth] |
3532 | mov ebx,[ScreenHeight] |
3553 | ; mov ebx,[ScreenHeight] |
3533 | mov [draw_data+32 + RECT.right],eax |
3554 | ; mov [draw_data+32 + RECT.right],eax |
3534 | mov [draw_data+32 + RECT.bottom],ebx |
3555 | ; mov [draw_data+32 + RECT.bottom],ebx |
3535 | call drawbackground |
3556 | call drawbackground |
3536 | mov [REDRAW_BACKGROUND],byte 0 |
3557 | mov [REDRAW_BACKGROUND],byte 0 |
3537 | mov [MOUSE_BACKGROUND],byte 0 |
3558 | mov [MOUSE_BACKGROUND],byte 0 |
Line 3538... | Line 3559... | ||
3538 | 3559 | ||
Line 3542... | Line 3563... | ||
3542 | 3563 | ||
3543 | cmp [SYS_SHUTDOWN],byte 0 |
3564 | cmp [SYS_SHUTDOWN],byte 0 |
Line 3544... | Line 3565... | ||
3544 | je noshutdown |
3565 | je noshutdown |
3545 | - | ||
Line 3546... | Line 3566... | ||
3546 | mov edx,[shutdown_processes] |
3566 | |
3547 | sub dl,2 |
3567 | mov edx,[shutdown_processes] |
Line -... | Line 3568... | ||
- | 3568 | ||
3548 | 3569 | cmp [SYS_SHUTDOWN],dl |
|
3549 | cmp [SYS_SHUTDOWN],dl |
- | |
3550 | jne no_mark_system_shutdown |
3570 | jne no_mark_system_shutdown |
3551 | 3571 | ||
3552 | mov edx,OS_BASE+0x3040 |
3572 | lea ecx,[edx-1] |
3553 | movzx ecx,byte [SYS_SHUTDOWN] |
3573 | mov edx,OS_BASE+0x3040 |
3554 | add ecx,5 |
3574 | jecxz @f |
- | 3575 | markz: |
|
Line 3555... | Line 3576... | ||
3555 | markz: |
3576 | mov [edx+TASKDATA.state],byte 3 |
Line 3556... | Line 3577... | ||
3556 | mov [edx+TASKDATA.state],byte 3 |
3577 | add edx,0x20 |
Line 3557... | Line 3578... | ||
3557 | add edx,0x20 |
3578 | loop markz |
3558 | loop markz |
- | |
3559 | - | ||
3560 | no_mark_system_shutdown: |
3579 | @@: |
Line 3561... | Line 3580... | ||
3561 | 3580 | ||
Line 3582... | Line 3601... | ||
3582 | 3601 | ||
3583 | add ebx,0x20 |
3602 | add ebx,0x20 |
3584 | inc esi |
3603 | inc esi |
3585 | dec eax |
3604 | dec eax |
3586 | jnz newct |
- | |
3587 | 3605 | jnz newct |
|
Line 3588... | Line -... | ||
3588 | ret |
- | |
3589 | 3606 | ret |
|
Line 3590... | Line 3607... | ||
3590 | 3607 | ||
Line 3591... | Line 3608... | ||
3591 | ; redraw screen |
3608 | ; redraw screen |
Line 3649... | Line 3666... | ||
3649 | cmp ecx,eax |
3666 | cmp ecx,eax |
3650 | jb ricino |
3667 | jb ricino |
Line 3651... | Line 3668... | ||
3651 | 3668 | ||
Line 3652... | Line 3669... | ||
3652 | bgli: |
3669 | bgli: |
- | 3670 | ||
- | 3671 | cmp ecx,1 |
|
- | 3672 | jnz .az |
|
3653 | 3673 | mov al,[REDRAW_BACKGROUND] |
|
- | 3674 | cmp al,2 |
|
- | 3675 | jz newdw8 |
|
- | 3676 | test al,al |
|
- | 3677 | jz .az |
|
- | 3678 | lea eax,[edi+draw_data-window_data] |
|
- | 3679 | mov ebx,[dlx] |
|
- | 3680 | cmp ebx,[eax+RECT.left] |
|
- | 3681 | jae @f |
|
- | 3682 | mov [eax+RECT.left],ebx |
|
- | 3683 | @@: |
|
- | 3684 | mov ebx,[dly] |
|
- | 3685 | cmp ebx,[eax+RECT.top] |
|
- | 3686 | jae @f |
|
- | 3687 | mov [eax+RECT.top],ebx |
|
- | 3688 | @@: |
|
- | 3689 | mov ebx,[dlxe] |
|
- | 3690 | cmp ebx,[eax+RECT.right] |
|
- | 3691 | jbe @f |
|
- | 3692 | mov [eax+RECT.right],ebx |
|
- | 3693 | @@: |
|
- | 3694 | mov ebx,[dlye] |
|
- | 3695 | cmp ebx,[eax+RECT.bottom] |
|
- | 3696 | jbe @f |
|
- | 3697 | mov [eax+RECT.bottom],ebx |
|
- | 3698 | @@: |
|
Line 3654... | Line 3699... | ||
3654 | cmp edi,esi |
3699 | jmp newdw8 |
3655 | jz ricino |
3700 | .az: |
Line 3656... | Line 3701... | ||
3656 | 3701 | ||
Line 3666... | Line 3711... | ||
3666 | mov ebx,[dlye] |
3711 | mov ebx,[dlye] |
3667 | mov [eax + RECT.bottom], ebx |
3712 | mov [eax + RECT.bottom], ebx |
Line 3668... | Line 3713... | ||
3668 | 3713 | ||
Line 3669... | Line 3714... | ||
3669 | sub eax,draw_data-window_data |
3714 | sub eax,draw_data-window_data |
3670 | 3715 | ||
3671 | cmp ecx,1 |
3716 | cmp dword [esp],1 |
3672 | jne nobgrd |
- | |
3673 | cmp esi,1 |
- | |
Line 3674... | Line 3717... | ||
3674 | je newdw8 |
3717 | jne nobgrd |
3675 | call drawbackground |
3718 | mov byte [REDRAW_BACKGROUND], 1 |
Line 3676... | Line 3719... | ||
3676 | 3719 | ||
Line 4611... | Line 4654... | ||
4611 | jmp @b |
4654 | jmp @b |
4612 | @@: |
4655 | @@: |
4613 | popad |
4656 | popad |
4614 | ret |
4657 | ret |
Line -... | Line 4658... | ||
- | 4658 | ||
- | 4659 | sys_msg_board_byte: |
|
- | 4660 | ; in: al = byte to display |
|
- | 4661 | ; out: nothing |
|
- | 4662 | ; destroys: nothing |
|
- | 4663 | pushad |
|
- | 4664 | mov ecx, 2 |
|
- | 4665 | shl eax, 24 |
|
- | 4666 | jmp @f |
|
- | 4667 | ||
- | 4668 | sys_msg_board_word: |
|
- | 4669 | ; in: ax = word to display |
|
- | 4670 | ; out: nothing |
|
- | 4671 | ; destroys: nothing |
|
- | 4672 | pushad |
|
- | 4673 | mov ecx, 4 |
|
- | 4674 | shl eax, 16 |
|
- | 4675 | jmp @f |
|
- | 4676 | ||
- | 4677 | sys_msg_board_dword: |
|
- | 4678 | ; in: eax = dword to display |
|
- | 4679 | ; out: nothing |
|
- | 4680 | ; destroys: nothing |
|
- | 4681 | pushad |
|
- | 4682 | mov ecx, 8 |
|
- | 4683 | @@: |
|
- | 4684 | push ecx |
|
- | 4685 | rol eax, 4 |
|
- | 4686 | push eax |
|
- | 4687 | and al, 0xF |
|
- | 4688 | cmp al, 10 |
|
- | 4689 | sbb al, 69h |
|
- | 4690 | das |
|
- | 4691 | mov bl, al |
|
- | 4692 | xor eax, eax |
|
- | 4693 | inc eax |
|
- | 4694 | call sys_msg_board |
|
- | 4695 | pop eax |
|
- | 4696 | pop ecx |
|
- | 4697 | loop @b |
|
- | 4698 | popad |
|
- | 4699 | ret |
|
4615 | 4700 | ||
4616 | uglobal |
4701 | uglobal |
4617 | msg_board_data: times 4096 db 0 |
4702 | msg_board_data: times 4096 db 0 |
4618 | msg_board_count dd 0x0 |
4703 | msg_board_count dd 0x0 |
Line 5084... | Line 5169... | ||
5084 | mov [esp+36],eax |
5169 | mov [esp+36],eax |
5085 | mov [esp+24],ebx |
5170 | mov [esp+24],ebx |
Line 5086... | Line 5171... | ||
5086 | 5171 | ||
Line 5087... | Line -... | ||
5087 | ret |
- | |
5088 | 5172 | ret |
|
5089 | align 4 |
5173 | |
Line -... | Line 5174... | ||
- | 5174 | paleholder: |
|
5090 | paleholder: |
5175 | ret |
5091 | ret |
5176 | |
5092 | 5177 | ||
5093 | ; --------------- APM --------------------- |
5178 | ; --------------- APM --------------------- |
5094 | apm_entry dp 0 |
5179 | apm_entry dp 0 |
Line 5188... | Line 5273... | ||
5188 | 5273 | ||
5189 | mov al, 0xFF |
5274 | mov al, 0xFF |
5190 | out 0x21, al |
5275 | out 0x21, al |
Line -... | Line 5276... | ||
- | 5276 | out 0xA1, al |
|
5191 | out 0xA1, al |
5277 | |
5192 | 5278 | if 1 |
|
Line 5193... | Line 5279... | ||
5193 | mov word [OS_BASE+0x467+0],pr_mode_exit |
5279 | mov word [OS_BASE+0x467+0],pr_mode_exit |
5194 | mov word [OS_BASE+0x467+2],0x1000 |
5280 | mov word [OS_BASE+0x467+2],0x1000 |
5195 | 5281 | ||
5196 | mov al,0x0F |
5282 | mov al,0x0F |
Line 5197... | Line 5283... | ||
5197 | out 0x70,al |
5283 | out 0x70,al |
5198 | mov al,0x05 |
5284 | mov al,0x05 |
- | 5285 | out 0x71,al |
|
5199 | out 0x71,al |
5286 | |
Line -... | Line 5287... | ||
- | 5287 | mov al,0xFE |
|
- | 5288 | out 0x64,al |
|
- | 5289 | ||
- | 5290 | hlt |
|
- | 5291 | ||
- | 5292 | else |
|
- | 5293 | cmp byte [OS_BASE + 0x9030], 2 |
|
- | 5294 | jnz no_acpi_power_off |
|
- | 5295 | ||
- | 5296 | ; scan for RSDP |
|
- | 5297 | ; 1) The first 1 Kb of the Extended BIOS Data Area (EBDA). |
|
- | 5298 | movzx eax, word [OS_BASE + 0x40E] |
|
- | 5299 | shl eax, 4 |
|
- | 5300 | jz @f |
|
- | 5301 | mov ecx, 1024/16 |
|
- | 5302 | call scan_rsdp |
|
- | 5303 | jnc .rsdp_found |
|
- | 5304 | @@: |
|
- | 5305 | ; 2) The BIOS read-only memory space between 0E0000h and 0FFFFFh. |
|
- | 5306 | mov eax, 0xE0000 |
|
- | 5307 | mov ecx, 0x2000 |
|
- | 5308 | call scan_rsdp |
|
- | 5309 | jc no_acpi_power_off |
|
- | 5310 | .rsdp_found: |
|
- | 5311 | mov esi, [eax+16] ; esi contains physical address of the RSDT |
|
- | 5312 | mov ebp, [ipc_tmp] |
|
- | 5313 | stdcall map_page, ebp, esi, PG_MAP |
|
- | 5314 | lea eax, [esi+1000h] |
|
- | 5315 | lea edx, [ebp+1000h] |
|
- | 5316 | stdcall map_page, edx, eax, PG_MAP |
|
- | 5317 | and esi, 0xFFF |
|
- | 5318 | add esi, ebp |
|
- | 5319 | cmp dword [esi], 'RSDT' |
|
- | 5320 | jnz no_acpi_power_off |
|
- | 5321 | mov ecx, [esi+4] |
|
- | 5322 | sub ecx, 24h |
|
- | 5323 | jbe no_acpi_power_off |
|
- | 5324 | shr ecx, 2 |
|
- | 5325 | add esi, 24h |
|
- | 5326 | .scan_fadt: |
|
- | 5327 | lodsd |
|
- | 5328 | mov ebx, eax |
|
- | 5329 | lea eax, [ebp+2000h] |
|
- | 5330 | stdcall map_page, eax, ebx, PG_MAP |
|
- | 5331 | lea eax, [ebp+3000h] |
|
- | 5332 | add ebx, 0x1000 |
|
- | 5333 | stdcall map_page, eax, ebx, PG_MAP |
|
- | 5334 | and ebx, 0xFFF |
|
- | 5335 | lea ebx, [ebx+ebp+2000h] |
|
- | 5336 | cmp dword [ebx], 'FACP' |
|
- | 5337 | jz .fadt_found |
|
- | 5338 | loop .scan_fadt |
|
- | 5339 | jmp no_acpi_power_off |
|
- | 5340 | .fadt_found: |
|
- | 5341 | ; ebx is linear address of FADT |
|
- | 5342 | mov edx, [ebx+48] |
|
- | 5343 | test edx, edx |
|
- | 5344 | jz .nosmi |
|
- | 5345 | mov al, [ebx+52] |
|
- | 5346 | out dx, al |
|
- | 5347 | mov edx, [ebx+64] |
|
- | 5348 | @@: |
|
- | 5349 | in ax, dx |
|
- | 5350 | test al, 1 |
|
- | 5351 | jz @b |
|
- | 5352 | .nosmi: |
|
- | 5353 | mov edx, [ebx+64] |
|
- | 5354 | in ax, dx |
|
- | 5355 | and ax, 203h |
|
- | 5356 | or ax, 3C00h |
|
- | 5357 | out dx, ax |
|
- | 5358 | mov edx, [ebx+68] |
|
- | 5359 | test edx, edx |
|
- | 5360 | jz @f |
|
- | 5361 | in ax, dx |
|
- | 5362 | and ax, 203h |
|
- | 5363 | or ax, 3C00h |
|
- | 5364 | out dx, ax |
|
- | 5365 | @@: |
|
- | 5366 | jmp $ |
|
- | 5367 | ||
- | 5368 | ||
- | 5369 | no_acpi_power_off: |
|
- | 5370 | mov word [OS_BASE+0x467+0],pr_mode_exit |
|
- | 5371 | mov word [OS_BASE+0x467+2],0x1000 |
|
- | 5372 | ||
- | 5373 | mov al,0x0F |
|
- | 5374 | out 0x70,al |
|
- | 5375 | mov al,0x05 |
|
- | 5376 | out 0x71,al |
|
- | 5377 | ||
- | 5378 | mov al,0xFE |
|
- | 5379 | out 0x64,al |
|
- | 5380 | ||
- | 5381 | hlt |
|
- | 5382 | ||
- | 5383 | scan_rsdp: |
|
- | 5384 | add eax, OS_BASE |
|
- | 5385 | .s: |
|
- | 5386 | cmp dword [eax], 'RSD ' |
|
- | 5387 | jnz .n |
|
- | 5388 | cmp dword [eax+4], 'PTR ' |
|
- | 5389 | jnz .n |
|
- | 5390 | xor edx, edx |
|
- | 5391 | xor esi, esi |
|
- | 5392 | @@: |
|
- | 5393 | add dl, [eax+esi] |
|
- | 5394 | inc esi |
|
- | 5395 | cmp esi, 20 |
|
- | 5396 | jnz @b |
|
- | 5397 | test dl, dl |
|
- | 5398 | jz .ok |
|
- | 5399 | .n: |
|
- | 5400 | add eax, 10h |
|
Line 5200... | Line 5401... | ||
5200 | 5401 | loop .s |
|
Line 5201... | Line 5402... | ||
5201 | mov al,0xFE |
5402 | stc |