
	ORG	$06000

***************************************************
**						 **
**     ROLLING THUNDER -    THE AMIGA VERSION	 **
** 						 **
**     D.CAMPBELL             TIERTEX LIMITED	 **
**						 **
***************************************************

*
*	START OF THE REAL PROGRAM
*	
START	LEA	DATAS,A1
	MOVE.L	A0,(A1)				SAVE START OF DATA
	MOVE.L	#8,A2				START WITH BUS ERRORS
	MOVE	#48,D0
	LEA	INTERR,A1
*STARTL	MOVE.L	A1,(A2)+
*	DBRA	D0,STARTL
	MOVE.L	#SSPA7,SP			JUST IN CASE
	MOVE.L	#SSPA7,A7			RE-ITTERATE STACK
	LEA	BLACK,A0
	BSR	SETCOL
	LEA	STACKP,A0
	MOVE.L	A7,(A0)
	BRA	START2

	EVEN
STACKP	DC.L	0
COLOUR3	dc.w	$050
COLOURX	DC.W	$531

INTERR	MOVEM.L	D0/A0-A2,-(SP)
	LEA	COLOURC,A0
	BSR	SETCOL
	MOVEM.L	(SP)+,D0/A0-A2
	RTE
COLOURC	DC.W	$220				DARK YELLOW


*
*	MAIN EQUATES
*
PROGRAM	EQU	$06000
CUSTOM	EQU	$DFF000
BPLCON0	EQU	$100
BPLCON1	EQU	$102
BPL1MOD	EQU	$108
DDFSTRT	EQU	$092
DDFSTOP	EQU	$094
DIWSTRT	EQU	$08E
DIWSTOP	EQU	$090
VPOSR	EQU	$004
COLOURS	EQU	$180
DMACON	EQU	$096
COP1LCH	EQU	$080
COPJMP1	EQU	$088
INTENA	EQU	$09A				INTERRUPT ENABLE MASK
INTREQ	EQU	$09C
JOYDAT1	EQU	$00C
USPA7	EQU	$02000		AT 8K
SSPA7	EQU	$04000		AT 16K
SCREEN1	EQU	$68000
SCREEN2	EQU	$70000
SCREEN3	EQU	$78000		TRI SCREEN (C) TIERTEX LTD
MAIN	EQU	$10000
SPRITED	EQU	$30000	
REVERSE	EQU	$40000
STACK	EQU	$50000		FOR NOW OK			
SPRLEN	EQU	63840		
NSPRITE	EQU	95		95*42*16 = 63840
CHRSET	EQU	$18000		FOR NOW
CHRLEN	EQU	85200
FIRST	EQU	PROGRAM		AS WAS BEFORE
MAP1	EQU	CHRSET+51200
MAP2	EQU	CHRSET+60800
MAP3	EQU	CHRSET+71200
MAP4	EQU	CHRSET+74400
MAP5	EQU	CHRSET+82000
MAPE	EQU	CHRSET+85200

SS	EQU	$17F90			IN SAVED SCREEN SOMWHERE
SONOFF	EQU	SS+4			SOUND ON-0 OFF-255
PLAYERS	EQU	SS+6			TOTAL NUMBER OF PLAYERS	
PLAYWHO	EQU	SS+8			CURRENT PLAYERS
SCREENX	EQU	SS+10			ONLY USED BY NEWSC AND SCROLL
SCREENY	EQU	SS+12
SCRX	EQU	SS+14			2*VALUES AS USED IN OTHER CONVS.
SCRY	EQU	SS+16
SCROLLB	EQU	SS+26
PARAMS	EQU	SS+28
HALF	EQU	SS+30
HALFC	EQU	SS+32
MOVCTR	EQU	SS+34
SPX	EQU	SS+38
SPY	EQU	SS+40
SCX	EQU	SS+42
SCY	EQU	SS+44
OFFSET	EQU	SS+46
HIGHT	EQU	SS+48
PLANES	EQU	SS+50	
BLOCKD	EQU	SS+52
BLOCKL	EQU	SS+54
BLOCKR	EQU	SS+56
BLOCKDL	EQU	SS+58
BLCKDL	EQU	SS+58			SPELLING ERRORS
BLOCKDR	EQU	SS+60
BLCKDR	EQU	SS+60			DITTO
RHORZ	EQU	SS+62
RVERT	EQU	SS+64
RDIR	EQU	SS+66
NOISE	EQU	SS+68
CHEAT	EQU	SS+70
PIXEL	EQU	SS+72
LINE	EQU	SS+74
TPIXEL	EQU	SS+76
TLINE	EQU	SS+78


MWIDE	EQU	400			2*200 ACROSS

	EVEN
CURMAP	DC.L	0			FOR NOW
BMAP	DC.L	0
DMAP	DC.L	0
PMAP	DC.L	0
WMAP	DC.L	MAP1,MAP2,MAP3,MAP4,MAP5,MAP1,MAP2,MAP3,MAP4,MAP5

