* Please note: this intro was writed in hurry
* and is absolute unoptimized!!!

* 3D TUNEL 1 with texturemaping
* by -XI-/Satantronic
* save 29 16.03.2002 o 13:06
* Final party version ;)

* !!!!see down for texture convertor...

*	OUT N

	ORG $2007

	LDA #0	  ;Clr palete
	TAX
	STA $22F

	LDY #$40	  ;Clr variables
INI2	STA $80,Y
	DEY
	BPL INI2   ;END Clr variables

	LDA #CAS:L ;Inic Timer 1
	STA $226
	LDA #CAS:H
	STA $227
	LDA #1
	STA $218   ;END Inic Timer 1

*	LDX #0	  ;Gen TCOS
	LDY #$1F
GENTCOS	LDA TCOS,X
	STA $2960,X	;2KV
	STA $2920,X
	STA $2900,Y	;,Y 1KV
	STA $2940,Y
	INX
	DEY
	BPL GENTCOS ;END G.TCOS

	LDX #0	  ;Unpack Texture
	INY	;LDY #0
UNTEX1	LDA $2380,X
	PHA
	LSR
	LSR
	LSR
	LSR
	STA $2D00,Y
	PLA
	AND #$0F
	STA $2D01,Y
	INX
	INY
	INY
	BNE UNTEX1 ;End Unp. Texture

	LDA #$20	  ;Gen.Scrn.Line Tab.
	STA $A2	  ;prirastok
	LDY #$60
	LDA #$80
	JSR SCRL1  ;->Gen.DL1

	LDY #$70
	LDA #$C0
	JSR SCRL1  ;->Gen.DL2

	LDA #76
	STA $A2
	LDY #$30
	LDA #$00
	JSR SCRL1

	LDY #$40
	TYA	  ;LDA #$40
	JSR SCRL1  ;END Gen.Scrn.Line Tab.

***!!! ldx #$50 txa
*	LDX #5	  ;Gen. DL
*	LDA #$50
	LDX #$50
	TXA
GDL4	STA $2400,X
	STA $2600,X
	DEX
	BPL GDL4

	LDA #39
	STA OK
GDL3	LDY #1
GDL2	LDX #3
GDL1	LDA DRIA,X
TO	STA $2405,X
	LDA DRIA2,X
TO2	STA $2605,X
	DEX
	BPL GDL1
	LDA TO+1
	CLC
	ADC #4
	STA TO+1
	STA TO2+1
	LDA TO+2
	ADC #0
	STA TO+2
	ADC #2
	STA TO2+2
	DEY
	BPL GDL2
	LDA DRIA+1
	CLC
	ADC #$20
	STA DRIA+1
	STA DRIA2+1
	LDA DRIA+2
	ADC #0
	STA DRIA+2
	ADC #$10
	STA DRIA2+2
	DEC OK
	BPL GDL3

	LDX #5
GDL5	LDA DRIAE,X
	STA $2545,X
	STA $2745,X
	DEX
	BPL GDL5
	LDA #$24
	STA $254B
	LDA #$26
	STA $274B  ;End Gen. DL

T1GEN	LDA #51    ;Gen X&Y tables
	STA Y

T1GE3	LDY Y
	LDA $2E00,Y
	STA $A0
	STA $A4
	LDA $2F00,Y
	STA $A1
	LDA $2F40,Y
	STA $A5
	LDA #75
	STA X

T1GE2	LDA Y
	SEC
	SBC #26
	STA ATGY
	LDA X
	SEC
	SBC #38
	STA ATGX
	JSR ATG
	LDY X
	LSR
	STA ($A0),Y  ;Store in 1.TAB

*	LSR
*	LSR
	TAX
	LDA $2900,X
	STA ATGY
	STA $D01A
	LDA X
	SEC
	SBC #37
	BPL T1GE8
	EOR #$FF
	SEC
	ADC #0
