1*KEY 0 MO.0|ML.|M 2*KEY 1 RUN|M 10ON ERROR GOTO 1220 11*TV 255,1 20MODE 1 21plotmode=0 30yellow=1 40 first=yellow 50green=2 60red=3 70blue=4 80contacts=5 90 last=contacts 100DIM order(last) 110DIM C1(last),C2(last),C3(last),C4(last) 120 130VDU 28,0,31,39,27 140FOR I = first TO last 150 INPUT "Layers: " order(I) 160 IF I=first AND order(I)=0 THEN FOR J=first TO last:order(J)=J:NEXT J:I = last:NEXT I:GOTO 190 170 IF order(I)last THEN GOTO 150 180NEXT I 190C1(yellow) = 1: C2(yellow) = 0: C3(yellow) = 2: C4(yellow) = 0 200C1(red) = 1: C2(red) = 0: C3(red) = 1: C4(red) = 3 210C1(green) = 2: C2(green) = 2: C3(green) = 2: C4(green) = 0 220C1(blue) = 3: C2(blue) = 3: C3(blue) = 3: C4(blue) = 2 230C1(contacts) = 2:C2(contacts) = 3:C3(contacts) = 3:C4(contacts) = 2 240VDU 19,1,1,0,0,0 250VDU 19,2,2,0,0,0 260VDU 19,3,4,0,0,0 270VDU 29,FNchop(340);FNchop(200); 271Q%=TIME 280FOR each=first TO last 290RESTORE 300REPEAT 310 READ xbase 320IF xbase<0 THEN UNTIL TRUE:NEXT each 330 READ ybase,dx,dy,layer 340 xbase = FNscaleX(xbase): ybase = FNscaleY(ybase) 350 dx = FNscaleX(dx): dy = FNscaleY(dy) 360 c1=C1(layer):c2=C2(layer):c3=C3(layer):c4=C4(layer) 370 IF layer=order(each) THEN PROC_box(xbase,ybase,xbase+dx,ybase+dy,c1,c2,c3,c4) 380UNTIL FALSE 390NEXT each 400END 410DEFPROC_box(Xl,Yb,Xr,Yt,Colour1,Colour2,Colour3,Colour4) 420 FOR Y = FNchop(Yb) TO FNchop(Yt)-4 STEP 4 430 XL = FNchop(Xl) 440 XR = FNchop(Xr) 450 IF (Y DIV 4) MOD 2 = 1 THEN PROCevenline ELSE PROCoddline 460 NEXT 470ENDPROC 480 490DEFPROCevenline 500IF (XL DIV 4) MOD 2 = 1 THEN PROCline12 ELSE PROCline21 510ENDPROC 520DEFPROCline12 530 GCOL plotmode,Colour1 540 MOVE XL+4,Y 550 PLOT 16+5,XR,Y 560 GCOL plotmode,Colour2 570 MOVE XL,Y 580 PLOT 16+5,XR,Y 590ENDPROC 600 610DEFPROCline21 620 GCOL plotmode,Colour2 630 MOVE XL+4,Y 640 PLOT 16+5,XR,Y 650 GCOL plotmode,Colour1 660 MOVE XL,Y 670 PLOT 16+5,XR,Y 680ENDPROC 690DEFPROCoddline 700IF (XL DIV 4) MOD 2 = 1 THEN PROCline34 ELSE PROCline43 710ENDPROC 720DEFPROCline34 730 GCOL plotmode,Colour3 740 MOVE XL+4,Y 750 PLOT 16+5,XR,Y 760 GCOL plotmode,Colour4 770 MOVE XL,Y 780 PLOT 16+5,XR,Y 790ENDPROC 800DEFPROCline43 810 GCOL plotmode,Colour4 820 MOVE XL+4,Y 830 PLOT 16+5,XR,Y 840 GCOL plotmode,Colour3 850 MOVE XL,Y 860 PLOT 16+5,XR,Y 870ENDPROC 880 890DEFFNchop(I) 900 = (I + 3) DIV 4 * 4 910ENDFN 920 930DEFFNscaleX(I) 940 = I * 5 * 4 950ENDFN 960 970DEFFNscaleY(I) 980 = I * 4 * 4 990ENDFN 1000 1010 1020DATA 3,2,26,15,yellow 1030DATA 9,0,2,30,red 1040DATA 19,0,2,30,red 1050DATA 5,5,2,7,green 1060DATA 5,12,21,3,green 1070DATA 24,5,2,7,green 1080DATA 5,22,22,6,green 1090DATA 5,28,2,7,green 1100DATA 24,28,2,11,green 1110DATA 3,4,26,4,blue 1120DATA 3,32,26,4,blue 1130DATA 14,13,2,11,blue 1140DATA 14,24,12,2,blue 1150DATA 5,5,2,2,contacts 1160DATA 14,5,2,2,contacts 1170DATA 24,5,2,2,contacts 1180DATA 14,13,2,2,contacts 1190DATA 5,33,2,2,contacts 1200DATA 24,24,2,2,contacts 1210DATA -1 1220ON ERROR GOTO 1320 1230CLS:COLOUR 1 1240VDU 23,1,0;0;0;0; 1250PRINT TAB(0,29) " CMOS Nor-gate"; 1251T%=TIME-Q% 1252REM PRINT''"Time taken: ";T% DIV 100;".";T% MOD 100;" secs 1260REPEAT 1270 *FX 19 1280 VDU 19,1,1,0,0,0 1290 FOR I%=0 TO 55:NEXT 1300 VDU 19,1,7,0,0,0 1310UNTIL FALSE 1320VDU 19,1,1,0,0,0,23,1,1;0;0;0;13,10 1330END