git: 9front

Download patch

ref: e55a309d5043031657dcabfcc0f218bf612cf815
parent: c066047cbc6404e1b7c1515eb2df9081e55f5662
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Mon Sep 16 12:23:51 EDT 2013

apm: fix wrong segment load, zero segment registers

we loaded APMDSEG instead of APMDSEL into DS. (ouch!)

its not really clear why we loaded DS (wong) in the
first place as bios is supposed to do this. for the
machines where this worked it could have no effect
anyway because it was wrong so removing the DS load
and just zero all segment registers.

--- a/sys/src/9/pc/apmjump.s
+++ b/sys/src/9/pc/apmjump.s
@@ -9,19 +9,9 @@
 
 #define SSOVERRIDE	BYTE $0x36
 #define CSOVERRIDE	BYTE $0x2E
-#define RETF		BYTE $0xCB
 
 GLOBL	apmjumpstruct+0(SB), $8
 
-TEXT fortytwo(SB), $0
-	MOVL	$42, AX
-	RETF
-
-TEXT getcs(SB), $0
-	PUSHL	CS
-	POPL	AX
-	RET
-
 TEXT apmfarcall(SB), $0
 	/*
 	 * We call push and pop ourselves.
@@ -52,6 +42,7 @@
 	 * paranoia: zero the segments, since it's the
 	 * BIOS's responsibility to initialize them.
 	 * (trick picked up from Linux driver).
+	 */
 	PUSHL	DX
 	XORL	DX, DX
 	PUSHL	DX
@@ -63,10 +54,6 @@
 	PUSHL	DX
 	POPL	GS
 	POPL	DX
-	 */
-
-	PUSHL	$APMDSEG
-	POPL	DS
 
 	/*
 	 * The actual call.
--