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.
This commit is contained in:
cinap_lenrek 2013-09-16 16:23:51 +02:00
parent b5aab82488
commit 15c7d856bc

View file

@ -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 @@ TEXT apmfarcall(SB), $0
* 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 @@ TEXT apmfarcall(SB), $0
PUSHL DX
POPL GS
POPL DX
*/
PUSHL $APMDSEG
POPL DS
/*
* The actual call.