; THE DEMO CLUB INTRO BY MIKE
; DISTRIBUTE THIS SOURCE UPON PAIN
; OF DEATH, OR EVEN WORSE, HARD DISK
; ERASURE. 
;
; SIMPLY ADD YOUR TEXT ABOVE MINE,
; SOMEWHERE TOWARDS THE END OF THE
; PROGRAM.
;
; I WOULD APPRECIATE IT IF YOU WOULD
; FINISH YOURS IN SUCH A WAY THAT IT
; 'FLOWED' INTO MINE NEATLY!
;
; THEN ASSEMBLE TO DISK (CALL IT
; INTRO.PRG OR SOMETHING), AND THEN
; PACK IT USING AUTOMATION 1.3 OR
; GREATER (THIS OFFERS SOME DEGREE
; OF PROTECTION FROM THE CASUAL
; HACKER!)
;
; CHEAR'S JOHN - YOU OWE ME A DRINK!
; (OR MANY JUST A FEW DISKS!)
;
; BYE-BYE!
	

	OPT O+,OW-	

VSYNC	MACRO
	MOVE.L D0,-(A7)
	MOVE.W SYNC,D0
.VLP\@	CMP.W SYNC,D0
	BEQ .VLP\@
	MOVE.L (A7)+,D0
	ENDM

; START OF PROGRAM
     
 	BSR INIT
 	BSR RANDGEN
	BSR SHIFTLOGO
	BSR SFTSMILE
	BSR CLEARBUF
	
 	LEA $FF8240,A0
 	LEA NWPAL,A1
 	MOVEM.L (A1),D0-D7
 	MOVEM.L D0-D7,(A0)
 	
 	BSR ON
 	
CONT2	VSYNC
	BSR DLOGO
	BSR SMILEY
	BSR BARS
;	MOVE.W #$606,$FF8240
	CMPI.B #$39,$FFFC02
     	BNE CONT2

	BSR FLUSH
	BRA OUT
	     	
FLUSH	BTST.B #0,$FFFC00
	BEQ FLUSH2
	MOVE.B $FFFC02,D0
	BRA FLUSH
FLUSH2	RTS

    
INIT	DC.W $A00A

	CLR.L -(SP)
     	MOVE.W #$20,-(SP)
     	TRAP #1
     	ADD.L #6,SP
     	MOVE.L D0,SSP
     	
     	MOVE.B #$12,$FFFFFC02.W
     	
     	MOVE.L #$FF8240,A0
     	MOVE.L #PALETTE,A1
     	MOVEM.L (A0),D0-D7
     	MOVEM.L D0-D7,(A1)
     	
     	MOVE.W #2,-(SP)
     	TRAP #14
     	ADDQ.L #2,SP
     	MOVE.L D0,PBASE
     	
     	MOVE.W #3,-(SP)
     	TRAP #14
     	ADDQ.L #2,SP
     	MOVE.L D0,LBASE
     	
     	MOVE.W #4,-(SP)
     	TRAP #14
     	ADDQ.L #2,SP
     	MOVE.W D0,RES
     	
	CLR.B $FF8260
	
	MOVE.L #SCREENS,D0
     	ADD.L #512,D0
     	AND.L #$FFFFFF00,D0
     	MOVE.L D0,SCREENA
     	ADD.L #$B000,D0
     	MOVE.L D0,SCREENB

	MOVE.W #1,TOGGLE
	MOVE.L SCREENB,SCREENW
     
     	MOVE.L SCREENA,A0
    	MOVE.W #($16000/4),D0
    	MOVEQ #0,D1
CLRLOOP	MOVE.L D1,(A0)+
     	DBRA D0,CLRLOOP
     
     	MOVE.L #BARDAT,BARPOS
     	MOVE.L #LWAVE,WAVE	;LOGO
     	MOVE.L #SWAVE,WAVE2	;SMILEY
     	
     	MOVEQ #1,D0
     	BSR MUSIC
     	RTS
     	
OUT  	
	BSR OFF

     	BSR SOUNDOFF
     	
     	MOVE.B #$8,$FFFFFC02.W
     
	MOVE.L #$FF8240,A0
     	MOVE.L #PALETTE,A1
     	MOVEM.L (A1),D0-D7
     	MOVEM.L D0-D7,(A0)
     	
     	MOVE.W RES,-(SP)
     	MOVE.L LBASE,-(SP)
     	MOVE.L PBASE,-(SP)
     	MOVE.W #5,-(SP)
     	TRAP #14
     	ADD.L #12,SP
     	
     	DC.W $A009
     	
     	MOVE.L SSP,-(SP)
     	MOVE.W #$20,-(SP)
     	TRAP #1
     	ADD.L #6,SP
     	
     	CLR.W -(SP)
     	TRAP #1

SOUNDOFF	MOVEQ #0,D0
	JSR MUSIC
	MOVE.B #7,$FFFFF8800
	MOVE.B #-1,$FFFF8802
	RTS

	;DIST CODE
	
SHIFTLOGO	LEA LOGOCOPY,A1
	MOVE.L #15,D0
SHIFT3	LEA LOGO,A0
	MOVE.W #76,D1
SHIFT2	MOVE.W #7,D2
	
	CLR.W 0(A1)
	CLR.W 2(A1)
	CLR.W 4(A1)
	CLR.W 6(A1)

SHIFT1	MOVEQ #0,D3
	MOVEQ #0,D4
	MOVEQ #0,D5
	MOVEQ #0,D6
	MOVE.W 0(A0),D3
	MOVE.W 2(A0),D4
	MOVE.W 4(A0),D5
	MOVE.W 6(A0),D6
	LSL.L D0,D3
	LSL.L D0,D4
	LSL.L D0,D5
	LSL.L D0,D6
	MOVE.W D3,$8(A1)
	MOVE.W D4,$A(A1)
	MOVE.W D5,$C(A1)
	MOVE.W D6,$E(A1)
	SWAP D3
	SWAP D4
	SWAP D5
	SWAP D6
	OR.W D3,0(A1)
	OR.W D4,2(A1)
	OR.W D5,4(A1)
	OR.W D6,6(A1)
	
	LEA 8(A0),A0
	LEA 8(A1),A1
	
	DBRA D2,SHIFT1
	LEA 8(A1),A1
	DBRA D1,SHIFT2
	DBRA D0,SHIFT3
	
	LEA XTABLE,A0
	MOVE.L #0,D0
	MOVE.W #19,D2
XT2	MOVE.W #15,D1
XT1	MOVE.L D0,(A0)+
	DBRA D1,XT1
	ADD.L #8,D0
	DBRA D2,XT2
	RTS

DLOGO	LEA LOGOTAB,A0
	LEA XTABLE,A1
	LEA XADDR,A2
	MOVE.L SCREENW,A3
	
	MOVE.W #76,D0
	MOVEQ #0,D2 ;YPOS
	
	MOVE.L WAVE,A4
	
	MOVEQ #0,D1
ENDRET1	MOVE.W (A4)+,D1
	BMI ENDWAVE1
	MOVE.L A4,WAVE
DISTLP	LSL.L #2,D1
	MOVE.L (A0,D1.L),D7
	ADD.L D2,D7
	ADD.L #LOGOCOPY,D7
	MOVE.L D7,(A2)+
	
	MOVE.L (A1,D1.L),D7
	ADD.L A3,D7
	ADD.L #($A0*15),D7 ;HPOS
	MOVE.L D7,(A2)+
	
	LEA $A0(A3),A3
	ADD.L #72,D2
	MOVEQ #0,D1
ENDRET2	MOVE.W (A4)+,D1
	BMI ENDWAVE2
	DBRA D0,DISTLP
	
	LEA XADDR,A4
	MOVEQ #0,D7

