%Made by Mahmoud Elsaftawy %Date: December 11, 2006 %Class: Tombs-TEE2O0 % A and B inputs var a, b : int var A, B : boolean get a, b if a = 1 then A := true else A := false end if if b = 1 then B := true else B := false end if % C and D inputs var c, d : int var C, D : boolean get c, d if c = 1 then C := true else C := false end if if d = 1 then D := true else D := false end if %Y output var Y : boolean cls % variables: var font : int font := Font.New ("Comic Sans MS:15") if C then Draw.Text ("C", 20, 215, font, green) else Draw.Text ("C", 20, 215, font, red) end if if D then Draw.Text ("D", 20, 175, font, green) else Draw.Text ("D", 20, 175, font, red) end if %logic %OR gate (1) var or1 : boolean if A or B then or1 := true else or1 := false end if if or1 then %OR gate(1): drawfilloval (60, 350, 100, 50, green) %or1 drawfilloval (50, 350, 100, 50, green) %or1 drawoval (20, 350, 100, 60, green) %or1 drawfilloval (20, 350, 90, 64, white) %or1 drawline (30, 365, 109, 365, black) %Input A drawline (30, 335, 109, 335, black) %Input B drawline (220, 350, 160, 350, black) %Output or1 else %OR gate(1): drawfilloval (60, 350, 100, 50, red) %or1 drawfilloval (50, 350, 100, 50, red) %or1 drawoval (20, 350, 100, 60, red) %or1 drawfilloval (20, 350, 90, 64, white) %or1 drawline (30, 365, 109, 365, black) %Input A drawline (30, 335, 109, 335, black) %Input B drawline (220, 350, 160, 350, black) %Output or1 end if %NOT gate (2) var not2 : boolean if not or1 then not2 := true %NOT gate (2): drawline (220, 370, 220, 330, green) %not2 drawline (220, 370, 250, 350, green) %not2 drawline (220, 330, 250, 350, green) %not2 drawfill (225, 350, green, green) %fill gate (not2) drawfilloval (258, 350, 6, 6, green) %not2 drawline (280, 350, 264, 350, black) %Output else not2 := false %NOT gate (2): drawline (220, 370, 220, 330, red) %not2 drawline (220, 370, 250, 350, red) %not2 drawline (220, 330, 250, 350, red) %not2 drawfill (225, 350, red, red) %fill gate (not2) drawfilloval (258, 350, 6, 6, red) %not2 drawline (280, 350, 264, 350, black) %Output end if %AND gate (3) var and3 : boolean if C = true and D = true then and3 := true else and3 := false end if if and3 then %AND gate(3): drawfilloval (100, 200, 50, 40, green) %and3 drawfillbox (100, 250, 50, 100, white) %and3 drawline (100, 240, 100, 160, green) %and3 drawline (100, 220, 35, 220, black) %Input C drawline (100, 180, 35, 180, black) %Input D drawline (150, 200, 200, 200, black) %Output and3 else %AND gate(3): drawfilloval (100, 200, 50, 40, red) %and3 drawfillbox (100, 250, 50, 100, white) %and3 drawline (100, 240, 100, 160, red) %and3 drawline (100, 220, 35, 220, black) %input C drawline (100, 180, 35, 180, black) %input D drawline (150, 200, 200, 200, black) %output CD end if %NOT gate (4) var not4 : boolean if not and3 then not4 := true %NOT gate (4): drawline (200, 220, 200, 180, green) %not4 drawline (200, 220, 230, 200, green) %not4 drawline (200, 180, 230, 200, green) %not4 drawfill (215, 200, green, green) %fill gate (not4) drawfilloval (238, 200, 6, 6, green) %not4 drawline (245, 200, 280, 200, black) %output not4 else not4 := false %NOT gate (4): drawline (200, 220, 200, 180, red) %not4 drawline (200, 220, 230, 200, red) %not4 drawline (200, 180, 230, 200, red) %not4 drawfill (215, 200, red, red) %fill gate drawfilloval (238, 200, 6, 6, red) %not4 drawline (245, 200, 280, 200, black) %output not4 end if %AND gate (5) var and5 : boolean if not2 and not4 = true then and5 := true %AND gate(5): drawfilloval (360, 270, 60, 40, green) %and5 drawfillbox (370, 220, 250, 320, white) %and5 drawline (370, 230, 370, 310, green) %and5 drawline (280, 350, 280, 300, black) %between output not2 and input and5 drawline (280, 300, 370, 300, black) %first input and5 drawline (280, 200, 280, 250, black) %between output not4 and input and5 drawline (280, 250, 370, 250, black) %second input and5 drawline (525, 270, 420, 270, black) %output and5 else and5 := false %AND gate(5): drawfilloval (360, 270, 60, 40, red) %and5 drawfillbox (370, 220, 250, 320, white) %and5 drawline (370, 230, 370, 310, red) %and5 drawline (280, 350, 280, 300, black) %between output not2 and input and5 drawline (280, 300, 370, 300, black) %first input and5 drawline (280, 200, 280, 250, black) %between output not4 and input and5 drawline (280, 250, 370, 250, black) %second input and5 drawline (525, 270, 420, 270, black) %output and5 end if %NOT gate (6) var not6 : boolean if not and5 then not6 := true %NOT gate (6): drawline (510, 200, 540, 200, green) %not6 drawline (510, 200, 525, 170, green) %not6 drawline (540, 200, 525, 170, green) %not6 drawfill (520, 185, green, green) %fill gate (not6) drawfilloval (525, 164, 6, 6, green) %not6 drawline (525, 270, 525, 200, black) %input not6 drawline (525, 158, 525, 30, black) %Output not6 else not6 := false %NOT gate (6): drawline (510, 200, 540, 200, red) %not6 drawline (510, 200, 525, 170, red) %not6 drawline (540, 200, 525, 170, red) %not6 drawfill (520, 185, red, red) %fill gate (not6) drawfilloval (525, 164, 6, 6, red) %not6 drawline (525, 270, 525, 200, black) %input not6 drawline (525, 158, 525, 30, black) %Output not6 end if %NOT gate (7) var not7 : boolean if not D then not7 := true %NOT gate (7): drawline (200, 145, 200, 115, green) %not7 drawline (200, 145, 230, 130, green) %not7 drawline (200, 115, 230, 130, green) %not7 drawfill (215, 130, green, green) %fill gate (not7) drawfilloval (236, 130, 6, 6, green) %not7 drawfilloval (70, 180, 2, 2, black) %fill oval on D drawline (70, 180, 70, 130, black) %between D and not7 drawline (70, 130, 200, 130, black) %input not7 drawline (242, 130, 490, 130, black) %Output not7 else not7 := false %NOT gate (7): drawline (200, 145, 200, 115, red) %not7 drawline (200, 145, 230, 130, red) %not7 drawline (200, 115, 230, 130, red) %not7 drawfill (215, 130, red, red) %fill gate (not7) drawfilloval (236, 130, 6, 6, red) %not7 drawfilloval (70, 180, 2, 2, black) %fill oval on D drawline (70, 180, 70, 130, black) %between D and not7 drawline (70, 130, 200, 130, black) %input not7 drawline (242, 130, 490, 130, black) %Output not7 end if %OR gate (8) var or8 : boolean if not6 or not7 then or8 := true %OR gate (8): drawfilloval (450, 50, 60, 40, green) %or8 drawfilloval (480, 50, 40, 50, white) %or8 drawoval (450, 50, 30, 40, green) %or8 drawfilloval (470, 50, 40, 50, white) %or8 drawline (490, 130, 490, 75, black) %between not7 and first Input of or8 drawline (490, 75, 435, 75, black) %first Input drawline (525, 30, 433, 30, black) %second Input (not6) drawline (390, 50, 320, 50, black) %output else or8 := false %OR gate (8): drawfilloval (450, 50, 60, 40, red) %or8 drawfilloval (480, 50, 40, 50, white) %or8 drawoval (450, 50, 30, 40, red) %or8 drawfilloval (470, 50, 40, 50, white) %or8 drawline (490, 130, 490, 75, black) %between not7 and first Input of or8 drawline (490, 75, 435, 75, black) %first Input drawline (525, 30, 433, 30, black) %second Input (not6) drawline (390, 50, 320, 50, black) %output end if %NOT gate (9) if not or8 then Y := true %Last NOT gate (9): drawline (320, 65, 320, 35, green) %not9 drawline (320, 65, 290, 50, green) %not9 drawline (320, 35, 290, 50, green) %not9 drawfill (305, 55, green, green) %fill gate not9 drawfilloval (284, 50, 6, 6, green) %not9 drawline (278, 50, 210, 50, black) %output not9 else Y := false %Last NOT gate (9): drawline (320, 65, 320, 35, red) %not9 drawline (320, 65, 290, 50, red) %not9 drawline (320, 35, 290, 50, red) %not9 drawfill (305, 55, red, red) %fill gate not9 drawfilloval (284, 50, 6, 6, red) %not9 drawline (278, 50, 210, 50, black) %output end if %variables if Y then Draw.Text ("Y", 197, 45, font, green) else Draw.Text ("Y", 197, 45, font, red) end if if A then Draw.Text ("A", 15, 360, font, green) else Draw.Text ("A", 15, 360, font, red) end if if B then Draw.Text ("B", 15, 330, font, green) else Draw.Text ("B", 15, 330, font, red) end if