From 0b8fd380a61805445f1ef25157aa80e22c8e5493 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 29 Apr 2024 20:11:28 -0400 Subject: xexcat: detect DOS 1.0 files (and abort). --- TODO | 5 +++-- xexcat.c | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index d656b9a..eb90d06 100644 --- a/TODO +++ b/TODO @@ -2,8 +2,9 @@ for now: These may need library (xex.c) changes: xexcat: handle run/init addresses embedded in a segment longer than 2 bytes. -xexcat: handle or at least detect DOS 1.0 executables. currently - xex_fread_seg_header() will warn about them, but that's all. +xexcat: handle or at least detect DOS 1.0 executables as + input. currently xex_fread_seg_header() will warn about them, but that's + all. xexcat: warn if an an init address occurs before the code it references. or at least if it occurs before *any* code! diff --git a/xexcat.c b/xexcat.c index 3ec45c7..1b4ee01 100644 --- a/xexcat.c +++ b/xexcat.c @@ -237,6 +237,14 @@ int main(int argc, char **argv) { /* normalize the $FFFF headers: only the first segment needs one. though if the output is DOS 1.0, it's $0984 instead. */ if(count == 1) { + if(!seg.has_ff_header) { + if(seg.start_addr == 0x0984) { + fprintf(stderr, + SELF ": %s: can't handle DOS 1.0 executables as input\n" + " Convert this file to a regular .xex with xex1to2.\n", + infile); + } + } if(dos1_output) { seg.has_ff_header = 0; fputc(0x84, out); -- cgit v1.2.3