344,6 → 344,58 |
; wait until 8042 controller is ready |
loopnz wait_loop |
|
; --------------- APM --------------------- |
push 0 |
pop es |
mov word [es : 0x9044], 0 ; ver = 0.0 (APM not found) |
mov ax, 0x5300 |
xor bx, bx |
int 0x15 |
jc apm_end ; APM not found |
test cx, 2 |
jz apm_end ; APM 32-bit protected-mode interface not supported |
mov [es : 0x9044], ax ; Save APM Version |
mov [es : 0x9046], cx ; Save APM flags |
|
; Write APM ver ---- |
jmp @f |
msg_apm:db ' APM x.x ', 0 |
@@: and ax, 0xf0f |
add ax, '00' |
mov [msg_apm - 0x10000 + 5], ah |
mov [msg_apm - 0x10000 + 7], al |
_setcursor 0, 3 |
mov si, msg_apm - 0x10000 |
call printplain |
_setcursor d80x25_top_num,0 |
; ------------------ |
|
mov ax, 0x5304 ; Disconnect interface |
xor bx, bx |
int 0x15 |
mov ax, 0x5303 ; Connect 32 bit mode interface |
xor bx, bx |
int 0x15 |
; init selectors |
movzx eax, ax ; real-mode segment base address of protected-mode 32-bit code segment |
shl eax, 4 |
mov [apm_code_32 - 0x10000 + 2], ax |
shr eax, 16 |
mov [apm_code_32 - 0x10000 + 4], al |
movzx ecx, cx ; real-mode segment base address of protected-mode 16-bit code segment |
shl ecx, 4 |
mov [apm_code_16 - 0x10000 + 2], cx |
shr ecx, 16 |
mov [apm_code_16 - 0x10000 + 4], cl |
movzx edx, dx ; real-mode segment base address of protected-mode 16-bit data segment |
shl edx, 4 |
mov [apm_data_16 - 0x10000 + 2], dx |
shr edx, 16 |
mov [apm_data_16 - 0x10000 + 4], dl |
mov [es : 0x9040], ebx ; offset of APM entry point |
apm_end: |
; ----------------------------------------- |
|
; DISPLAY VESA INFORMATION |
|
push 0 |