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 170 180COLOUR 2 :REM Green 190PRINT TAB(13,26) "CMOS Inverter" 200COLOUR 1 :REM Red 210PRINT TAB(0,29) "Press any key to continue" 220 230*FX 21 240REM Flush keyboard input buffer 250 260REPEAT UNTIL NOT(INKEY(0)) 270 280CLG 290 300 310FOR X = 0 TO 3 320 PROC_scale(10,8) 330 PROC_origin(X*256+88,320) 340 PROC_nor_gate 350NEXT X 360 370COLOUR 2 :REM Green 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