
                  ******   *****   *****   *****  ***
                  *** *** *** *** *** *** *** *** ***
                  ******  ******* *** *** ******* ***
                  *** *** *** *** *** *** *** *** ***
                  ******  *** *** *** *** *** *** *******

        ******  ******   *****      *** *******  *****  *******  ****
        *** *** *** *** *** ***     *** ***     *** ***   ***   ***   
        ******  ******  *** ***     *** *****   ***       ***    ****
        ***     *** *** *** *** *** *** ***     *** ***   ***  **  ***
        ***     *** ***  *****   *****  *******  *****    ***   *****

*-----------------------------------------------------------------------------*
	INCDIR	HD1:CODE/INCLUDE/
	INCLUDE	MACROS.i

_LVOForbid			equ	-132
_LVOPermit			equ	-138
_LVOAllocMem			equ	-198
_LVOAllocAbs			equ	-204
_LVOFreeMem			equ	-210
_LVOCloseLibrary		equ	-414
_LVOOpenLibrary			equ	-552
_LVOLoadView			equ	-222
_LVOWaitTOF			equ	-270

*-----------------------------------------------------------------------------*
	section	a,code_p

START	movem.l	d0-a6,-(sp)

	move.l	$4.w,a6
	jsr	_LVOForbid(a6)

	moveq	#0,d0
	lea	GfxName(pc),a1
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq.w	Error

	move.l	d0,GfxBase
	move.l	d0,a6
	move.l	$22(a6),Temp_ActiView
	move.l	$26(a6),Temp_CopList1
	move.l	$32(a6),Temp_CopList2

	sub.l	a1,a1
	jsr	_LVOLoadView(a6)

	jsr	_LVOWaitTOF(a6)
	jsr	_LVOWaitTOF(a6)

	lea	$dff000,a6
	move.w	$02(a6),Temp_DMACON
	move.w	$10(a6),Temp_ADKCON
	move.w	$1c(a6),Temp_INTENA
	move.l	$6c.w,Temp_Lev3Int

	move.w	#$7fff,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$9c(a6)
	move.w	#$7f00,$9e(a6)

	tst.w	$88(a6)

	move.w	#%1000001111000000,$96(a6)
	move.w	#%1100000000100000,$9a(a6)


	lea	COERLIST,a0
	move.l	a0,$80(a6)
	bsr.w	Alku

	moveq	#0,d0
.no	cmp.b	#$fe,$6(a6)
	bne.s	.no
.no2	cmp.b	#$ff,$6(a6)
	bne.s	.no2
	
	btst	#6,$bfe001
	beq.s	.no1
	addq.w	#1,d0
	cmp.w	#4*60,d0
	bne.s	.no
	
.no1	lea	COPPERLIST,a0
	move.l	a0,$80(a6)

	lea	Module,a0	;Module
	sub.l	a1,a1		;Samples
;	lea	samples,a2	;Sample buffer
	moveq	#0,d0		;Auto Detect
	jsr	Guru+0

	tst.w	d0
	bne.w	exit

	lea	$dff000,a6


Main	move.l	$4(a6),d0
	and.l	#$1ff00,d0
	cmp.l	#277*256,d0
	bne.s	Main
;	cmp.b	#$ff,$dff006
;	bne.s	main
;	move	$1e(a6),d0		;Wait for Copper-bit in INTREQR
;	and.l	#$10,d0
;	beq.b	Main
;	move	#$10,$9c(a6)		;Clear the bit
;	move.w	#$0f0,$dff180
	bsr.w	PlanS
	bsr.w	Tausta
	btst	#10,$dff016
	beq.s	.ok
	bsr.w	Hand
;	move.w	#$000,$dff180
.ok	btst	#6,$bfe001
	bne.s	Main

	jsr	Guru+8

*-----------------------------------------------------------------------------*

exit	move.l	Temp_ActiView(pc),a1
	move.l	GfxBase(pc),a6
	jsr	_LVOLoadView(a6)

	lea	$dff000,a6
	move.w	#$7fff,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$9e(a6)

	move.l	Temp_CopList1(pc),$80(a6)
	move.l	Temp_CopList2(pc),$84(a6)
	move.l	Temp_Lev3Int(pc),$6c.w

	move.w	Temp_ADKCON(pc),d0
	or.w	#$8000,d0
	move.w	d0,$9e(a6)

	move.w	Temp_DMACON(pc),d0
	or.w	#$8000,d0
	move.w	d0,$96(a6)

	move.w	Temp_INTENA(pc),d0
	or.w	#$c000,d0
	move.w	d0,$9a(a6)

	move.l	$4.w,a6
	move.l	GfxBase(pc),a1
	jsr	_LVOCloseLibrary(a6)

