From e27e396c30264f22b094bbd615d431ecc5062e49 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 17 May 2015 18:50:51 -0700 Subject: [PATCH] TAPES: Attempt to validate the record structure of TPC formatted tapes when they are attached. Stubs to validate SIMH and E11 format tapes as well. Once all validation routines are available, logic to auto detect tape format will be implemented. --- doc/simh_doc.doc | Bin 205312 -> 205312 bytes sim_tape.c | 63 +++++++++++++++++++++++++++++++++++++---------- sim_tape.h | 1 - 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 21e45938fb6803dd1416ed0fd68e787f7b0e8f72..3c3d9769edeabd620b63331f501015eecad65b61 100644 GIT binary patch delta 18525 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 delta 18756 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 @@ -643,7 +661,7 @@ if (sim_deb && (ctx->dptr->dctrl & reason)) 1024 171 */ -t_stat sim_tape_rdlntf (UNIT *uptr, t_mtrlnt *bc) +static t_stat sim_tape_rdlntf (UNIT *uptr, t_mtrlnt *bc) { struct tape_context *ctx = (struct tape_context *)uptr->tape_ctx; uint8 c; @@ -838,7 +856,7 @@ return r; runaway and the erase gap implementation, respectively. */ -t_stat sim_tape_rdlntr (UNIT *uptr, t_mtrlnt *bc) +static t_stat sim_tape_rdlntr (UNIT *uptr, t_mtrlnt *bc) { struct tape_context *ctx = (struct tape_context *)uptr->tape_ctx; uint8 c; @@ -1186,7 +1204,7 @@ return r; /* Write metadata forward (internal routine) */ -t_stat sim_tape_wrdata (UNIT *uptr, uint32 dat) +static t_stat sim_tape_wrdata (UNIT *uptr, uint32 dat) { struct tape_context *ctx = (struct tape_context *)uptr->tape_ctx; @@ -2048,7 +2066,7 @@ return ((uptr->flags & MTUF_WRP) || (MT_GET_FMT (uptr) == MTUF_F_TPC))? TRUE: FA /* Process I/O error */ -t_stat sim_tape_ioerr (UNIT *uptr) +static t_stat sim_tape_ioerr (UNIT *uptr) { sim_printf ("%s: Magtape library I/O error: %s\n", sim_uname (uptr), strerror (errno)); clearerr (uptr->fileref); @@ -2091,32 +2109,51 @@ return SCPE_OK; /* Map a TPC format tape image */ -uint32 sim_tape_tpc_map (UNIT *uptr, t_addr *map) +static uint32 sim_tape_tpc_map (UNIT *uptr, t_addr *map) { t_addr tpos; -t_tpclnt bc; +t_addr tape_size; +t_tpclnt bc, last_bc; size_t i; uint32 objc; if ((uptr == NULL) || (uptr->fileref == NULL)) return 0; +tape_size = (t_addr)sim_fsize (uptr->fileref); for (objc = 0, tpos = 0;; ) { sim_fseek (uptr->fileref, tpos, SEEK_SET); i = sim_fread (&bc, sizeof (t_tpclnt), 1, uptr->fileref); - if (i == 0) + if (i == 0) /* past or at eof? */ break; if (map) map[objc] = tpos; objc++; tpos = tpos + ((bc + 1) & ~1) + sizeof (t_tpclnt); + last_bc = bc; } +if ((last_bc != 0xffff) && (tpos > tape_size)) /* Unreasonable format? */ + return 0; if (map) map[objc] = tpos; return objc; } +/* Check the basic structure of a SIMH format tape image */ + +static t_stat sim_tape_simh_check (UNIT *uptr) +{ +return SCPE_OK; +} + +/* Check the basic structure of a E11 format tape image */ + +static t_stat sim_tape_e11_check (UNIT *uptr) +{ +return SCPE_OK; +} + /* Find the preceding record in a TPC file */ -t_addr sim_tape_tpc_fnd (UNIT *uptr, t_addr *map) +static t_addr sim_tape_tpc_fnd (UNIT *uptr, t_addr *map) { uint32 lo, hi, p; diff --git a/sim_tape.h b/sim_tape.h index 10831d27..629ab176 100644 --- a/sim_tape.h +++ b/sim_tape.h @@ -198,6 +198,5 @@ t_stat sim_tape_set_dens (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat sim_tape_show_dens (FILE *st, UNIT *uptr, int32 val, void *desc); t_stat sim_tape_set_asynch (UNIT *uptr, int latency); t_stat sim_tape_clr_asynch (UNIT *uptr); -void sim_tape_data_trace (UNIT *uptr, const uint8 *data, size_t len, const char* txt, int detail, uint32 reason); #endif