summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/imgtool/modules/vzdos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/imgtool/modules/vzdos.cpp')
-rw-r--r--src/tools/imgtool/modules/vzdos.cpp65
1 files changed, 30 insertions, 35 deletions
diff --git a/src/tools/imgtool/modules/vzdos.cpp b/src/tools/imgtool/modules/vzdos.cpp
index 4ccbc801253..0005c0973cf 100644
--- a/src/tools/imgtool/modules/vzdos.cpp
+++ b/src/tools/imgtool/modules/vzdos.cpp
@@ -8,15 +8,22 @@
****************************************************************************/
-#include <cstdio>
-#include <cstring>
-#include <cstdlib>
-#include <cmath>
#include "imgtool.h"
-#include "formats/imageutl.h"
-#include "formats/vt_dsk.h"
+#include "filter.h"
#include "iflopimg.h"
+#include "formats/vt_dsk_legacy.h"
+
+#include "corestr.h"
+#include "hashing.h"
+#include "multibyte.h"
+#include "opresolv.h"
+
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+
/*
sector format
@@ -88,18 +95,6 @@ static int vzdos_get_fname_len(const char *fname)
return len;
}
-/* calculate checksum-16 of buffer */
-static uint16_t chksum16(uint8_t *buffer, int len)
-{
- int i;
- uint16_t sum = 0;
-
- for (i = 0; i < len; i++)
- sum += buffer[i];
-
- return sum;
-}
-
/* returns the offset where the actual sector data starts */
static imgtoolerr_t vzdos_get_data_start(imgtool::image &img, int track, int sector, int *start)
{
@@ -135,7 +130,7 @@ static imgtoolerr_t vzdos_read_sector_data(imgtool::image &img, int track, int s
if (ret) return (imgtoolerr_t)ret;
/* verify sector checksums */
- if (pick_integer_le(buffer, DATA_SIZE + 2, 2) != chksum16(buffer, DATA_SIZE + 2))
+ if (get_u16le(&buffer[DATA_SIZE + 2]) != util::sum16_creator::simple(buffer, DATA_SIZE + 2))
return IMGTOOLERR_CORRUPTFILE;
memcpy(data, &buffer, DATA_SIZE + 2);
@@ -153,7 +148,7 @@ static imgtoolerr_t vzdos_write_sector_data(imgtool::image &img, int track, int
if (ret) return (imgtoolerr_t)ret;
memcpy(buffer, data, DATA_SIZE + 2);
- place_integer_le(buffer, DATA_SIZE + 2, 2, chksum16(data, DATA_SIZE + 2));
+ put_u16le(&buffer[DATA_SIZE + 2], util::sum16_creator::simple(data, DATA_SIZE + 2));
ret = floppy_write_sector(imgtool_floppy(img), 0, track, sector_order[sector], data_start, buffer, sizeof(buffer), 0); /* TODO: pass ddam argument from imgtool */
if (ret) return (imgtoolerr_t)ret;
@@ -183,10 +178,10 @@ static imgtoolerr_t vzdos_get_dirent(imgtool::image &img, int index, vzdos_diren
entry = ((index % 8) * sizeof(vzdos_dirent));
memcpy(ent, &buffer[entry], 10);
- ent->start_track = pick_integer_le(&buffer[entry], 10, 1);
- ent->start_sector = pick_integer_le(&buffer[entry], 11, 1);
- ent->start_address = pick_integer_le(&buffer[entry], 12, 2);
- ent->end_address = pick_integer_le(&buffer[entry], 14, 2);
+ ent->start_track = buffer[entry + 10];
+ ent->start_sector = buffer[entry + 11];
+ ent->start_address = get_u16le(&buffer[entry + 12]);
+ ent->end_address = get_u16le(&buffer[entry + 14]);
if (ent->ftype == 0x00)
return IMGTOOLERR_FILENOTFOUND;
@@ -214,10 +209,10 @@ static imgtoolerr_t vzdos_set_dirent(imgtool::image &img, int index, vzdos_diren
entry = ((index % 8) * sizeof(vzdos_dirent));
memcpy(&buffer[entry], &ent, 10);
- place_integer_le(buffer, entry + 10, 1, ent.start_track);
- place_integer_le(buffer, entry + 11, 1, ent.start_sector);
- place_integer_le(buffer, entry + 12, 2, ent.start_address);
- place_integer_le(buffer, entry + 14, 2, ent.end_address);
+ buffer[entry + 10] = ent.start_track;
+ buffer[entry + 11] = ent.start_sector;
+ put_u16le(&buffer[entry + 12], ent.start_address);
+ put_u16le(&buffer[entry + 14], ent.end_address);
/* save new sector */
ret = vzdos_write_sector_data(img, 0, (int) index / 8, buffer);
@@ -508,12 +503,12 @@ static imgtoolerr_t vzdos_diskimage_readfile(imgtool::partition &partition, cons
if (ret) return ret;
/* detect sectors pointing to themselfs */
- if ((track == (int)pick_integer_le(buffer, DATA_SIZE, 1)) && (sector == (int)pick_integer_le(buffer, DATA_SIZE + 1, 1)))
+ if ((track == (int)buffer[DATA_SIZE]) && (sector == (int)buffer[DATA_SIZE + 1]))
return IMGTOOLERR_CORRUPTIMAGE;
/* load next track and sector values */
- track = pick_integer_le(buffer, DATA_SIZE, 1);
- sector = pick_integer_le(buffer, DATA_SIZE + 1, 1);
+ track = buffer[DATA_SIZE];
+ sector = buffer[DATA_SIZE + 1];
/* track 0 is invalid */
if ((track == 0) && (filesize > DATA_SIZE))
@@ -589,8 +584,8 @@ static imgtoolerr_t vzdos_diskimage_deletefile(imgtool::partition &partition, co
if (ret) return ret;
/* load next track and sector values */
- next_track = pick_integer_le(buffer, DATA_SIZE, 1);
- next_sector = pick_integer_le(buffer, DATA_SIZE + 1, 1);
+ next_track = buffer[DATA_SIZE];
+ next_sector = buffer[DATA_SIZE + 1];
/* overwrite sector with default values */
ret = vzdos_clear_sector(img, track, sector);
@@ -848,7 +843,7 @@ static imgtoolerr_t vzsnapshot_readfile(imgtool::partition &partition, const cha
memset(header + 4, 0x00, 17);
memcpy(header + 4, entry.fname, vzdos_get_fname_len(entry.fname) + 1);
- place_integer_le(header, 22, 2, entry.start_address);
+ put_u16le(&header[22], entry.start_address);
/* write header to file */
destf.write(header, sizeof(header));
@@ -873,7 +868,7 @@ static imgtoolerr_t vzsnapshot_writefile(imgtool::partition &partition, const ch
/* prepare directory entry */
entry.ftype = header[21] == 0xF1 ? 'B' : 'T';
entry.delimitor = ':';
- entry.start_address = pick_integer_le(header, 22, 2);
+ entry.start_address = get_u16le(&header[22]);
/* filename from header or directly? */
fnameopt = opts->lookup_int('F');