You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
101 lines
2.2 KiB
#the closest thing to writing raw ASM
|
|
import re, sys
|
|
|
|
code = open(sys.argv[1]).read()
|
|
|
|
outhex = ""
|
|
|
|
def writeHex(str):
|
|
global outhex
|
|
#print(f"0x{str}")
|
|
outhex += str
|
|
|
|
count = 1
|
|
comment = False
|
|
for i in re.split("\n| ",code):
|
|
if comment:
|
|
if i == "*/":
|
|
comment = False
|
|
continue
|
|
match i:
|
|
case "/*":
|
|
comment = True
|
|
case "NOP":
|
|
writeHex("00")
|
|
case "INC":
|
|
writeHex("01")
|
|
case "IRA":
|
|
writeHex("02")
|
|
case "IRX":
|
|
writeHex("03")
|
|
case "IRY":
|
|
writeHex("04")
|
|
case "DNC":
|
|
writeHex("05")
|
|
case "DCA":
|
|
writeHex("06")
|
|
case "DCX":
|
|
writeHex("07")
|
|
case "DCY":
|
|
writeHex("07")
|
|
case "JEA":
|
|
writeHex("10")
|
|
case "JER":
|
|
writeHex("11")
|
|
case "JNA":
|
|
writeHex("12")
|
|
case "JNR":
|
|
writeHex("13")
|
|
case "JIS":
|
|
writeHex("14")
|
|
case "JGT":
|
|
writeHex("15")
|
|
case "JLT":
|
|
writeHex("16")
|
|
case "JML":
|
|
writeHex("1A")
|
|
case "JMA":
|
|
writeHex("1B")
|
|
case "LXA":
|
|
writeHex("20")
|
|
case "LXL":
|
|
writeHex("21")
|
|
case "LYA":
|
|
writeHex("22")
|
|
case "LYL":
|
|
writeHex("23")
|
|
case "LAA":
|
|
writeHex("24")
|
|
case "LAL":
|
|
writeHex("25")
|
|
case "LOA":
|
|
writeHex("26")
|
|
case "LOL":
|
|
writeHex("27")
|
|
case "STX":
|
|
writeHex("2A")
|
|
case "STY":
|
|
writeHex("2B")
|
|
case "STA":
|
|
writeHex("2C")
|
|
case "AAA":
|
|
writeHex("42")
|
|
case "SAA":
|
|
writeHex("47")
|
|
case "DBG":
|
|
writeHex("FF")
|
|
case "HLT":
|
|
writeHex("FC")
|
|
case other:
|
|
if len(i) == 4: #assume memory address
|
|
writeHex(f"{i[0]+i[1]}")
|
|
writeHex(f"{i[2]+i[3]}")
|
|
elif len(i) == 2:
|
|
writeHex(f"{i}")
|
|
#else:
|
|
# writeHex("00")
|
|
count+=1
|
|
|
|
#print(outhex)
|
|
with open(sys.argv[2], "wb") as f:
|
|
f.write(bytes.fromhex(outhex)) |