Advertisement
Guest User

Untitled

a guest
May 25th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.54 KB | None | 0 0
  1. # -*- coding: UTF-8 -*-
  2.  
  3. import sys
  4.  
  5. def alusta_lista():
  6. """Alustaa 65536 kokoisen listan 00-merkeillä"""
  7. taulukko = []
  8. for i in range(65536):
  9. taulukko.append("00")
  10. return taulukko
  11.  
  12. def tarkista_infokomento(komento):
  13. """Tarkistaa onko annettu komentorivi argumentti --info"""
  14. if komento == "--info":
  15. return True
  16. else:
  17. return False
  18.  
  19. def poista_kommentit(rivit):
  20. """Poistaa riveistä kommentit"""
  21. for i in range(len(rivit)):
  22. if rivit[i].find("/") != -1:
  23. rivit[i] = rivit[i][:rivit[i].find("/")]
  24. else:
  25. pass
  26. return rivit
  27.  
  28. def poista_valit(rivit):
  29. """Poistaa riveistä turhat välilyönnit"""
  30. for i in range(len(rivit)):
  31. rivit[i] = " ".join(rivit[i].split())
  32. return rivit
  33.  
  34. def poista_tyhjat_rivit(rivit, rivittyhjat):
  35. """Poistaa riveistä tyhjät rivit"""
  36. for i in range(len(rivit)):
  37. if not rivit[i].strip():
  38. pass
  39. else:
  40. rivittyhjat.append(rivit[i])
  41. return rivittyhjat
  42.  
  43. def onko_numero(rivit):
  44. try:
  45. float(rivit)
  46. return True
  47. except ValueError:
  48. return False
  49.  
  50. def tee_symbolilista(rivit, osoite, i):
  51. """Tekee listoja joissa osoite sekä arvo"""
  52. pilkunpaikka = rivit[i].find(",")
  53. numero = int(pilkunpaikka) + 5
  54. if rivit[i].find("DEC") != -1:
  55. arvo = hex(int(rivit[i][numero:]))
  56. if arvo[:1] == "-":
  57. arvo = hex(int(65536) + int(1)) - int(rivit[i][9:])[2:]
  58. else:
  59. arvo = hex(int(rivit[i][numero:]))[2:]
  60. symboli = rivit[i][:pilkunpaikka]
  61. elif rivit[i].find("HEX") != -1:
  62. arvo = rivit[i][numero:]
  63. symboli = rivit[i][:pilkunpaikka]
  64. elif rivit[i][:pilkunpaikka] > 3 or onko_numero(rivit[i][:9]):
  65. print "%d:Bad Symbol" % osoite
  66. else:
  67. print "%d:Bad Number" % osoite
  68. return [arvo, osoite, symboli]
  69.  
  70. def tallenna_hyppyosoitteet(rivit, osoite, i):
  71. pilkunpaikka = rivit[i].find(",")
  72. if len(rivit[i][:pilkunpaikka]) > 3 or onko_numero(rivit[i][0]):
  73. print "%d:Bad Symbol" % osoite
  74. elif len(rivit[i][9:]) > 3 or onko_numero(rivit[i][9]):
  75. print "%d:Bad Symbol" % osoite
  76. else:
  77. symboliarvo = rivit[i][9:]
  78. symboli = rivit[i][:pilkunpaikka]
  79. return [symboliarvo, osoite, symboli]
  80.  
  81. def muistikasky(muistilista, i, osoitearvopari):
  82. if muistilista[i].find(" I ") != -1:
  83. if onko_numero(muistilista[i][4:]):
  84. """lisätään numeron osoittamassa osoitteessa oleva arvo"""
  85. else:
  86. pass
  87. else:
  88. if onko_numero(muistilista[i][4:]):
  89. arvo = int(numero) + int(muistilista[i][:4].zfill(3))
  90. else:
  91. osoitearvopari.find()
  92.  
  93. if __name__ == "__main__":
  94. tiedosto = open(sys.argv[1], "r+w")
  95. rivit = tiedosto.readlines()
  96. rivittyhjat = []
  97. rivit = poista_kommentit(rivit)
  98. rivit = poista_valit(rivit)
  99. #rivit = poista_tyhjat_rivit(rivit, rivittyhjat)
  100. taulukko = alusta_lista()
  101. symbolilista = []
  102. hyppylista = []
  103. valmislista = []
  104. muistilista = []
  105. osoite = int(0)
  106. for i in range(len(rivit)):
  107. osoite = osoite + int(1)
  108. if len(osoite) > 4:
  109. print "%d: Number Out Of Range" % osoite
  110. elif rivit[i].find(",") != -1:
  111. if rivit[i].find("DEC") != -1 or rivit[i].find("HEX") != -1:
  112. symbolilista.append(tee_symbolilista(rivit, osoite, i))
  113. else:
  114. hyppylista.append(tallenna_hyppyosoitteet(rivit, osoite, i))
  115. rivit[i] = rivit[i][5:]
  116. elif rivit[i] == "":
  117. osoite = osoite + int(1)
  118. elif rivit[i].find("ORG") != -1:
  119. orginpituus = rivit[i][4:]
  120. try:
  121. osoite = int(rivit[i][4:], 16) - int(1)
  122. except ValueError:
  123. print "%d: Bad number" % osoite
  124. elif len(osoite) > 4:
  125. print "%d: Number Out Of Range" % osoite
  126. elif rivit[i].find("BUN") != -1:
  127. muistilista.append([rivit[i], hex(osoite)[2:], "4"])
  128. elif rivit[i].find("LDA") != -1:
  129. muistilista.append([rivit[i], hex(osoite)[2:], "2"])
  130. elif rivit[i].find("AND") != -1:
  131. muistilista.append([rivit[i], hex(osoite)[2:], "0"])
  132. elif rivit[i].find("ADD") != -1:
  133. muistilista.append([rivit[i], hex(osoite)[2:], "1"])
  134. elif rivit[i].find("STA") != -1:
  135. muistilista.append([rivit[i], hex(osoite)[2:], "3"])
  136. elif rivit[i].find("BSA") != -1:
  137. muistilista.append([rivit[i], hex(osoite)[2:], "5"])
  138. elif rivit[i].find("ISZ") != -1:
  139. muistilista.append([rivit[i], hex(osoite)[2:], "6"])
  140. elif rivit[i].find("END") != -1:
  141. osoite = osoite + int(1)
  142. elif rivit[i].find("CLA") != -1:
  143. arvo1 = "78"
  144. arvo2 = "00"
  145. valmislista.append([arvo1, hex(osoite)[2:]])
  146. osoite = osoite + int(1)
  147. valmislista.append([arvo2, hex(osoite)[2:]])
  148. elif rivit[i].find("CLE") != -1:
  149. arvo1 = "74"
  150. arvo2 = "00"
  151. valmislista.append([arvo1, hex(osoite)[2:]])
  152. osoite = osoite + int(1)
  153. valmislista.append([arvo2, hex(osoite)[2:]])
  154. elif rivit[i].find("CMA") != -1:
  155. arvo1 = "72"
  156. arvo2 = "00"
  157. valmislista.append([arvo1, hex(osoite)[2:]])
  158. osoite = osoite + int(1)
  159. valmislista.append([arvo2, hex(osoite)[2:]])
  160. elif rivit[i].find("CME") != -1:
  161. arvo1 = "71"
  162. arvo2 = "00"
  163. valmislista.append([arvo1, hex(osoite)[2:]])
  164. osoite = osoite + int(1)
  165. valmislista.append([arvo2, hex(osoite)[2:]])
  166. elif rivit[i].find("CIR") != -1:
  167. arvo1 = "70"
  168. arvo2 = "80"
  169. valmislista.append([arvo1, hex(osoite)[2:]])
  170. osoite = osoite + int(1)
  171. valmislista.append([arvo2, hex(osoite)[2:]])
  172. elif rivit[i].find("CIL") != -1:
  173. arvo1 = "70"
  174. arvo2 = "40"
  175. valmislista.append([arvo1, hex(osoite)[2:]])
  176. osoite = osoite + int(1)
  177. valmislista.append([arvo2, hex(osoite)[2:]])
  178. elif rivit[i].find("INC") != -1:
  179. arvo1 = "70"
  180. arvo2 = "20"
  181. valmislista.append([arvo1, hex(osoite)[2:]])
  182. osoite = osoite + int(1)
  183. valmislista.append([arvo2, hex(osoite)[2:]])
  184. elif rivit[i].find("SPA") != -1:
  185. arvo1 = "70"
  186. arvo2 = "10"
  187. valmislista.append([arvo1, hex(osoite)[2:]])
  188. osoite = osoite + int(1)
  189. valmislista.append([arvo2, hex(osoite)[2:]])
  190. elif rivit[i].find("SNA") != -1:
  191. arvo1 = "70"
  192. arvo2 = "08"
  193. valmislista.append([arvo1, hex(osoite)[2:]])
  194. osoite = osoite + int(1)
  195. valmislista.append([arvo2, hex(osoite)[2:]])
  196. elif rivit[i].find("SZA") != -1:
  197. arvo1 = "70"
  198. arvo2 = "04"
  199. valmislista.append([arvo1, hex(osoite)[2:]])
  200. osoite = osoite + int(1)
  201. valmislista.append([arvo2, hex(osoite)[2:]])
  202. elif rivit[i].find("SZE") != -1:
  203. arvo1 = "70"
  204. arvo2 = "02"
  205. valmislista.append([arvo1, hex(osoite)[2:]])
  206. osoite = osoite + int(1)
  207. valmislista.append([arvo2, hex(osoite)[2:]])
  208. elif rivit[i].find("HLT") != -1:
  209. arvo1 = "70"
  210. arvo2 = "01"
  211. valmislista.append([arvo1, hex(osoite)[2:]])
  212. osoite = osoite + int(1)
  213. valmislista.append([arvo2, hex(osoite)[2:]])
  214. elif rivit[i].find("INP") != -1:
  215. arvo1 = "F8"
  216. arvo2 = "00"
  217. valmislista.append([arvo1, hex(osoite)[2:]])
  218. osoite = osoite + int(1)
  219. valmislista.append([arvo2, hex(osoite)[2:]])
  220. elif rivit[i].find("OUT") != -1:
  221. arvo1 = "F4"
  222. arvo2 = "00"
  223. valmislista.append([arvo1, hex(osoite)[2:]])
  224. osoite = osoite + int(1)
  225. valmislista.append([arvo2, hex(osoite)[2:]])
  226. elif rivit[i].find("SKI") != -1:
  227. arvo1 = "F2"
  228. arvo2 = "00"
  229. valmislista.append([arvo1, hex(osoite)[2:]])
  230. osoite = osoite + int(1)
  231. valmislista.append([arvo2, hex(osoite)[2:]])
  232. elif rivit[i].find("SKO") != -1:
  233. arvo1 = "F1"
  234. arvo2 = "00"
  235. valmislista.append([arvo1, hex(osoite)[2:]])
  236. osoite = osoite + int(1)
  237. valmislista.append([arvo2, hex(osoite)[2:]])
  238. elif rivit[i].find("ION") != -1:
  239. arvo1 = "F0"
  240. arvo2 = "80"
  241. valmislista.append([arvo1, hex(osoite)[2:]])
  242. osoite = osoite + int(1)
  243. valmislista.append([arvo2, hex(osoite)[2:]])
  244. elif rivit[i].find("IOF") != -1:
  245. arvo1 = "F0"
  246. arvo2 = "40"
  247. valmislista.append([arvo1, hex(osoite)[2:]])
  248. osoite = osoite + int(1)
  249. valmislista.append([arvo2, hex(osoite)[2:]])
  250. else:
  251. print "Symbol not found"
  252. for i in range(len(symbolilista)):
  253. arvo0 = symbolilista[i][0].zfill(4)
  254. arvo1 = arvo0[:2]
  255. arvo2 = arvo0[2:]
  256. valmislista.append([arvo1, symbolilista[i][1]])
  257. valmislista.append([arvo2, hex(int(symbolilista[i][1])+1)[2:]])
  258. for i in range(len(muistilista)):
  259. if onko_numero(muistilista[i][0][4]):
  260. if muistilista[i][0].find(" I") != -1:
  261. pass
  262. else:
  263. arvo0 = muistilista[i][2] + muistilista[i][0][4:].zfill(3)
  264. arvo1 = arvo0[:2]
  265. arvo2 = arvo0[2:]
  266. valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
  267. valmislista.append([arvo2, hex(int(muistilista[i][1]+1))[2:]])
  268. else:
  269. if muistilista[i][0].find(" I") != -1:
  270. pass
  271. else:
  272. for x in range(len(hyppylista)):
  273. if hyppylista[x][2].find(muistilista[i][0][4:]) != -1:
  274. osoitteenkohta = hyppylista[x][2].find(muistilista[i][0][4:])
  275. arvo0 = hex(int(muistilista[i][2])+6)[2:] + hyppylista[osoitteenkohta][1].zfill(3)
  276. arvo1 = arvo0[:2]
  277. arvo2 = arvo0[2:]
  278. valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
  279. valmislista.append([arvo2, hex(int(muistilista[i][1])+1)[2:]])
  280. for i in range(len(muistilista)):
  281. if onko_numero(muistilista[i][0][4]):
  282. if muistilista[i][0].find(" I") != -1:
  283. muistilista[i][0] = muistilista[i][0][:-2]
  284. for x in range(len(valmislista)):
  285. if valmislista[x][1].find(muistilista[i][0][4:]) != -1:
  286. osoitteenkohta = valmislista[x][1].find(muistilista[i][0][4:])
  287. arvo0 = muistilista[i][2] + valmislista[osoitteenkohta][0][1] + valmislista[int(osoitteenkohta) + 1][0]
  288. arvo1 = arvo0[:2]
  289. arvo2 = arvo0[2:]
  290. valmislista.append([arvo1, hex(int(muistilista[i][1]))[2:]])
  291. valmislista.append([arvo2, hex(int(muistilista[i][1])+1)[2:]])
  292. else:
  293. pass
  294. print valmislista
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement