ùúùú   ·  .  .  .  .  .  .  .  .  .;this routine is -REALLY- old, but I don't care...
;just use some 8bit c2p-routine, with screensize 256*200

;if you don't have "screen clearing" c2p uncomment
;jsr screenclear line

WIDTH		equ	256		; MUST be multiple of 32
HEIGHT		equ	200
plsiz		equ	(WIDTH/8)*HEIGHT
		incdir		"develop:assy/inc/"
		include		"custom.i"
OLib		equ		-$0228
CLib		equ		-$019e

		section		K-RAUTA,code_p
		cnop		0,256
Begin:		movem.l		d0-d7/a0-a6,-(sp)
		move.w		r3olddma,d0
		move.l		$4.w,a6
		lea		r3gnimi,a1
		moveq		#0,d0
		jsr		OLib(a6)
		move.l		d0,r3gosote
		beq.w		r3loppu2
		moveq		#5,d0 ;vertical blanking interrupt
		lea		intstruct,a1
		move.l		$4.w,a6
		jsr		-$00a8(a6)
		jsr		-$0084(a6)
		move.l		r3gosote,a6
 		move.l		$22(a6),r1wbview
		sub.l		a1,a1
		jsr		-$de(a6)
		move.w		dmaconr+custom,r3olddma
		move.w		intenar+custom,r3oldint
		move.l		38(a6),r3oldcop
		jsr		-$00e4(a6)
		jsr		-$010e(a6)
		jsr		-$010e(a6)
		move.w		#%0111111111111111,dmacon+custom
		move.w		#%0111111111111111,intena+custom	
		move.l		#r3plane1,d0
		move.w		d0,r3b1l
		swap		d0
		move.w		d0,r3b1h
		move.l		#r3plane2,d0
		move.w		d0,r3b2l
		swap		d0
		move.w		d0,r3b2h
		move.l		#r3plane3,d0
		move.w		d0,r3b3l
		swap		d0
		move.w		d0,r3b3h
		move.l		#r3plane4,d0
		move.w		d0,r3b4l
		swap		d0
		move.w		d0,r3b4h
		move.l		#r3plane5,d0
		move.w		d0,r3b5l
		swap		d0
		move.w		d0,r3b5h
		move.l		#r3plane6,d0
		move.w		d0,r3b6l
		swap		d0
		move.w		d0,r3b6h
		move.l		#r3plane7,d0
		move.w		d0,r3b7l
		swap		d0
		move.w		d0,r3b7h
		move.l		#r3plane8,d0
		move.w		d0,r3b8l
		swap		d0
		move.w		d0,r3b8h
		move.l		#r3plane1,r1aos1
		move.l		#r3pplane1,r1aos2
		move.l		#r3ppplane1,r1aos3
		jsr		r1clearscreen
		jsr		precalculaatiot		
		move.w		#%1000001110000000,dmacon+custom
		move.w		#%1110000000111100,intena+custom
		move.l		#custom,a0
		move.l		#r3copperl,cop1lch(a0)
		move.l		#0,cop2lch(a0)
		move.w		copjmp1(a0),d0
		move.l		#0,timer
r3mainloop:
		jsr		Doodo
		jsr		TestRayCastV01
		jsr		C2P
		jsr		r1clearscreen
		btst		#6,$bfe001
		bne.s		r3mainloop
r3loppu2:	move.l		r3oldcop,cop1lch+custom
		move.w		r3olddma,d0
		or.w		#$8000,d0
		move.w		d0,dmacon+custom
		move.w		r3oldint,d0
		or.w		#$c000,d0
		move.w		d0,intena+custom
		move.l		r3gosote,a6
		move.l		r1wbview,a1
		jsr		-$de(a6)
		move.l		4,a6
		move.l		r3gosote,a1
		jsr		CLib(a6)	
		moveq		#5,d0
		lea		intstruct,a1
		move.l		$4.w,a6
		jsr		-$00ae(a6)
		jsr		-$008a(a6)
