From: ec10@crux1.cit.cornell.edu (Erin Catto)
Subject: Source to Ant
Keywords: game schip
Organization: Cornell Information Technologies
Date:  7 Oct 92 01:31:03 GMT


Hi everyone,

You may recall my game Ant (available via ftp seq.uncwil.edu).
This is the Chipper source.  You may modify this, hack it or
whatever.  Any distribution should include my name (Erin Catto or
just Zoom).

This is actually a unique opportunity for people who enjoy Ant
to create their own levels.  The level data is all in a table
towards the bottom of the source.  By modifying this data you
can change the floor maps at will.  So have fun.

Note that no revisions of Ant were released.  I'm not a great
programmer, but SCHIP is a great programming language and Chipper
is a great compiler.

See Ya,

[Zoom]

;====================================================================
;=                           ANT v1.0                               =
;====================================================================
 
;******************
;* Register Usage *
;******************
 
;V0	=	working
;V1	=	working
;V2	=	working
;V3	=	temporary, spray x in main loop
;V4	=	temporary, spray y in main loop
;V5	=	temporary, spray flag in main loop
;V6	=	Ant x coordinate
;V7	=	Ant delta x and SCROLLFLAG
;V8	=	Ant y coordinate
;V9	=	Ant delta y
;VA	=	Ant jump flag
;VB	=	Landscape chunk length countdown
;VC	=	Ant animation pointer
;VD	=	Floor sprite delta I
;VE	=	Floor data list pointer (FLOORLOOP)
;		Points to data for leftedge of the screen.
 
 
;*******************
;* Named Constants *
;*******************
 
ANTHEIGHT	=	9
 
KEYRIGHT	=	#C
KEYLEFT		=	#3
KEYJUMP		=	#A
 
JUMPDEAD	=	0
JUMPREADY	=	1
JUMPING		=	2
 
JUMPUP	=	#FC
JUMPDOWN	=	4
SHORTUP	=	#FE
SHORTDOWN	=	2
JUMPHEIGHT	=	#EC		;#EC = -20
 
SCROLLFLAG	=	#CC
 
FZ		=	50		;floor elevations
F0		=	46		;  low
F1		=	42		;   ^
F2		=	38		;   |
F3		=	34		;   |
F4		=	30		;   |
F5		=	26		;   v
F6		=	22		;  high
 
RAIDFLAG	=	#FF		;RAID flag
PITFLAG	=	#FE		;PIT flag
SPRAYFLAG	=	#FD		;SPRAY flag
ROCKFLAG	=	#FC		;ROCK flag
SHOEFLAG	=	#FB		;SHOE flag
FACEFLAG	=	#FA		;FACE flag
MANFLAG	=	#F9		;MAN flag
NONE		=	0		;NONE flag
 
RIGHTEDGE	=	56
LEFTEDGE	=	0
LISTSTART	=	0
LISTEND	=	31
 
MAINDELAY	=	2
 
LIST1		=	0
LIST2		=	1
 
 
;***************
;* The Program *
;***************
 
TAG:		JP	BEGIN
		DA	'[ Ant v1.0 ]'
 
BEGIN:	DW	#00FF		;turn on extended (128 X 64)
		LD	V0, #FE
		LD	V1, LIST1
		LD	I, FPAR
		LD	[I], V1
		CALL	INITWORLD
		CALL	INITANT
		LD	V5, NONE
		LD	VA, JUMPREADY
		LD	VB, 0
		LD	VD, 0
		LD	VE, LISTSTART
 
MAIN:		CALL	MOVEANT1
		SE	VF, 0
		JP	KILLANT
 
		SNE	V5, SPRAYFLAG
		JP	PUSHSPRAY
 
SPRAYRETURN:	SNE	V7, SCROLLFLAG
		CALL	MOVEWORLD
 
		SNE	V1, SHOEFLAG		;make clean jump to special stages
		JP	SHOESTAGE		;no pending returns
		SNE	V1, ROCKFLAG		
		JP 	ROCKSTAGE
		SNE	V1, FACEFLAG
		JP	FACESTAGE
		SNE	V1, MANFLAG
		JP	MANSTAGE
 
		LD	V0, MAINDELAY
		SE	V7, SCROLLFLAG
		CALL	DELAY
 
		JP	MAIN
 
 
;**********************
;* Main World Control *
;**********************
 
INITWORLD:	LD	VE, LISTSTART
IWLP:		LD	I, FLOORLOOP
		ADD	I, VE
		LD	V0, F0
		LD	[I], V0
		ADD	V0, ANTHEIGHT
		LD	V1, 124
		LD	I, SODGROB
		DRW	V1, V0, 4
		LD	V0, 1			;BEEP argument
		CALL	BEEP
		LD	V0, 2
		CALL	DELAY
		SE	VE, LISTEND
		DW	#00FC			;Scroll left 4 pixels		
		ADD	VE, 1
		SE	VE, LISTEND + 1
		JP	IWLP
		LD	V0, 4
		LD	V1, 4
		LD	I, ARROWGROB
		DRW	V0, V1, 0
		RET
 
MOVEWORLD:	SNE	VB, 0
		CALL	NEWFLOOR
		ADD	VB, #FF		;step across landscape chunk
 
		LD	I, WPAR		;V0 gets current elevation
		LD	V1, [I]		;V1 gets obsticle flag
 
		LD	I, FLOORLOOP		;screen loop gets current elevation
		ADD	I, VE
		LD	[I], V0
		ADD	VE, 1			;scroll list with screen
		LD	V2, 31		;if VE = 32 then
		AND	VE, V2		;rollover to start of list
 
		SNE	V1, PITFLAG
		JP	PUSHPIT
		SNE	V1, RAIDFLAG
		JP	PUSHRAID
 
		ADD	V0, ANTHEIGHT
		LD	V2, 124		
		LD	I, SODGROB
		ADD	I, VD
		DRW	V2, V0, 4
		RET
 
PUSHPIT:	ADD	V0, ANTHEIGHT - 2
		LD	V1, 124
		LD	I, PITGROB
		DRW	V1, V0, 4
		RET
 
PUSHRAID:	LD	V1, 0
		SNE	VB, 2
		LD	V1, 1 * 8
		SNE	VB, 1
		LD	V1, 2 * 8
		SNE	VB, 0
		LD	V1, 3 * 8
		LD	I, RAIDGROB
		ADD	I, V1
 
		LD	V1, 124
		ADD	V0, 1
		DRW	V1, V0, 8
		ADD	V0, 8
		LD	I, SODGROB
		ADD	I, VD
		DRW	V1, V0, 4
		RET		
 
