plan9fox/sys/src/boot/pc/a20.s

71 lines
797 B
ArmAsm
Raw Normal View History

2011-04-12 23:43:22 +00:00
#include "x16.h"
#undef ORB
TEXT a20(SB), $0
CALL rmode16(SB)
CALL16(spllo(SB))
2011-04-12 23:43:22 +00:00
LWI(0x2401, rAX)
BIOSCALL(0x15)
JC _biosfail
CALL16(pmode32(SB))
RET
_biosfail:
CALL16(pmode32(SB))
/* fast a20 */
MOVL $0x92, DX
INB
ANDB $0xFE, AX
ORB $0x02, AX
OUTB
/* slow a20 */
2011-04-12 23:43:22 +00:00
CALL a20wait(SB)
MOVL $0x64, DX
MOVB $0xAD, AL
OUTB
CALL a20wait(SB)
MOVL $0x64, DX
MOVB $0xD0, AL
OUTB
CALL a20wait2(SB)
MOVL $0x60, DX
INB
PUSHL AX
CALL a20wait(SB)
MOVL $0x64, DX
MOVB $0xD1, AL
OUTB
CALL a20wait(SB)
MOVL $0x60, DX
POPL AX
ORB $2, AL
OUTB
CALL a20wait(SB)
MOVL $0x64, DX
MOVB $0xAE, AL
OUTB
TEXT a20wait(SB), $0
_a20wait:
MOVL $0x64, DX
INB
TESTB $1, AL
JZ _a20wait2
RET
TEXT a20wait2(SB), $0
_a20wait2:
MOVL $0x64, DX
INB
TESTB $2, AL
JNZ _a20wait
RET