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