PUSHSPRAY:	SNE	V7, SCROLLFLAG
		ADD	V3, #FC		;account for scrolling of old sprite
		LD	I, SPRAYGROB
		DRW	V3, V4, 0
		SE	V3, 0
		ADD	V3, #FC		;beware not to go less than zero
		SE	V3, 0
		DRW	V3, V4, 0
		SNE	V3, 0
		LD	V5, NONE
		JP	SPRAYRETURN		;use a JP for speed
 
NEWFLOOR:	LD	I, FPAR		;V0 gets game data list counter
		LD	V1, [I]		;V1 gets the "which list" flag
		ADD	V0, 2
		SNE	V0, #FE
		CALL	NEXTLIST
		LD	[I], V0
		LD	I, FLOORDATA1	;load floor data
		SNE	V1, LIST2
		LD	I, FLOORDATA2
		ADD	I, V0
		LD	V1, [I]
 
		LD	I, WPAR		;store data for future
		LD	[I], V1		;reference
 
		LD	V2, #F0		;all special flags are > #F0
		SUBN	V2, V1		;V2 = V1 - V2
		SNE	VF, 0			;skip following tests if
		JP	JUSTSOD		;its normal floor
 
		SNE	V1, PITFLAG		;test the 2nd byte of data
		JP	INITPIT		;for an obsticle flag
		SNE	V1, RAIDFLAG
		JP	INITRAID
		SNE	V1, SPRAYFLAG
		JP	INITSPRAY
		JP	INITSPECIAL		;generic for special obsticles
 
JUSTSOD:	LD	VB, V1		;load floor length
		RET
 
NEXTLIST:	LD	V1, LIST2		;moves pointer to next list
		LD	V0, 0			;due to 8 bit limit of V registers
		LD	I, FPAR
		LD	[I], V1
		RET
 
INITPIT:	LD	VB, 12
		RET
 
INITRAID:	LD	VB, 4
		RET
 
INITSPRAY:	LD	VB, 1			;one sod chunk
		LD	V5, SPRAYFLAG	;set spray flag
		LD	V4, V0		;V0 has current elevation
		ADD	V4, #F9		;adjust for offset
		LD	V0, 112
		LD	I, MANGROB
		DRW	V0, V4, 0
		LD	V0, 4
		CALL	BEEP
		LD	V3, 96
		LD	I, SPRAYGROB
		DRW	V3, V4, 0
 
		LD	V0, 2
		CALL	BEEP
		LD	V0, 2
		CALL	DELAY
		LD	V0, 1
		CALL	BEEP
 
		LD	V0, 112		;man disappears
		LD	I, MANGROB
		DRW	V0, V4, 0
		RET
 
INITSPECIAL:	LD	VB, 1
		RET
 
;**********************************
;* Ant Behavior Control Rountines *
;**********************************
 
;these routines handle all details of the ant movement
 
 
INITANT:	LD	V6, 0			;X
		LD	V8, F0		;Y
		LD	VC, 0			;delta I
		LD	I, ANTGROB
		DRW	V6, V8, 0
		RET
 
;MOVEANT1 used in the main loop
 
MOVEANT1:	LD	V7, 0
 
		CALL	FALL
		CALL	JUMP
 
		LD	V2, VC		;store animation pointer
 
		LD	V0, KEYRIGHT
		SKNP	V0
		CALL	GORIGHT
 
		LD	V0, KEYLEFT
		SKNP	V0
		CALL	GOLEFT
 
		LD	V0, V6
		SE	V7, SCROLLFLAG
		ADD	V6, V7
 
		LD	V1, V8
		ADD	V8, V9
 
		LD	I, ANTGROB
		ADD	I, V2
		DRW	V0, V1, 0
		SNE	V7, SCROLLFLAG
		DW	#00FC			;Scroll left 4 pixels
		LD	I, ANTGROB
		ADD	I, VC
		DRW	V6, V8, 0
		RET
 
;MOVEANT2 used in the special obsticle stages
 
MOVEANT2:	LD	V7, 0
 
		CALL	FALL
		CALL	JUMP
 
		LD	V2, VC		;save ANTGROB pointer
 
		LD	V0, KEYRIGHT
		SKNP	V0
		CALL	GORIGHT
		SNE	V7, SCROLLFLAG	;make goright generic (void scroll)
		LD	V7, 4		
 
		LD	V0, KEYLEFT
		SKNP	V0
		CALL	GOLEFT
 
		LD	V0, V6
		ADD	V6, V7
		LD	V1, V8
		ADD	V8, V9
 
		LD	I, ANTGROB
		ADD	I, V2
		DRW	V0, V1, 0
		LD	I, ANTGROB
		ADD	I, VC
		DRW	V6, V8, 0
		RET
 
 
KILLANT:	LD	V1, 0
KALP:		DRW	V6, V8, 0
		LD	V0, 2
		CALL	BEEP
		LD	V0, 2
		CALL	DELAY
		ADD	V1, 1
		SE	V1, 7
		JP	KALP
		LD	V0, 80
		CALL	DELAY
		DW	#00FD			;exit, user flag 1 still clear
 
JUMP:		LD	V0, KEYJUMP
		SKP	V0
		JP	FALLTEST
 
		SNE	VA, JUMPDEAD
		RET
 
		SNE	VA, JUMPREADY
		CALL	SETJUMP
 
		LD	VA, JUMPING
		LD	V9, JUMPUP
		LD	I, JUMPELEV
		LD	V0, [I]
		SE	V8, V0
		RET
		LD	VA, JUMPDEAD
		LD	V9, SHORTUP
		RET
 
SETJUMP:	LD	V0, 2
		CALL	BEEP
		LD	V0, V8
                ADD	V0, JUMPHEIGHT
		LD	I, JUMPELEV
		LD	[I], V0
		RET
 
FALLTEST:	SNE	VA, JUMPING
		JP	KILLJUMP
		LD	V0, V6
		CALL	GETFLOOR
		SNE	V8, V0
		JP	CLEARJUMP
		LD	V0, V6
		ADD	V0, 12
		CALL	GETFLOOR
		SNE	V8, V0
		JP	CLEARJUMP
		RET
 
CLEARJUMP:	LD	VA, JUMPREADY
		RET
 
KILLJUMP:	LD	VA, JUMPDEAD
		LD	V9, SHORTUP
		RET
 
FALL:		SNE	VA, JUMPING
		RET
		LD	V0, JUMPDOWN
		SNE	V9, SHORTUP
		LD	V0, SHORTDOWN
		LD	V9, V0
 
		LD	V0, V6
		CALL	GETFLOOR
		SNE	V8, V0
		LD	V9, 0
 
		LD	V0, V6
		ADD	V0, 12
		CALL	GETFLOOR
		SNE	V8, V0
		LD	V9, 0
 
		SNE	V9, JUMPDOWN
		LD	VA, JUMPDEAD
		
		RET
 
