*RASTER GRAPHICS -GR.8 EXAMPLE - WITH MUSIC- JEFF STANTON
	ORG	$4000
*ZERO PAGE EQUATES
SHPL	EQU	$F0
SHPH	EQU	$F1
HIRESL	EQU	$F2
HIRESH	EQU	$F3
SL	EQU	$F4
SH	EQU	$F5
*OTHER EQUATES
SCREEN	EQU	$6000	;SCREEN IS ACTUALLY OFFSET 496 BYTES @ $61FO
NDLIST	EQU	$6000	;ADR OF DISPLAY LIST
STICK	EQU	$278
COLOR1	EQU	$2C5
COLOR2	EQU	$2C6
AUDC1	EQU	$D201
AUDF1	EQU	$D200
NOTEL	EQU	$F6
NOTEH	EQU	$F7
SETVBK	EQU	$E45C
XITVBK	EQU	$E462
*LINE LOOKUP TABLE - LO BYTE STARTS AT $4000
YVERTL	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DB	$F0,$18,$40,$68,$90,$B8,$E0,$08
	DB	$30,$58,$80,$A8,$D0,$F8,$20,$48
	DB	$70,$98,$C0,$E8,$10,$38,$60,$88
	DB	$B0,$D8,$00,$28,$50,$78,$A0,$C8
	DS	$40
*LINE L00KUP TABLE - HI BYTE STARTS AT $4100
YVERTH	DB	$01,$02,$02,$02,$02,$02,$02,$03
	DB	$03,$03,$03,$03,$03,$03,$04,$04
	DB	$04,$04,$04,$04,$05,$05,$05,$05
	DB	$05,$05,$06,$06,$06,$06,$06,$06
	DB	$06,$07,$07,$07,$07,$07,$07,$08
	DB	$08,$08,$08,$08,$08,$08,$09,$09
	DB	$09,$09,$09,$09,$0A,$0A,$0A,$0A
	DB	$0A,$0A,$0B,$0B,$0B,$0B,$0B,$0B
	DB	$0B,$0C,$0C,$0C,$0C,$0C,$0C,$0D
	DB	$0D,$0D,$0D,$0D,$0D,$0D,$0E,$0E
	DB	$0E,$0E,$0E,$0E,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$10,$10,$10,$10,$10,$10
	DB	$10,$11,$11,$11,$11,$11,$11,$12
	DB	$12,$12,$12,$12,$12,$12,$13,$13
	DB	$13,$13,$13,$13,$14,$14,$14,$14
	DB	$14,$14,$15,$15,$15,$15,$15,$15
	DB	$15,$16,$16,$16,$16,$16,$16,$17
	DB	$17,$17,$17,$17,$17,$17,$18,$18
	DB	$18,$18,$18,$18,$19,$19,$19,$19
	DB	$19,$19,$1A,$1A,$1A,$1A,$1A,$1A
	DB	$1A,$1B,$1B,$1B,$1B,$1B,$1B,$1C
	DB	$1C,$1C,$1C,$1C,$1C,$1C,$1D,$1D
	DB	$1D,$1D,$1D,$1D,$1E,$1E,$1E,$1E
	DB	$1E,$1E,$1F,$1F,$1F,$1F,$1F,$1F
	DS	$40
*DISPLAY LIST STARTS AT $4200
DLIST	DB	$70,$70,$70,$4F,$F0,$61,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$4F
	DB	$00,$70,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
	DB	$0F,$0F,$0F,$0F,$0F,$0F,$0F,$41
	DB	$00,$60
	DS	$36
*HORIZONTAL OFFSET TABLE - START AT $4300
*THIS POINTS TO PROPER OFFSET SHAPE FOR EACH X POS (0-159)
XOFF	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
	DB	$00,$01,$02,$03,$00,$01,$02,$03
*SHPLO CONTAINS LO ORDER BYTE ADDRESS OF OUR 4 SHAPES
SHPLO	DB	$00,$17,$2E,$45
*SHPHI CONTAINS HI ORDER BYTE ADDRESS OF OUR 4 SHAPES
SHPHI	DB	$44,$45,$46,$47
	DS	$58
