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