;IN: V0 (X COORDINATE)
;OUT: V0, V1 (BOTH Y COORDINATE OF FLOOR AT X)
 
GETFLOOR:	SHR	V0			;V0 = x coordinate
		SHR	V0			;now V0 = V0(old)/4
		ADD	V0, VE
		LD	V1, 31
		AND	V0, V1		;loop to start of list
		LD	I, FLOORLOOP
		ADD	I, V0
		LD	V0, [I]
		LD	V1, V0		;V1 = floor elevation at x
		RET
 
GORIGHT:	LD	V0, 0
		SNE	VC, 0
		LD	V0, 32
		LD	VC, V0
 
		LD	V0, V6		;stop ant if moving towards
		ADD	V0, 16		;bottom of a wall
		CALL 	GETFLOOR
		SUB	V0, V8
		SNE	VF, 0
		RET
 
		LD	V7, 4
		SNE	V6, RIGHTEDGE
		LD	V7, SCROLLFLAG
		SNE	V1, V8
		JP	RGTCORNER
		RET
 
GOLEFT:		LD	V0, 64
		SNE	VC, 64
		LD	V0, 96
		LD	VC, V0
 
		SNE	V6, LEFTEDGE
		RET
 
		LD	V0, V6		;stop ant if moving towards
		ADD	V0, #FC		;bottom of wall
		CALL	GETFLOOR
		SUB	V0, V8
		SNE	VF, 0
		RET
 
		LD	V7, #FC
		SNE	V1, V8
		JP	LFTCORNER
		RET
 
LFTCORNER:	LD	V0, V6		;ensure ant is in the air
		CALL	GETFLOOR
		SUBN	V0, V8
		SNE	VF, 0
		LD	V9, JUMPUP
		RET
 
RGTCORNER:	LD	V0, V6		;ensure ant is in the air
		ADD	V0, 12
		CALL	GETFLOOR
		SUBN	V0, V8
		SNE	VF, 0
		LD	V9, JUMPUP
		RET
 
;********
;* Misc *
;********
 
BEEP:		LD	ST, V0
		SHL	V0
		JP	DELAY
 
DELAY:		LD	DT, V0
DLP:		LD	V0, DT
		SE	V0, 0
		JP	DLP
		RET
 
;******************************************************
;* Alternate Control Structures for Special Obsticles *
;******************************************************
 
;SHOESTAGE, ROCKSTAGE, and FACESTAGE require loops different
;from the main loop, primarily due the abscence of scrolling
;in these routines
 
SHOE1X		=	24
SHOESPACE		=	20
SHOETOP		=	9
SHOEBOT		=	37
 
SHOESTAGE:	CALL	SLIDEANT
		CALL	INITSHOE
CSLP:		CALL	MOVEANT2
		SE	VF, 0
		JP	KILLANT
		CALL	MOVESHOE
		SNE	V6, 128 - 16
		JP	ENDSTAGE
		JP	CSLP
 
SLIDEANT:	LD	V0, 1
		CALL	BEEP
		LD	I, ANTGROB
		ADD	I, VC
		DRW	V6, V8, 0
		ADD	V6, #FC
		DRW	V6, V8, 0
		SE	V6, 0
		JP	SLIDEANT
		RET
 
INITSHOE:	LD	V3, SHOETOP
		LD	V4, SHOEBOT
		LD	V5, 4
		LD	V0, SHOE1X
		LD	I, SHOEGROB
		DRW	V0, V3, 0
		ADD	V0, SHOESPACE
		DRW	V0, V4, 0
		ADD	V0, SHOESPACE
		DRW	V0, V3, 0
		ADD	V0, SHOESPACE
		DRW	V0, V4, 0
		RET
 
 
 
MOVESHOE:	SNE	V3, SHOETOP
		LD	V5, 4
		SNE	V3, SHOEBOT
		LD	V5, #FC
		LD	I, SHOEGROB
		LD	V0, SHOE1X
		LD	V1, V3
		ADD	V3, V5
		DRW	V0, V1, 0
		DRW	V0, V3, 0
		LD	V0, SHOE1X + 2 * SHOESPACE
		DRW	V0, V1, 0
		DRW	V0, V3, 0
		LD	V0, SHOE1X + SHOESPACE
		LD	V1, V4
		SUB	V4, V5
		DRW	V0, V1, 0
		DRW	V0, V4, 0
		LD	V0, SHOE1X + 3 * SHOESPACE
		DRW	V0, V1, 0
		DRW	V0, V4, 0
		RET
		
ENDSTAGE:	ADD	VD, 4		;switch to new floor sprite
ESLP:		DW	#00FC		;scroll left 4 pixels
		LD	I, FLOORLOOP
		ADD	I, VE
		LD	V0, F1
		LD	[I], V0
		ADD	V0, ANTHEIGHT
		LD	V1, 124
		LD	I, SODGROB
		ADD	I, VD
		DRW	V1, V0, 4
		LD	V0, 1		;BEEP argument
		CALL	BEEP
		LD	V0, 2
		CALL	DELAY
		ADD	VE, 1
		SNE	VE, LISTEND + 1
		LD	VE, LISTSTART
		ADD	V6, #FC
		SE	V6, 0
		JP	ESLP
		JP	MAIN
 
 
ROCKBOT		=	F1 + ANTHEIGHT - 16 - 2
ROCKTOP		=	ROCKBOT - 16
 
ROCKSTAGE:	CALL	SLIDEANT
		CALL	INITROCK
RSLP:		CALL	MOVEROCK
		CALL	MOVEANT2
		SE	VF, 0
		JP	KILLANT
		SNE	V6, 128 - 16
		JP	ENDSTAGE
		JP	RSLP
 
INITROCK:	LD	V0, 112			;x
		LD	V1, ROCKTOP - 2		;y
		LD	V2, SHORTUP			;delta y
		LD	V3, 0				;delta I
		LD	I, ROCKPAR
		LD	[I], V3
		LD	I, ROCKGROB
		DRW	V0, V1, 0
		RET
 
MOVEROCK:	LD	I, ROCKPAR
		LD	V3, [I]
		LD	V4, V2
		SNE	V2, SHORTDOWN
		LD	V4, SHORTUP
		SNE	V2, SHORTUP
		LD	V4, SHORTDOWN
		SNE	V1, ROCKTOP
		CALL	ROCKMAX
		SNE	V1, ROCKBOT
		CALL	ROCKMIN
		LD	V2, V4
		LD	V4, V3
		ADD	V3, 32
		SNE	V3, 32 * 4
		LD	V3, 0
		LD	I, ROCKGROB
		ADD	I, V4
		LD	V4, V1
		ADD	V1, V2
		LD	V5, V0
		ADD	V0, #FC
		DRW	V5, V4, 0
		LD	I, ROCKGROB
		ADD	I, V3
		SE	V5, 0
		DRW	V0, V1, 0
		LD	I, ROCKPAR
		LD	[I], V3
		SE	V5, 0
		RET
		JP	INITROCK
 