Error	jsr	_LVOPermit(a6)

	movem.l	(sp)+,d0-a6
	moveq	#0,d0
	rts

*-----------------------------------------------------------------------------*
Temp_ADKCON	dc.w	0
Temp_DMACON	dc.w	0
Temp_INTENA	dc.w	0
Temp_CopList1	dc.l	0
Temp_CopList2	dc.l	0
Temp_Lev3Int	dc.l	0
Temp_ActiView	dc.l	0

GfxBase		dc.l	0

GfxName		dc.b	'graphics.library',0
		even

PlanS	lea	PLList1,a0

	lea	Show_P(pc),a1
	movem.l	(a1),d0/d1
	exg.l	d0,d1
	movem.l	d0/d1,(a1)

	add.l	#16,d0

	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#76*175,d0
	move.w	d0,14(a0)
	swap	d0
	move.w	d0,10(a0)
	swap	d0
	add.l	#76*175,d0
	move.w	d0,22(a0)
	swap	d0
	move.w	d0,18(a0)
	swap	d0
	add.l	#76*175,d0
	move.w	d0,30(a0)
	swap	d0
	move.w	d0,26(a0)
	swap	d0
	add.l	#76*175,d0
	move.w	d0,38(a0)
	swap	d0
	move.w	d0,34(a0)
	rts

Show_P	dc.l	Road_e2
Work_P	dc.l	Road_e1

Alku	lea	Road,a4
	lea	Road_e1+16,a5
	
	moveq	#5-1,d0
.clr	btst	#6,$2(a6)
	bne.s	.clr
	move.l	a4,$50(a6)
	move.l	a5,$54(a6)
	move.l	#$09f00000,$40(a6)
	move.l	#$ffffffff,$44(a6)
	move.l	#$00000020,$64(a6)
	move.w	#175*64+22,$58(a6)

	lea	44*175(a4),a4
	lea	76*175(a5),a5
	dbf	d0,.clr

	lea	Road,a4
	lea	Road_e2+16,a5
	
	moveq	#5-1,d0
.clr1	btst	#6,$2(a6)
	bne.s	.clr1
	move.l	a4,$50(a6)
	move.l	a5,$54(a6)
	move.l	#$09f00000,$40(a6)
	move.l	#$ffffffff,$44(a6)
	move.l	#$00000020,$64(a6)
	move.w	#175*64+22,$58(a6)

	lea	44*175(a4),a4
	lea	76*175(a5),a5
	dbf	d0,.clr1

.clr2	btst	#6,$2(a6)
	bne.s	.clr2

	lea	Plist1,a0
	move.l	#lod,d0
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#68*44,d0
	move.w	d0,14(a0)
	swap	d0
	move.w	d0,10(a0)
	swap	d0
	add.l	#68*44,d0
	move.w	d0,22(a0)
	swap	d0
	move.w	d0,18(a0)

	rts

Tausta
.clr2	btst	#6,$2(a6)
	bne.s	.clr2

	move.l	#$ffffffff,$44(a6)
	move.l	#$001a0000,$60(a6)

	lea	FRCarC(pc),a1
	lea	CarCnt(pc),a0
	subq.w	#1,(a1)
	tst.w	(a1)
	bne.s	.go
	addq.w	#4,(a0)
	move.w	#5,(a1)
.go
	lea	CarNu(pc),a1
	btst	#10,$dff016
	bne.s	.dok
	lea	CarNum(pc),a1
.dok	lea	MaskNum(pc),a2
	cmp.w	#4*4,(a0)
	bne.s	.no
	move.w	#0,(a0)
.no	move.w	(a0),d0
	move.l	(a1,d0.w),a0
	move.l	(a2,d0.w),a2

	move.l	Work_P(pc),a1
	lea	80*76(a1),a1


	move.w	CarPos(pc),d0
	tst.w	Vroom
	bne.s	.be
	move.w	#0,Vroom+2
	addq.w	#8,d0