OFFSET	SET $4B00+($A0*10)

	REPT 38
	;18 REG NEEDED
	
	MOVE.L (A4)+,A0
	MOVE.L (A4)+,A1
	MOVE.L D7,-8(A1)
	MOVE.L D7,-4(A1)
	MOVEM.L (A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,(A1)
	MOVEM.L 36(A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,36(A1)
	MOVE.L D7,72(A1)
	MOVE.L D7,76(A1)
	
	MOVE.L (A4)+,A0
	MOVE.L (A4)+,A1
	MOVE.L D7,-8(A1)
	MOVE.L D7,-4(A1)
	MOVE.L D7,-8+OFFSET(A1)
	MOVE.L D7,-4+OFFSET(A1)
	
	MOVEM.L (A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,(A1)
	MOVEM.L D0-D6/A2-A3,OFFSET(A1)
	MOVEM.L 36(A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,36(A1)
	MOVEM.L D0-D6/A2-A3,36+OFFSET(A1)
	MOVE.L D7,72(A1)
	MOVE.L D7,76(A1)
	MOVE.L D7,72+OFFSET(A1)
	MOVE.L D7,76+OFFSET(A1)

OFFSET	SET OFFSET-($A0*3)
	ENDR
	
	MOVE.L (A4)+,A0
	MOVE.L (A4)+,A1
	
	MOVE.L D7,-8(A1)
	MOVE.L D7,-4(A1)
	MOVEM.L (A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,(A1)
	MOVEM.L 36(A0),D0-D6/A2-A3
	MOVEM.L D0-D6/A2-A3,36(A1)
	MOVE.L D7,72(A1)
	MOVE.L D7,76(A1)
	
	RTS
	
ENDWAVE1	MOVE.L #LWAVE,A4
	BRA ENDRET1
ENDWAVE2	MOVE.L #LWAVE,A4
	BRA ENDRET2

	;SMILE CODE
	
SFTSMILE 	LEA SMILE,A0
	LEA SMILEROT,A1
	MOVE.L A1,A2
     	MOVE.W #31,D0

ROTLP4	MOVE.L (A0)+,(A2)+
	MOVE.L #0,(A2)+
     	DBRA D0,ROTLP4
     	
     	MOVE.L A1,A0
     	MOVE.L A2,A1
     	MOVE.W #30,D0
ROTLP3	MOVE.W #31,D1
ROTLP2	MOVE.L (A0),(A1)
     	MOVE.L 4(A0),4(A1)
     	
     	ROXR.W (A1)
     	ROXR.W 2(A1)
     	ROXR.W 4(A1)
     	ROXR.W 6(A1)
     	
     	ADDQ.L #8,A0
     	ADDQ.L #8,A1
     	DBRA D1,ROTLP2
     	DBRA D0,ROTLP3
     	RTS  

SMILEY	LEA SMILETAB,A0
	LEA SMILEROT,A1
	LEA BOX,A5
	MOVE.L SCREENW,A3
	
	CMP.W #0,SDIREC2
	BEQ SMDOWN
	SUB.L #$A0,SPOS2
	CMP.L #($A0*170),SPOS2
	BNE SMOKAY1
	MOVE.W #0,SDIREC2
	BRA SMOKAY1
SMDOWN	ADD.L #$A0,SPOS2
	CMP.L #($A0*228),SPOS2
	BNE SMOKAY1
	MOVE.W #1,SDIREC2
SMOKAY1

	ADD.L SPOS2,A3
	MOVEQ #0,D1
COUNT	SET 0
	REPT 20
	MOVE.W D1,(-$A0+COUNT)(A3)
COUNT	SET COUNT+8
	ENDR
	
	MOVE.W #31,D0

	MOVE.L WAVE2,A4
	
SMILELP	MOVEQ #0,D1
DRET1	MOVE.W (A4)+,D1
	BMI DENDWAVE1

	LSL.L #2,D1
	MOVE.L (A0,D1.L),D7
	MOVE.L A1,A2
	ADD.L D7,A2
	
	MOVE.W (A2),D1
	MOVE.W 2(A2),D2
	MOVE.W 4(A2),D3
	MOVE.W 6(A2),D4
	
	MOVE.W D1,$08(A3)
	MOVE.W D2,$10(A3)
	MOVE.W D3,$18(A3)
	MOVE.W D4,$20(A3)
	
	MOVE.W D1,$78(A3)
	MOVE.W D2,$80(A3)
	MOVE.W D3,$88(A3)
	MOVE.W D4,$90(A3)
	
	MOVE.W (A5)+,$28(A3)
	MOVE.W (A5)+,$30(A3)
	MOVE.W (A5)+,$38(A3)
	MOVE.W (A5)+,$40(A3)
	MOVE.W (A5)+,$48(A3)
	MOVE.W (A5)+,$50(A3)
	MOVE.W (A5)+,$58(A3)
	MOVE.W (A5)+,$60(A3)
	MOVE.W (A5)+,$68(A3)
	MOVE.W (A5)+,$70(A3)
	
	ADDQ.L #8,A1
	LEA $A0(A3),A3
	DBRA D0,SMILELP
	
	MOVE.L WAVE2,A4
	MOVEQ #0,D1
DRET2	MOVE.W (A4)+,D1
	BMI DENDWAVE2
	MOVE.L A4,WAVE2
	RTS
	
DENDWAVE1	MOVE.L #SWAVE,A4
	BRA DRET1

DENDWAVE2	MOVE.L #SWAVE,A4
	BRA DRET2
		
CLEARBUF	MOVE.W #(20*$A0),D0
	LEA SCBUF1,A0
CLBUF1	MOVE.L #0,(A0)+
	DBRA D0,CLBUF1
	MOVE.L #MESSAGE,MESPOS
	MOVE.L #FONT+$88,CHARADDR ; SPACE
	MOVE.L #(225*$A0),SPOS
	MOVE.W #0,SDIREC
	MOVE.L #(225*$A0),SPOS2
	MOVE.W #1,SDIREC2
	RTS

SCROLL	CMP.W #0,SDIREC
	BEQ SCDOWN
	SUB.L #$A0,SPOS
	CMP.L #($A0*202),SPOS
	BNE SOKAY1
	MOVE.W #0,SDIREC
	BRA SOKAY1
SCDOWN	ADD.L #$A0,SPOS
	CMP.L #($A0*260),SPOS
	BNE SOKAY1
	MOVE.W #1,SDIREC
SOKAY1

	MOVE.W SCROLLX,D0
	ADDQ.W #2,SCROLLX
	CMP.W #$54,SCROLLX
	BLT.S SCOK1
	CLR.W SCROLLX
SCOK1	
	MOVE.W D0,D1
	ANDI.W #3,D0
	ADD.W D0,D0
	ADD.W D0,D0 ;=0,8
	MOVE.W D0,NSHIFTS
	
	LEA SCRTABLE(PC),A0
	MOVE.L (A0,D0.W),A1
	ANDI.W #$FFFC,D1
	ADD.W D1,D1
	ADD.W D1,A1 ;ADD OFFSET OT BUF ADDR
	
	TST.W D0
	BNE SCRSKIP
	
	CMPI.W #2,CHARCNT
	BNE LETOK
	MOVEQ #0,D1
	MOVE.W D1,CHARCNT
	
	;GETLET
	
	MOVE.L MESPOS,A2
TRYAGAIN	MOVE.B (A2)+,D1
	BPL.S SCOK2
	LEA MESSAGE,A2
	BRA TRYAGAIN
SCOK2	MOVE.L A2,MESPOS
	
	CMP.B #32,D1
	BLT TRYAGAIN
	
	SUB.B #32,D1
	ADD.W D1,D1
	LEA CHARTAB,A2
	MOVE.W (A2,D1),D1
	MOVE.L #FONT+128,CHARADDR
	ADD.L D1,CHARADDR
	BRA SCRCONT

LETOK	ADDQ.L #8,CHARADDR
SCRCONT	ADDQ.W #1,CHARCNT
	
SCRSKIP	MOVE.L CHARADDR,A0
	MOVE.L A1,A2 ; BUF ADDR
	MOVEQ #31,D1 ; HEIGHT
	MOVE.W NSHIFTS,D2
	
UPDATE
	MOVEQ #0,D0
	MOVE.W (A0),D0
	LSL.L D2,D0
	MOVE.W D0,$08(A2)
	MOVE.W D0,$B0(A2)
	SWAP D0
	OR.W D0,$00(A2)
	OR.W D0,$A8(A2)
	
	MOVEQ #0,D0
	MOVE.W 2(A0),D0
	LSL.L D2,D0
	MOVE.W D0,$0A(A2)
	MOVE.W D0,$B2(A2)
	SWAP D0
	OR.W D0,$02(A2)
	OR.W D0,$AA(A2)
	
	MOVEQ #0,D0
	MOVE.W 4(A0),D0
	LSL.L D2,D0
	MOVE.W D0,$0C(A2)
	MOVE.W D0,$B4(A2)
	SWAP D0
	OR.W D0,$04(A2)
	OR.W D0,$AC(A2)
	
	MOVEQ #0,D0
	MOVE.W 6(A0),D0
	LSL.L D2,D0
	MOVE.W D0,$0E(A2)
	MOVE.W D0,$B6(A2)
	SWAP D0
	OR.W D0,$06(A2)
	OR.W D0,$AE(A2)
	
	LEA $A0(A0),A0
	LEA $150(A2),A2
	DBRA D1,UPDATE
	 
	;NOTE A1 ADDR, A0=DEST
	MOVE.L SCREENW,A0
	ADD.L SPOS,A0
	
	LEA 16(A1),A1
	;$150 BYTES/ROW

OFFSET	SET $28B0
	LEA BLANK,A2
	MOVEM.L (A2),D0-D7/A2-A6
	MOVE.L D0,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	
	REPT 32
	MOVE.L $9C+OFFSET(A1),-(A0)
	MOVEM.L $68+OFFSET(A1),D0-D7/A2-A6
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L $34+OFFSET(A1),D0-D7/A2-A6
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L OFFSET(A1),D0-D7/A2-A6
	MOVEM.L D0-D7/A2-A6,-(A0)

	;LEA -$A0(A0),A0
OFFSET	SET OFFSET-$150
	ENDR
	
	LEA BLANK,A2
	MOVEM.L (A2),D0-D7/A2-A6
	
	MOVEM.L D0-D1,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	MOVEM.L D0-D7/A2-A6,-(A0)
	
	RTS	
	

BARS 	MOVEQ #0,D0
     	MOVEQ #0,D1
     	MOVEQ #0,D2
	
    	MOVE.B #$8,$FF8800
     	MOVE.B $FF8800,D1
     	MOVE.B #$9,$FF8800
     	MOVE.B $FF8800,D0
	MOVE.B #$A,$FF8800
     	MOVE.B $FF8800,D2
	MOVE.B #14,$FF8800
	MOVE.B $FF8800,D7
     
     	;CMP.B #14,D0
     	;BHI AON
     	;BSET #1,D7
     	;BRA AOK
AON  	;BCLR #1,D7
AOK  	;CMP.B #14,D1
     	;BHI BON
     	;BSET #2,D7
     	;BRA BOK
BON  	;BCLR #2,D7

BOK	;MOVE.B D7,$FF8802

     	MOVE.L SCREENW,A1
     	ADD.L #(100*$A0+8*5+6),A1
     	
     	MOVE.L #0,BAR11
     	MOVE.L #0,BAR21
     	MOVE.L #0,BAR31
     
     	MOVE.L BARPOS,A0
     	MOVE.L (A0),D3
     	ADD.L #4,BARPOS
     	CMP.L #BAREND,BARPOS
     	BNE BARPOSOK
     	MOVE.L #BARDAT,BARPOS

BARPOSOK	MOVE.W #16,D7	
     	
BARLP    	CMP.B D0,D7
	BNE NB1
	MOVE.L D3,BAR11
NB1	CMP.B D1,D7
	BNE NB2
	MOVE.L D3,BAR21
NB2	CMP.B D2,D7
	BNE NB3
	MOVE.L D3,BAR31
NB3	
	MOVE.W BAR11,$00(A1)
     	MOVE.W BAR12,$08(A1)
     	MOVE.W BAR21,$20(A1)
     	MOVE.W BAR22,$28(A1)
     	MOVE.W BAR31,$40(A1)
     	MOVE.W BAR32,$48(A1)
     	
     	MOVE.W BAR11,$140(A1)
     	MOVE.W BAR12,$148(A1)
     	MOVE.W BAR21,$160(A1)
     	MOVE.W BAR22,$168(A1)
     	MOVE.W BAR31,$180(A1)
     	MOVE.W BAR32,$188(A1)
     	
     	LEA $A0*4(A1),A1
     	DBRA D7,BARLP
     	
     	RTS	

NSTARS	EQU 100

STARFIELD	LEA OLDPOS,A0
	MOVE.L (A0),D0
	MOVE.L 4(A0),A0
	MOVE.L D0,4(A0)
	
	MOVE.L OLDPOS,A0
	MOVE.W #(NSTARS/4)-1,D0
	MOVEQ #0,D1
CLEARLP	MOVEM.L (A0)+,A1-A4
	MOVE.W D1,(A1)
	MOVE.W D1,(A2)
	MOVE.W D1,(A3)
	MOVE.W D1,(A4)
	DBF D0,CLEARLP

FIRSTPLOT	LEA NEWPOS,A0
	MOVE.L OLDPOS,A1
	MOVE.W #NSTARS-1,D0
	MOVE.L SCREENW,D1
	ADD.L #6,D1
	MOVEQ #0,D3
	
PLOTSTAR	MOVE.L (A0),A2
	MOVE.L (A2)+,D2
	BEQ.S RESET
	MOVE.L D1,A3
	ADD.W (A2)+,A3
	MOVE.L A3,(A1)+
	OR.W D2,(A3)
	MOVE.L A2,(A0)
	LEA $308(A0),A0
	DBF D0,PLOTSTAR
	RTS

RESET	LEA 4(A0),A2
	MOVE.L A2,(A0)
	LEA $308(A0),A0
	DBF D0,PLOTSTAR
	RTS

RAND	MOVEM.L D1-D2/A0-A2,-(A7)
	MOVE.W #$11,-(A7)
	TRAP #14
	ADD.L #2,A7
	LSR.L #8,D0
	LSR.L #8,D0
	MOVEM.L (A7)+,D1-D2/A0-A2
	RTS
	
RANDGEN	LEA NEWPOS,A0
	LEA SINTAB,A2
	LEA $80+SINTAB,A3
	MOVE.W #NSTARS-1,D1

SLOOP2	LEA 4(A0),A1
	MOVE.L A1,(A0)
	BSR RAND
	LSR.L #2,D0
	MOVE.W D0,A6
	BSR RAND
	LSR.L #2,D0
	MOVE.L D0,D3
	BSR RAND
	MOVE.W D0,D4
	MOVE.W #$7F,D7
	LEA RADIUS,A4
	BSR RAND
	LSR.W #3,D0
	ADDA.W D0,A4

SLOOP	MOVEQ #0,D0
	MOVE.B (A4)+,D0

	ADD.W D0,D3
	MOVE.L D3,D5
	MOVE.L D3,D6
	MOVE.W D4,D0
	ADD.W D0,D0
	MULS 0(A3,D0.W),D5
	ADD.L D5,D5
	SWAP D5
	ADDI.W #$A0,D5
	MULS 0(A2,D0.W),D6
	ADD.L D6,D6
	SWAP D6
	ADDI.W #100,D6
	SUBQ.B #1,D4
	LSR.W #1,D6
	
	CMP.W #320,D5
	BCC.S OFFSCR
	CMP.W #0,D5
	BCS.S OFFSCR
	CMP.W #100,D6
	BCC.S OFFSCR
	CMP.W #0,D6
	BCS.S OFFSCR
	
	MOVE.W D5,D0
	ANDI.W #$F,D0
	MOVE.W A6,D2
	ADD.W D3,D2
	LSR.W #5,D2
	ADD.W D2,D2
	ADD.W D2,D2
	
	LEA STARTAB,A5
	MOVE.L (A5,D2.W),D2
	ROR.L D0,D2
	MOVE.L D2,(A1)+
	MOVE.W D6,D0
	MULU #$A0,D0
	MOVE.W D5,D2
	ANDI.W #$FFF0,D2
	LSR.W #1,D2
	ADD.W D2,D0
	MOVE.W D0,(A1)+
	DBF D7,SLOOP

OFFSCR	CLR.L (A1)+
	LEA $308(A0),A0
	DBF D1,SLOOP2
	
	BSR FIRSTPLOT
	RTS

ON	LEA MFPSTORE,A0
	MOVE.B $FFFFFA07.W,(A0)+
	MOVE.B $FFFFFA09.W,(A0)+
	MOVE.B $FFFFFA13.W,(A0)+
	MOVE.B $FFFFFA15.W,(A0)+
	MOVE.B $FFFFFA19.W,(A0)+
	MOVE.B $FFFFFA1B.W,(A0)+
	MOVE.B $FFFFFA1F.W,(A0)+
	MOVE.B $FFFFFA21.W,(A0)+
	MOVE.L $68.W,(A0)+
	MOVE.L $70.W,(A0)+
	MOVE.L $120.W,(A0)+
	MOVE.L $134.W,(A0)+
	
	CLR.B $FFFFFA1B.W
	CLR.B $FFFFFA19.W
	MOVE.B #$21,$FFFFFA07.W
	CLR.B $FFFFFA09.W
	MOVE.B #$21,$FFFFFA13.W
	CLR.B $FFFFFA15.W
	BCLR.B #3,$FFFFFA17.W
	
	MOVE.L #TOPBORD,$134.W
	MOVE.L #BOTTOM,$120.W
	MOVE.L #VBLANK,$70.W
	MOVE #$2300,SR
	
	RTS

OFF	MOVE #$2700,SR
	LEA MFPSTORE,A0
	MOVE.B (A0)+,$FFFFFA07.W
	MOVE.B (A0)+,$FFFFFA09.W
	MOVE.B (A0)+,$FFFFFA13.W
	MOVE.B (A0)+,$FFFFFA15.W
	MOVE.B (A0)+,$FFFFFA19.W
	MOVE.B (A0)+,$FFFFFA1B.W
	MOVE.B (A0)+,$FFFFFA1F.W
	MOVE.B (A0)+,$FFFFFA21.W
	MOVE.L (A0)+,$68.W
	MOVE.L (A0)+,$70.W
	MOVE.L (A0)+,$120.W
	MOVE.L (A0)+,$134.W
	BSET.B #3,$FFFFFA17.W
	MOVE #$2300,SR
	RTS

SWAPSCR	CMP.W #1,TOGGLE
     	BEQ SWP1	
     	BNE SWP2

SWP1 	MOVE.L SCREENB,SCREENW
	MOVE.W #2,TOGGLE
    	RTS

SWP2 	MOVE.L SCREENA,SCREENW
	MOVE.W #1,TOGGLE
     	RTS

TOGSCR	
	CMP.W #2,TOGGLE
     	BEQ TOG1
     	BNE TOG2

TOG1 	MOVE.L SCREENB,D0
	LSR.W #8,D0
	MOVE.B D0,$FF8203
	SWAP D0
	MOVE.B D0,$FF8201
     	RTS

TOG2 	MOVE.L SCREENA,D0
	LSR.W #8,D0
	MOVE.B D0,$FF8203
	SWAP D0
	MOVE.B D0,$FF8201
     	RTS

TOPBORD	MOVE #$2100,SR
	STOP #$2100
	CLR.B $FFFFFA19.W
	DCB.W 78,$4E71		;78 NOPS
	CLR.B $FFFF820A.W
	DCB.W 18,$4E71		;18 NOPS
	MOVE.B #2,$FFFF820A.W
	RTE
PHBL	RTE

BOTTOM	
	MOVE D0,-(SP)
	DCB.W 32,$4e71
	CLR D0
.syncb	MOVE.B $ffff8209.w,D0
	NEG.B D0
	ADD.B #64+128,D0
	LSL.B D0,D0
	MOVE #18,D0
.wait	DBF D0,.wait		;101 nops!
	MOVE.B #0,$FF820A
	DCB.W 12,$4E71
	MOVE.B #2,$FF820A
	MOVE.W (SP)+,D0
	RTE
	
HBLANK1	MOVE.W #$001,$FFF8240
	MOVE.W #$300,$FFF8240+(7*2)
	CLR.B $FFFFFA1B.W
	MOVE.L #HBLANK1B,$120
	MOVE.B #7,$FFFFFA21.W
	MOVE.B #8,$FFFFFA1B.W
	MOVE.L D0,-(SP)
	MOVE.L #$07000700,D0
	MOVE.L D0,$FFF8250
	MOVE.L D0,$FFF8254
	MOVE.L D0,$FFF8258
	MOVE.L D0,$FFF825C
	MOVE.L (SP)+,D0
	RTE

HBLANK1B	MOVE.W #$002,$FFF8240
	MOVE.L #HBLANK2,$120
	MOVE.L D0,-(SP)
	MOVE.L #$00700070,D0
	MOVE.L D0,$FFF8250
	MOVE.L D0,$FFF8254
	MOVE.L D0,$FFF8258
	MOVE.L D0,$FFF825C
	MOVE.L (SP)+,D0
	RTE
	
HBLANK2	MOVE.W #$003,$FFF8240
	MOVE.L #HBLANK3,$120
	RTE

HBLANK3	MOVE.W #$004,$FFF8240
	MOVE.L #HBLANK4,$120
	RTE

HBLANK4	MOVE.W #$005,$FFF8240
	MOVE.L #HBLANK5,$120
	RTE

HBLANK5	MOVE.W #$006,$FFF8240
	MOVE.L #HBLANK6,$120
	RTE

HBLANK6	MOVE.W #$007,$FFF8240
	MOVE.L #HBLANK7,$120
	RTE

HBLANK7	MOVE.W #$227,$FFF8240
	MOVE.L #HBLANK8,$120
	RTE
	
HBLANK8	MOVE.W #$777,$FFF8240
	MOVE.L #HBLANK9,$120
	CLR.B $FFFFFA1B.W
	MOVE.B #3,$FFFFFA21.W
	MOVE.B #8,$FFFFFA1B.W
	RTE

HBLANK9	MOVE.W #$666,$FFF8240
	MOVE.L #HBLANKA,$120
	RTE

HBLANKA	MOVE.W #$555,$FFF8240
	MOVE.L #HBLANKB,$120
	RTE
	
HBLANKB	MOVE.W #$444,$FFF8240
	MOVE.L #HBLANKF,$120
	RTE
	
HBLANKF	MOVE.W #$0,$FFF8240
	CLR.B $FFFFFA1B.W
	MOVE.L #BOTTOM,$120
	MOVE.B #60,$FFFFFA21.W
	MOVE.B #8,$FFFFFA1B.W
	MOVEM.L D0-D6/A0-A1,-(SP)
	LEA FONT+6,A0
	LEA $FF8242,A1
	MOVEM.L 2(A0),D0-D6
	MOVEM.L D0-D6,2(A1)
	MOVE.W (A0),(A1)
	MOVEM.L (SP)+,D0-D6/A0-A1
	RTE

     	
VBLANK	
	CLR.B $FFFFFA19.W
	MOVE.B #100,$FFFFFA1F.W
	MOVE.B #4,$FFFFFA19.W
	
	CLR.B $FFFFFA1B.W
	MOVE.B #100,$FFFFFA21.W
	MOVE.L #HBLANK1,$120
	MOVE.B #8,$FFFFFA1B.W
	MOVE.L #PHBL,$68.W

	CLR.W $FF8240
	MOVEM.L D0-D7/A0-A5,-(SP)
	BSR STARFIELD
	BSR SWAPSCR
	
	LEA $FF8240,A0
 	LEA NWPAL,A1
 	MOVEM.L (A1),D0-D7
 	MOVEM.L D0-D7,(A0)
 	
	NOT.S SYNC
	BSR MUSIC+8
	BSR SCROLL
 	
	BSR TOGSCR
     	MOVEM.L (SP)+,D0-D7/A0-A5
   	RTE
	
NWPAL	DC.W $000,$012,$056,$045,$034,$023,$067,$500
	DC.W $555,$555,$555,$555,$555,$555,$555,$555

SCROLLX	DC.W 0
CHARCNT	DC.W 0
NSHIFTS	DC.W 0
CHARADDR	DC.L 0
BLANK	DC.L 0,0,0,0,0,0,0,0,0,0,0,0,0

LOGOTAB	REPT 20
	DC.L $15A8*0,$15A8*1,$15A8*2,$15A8*3,$15A8*4,$15A8*5,$15A8*6,$15A8*7
	DC.L $15A8*8,$15A8*9,$15A8*10,$15A8*11,$15A8*12,$15A8*13,$15A8*14,$15A8*15
	ENDR
	EVEN
	
WIDTH	EQU $100
SMILETAB	
	DC.L WIDTH*00,WIDTH*01,WIDTH*02,WIDTH*03,WIDTH*04,WIDTH*05,WIDTH*06,WIDTH*07
	DC.L WIDTH*08,WIDTH*09,WIDTH*10,WIDTH*11,WIDTH*12,WIDTH*13,WIDTH*14,WIDTH*15
	DC.L WIDTH*16,WIDTH*17,WIDTH*18,WIDTH*19,WIDTH*20,WIDTH*21,WIDTH*22,WIDTH*23
	DC.L WIDTH*24,WIDTH*25,WIDTH*26,WIDTH*27,WIDTH*28,WIDTH*29,WIDTH*30,WIDTH*31

BARDAT	DC.L %11111111111111111111111111111111
	DC.L %11111111111111111111111111111111
	DC.L %11111111111111111111111111111111
	DC.L %01111111111111111111111111111110
	DC.L %01111111111111111111111111111110
	DC.L %01111111111111111111111111111110
	DC.L %00111111111111111111111111111100
	DC.L %00011111111111111111111111111000
	DC.L %00001111111111111111111111110000
	DC.L %00000111111111111111111111100000
	DC.L %00000011111111111111111111000000
	DC.L %00000001111111111111111110000000
	DC.L %00000000111111111111111100000000
	DC.L %00000000011111111111111000000000
	DC.L %00000000000111111111100000000000
	DC.L %00000000000011111111000000000000
	DC.L %00000000000000111100000000000000
	DC.L %00000000000000011000000000000000
	
	DC.L %00000000000000111100000000000000
	DC.L %00000000000011111111000000000000
	DC.L %00000000000111111111100000000000
	DC.L %00000000011111111111111000000000
	DC.L %00000000111111111111111100000000
	DC.L %00000001111111111111111110000000
	DC.L %00000011111111111111111111000000
	DC.L %00000111111111111111111111100000
	DC.L %00001111111111111111111111110000
	DC.L %00011111111111111111111111111000
	DC.L %00111111111111111111111111111100
	DC.L %01111111111111111111111111111110
	DC.L %01111111111111111111111111111110
	DC.L %01111111111111111111111111111110
	DC.L %11111111111111111111111111111111
	DC.L %11111111111111111111111111111111
	DC.L %11111111111111111111111111111111
BAREND

	;NOTE USE 
	;
	;/ FOR RIGHT HAND "
	;& FOR '
	;MAY ALSO USE !,.;?-"()
	
	
MESSAGE	;PUT YOUR TEXT HERE, JOHN.

	DC.B '     ........      '
	DC.B 'HELLO, GOODEVENING AND WELCOME, AND THANKS FOR READING THIS FAR INTO THE SCROLL!  '
	DC.B 'THIS IS THE SECOND DEMO SCREEN I&VE WRITTEN - AND IT AIN&T BAD - (BUT THEN I&M BIASED! )  '
	DC.B 'THE GREAT MUSIX IS BY MAD MAX, AND THIS FONT WAS PINCHED FROM AN EARLY OVERLANDERS SCREEN. '
	DC.B 'WELL, MEMORY IS SHORT, AND IF THIS IS TO RUN ON A 520 MACHINE, I HAD BETTER GET ON WITH IT, AS I DON&T KNOW HAVE MUCH HAS BEEN WRITTEN BEFORE THIS! '
	DC.B '(PROBABLY TOO MUCH!). SO, ONTO '
	DC.B 'THE BORING BIT; A FEW GREETINGS .. '
	DC.B 'SPECIAL GREATING TO STALIN OF FLEXIBLE FRONT, I&M GLAD YOU&S STILL CODING GREAT DEMOS.  '
	DC.B 'ALSO TO GRIFF OF THE RESISTANCE, I&M IMPROVING NO?    '
	DC.B 'HI TO JUST ABOUT EVERBODY ELSE IN THE ST WORLD, INCLUDING TCB, ALL MEMBERS OF THE UNION, OVERLANDERS, ALLIENCE, AND OF COURSE INNER CIRCLE. '
	DC.B 'WELL, THAT WAS QUICK!  '
	DC.B 'IF YOU WANT TO TALK TO ME, AND PLEASE (PLEASE) DO, THE ' 
	DC.B 'CONTACT ADDRESS IS  '
	DC.B 'M I K E,   7  F I N C H D A L E   C L O S E,  '
	DC.B 'C A R T E R T O N,  O X F O R D S H I R E, '
	DC.B 'O X 8  3 B T,  E N G L A N D.   '
	DC.B 'AND ONCE AGAIN ....... '
	DC.B 'M I K E,   7  F I N C H D A L E   C L O S E,  '
	DC.B 'C A R T E R T O N,  O X F O R D S H I R E, '
	DC.B 'O X 8  3 B T,  E N G L A N D.   '
	DC.B '    WELL, THE TIME HAS COME TO DO WHAT ALL SCROLLERS MUST EVENTUALLY DO, '
	DC.B ' WRAP .. (DOES ANYBODY ACTUALLY READ THESE THINGS? OBVIOUSLY!) BYE BYE .....                   '
	DC.B $FF
	EVEN

SCRTABLE	DC.L SCBUF1,SCBUF1,SCBUF2,SCBUF2
	
CHARTAB	DC.W $0010,$0080,$0000
	DC.W $0010,$0010,$0010,$0040,$0040,$0050,$0060,$0070,$0080,$2850
	DC.W $1400,$1410,$0090,$1430,$1440,$1450,$1460,$1470,$1480,$1490
	DC.W $2800,$2810,$2820,$2830,$2840,$2850,$2860,$2870,$2880,$2890
	DC.W $3C00,$3C10,$3C20,$3C30,$3C40,$3C50,$3C60,$3C70,$3C80,$3C90
	DC.W $5000,$5010,$5020,$5030,$5040,$5050,$5060,$5070,$5080,$5090
	DC.W $6400,$6410,$6420,$6430,$6440,$6450,$6460,$6470,$6480,$6490

RADIUS	DC.B 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1
	DC.B 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1
	DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	DC.B 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,0
	DC.B 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
	DC.B 2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3
	DC.B 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
	DC.B 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
	DC.B 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
	DC.B 4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5
	DC.B 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
	DC.B 5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6

STARTAB	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000
	DC.W $8000,$8000,$8000,$8000

SINTAB	INCBIN SINTAB.DAT

OLDPOS	DC.L OLDPOS1,OLDPOS2

MUSIC	INCBIN SWSPRITE.MUS
LOGO	INCBIN DEMOLOGO.DAT
LWAVE	INCBIN LOGOSINE.DAT
	DC.L $FFFFFFFF
	
SMILE	INCBIN SMILE.DAT
SWAVE	INCBIN BACKSINE.DAT
	DC.L $FFFFFFFF
BOX	INCBIN BOX.DAT
FONT	INCBIN FONT.NEO

	
     ; END OF STORED 0DATA
     
	SECTION BSS

	EVEN
	

RES  	DS.W 1

LBASE	DS.L 1
PBASE	DS.L 1
PALETTE	DS.W 16
SSP  	DS.L 1
SYNC	DS.L 1

WAVE	DS.L 1
WAVE2	DS.L 1

BARPOS	DS.L 1
BAR11	DS.W 1
BAR12	DS.W 1
BAR21	DS.W 1
BAR22	DS.W 1
BAR31	DS.W 1
BAR32	DS.W 1

MESPOS	DS.L 1
SDIREC	DS.W 1
SPOS	DS.L 1
SDIREC2	DS.W 1
SPOS2	DS.L 1

SCREENW	DS.L 1
SCREEND	DS.L 1

TOGGLE	DS.W 1
SCREENA	DS.L 1
SCREENB	DS.L 1

MFPSTORE	DS.L 7

XADDR	DS.L (77*2)
XTABLE	DS.L (320)

SMILEROT	DS.B WIDTH*32

LOGOCOPY	DS.B (8*77*9*16) ;$15A8

SCBUF1	DS.B $150*32
SCBUF2	DS.B $150*32
	DS.L 100
	
OLDPOS1	DS.L NSTARS
OLDPOS2	DS.L NSTARS

NEWPOS	DS.B (NSTARS+1)*6*128

SCREENS	DS.B $16000
		 		
     	
    