ROCKMAX:	LD	V4, JUMPDOWN
		SNE	V2, JUMPUP
		LD	V4, SHORTUP
		RET
 
ROCKMIN:	LD	V4, JUMPUP
		SNE	V2, JUMPDOWN
		LD	V4, SHORTDOWN
		SNE	V4, SHORTDOWN
		LD	ST, V4
		RET
 
FACESTAGE:	CALL	INITFACE
FSLP		CALL	MOVEFACE
		CALL	MOVEANT2
		SE	VF, 0
		JP	KILLANT
		SE	V6, 112
		JP	FSLP
		JP	ENDSTAGE
 
;V3 = face x
;V4 = face y
;V5 = variable sprite pointer for animation (delta I)
 
INITFACE:	LD	V3, 112
		LD	V4, F6 + ANTHEIGHT - 16
		LD	V5, 0
		LD	I, FACEGROB
		DRW	V3, V4, 0
		RET
 
MOVEFACE:	LD	V0, V3
		ADD	V0, 12
		CALL	GETFLOOR
		ADD	V1, #F9		; -7, adjust for sprite offset
		SE	V4, V1
		CALL	FACEDOWN
		LD	V0, V3
		ADD	V3, #FC		; -4, move left
		LD	I, FACEGROB
		ADD	I, V5
		ADD	V5, 32
		DRW	V0, V1, 0
		LD	I, FACEGROB
		ADD	I, V5
		SE	V0, 0
		DRW	V3, V4, 0
		SE	V0, 0
		RET
		JP	INITFACE
 
FACEDOWN:	LD	V1, V4
		ADD	V4, 4
		LD	V0, 2
		LD	ST, V0
		RET
 
;*******************
;* The Final Stage *
;*******************
 
;Register Usage
;==============
 
;V0	=	working
;V1	=	working
;V2	=	working
;V3	=	man x
;V4	=	man y
;V5	=	man delta I
;V6	=	Ant x coordinate
;V7	=	Ant delta x
;V8	=	Ant y coordinate
;V9	=	Ant delta y
;VA	=	Ant jump flag
;VB	=	man loop list counter (LOOPLIST)
;VC	=	Ant animation pointer
;VD	=	man action flag (flags defined below)
;VE	=	man action data list counter (MANLIST)
 
LLT	=	0	;loop left
LRT	=	2	;loop right
WLT	=	4	;slide left
WRT	=	6	;slide right
SPR	=	8	;spray
PAS	=	10	;pause
 
LOOPSTEPS	=	30	;# bytes in LOOPLIST
 
MANSTAGE:	CALL	SLIDEANT
		CALL	INITMAN
		LD	VE, 0
		CALL	SETNEXT
MSLP:		CALL	MOVEANT3
		SE	VF, 0
		JP	KILLANT
		SNE	V6, 112
		JP	WIN
		CALL	MOVEMAN
		LD	V0, 3
		CALL	DELAY
		JP	MSLP
 
MOVEMAN:	SNE	VD, LLT
		JP	LOOPLEFT
		SNE	VD, LRT
		JP	LOOPRIGHT
		SNE	VD, WLT
		JP	WALKLEFT
		SNE	VD, WRT
		JP	WALKRIGHT
		SNE	VD, SPR
		JP	PUSHSPRAY2
		JP	PAUSE
 
INITMAN:	LD	V3, X8
		LD	V4, Y1
		LD	V5, 0
		LD	I, MANGROB
		DRW	V3, V4, 0
		RET
 
SETNEXT:	LD	VB, 0
		LD	V5, 0
		LD	I, MANLIST
		ADD	I, VE
		LD	V0, [I]
		LD	VD, V0
		ADD	VE, 1
		SNE	VE, 20
		LD	VE, 0
		SNE	VD, SPR
		JP	INITSPRAY2
		RET
 
WALKRIGHT:	LD	V4, Y1
		LD	V2, V5
		ADD	V5, 32
		SNE	V5, 64
		LD	V5, 0
		LD	V0, V3
		ADD	V3, 4
		LD	I, MANRGT
		ADD	I, V2
		SNE	V0, X0
		LD	I, MANGROB
		DRW	V0, V4, 0
		LD	I, MANRGT
		ADD	I, V5
		SNE	V3, X8
		LD	I, MANGROB
		DRW	V3, V4, 0
		SE	V3, X8
		RET
		JP	SETNEXT
 
WALKLEFT:	LD	V4, Y1
		LD	V2, V5
		ADD	V5, 32
		SNE	V5, 64
		LD	V5, 0
		LD	V0, V3
		ADD	V3, #FC
		LD	I, MANLFT
		ADD	I, V2
		SNE	V0, X8
		LD	I, MANGROB
		DRW	V0, V4, 0
		LD	I, MANLFT
		ADD	I, V5
		SNE	V3, X0
		LD	I, MANGROB
		DRW	V3, V4, 0
		SE	V3, X0
		RET
		JP	SETNEXT
 
LOOPLEFT:	LD	I, LOOPLISTL
		ADD	I, VB
		LD	V2, [I]
		LD	I, MANGROB
		ADD	I, V5
		DRW	V3, V4, 0
		LD	I, MANGROB
		ADD	I, V2
		DRW	V0, V1, 0
		LD	V3, V0
		LD	V4, V1
		LD	V5, V2
		LD	V0, 1
		SNE	V5, M2
		CALL	BEEP
		ADD	VB, 3
		SE	VB, LOOPSTEPS
		RET
		JP	SETNEXT
 
LOOPRIGHT:	LD	I, LOOPLISTR
		ADD	I, VB
		LD	V2, [I]
		LD	I, MANGROB
		ADD	I, V5
		DRW	V3, V4, 0
		LD	I, MANGROB
		ADD	I, V2
		DRW	V0, V1, 0
		LD	V3, V0
		LD	V4, V1
		LD	V5, V2
		LD	V0, 1
		SNE	V5, M2
		CALL	BEEP
		ADD	VB, 3
		SE	VB, LOOPSTEPS
		RET
		JP	SETNEXT
 
INITSPRAY2:	LD	V5, V3
		ADD	V5, #F0
		LD	I, SPRAYGROB
		DRW	V5, V4, 0
		LD	V0, 1
		CALL	BEEP
		LD	V0, 1
		CALL	BEEP
		RET
 
		
PUSHSPRAY2:	LD	V0, V5
		ADD	V5, #FC
		LD	I, SPRAYGROB
		DRW	V0, V4, 0
		SE	V0, 0
		DRW	V5, V4, 0
		SE	V0, 0
		RET
		JP	SETNEXT
 
PAUSE:		ADD	V5, 1
		SE	V5, 6
		RET
		JP	SETNEXT
 
MOVEANT3:	LD	V7, 0
		CALL	FALL2
		CALL	JUMP2
		LD	V2, VC		;save ANTGROB pointer
		LD	V0, KEYRIGHT
		SKNP	V0
		CALL	GORIGHT2
		LD	V0, KEYLEFT
		SKNP	V0
		CALL	GOLEFT2
		LD	V0, V6
		ADD	V6, V7
		LD	V1, V8
		ADD	V8, V9
		LD	I, ANTGROB
		ADD	I, V2
		DRW	V0, V1, 0
		LD	I, ANTGROB
		ADD	I, VC
		DRW	V6, V8, 0
		RET
 
JUMP2:		LD	V0, KEYJUMP
		SKP	V0
		JP	FALLTEST2
		SNE	VA, JUMPDEAD
		RET
		LD	V0, 2
		SNE	VA, JUMPREADY
		CALL	BEEP
		LD	VA, JUMPING
		LD	V9, JUMPUP
		SE	V8, F0 - 20
		RET
		LD	VA, JUMPDEAD
		LD	V9, SHORTUP
		RET
 
FALLTEST2:	SNE	VA, JUMPING
		JP	KILLJUMP2
		SNE	V8, F0
		JP	CLEARJUMP2
		RET
 
CLEARJUMP2:	LD	VA, JUMPREADY
		RET
 
KILLJUMP2:	LD	VA, JUMPDEAD
		LD	V9, SHORTUP
		RET
 
FALL2:		SNE	VA, JUMPING
		RET
		LD	V0, JUMPDOWN
		SNE	V9, SHORTUP
		LD	V0, SHORTDOWN
		LD	V9, V0
		SNE	V8, F0
		LD	V9, 0
		SNE	V9, JUMPDOWN
		LD	VA, JUMPDEAD
		RET
 
GORIGHT2:	LD	V0, 0
		SNE	VC, 0
		LD	V0, 32
		LD	VC, V0
		LD	V7, 4
		RET
 
GOLEFT2:	LD	V0, 64
		SNE	VC, 64
		LD	V0, 96
		LD	VC, V0
		SNE	V6, LEFTEDGE
		RET
		LD	V7, #FC
		RET
 
WIN:		LD	V0, 1
		DW	#F075
		LD	V0, 2
		CALL	BEEP
		CALL	DELAY
		LD	V0, 4
		CALL	BEEP
		CALL	DELAY
		LD	V0, 8
		CALL	BEEP
		LD	V0, 30
		CALL	DELAY
		CLS
		DW	#00FD
 
 
;**********************************************
;* Data Tables and Runtime Storage Allocation *
;**********************************************
 
;FLOORLOOP maps the floor elevations on the current screen
;register VE cycles across this list to keep things straight
;subroutine GETFLOOR is the main user of FLOORLOOP
;sprite movement resolution is 4 pixels so 128/4 = 32 bytes
 
FLOORLOOP:	DB	0, 0, 0, 0, 0, 0, 0, 0	;holds floor elevations
		DB	0, 0, 0, 0, 0, 0, 0, 0	;for 32 * 4 pixel
		DB	0, 0, 0, 0, 0, 0, 0, 0	;segments = 128 pixels
		DB	0, 0, 0, 0, 0, 0, 0, 0
 
;FLOORDATA tables hold a maximum of 127 used entries = 254 bytes
;the first byte of the instruction byte contains the floor elevation
;the second byte contains the horizontal length or an object flag
;which is handled in the routine NEWFLOOR
 
RDB	=	RAIDFLAG	;abreviate flags for data list
PTB	=	PITFLAG
SPB	=	SPRAYFLAG
RKB	=	ROCKFLAG
SHB	=	SHOEFLAG
FCB	=	FACEFLAG
MNB	=	MANFLAG
 
FLOORDATA1:	DB	F1, 4,   F2, 4,   F3, 4,   F4, 4,   F5, 4
		DB	F6, 8,   F0, PTB, F6, 8,   F5, 4,   F4, 4
		DB	F3, 4,   F2, 4,   F1, 16,  F1, SPB, F3, 3
		DB	F3, RDB, F3, 8,   F2, 16,  F0, PTB, F2, 4
		DB	F1, 4,   F1, RDB, F1, 6,   F1, RDB, F1, 6
		DB	F2, 10,  F2, 6,   F0, PTB, F2, 4,   F3, 4
		DB	F4, 3,   F4, SPB, F5, 4,   F6, 8,   F5, RDB
		DB	FZ, PTB, F1, 6,   F1, 28,  F2, 4,   F2, RKB
		DB	F4, 4,   F0, PTB, F5, 5,   F6, 4,   F0, PTB
		DB	F2, 8,   F2, RDB, F2, RDB, F5, 4,   F6, 8
		DB	F6, SPB, F0, 14,  F6, 8,   F0, PTB, F6, 4
		DB	F0, PTB, F6, 3,   F0, PTB, F6, 4,   F6, SPB
		DB	F0, PTB, F2, 8,   F0, 6,   F1, 4,   F2, 4
		DB	F3, 4,   F4, 4,   F5, 4,   F6, 4,   FZ, RDB
		DB	FZ, RDB, FZ, RDB, FZ, RDB, F0, 8,   F4, 4
		DB	F3, 4,   F2, 4,   F1, 4,   FZ, PTB, F0, 4
		DB	F0, SPB, F1, 4,   F6, 3,   F1, 28,  F2, 4
		DB	F2, SHB, FZ, PTB, F1, 4,   F2, 4,   F3, 4
		DB	F4, 4,   F5, 4,   F6, 4,   F5, RDB, F3, RDB
		DB	F1, RDB, F2, 4,   F4, 4,   FZ, PTB, F6, 3
		DB	FZ, PTB, F4, 3,   FZ, PTB, F6, 3,   F6, SPB
		DB	FZ, PTB, F4, 3,   FZ, PTB, F6, 3,   F0, RDB
		DB	F0, RDB, F0, RDB, F0, 8,   F1, 4,   F6, 6
		DB	F0, 4,   F1, 4,   F2, 4,   F3, 4,   F4, 4
		DB	F5, 4,   F6, 8,   F6, FCB, F0, 4,   F0, SPB
		DB	F3, 3,   F4, 4
 
FLOORDATA2:	DB	F0, 2,   F2, 2,   F6, 3,   F5, 2,   F2, 5
		DB	F2, RDB, F0, 6,   F5, 3,   F4, 3,   F3, 6
		DB	F2, 4,   F2, SPB, F6, 6,   FZ, PTB, FZ, RDB
		DB	F0, 6,   F5, 3,   F6, 3,   F4, 2,   F3, 2
		DB	F2, 6,   F5, 4,   F4, 6,   F4, SPB, FZ, PTB
		DB	F2, 4,   F6, 3,   F3, 3,   F5, 5,   F5, RDB
		DB	F6, 3,   F6, SPB, F0, 6,   F4, 2,   F5, 2
		DB	F6, 4,   FZ, PTB, F4, 4,   F4, SPB, F0, 8
		DB	F0, RDB, F1, 6,   F6, 4,   F5, 1,   F6, 1
		DB	F5, 1,   F6, 1,   F5, 1,   F6, 1,   F5, 1
		DB	F6, 1,   F5, 1,   F6, 1,   F5, 1,   F6, 1
		DB	F5, 1,   F6, 1,   F5, 1,   F6, 1,   F5, 1
		DB	F6, 1,   F5, 1,   F6, 1,   F5, 1,   F6, 1
		DB	F5, 1,   F6, 4,   F5, 4,   F5, SPB, F6, 4
		DB	FZ, PTB, FZ, RDB, F0, 5,   F1, 2,   F2, 3
		DB	F3, 2,   F4, 3,   F5, 2,   F6, 3,   F5, 2
		DB	F4, RDB, F0, 6,   F3, 2,   F6, 8,   F6, SPB
		DB	F0, 6,   F6, 3,   F0, 6,   F6, 3,   F0, 6
		DB	F6, 3,   F0, 6,   F6, 3,   F6, RDB, F6, 2
		DB	F0, 6,   F6, 3,   F4, PTB, F5, 5,   F4, 4
		DB	F3, 3,   F2, 2,   F1, 1,   F0, 5,   F0, RDB
		DB	F1, 4,   F0, 4,   F0, RDB, F3, 4,   F0, 5
		DB	F1, RDB, F0, 6,   F0, RDB, F0, 5,   F0, RDB
		DB	F0, 5,   F0, RDB, F1, 4,   FZ, PTB, F0, 3
		DB	F0, SPB, F0, RDB, F5, 4,   F4, PTB, F5, 4
		DB	F0, 34,  F0, MNB
 
JUMPELEV:	DB	0, 0
FPAR:		DB	#FE, LIST1	;FLOORDATA counter and nextlist flag
WPAR:		DB	0, 0		;current elevation and obsticle flag
ROCKPAR:	DB	0, 0, 0, 0
 
M1	=	0	;for delta I (animation: man1, man2 ...)
M2	=	32
M3	=	64
M4	=	96
M5	=	128
M6	=	160
M7	=	192
M8	=	224
 
X0	=	72	;scope of man x coordinates
X1	=	76
X2	=	80
X3	=	84
X4	=	88
X5	=	92
X6	=	96
X7	=	100
X8	=	104
 
Y1	=	F0 + ANTHEIGHT - 16	;scope of man y coordinates
Y2	=	Y1 - 10
Y3	=	Y2 - 8
Y4	=	Y3 - 6
Y5	=	Y3 - 4
 
;LOOPLIST contains x, y, and delta I data for the man's somersault
;size = 30 bytes
 
LOOPLISTL:	DB	X8, Y1, M2, X7, Y2, M3, X6, Y3, M4, X5, Y4, M5
		DB	X4, Y5, M6, X3, Y4, M7, X2, Y3, M8, X1, Y2, M3
		DB	X0, Y1, M2, X0, Y1, M1
 
LOOPLISTR:	DB	X0, Y1, M2, X1, Y2, M3, X2, Y3, M8, X3, Y4, M7
		DB	X4, Y5, M6, X5, Y4, M5, X6, Y3, M4, X7, Y2, M3
		DB	X8, Y1, M2, X8, Y1, M1
 
 
;MANLIST provides instructions for the type of motion the man will make
;This approach removes the need for randomization
;size = 20 bytes
 
MANLIST:	DB	LLT, PAS, SPR, WRT, WLT, SPR, LRT, PAS, SPR, LLT
		DB	WRT, SPR, PAS, LLT, LRT, SPR, WLT, LRT, PAS, SPR
 
;****************
;* The Bit Maps *
;****************
 
ANTGROB:	DB	$00000000, $00010001
		DB	$00000000, $00001010
		DB	$01111000, $00001110
		DB	$11011101, $11011011
		DB	$10111111, $11111111
		DB	$11111111, $11101110
		DB	$01111010, $11100000
		DB	$10100101, $01010000
		DB	$10100101, $01010000
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0
 
		DB	$00000000, $00010001
		DB	$00000000, $00001010
		DB	$01111000, $00001110
		DB	$11011101, $11011011
		DB	$10111111, $11111111
		DB	$11111111, $11101110
		DB	$00111001, $11110000
		DB	$01010010, $10101000
		DB	$01010010, $10101000
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0
 
 
		DB	$10001000, $00000000
		DB	$01010000, $00000000
		DB	$01110000, $00011110
		DB	$11011011, $10111011
		DB	$11111111, $11111101
		DB	$01110111, $11111111
		DB	$00000111, $01011110
		DB	$00001010, $10100101
		DB	$00001010, $10100101
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0
 
		DB	$10001000, $00000000
		DB	$01010000, $00000000
		DB	$01110000, $00011110
		DB	$11011011, $10111011
		DB	$11111111, $11111101
		DB	$01110111, $11111111
		DB	$00001111, $10011100
		DB	$00010101, $01001010
		DB	$00010101, $01001010
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0, $0, $0, $0, $0
		DB	$0, $0
 
SODGROB:	DB	$11110000, $00000000
		DB	$11110000, $01010000
 
		DB	$11100000, $10110000
		DB	$11100000, $10110000
 
		DB	$11110000, $00100000
		DB	$10000000, $11110000
 
		DB	$11110000, $10010000
		DB	$10010000, $11110000
 
ARROWGROB:	DB	$00000000, $10000000
		DB	$00000000, $11000000
		DB	$00000000, $11100000
		DB	$00000000, $11110000
		DB	$11111111, $11111000
		DB	$11111111, $11111100
		DB	$11111111, $11111110
		DB	$11111111, $11111111
		DB	$11111111, $11111110
		DB	$11111111, $11111100
		DB	$11111111, $11111000
		DB	$00000000, $11110000
		DB	$00000000, $11100000
		DB	$00000000, $11000000
		DB	$00000000, $10000000
		DB	$00000000, $00000000
 
