Start on 65816
This commit is contained in:
61
util/parse-bsnes-log.awk
Executable file
61
util/parse-bsnes-log.awk
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/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;};"
|
||||
}
|
||||
Reference in New Issue
Block a user