Exemple #1
0
 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 ()
Exemple #2
0
 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 ()
Exemple #3
0
    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))
Exemple #5
0
 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 ()