RAIDGROB:	DB	$11110000, $10000000, $10110000, $10100000
		DB	$10110000, $10100000, $10000000, $10000000
 
		DB	$11110000, $00000000, $00010000, $10100000
		DB	$00110000, $10100000, $00000000, $00000000 
 
		DB	$11110000, $00000000, $00100000, $10100000
		DB	$10100000, $10100000, $00000000, $00000000
 
		DB	$11110000, $00010000, $11010000, $10110000
		DB	$10110000, $11010000, $00010000, $00010000
 
PITGROB:	DB	$00100000, $00110000, $01110000, $11110000
 
SHOEGROB:	DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$00000000, $00011111
		DB	$00000000, $00100001
		DB	$00000000, $00110001
		DB	$00000000, $11000001
		DB	$00000011, $00101101
		DB	$01111100, $10001101
		DB	$10000010, $00000001
		DB	$11111111, $11111111
		DB	$01111111, $11111111
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
 
ROCKGROB:	DB	$00011001, $11000000
		DB	$00100110, $00100000
		DB	$01000000, $00010000
		DB	$10000000, $00001000
		DB	$10000001, $00001000
		DB	$01000000, $10001000
		DB	$00100000, $01000100
		DB	$00100000, $01000010
		DB	$01000000, $01000010
		DB	$10000000, $10000010
		DB	$10000000, $00000010
		DB	$01000000, $00001100
		DB	$00100000, $01110000
		DB	$00010000, $10000000
		DB	$00001111, $00000000
		DB	$00000000, $00000000
 
		DB	$00000000, $00000000
		DB	$00000001, $11100000
		DB	$00000010, $00010000
		DB	$00011100, $00010000
		DB	$00100000, $00001000
		DB	$01000000, $00001000
		DB	$10000011, $10001000
		DB	$10000100, $01000100
		DB	$10001000, $00000010
		DB	$01000000, $00000010
		DB	$01000000, $00000010
		DB	$10000000, $00000010
		DB	$10000000, $00000100
		DB	$01000011, $00001000
		DB	$00100100, $10010000
		DB	$00011000, $01100000
 
		DB	$00000000, $00000000
		DB	$00000000, $11110000
		DB	$00000001, $00001000
		DB	$00001110, $00000100
		DB	$00110000, $00000010
		DB	$01000000, $00000001
		DB	$01000001, $00000001
		DB	$01000010, $00000010
		DB	$01000010, $00000100
		DB	$00100010, $00000100
		DB	$00010001, $00000010
		DB	$00010000, $10000001
		DB	$00010000, $00000001
		DB	$00001000, $00000010
		DB	$00000100, $01100100
		DB	$00000011, $10011000
 
		DB	$00000110, $00011000
		DB	$00001001, $00100100
		DB	$00010000, $11000010
		DB	$00100000, $00000001
		DB	$01000000, $00000001
		DB	$01000000, $00000010
		DB	$01000000, $00000010
		DB	$01000000, $00010001
		DB	$00100010, $00100001
		DB	$00010001, $11000001
		DB	$00010000, $00000010
		DB	$00010000, $00000100
		DB	$00001000, $00111000
		DB	$00001000, $01000000
		DB	$00000111, $10000000
		DB	$00000000, $00000000
 
MANGROB:	DB	$00000001, $11110000	;1
		DB	$00000010, $00001000
		DB	$00000010, $10001000
		DB	$01110110, $00001000
		DB	$11110010, $00001000
		DB	$01011001, $11110000
		DB	$01010100, $01000000
		DB	$01010011, $11000000
		DB	$01110000, $01100000
		DB	$00000000, $01010000
		DB	$00000000, $01001000
		DB	$00000000, $10100100
		DB	$00000001, $00100000
		DB	$00001010, $00010000
		DB	$00000100, $00001000
		DB	$00000000, $00010000
 
		DB	$00000000, $00000000	;2
		DB	$00000000, $00000000
		DB	$00000011, $11100000
		DB	$00000100, $00010000
		DB	$00000101, $00010000
		DB	$00001100, $00010000
		DB	$00000100, $00010000
		DB	$00111011, $11100000
		DB	$01111000, $10000000
		DB	$00101111, $11000000
		DB	$00101000, $10100000
		DB	$00101000, $10010000
		DB	$00111011, $10010000
		DB	$00000010, $10000000
		DB	$00000010, $11100000
		DB	$00000110, $00100000
 
		DB	$00000001, $11110000	;3
		DB	$00000010, $00001000
		DB	$00000010, $10001000
		DB	$01110110, $00001000
		DB	$11110010, $00001000
		DB	$01011001, $11110010
		DB	$01010100, $01000100
		DB	$01010011, $11111000
		DB	$01110000, $01000000
		DB	$00000000, $01000000
		DB	$00000000, $01000000
		DB	$00000000, $10100000
		DB	$00000001, $00010000
		DB	$00001010, $00001000
		DB	$00000100, $00000100
		DB	$00000000, $00001000
 
		DB	$00000100, $00000000	;4
		DB	$00001010, $00000000
		DB	$00010001, $00100000
		DB	$00100000, $10100000
		DB	$01001001, $00100000
		DB	$00100010, $01000000
		DB	$00010101, $10000000
		DB	$00011001, $10000000
		DB	$01000010, $01000000
		DB	$11111100, $00100000
		DB	$01010000, $00011111
		DB	$10101000, $00010001
		DB	$00010100, $00010000
		DB	$00001000, $00010000
		DB	$00000000, $00110000
		DB	$00000000, $00000000
 
		DB	$00000000, $00000000	;5
		DB	$00000100, $00000000
		DB	$00000010, $00000010
		DB	$01111001, $00000101
		DB	$10000101, $00001000
		DB	$10000101, $00010000
		DB	$10000111, $11100000
		DB	$10100101, $00010000
		DB	$10000101, $00001000
		DB	$01111001, $00000100
		DB	$00010010, $00000010
		DB	$00000100, $00000100
		DB	$00011111, $10000000
		DB	$00011000, $10000000
		DB	$00011111, $10000000
		DB	$00001000, $00000000
 
		DB	$00010000, $00000000	;6
		DB	$00100000, $00100000
		DB	$00010000, $01010000
		DB	$00001000, $10000000
		DB	$00000101, $00000000
		DB	$00000010, $00000000
		DB	$00000010, $00000000
		DB	$00000010, $00001110
		DB	$00011111, $11001010
		DB	$00100010, $00101010
		DB	$01001111, $10011010
		DB	$00010000, $01001111
		DB	$00010000, $01101110
		DB	$00010001, $01000000
		DB	$00010000, $01000000
		DB	$00001111, $10000000
 
		DB	$00000000, $00010000	;7
		DB	$00000001, $11111000
		DB	$00000001, $00011000
		DB	$00000001, $11111000
		DB	$00100000, $00100000
		DB	$01000000, $01001000
		DB	$00100000, $10011110
		DB	$00010000, $10100001
		DB	$00001000, $10100101
		DB	$00000111, $11100001
		DB	$00001000, $10100001
		DB	$00010000, $10100001
		DB	$10100000, $10011110
		DB	$01000000, $01000000
		DB	$00000000, $00100000
		DB	$00000000, $00000000
 
		DB	$00010100, $00000000	;8
		DB	$00001110, $00100000
		DB	$00010100, $01010000
		DB	$00101101, $10001000
		DB	$01010101, $00100100
		DB	$00100100, $10000010
		DB	$00000010, $01000100
		DB	$00000001, $10101000
		DB	$00000001, $10010000
		DB	$00000010, $01000000
		DB	$10000100, $00111000
		DB	$11111000, $00000000
		DB	$00001000, $00000000
		DB	$00001000, $00000000
		DB	$00001000, $00000000
		DB	$00011000, $00000000
 
