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:
parent
b5aab82488
commit
15c7d856bc
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue