FreeDOS/test/ldosboot/patch.sld

90 lines
1.5 KiB
Scheme

@goto :help
Patch iniload script
by C. Masloch, 2021
Usage of the works is permitted provided that this
instrument is retained with the works, so that any entity
that uses the works is notified of this instrument.
DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
@:help
; Available patches:
;
; :patch_iniload_no_query_geometry
; :patch_iniload_no_lba
;
; Inputs: vef = nonzero to debug
; cs:0 -> iniload
; Output: vee = nonzero if error
; iniload patched
; Change: ve0 to vef, src, sro, aao, stack
;
; Requires lDebug release 3 or later
@goto :eof
:patch_iniload_no_query_geometry
@if not (vef) then r ysf |= C000
r ve0 word (sp - 100)
a ss:ve0
mov ah, 08
xor cx, cx
stc
int 13
jc (ve0)
.
r ve1 := aao - 1
r vec := ve1 - ve0
s cs:0 l #8192 range ss:ve0 l vec
if not (src) then goto :error
r byte [srs:sro + vec - 1] := EB
goto :success
:patch_iniload_no_lba
@if not (vef) then r ysf |= C000
r ve0 word (sp - 100)
a ss:ve0
mov ah, 41
mov dl, byte [bp + 40]
mov bx, 55AA
stc
int 13
mov al, 0
jc (ve0)
.
r ve1 := aao - 1
r vec := ve1 - ve0
s cs:0 l #8192 range ss:ve0 l vec
if (src) then goto :patch_iniload_no_lba.success
a ss:ve0
mov ah, 41
pop dx
mov bx, 55AA
stc
int 13
mov al, 0
jc (ve0)
.
r ve1 := aao - 1
r vec := ve1 - ve0
s cs:0 l #8192 range ss:ve0 l vec
if not (src) then goto :error
:patch_iniload_no_lba.success
r byte [srs:sro + vec - 1] := EB
goto :success
:success
r vee := 0
r ysf &= ~C000
; Patched successfully
@goto :eof
:error
r vee := 1
r ysf &= ~C000
; Patch failed
@goto :eof