2022-05-26 11:42:46 +02:00
|
|
|
|
|
|
|
%if 0
|
|
|
|
|
|
|
|
UPX preparation stub for DOS/EXE format compressed FreeDOS kernel
|
|
|
|
Public Domain by C. Masloch, 2022
|
|
|
|
|
|
|
|
%endif
|
|
|
|
|
2022-05-25 18:40:40 +02:00
|
|
|
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/EXE depacker needs a certain ss:sp
|
|
|
|
cli
|
|
|
|
mov ax, 0
|
|
|
|
patchstacksegment: equ $ - 2
|
|
|
|
mov ss, ax
|
|
|
|
mov sp, 0
|
|
|
|
patchstackpointer: equ $ - 2
|
|
|
|
sti
|
|
|
|
|
|
|
|
mov ax, -10h
|
|
|
|
patchpspsegment: equ $ - 2
|
|
|
|
mov ds, ax
|
|
|
|
mov es, ax
|
|
|
|
|
|
|
|
jmp 0:0
|
|
|
|
patchcsip: equ $ - 4
|
|
|
|
end:
|
|
|
|
|
|
|
|
times 0C0h - ($ - $$) nop
|
|
|
|
entry_common:
|
|
|
|
|
|
|
|
times 100h - ($ - $$) db 0
|
|
|
|
dw patchstackpointer
|
|
|
|
dw patchstacksegment
|
|
|
|
dw patchpspsegment
|
|
|
|
dw patchcsip
|
|
|
|
dw end
|