Advertisement
RainbowUnicornMan

TPTCPU.py (v0.1)

Aug 3rd, 2013
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.83 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import sys
  4. import time
  5.  
  6. if len(sys.argv) > 1:
  7.     import ptasm
  8.  
  9. a = 0
  10. b = 0
  11. c = 0
  12.  
  13. ram = [0] * 100
  14.  
  15. if len(sys.argv) <= 1:
  16.     print("Enter your program in binary:")
  17.     prl = sys.stdin.readline().strip()
  18.     prog = []
  19.     while prl:
  20.         prog.append(prl)
  21.         prl = sys.stdin.readline().strip()
  22. else:
  23.     prog = []
  24.     for i in ptasm.main(sys.argv):
  25.         prog.append(i)
  26.  
  27. prog = ["".join(filter(lambda a: a in "0123456789", i)) for i in prog]
  28.  
  29. def getdataflowop(s):
  30.     return s[-5:]
  31.  
  32. def getaluop(s):
  33.     return s[-9:-5]
  34.  
  35. def get7bit(s):
  36.     return s[-16:-9]
  37.  
  38. def getexitbit(s):
  39.     return s[8]
  40.  
  41. def get8bit(s):
  42.     return s[:-17]
  43.  
  44. running = True
  45.  
  46. pc = 0
  47.  
  48. while running:
  49.     try:
  50.         i = prog[pc]
  51.     except IndexError:
  52.         break
  53.     pc += 1
  54.     dfop = getdataflowop(i)
  55.     bit8 = int(get8bit(i), 2)
  56.     bit7 = int(get7bit(i), 2)
  57.     exit = getexitbit(i)
  58.     aluo = getaluop(i)
  59.     if dfop == "00000":
  60.         pass
  61.     elif dfop == "00001":
  62.         a = bit8
  63.     elif dfop == "00010":
  64.         b = bit8
  65.     elif dfop == "00011":
  66.         c = bit8
  67.     elif dfop == "00100":
  68.         ram[bit7-1] = bit8
  69.     elif dfop == "00101":
  70.         a = ram[bit7-1]
  71.     elif dfop == "00110":
  72.         b = ram[bit7-1]
  73.     elif dfop == "00111":
  74.         c = ram[bit7-1]
  75.     elif dfop == "01000":
  76.         a = c
  77.     elif dfop == "01001":
  78.         b = c
  79.     elif dfop == "01010":
  80.         ram[bit7-1] = c
  81.     elif dfop == "01011":
  82.         if aluo == "0001":
  83.             c = a + b
  84.         elif aluo == "0010":
  85.             c = a & b
  86.         elif aluo == "0011":
  87.             c = a | b
  88.         elif aluo == "0100":  # IFE
  89.             if a != b:
  90.                 pc = bit7 - 1
  91.         elif aluo == "0101":  # JMP
  92.             pc = bit7 - 1
  93.         else:
  94.             raise Exception("unknown ALU operation")
  95.     elif dfop == "01100":
  96.         if aluo == "0001":
  97.             ram[bit7-1] = a + b
  98.         elif aluo == "0010":
  99.             ram[bit7-1] = a & b
  100.         elif aluo == "0011":
  101.             ram[bit7-1] = a | b
  102.         elif aluo == "0100":  # IFE
  103.             if a != b:
  104.                 pc = bit7 - 1
  105.         elif aluo == "0101":  # JMP
  106.             pc = bit7 - 1
  107.         else:
  108.             raise Exception("unknown ALU operation")
  109.     elif dfop == "01101":
  110.         print(ram[bit7-1])
  111.     elif dfop == "01110":
  112.         ram[b-1] = a
  113.     elif dfop == "01111":
  114.         ram[bit7-1] = 0
  115.     elif dfop == "10000":
  116.         ram[a] = 0
  117.     elif dfop == "10001":
  118.         ram[b] = 0
  119.     elif dfop == "10010":
  120.         ram[bit7-1] = int(sys.stdin.readline())
  121.     else:
  122.         raise Exception("unknown opcode")
  123.     if exit == "1":
  124.         break
  125.     #print(i)
  126.     #print(ram)
  127.     #print("A: {}, B: {}, C: {}".format(a, b, c))
  128. if sys.platform == "win32":
  129.     sys.stdin.readline()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement