46 lines
825 B
NASM
46 lines
825 B
NASM
|
|
%if 0
|
|
|
|
UPX preparation stub for DOS/SYS format compressed FreeDOS kernel
|
|
Public Domain by C. Masloch, 2022
|
|
|
|
%endif
|
|
|
|
cpu 8086
|
|
org 0
|
|
|
|
bootloadunit: ; (byte of short jump re-used)
|
|
start:
|
|
jmp strict short entry
|
|
times (32 - 4) - ($ - $$) db 0
|
|
; area for CONFIG block
|
|
|
|
bootloadstack: ; (dword re-used for original ss:sp)
|
|
entry:
|
|
; common setup (copied from kernel.asm)
|
|
push cs
|
|
pop ds
|
|
xor di, di
|
|
mov byte [di + bootloadunit - $$], bl
|
|
push bp
|
|
mov word [di + bootloadstack - $$], sp
|
|
mov word [di + bootloadstack + 2 - $$], ss
|
|
|
|
; the UPX DOS/SYS depacker does not need a certain ss:sp
|
|
; however it appears to need cs == ds
|
|
|
|
mov ds, word [di + patchcsip + 2 - $$]
|
|
jmp 0:0
|
|
patchcsip: equ $ - 4
|
|
end:
|
|
|
|
times 0C0h - ($ - $$) nop
|
|
entry_common:
|
|
|
|
times 100h - ($ - $$) db 0
|
|
dw 0
|
|
dw 0
|
|
dw 0
|
|
dw patchcsip
|
|
dw end
|