git: 9front

Download patch

ref: 293243fe8380b6c9f5d6215dcff72a378175aaa4
parent: cdaa6b4dc96f6b425861de16d01f26332834c7e2
author: cinap_lenrek <cinap_lenrek@localhost>
date: Tue Apr 12 19:43:22 EDT 2011

9boot a20 gate

--- /dev/null
+++ b/sys/src/boot/pc/a20.s
@@ -1,0 +1,67 @@
+#include "x16.h"
+
+#undef ORB
+
+TEXT a20(SB), $0
+	CALL rmode16(SB)
+	STI
+	LWI(0x2401, rAX)
+	BIOSCALL(0x15)
+	JC _biosfail
+	CLI
+	CALL16(pmode32(SB))
+	RET
+
+_biosfail:
+	LWI((0x0E00|'!'), rAX)
+	BIOSCALL(0x10);
+
+	CLI
+	CALL16(pmode32(SB))
+
+	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
--- a/sys/src/boot/pc/l.s
+++ b/sys/src/boot/pc/l.s
@@ -111,13 +111,6 @@
 	ANDL $0xFFFF, AX
 	RET
 
-TEXT a20(SB), $0
-	CALL rmode16(SB)
-	STI
-	LWI(0x2401, rAX)
-	BIOSCALL(0x15)
-	JMP _pret32
-
 #ifdef PXE
 
 TEXT pxecallret(SB), $0
--- a/sys/src/boot/pc/mkfile
+++ b/sys/src/boot/pc/mkfile
@@ -36,7 +36,7 @@
 	$LD -o $target -H3 -T0x0600 -l $prereq
 	ls -l $target
 
-9boot&:	l%.$O %.$O sub.$O
+9boot&:	l%.$O %.$O sub.$O a20.$O
 	$LD -o $target -H3 -T0x7c00 -l $prereq
 	ls -l $target
 
@@ -59,7 +59,7 @@
 	touch tmp/baz
 	touch tmp/386aaa
 	mkdir tmp/386
-	cp /386/9bootiso tmp/386
+	cp 386/9bootiso tmp/386
 	cp /386/9pc tmp/386
 	cp /386/9pcload tmp/386
 	cp /386/9pcf tmp/386
--