*
*	SCORES PLAYER 1 AND PLAYER 2, 1ST THREE BYTES NAME
*
SCORE1	DC.B	"000000",0
SCORE2	DC.B	"000000",0
HIGH	DC.B	"010000",0
BULLET1	DC.B	"000",0
BULLET2	DC.B	"000",0
MGBLT1	DC.B	"000",0
MGBLT2	DC.B	"000",0
MEN1	DC.B	"0",0
MEN2	DC.B	"0",0
TIME	DC.B	"000",0
LIFE	DC.B	"ZZZZZZ",0
	EVEN
LIFEC	DC.W	0,0
*
*	GENERAL BITS AND BOBS
*	IF D0 IS LOADED WITH PLAYWHO 0 OR 2, THEN USE (A0,D0.W)
*
	EVEN
SHEET	DC.W	0,0	CURRENT SHEET
BONE	DC.W	0,0	BONUS INDICATORS
HALFW	DC.W	0,0	HALFWAY OR NOT
NHALF	DC.W	0,0	NEXT HALF WAY POINT
IMPOSS	DC.W	0,0	PASSED AREAD 10

*
*	MAIN VARIABLES AND STORES
*
	EVEN
SCREEN	DC.L	0
WORKS	DC.L	0
INTER	DC.L	0			INTERMEDIATE SCREEN
DATAS	DC.L	0

*
*	1ST LEVEL PROGRAM LOOP
*
START2	LEA	STACKP,A0
	MOVE.L	(A0),A7			SET-UP STACK
	BSR	COLD			COLD RESET
RESET	LEA	STACKP,A0
	MOVE.L	(A0),SP			CAN JUMP HERE ANY TIME/PLACE
GAMEL	BSR	INTRO			INTRO SHEET
	BSR	WARM			NEW GAME START

	MOVE	#255,CHEAT		CHEAT MODE ON !

GAMELS	BSR	GO			NEW GO START
INGAMEL	BSR	PLAY
	LEA	TABLE,A6
	CMPI	#128,STATUS(A6)
	BEQ	ING1
	BSR	LOSLIFE
	BRA	GAMELS
ING1	BSR	INCLEV
	BRA	GAMELS

*
*	COLD INTIALISATION - RUN ONLY ONCE
*
COLD	nop
*	nop	BSR	VECTORS			DO VECTORS
	LEA	MAIN,A0
	LEA	DATAS,A6
	MOVE.L	(A6),A1
	ADD.L	#32768+35,A1		GET RID OF DEGAS BIT odd i know
	MOVE	#31999,D0		A SCREEN WORTH
RELOC2	MOVE.B	(A1)+,(A0)+
	DBRA	D0,RELOC2
	MOVE.L	(A6),A1
	ADD.L	#32044+32768,A1
	MOVE	#CHRLEN/2-1,D0
	LEA	CHRSET,A0
RELOC3	MOVE	(A1)+,(A0)+
	DBRA	D0,RELOC3
	MOVE.L	(A6),A1
	ADD.L	#32044+CHRLEN+32768,A1
	LEA	SPRITED,A0
	MOVE	#SPRLEN/2-1,D0
RELOC4	MOVE	(A1)+,(A0)+
	DBRA	D0,RELOC4		ALL RELOCATED
	MOVE.L	#SS,A0
	MOVE	#100,D0
COLD0	CLR	(A0)+
	DBRA	D0,COLD0		RESET ALL VARIABLES IN ABS STORE
	LEA	CUSTOM,A0		SET UP SCREEN PARAMS
	MOVE	#$4200,BPLCON0(A0)
	MOVE	#$0,BPLCON1(A0)
	MOVE	#$0,BPL1MOD(A0)
	MOVE	#$0038,DDFSTRT(A0)
	MOVE	#$00D0,DDFSTOP(A0)
	MOVE	#$2C81,DIWSTRT(A0)
	MOVE	#$F4C1,DIWSTOP(A0)
	LEA	COPPER1,A6
	MOVE.L	A6,COP1LCH(A0)		SET-UP FIRST COPPER
	MOVE	COPJMP1(A0),D0		STROBE
	MOVE	#$8380,DMACON(A0)	SET DMA CORRECTLY
	CLR	NOISE
	LEA	SCREEN,A1
	MOVE.L	#SCREEN1,0(A1)
	MOVE.L	#SCREEN2,4(A1)
	MOVE.L	#SCREEN3,8(A1)
	BSR	GETADD			GENERATE SPRITE ADDRESSES
	BSR	REVTAB			GENERATE REV SPRITES
	LEA	PLAYERS,A0
	MOVE.W	#00,(A0)		ONE PLAYER MODE
	LEA	SONOFF,A0
	MOVE.W	#01,(A0)		SOUND INITIALLY OFF
	MOVE	#500,D0
	BSR	DELAY
	LEA	SONOFF,A0
	CLR	(A0)			PUT SOUND ON
	BSR	CLEARK
BODGE	LEA	MAP1,A0			GET RID OF CHRS WITH > VAL 400
BODGE1	CMPI	#400,(A0)+
	BCS	BODGE2
	MOVE	#61,-2(A0)
BODGE2	CMP.L	#MAPE,A0
	BCS	BODGE1
	RTS

*
*	WARM RESET - EXECUTE EVERY NEW GAME ONLY ONCE
*
WARM	LEA	MEN1,A1
	MOVE.B	#"5",(A1)
	MOVE.B	#"5",2(A1)		SET UP STRINGS
	LEA	SHEET,A0
	MOVE	#0,0(A0)		SHEETs
	MOVE	#0,2(A0)
	LEA	HALFW,A0
	MOVE	#0,0(A0)
	MOVE	#0,2(A0)
	LEA	SCORE1,A0
	MOVE	#5,D0
WARM1	MOVE.B	#"0",0(A0,D0.W)
	MOVE.B	#"0",7(A0,D0.W)
	DBRA	D0,WARM1
	LEA	PLAYWHO,A0		PLAYERS SET UP IN INTRO
	MOVE	#0,(A0)			SET UP PLAYER ONE PLAYS FIRST
	BSR	CLEARK
	CLR.L	SCRX
	LEA	SHEET,A0
	CLR	0(A0)
	CLR	2(A0)
	LEA	IMPOSS,A0
	CLR	0(A0)
	CLR	2(A0)
	CLR	HALF
	LEA	BONE,A0
	CLR	0(A0)
	CLR	2(A0)
	LEA	BULLET1,A0
	MOVE.B	#"0",0(A0)		RESET ALL BULLETS ETC
	MOVE.B	#"0",4(A0)
	MOVE.B	#"5",1(A0)
	MOVE.B	#"5",5(A0)
	MOVE.B	#"0",2(A0)
	MOVE.B	#"0",6(A0)
	MOVE.B	#"0",8(A0)
	MOVE.B	#"0",12(A0)
	MOVE.B	#"0",9(A0)
	MOVE.B	#"0",13(A0)
	MOVE.B	#"0",10(A0)
	MOVE.B	#"0",14(A0)
	RTS

*
*	SHEET INITIALISATION, D0 HOLDS SCREEN NUMBER
*	SET UP ALL PARAMS.  D7 HOLDS SPRITE RESET TABLE
* 
GO	BSR	GOPOINT				SET UP POINTERS
	LEA	BLACK,A0
	BSR	SETCOL
	LEA	LIFEC,A0			
	CLR	(A0)				CLEAR LIFE FLAG
	MOVE	#6,2(A0)			SAVE LIFE VALUE THERE	
	LEA	BATC,A0
	CLR	(A0)				BAT PLCE CTR
	LEA	OTHEC,A0
	CLR	(A0)
	CLR	2(A0)				LION\PANTH PLCE CTRS
	BSR	LFD11				RESET LIFE STRING
	BSR	LMAIN
	BSR	NFLIPS
	BSR	LMAIN
	BSR	NFLIPS
	BSR	LMAIN
	BSR	NFLIPS
	BSR	UPDATE
	LEA	BATC,A0				CLEAR BAT PLACE COUNTER
	CLR	(A0)
	MOVE	SHEET,D0
	LSL	#2,D0				* 4
	LEA	WMAP,A0
	MOVE.L	0(A0,D0.W),A0			SET UP CURRENT MAP
	LEA	CURMAP,A1
	MOVE.L	A0,(A1)
	LEA	TIME,A0
	MOVE.B	#"1",0(A0)
	MOVE.B	#"5",1(A0)
	MOVE.B	#"0",2(A0)
	LEA	BULLET1,A0
	TST	PLAYWHO
	BEQ	GOZ
	ADDQ.L	#4,A0				; ADVENTUROUS ( ??? )
GOZ	CMPI.B	#"0",(A0)
	BNE	GOZ1
	CMPI.B	#"5",1(A0)
	BCC	GOZ1
	MOVE.B	#"5",1(A0)
	MOVE.B	#"0",2(A0)
GOZ1	BSR	UPDATE
	BSR	SINIT				; INITIATE MAN AND SCREEN XY
	BSR	BADINT				; INITIALISE BADDIES
	BSR	DRAWS
	BSR	MESS1				; GET READY MESSAGE
	LEA	COLOUR1,A0
	BSR	SETCOL
	BSR	GETREAD
	RTS
GOPOINT	LEA	BMAP,A1
	LEA	DMAP,A2
	LEA	PMAP,A4
	MOVE	SHEET,D0
	CMPI	#5,D0
	BCS	GO2
	SUB	#5,D0