*SHAPES MUST BEGIN AT $4400
*SHAPE0
SHAPES	DB	$02,$AA,$AA,$AA,$AA,$AA,$80,$00,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$A8,$00,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$00,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$AA,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$AA,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$00,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$A8,$00,$00
	DB	$00,$00,$01,$55,$40,$00,$00,$00,$00
	DB	$00,$03,$81,$55,$40,$00,$00,$00,$00
	DB	$00,$03,$80,$55,$00,$00,$00,$00,$00
	DB	$00,$01,$00,$15,$00,$00,$00,$00,$00
	DB	$00,$07,$80,$18,$00,$00,$00,$00,$00
	DB	$00,$01,$80,$18,$00,$00,$00,$00,$00
	DB	$40,$07,$AA,$8A,$80,$00,$C0,$A0,$00
	DB	$50,$1F,$02,$AA,$80,$00,$C2,$A8,$00
	DB	$50,$1C,$00,$AA,$80,$00,$E2,$AB,$00
	DB	$54,$00,$00,$0A,$80,$00,$EA,$AB,$00
	DB	$55,$07,$FF,$FF,$FF,$FD,$EA,$AB,$00
	DB	$55,$0F,$FF,$FF,$FF,$E5,$E2,$AB,$00
	DB	$55,$5F,$FF,$FF,$FF,$D4,$02,$A8,$00
	DB	$55,$40,$00,$18,$00,$10,$00,$A0,$00
	DB	$50,$50,$00,$18,$00,$50,$00,$00,$00
	DB	$50,$10,$00,$18,$00,$40,$00,$00,$00
	DB	$40,$14,$00,$18,$01,$40,$00,$00,$00
	DB	$00,$05,$00,$18,$01,$00,$00,$00,$00
	DB	$00,$05,$40,$54,$05,$00,$00,$00,$00
	DB	$00,$01,$55,$55,$54,$00,$00,$00,$00
	DB	$00,$00,$55,$55,$54,$00,$00,$00,$00
	DB	$00,$00,$15,$01,$50,$00,$00,$00,$00
*SHAPE #1 SHIFTED RT 2 PIXELS
	DB	$00,$AA,$AA,$AA,$AA,$AA,$A0,$00,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$00,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$2A,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$00,$00
	DB	$00,$00,$00,$55,$50,$00,$00,$00,$00
	DB	$00,$00,$E0,$55,$50,$00,$00,$00,$00
	DB	$00,$00,$E0,$15,$40,$00,$00,$00,$00
	DB	$00,$00,$40,$05,$40,$00,$00,$00,$00
	DB	$00,$01,$E0,$06,$00,$00,$00,$00,$00
	DB	$00,$00,$60,$06,$00,$00,$00,$30,$00
	DB	$10,$01,$EA,$A2,$A0,$00,$30,$28,$00
	DB	$14,$07,$C0,$AA,$A0,$00,$30,$28,$00
	DB	$14,$07,$00,$AA,$A0,$00,$30,$AA,$C0
	DB	$15,$00,$00,$02,$A0,$00,$78,$AA,$C0
	DB	$15,$01,$FF,$FF,$FF,$FF,$7A,$AA,$C0
	DB	$15,$03,$FF,$FF,$FF,$F9,$78,$AA,$C0
	DB	$15,$57,$FF,$FF,$FF,$F5,$00,$AA,$00
	DB	$15,$50,$00,$06,$00,$04,$00,$28,$00
	DB	$14,$14,$00,$06,$00,$14,$00,$00,$00
	DB	$14,$04,$00,$06,$00,$10,$00,$00,$00
	DB	$10,$05,$00,$06,$00,$50,$00,$00,$00
	DB	$00,$01,$40,$06,$00,$40,$00,$00,$00
	DB	$00,$01,$50,$15,$01,$40,$00,$00,$00
	DB	$00,$00,$55,$55,$55,$00,$00,$00,$00
	DB	$00,$00,$15,$55,$55,$00,$00,$00,$00
	DB	$00,$00,$05,$40,$54,$00,$00,$00,$00
*SHAPE #2 SHIFTED RT 4 PIXELS
	DB	$00,$2A,$AA,$AA,$AA,$AA,$A8,$00,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$0A,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$80,$00
	DB	$00,$00,$00,$15,$54,$00,$00,$00,$00
	DB	$00,$00,$38,$15,$54,$00,$00,$00,$00
	DB	$00,$00,$38,$05,$50,$00,$00,$00,$00
	DB	$00,$00,$10,$01,$50,$00,$00,$00,$00
	DB	$00,$00,$78,$01,$80,$00,$00,$00,$00
	DB	$00,$00,$18,$01,$80,$00,$00,$00,$00
	DB	$04,$00,$7E,$E8,$A8,$00,$0C,$0A,$00
	DB	$05,$01,$F0,$6A,$A8,$00,$0C,$2A,$80
	DB	$05,$01,$C0,$0A,$A8,$00,$1E,$2A,$B0
	DB	$05,$40,$00,$00,$A8,$00,$1E,$AA,$B0
	DB	$05,$50,$7F,$FF,$FF,$FF,$DE,$AA,$B0
	DB	$05,$50,$FF,$FF,$FF,$FE,$5E,$2A,$B0
	DB	$05,$55,$FF,$FF,$FF,$FD,$40,$2A,$80
	DB	$05,$54,$00,$01,$80,$01,$00,$0A,$00
	DB	$05,$05,$00,$01,$80,$05,$00,$00,$00
	DB	$05,$01,$00,$01,$80,$04,$00,$00,$00
	DB	$04,$01,$40,$01,$80,$14,$00,$00,$00
	DB	$00,$00,$50,$01,$80,$10,$00,$00,$00
	DB	$00,$00,$54,$05,$40,$50,$00,$00,$00
	DB	$00,$00,$15,$55,$55,$40,$00,$00,$00
	DB	$00,$00,$05,$55,$55,$40,$00,$00,$00
	DB	$00,$00,$01,$50,$15,$00,$00,$00,$00
*SHAPE #3 SHIFTED RT 6 PIXELS
	DB	$00,$0A,$AA,$AA,$AA,$AA,$AA,$00,$00
	DB	$00,$2A,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$00
	DB	$02,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$00
	DB	$00,$AA,$AA,$AA,$AA,$AA,$AA,$A8,$00
	DB	$00,$2A,$AA,$AA,$AA,$AA,$AA,$A0,$00
	DB	$00,$00,$00,$05,$55,$00,$00,$00,$00
	DB	$00,$00,$0E,$05,$55,$00,$00,$00,$00
	DB	$00,$00,$0E,$01,$54,$00,$00,$00,$00
	DB	$00,$00,$04,$00,$54,$00,$00,$00,$00
	DB	$00,$00,$1E,$00,$60,$00,$00,$00,$00
	DB	$00,$00,$06,$00,$60,$00,$00,$00,$00
	DB	$01,$00,$1E,$AA,$2A,$00,$03,$02,$80
	DB	$01,$40,$7C,$0A,$AA,$00,$03,$0A,$A0
	DB	$01,$40,$70,$02,$AA,$00,$07,$8A,$AC
	DB	$01,$50,$00,$00,$2A,$00,$07,$AA,$AC
	DB	$01,$54,$1F,$FF,$FF,$FF,$F7,$AA,$AC
	DB	$01,$54,$3F,$FF,$FF,$FF,$97,$8A,$AC
	DB	$01,$55,$7F,$FF,$FF,$FF,$50,$0A,$A0
	DB	$01,$55,$00,$00,$60,$00,$40,$02,$80
	DB	$01,$41,$40,$00,$60,$01,$40,$00,$00
	DB	$01,$40,$40,$00,$60,$01,$00,$00,$00
	DB	$01,$00,$50,$00,$60,$05,$00,$00,$00
	DB	$00,$00,$14,$00,$60,$04,$00,$00,$00
	DB	$00,$00,$15,$01,$50,$14,$00,$00,$00
	DB	$00,$00,$05,$55,$55,$50,$00,$00,$00
	DB	$00,$00,$01,$55,$55,$50,$00,$00,$00
	DB	$00,$00,$00,$54,$05,$40,$00,$00,$00