.be	cmp.w	#608,d0
	blt.s	.ok
	move.w	#0,d0

	move.w	#1,Vroom+2
	lea	Vruum(pc),a3
	lea	VrCnt(pc),a4
	move.w	(a4),d1
	addq.w	#2,(a4)
	cmp.w	#2*3,(a4)
	bne.s	.nh
	move.w	#0,(a4)
.nh	move.w	(a3,d1.w),Vroom

.ok	move.w	d0,CarPos

	tst.w	Vroom+2
	beq.s	.eips
	subq.w	#1,Vroom
.eips
	move.w	d0,d1
	and.w	#15,d1
	ror.w	#4,d1
	move.w	d1,d2
	add.w	#$0bfa,d1
	add.w	#$0b0a,d2

	asr.w	#4,d0
	add.w	d0,d0
	ext.l	d0
	add.l	d0,a1
	
	move.w	#0,$42(a6)
	move.l	a1,a3

	lea	Road,a4
	lea	43*44(a4),a4
	move.l	Work_P(pc),a5
	lea	43*76+16(a5),a5

	moveq	#5-1,d0
.clr	btst	#6,$2(a6)
	bne.s	.clr
	move.l	a4,$50(a6)
	move.l	a5,$54(a6)
	move.l	#$09f00000,$40(a6)
	move.l	#$ffffffff,$44(a6)
	move.l	#$00000020,$64(a6)
	move.w	#132*64+22,$58(a6)

	lea	44*175(a4),a4
	lea	76*175(a5),a5
	dbf	d0,.clr

	moveq	#5-1,d0
.copy1	btst	#6,$2(a6)
	bne.s	.copy1
	move.l	a2,$50(a6)
	move.l	a1,$54(a6)
	move.l	a1,$48(a6)
	move.w	d2,$40(a6)
	move.l	#$003a0000,$60(a6)
	move.l	#$0000003a,$64(a6)
	move.w	#77*64+9,$58(a6)
	lea	76*175(a1),a1
	dbf	d0,.copy1

	moveq	#4-1,d0
.copy2	btst	#6,$2(a6)
	bne.s	.copy2
	move.l	a0,$50(a6)
	move.l	a3,$54(a6)
	move.l	a3,$48(a6)
	move.w	d1,$40(a6)
	move.w	#77*64+9,$58(a6)
	lea	18*77(a0),a0
	lea	76*175(a3),a3
	dbf	d0,.copy2

	rts

Vroom	dc.w	2*60+28,1
VrCnt	dc.w	0
Vruum	dc.w	4*60+6,4*63,5*56+2

CarPos	dc.w	0
CarCnt	dc.w	0
FRCarC	dc.w	1
CarNu	dc.l	dCar1,dCar2,dCar3,dCar4
CarNum	dc.l	Car1,Car3,Car2,Car4
MaskNum	dc.l	Mask1,Mask2,Mask3,Mask4

HandCnt	dc.w	0
FRHandC	dc.w	1
HandNum	dc.l	Hand1,Hand1+12,Hand1+12*2,Hand1+12*3,Hand1+12*4
	dc.l	Hand1+12*3,Hand1+12*2,Hand1+12*1

HandMas	dc.l	HandM,HandM+12,HandM+12*2,HandM+12*3,HandM+12*4
	dc.l	HandM+12*3,HandM+12*2,HandM+12*1

Hand	
.clr2	btst	#6,$2(a6)
	bne.s	.clr2

	move.l	#$ffffffff,$44(a6)
	move.l	#$001a0000,$60(a6)

	lea	FRHandC(pc),a1
	lea	HandCnt(pc),a0
	subq.w	#1,(a1)
	tst.w	(a1)
	bne.s	.go
	addq.w	#4,(a0)
	move.w	#3,(a1)
.go
	lea	HandNum(pc),a1
	lea	HandMas(pc),a2
	cmp.w	#8*4,(a0)
	bne.s	.no
	move.w	#0,(a0)
.no	move.w	(a0),d0
	move.l	(a1,d0.w),a0
	move.l	(a2,d0.w),a2

	move.l	Work_P(pc),a1
	lea	43*76+44(a1),a1

	
	move.l	a1,a3

	moveq	#5-1,d0
.copy1	btst	#6,$2(a6)
	bne.s	.copy1
	move.l	a2,$50(a6)
	move.l	a1,$54(a6)
	move.l	a1,$48(a6)
	move.l	#$0b0a0000,$40(a6)
	move.l	#$00400000,$60(a6)
	move.l	#$00300040,$64(a6)
	move.w	#132*64+6,$58(a6)
	lea	76*175(a1),a1
	dbf	d0,.copy1

	
	moveq	#5-1,d0
