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.
--
⑨