GO2	TST	D0
	BNE	GOA
	LEA	POINT1,A3
	MOVE.L	A3,(A4)
	LEA	BMAP1,A3
	MOVE.L	A3,(A1)
	LEA	DMAP1,A3
	MOVE.L	A3,(A2)
	BSR	IDOOR
	RTS
GOA	CMPI	#1,D0
	BNE	GOB
	LEA	POINT2,A3
	MOVE.L	A3,(A4)
	LEA	BMAP2,A3
	MOVE.L	A3,(A1)
	LEA	DMAP2,A3
	MOVE.L	A3,(A2)
	BSR	IDOOR
	RTS
GOB	CMPI	#2,D0
	BNE	GOC
	LEA	POINT3,A3
	MOVE.L	A3,(A4)
	LEA	BMAP3,A3
	MOVE.L	A3,(A1)
	LEA	DMAP3,A3
	MOVE.L	A3,(A2)
	BSR	IDOOR
	RTS
GOC	CMPI	#3,D0
	BNE	GOD
	LEA	POINT4,A3
	MOVE.L	A3,(A4)
	LEA	BMAP4,A3
	MOVE.L	A3,(A1)
	LEA	DMAP4,A3
	MOVE.L	A3,(A2)
	BSR	IDOOR
	RTS
GOD	LEA	POINT5,A3
	MOVE.L	A3,(A4)
	LEA	BMAP5,A3
	MOVE.L	A3,(A1)
	LEA	DMAP5,A3
	MOVE.L	A3,(A2)
	BSR	IDOOR
	RTS

*
*	MAIN PLAY CALL, DEPENDANT ON TYPE PLAY1 OR PLAY2 FOLLOWED
*
PLAY	BSR 	BREAK			CHECK BREAK KEYS
PLAY1	BSR	DRAWS
	BSR	CENTER
	MOVE	#$61,D0			CHECK TEMP. GET OUT
	BSR	SCAN
	BEQ	PLAY1Z
	LEA	TABLE,A0
	MOVE	#254,STATUS(A0)		KILL KEY
PLAY1Z	BSR	READKEY			UPDATE INDIES DIR WORD
	BSR	PLACE			GENERAL PLACE GAURD ROUTINE
	BSR	MOVE			GENERAL MOVE INSTRUCTION
	BSR	CLOCK			CLOCK UPDATE
	BSR	LIFED			LIFE BAR UPDATE
	bsr	TESTL
	LEA	TABLE,A0
	CMPI	#255,STATUS(A0)		A DEAD INDIE
	BEQ	PLAY1E
	CMPI	#128,STATUS(A0)		A COMPLETED INDIE
	BEQ	PLAY1E	
	BRA	PLAY
PLAY1E	RTS


TESTL	MOVE	#$62,D0
	BSR	SCAN
	BEQ	TESTLZ
	BSR	MON
TESTLZ	MOVE	#$17,D0
	BSR	SCAN
	BEQ	TESTLA
	LEA	TABLE,A6
	MOVE	#128,STATUS(A6)
	RTS
TESTLA	MOVE	#$4B,D0
	BSR	SCAN
	BEQ	TESTLAA
	CLR	CHEAT
TESTLAA	MOVE	#$4D,D0
	BSR	SCAN
	BEQ	TESTLB
	MOVE	#255,CHEAT
TESTLB	rts
	LEA	TABLE,A6
	MOVE	STATUS(A6),D0
	ADDI	#"0",D0
	LEA	HIGH,A0
	MOVE.B	D0,(A0)
	LEA	BATC,A1
	MOVE	(A1),D0
	ADDI	#"0",D0
	MOVE.B	D0,1(A0)
	LEA	OTHEC,A1
	MOVE	(A1),D0
	ADDI	#"0",D0
	MOVE.B	D0,2(A0)
	MOVE	2(A1),D0
	ADDI	#"0",D0
	MOVE.B	D0,3(A0)
	BSR	UPDATE
	RTS
TESTLS	MOVE.B	#"0",1(A0)
	TST	D0
	BEQ	TESTLS1
	MOVE.B	#"1",1(A0)
TESTLS1	ADDQ.L	#1,A0
	RTS

*
*	GET READY SEQUENCE
*
GETREAD	LEA	MEN1,A0
	TST	PLAYWHO
	BEQ	GETR1
	LEA	MEN2,A0
GETR1	SUBQ.B	#1,(A0)
	BSR	UPDATE			SET MEN LEFT  !
	MOVE	#15,D0
	MOVE	#1,D1
GETRL	MOVEM	D0-D1,-(SP)
	LEA	FLICK,A0
	MOVE	D1,(A0)
	BSR	SCOREP
	MOVE.W	#130,D0
	BSR	DELAY
	BSR	BREAK
	MOVEM	(SP)+,D0-D1
	EORI	#1,D1
	DBRA	D0,GETRL
	LEA	FLICK,A0
	CLR	(A0)
	BSR	SCOREP
	RTS

INTRO	LEA	BLACK,A0
	BSR	SETCOL
	BSR	LMAIN
	BSR	NFLIPS
	BSR	LMAIN
	BSR	NFLIPS
	BSR	LMAIN
	BSR	NFLIPS
	BSR	LMAIN
	BSR	NFLIPS			4 TIMES SHOULD BE ULTRA SAFE
	LEA	CURMAP,A0
	MOVE.L	#MAP1,(A0)		SAVE MAP IN CUR MAP
	CLR	SCRX
	CLR	SCRY			WILL BE SET TO CONTROL PANEL
	CLR	PIXEL
	CLR	LINE			TOP OF MESSAGE
	BSR	UNDRAW
	LEA	COLOURI,A0
	BSR	SETCOL
	BSR	NFLIPS
INTROL	BSR	READKEY
	LEA	KEYTAB,A0
	TST.B	$02(A0)
	BEQ	INTRO1
	CLR	PLAYERS
	RTS
INTRO1	TST.B	$03(A0)
	BEQ	INTRO2
	MOVE	#1,PLAYERS
	RTS
INTRO2	BSR	UNDRAW			DRAW WITHOUT FLIPS
	BSR	SCROLLM
	BSR	ANIMS
	BSR	NFLIPS
	MOVE	#25,D0
	BSR	DELAY
	BRA	INTROL

*
*	LOSS OF LIFE ROUTINE  ,RET NZ IF MORE TO COME
*
LOSLIFE TST	PLAYERS
	BNE	LOS2PL				2 PLAYER LOS LIFE
	LEA	MEN1,A0
	CMPI.B	#"0",(A0)
	BEQ	GAMEND
	RTS
LOS2PL	TST	PLAYWHO
	BNE	LOSL1
	LEA	MEN2,A0
	CMPI.B	#"0",(A0)
	BEQ	LOSET
	MOVE	#2,PLAYWHO		SWAP PLAYERS
	RTS	
LOSL1	LEA	MEN1,A0
	CMPI.B	#"0",(A0)
	BEQ	LOSET
	CLR	PLAYWHO
	RTS
LOSET	LEA	MEN1,A0
	CMPI.B	#"0",(A0)
	BEQ	LOSET1
	CLR	PLAYWHO
	RTS
LOSET1	LEA	MEN2,A0
	CMPI.B	#"0",(A0)
	BEQ	GAMEND
	MOVE	#2,PLAYWHO
	RTS

	EVEN
BLACK	DC.W	$000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
*
*	THE END OF GAME SEQUENCE
*
GAMEND	BSR	NEWHI
	MOVE	#10,LINE		NO LAUGHING
	LEA	COLOURI,A0
	BSR	SETCOL
	MOVE	#34,D7
GAMENDL	MOVE	D7,-(SP)
	BSR	UNDRAW			DRAW WITHOUT FLIPS
	BSR	ANIMS
	BSR	FLIPS
	MOVE.L	#160*12*8+48,A0
	LEA	GSTR1,A1
	BSR	SPRINT
	MOVE	#25,D0		2.5 SECONDS
	BSR	DELAY
	MOVE	(SP)+,D7
	DBRA	D7,GAMENDL
	BRA	RESET
GSTR1	DC.B	'   GAME  OVER   ',0

*
*	INCREMENT LEVEL PROCEDURE
*
INCLEV	BSR	BONUS
	LEA	HALFW,A0
	MOVE	PLAYWHO,D7
	CLR	0(A0,D7)
	MOVE	#10,LINE		NO LAUGHING
	LEA	COLOURI,A0
	BSR	SETCOL
	MOVE	#20,D7
INCLOOP	MOVE	D7,-(SP)
	BSR	UNDRAW			DRAW WITHOUT FLIPS
	BSR	ANIMS
	BSR	FLIPS
	MOVE.L	#160*12*8+48,A0
	LEA	INCSTR1,A1
	MOVE	PLAYWHO,D7
	LSR	#1,D7
	ADD.B	#"1",D7
	MOVE.B	D7,11(A1)
	BSR	SPRINT
	MOVE.L	#160*13*8+48,A0
	LEA	INCSTR2,A1
	MOVE.B	#" ",5(A1)
	MOVE	SHEET,D7
	ADD	#"1",D7
	MOVE.B	D7,6(A1)
	CMPI.B	#"9"+1,D7
	BNE	INLEV1
	MOVE.B	#"1",5(A1)
	MOVE.B	#"0",6(A1)
