diff options
Diffstat (limited to 'xex.c')
-rw-r--r-- | xex.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -114,6 +114,10 @@ int xex_fread_seg_header(xex_segment *seg, FILE *file) { if(d == EOF) return 0; addr = XEX_ADDR(c, d); + if(addr == 0x0984) { + fprintf(stderr, "xex_fread_seg_header(): warning: this might be a DOS 1.0 file (not supported)\n"); + } + if(addr == 0xffff) { seg->has_ff_header = 1; c = read_char(file); @@ -289,6 +293,24 @@ int xex_check_seg(xex_segment *seg) { return ret; } +static int xex_get_addr_from(xex_segment *seg, int location) { + int i; + + if(seg->start_addr > location) return -1; + if(seg->end_addr <= location) return -1; + + i = location - seg->start_addr; + return XEX_ADDR(seg->object[i], seg->object[i + 1]); +} + +int xex_get_run_addr(xex_segment *seg) { + return xex_get_addr_from(seg, XEX_RUNAD); +} + +int xex_get_init_addr(xex_segment *seg) { + return xex_get_addr_from(seg, XEX_INITAD); +} + char *xex_strerror(int err) { if(err < 0 || err >= XERR_MAXERR) err = XERR_MAXERR; |