rendered paste body%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