.copy2	btst	#6,$2(a6)
	bne.s	.copy2
	move.l	a0,$50(a6)
	move.l	a3,$54(a6)
	move.l	a3,$48(a6)
	move.l	#$0bfa0000,$40(a6)
	move.w	#132*64+6,$58(a6)
	lea	60*132(a0),a0
	lea	76*175(a3),a3
	dbf	d0,.copy2
	rts

	incdir	hd1:code/prod/
Guru	incbin	Guru.bin

		section	b,data_c

Copperlist	dc.w	$0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000
		dc.w	$0128,$0000,$012a,$0000,$012c,$0000,$012e,$0000
		dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
		dc.w	$0138,$0000,$013a,$0000,$013c,$0000,$013e,$0000

		dc.w 	$008e,$2871,$0090,$3cd1
		dc.w 	$0092,$0030,$0094,$00d8
		dc.w 	$0108,$0020,$010a,$0020	
		dc.w 	$0104,$0000,$0102,$0000
		dc.w	$0100,$0000

		dc.w	$0180,$0565,$0182,$009d,$0184,$0ddd,$0186,$0ccc
		dc.w	$0188,$0bbb,$018a,$0aaa,$018c,$0999,$018e,$0888
		dc.w	$0190,$0777,$0192,$0666,$0194,$0555,$0196,$0444
		dc.w	$0198,$0333,$019a,$0222,$019c,$0111,$019e,$0000
		dc.w	$01a0,$0fc0,$01a2,$0777,$01a4,$0ccc,$01a6,$0ca0
		dc.w	$01a8,$0b90,$01aa,$0000,$01ac,$0a80,$01ae,$0970
		dc.w	$01b0,$0860,$01b2,$0754,$01b4,$0965,$01b6,$0a77
		dc.w	$01b8,$0b88,$01ba,$0c99,$01bc,$0daa,$01be,$0dbb

		
PLlist1		dc.w	$00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000
		dc.w	$00e8,$0000,$00ea,$0000,$00ec,$0000,$00ee,$0000
		dc.w	$00f0,$0000,$00f2,$0000
		dc.w	$8d01,$fffe,$0100,%0101000000000000
		dc.w	$ffdd,$fffe

;		dc	$300f,$fffe		;The line to wait to
;		dc	$9c,$8010		;Set Copper-bit in INTREQ

		dc.w	$3b09,$fffe,$0100,%0000000000000000

		dc.w	$ffff,$fffe

Coerlist	dc.w	$0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000
		dc.w	$0128,$0000,$012a,$0000,$012c,$0000,$012e,$0000
		dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
		dc.w	$0138,$0000,$013a,$0000,$013c,$0000,$013e,$0000

		dc.w 	$008e,$2871,$0090,$3cd1
		dc.w 	$0092,$0030,$0094,$00d8
		dc.w 	$0108,$0000,$010a,$0000
		dc.w 	$0104,$0000,$0102,$0000
		dc.w	$0100,$0000

		dc.w	$0180,$0fff,$0182,$0000,$0184,$0bda,$0186,$0dab
		dc.w	$0188,$0fc3,$018a,$0f98,$018c,$0bcf,$018e,$0000
		
		dc.w	$8001,$fffe,$0100,%0011000000000000
Plist1		dc.w	$00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000
		dc.w	$00e8,$0000,$00ea,$0000

		dc.w	$c401,$fffe,$0100,%0000000000000000


		dc.w	$ffff,$fffe

Lod	incbin	loader352x65

Road_e1	blk.b	77*175*5,0
Road_e2	blk.b	77*175*5,0

Road	incbin	Road.raw352x175
Car1	incbin	pamppu1
Car2	incbin	pamppu2
Car3	incbin	pamppu3
Car4	incbin	pamppu4

DCar1	incbin	pol1.raw
DCar2	incbin	pol2.raw
DCar3	incbin	pol3.raw
DCar4	incbin	pol4.raw

Mask1	incbin	Mask1
Mask2	incbin	Mask2
Mask3	incbin	Mask3
Mask4	incbin	Mask4

Hand1	incbin	kasi.raw480x132
HandM	incbin	handmask.raw480x132

Module	incbin	P61.annos

