aboutsummaryrefslogtreecommitdiff
path: root/xexamine.c
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2024-05-01 16:36:02 -0400
committerB. Watson <urchlay@slackware.uk>2024-05-01 16:36:02 -0400
commit422606bb693ed02cd662b1426d00622416c15ef4 (patch)
treed59de840edce3c18837e6f84770122a48c7b5c5a /xexamine.c
parent19f09419682a5ef45d629f40a60f5e90fd9dc40a (diff)
downloadbw-atari8-tools-422606bb693ed02cd662b1426d00622416c15ef4.tar.gz
xexamine: handle embedded run/init addresses in segments >2 bytes.
Diffstat (limited to 'xexamine.c')
-rw-r--r--xexamine.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/xexamine.c b/xexamine.c
index 64ecb8b..567f5fd 100644
--- a/xexamine.c
+++ b/xexamine.c
@@ -309,7 +309,7 @@ int main(int argc, char **argv) {
xex_segment seg;
unsigned char buffer[65536];
char *filename;
- int opt, offset, segcount = 0, only_segment = 0, header_printed = 0, decimal = 0, print_filenames = 0;
+ int opt, offset, segcount = 0, only_segment = 0, header_printed = 0, decimal = 0, print_filenames = 0, r, i;
uint32_t crc;
while((opt = getopt(argc, argv, "vhs:d")) != -1) {
@@ -363,22 +363,26 @@ int main(int argc, char **argv) {
if(!only_segment || (only_segment == segcount)) {
if(!header_printed) {
- printf("Seg | Offset | Start | End | Bytes | CRC32 | Type\n");
+ printf("Seg | Offset | Start | End | Bytes | CRC32 | Code%% | Run/Init?\n");
header_printed++;
}
printf((decimal ?
"%3d | %6d | %5d | %5d | %5d | %08x | " :
- "%3d | %6d | $%04x | $%04x | %5d | %08x | "),
- segcount, offset, seg.start_addr, seg.end_addr, seg.len, crc);
-
- /* TODO: what if there's a >=4 byte segment that loads at RUNAD?
- the next 2 bytes are INITAD, we would silently ignore that fact. */
- if(seg.start_addr == XEX_RUNAD && seg.len > 1)
- printf((decimal ? "Run %5d" : "Run $%04x"), (seg.object[0] | (seg.object[1] << 8)));
- else if(seg.start_addr == XEX_INITAD && seg.len > 1)
+ "%3d | %6d | $%04x | $%04x | %5d | %08x | %4d%% | "),
+ segcount, offset, seg.start_addr, seg.end_addr, seg.len, crc,
+ classify_seg(seg));
+
+ r = xex_get_run_addr(&seg);
+ i = xex_get_init_addr(&seg);
+ if(r != -1) {
+ if(i == -1) putchar(' ');
+ printf((decimal ? "Run %5d" : "Run $%04x"), (seg.object[0] | (seg.object[1] << 8)));
+ }
+ if(i != -1) {
+ if(r != -1) printf(", ");
printf((decimal ? "Init %5d" : "Init $%04x"), (seg.object[0] | (seg.object[1] << 8)));
- else printf("%d%% code", classify_seg(seg));
+ }
putchar('\n');
}