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

#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))