r3eimitaanauki:	movem.l		(sp)+,d0-d7/a0-a6
		moveq		#0,d0
		move.l		timer,d1
		rts
r3intti:	movem.l		d0-d7/a0-a6,-(sp)		
		addq.l		#1,timer
		lea		RayTable+360*3,a0
		move.w		EyeAngle,d2
		move.l		EyeX,EyeX2
		move.l		EyeY,EyeY2
		moveq.l		#0,d4
		jsr		TakeKey
		tst.w		d4
		beq.s		OO
		moveq.l		#0,d7
		Lea		Map,a1
		move.l		EyeX,d0
		move.l		EyeY,d1
		lsr.l		#8,d0
		move.b		#0,d1
		add.w		d0,d1
		tst.b		(a1,d1.l)
		beq.s		OO
		move.l		EyeX2,EyeX
		move.l		EyeY2,EyeY

OO:		movem.l		(sp)+,d0-d7/a0-a6
		rts
TakeKey:	moveq.l		#0,d0
		move.b		$bfec01,d0
		not.b		d0
		ror.b		#1,d0
		cmp.b		#$4c,d0 ;ylös
		bne.b		eiy1
		move.l		0(a0,d2.w),d3
		add.l		d3,EyeX
		move.l		4(a0,d2.w),d3
		add.l		d3,EyeY
		moveq.l		#1,d4
eiy1:		cmp.b		#$4d,d0 ;alas
		bne.s		eiy2
		move.l		0(a0,d2.w),d3
		sub.l		d3,EyeX
		move.l		4(a0,d2.w),d3
		sub.l		d3,EyeY
		moveq.l		#1,d4
eiy2:		cmp.b		#$4e,d0
		bne.s		aa1
		add.w		#24*2,EyeAngle
aa1:		cmp.b		#$4f,d0
		bne.s		aa2
		sub.w		#24*2,EyeAngle
		moveq.l		#1,d4
aa2:		rts

TestRayCastV01:	cmp.w		#360*8*3,EyeAngle
		blt.b		Eips2
		sub.w		#360*8*3,EyeAngle
Eips2:		cmp.w		#0,EyeAngle
		bpl.b		Eips3
		add.w		#360*8*3,EyeAngle
Eips3:		lea		RayTable,a0
		lea		Buffer+128,a1
		lea		Map,a3
		lea		DivTable+8*14,a6
		lea		Div2Table,a2
		add.w		EyeAngle,a0
		move.w		#249,d0 ;näkökentän laajuus°-1°
		move.l		EyeX,a4 ;Silmä x
		move.l		EyeY,a5 ;Silmä y

Sloop:		moveq.l		#1,d7 ;näön maximi etäisyys
		movem.l		(a0)+,d1/d2
		addq.w		#1,a1
		move.l		a4,d3 ;Silmä x
		move.l		a5,d4 ;Silmä y
		
Sloop2:		move.l		d4,d6
		move.b		(a2,d3.l),d6
		add.l		d2,d4
		tst.b		(a3,d6.l)
		bne.s		DoWall
		add.l		d1,d3
		addq.b		#1,d7
		btst		#7,d7
		beq.s		Sloop2
Exit3:		dbf		d0,Sloop
		rts
		
DoWall:		move.w		(a6,d7.w*8),d3
		bmi.b		Exit3
		move.l		2(a6,d7.w*8),d4

Uffe:		move.b		d7,-128(a1,d4.l)
		tst.w		d3
		beq		Exit
		addq.w		#8,d4
		move.b		d7,120(a1,d4.l)
		add.w		#504,d4
		subq.w		#2,d3
		bhi.b		Uffe
Exit:		dbf		d0,Sloop
		rts
		

C2P:		lea		Buffer,a0 ;chunky buffer
		move.l		r1aos2,a1 ;screenmem
		jsr		C2proutine
		rts


r1clearscreen:
		moveq.l		#0,d0
		moveq.l		#0,d1
		moveq.l		#0,d2
		moveq.l		#0,d3
		moveq.l		#0,d4
		moveq.l		#0,d5
		moveq.l		#0,d6
		moveq.l		#0,d7
		move.l		#0,a0
		move.l		#Buffer,a6
		add.l		#32*200*8,a6
		move.w		#199,d7

loopi:		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)
		movem.l		d0-d6/a0,-(a6)

		dbf		d7,loopi

		rts


Doodo:
; tekee kaksoibufferoinnin

		move.l		r1aos2,a0
		move.l		r1aos1,r1aos2
		move.l		a0,d0
		move.l		r1aos3,r1aos1
		move.l		a0,r1aos3
		move.w		d0,r3b1l
		swap		d0
		move.w		d0,r3b1h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b2l
		swap		d0
		move.w		d0,r3b2h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b3l
		swap		d0
		move.w		d0,r3b3h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b4l
		swap		d0
		move.w		d0,r3b4h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b5l
		swap		d0
		move.w		d0,r3b5h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b6l
		swap		d0
		move.w		d0,r3b6h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b7l
		swap		d0
		move.w		d0,r3b7h
		swap		d0
		add.l		#6400,d0
		move.w		d0,r3b8l
		swap		d0
		move.w		d0,r3b8h
		rts


precalculaatiot:
		jsr		InitDiv1600
		jsr		InitDiv256
		jsr		InitSin		
		jsr		InitRayCast
		rts

InitRayCast:	move.l		#0,RaySini
		move.w		#450*3-1,d7 ; montakos, RÄPSÄ!!!
		lea		RayTable,a2	
Round:		lea		r1sin,a0
		lea		r1cos,a4
		move.w		#2,d2 ;"yksikkö"ympyrän kehäpisteet
		move.w		#2,d4
		move.w		RaySini,d3
		move.w		(a0,d3.w),d0		;sinin arvo
		move.w		(a4,d3.w),d1		;cosini	
		move.l		d2,d3	
		move.l		d4,d5	
		muls		d1,d2
		muls		d0,d4
		add.l		d4,d2
		asr.l		#4,d2
		muls		d1,d5	     
		muls		d0,d3
		sub.l		d3,d5
		asr.l		#4,d5
		move.l		d2,(a2)+ ;kulmakertoimet taulukkoon,*1024
		move.l		d5,(a2)+
		addq.w		#2,RaySini		
		cmp.w		#720*3,RaySini
		blt.b		Eips
		sub.w		#720*3,RaySini
Eips:		dbf		d7,Round
		rts
InitSin:	lea		r1sintable2,a0
		lea		r1sin,a1
		move.w		#449,d7
asa:		move.w		2(a0),d1
		sub.w		(a0),d1
		move.w		(a0),(a1)+
		move.w		(a0)+,d2
		muls		#1024,d2
		muls		#512,d1
		add.l		d1,d2
		move.l		d2,d3
		divs		#1024,d3
		move.w		d3,(a1)+
		add.l		d1,d2
		divs		#1024,d2
		move.w		d2,(a1)+		
		dbf		d7,asa
		rts
InitDiv1600:	lea		DivTable,a0
		move.w		#1,d7
Slupi:		move.l		#1600,d0
		divs		d7,d0
		move.w		d0,d1
		add.w		#100,d0
		neg.w		d1
		add.w		#100,d1
		move.w		d0,(a0)+
		move.w		d1,(a0)+
		cmp.w		#200,d0
		bmi.b		Exit2
Exitti:		move.w		#-100,-2(a0)
		move.w		#-100,(a0)
		jmp		Ooo
Exit2:		move.w		-4(a0),d3
		move.w		-2(a0),d4
		sub.w		d4,d3
		tst.w		d3
		beq.b		Exitti
		ext.l		d4
		asl.l		#8,d4
		move.w		d3,-4(a0)
		move.l		d4,-2(a0)
Ooo:		addq.w		#4,a0
		addq.w		#1,d7
		cmp.w		#255,d7
		bne.s		Slupi
		rts