INLEV1	BSR	SPRINT
	MOVE	#25,D0		1.5 SECONDS TOTAL
	BSR	DELAY
	MOVE	(SP)+,D7
	DBRA	D7,INCLOOP
	ADD	#1,SHEET
	CMPI	#10,SHEET
	BNE	INCLEVB
	CLR	SHEET
	LEA	IMPOSS,A0
	MOVE	PLAYWHO,D7
	MOVE	#255,0(A0,D7)		IMPOSSIBLE FROM NOW ON IN
INCLEVB	MOVE	PLAYWHO,D7
	LEA	MEN1,A0
	TST	D7
	BEQ	INCLEVA
	LEA	MEN2,A0
INCLEVA	ADDQ.B	#1,(A0)
INCLEVE	RTS
INCSTR1	DC.B	'    PLAYER x    ',0
INCSTR2	DC.B	'AREA XX COMPLETE',0

*
*	BREAK TEST
*
	EVEN
PAUSET	DC.W	0,0,0,0
BREAK	MOVEM.L	A0-A1,-(SP)
	LEA	KEYTAB,A0
	LEA	PAUSET,A1
	TST.B	$43(A0)
	BEQ	BREAKX1
BREAKX2	TST.B	$44(A0)				PAUSE KEY F9/F10
	BEQ	BREAKX2
BREAKX1	TST.B	$3C(A0)
	BEQ	BREAK1
	TST	4(A1)
	BNE	BREAKB
	MOVE	#1,4(A1)
	LEA	SONOFF,A0
	EORI	#1,(A0)
	BRA	BREAKB
BREAK1	CLR	4(A1)
BREAKB	TST.B	$01(A0)
	BEQ	NOBREAK
	TST.B	$2A(A0)			SHIFT AND ESC TO BREAK
	BEQ	NOBREAK
	
	BRA	RESET			EVENTUALLY OK.

NOBREAK	MOVEM.L	(SP)+,A0-A1
	RTS

*
*	KEYBOARD TABLE
*	
	EVEN
KEYTAB	DS.B	300

*
*	CLEAR THE KEYBOARD TABLE
*
CLEARK	LEA	KEYTAB,A0
	MOVE.W	#50,D0
CLEARK1	CLR.W	(A0)+
	DBRA	D0,CLEARK1
	RTS

*
*	KEYBOARD INTERRUPT ROUTINE
*	CLEVER BIT OF CODE.
*
	EVEN
LASTKEY	DC.W	0
KEYNUM	DC.W	0
WAITKB	DC.W	0,0			SECOND WORD IS THAT KEY
*
*	ASCII TRANSLATION TABLE A-Z, SPACE, ENTER, BS, DEL  30-NoS
*
ASCII	DC.B	$1E,$30,$2E,$20,$12,$21,$22,$23,$17,$24
	DC.B	$25,$26,$32,$31,$18,$19,$10,$13,$1F,$14
	DC.B	$16,$2F,$11,$2D,$15,$2C,$39,$1C,$0E,$53	

*
KEYINT	MOVEM.L	D0-D7/A0-A6,-(SP)
KEYTOP	LEA	$FFFC00,A1
	MOVE.B	(A1),D2
	BTST	#7,D2
	BEQ	KEYEND
	BTST	#0,D2
	BEQ	KEYEND
	LEA	KEYTAB,A3
	LEA	WAITKB,A4		REGISTER A KEY PRESSED
	LEA	LASTKEY,A5
	ADD.W	#1,(A4)
	MOVE.B	2(A1),D0
*		CMPI.B	#$FE,D0		 SUSPEND THE JOY 0 OPTION
*		BEQ	JOYPACK
	CMPI.B	#$FF,D0
	BNE	KEYS1
JOYPACK	MOVE	#$6363,(A5)			MARK A KEYBOARD PACKET
	BRA	KEYEND
KEYS1 	CMPI	#$6363,(A5)
	BNE	KEYNORM

JOYSTK	MOVE	#0,(A5)
	CLR.B	$10(A3)				CLEAR QAOP
	CLR.B	$1E(A3)
	CLR.B	$18(A3)
	CLR.B	$19(A3)
	CLR.B	$1C(A3)
	CLR.B	$39(A3)
	MOVE	#$FF,D1
	BTST	#0,D0
	BEQ	JOYS1
	MOVE.B	D1,$10(A3)
JOYS1	BTST	#1,D0
	BEQ	JOYS2
	MOVE.B	D1,$1E(A3)
JOYS2	BTST	#2,D0
	BEQ	JOYS3
	MOVE.B	D1,$18(A3)
JOYS3	BTST	#3,D0
	BEQ	JOYS4
	MOVE.B	D1,$19(A3)
JOYS4	BTST.B	#7,D0
	BEQ	KEYEND
	MOVE.B	D1,$1C(A3)
	MOVE.B	D1,$39(A3)
	BRA	KEYEND

