Subversion Repositories Kolibri OS

Rev

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