def __extraWords(self, labels): if self.extra != None: globalLabel = labels["$$globalLabel"] eval_locals = {} for x in self.labels: if x.startswith("$") and not x.startswith("$$"): if (globalLabel+x) in labels: eval_locals[globalLabel+x] = labels[globalLabel+x].getAddress().getAddress() else: if x in labels: eval_locals[x] = labels[x].getAddress().getAddress() for x in value.registers.keys(): eval_locals[x.lower()] = eval_register(0x10 | value.registers[x]) eval_locals[x.upper()] = eval_register(0x10 | value.registers[x]) eval_locals["SP"] = eval_register(value.cpu["PICK"]) eval_locals["sP"] = eval_register(value.cpu["PICK"]) eval_locals["Sp"] = eval_register(value.cpu["PICK"]) eval_locals["sp"] = eval_register(value.cpu["PICK"]) eval_locals["abs"] = abs if self.parent != None: eval_locals["$$curAddress"] = self.parent.getAddress().getAddress() extra = eval_0xSCAmodified(self.extra, eval_locals, globalLabel)#eval(self.extra,{"__builtins__":None},eval_locals) if type(extra) == type(42): while extra > 0xFFFF: extra -= 0x10000 while extra < 0x0000: extra += 0x10000 return (extra,) return ()
def _extraWords(self, labels, labelCache=None): if self.extra != None: globalLabel = labels["$$globalLabel"] eval_locals = {} if labelCache == None: for x in self.labels: if x.startswith("$") and not x.startswith("$$"): if (globalLabel+x) in labels: eval_locals[globalLabel+x] = labels[globalLabel+x].getAddress().getAddress() else: if x in labels: eval_locals[x] = labels[x].getAddress().getAddress() else: eval_locals.extend(labelCache) eval_locals["abs"] = abs eval_locals["str"] = str eval_locals["hex"] = hex if self.parent != None: eval_locals["$$curAddress"] = self.parent.getAddress().getAddress() extra = eval_0xSCAmodified(self.extra, eval_locals, globalLabel)#eval(self.extra,{"__builtins__":None},eval_locals) if type(extra) == type("str"): return tuple(extra.encode("ascii")) if type(extra) == type(wordString(())): return tuple(extra) if extra != None: self.isInt = True return (extra,) return ()
def __init__(self, value, lineNum, parent): self.lineNum = lineNum self.parent = parent self.size = 0 self.lastLabels = [] self.isInt = False self.error = None try: self.extra = eval_0xSCAmodified(value, {}, preEval=True) self.labels = extractVaribles(self.extra, "") except Exception as err: self.printError(repr(err)) self.labels = [] self.extra = None return labels = {"$$globalLabel":""} for x in self.labels: labels[x] = address(address(1)) try: self.size = len(self._extraWords(labels)) except NameError as err: self.printError("We encountered an error that shouldn't happen, this probably represents a bug in the assembler.") self.printError(repr(err)) return
def __init__(self, value, lineNum, parent): self.lineNum = lineNum self.parent = parent try: self.extra = eval_0xSCAmodified(value, {}, preEval=True) self.labels = extractVaribles(self.extra, "") except Exception as err: self.printError(repr(err))
def __init__(self, part, lineNum, parent, allowShortLiteral): self.lineNum = lineNum self.parent = parent registers = value.registers cpu = value.cpu self.value = None self.extra = None self.shortLiteral = False self.allowShortLiteral = allowShortLiteral if type(part) == type(0x42): self.value = part & 0x3F elif type(part) == type(""): if part.startswith("[") and part.endswith("]"): part = part[1:-1] if part.lower() in registers: self.value = 0x08 | registers[part.lower()] elif part.upper() == "SP++": self.value = cpu["POP"] elif part.upper() == "--SP": self.value = cpu["PUSH"] elif part.upper() == "SP+[PC++]": self.value = cpu["PICK"] elif part.upper() == "SP": self.value = cpu["PEEK"] elif part.upper() == "[PC++]": self.value = 0x1E elif part.upper() == "PC++": self.value = 0x1F else: self.value = -1 self.extra = part elif part.lower() in registers: self.value = registers[part.lower()] elif part.upper() in cpu: self.value = cpu[part.upper()] else: self.value = 0x1F self.extra = part else: self.value = 0x1F self.extra = part labels = {} self.lastLabels = [] self.labels = () if self.extra != None: try: self.extra = eval_0xSCAmodified(self.extra, {}, preEval=True) self.labels = extractVaribles(self.extra, "") except Exception as err: self.printError(repr(err)) return if len(self.labels) == 0: #We need to force an optimize for those short literals self.labels = ["NotReally"] self.optimize({"NotReally":address(address(0)), "$$globalLabel":""}) self.labels = [] self.lastLabels = []
def __init__(self, parts, preceding, lineNum, fileName, reader, labels={}): self.__initAlways__(parts, preceding, lineNum, fileName, reader, labels) operation = None try: operation = eval_0xSCAmodified(self.extra, {}, preEval=True) except Exception as e: self.printError("Failed to understand expression to insert macro: " + str(e.args[0])) return if type(operation) != type(()) or operation[0] != "func": self.printError("Expected macro call (Ex: \"aMacro()\", \"aMacro(param1, param2)\"") return self.macroName = operation[1] macroArgs = [] for arg in operation[2]: macroArgs.append(value_preprocesser(arg, lineNum, None)) self.macroArgs = tuple(macroArgs)
def _extraWords(self, labels, labelCache=None): if self.extra != None: globalLabel = labels["$$globalLabel"] eval_locals = {} if labelCache == None: for x in self.labels: if x.startswith("$") and not x.startswith("$$"): if (globalLabel+x) in labels: eval_locals[globalLabel+x] = labels[globalLabel+x].getAddress().getAddress() else: if x in labels: eval_locals[x] = labels[x].getAddress().getAddress() else: eval_locals.extend(labelCache) eval_locals["abs"] = abs eval_locals["str"] = str eval_locals["hex"] = hex if self.parent != None: eval_locals["$$curAddress"] = self.parent.getAddress().getAddress() return eval_0xSCAmodified(self.extra, eval_locals, globalLabel)#eval(self.extra,{"__builtins__":None},eval_locals) return ()