InitDiv256:	move.l		#0,d7
		lea		Div2Table,a0
Slupi2:		move.l		d7,d0
		divs		#256,d0
		move.b		d0,(a0)+
		addq.l		#1,d7
		cmp.l		#256*258,d7
		bne.s		Slupi2
		rts		


		
		section		clist,data_c
		cnop		0,256
r3copperl:	dc.w		$1fc,%0000000000000011
		dc.w		bpl1mod,0
		dc.w		bpl2mod,0
;		dc.w		bplcon0,%0000000000010000
		dc.w		bplcon0,%0111000000000000
		dc.w		bplcon1,%1010101000000000
		dc.w		bplcon2,%0000001000000000
		dc.w		ddfstrt,$38
		dc.w		ddfstop,$98
		dc.w		diwstrt,$4c8a
		dc.w		diwstop,$11b7
		dc.w		bpl1pth
r3b1h:		dc.w		0
		dc.w		bpl1ptl
r3b1l:		dc.w		0
		dc.w		bpl2pth
r3b2h:		dc.w		0
		dc.w		bpl2ptl
r3b2l:		dc.w		0
		dc.w		bpl3pth
r3b3h:		dc.w		0
		dc.w		bpl3ptl
r3b3l:		dc.w		0
		dc.w		bpl4pth
r3b4h:		dc.w		0
		dc.w		bpl4ptl
r3b4l:		dc.w		0
		dc.w		bpl5pth
r3b5h:		dc.w		0
		dc.w		bpl5ptl
r3b5l:		dc.w		0
		dc.w		bpl6pth
r3b6h:		dc.w		0
		dc.w		bpl6ptl
r3b6l:		dc.w		0
		dc.w		bpl6pth+4
r3b7h:		dc.w		0
		dc.w		bpl6ptl+4
r3b7l:		dc.w		0
		dc.w		bpl6pth+8
r3b8h:		dc.w		0
		dc.w		bpl6ptl+8
r3b8l:		dc.w		0
		incbin		"work:gfx/paletit/doom.s"
		dc.w		$ffe1,$fffe
		dc.w		$ffff,$fffe
		even
		
		section		planet,bss_c
		cnop		0,256
r3plane1:	ds.b		6400
r3plane2:	ds.b		6400
r3plane3:	ds.b		6400
r3plane4:	ds.b		6400
r3plane5:	ds.b		6400
r3plane6:	ds.b		6400
r3plane7:	ds.b		6400
r3plane8:	ds.b		6400
r3pplane1:	ds.b		6400
r3pplane2:	ds.b		6400
r3pplane3:	ds.b		6400
r3pplane4:	ds.b		6400
r3pplane5:	ds.b		6400
r3pplane6:	ds.b		6400
r3pplane7:	ds.b		6400
r3pplane8:	ds.b		6400
r3ppplane1:	ds.b		6400
r3ppplane2:	ds.b		6400
r3ppplane3:	ds.b		6400
r3ppplane4:	ds.b		6400
r3ppplane5:	ds.b		6400
r3ppplane6:	ds.b		6400
r3ppplane7:	ds.b		6400
r3ppplane8:	ds.b		6400
		
		section		muuttujia,data_p
		cnop		0,256
r3gosote	dc.l		1
r3oldint	dc.l		1
r3olddma	dc.l		1
r3oldcop	dc.l		1
r1wbview	dc.l		1
r1aos1:		dc.l		0
r1aos2:		dc.l		0
r1aos3:		dc.l		0

r1sintable2:
 dc.w 0,17,35,52,70,87,105,122,139,156
 dc.w 174,191,208,225,242,259,276,292,309,326
 dc.w 342,358,375,391,407,423,438,454,469,485
 dc.w 500,515,530,545,559,574,588,602,616,629
 dc.w 643,656,669,682,695,707,719,731,743,755
 dc.w 766,777,788,799,809,819,829,839,848,857
 dc.w 866,875,883,891,899,906,914,921,927,934
 dc.w 940,946,951,956,961,966,970,974,978,982
 dc.w 985,988,990,993,995,997,998,999,999,1000		; 90
