283,6 → 283,14 |
rep stosd |
|
; SAVE REAL MODE VARIABLES |
; --------------- APM --------------------- |
mov eax, [0x2f0000 + 0x9040] ; entry point |
mov dword[apm_entry], eax |
mov word [apm_entry + 4], apm_code_32 - gdts |
|
mov eax, [0x2f0000 + 0x9044] ; version & flags |
mov [apm_vf], eax |
; ----------------------------------------- |
; movzx eax,byte [0x2f0000+0x9010] ; mouse port |
; mov [0xF604],byte 1 ;al |
mov al,[0x2f0000+0x9000] ; bpp |
4790,12 → 4798,6 |
mov [esp+36],eax |
ret |
|
;align 4 |
|
syscall_appints: ; AppInts |
; mov [esp+36],dword -1 |
ret |
|
align 4 |
|
syscall_threads: ; CreateThreads |
4879,8 → 4881,44 |
; ret |
; |
|
; --------------- APM --------------------- |
apm_entry dp 0 |
apm_vf dd 0 |
align 4 |
sys_apm: |
cmp word [apm_vf], 0 ; Check APM BIOS enable |
jne @f |
or [esp + 40], byte 1 ; error |
mov [esp + 36], dword 8 ; 32-bit protected-mode interface not supported |
ret |
|
@@: xchg eax, ecx |
xchg ebx, ecx |
|
cmp al, 3 |
ja @f |
and [esp + 40], byte 0xfe ; emulate func 0..3 as func 0 |
mov eax, [apm_vf] |
mov [esp + 36], eax |
shr eax, 16 |
mov [esp + 32], eax |
ret |
|
@@: call pword [apm_entry] ; call APM BIOS |
mov [esp + 8 ], edi |
mov [esp + 12], esi |
mov [esp + 24], ebx |
mov [esp + 28], edx |
mov [esp + 32], ecx |
mov [esp + 36], eax |
setc al |
and [esp + 40], byte 0xfe |
or [esp + 40], al |
ret |
; ----------------------------------------- |
|
align 4 |
|
undefined_syscall: ; Undefined system call |
|
mov [esp+36],dword -1 |