{{ mixed001.spin }} CON _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 _stack = ($3000 + $3000 + 100) >> 2 'accomodate display memory and stack x_tiles = 16 y_tiles = 12 x_origin = 128 y_origin = 96 paramcount = 14 bitmap_base = $2000 display_base = $5000 VAR long tv_status, tv_enable, tv_pins, tv_mode, tv_screen, tv_colors, tv_hc, tv_vc long tv_hx, tv_vx, tv_ho, tv_vo, tv_broadcast, tv_auralcog, colors[64] word screen[x_tiles * y_tiles] OBJ tv : "E_TV02" gr : "E_Graphics04" PUB start | i, j, k, m, n, para, conv[16] longmove(@tv_status, @tvparams, 14) tv_screen := @screen tv_colors := @colors tv.start(@tv_status) gr.setup(x_tiles, y_tiles, x_origin, y_origin, bitmap_base) dira[0..7] := %00001111 dira[11..23]~ dira[26]~ 'init tile screen repeat i from 0 to tv_hc - 1 repeat j from 0 to tv_vc - 1 screen[j*tv_hc+i] := display_base>>6+j+i*tv_vc+((j&$3F)<<10) 'init colors repeat i from 0 to 63 colors[i] := $00001010 * (i+4) & $F + $2B060C02 { 11060C02 } '======================================================================================= conv[0] := ( ( 0) <<(8*0)) + ( ( 1) <<(8*1)) +( ( 2) <<(8*2)) + ( ( 21) <<(8*3)) conv[1] := ( ( 22) <<(8*0)) + ( ( 23) <<(8*1)) +( ( 24) <<(8*2)) + ( ( 47) <<(8*3)) conv[2] := ( ( 0) <<(8*0)) + ( ( 5) <<(8*1)) +( (28) <<(8*2)) + ( (29) <<(8*3)) conv[3] := ( (14) <<(8*0)) + ( (18) <<(8*1)) +( (14) <<(8*2)) + ( (35) <<(8*3)) conv[4] := ( (44) <<(8*0)) + ( (39) <<(8*1)) +( (23) <<(8*2)) + ( (43) <<(8*3)) conv[5] := ( (10) <<(8*0)) + ( (39) <<(8*1)) +( (60) <<(8*2)) + ( (42) <<(8*3)) conv[6] := ( (0) <<(8*0)) + ( (18) <<(8*1)) +( (18) <<(8*2)) + ( (6) <<(8*3)) conv[7] := ( (0) <<(8*0)) + ( (52) <<(8*1)) +( (45) <<(8*2)) + ( (47) <<(8*3)) conv[8] := ( (1) <<(8*0)) + ( (59) <<(8*1)) +( (35) <<(8*2)) + ( (2) <<(8*3)) conv[9] := ( (46) <<(8*0)) + ( (32) <<(8*1)) +( (16) <<(8*2)) + ( (21) <<(8*3)) conv[10] := ( (23) <<(8*0)) + ( (5) <<(8*1)) +( (29) <<(8*2)) + ( (33) <<(8*3)) conv[11] := ( (29) <<(8*0)) + ( (0) <<(8*1)) +( (0) <<(8*2)) + ( (1) <<(8*3)) conv[12] := ( (0) <<(8*0)) + ( (1) <<(8*1)) +( (42) <<(8*2)) + ( (0) <<(8*3)) conv[13] := ( (46) <<(8*0)) + ( (59) <<(8*1)) +( (34) <<(8*2)) + ( (18) <<(8*3)) conv[14] := ( (43) <<(8*0)) + ( (10) <<(8*1)) +( (39) <<(8*2)) + ( (34) <<(8*3)) conv[15] := ( (28) <<(8*0)) + ( (48) <<(8*1)) +( (60) <<(8*2)) + ( (28) <<(8*3)) '======================================================================================= 'main loop repeat gr.clear if (ina[11] == 0) gr.colorwidth(0,1) gr.box(-130, -100, 260, 200) else para := ina[17..12] i := ina[23..18] case (i//4) 0: j := conv[i/4] & %00111111 1: j := (conv[i/4]>>8) & %00111111 2: j := (conv[i/4]>>16) & %00111111 3: j := conv[i/4] >> 24 case j 0: gr.colorwidth(0,1) gr.box(-130, -100, 260, 200) 1: gr.colorwidth(2,1) gr.box(-130, -100, 260, 200) 2: gr.colorwidth(3,1) gr.box(-130, -100, 260, 200) 3: { gr.colorwidth(3,1) gr.quad(-80+para,0+para,-80+para,-30+para,0+para,-30+para,0+para,0+para) gr.quad(80-para,0-para,80-para,30-para,0-para,30-para,0-para,0-para) 4: gr.colorwidth(3,0) repeat i from 1 to 20 gr.vec(para*2, para*2, (k & $7F) << 3 + i << 5, k << 6 + i << 8, @vecdef) } 5: gr.colorwidth(2,2) box_3(m/2-50, m/2-50, para, para,-m/2+50, m/2-50, para, para,m-100, m-100, para, para) box_3(-m+100, m-100, para, para,-m/2-50, -m/2-50, para, para,m/2+50, -m/2-50, para, para) box_3(-m-100, -m-100, para, para,m+100, -m-100, para, para,-m/2+50, -m/2+50, para, para) box_3(m/2-50, -m/2+50, para, para,-m+100, -m+100, para, para,m-100, -m+100, para, para) box_3(m/2+50, m/2+50, para, para,-m/2-50, m/2+50, para, para,m+100, m+100, para, para) gr.box(-m-100, m+100, para, para) 6: gr.colorwidth(2,0) gr.quad(0+para,30+para,-30-para,0-para,0-para,-30-para,30+para,0+para) gr.quad(0-para,30+para,-30-para,0+para,0+para,-30-para,30+para,0-para) { 7:gr.colorwidth(1,1) repeat i from 1 to 4 gr.vecarc(80,50,80,80,-(i<<10+k<<6),$30,-(k<<8),@vecdef2) gr.vecarc(para*2,-para*2,20,20,i<<10+k*2<<6,$70,-(k<<8),@vecdef2) gr.vecarc(-40,-10,40,40,-(i<<10+k<<6), 30,-(k<<8),@vecdef2) gr.vecarc(-110,20,60,60,i<<10+k<<6,$60,-(k<<10),@vecdef2) 8: gr.colorwidth(1,1) repeat i from 1 to para/10 gr.vec(0, 0, (k & $7F) << 3 + i << 5,-( k << 6 + i << 8), @vecdef2) gr.vec(0, 0, (k & $7F)*3 << 3 + i << 5,-( k << 6 + i << 8), @vecdef2) gr.vec(0, 0, (k & $7F)*10 << 3 + i << 5,-( k << 6 + i << 8), @vecdef2) 9: gr.colorwidth(1,10) line_draw(-115+para*3,50,-80+para*3,50) } 10: gr.colorwidth(2,1) gr.quad(5, 5, 5, -5, para*2, -50-para/2, para*2, 50+para/2) gr.quad(-5, 5, -5, -5, -para*2, -50-para/2, -para*2, 50+para/2) { 11: gr.colorwidth(1,1) line_3(-250+m,-para,125,m/3,-250+m,-para,125,m/2,-250+m,-para,125,m) line_3(-250+m,-para,125,m*2,-250+m,-para,125,m*3,-250+m,-para,125,m*6) line_draw(-250+m,-para,125,m*20) gr.colorwidth(2,1) line_3(125+m,para,-125,-m/3,125+m,para,-125,-m/2,125+m,para,-125,-m) line_3(125+m,para,-125,-m*2,125+m,para,-125,-m*3,125+m,para,-125,-m*6) line_draw(125+m,para,-125,-m*20) 12: gr.colorwidth(2,1) line_draw(130,0,-(3*m-130),0) line_3(0,m,0,-m,m,0,-m,0,-m,m,m,-m) line_draw(m,m,-m,-m) 13: gr.colorwidth(1,1) arc_3(0,0,30,30,-k<<7,$2000/9,6,80,m,30,30,-k<<7,$2000/9,6) arc_3(-80,-m,30,30,-k<<7,$2000/9,6,80,-m,30,30,k<<7,$2000/9,6) gr.arc(-80,m,30,30,k<<7,$2000/9,6,3) line_2(-125,m/4,125,m/4,-125,-m/4,125,-m/4) gr.colorwidth(3,2) line_2(-125,m/2,125,m/2,-125,-m/2,125,-m/2) gr.colorwidth(2,3) line_2(-125,m,125,m,-125,-m,125,-m) } 14: gr.colorwidth(2,1) box_3(m-380,-120,30,260,m-320,-120,30,260,m-260,-120,30,260) box_3(m-200,-120,30,260,m-140,-120,30,260,m-80,-120,30,260) box_3(m-20,-120,30,260,m+40,-120,30,260,m+100,-120,30,260) { 15: gr.colorwidth(1,5) arc_0(para*2-100,-10,50,50,-k<<3,para*2,9,-para*2+100,20,50,50,k<<3,-para*2,9) } 16: gr.colorwidth(2,1) gr.box(-130,para-50,270,30) gr.colorwidth(0,1) box_3(-130,-40,30,130,-10,0,30,60,110,-40,30,130) { 17: gr.colorwidth(2,1) tri_2(-115,100,-85,-10-m/2,-55,100,-55,100,-25,-10-m/2,5,100) tri_2(5,100,35,-10-m/2,65,100,65,100,95,-10-m/2,125,100) gr.tri(125,100,155,-10-m/2,185,100) gr.colorwidth(0,1) tri_2(-130,100,-100,-10-m/2,-70,100,-70,100,-40,-10-m/2,-10,100) tri_2(-10,100,20,-10-m/2,50,100,50,100,80,-10-m/2,110,100) gr.tri(110,100,140,-10-m/2,170,100) } 18: gr.colorwidth(2,1) box_3(-150,n-200,260,50,-150,n-100,260,50,-150,n,260,50) gr.box(-150,n+100,260,50) { 19: gr.colorwidth(2,1) gr.box(-140,-120,270,230) gr.colorwidth(3,1) gr.quad(0,90,20+para,30,0,-90,-20-para,30) gr.quad(0,70,20+para*2,30,0,-30,-20-para*2,30) gr.colorwidth(2,1) box_2(5+para/6,60,5,5,-9-para/6,60,5,5) gr.tri(8,50,0,40,-8,50) 20: gr.colorwidth(3,0) repeat i from 1 to 20 gr.vec(para*2, para*2, (k & $3F) << 2+ i << 2, k << 3 + i << para/8, @vecdef) gr.colorwidth(2,0) repeat i from 1 to 20 gr.vec(-para*2, -para*2, (k & $3F) << 4+ i << 2, k << 3 + i << para/8, @vecdef) } 21: gr.colorwidth(3,0) box_2(0,0,140,120,-140,-120,140,120) 22: gr.colorwidth(2,0) box_2(0,0,140,120,-140,-120,140,120) 23: gr.colorwidth(3,0) box_3(0,0,60,45,-120,-90,60,45,60,45,60,45) box_3(-60,-45,60,45,-120,0,60,45,-60,45,60,45) box_2(0,-90,60,45,60,-45,60,45) 24: gr.colorwidth(2,0) box_3(0,0,60,45,-120,-90,60,45,60,45,60,45) box_3(-60,-45,60,45,-120,0,60,45,-60,45,60,45) box_2(0,-90,60,45,60,-45,60,45) { 25: gr.colorwidth(2,0) tri_2(-120,110,-80,110,para*2,-para,120,-100,80,-100,para*2,-para) gr.colorwidth(3,0) tri_2(120,110,80,110,para*2,-para,-120,-100,-80,-100,para*2,-para) 26: gr.colorwidth(3,0) tri_2(para-32,-n/2+25,30,40,0,95,para-32,-n/2+25,40,-15,90,40) tri_2(para-32,-n/2+25,0,-45,50,-80,para-32,-n/2+25,-30,40,-90,40) gr.tri(para-32,-n/2+25,-40,-15,-50,-80) gr.colorwidth(2,0) tri_2(para-32,-n/2+25,30,40,90,40,para-32,-n/2+25,40,-15,50,-80) tri_2(para-32,-n/2+25,-30,40,0,95,para-32,-n/2+25,-40,-15,-90,40) gr.tri(para-32,-n/2+25,0,-45,-50,-80) 27: gr.colorwidth(2,0) gr.tri(-120,-96,90-n,-96,-120,70-n) } 28: gr.colorwidth(2,0) gr.tri(-64+n,-96,128,-96,128,96-n) 29: gr.colorwidth(2,0) gr.tri(-128,96,-128,-96+n,64-n,96) { 30: gr.colorwidth(2,0) gr.tri(-90+n,96,120,-70+n,120,96) } 31: { gr.colorwidth(1,0) repeat i from 1 to 20 gr.arc(0,0,(k & $7F) << 2 + i << 2,50,k << 6 + i << 8,20,70,0) } 32: gr.colorwidth(1,0) repeat i from 1 to 10 line_draw(130,-para-27,-5*((k & $7F) << 3 + i << 5)/13,90) 33: gr.colorwidth(1,0) repeat i from 1 to 10 line_draw(-130,para+27,5*((k & $7F) << 3 + i << 5)/13,-90) 34: gr.colorwidth(1,1) repeat i from 1 to 20 gr.vecarc(0,-60,80,20,i<<10+k<<6,$20,k<<8,@vecdef) gr.line(0,para+27) 35: gr.colorwidth(1,1) repeat i from 1 to 10 line_draw(130,-((k & $7F) << 3 + i << 5)+170,-((k & $7F) << 2 + i << 6),-70) { 36: gr.colorwidth(1,2) repeat i from 1 to 15 gr.arc(0,0,(k & $7F) << 2 + i << 2,50,K<<4,400,30,0) 37: gr.colorwidth(1,5) arc_0(0,0,(para+1),n,-(k<<4),2000,30,0,0,m,(para+1),k<<4,2000,30) 38: gr.colorwidth(1,5) arc_0(0,0,(para+1),95,-(k<<3),m,30,0,0,95,95,k<<3,m,30) gr.colorwidth(2,1) gr.line(para*10-130,0) } 39: gr.colorwidth(1,1) repeat i from 1 to 10 line_draw(-130,((k & $7F) << 3 + i << 5)-170,(k & $7F) << 2 + i << 6,70) { 40: gr.colorwidth(1,1) gr.arc(0,0,m,m,-k<<3,1000,8,0) repeat i from 1 to 10 line_2(0,0,((k & $7F) << 3 + i << 5)-90,-90,0,0,-((k & $7F) << 3 + i << 5)+90,90) 41: gr.colorwidth(1,1) repeat i from 1 to 10 line_2(0,90,((k & $7F) << 3 + i << 5)-90,-90,0,90,-((k & $7F) << 3 + i << 5)+90,-90) } 42: gr.colorwidth(1,10) arc_0(0,0,m,m,-k<<3,1000,8,0,0,m-20,m-20,-k<<2,1000,8) gr.arc(0,0,m-40,m-40,-k<<1,1000,8,0) 43: gr.colorwidth(1,1) arc_3(0,0,m,n,k<<5,2000,20,0,0,n,m,-k<<5,2000,20) 44: gr.colorwidth(1,3) arc_4(0,0,m,m,k<<3,4000,30,0,0,m-10,m-10,k<<3,4000,30) arc_4(0,0,m-20,m-20,k<<3,4000,30,0,0,m-30,m-30,-(k<<1),4000,30) arc_4(0,0,m-40,m-40,-(k<<1),4000,30,0,0,m-50,m-50,-(k<<1),4000,30) arc_4(0,0,m-60,m-60,k<<2,4000,30,0,0,m-70,m-70,k<<2,4000,30) gr.arc(0,0,m-80,m-80,k<<2,4000,30,4) 45: gr.colorwidth(1,2) gr.arc(0,0,para,para,-k<<5,1,1,0) gr.line(0,0) 46: gr.colorwidth(2,1) line_draw_3(130,0,80,30-para,50,-30+m,10,30-m) gr.line(-30,-30+para) gr.line(-70,30-n) gr.line(-110,-30+m) gr.line(-130,0) 47: gr.colorwidth(1,4) gr.plot(m+80,-n+100) gr.plot(m/2-80,-n/2+100) gr.colorwidth(1,1) line_2(m,-n+100,m+10,-n+90,m-100,-n+100,m-50,-n+50) 48: gr.colorwidth(3,1) line_2(0,0,-para/3+30,-60,0,0,para/3-30,-60) line_draw_3(0,0,0,60,0,40,-para/3+30,-10) line_draw(0,40,para/3-30,-10) { 49: gr.colorwidth(2,1) line_draw_3(-n+40,-40,-40,n-40,n/2,-n/2+30,-n+40,-40) 50: gr.colorwidth(1,1) line_draw_3(-n/2+40,-40,n/2-40,-40,0,30,-n/2+40,-40) line_draw_3(-n/2+80,-40,n/2,-40,30,30,-n/2+80,-40) line_draw_3(-n/2,-40,n/2-80,-40,-30,30,-n/2,-40) 51: gr.colorwidth(1,4) repeat i from 1 to 8 arc_0(0,0,m,m,i<<10+k<<2,4000,5,0,0,n,n,-(i<<10+k<<2),400,5) } 52: gr.colorwidth(1,3) arc_0(0,0,n,m,k<<5,4000,para,0,0,n/2,m/2,k<<5,4000,para) arc_0(0,0,m,n,k<<5,4000,para,0,0,m+10,n+2,k<<5,4000,para) { 53: gr.colorwidth(1,1) line_2(n,-n+90,-m,-n+90,-n,n-80,m,n-80) 54: gr.colorwidth(1,0) repeat i from 1 to 8 gr.vecarc(0,0,para,para,i<<10+k<<2,$50,k<<6,@vecdef) gr.line(0,-90) 55: gr.colorwidth(3,1) line_draw_3(n*2,-n+90,-n*2,-n+90,0,n*2-100,n*2,-n+90) line_draw_3(-n*2,n-90,n*2,n-90,0,-n*2+100,-n*2,n-90) 56: gr.colorwidth(1,0) repeat i from 1 to 8 gr.vecarc(0,0,m,m,i<<10+k<<2,para,k << 6 + i << 8,@vecdef2) 57: gr.colorwidth(1,1) line_draw_3(n,-60,-n,-60,0,n,n,-60) line_draw_3(n/2,-30,-n/2,-30,0,n/2,n/2,-30) line_draw_3(n*2,-90,-n*2,-90,0,n*2,n*2,-90) 58: gr.colorwidth(1,1) line_3(80,-n+100,80,-m+100,60,n-100,60,m-100,40,-n+100,40,-m+100) line_3(20,n-100,20,m-100,n-100,0,m-100,0,-n+100,0,-m+100,0) line_3(-80,-n+100,-80,-m+100,-60,n-100,-60,m-100,-40,-n+100,-40,-m+100) line_draw(-20,n-100,-20,m-100) } 59: gr.colorwidth(1,1) line_3(-m,-n+100,n,-m+100,-m*2,(-n+100)*2,n*2,(-m+100)*2,-m*2,(-n+100)/2,n*2,(-m+100)/2) 60: gr.colorwidth(1,0) repeat i from 1 to 4 gr.vecarc(0,0,para,para,k<<3,para*4,i<<10+k<<6,@vecdef2) 61: { gr.colorwidth(1,1) line_3(m-130,m,m-130,-m,m/2-130,m/2,m/2-130,-m/2,m*3-130,m*3,m*3-130,-m*3) line_3(m*4-130,m*4,m*4-130,-m*4,-(m-130),-m,-(m-130),m,-(m/2-130),-m/2,-(m/2-130),m/2) line_3(-(m*3-130),-m*3,-(m*3-130),m*3,-(m*4-130),-m*4,-(m*4-130),m*4,m-130,m,m,-m) line_3(m/2-130,m/2,m/2,-m/2,m*2-130,m*2,m*2,-m*2,-m,-m,-m+130,m) line_2(-m/2,-m/2,-m/2+130,m/2,-m*2,-m*2,-m*2+130,m*2) 62: gr.colorwidth(1,1) line_3(-m+130,m+100,-m,-m+100,m-130,m+100,m,-m+100,m-130,-m-100,m,m-100) line_3(-m+130,-m-100,-m,m-100,m-110,-m-80,m,m-100,-m+110,-m-80,-m,m-100) line_2(-m+110,m+80,-m,-m+100,m-110,m+80,m,-m+100) 63: gr.colorwidth(1,10) line_3(-115+para*3,30,30+para*3,30,100-para*3,-50,-105-para*3,-50,-20,30+para*3,-20,-90+para*3) } '======================================================================= gr.copy(display_base) k++ m := (m+ 1) // 260 n := (n+ 1) // 200 PUB line_draw(p1, p2, p3, p4) gr.plot(p1,p2) gr.line(p3,p4) PUB line_draw_3(p1, p2, p3, p4, p5, p6, p7, p8) gr.plot(p1,p2) gr.line(p3,p4) gr.line(p5,p6) gr.line(p7,p8) PUB box_3(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) gr.box(p1,p2,p3,p4) gr.box(p5,p6,p7,p8) gr.box(p9,p10,p11,p12) PUB box_2(p1, p2, p3, p4, p5, p6, p7, p8) gr.box(p1,p2,p3,p4) gr.box(p5,p6,p7,p8) PUB tri_2(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) gr.tri(p1,p2,p3,p4,p5,p6) gr.tri(p7,p8,p9,p10,p11,p12) PUB line_3(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) line_draw(p1,p2,p3,p4) line_draw(p5,p6,p7,p8) line_draw(p9,p10,p11,p12) PUB line_2(p1, p2, p3, p4, p5, p6, p7, p8) line_draw(p1,p2,p3,p4) line_draw(p5,p6,p7,p8) PUB arc_0(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) gr.arc(p1, p2, p3, p4, p5, p6, p7,0) gr.arc(p8, p9, p10, p11, p12, p13, p14,0) PUB arc_3(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) gr.arc(p1, p2, p3, p4, p5, p6, p7,3) gr.arc(p8, p9, p10, p11, p12, p13, p14,3) PUB arc_4(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) gr.arc(p1, p2, p3, p4, p5, p6, p7,4) gr.arc(p8, p9, p10, p11, p12, p13, p14,4) DAT tvparams long 0 'status long 1 'enable long %001_0000 'pins --- 8..10=[001_0000] , 12..14=[001_0101] long %0000 'mode long 0 'screen long 0 'colors long x_tiles 'hc long y_tiles 'vc long 10 'hx long 1 'vx long 0 'ho long 0 'vo long 0 'broadcast long 0 'auralcog vecdef word $4000+$2000/3*0, 50, $8000+$2000/3*1+1, 50 word $8000+$2000/3*2-1, 50, $8000+$2000/3*0, 50 word 0 vecdef2 word $4000+$2000/12*0, 50, $8000+$2000/12*1, 20 word $8000+$2000/12*2, 50, $8000+$2000/12*3, 20 word $8000+$2000/12*4, 50, $8000+$2000/12*5, 20 word $8000+$2000/12*6, 50, $8000+$2000/12*7, 20 word $8000+$2000/12*8, 50, $8000+$2000/12*9, 20 word $8000+$2000/12*10, 50, $8000+$2000/12*11, 20 word $8000+$2000/12*0, 50 word 0