T1GE8	JSR DIVYX
	TXA
	LDY X
	LSR
	LSR
	LSR
	LSR
	STA ($A4),Y ;Store in 2.TAB

	DEC X
	BPL T1GE2
	DEC Y
	BPL T1GE3   ;END Gen X&Y tables


*	LDA #CAS:L ;Inic Timer 1
*	STA $226
*	LDA #CAS:H
*	STA $227
*	LDA #1
*	STA $218   ;END Inic Timer 1

	LDA #DLI:L ;Init Video
	STA $200
	LDA #DLI:H
	STA $201

	LDA #$00
	STA $230
	STA $2C6

	LDA #$21
	STA $22F
	LDA #$C0
	STA $D40E
	LDA #$44
	STA $26F
	LDA #$B0
*	STA $2C8
*	STA $2C6	  ;End Init Video


XXX	LDA SS2
	BEQ XXX

WRTUNEL	INC XX
	LDA #39
	STA Y

WR3	LDY Y
	LDA $2E00,Y
	STA $A0
	STA $A2
	LDA $2F00,Y
	STA $A1
	LDA $2F40,Y
	STA $A3
	LDA $2E80,Y
	STA $A6

	LDA SS1
	BEQ WRX
	LDA #$C0
	BNE WRX2
WRX	LDA #$80
WRX2	STA WRX3+1
WRX3	LDA $2F80,Y
	STA $A7

	LDX #0
	STX X

WR2	LDY X
	LDA ($A0),Y
	ADC XX
	AND #$0F
	TAX

	LDA EFF
	BPL EFF1
	LDA #0
	BEQ EFF2
EFF1	LDA ($A2),Y
EFF2	ADC XX
	AND #$0F
	ASL
	ASL
	ASL
	ASL
	STA FR+1

FR	LDA $2D00,X
	PHA

	LDA X
	LSR
	TAY
	BCC WR1
	PLA
	ORA ($A6),Y
	STA ($A6),Y
	JMP WREND

WR1	PLA
	ASL
	ASL
	ASL
	ASL
	STA ($A6),Y

WREND	INC X
	LDA X
	CMP #64
	BNE WR2

	DEC Y
	BPL WR3
	LDA #0
	STA SS2
	JMP XXX


ATG	LDX #0	;ArcTG(y/x)
	STX ANGLE

	LDA ATGY
	BMI KV34	;->kvadrant 3 or 4	

	LDA ATGX
	BEQ ATG64
	BMI KV2	;->kvadrant 2

ATG2	CMP ATGY
	BEQ ATG32
	BCC DIVCHYX ;if Y>X
	JSR DIVYX
	LDA TARCTG,X
	CLC
ATGEN2	ADC ANGLE
ATGEND	RTS	;END ArcTG(y/x)

KV2	EOR #$FF ;2.kvadrant
	SEC
	ADC #0
	TAY
	LDA ATGY
	BNE KV2_2
	LDA #$80
	RTS
KV2_2	STA ATGX
	STY ATGY
	LDX #$40
	BPL KV34B

KV34	LDA ATGX
	BPL KV4	;-> 4.kvadrant

	LDA ATGY
	EOR #$FF
	SEC
	ADC #0
	STA ATGY
	LDA ATGX
	EOR #$FF
	SEC
	ADC #0
	STA ATGX
	LDX #128
KV34B	STX ANGLE
	JMP ATG2

KV4	BEQ ATG192
	LDA ATGY	;4.kvadrant
	EOR #$FF
	SEC
	ADC #0
	TAY
	LDX #192
	STX ANGLE
	LDX ATGX
	STX ATGY
	STA ATGX
	BEQ ATGEND
	JMP ATG2

ATG32	LDA ANGLE
	CLC
	ADC #$20
	RTS
ATG64	LDA #$40
	RTS
ATG192	LDA #$C0
	RTS	;END ArcTG(y/x)

DIVCHYX	LDA ATGY	;Change Y<->X
	LDX ATGX
	STX ATGY
	STA ATGX
	JSR DIVYX
	LDA #32
	SEC
	SBC TARCTG,X
	ADC #32
	JMP ATGEN2

