]> git.lizzy.rs Git - plan9front.git/blob - sys/src/boot/pc/a20.s
merge
[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         /* fast a20 */
18         MOVL $0x92, DX
19         INB
20         ANDB $0xFE, AX
21         ORB $0x02, AX
22         OUTB
23
24         /* slow a20 */
25         CALL a20wait(SB)
26         MOVL $0x64, DX
27         MOVB $0xAD, AL
28         OUTB
29
30         CALL a20wait(SB)
31         MOVL $0x64, DX
32         MOVB $0xD0, AL
33         OUTB
34
35         CALL a20wait2(SB)
36         MOVL $0x60, DX
37         INB
38         PUSHL AX
39
40         CALL a20wait(SB)
41         MOVL $0x64, DX
42         MOVB $0xD1, AL
43         OUTB
44
45         CALL a20wait(SB)
46         MOVL $0x60, DX
47         POPL AX
48         ORB $2, AL
49         OUTB
50
51         CALL a20wait(SB)
52         MOVL $0x64, DX
53         MOVB $0xAE, AL
54         OUTB
55
56 TEXT a20wait(SB), $0
57 _a20wait:
58         MOVL $0x64, DX
59         INB
60         TESTB $1, AL
61         JZ _a20wait2
62         RET
63
64 TEXT a20wait2(SB), $0
65 _a20wait2:
66         MOVL $0x64, DX
67         INB
68         TESTB $2, AL
69         JNZ _a20wait
70         RET