r1costable2:
 dc.w 1000,999,999,998,998,997,995,993,990,988
 dc.w 985,982,978,974,970,966,961,956,951,946
 dc.w 940,934,927,921,914,906,899,891,883,875
 dc.w 866,857,848,839,829,819,809,799,788,777
 dc.w 766,755,743,731,719,707,695,682,669,656
 dc.w 643,629,616,602,588,574,559,545,530,515
 dc.w 500,485,469,454,438,423,407,391,375,358
 dc.w 342,326,309,292,276,259,242,225,208,191
 dc.w 174,156,139,122,105,87,70,52,35,17		; 180
 dc.w 0,-17,-35,-52,-70,-87,-105,-122,-139,-156
 dc.w -174,-191,-208,-225,-242,-259,-276,-292,-309,-326
 dc.w -342,-358,-375,-391,-407,-423,-438,-454,-469,-485
 dc.w -500,-515,-530,-545,-559,-574,-588,-602,-616,-629
 dc.w -643,-656,-669,-682,-695,-707,-719,-731,-743,-755
 dc.w -766,-777,-788,-799,-809,-819,-829,-839,-848,-857
 dc.w -866,-875,-883,-891,-899,-906,-914,-921,-927,-934
 dc.w -940,-946,-951,-956,-961,-966,-970,-974,-978,-982
 dc.w -985,-988,-990,-993,-995,-997,-998,-998,-999,-999	; 270
 dc.w -1000,-999,-999,-998,-998,-997,-995,-993,-990,-988
 dc.w -985,-982,-978,-974,-970,-966,-961,-956,-951,-946
 dc.w -940,-934,-927,-921,-914,-906,-899,-891,-883,-875
 dc.w -866,-857,-848,-839,-829,-819,-809,-799,-788,-777
 dc.w -766,-755,-743,-731,-719,-707,-695,-682,-669,-656
 dc.w -643,-629,-616,-602,-588,-574,-559,-545,-530,-515
 dc.w -500,-485,-469,-454,-438,-423,-407,-391,-375,-358
 dc.w -342,-326,-309,-292,-276,-259,-242,-225,-208,-191
 dc.w -174,-156,-139,-122,-105,-87,-70,-52,-35,-17,0	; 360
 dc.w 17,35,52,70,87,105,122,139,156,174
 dc.w 191,208,225,242,259,276,292,309,326,342
 dc.w 358,375,391,407,423,438,454,469,485,500
 dc.w 515,530,545,559,574,588,602,616,629,643
 dc.w 656,669,682,695,707,719,731,743,755,766
 dc.w 777,788,799,809,819,829,839,848,857,866
 dc.w 875,883,891,899,906,914,921,927,934,940
 dc.w 946,951,956,961,966,970,974,978,982,985
 dc.w 988,990,993,995,997,998,998,999,999,1000
 dc.w 1000
RaySini:	dc.l		0
EyeAngle:	dc.l		0
EyeX:		dc.l		140*2048/8
EyeY:		dc.l		180*2048/8
EyeX2:		dc.l		140*2048/8
EyeY2:		dc.l		180*2048/8
timer:		dc.l		0
r3gnimi:	dc.b		'graphics.library',0
		even
intstruct:	dc.l		0,0
		dc.b		2,0
		dc.l		inttinimi
		dc.l		0
		dc.l		r3intti
inttinimi:	dc.b		'to BE or NoT to Be(why???)',0
		even		
		dc.b		' $VER: Gouraud 0.01',0
		even
Map:		incbin		"work:gfx/chunky/256*256/doom"
		section	chunky,bss_p
		cnop	0,256
Buffer:		ds.b	220*256
RayTable:	ds.l	512*6
DivTable:	ds.l	512
Div2Table:	ds.l	256*130
r1sin:		ds.w	90*3
r1cos:		ds.w	450*3+172 ;tasan 256
		
		
		end