*DIVYX	LDA ATGX
DIVYX	STA EX2

	LDX #0
	STX EX1
*	STX EX2+1
	LDA ATGY	;Y*32=EX1(16bit)
	LSR
	ROR EX1
	LSR
	ROR EX1
	LSR
	ROR EX1
	STA EX1+1 ;End Y*32=EX1

*	LDX #0	;Fast 16bit/16bit
	STX RE
	STX RE+1
	LDY #16

DIV1	ASL EX1
	ROL EX1+1
	ROL RE
	ROL RE+1
	SEC
	LDA RE
	SBC EX2
	TAX
	LDA RE+1
	SBC EX2+1
	BCC DIV2
	STX RE
	STA RE+1
	INC EX1

DIV2	DEY
	BNE DIV1	;End Fast 16b/16b
	LDX EX1
	RTS

SCRL1	STA SCRT1+1
	STA SCRT2+1
	STY $A1
	LDX #0
	STX $A0
SCRL2	LDA $A0
SCRT1	STA $2E80,X
	LDA $A1
SCRT2	STA $2F80,X
	LDA $A0
	CLC
	ADC $A2	;#$20
	STA $A0
	LDA $A1
	ADC #0
	STA $A1
	INX
	CPX #52	;#40
	BNE SCRL2   ;End G.Scrn.LineT
	RTS

DLI	PHA
	LDA #00
	STA $D01B
	LDA #10
	STA $D017
	PLA
	RTI

CAS	LDA SS2
	BNE CAS1

	INC EFF
	INC EFF
	BPL CASS
	LDA #$20
	BPL CASS2
CASS	LDA #$80
CASS2	STA $2C8

	LDA #1
	STA SS2

	LDY SS1
	BEQ CAS2
	DEY
	LDA #$26
	JMP CAS22

CAS2	INY
	LDA #$24
CAS22	STA $231
	STY SS1

CAS1	LDA #1
	STA 77
	STA $218
	RTS

*TCOS	DFB $FF,$FE,$FD,$FB,$F9,$F6,$F2,$EE
*	DFB $E9,$E4,$DE,$D7,$D0,$C9,$C1,$B9
*	DFB $B0,$A7,$9D,$93,$88,$7E,$73,$67
*	DFB $50,$44,$38,$2C,$1F,$13,$06,$00

TCOS	DFB $03,$06,$0D,$13,$19,$1F,$25,$2C
	DFB $32,$38,$3E,$44,$4A,$50,$56,$5C
	DFB $62,$67,$6D,$73,$78,$7E,$83,$88
	DFB $8E,$93,$98,$9D,$A2,$A7,$AB,$B0

*TCOS	DFB 0,13,27,40,53,66
*	DFB 79,92,104,116,128,139
*	DFB 150,161,171,181,190,199
*	DFB 207,215,222,228,234,239
*	DFB 243,247,250,253,254,255

*TCOS	DFB $80,$86,$8C,$93,$99,$9F,$A5,$AB
*TCOS	DFB $80,$81,$82,$84,$8A,$8E,$98,$AB
*	DFB $B1,$B6,$BC,$C1,$C7,$CC,$D1,$D5
*	DFB $DA,$DE,$E2,$E6,$EA,$ED,$F0,$F3
*	DFB $F5,$F8,$FA,$FB,$FD,$FE,$FE,$FF


TX	ASC %   3D Tunell by %
	ASC %-XI-/Satantronic%

DRIA	DFB $4F,$00,$60,00
DRIA2	DFB $4F,$00,$70,00
DRIAE	DFB $F0,$42
	DFW TX
	DFB $41

TARCTG	DFB 00,01,02,03,04,05,06,08
	DFB 09,10,11,12,13,15,16,17
	DFB 18,19,20,21,22,23,24,25
	DFB 25,26,27,28,29,30,31,31

