Disable the A20 line upon exec (int21/ah=4B). This is necessary for some
brain-dead exepacked programs. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@402 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
00258e0fb0
commit
17d50fff3b
@ -574,6 +574,15 @@ _prev_user_r:
|
|||||||
prev_int21regs_off dw 0 ;2D0 - pointer to prev int 21 frame
|
prev_int21regs_off dw 0 ;2D0 - pointer to prev int 21 frame
|
||||||
prev_int21regs_seg dw 0
|
prev_int21regs_seg dw 0
|
||||||
|
|
||||||
|
; Pad to 02ddh
|
||||||
|
times (2ddh - ($ - _internal_data)) db 0
|
||||||
|
global _ext_open_action
|
||||||
|
global _ext_open_attrib
|
||||||
|
global _ext_open_mode
|
||||||
|
_ext_open_action dw 0 ;2DD - extended open action
|
||||||
|
_ext_open_attrib dw 0 ;2DF - extended open attrib
|
||||||
|
_ext_open_mode dw 0 ;2E1 - extended open mode
|
||||||
|
|
||||||
; Pad to 0620h
|
; Pad to 0620h
|
||||||
times (300h - ($ - _internal_data)) db 0
|
times (300h - ($ - _internal_data)) db 0
|
||||||
global _szNames
|
global _szNames
|
||||||
@ -883,13 +892,6 @@ forceEnableA20retry:
|
|||||||
;
|
;
|
||||||
; ok, we have to enable A20 )at least seems so
|
; ok, we have to enable A20 )at least seems so
|
||||||
;
|
;
|
||||||
; some debug first
|
|
||||||
; push bx
|
|
||||||
; mov ah, 0eh
|
|
||||||
; mov al, 'H'
|
|
||||||
; mov bx, 0007h
|
|
||||||
; int 10h
|
|
||||||
; pop bx
|
|
||||||
|
|
||||||
call far __EnableA20
|
call far __EnableA20
|
||||||
|
|
||||||
@ -903,9 +905,27 @@ forceEnableA20success:
|
|||||||
pop ds
|
pop ds
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;
|
||||||
|
; global f*cking compatibility issues:
|
||||||
|
;
|
||||||
|
; very old brain dead software (PKLITE, copyright 1990)
|
||||||
|
; forces us to execute with A20 disabled
|
||||||
|
;
|
||||||
|
|
||||||
|
global _ExecUserDisableA20
|
||||||
|
|
||||||
|
_ExecUserDisableA20:
|
||||||
|
|
||||||
|
cmp word [cs:_XMSDriverAddress],0
|
||||||
|
jne NeedToDisable
|
||||||
|
cmp word [cs:_XMSDriverAddress+2],0
|
||||||
|
je noNeedToDisable
|
||||||
|
NeedToDisable:
|
||||||
|
push ax
|
||||||
|
call far __DisableA20
|
||||||
|
pop ax
|
||||||
|
noNeedToDisable:
|
||||||
|
iret
|
||||||
|
|
||||||
|
|
||||||
segment _TEXT
|
segment _TEXT
|
||||||
|
@ -67,7 +67,8 @@ _exec_user:
|
|||||||
sti
|
sti
|
||||||
;
|
;
|
||||||
POP$ALL
|
POP$ALL
|
||||||
iret
|
extern _ExecUserDisableA20
|
||||||
|
jmp far _ExecUserDisableA20
|
||||||
|
|
||||||
segment _TEXT
|
segment _TEXT
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user