KEYNORM	MOVE	#0,(A5)
	MOVEQ	#0,D1
	BTST	#7,D0
	BNE	KEYINT1
	MOVE	#$FF,D1
	LEA	WAITKB,A4
	MOVE	D0,2(A4)		PUT IN LAST KEY PRESSED
KEYINT1	ANDI.W	#$7F,D0
	MOVE.B	D1,0(A3,D0.W)
KEYEND	BTST	#4,$FFFA01
	BEQ	KEYTOP
	BCLR	#6,$FFFA11
	MOVEM.L	(A7)+,D0-D7/A0-A6
	RTE

*
*	DELAY IN MS, D0 HOLD ms
*
DELAY	MOVE	#799,D7
DELAY1	DBRA	D7,DELAY1
	DBRA	D0,DELAY
	RTS

*
*	READKEY - COVERT FROM SCAN TABLE TO DIR
*

READKEY	LEA	KEYTAB,A0
	CLR.B	$02(A0)				1
	CLR.B	$03(A0)				2
	CLR.B	$1C(A0)				FIRE, (RET)
	CLR.B	$39(A0)				FIRE, (SPACE)
	CLR.B	$10(A0)				Q
	CLR.B	$1E(A0)				A
	CLR.B	$18(A0)				O
	CLR.B	$19(A0)				P
	CLR.B	$17(A0)
	MOVE.B	#$01,$BFE2FF			DATA DIRECTION
	MOVE.B	$BFE0FF,D0
	MOVE	D0,D1
	ANDI.B	#$40,D1
	BNE	NOFIR1
	MOVE.B	#$FF,$17(A0)			INC LEVEL ON MOUSE 1 BUTTON
NOFIR1	ANDI.B	#$80,D0				PORT 2 FIRE BUTTON
	BNE	NOFIRE
	MOVE.B	#$FF,$02(A0)
	MOVE.B	#$FF,$03(A0)
	MOVE.B	#$FF,$1C(A0)
	MOVE.B	#$FF,$39(A0)
NOFIRE	LEA	CUSTOM,A0
	MOVE	JOYDAT1(A0),D0
	LEA	KEYTAB,A0
	MOVE	#9,D1
	BTST	D1,D0
	BEQ	NOLEFT
	MOVE.B	#$FF,$18(A0)
NOLEFT	BTST	#1,D0
	BEQ	NORIGHT
	MOVE.B	#$FF,$19(A0)
NORIGHT	MOVE	D0,D1
	LSR	#1,D1
	EOR	D0,D1
	BTST	#0,D1
	BEQ	NODOWN
	MOVE.B	#$FF,$1E(A0)
NODOWN	ANDI	#$100,D1		EIGTH BIT
	BEQ	NOUP
	MOVE.B	#$FF,$10(A0)
NOUP	MOVEQ	#0,D1
	MOVE	#$19,D0
	BSR	SCAN
	BEQ	READK1
	BSET	#0,D1
READK1	MOVE	#$18,D0
	BSR	SCAN
	BEQ	READK2
	BSET	#1,D1
READK2	MOVE	#$1E,D0
	BSR	SCAN
	BEQ	READK3
	BSET	#2,D1
READK3	MOVE	#$10,D0
	BSR	SCAN
	BEQ	READK4
	BSET	#3,D1
READK4	MOVE	#$39,D0
	BSR	SCAN
	BEQ	READKE
	BSET	#4,D1
READKE	LEA	TABLE,A0
	MOVE.W	DIR(A0),D0
	ANDI	#$80,D0
	OR	D0,D1
	MOVE.W	D1,DIR(A0)		ASSUMING INDIE IS SPRITE 0
	RTS	

*
*	WAITS FOR A KEY TO BE PRESSED
*
WAITK	LEA	WAITKB,A4
	MOVE.W	(A4),D0
WAITKL	CMP.W	(A4),D0
	BEQ	WAITKL
	RTS

*
*	SCAN THE KEYBOARD- CHECK IF SCAN CODE D0 IS PRESSED
*	NZ YES, Z NO
*	
SCAN	MOVE.L	A0,-(SP)
	LEA	KEYTAB,A0
	ANDI.W	#$FF,D0
	MOVE.B	0(A0,D0.W),D0
	MOVE.L	(SP)+,A0
	ANDI.B	#$FF,D0
	RTS


*
*	INCREMENT SCORES   D0-HOLDS
*	10'S & 100'S AND 1000'S ROUTINES
*       
INCTEN	MOVE.W	#4,D1
	BRA	INCGEN
INCHUND	MOVE.W	#3,D1
	BRA	INCGEN
INCTHOU	MOVE.W	#2,D1
INCGEN	LEA	SCORE1,A2
	TST	PLAYWHO
	BEQ	INCGEN2
	LEA	SCORE2,A2
INCGEN2	MOVE	D1,D2				SAVE	D1
INCG21	CMPI.B	#" ",0(A2,D2)
	BNE	INCG22
	MOVE.B	#"0",0(A2,D2)