TIM	EQU $90
L1	EQU $91
L2	EQU $93
X	EQU $94
Y	EQU $95
FI	EQU $96
YSIN	EQU $97
YCOS	EQU $98
XX	EQU $99
YY	EQU $9A
GO	EQU $9B
OK	EQU $9C
SS1	EQU $9D
SS2	EQU $9E

EX1	EQU $80	;LO-HI
EX2	EQU $82
RE	EQU $84
ANGLE	EQU $86
ATGX	EQU $87
ATGY	EQU $88
EFF	EQU $89



* Texture convertor and packer
* It convert 16*16/256 data to
* 16*16/16 and packet it to
* 8*16 bytes and move it to 
* addres: $2380-$23ff 

	ORG $1D00
	LDX #0
TEXL1	LDA $1E00,X
	CMP #$08
	BCC TEXL3
	SEC
	SBC #8
	LSR
	LSR
	LSR
	LSR
	JMP TEXL2
TEXL3	LDA #0
TEXL2	STA $1F00,X
	INX
	CPX #0
	BNE TEXL1

	LDX #0
	LDY #0
TEXL4	LDA $1F00,X
	ASL
	ASL
	ASL
	ASL
	CLC
	ADC $1F01,X
	STA $2380,Y
	INX
	INX
	INY
	CPY #$80
	BNE TEXL4
	RTS

* Texture Data 16*16/256
* Warning!!! Need convert it for intro!

	ORG $1E00
	DFB $12,$15,$17,$16,$13,$0E,$0B,$0A
	DFB $0D,$0F,$12,$15,$17,$19,$1A,$1B

	DFB $17,$19,$1C,$1C,$1A,$1A,$1C,$1E
	DFB $21,$22,$27,$29,$29,$27,$22,$20

	DFB $1B,$1C,$1D,$1D,$1E,$22,$29,$2F
	DFB $2E,$30,$34,$36,$34,$2E,$27,$21

	DFB $1C,$1B,$20,$26,$2D,$31,$3A,$42
	DFB $43,$47,$49,$46,$3D,$36,$28,$20

	DFB $1A,$1A,$23,$2E,$38,$3C,$44,$4B
	DFB $4D,$55,$58,$51,$47,$41,$33,$28

	DFB $1A,$1C,$28,$36,$42,$48,$55,$63
	DFB $77,$81,$79,$61,$4E,$45,$32,$20

	DFB $1B,$20,$2D,$3A,$43,$51,$73,$95
	DFB $B5,$B6,$99,$6E,$4E,$43,$2D,$19

	DFB $1C,$23,$33,$3F,$47,$5E,$98,$CE
	DFB $E5,$DB,$AC,$73,$4E,$43,$31,$1E

	DFB $1A,$1F,$32,$40,$49,$65,$A7,$E4
	DFB $F6,$E1,$A9,$70,$4D,$40,$2E,$1C

	DFB $15,$17,$27,$39,$46,$59,$8C,$BE
	DFB $D6,$BE,$8E,$61,$46,$39,$23,$13

	DFB $13,$0F,$1D,$31,$3E,$47,$67,$8C
	DFB $A7,$8E,$6A,$4E,$41,$36,$21,$13

	DFB $07,$09,$11,$1F,$32,$41,$4C,$50
	DFB $5B,$58,$51,$46,$37,$2A,$1C,$16

	DFB $0F,$0E,$0E,$13,$22,$30,$40,$47
	DFB $46,$45,$40,$3A,$2F,$25,$19,$14

	DFB $1D,$18,$0F,$0B,$0D,$18,$28,$32
	DFB $2E,$2E,$2B,$28,$23,$1C,$14,$12

	DFB $29,$23,$19,$0D,$06,$08,$15,$1C
	DFB $22,$22,$1F,$1E,$1B,$17,$13,$12

	DFB $34,$31,$28,$1E,$10,$0A,$08,$0A
	DFB $0F,$10,$10,$11,$11,$13,$14,$14