*START TABLE ON EVEN PAGE BOUNDARY
	DS	$A4
NOTES	DB	$43,$10,$3F,$08,$38,$20,$00,$14	;P1M1
	DB	$43,$08,$4B,$10,$43,$08,$54,$40
	DB	$43,$10,$43,$08,$4B,$10,$54,$08
	DB	$65,$20,$00,$10,$65,$08,$43,$10	;P1M2
	DB	$43,$08,$4B,$20,$00,$10
	DB	$43,$10,$3F,$08,$38,$20,$00,$14	;P1M1
	DB	$43,$08,$4B,$10,$43,$08,$54,$40
	DB	$43,$10,$43,$08,$4B,$10,$54,$08
	DB	$65,$20,$00,$10,$65,$08,$43,$10	;P1M2
	DB	$43,$08,$4B,$20,$00,$10
	DB	$38,$20,$00,$02,$38,$20,$00,$02,$38,$20,$38,$10	;P2M1
	DB	$00,$02,$38,$10,$32,$08,$4B,$10,$00,$02
	DB	$4B,$08,$00,$02,$4B,$10,$00,$02,$4B,$08,$00,$02,$4B,$40,$00
	DB	$02,$4B,$10	;P2M2
	DB	$00,$02,$4B,$08,$00,$02,$4B,$10,$00,$02,$4B,$08,$00,$02,$4B
	DB	$40
	DB	$54,$10,$00,$02,$54,$08,$00,$02,$54
	DB	$10,$00,$02,$54,$08,$00,$02,$54,$40	;P2M3
	DB	$38,$20,$00,$02,$38,$20,$00,$02,$38,$20,$38,$10	;P2M1
	DB	$00,$02,$38,$10,$32,$08,$4B,$10,$00,$02
	DB	$4B,$08,$00,$02,$4B,$10,$00,$02,$4B
	DB	$08,$00,$02,$4B,$40,$00,$02,$4B,$10	;P2M2
	DB	$00,$02,$4B,$08,$00,$02,$4B,$10,$00
	DB	$02,$4B,$08,$00,$02,$4B,$40
	DB	$54,$10,$00,$02,$54,$08,$00,$02,$54
	DB	$10,$00,$02,$54,$08,$00,$02,$54,$40	;P2M3
	DB	$00,$15,$FF				;REST & REPEAT
*VARIABLES
XX	DS	1
YY	DS	1
HORIZ	DS	1
TEMP	DS	1
DEPTH	DS	1
SLNGH	DS	1
VERT	DS	1
OFFSET	DS	1
POINTER	DS	1
TIME	DS	1
TDELAY	DS	1
VBFLAG	DS	1
*CLEAR SCREEN 8K INCLUDING NDLIST AREA
CLRSCR	LDA	#>SCREEN	;SETUP POINTERS TO CLEAR SCREEN
	STA	SL
	LDA	#<SCREEN
	STA	SH
	LDY	#$00
	TYA
	LDX	#$20		;32 PAGES (8K)
AA2	STA	(SL),Y
	INY
	BNE	AA2		;CONTINUE UNTIL DONE WITH 256 BYTES
	INC	SH		;DO NEXT PAGE
	DEX
	BNE	AA2
*SETUP DLIST
	LDX	#$00
DLOOP	LDA	DLIST,X
	STA	NDLIST,X
	INX
	CPX	#$CC		;204 ELEMENTS
	BNE	DLOOP
	LDA	#>NDLIST
	STA	560
	LDA	#<NDLIST
	STA	561
