]> git.lizzy.rs Git - plan9front.git/blob - sys/src/boot/pc/a20.s
9boot: pxe/kernel memory overlap problem, add unload function
[plan9front.git] / sys / src / boot / pc / a20.s
1 #include "x16.h"
2
3 #undef ORB
4
5 TEXT a20(SB), $0
6         CALL rmode16(SB)
7         CALL16(spllo(SB))
8         LWI(0x2401, rAX)
9         BIOSCALL(0x15)
10         JC _biosfail
11         CALL16(pmode32(SB))
12         RET
13
14 _biosfail:
15         CALL16(pmode32(SB))
16
17         CALL a20wait(SB)
18         MOVL $0x64, DX
19         MOVB $0xAD, AL
20         OUTB
21
22         CALL a20wait(SB)
23         MOVL $0x64, DX
24         MOVB $0xD0, AL
25         OUTB
26
27         CALL a20wait2(SB)
28         MOVL $0x60, DX
29         INB
30         PUSHL AX
31
32         CALL a20wait(SB)
33         MOVL $0x64, DX
34         MOVB $0xD1, AL
35         OUTB
36
37         CALL a20wait(SB)
38         MOVL $0x60, DX
39         POPL AX
40         ORB $2, AL
41         OUTB
42
43         CALL a20wait(SB)
44         MOVL $0x64, DX
45         MOVB $0xAE, AL
46         OUTB
47
48 TEXT a20wait(SB), $0
49 _a20wait:
50         MOVL $0x64, DX
51         INB
52         TESTB $1, AL
53         JZ _a20wait2
54         RET
55
56 TEXT a20wait2(SB), $0
57 _a20wait2:
58         MOVL $0x64, DX
59         INB
60         TESTB $2, AL
61         JNZ _a20wait
62         RET