cc65/util/parse-bsnes-log.awk

62 lines
1.3 KiB
Awk
Executable File

#!/usr/bin/awk -nf
#
# Parse the bsnes-plus cpu log for the 65816 address mode ranges.
# Since the log doesn't show the op size, we have to be careful
# and add +3 to the range end - this may need manual cleanup.
#
# Grep the input for only one bank's content beforehand.
#
# (C) Lauri Kasanen, under the cc65 license
#
{
addr = $1
IGNORECASE = 1
if ($9 ~ /^nv/) {
val = $9
} else if ($10 ~ /^nv/) {
val = $10
} else {
val = $11
}
IGNORECASE = 0
val = substr(val, 3, 2)
if (val == "1B") # emulation mode
val = "MX"
addrs["0x" substr(addr, 3)] = val
}
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
start = -1
prevval = ""
for (addr in addrs) {
cur = addrs[addr]
if (start == -1) { # first range
start = addr
} else {
if (prevval != cur || addr - prevaddr > 4) { # start a new range
#print "diff " addr - prevaddr ", addr " addr ", pa " prevaddr
if (prevaddr + 3 >= addr + 0)
fmt = sprintf("%04x", addr - 1)
else
fmt = sprintf("%04x", prevaddr + 3)
print "RANGE { START $" substr(start, 3) "; END $" fmt "; ADDRMODE \"" prevval "\"; TYPE Code;};"
start = addr
}
}
#print "\t" addr " " addrs[addr]
prevval = cur
prevaddr = addr
}
fmt = sprintf("%04x", prevaddr + 3)
print "RANGE { START $" substr(start, 3) "; END $" fmt "; ADDRMODE \"" prevval "\"; TYPE Code;};"
}