INCG22	ADDQ	#1,D2
	CMPI	#7,D2
	BNE	INCG21
	MOVE	D1,D2
	BSR	INCGEN3
	MOVE	D2,D1
	SUBQ.W	#1,D0
	BNE	INCGEN2
	RTS
INCGEN3	ADDQ.B	#1,0(A2,D1.W)
	CMPI.B	#"!",0(A2,D1.W)		I.E. IT WAS A SPACE
	BNE	INCGEN5
	MOVE.B	#"1",0(A2,D1.W)
	RTS
INCGEN5	CMPI.B	#":",0(A2,D1.W)
	BNE	INCGEN4
	MOVE.B	#"0",0(A2,D1.W)		
	SUBQ.W	#1,D1
	BPL	INCGEN3			TEST FOR UNDERFLOW CONDITION
INCGEN4	RTS

INCR	TST.B	0(A0)
	BNE	INCR0
	RTS
INCR0	ADD.B	D0,0(A0)
	CMPI.B	#"9"+1,0(A0)
	BCC	INCR1
	RTS
INCR1	MOVE.B	#"0",0(A0)
	SUBQ.L	#1,A0
	MOVEQ	#1,D0
	BRA	INCR

DECR	TST.B	0(A0)
	BNE	DECR0
	RTS
DECR0	SUB.B	D0,0(A0)
	CMPI.B	#"0",0(A0)
	BCS	DECR1
	RTS
DECR1	MOVE.B	#"9",0(A0)
	SUBQ.L	#1,A0
	MOVEQ	#1,D0
	BRA	DECR

REVTAB	MOVE	#NSPRITE-1,D7			DO IT FOR 95 SPRITES
	LEA	SPRITED,A0
	LEA	REVERSE,A1
REV1	MOVE	#41,D6			SIZE OF SPRITE
REV2	MOVE	#0,D0
	MOVE	#8,D1			RIGHT AND LEFT
	BSR	ROTATE
	BSR	ROTATE
	BSR	ROTATE
	BSR	ROTATE
	MOVE	#8,D0
	MOVE	#0,D1
	BSR	ROTATE
	BSR	ROTATE
	BSR	ROTATE
	BSR	ROTATE
	ADD.L	#16,A0
	ADD.L	#16,A1
	DBRA	D6,REV2
	DBRA	D7,REV1
	RTS
ROTATE	MOVE	0(A0,D0),D3
	MOVE	#15,D5
ROT1	LSL	#1,D3
	ROXR	#1,D4
	DBRA	D5,ROT1
	MOVE	D4,0(A1,D1)
	ADD	#2,D0
	ADD	#2,D1
	RTS

LIFED	TST	CHEAT
	BNE	LIFEDE
	LEA	LIFEC,A0
	TST	2(A0)
	BEQ	LIFEDE
	TST	(A0)
	BEQ	LIFEDE
	SUBQ	#1,2(A0)
	TST	2(A0)
	MOVE	#7,NOISE
	BEQ	LFD1
	CMPI	#3,2(A0)
	BEQ	LFD1
	BRA	LFD11
LFD1	CLR	(A0)				; FLAG OFF
LFD11	MOVE.B	#"9"+7,D1
	MOVE	2(A0),D0
	LEA	LIFE,A0
	MOVE	#5,D2
LFD2	TST	D0
	BNE	LFD3
	MOVE.B	#" ",D1
LFD3	MOVE.B	D1,(A0)+
	SUBQ	#1,D0
	DBRA	D2,LFD2
	BRA	UPDATE
LIFEDE	RTS

NEWHI	LEA	SCORE1,A0
	BSR	NEWHI1
	LEA	SCORE2,A0
NEWHI1	LEA	HIGH,A1
	CLR	D0
NEWHI2	MOVE.B	0(A1,D0),D1
	CMP.B	0(A0,D0),D1
	BCS	NEWHI3
	BNE	NEWHIE
	ADDQ	#1,D0
	CMPI	#6,D0
	BNE	NEWHI2
NEWHIE	RTS
NEWHI3	MOVEQ	#5,D0
NEWHI4	MOVE.B	(A0)+,(A1)+
	DBRA	D0,NEWHI4
	RTS
	INCDIR	"DF1:"
	EVEN
	INCLUDE	SCREEN.S
	EVEN
	INCLUDE ANIMATE.S
	EVEN
	INCLUDE	MOVING.S
	EVEN
	INCLUDE FOOTING.S
	EVEN
	INCLUDE	SOUND.S
	EVEN
	INCLUDE MASK.S
	EVEN
	INCLUDE	DATA.S
	EVEN
	
	DC.B	"END OF ROLLING THUNDER"
	DC.B	"TIERTEX LTD. 1987 DONALD CAMPBELL"

