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

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

*-----------------------------------------------------------------------------*
	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
_LVOSupervisor			equ	-30

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

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

	move.l	4.w,a6
	moveq	#0,d0
	btst	d0,297(a6)
	beq.s	.68000

	lea	.Movec(pc),a5
	jsr	_LVOSupervisor(a6)
.68000	move.l	d0,VBR

	jsr	_LVOForbid(a6)

	moveq	#0,d0
	lea	GfxName(pc),a1
	jsr	_LVOOpenLibrary(a6)

	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.w	#$7fff,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$9c(a6)
	move.w	#$7f00,$9e(a6)

	move.l	VBR(pc),a5
	move.l	$6c(a5),Temp_Lev3Int

	lea	Lev3_Interrupt(PC),a0
	move.l	a0,$6c(a5)

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

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

.wait	cmp.w	#3*50,Time
	blt.s	.wait

	lea	COPPERLIST,a0
	move.l	a0,$80(a6)
	tst.w	$88(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
	move.w	#0,Time
	
	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	VBR(pc),a5
	move.l	Temp_Lev3Int(pc),$6c(a5)

	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)

	jsr	_LVOPermit(a6)

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

.Movec	dc.l	$4E7A0801			MOVEC	VBR,d0
	rte

*-----------------------------------------------------------------------------*
VBR		dc.l	0
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
Time		dc.w	0

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

*-----------------------------------------------------------------------------*
LEV3_INTERRUPT
	movem.l	d0-a6,-(SP)

	addq.w	#1,Time

	movem.l	(SP)+,d0-a6
	move.w	#%0000000000100000,$dff09c
	rte

*-----------------------------------------------------------------------------*
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

	movem.w	Times(pc),d0-d2
	exg.l	d0,d1
	exg.l	d1,d2
	movem.w	d0-d2,Times
	
	move.w	CarPos(pc),d0
	cmp.w	Time(pc),d2
	bgt.s	.con
	add.w	#8,d0
	cmp.w	#608,d0
	blt.s	.ok
	move.w	#0,d0
	move.w	#0,Time
.ok	move.w	d0,CarPos

.con	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

Times	dc.w	290,290,590

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

