]> wirehaze git hosting - BOS.git/blob - kernel/realmode/a20.inc

wirehaze git hosting

made it assemble under os x, moved loading position of kernel + install script for osx
[BOS.git] / kernel / realmode / a20.inc
1 ;----------------------------------------------------------;
2 ; BOS 0.04 Christoffer Bubach, 2005. ;
3 ;----------------------------------------------------------;
4 ; ;
5 ; Realmode functions to set a20-gate. ;
6 ; ;
7 ;----------------------------------------------------------;
8
9 ;----------------------;
10 ; enable a20 gate ;
11 ;----------------------;
12 enable_a20:
13 in al, 0x64 ; first try..
14 test al, 2
15 jnz enable_a20
16 mov al, 0xD1
17 out 0x64, al
18 .d6:
19 in al, 0x64
20 and ax, 2
21 jnz .d6
22 mov al, 0xDF
23 out 0x60, al
24
25 call a20_test
26 jz .ok
27
28 in al, 0x92 ; try again, diffrent method.
29 or al, 0x02
30 out 0x92, al
31
32 call a20_test
33 jz .ok
34
35 ; ERROR!
36 ; a20-gate not set! Do something about it here... ;)
37
38 .ok:
39 ret
40
41 ;------------------------;
42 ; test if A20 is set ;
43 ;------------------------;
44 a20_test:
45 mov al, byte [fs:0]
46 mov ah, al
47 not al
48 xchg al, byte [gs:0x10]
49 cmp ah, byte [fs:0]
50 mov [gs:0x10], al
51 ret