Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def Init():
- global Registers
- global Mem
- global Stack
- global StackPtr
- global PyCode
- Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
- Mem = {}
- Stack = [0]
- StackPtr = [0]
- PyCode = []
- def ConsolidateInput(i):
- x = 0
- k = ''
- for j in i:
- if (x > 1):
- k += str(j)
- k += ' '
- x += 1
- return k
- def ConsolidateOutput(i):
- x = 0
- k = ''
- for j in i:
- if (x > 0):
- k += str(j)
- k += ' '
- x += 1
- return k
- def ClearReg():
- global Registers
- Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
- def ClearMem():
- global Mem
- Mem = {}
- def ClearStack():
- global Stack
- global StackPtr
- Stack = [0]
- StackPtr = [0]
- SavedReg = []
- SavedMem = []
- SavedStack = []
- def SaveReg():
- SavedReg.append(Registers.copy())
- def LoadReg():
- global Registers
- Registers = SavedReg.pop()
- def SaveMem():
- SavedMem.append(Mem.copy())
- def LoadMem():
- global Mem
- Mem = SavedMem.pop()
- def SaveStack():
- SavedStack.append([Stack.copy(), StackPtr.copy()])
- def LoadStack():
- global Stack
- global StackPtr
- Stack, StackPtr = SavedStack.pop()
- def ExecuteInstruction(instruksi, input1, input2):
- instruksi = int(instruksi)
- input1 = int(input1)
- input2 = int(input2)
- if (instruksi == 1):
- if (input1 == input2):
- return 1
- else:
- return 0
- elif (instruksi == 2):
- return input1 + input2
- elif (instruksi == 3):
- return input1 - input2
- elif (instruksi == 4):
- return input1 * input2
- elif (instruksi == 5):
- return input1 / input2
- elif (instruksi == 6):
- return input1 % input2
- elif (instruksi == 7):
- if (input1 == 0):
- return 1
- else:
- return 0
- elif (instruksi == 8):
- if (input1 > input2):
- return 1
- else:
- return 0
- elif (instruksi == 9):
- if (input1 < input2):
- return 1
- else:
- return 0
- Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
- Mem = {}
- def RegisterReadWrite(RegisterNumber, RequestType, OptionalInput):
- RegisterNumber = int(RegisterNumber)
- RequestType = int(RequestType)
- OptionalInput = int(OptionalInput)
- if (RequestType == 0):
- if (RegisterNumber < 16 and RegisterNumber > -1):
- return Registers[RegisterNumber]
- else:
- print("Error: Invalid read register number. Continuing execution.")
- return 0
- elif (RequestType == 1):
- if (RegisterNumber < 16 and RegisterNumber > -1):
- Registers[RegisterNumber] = OptionalInput
- return
- else:
- print("Error: Invalid write register number. Continuing execution.")
- return
- return
- Stack = [0]
- StackPtr = [0]
- def StackAccess(RequestType, OptionalInput):
- RequestType = int(RequestType)
- OptionalInput = int(OptionalInput)
- if (RequestType == 0):
- Stack.append(0)
- Stack[StackPtr[0]] = OptionalInput
- StackPtr[0] += 1
- return
- elif (RequestType == 1):
- StackPtr[0] -= 1
- return Stack[StackPtr[0]]
- elif (RequestType == 2):
- StackPtr[0] -= 1
- return
- def MemReadWrite(Address, RequestType, OptionalInput):
- Address = int(Address)
- RequestType = int(RequestType)
- OptionalInput = int(OptionalInput)
- if (RequestType == 0):
- try:
- return Mem[Address]
- except:
- return 0
- elif (RequestType == 1):
- Mem[Address] = OptionalInput
- return
- PyCode = []
- def PrePreExecute(string):
- string = string.split("pymodetoggle")
- nstring = ""
- j = 0
- cindex = 0
- for i in string:
- if j % 2 == 1:
- PyCode.append(i)
- nstring = nstring + """
- callpy """
- nstring = nstring + str(cindex)
- nstring = nstring + """
- """
- cindex += 1
- else:
- nstring = nstring + i
- j += 1
- return nstring
- def PreExecute(string):
- string = PrePreExecute(string)
- copystring = string
- string = string.split("\n")
- br = []
- j = 0
- processedstr = []
- for i in string:
- i = i.split(" ")
- if (i[0] == 'branchgtr'):
- br.append(int(j))
- elif (i[0] == 'storer' and len(i) > 2):
- if (i[2] == 'add'):
- i[2] = 2
- elif (i[2] == 'sub'):
- i[2] = 3
- elif (i[2] == 'mul'):
- i[2] = 4
- elif (i[2] == 'div'):
- i[2] = 5
- elif (i[2] == 'mod'):
- i[2] = 6
- elif (i[2] == 'equ'):
- i[2] = 1
- elif (i[2] == 'inv'):
- i[2] = 7
- elif (i[2] == 'lat'):
- i[2] = 8
- elif (i[2] == 'smt'):
- i[2] = 9
- processedstr.append(i)
- j += 1
- return br, processedstr, copystring
- def Execute(string):
- Init()
- br, processedstr, copystring = PreExecute(string)
- copystring = copystring.split("\n")
- x = 0
- for i in copystring:
- x += 1
- j = 0
- b = 0
- string = processedstr
- while (j < x and j > -1):
- i = string[j]
- if (i[0] == 'storer'):
- RegisterReadWrite(i[1], 1, ExecuteInstruction(i[2], RegisterReadWrite(i[3], 0, 0), RegisterReadWrite(i[4], 0, 0)))
- elif (i[0] == 'storec'):
- RegisterReadWrite(i[1], 1, i[2])
- elif (i[0] == 'storem'):
- MemReadWrite(i[1], 1, RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'storei'):
- MemReadWrite(RegisterReadWrite(i[1], 0, 0), 1, RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'readm'):
- RegisterReadWrite(i[1], 1, MemReadWrite(i[2], 0, 0))
- elif (i[0] == 'readi'):
- RegisterReadWrite(i[1], 1, MemReadWrite(RegisterReadWrite(i[2], 0, 0), 0, 0))
- elif (i[0] == 'jump'):
- j = i[1]
- elif (i[0] == 'jumpi'):
- j = RegisterReadWrite(i[1], 0, 0)
- elif (i[0] == 'jumpgt'):
- j = br[int(i[1])]
- elif (i[0] == 'jumpgti'):
- j = br[int(RegisterReadWrite(i[1], 0, 0))]
- elif (i[0] == 'jumpgtf'):
- j = br[int(i[1])-1]
- elif (i[0] == 'jumpgtfi'):
- j = br[int(RegisterReadWrite(i[1], 0, 0))-1]
- elif (i[0] == 'test'):
- b = ExecuteInstruction(1, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'testlt'):
- b = ExecuteInstruction(8, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'testst'):
- b = ExecuteInstruction(9, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'branch'):
- if (b == 1):
- j = i[1]
- elif (i[2] > -1):
- j = i[2]
- elif (i[0] == 'branchi'):
- if (b == 1):
- j = RegisterReadWrite(i[1], 0, 0)
- elif (i[2] > -1 and i[2] < 16):
- j = RegisterReadWrite(i[2], 0, 0)
- elif (i[0] == 'out'):
- print(RegisterReadWrite(i[1], 0, 0))
- elif (i[0] == 'branchst'):
- b = 1
- elif (i[0] == 'branchsf'):
- b = 0
- elif (i[0] == 'branchgt'):
- if (b == 1):
- j = br[int(i[1])]
- elif (i[0] == 'branchgti'):
- if (b == 1):
- j = br[int(RegisterReadWrite(i[1], 0, 0))]
- elif (i[0] == 'branchgtf'):
- if (b == 1):
- j = br[int(i[1])-1]
- elif (i[0] == 'branchgtfi'):
- if (b == 1):
- j = br[int(RegisterReadWrite(i[1], 0, 0))-1]
- elif (i[0] == 'branchgtr'):
- pass
- elif (i[0] == 'invt'):
- if (b == 1):
- b = 0
- else:
- b = 1
- elif (i[0] == 'stackw'):
- StackAccess(0, RegisterReadWrite(i[1], 0, 0))
- elif (i[0] == 'stackr'):
- RegisterReadWrite(i[1], 1, StackAccess(1, 0))
- elif (i[0] == 'stackp'):
- StackAccess(2, 0)
- elif (i[0] == 'callpy'):
- try:
- exec(PyCode[int(i[1])])
- except:
- print("An error occurred while executing code in python mode.")
- pass
- elif (i[0] == 'clearr'):
- ClearReg()
- elif (i[0] == 'clearm'):
- ClearMem()
- elif (i[0] == 'clears'):
- ClearStack()
- elif (i[0] == 'saver'):
- SaveReg()
- elif (i[0] == 'savem'):
- SaveMem()
- elif (i[0] == 'saves'):
- SaveStack()
- elif (i[0] == 'loadr'):
- LoadReg()
- elif (i[0] == 'loadm'):
- LoadMem()
- elif (i[0] == 'loads'):
- LoadStack()
- elif (i[0] == 'mov'):
- RegisterReadWrite(i[1], 1, RegisterReadWrite(i[2], 0, 0))
- elif (i[0] == 'xchg'):
- reg1temp = RegisterReadWrite(i[1], 0, 0)
- reg2temp = RegisterReadWrite(i[2], 0, 0)
- RegisterReadWrite(i[1], 1, reg2temp)
- RegisterReadWrite(i[2], 1, reg1temp)
- elif (i[0] == 'rnd'):
- from random import randint
- RegisterReadWrite(i[1], 1, randint(int(i[2]), int(i[3])))
- elif (i[0] == 'gin'):
- RegisterReadWrite(i[1], 1, input(ConsolidateInput(i)))
- elif (i[0] == 'ous'):
- print(ConsolidateOutput(i))
- elif (i[0] == 'rpc'):
- RegisterReadWrite(i[1], 1, j)
- elif (i[0] == 'wpc'):
- j = RegisterReadWrite(i[1], 0, 0)-1
- elif (i[0] == 'exit'):
- break
- elif (ARCH_RASPPI):
- if (i[0] == 'ARCH_RASPPI_GPIOOUT'):
- GPIO.setup(i[1], GPIO.OUT)
- GPIO.output(i[1], i[2])
- elif (i[0] == 'ARCH_RASPPI_GPIOCLEANUP'):
- GPIO.cleanup()
- j += 1
- def SafeExec(string):
- try:
- Execute(string)
- except:
- print("An error occurred. Check your code for mistakes. If no error messages were printed, check your code anyway.")
- #joke's on you, no error messages have been implemented whatsoever.
- #this whole shitty thing is the very definition of shitty design and implementation.
- try:
- import os
- ARCH_OS = True
- except:
- ARCH_OS = False
- try:
- import RPi.GPIO as GPIO
- GPIO.setmode(GPIO.BCM)
- ARCH_RASPPI = True
- except:
- ARCH_RASPPI = False
- try:
- import win32api
- ARCH_WINAPI = True
- except:
- ARCH_WINAPI = False
- try:
- import win32file
- ARCH_WINFILE = True
- except:
- ARCH_WINFILE = False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement