1MODE0 10*TV 255,1 20MODE 1 30 40VDU 19,1,1,0,0,0 :REM Red 50VDU 19,2,2,0,0,0 :REM Green 60VDU 19,3,4,0,0,0 :REM Blue 70 80VDU 23,1,0;0;0;0; :REM Cursor off 90 100*KEY 0 MO.0|ML.|M 110*KEY 1 RUN|M 120 130 140PROC_init 150 160PROC_nor_gate 165MX%=0:MY%=0 169ON ERROR GOTO 184 170*FX 4,1 171REPEAT 173CH%=INKEY(0) 175IF CH%=136 OR FNjoyright THEN MX%=MX%-1 177IF CH%=137 OR FNjoyleft THEN MX%=MX%+1 179IF CH%=138 OR FNjoydown THEN MY%=MY%+1 181IF CH%=139 OR FNjoyup THEN MY%=MY%-1 182PROCscroll(MX%,MY%) 183UNTILCH%=32 184PROCscroll(0,0) 380 390PRINT TAB(0,29) "Thats all folks!!!!!!!!!!" 400 410VDU 23,1,1;0;0;0; :REM Cursor on 420 430END 440 450DEFPROC_origin(X,Y) 460 Xbase = X: Ybase = Y 470ENDPROC 480 490DEFPROC_scale(X,Y) 500 Xscale = X: Yscale = Y 510ENDPROC 520 530DEFPROC_set_colour(Colour1,Colour2,Colour3,Colour4) 540 VDU 18,0,64 550 560 pair0 = (Colour1 AND 2) OR ((Colour2 AND 2) DIV 2) 570 pair0 = pair0 * 4 + pair0 580 pair1 = ((Colour1 AND 1)*2) OR (Colour2 AND 1) 590 pair1 = pair1 * 4 + pair1 600 pair2 = (Colour3 AND 2) OR ((Colour4 AND 2) DIV 2) 610 pair2 = pair2 * 4 + pair2 620 pair3 = ((Colour3 AND 1)*2) OR (Colour4 AND 1) 630 pair3 = pair3 * 4 + pair3 640 650 VDU pair0*16 OR pair1 660 VDU pair2*16 OR pair3 670 VDU pair0*16 OR pair1 680 VDU pair2*16 OR pair3 690ENDPROC 700 710DEFPROC_box(Xl,Yb,Xr,Yt) 720 MOVE Xl,Yb 730 MOVE Xl,Yt 740 PLOT 85,Xr,Yb 750 PLOT 85,Xr,Yt 760ENDPROC 770 780DEFPROC_init 790DIM Colour 100 800 first=0:last=first-1 810 820 well1 = FN_assign(2,1,3,2) 830 well2 = FN_assign(2,0,0,2) 840 diff1 = FN_assign(2,0,0,2) 850 poly1 = FN_assign(1,3,3,1) 851 channel = FN_assign(2,1,3,2) 852 channel_in_well = FN_assign(0,1,3,0) 860 metal1 = FN_assign(2,3,3,2) 870 metal2 = FN_assign(2,1,1,2) 890 contacts = FN_assign(3,3,3,0) 900 substrate_contacts = FN_assign(0,3,3,2) 910 920 PROC_origin(320,256) 930 PROC_scale(20,16) 940 950ENDPROC 960 970DEFFN_assign(I,J,K,L) 980 last = last+1 990 Colour?(last*4+0) = I 1000 Colour?(last*4+1) = J 1010 Colour?(last*4+2) = K 1020 Colour?(last*4+3) = L 1030=last 1040 1050DEFPROC_set_stipple(I) 1060 PROC_set_colour(Colour?(I*4),Colour?(I*4+1),Colour?(I*4+2),Colour?(I*4+3)) 1070ENDPROC 1080 1090DEFPROC_nor_gate 1100LOCAL xbase,ybase,xl,yb,xr,yt,dx,dy,layer,each 1110FOR each=first TO last 1120 PROC_set_stipple(each) 1130 RESTORE 1380 1140 REPEAT 1150 READ xbase 1160 IF xbase<0 THEN UNTIL TRUE:NEXT each:ENDPROC 1170 READ ybase,dx,dy,layer 1180 xl = FNscaleX(xbase) 1190 yb = FNscaleY(ybase) 1200 xr = FNscaleX(xbase+dx) 1210 yt = FNscaleY(ybase+dy) 1220 IF layer=each THEN PROC_box(xl,yb,xr,yt) 1230 UNTIL FALSE 1240NEXT each 1250ENDPROC 1260 1270DEFFNscaleX(I) 1280 = I * Xscale + Xbase 1290ENDFN 1300 1310DEFFNscaleY(I) 1320 = I * Yscale + Ybase 1330ENDFN 1340 1350 1360 REM data for nor gate 1370 1380DATA 3,2, 26,15, well1 1390DATA 9,0, 2,30, poly1 1400DATA 19,0, 2,30, poly1 1410DATA 5,5, 2,7, diff1 1420DATA 5,12, 21,3, diff1 1430DATA 24,5, 2,7, diff1 1440DATA 5,22, 22,6, diff1 1450DATA 5,28, 2,7, diff1 1460DATA 24,28, 2,11, diff1 1470DATA 3,4, 26,4, metal1 1480DATA 3,32, 26,4, metal1 1490DATA 14,13, 2,11, metal1 1500DATA 14,24, 12,2, metal1 1510DATA 5,5, 2,2, contacts 1520DATA 14,5, 2,2, substrate_contacts 1530DATA 24,5, 2,2, contacts 1540DATA 14,13, 2,2, contacts 1550DATA 5,33, 2,2, contacts 1560DATA 24,24, 2,2, contacts 1561DATA 9,12, 2,3, channel_in_well 1562DATA 9,22, 2,6, channel 1563DATA 19,12, 2,3, channel_in_well 1564DATA 19,22, 2,6, channel 1570DATA -1 10000DEFPROCscroll(I,J) 10001I=I MOD 80:J=J MOD 32 10010I=&3000-(I*8)-(J*640) 10020IF I<&3000 THEN I=I+&5000 10030IF I>=&8000 THEN I=I-&5000 10040*FX19 10050VDU 23;12,I DIV 2048;0;0;0 10060VDU 23;13,I MOD 2048 DIV 8;0;0;0 10070ENDPROC 20000DEFFNjoyleft 20010=(ADVAL(1) DIV 64) < 256 20030DEFFNjoyright 20040=(ADVAL(1) DIV 64) >512+256 20060DEFFNjoydown 20070=(ADVAL(2) DIV 64) < 256 20090DEFFNjoyup 20100=(ADVAL(2) DIV 64) >512+256