*INITILIZE
	LDA	#$0B
	STA	COLOR1
	LDA	#$00
	STA	COLOR2
	LDA	#$40
	STA	XX
	LDA	#$20
	STA	YY
	STA	VERT
	LDA	#$00
	STA	TDELAY
	LDA	#>NOTES		;GET LO BYTE OF TABLE
	STA	NOTEL
	LDA	#<NOTES		;GET HI BYTE OF TABLE
	STA	NOTEH
	LDA	#$00		;CLEAR TIHER
	STA	$14
	LDA	#$01
	STA	TIME
	LDA	#$EA		;PURE TONE - VOLUME 10
	STA	AUDC1
	LDY	#$00
	STY	POINTER
*SET VBLANK
	LDA	#$07
	LDX	#<FRAME
	LDY	#>FRAME
	JSR	SETVBK
FOREVER	JMP	FOREVER
*VBLANK ROUTINE
FRAME	LDA	VBFLAG
	BEQ	OK
	JMP	$E462
OK	LDA	#$01
	STA	VBFLAG
	LDA	XX		;CALC NEW HORIZ OFFSET
	LSR			;DIVIDE BY 4 TO GET HORIZ BYTE
	LSR
	STA	HORIZ
	JSR	SETUP
	JSR	DRAW		;DRAW SHAPE
	LDA	TDELAY		;DELAY 3/60 TH SEC
	CMP	#$03
	BNE	AB1
	JSR	SETUP
	JSR	XDRAW		;XDRAW SHAPE
	JSR	JOYSTK		;READ JOYSTICK
	LDA	XX		;CALC NEW HORIZ OFFSET
	LSR
	LSR
	STA	HORIZ
	JSR	SETUP
	JSR	DRAW		;IMMEDIATELY REDRAW SHAPE
	LDA	#$00		;RESET DELAY
	STA	TDELAY
	JMP	SOUND
AB1	INC	TDELAY
SOUND	LDA	TIME
	CMP	$14
	BGE	AC2
*STOP NOTE - EQUIVALENT TO SOUND 0,0,0,0
	LDA	#$00
	STA	$D208
	LDA	#$03
	STA	$D20F
	LDY	POINTER
*LOAD NEXT NOTE
	LDA	(NOTEL),Y
	CMP	#$FF		;LAST NOTE?
	BNE	AC3
*RESET TO BEGINNING NOTE
	LDY	#$00
	STY	POINTER
	LDA	#<NOTES
	STA	NOTEH
*CONTINUE READING NOTES & STORING VALUES IN SOUND REGISTERS
AC3	STA	AUDF1		;STORE FREQUENCY OF NEXT NOTE
	INY
	INC	POINTER
	LDA	(NOTEL),Y
	STA	TIME		;STORE LENGTH OF NOTE
	INY
	INC	POINTER
	BNE	AC1		;CAN ONLY HAPPEN ON AN EVEN NUMBER
	INC	NOTEH		;NEXT PAGE OF NOTES
AC1	LDA	#$00		;CLEAR TIMER AT BEGIINING OF EACH NEW NOTE
	STA	$14
AC2	LDA	#$00
	STA	VBFLAG
	JMP	XITVBK
*SUBROUTINES
*DRAWING SETUP SUBROUTINE
SETUP	LDY	XX		;HORIZONTAL POSITION (0-159)
	LDX	XOFF,Y		;INDEX TO FIND SHAPE #
	LDA	SHPLO,X		;INDEX TO GET LO BYTE OF SHAPE TABLE
	STA	SHPL		;STORE LO BYTE IN ZERO PAGE
	LDA	SHPHI,X		;GET HI BYTE OF SHAPE TABLE
	STA	SHPH
	LDA	YY
	STA	VERT
	LDA	#$1F
	STA	DEPTH		;SHAPE IS 31 LINES DEEP
	LDA	#$09
	STA	SLNGH		;SHAPE IS 9 BYTES WIDE
	STA	TEMP		;STORED HERE ALSO BECAUSE DRAWING
*ROUTINE DECREMENTS SLNGH 0
* AND VARIABLE MUST BE RESTORED AT START OF NEXT ROW
	RTS
*DRAW SHAPE SUBROUTINE
DRAW	LDY	VERT		;VERTICAL POSITION
	JSR	GETADR		;FIND BEGINNING OF SCREEN ADDRESS OF ROW
	LDX	#$00
	LDA	TEMP
	STA	SLNGH		;RESTORE VALUE OF WIDTH FOR NEXT ROW
	LDY	#$00