MANRGT:	DB	$00001111, $10000000
		DB	$00010000, $01000000
		DB	$00010001, $01000000
		DB	$00010000, $01101110
		DB	$00010000, $01001111
		DB	$00001111, $10011010
		DB	$00000010, $00101010
		DB	$00000111, $11001010
		DB	$00001010, $00001110
		DB	$00010010, $00000000
		DB	$00010010, $00000000
		DB	$00000101, $00000000
		DB	$00001000, $10000000
		DB	$00010000, $01010000
		DB	$00100000, $00100000
		DB	$00010000, $00000000
 
		DB	$00001111, $10000000
		DB	$00010000, $01000000
		DB	$00010001, $01000000
		DB	$00010000, $01101110
		DB	$00010000, $01001111
		DB	$00001111, $10011010
		DB	$00000010, $00101010
		DB	$00000111, $11001010
		DB	$00000110, $00001110
		DB	$00000110, $00000000
		DB	$00000011, $00000000
		DB	$00000010, $00000000
		DB	$00000010, $00000000
		DB	$00000110, $00000000
		DB	$00001010, $00000000
		DB	$00000111, $00000000
 
MANLFT:	DB	$00000001, $11110000
		DB	$00000010, $00001000
		DB	$00000010, $10001000
		DB	$01110110, $00001000
		DB	$11110010, $00001000
		DB	$01011001, $11110000
		DB	$01010100, $01000000
		DB	$01010011, $11100000
		DB	$01110000, $01010000
		DB	$00000000, $01001000
		DB	$00000000, $01001000
		DB	$00000000, $10100000
		DB	$00000001, $00010000
		DB	$00001010, $00001000
		DB	$00000100, $00000100
		DB	$00000000, $00001000
 
		DB	$00000001, $11110000
		DB	$00000010, $00001000
		DB	$00000010, $10001000
		DB	$01110110, $00001000
		DB	$11110010, $00001000
		DB	$01011001, $11110000
		DB	$01010100, $01000000
		DB	$01010011, $11100000
		DB	$01110000, $01100000
		DB	$00000000, $01100000
		DB	$00000000, $11000000
		DB	$00000000, $01000000
		DB	$00000000, $01000000
		DB	$00000000, $01100000
		DB	$00000000, $01010000
		DB	$00000000, $11100000
 
SPRAYGROB:	DB	$00111100, $00000000
		DB	$01101011, $00000000
		DB	$11010101, $01000000
		DB	$10101010, $10101000
		DB	$11010101, $01010101
		DB	$10101010, $10101000
		DB	$11010101, $01000000
		DB	$01101011, $00000000
		DB	$00111100, $00000000
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
		DB	$0, $0
 
FACEGROB:	DB	$00000000, $00000000		;1
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000000, $00000100
		DB	$01001100, $01100100
		DB	$10011110, $11110010
		DB	$10010110, $10110010
		DB	$10001100, $01100010
		DB	$10000000, $00000010
		DB	$10000000, $00000010
		DB	$01000011, $10000100
		DB	$01000100, $01000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;2
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000000, $11000100
		DB	$01000001, $11100100
		DB	$10000001, $10100010
		DB	$10001100, $11000010
		DB	$10011110, $00000010
		DB	$10011010, $00011010
		DB	$10001100, $00100010
		DB	$01000000, $01000100
		DB	$01000000, $10000100
		DB	$00100000, $10001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;3
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000110, $00000100
		DB	$01001111, $00000100
		DB	$10001101, $00010010
		DB	$10000110, $00100010
		DB	$10000000, $00100010
		DB	$10000110, $00100010
		DB	$10001111, $00010010
		DB	$01001101, $00000100
		DB	$01000110, $00000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;4
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $10001000
		DB	$01000000, $10000100
		DB	$01001100, $01000100
		DB	$10011010, $00100010
		DB	$10011110, $00011010
		DB	$10001100, $00000010
		DB	$10000001, $10000010
		DB	$10000011, $01000010
		DB	$01000011, $11000100
		DB	$01000001, $10000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;5
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000100, $01000100
		DB	$01000011, $10000100
		DB	$10000000, $00000010
		DB	$10000000, $00000010
		DB	$10001100, $01100010
		DB	$10011010, $11010010
		DB	$10011110, $11110010
		DB	$01001100, $01100100
		DB	$01000000, $00000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;6
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100010, $00001000
		DB	$01000010, $00000100
		DB	$01000100, $01100100
		DB	$10001000, $10110010
		DB	$10110000, $11110010
		DB	$10000000, $01100010
		DB	$10000011, $00000010
		DB	$10000101, $10000010
		DB	$01000111, $10000100
		DB	$01000011, $00000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;7
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000000, $11000100
		DB	$01000001, $01100100
		DB	$10010001, $11100010
		DB	$10001000, $11000010
		DB	$10001000, $00000010
		DB	$10001000, $11000010
		DB	$10010001, $01100010
		DB	$01000001, $11100100
		DB	$01000000, $11000100
		DB	$00100000, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000
 
		DB	$00000000, $00000000		;8
		DB	$00000111, $11000000
		DB	$00011000, $00110000
		DB	$00100000, $00001000
		DB	$01000011, $00000100
		DB	$01000111, $10000100
		DB	$10000101, $10000010
		DB	$10000011, $00000010
		DB	$10000000, $01100010
		DB	$10110000, $11110010
		DB	$10001000, $10110010
		DB	$01000100, $01100100
		DB	$01000010, $00000100
		DB	$00100010, $00001000
		DB	$00011000, $00110000
		DB	$00000111, $11000000

From: akcs.mage@hpcvbbs.cv.hp.com (William H. Blohm)
Date: Wed, 30 Sep 1992 18:40:02 GMT
Subject: Re: Virus?
Message-ID: <2ac9f3b8.1791.5comp.sys.hp48.1@hpcvbbs.cv.hp.com>