Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: UTF-8 -*-
- import sys
- def alusta_lista():
- """Alustaa 65536 kokoisen listan 00-merkeillä"""
- taulukko = []
- for i in range(65536):
- taulukko.append("00")
- return taulukko
- def tarkista_infokomento(komento):
- """Tarkistaa onko annettu komentorivi argumentti --info"""
- if komento == "--info":
- return True
- else:
- return False
- def poista_kommentit(rivit):
- """Poistaa riveistä kommentit"""
- for i in range(len(rivit)):
- if rivit[i].find("/") != -1:
- rivit[i] = rivit[i][:rivit[i].find("/")]
- else:
- pass
- return rivit
- def poista_valit(rivit):
- """Poistaa riveistä turhat välilyönnit"""
- for i in range(len(rivit)):
- rivit[i] = " ".join(rivit[i].split())
- return rivit
- def poista_tyhjat_rivit(rivit, rivittyhjat):
- """Poistaa riveistä tyhjät rivit"""
- for i in range(len(rivit)):
- if not rivit[i].strip():
- pass
- else:
- rivittyhjat.append(rivit[i])
- return rivittyhjat
- def onko_numero(rivit):
- try:
- float(rivit)
- return True
- except ValueError:
- return False
- def tee_symbolilista(rivit, osoite, i):
- """Tekee listoja joissa osoite sekä arvo"""
- pilkunpaikka = rivit[i].find(",")
- numero = int(pilkunpaikka) + 5
- if rivit[i].find("DEC") != -1:
- arvo = hex(int(rivit[i][numero:]))
- if arvo[:1] == "-":
- arvo = hex(int(65536) + int(1)) - int(rivit[i][9:])[2:]
- else:
- arvo = hex(int(rivit[i][numero:]))[2:]
- symboli = rivit[i][:pilkunpaikka]
- elif rivit[i].find("HEX") != -1:
- arvo = rivit[i][numero:]
- symboli = rivit[i][:pilkunpaikka]
- elif rivit[i][:pilkunpaikka] > 3 or onko_numero(rivit[i][:9]):
- print "%d:Bad Symbol" % osoite
- else:
- print "%d:Bad Number" % osoite
- return [arvo, osoite, symboli]
- def tallenna_hyppyosoitteet(rivit, osoite, i):
- pilkunpaikka = rivit[i].find(",")
- if len(rivit[i][:pilkunpaikka]) > 3 or onko_numero(rivit[i][0]):
- print "%d:Bad Symbol" % osoite
- elif len(rivit[i][9:]) > 3 or onko_numero(rivit[i][9]):
- print "%d:Bad Symbol" % osoite
- else:
- symboliarvo = rivit[i][9:]
- symboli = rivit[i][:pilkunpaikka]
- return [symboliarvo, osoite, symboli]
- def muistikasky(muistilista, i, osoitearvopari):
- if muistilista[i].find(" I ") != -1:
- if onko_numero(muistilista[i][4:]):
- """lisätään numeron osoittamassa osoitteessa oleva arvo"""
- else:
- pass
- else:
- if onko_numero(muistilista[i][4:]):
- arvo = int(numero) + int(muistilista[i][:4].zfill(3))
- else:
- osoitearvopari.find()
- if __name__ == "__main__":
- tiedosto = open(sys.argv[1], "r+w")
- rivit = tiedosto.readlines()
- rivittyhjat = []
- rivit = poista_kommentit(rivit)
- rivit = poista_valit(rivit)
- #rivit = poista_tyhjat_rivit(rivit, rivittyhjat)
- taulukko = alusta_lista()
- symbolilista = []
- hyppylista = []
- valmislista = []
- muistilista = []
- osoite = int(0)
- for i in range(len(rivit)):
- osoite = osoite + int(1)
- if len(osoite) > 4:
- print "%d: Number Out Of Range" % osoite
- elif rivit[i].find(",") != -1:
- if rivit[i].find("DEC") != -1 or rivit[i].find("HEX") != -1:
- symbolilista.append(tee_symbolilista(rivit, osoite, i))
- else:
- hyppylista.append(tallenna_hyppyosoitteet(rivit, osoite, i))
- rivit[i] = rivit[i][5:]
- elif rivit[i] == "":
- osoite = osoite + int(1)
- elif rivit[i].find("ORG") != -1:
- orginpituus = rivit[i][4:]
- try:
- osoite = int(rivit[i][4:], 16) - int(1)
- except ValueError:
- print "%d: Bad number" % osoite
- elif len(osoite) > 4:
- print "%d: Number Out Of Range" % osoite
- elif rivit[i].find("BUN") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "4"])
- elif rivit[i].find("LDA") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "2"])
- elif rivit[i].find("AND") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "0"])
- elif rivit[i].find("ADD") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "1"])
- elif rivit[i].find("STA") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "3"])
- elif rivit[i].find("BSA") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "5"])
- elif rivit[i].find("ISZ") != -1:
- muistilista.append([rivit[i], hex(osoite)[2:], "6"])
- elif rivit[i].find("END") != -1:
- osoite = osoite + int(1)
- elif rivit[i].find("CLA") != -1:
- arvo1 = "78"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("CLE") != -1:
- arvo1 = "74"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("CMA") != -1:
- arvo1 = "72"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("CME") != -1:
- arvo1 = "71"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("CIR") != -1:
- arvo1 = "70"
- arvo2 = "80"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("CIL") != -1:
- arvo1 = "70"
- arvo2 = "40"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("INC") != -1:
- arvo1 = "70"
- arvo2 = "20"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SPA") != -1:
- arvo1 = "70"
- arvo2 = "10"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SNA") != -1:
- arvo1 = "70"
- arvo2 = "08"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SZA") != -1:
- arvo1 = "70"
- arvo2 = "04"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SZE") != -1:
- arvo1 = "70"
- arvo2 = "02"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("HLT") != -1:
- arvo1 = "70"
- arvo2 = "01"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("INP") != -1:
- arvo1 = "F8"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("OUT") != -1:
- arvo1 = "F4"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SKI") != -1:
- arvo1 = "F2"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("SKO") != -1:
- arvo1 = "F1"
- arvo2 = "00"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("ION") != -1:
- arvo1 = "F0"
- arvo2 = "80"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- elif rivit[i].find("IOF") != -1:
- arvo1 = "F0"
- arvo2 = "40"
- valmislista.append([arvo1, hex(osoite)[2:]])
- osoite = osoite + int(1)
- valmislista.append([arvo2, hex(osoite)[2:]])
- else:
- print "Symbol not found"
- for i in range(len(symbolilista)):
- arvo0 = symbolilista[i][0].zfill(4)
- arvo1 = arvo0[:2]
- arvo2 = arvo0[2:]
- valmislista.append([arvo1, symbolilista[i][1]])
- valmislista.append([arvo2, hex(int(symbolilista[i][1])+1)[2:]])
- for i in range(len(muistilista)):
- if onko_numero(muistilista[i][0][4]):
- if muistilista[i][0].find(" I") != -1:
- pass
- else:
- arvo0 = muistilista[i][2] + muistilista[i][0][4:].zfill(3)
- arvo1 = arvo0[:2]
- arvo2 = arvo0[2:]
- valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
- valmislista.append([arvo2, hex(int(muistilista[i][1]+1))[2:]])
- else:
- if muistilista[i][0].find(" I") != -1:
- pass
- else:
- for x in range(len(hyppylista)):
- if hyppylista[x][2].find(muistilista[i][0][4:]) != -1:
- osoitteenkohta = hyppylista[x][2].find(muistilista[i][0][4:])
- arvo0 = hex(int(muistilista[i][2])+6)[2:] + hyppylista[osoitteenkohta][1].zfill(3)
- arvo1 = arvo0[:2]
- arvo2 = arvo0[2:]
- valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
- valmislista.append([arvo2, hex(int(muistilista[i][1])+1)[2:]])
- for i in range(len(muistilista)):
- if onko_numero(muistilista[i][0][4]):
- if muistilista[i][0].find(" I") != -1:
- muistilista[i][0] = muistilista[i][0][:-2]
- for x in range(len(valmislista)):
- if valmislista[x][1].find(muistilista[i][0][4:]) != -1:
- osoitteenkohta = valmislista[x][1].find(muistilista[i][0][4:])
- arvo0 = muistilista[i][2] + valmislista[osoitteenkohta][0][1] + valmislista[int(osoitteenkohta) + 1][0]
- arvo1 = arvo0[:2]
- arvo2 = arvo0[2:]
- valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
- valmislista.append([arvo2, hex(int(muistilista[i][1])+1)[2:]])
- else:
- pass
- print valmislista
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement