mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 02:29:52 +00:00
62 lines
1.3 KiB
Awk
Executable File
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;};"
|
|
}
|