DRAW2	LDA	(SHPL,X)	;GET BYTE OF SHAPE TABLE
	STA	(HIRESL),Y	;PLOT ON SCREEN
	INC	SHPL		;NEXT BYTE OF SHAPE TABLE
	BNE	AD1		;IF CROSS PAGE BOUNDARY?
	INC	SHPH		;INCREMENT TO NEXT PAGE OF SHAPE
AD1	INY			;NEXT POSITION ON SCREEN
	DEC	SLNGH		;DECREMENT WIDTH
	BNE	DRAW2		;FINISHED WITH ROW YET
	INC	VERT		;IF SO, INCREMENT TO NEXT LINE
	DEC	DEPTH		;DECREMENT DEPTH
	BNE	DRAW		;FINISHED ALL ROWS?
	RTS			;YES, END
*GETADR SUBROUTINE FOR FINDING STARTING SCREEN ADDRESS TO PLOT BYTES
GETADR	LDA	YVERTL,Y	;LOOKUP LO BYTE OF LINE
	CLC
	ADC	HORIZ		;ADD HORIZ OFFSET
	STA	HIRESL		;STORE LO BYTE SCREEN ADDRESS
	LDA	YVERTH,Y	;LOOKUP HI BYTE LINE
	ADC	#<SCREEN	;ADD HI BYTE OF SCREEN
	STA	HIRESH		;STORE HI BYTE SCREEN ADDRESS
	RTS
*JOYSTICK ROUTINE
JOYSTK	LDA	STICK
	AND	#$02		;DOWN BIT?
	BNE	CHKLF
	LDA	YY		;PREVENT SHAPE FROM EXITING BOTTOM SCREEN
	CMP	#$A0
	BEQ	CHKLF
	INC	YY		;MOVE TWO LINES
	INC	YY
CHKLF	LDA	STICK
	AND	#$04		;LEFT BIT?
	BNE	CHKRT
	LDA	XX		;PREVENT SHAPE FROM EXITING SCREEN LEFT
	CMP	#$00
	BEQ	CHKRT
	DEC	XX		;THIS MOVES TWO PIXELS
CHKRT	LDA	STICK
	AND	#$08		;RIGHT BIT?
	BNE	CHKUP
	LDA	XX		;PREVENT SHAPE FROM EXITING SCREEN RIGHT
	CMP	#$7C
	BEQ	CHKUP
	INC	XX
CHKUP	LDA	STICK
	AND	#$01		;UP BIT
	BNE	AE1
	LDA	YY		;PREVENT SHAPE FROM EXITING TOP SCREEN
	CMP	#$00
	BEQ	AE1
	DEC	YY
	DEC	YY
AE1	RTS
*XDRAW SHAPE SUBROUTINE
XDRAW	LDY	VERT		;VERTICAL POSITION
	JSR	GETADR		;FIND BEGINNING OF SCREEN ADDRESS OF ROW
	LDX	#$00
	LDA	TEMP
	STA	SLNGH		;RESTORE VALUE OF WIDTH FOR NEXT ROW
	LDY	#$00
XDRAW2	LDA	(SHPL,X)	;GET BYTE OF SHAPE TABLE
	EOR 	(HIRESL),Y	;EOR WITH SCREEN IMAGE
	STA	(HIRESL),Y	;PLOT ON SCREEN
	INC	SHPL		;NEXT BYTE OF SHAPE TABLE
	BNE	AF1		;IF CROSS PAGE BOUNDARY?
	INC	SHPH		;INCREMENT TO NEXT PAGE OF SHAPE
AF1	INY			;NEXT POSITION ON SCREEN
	DEC	SLNGH		;DECREMENT WIDTH
	BNE	XDRAW2		;FINISHED WITH ROW YET
	INC	VERT		;IF SO, INCREMENT TO NEXT LINE
	DEC	DEPTH		;DECREMENT DEPTH
	BNE	XDRAW
	RTS			;YES, END
