summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2019-06-09 12:47:45 -0400
committer arbee <rb6502@users.noreply.github.com>2019-06-09 12:47:45 -0400
commita610524c5f8907897905ce109fc714b2201183de (patch)
tree4d8e64798621635a80f2b7e7cc43ceabb2365445
parent8e0b5daec725e1fb30ac5ec066187d2d8f2d3659 (diff)
ap2_dsk: only save 40 tracks if the disk originally had that many [R. Belmont]
-rw-r--r--src/lib/formats/ap2_dsk.cpp9
-rw-r--r--src/lib/formats/ap2_dsk.h2
2 files changed, 8 insertions, 3 deletions
diff --git a/src/lib/formats/ap2_dsk.cpp b/src/lib/formats/ap2_dsk.cpp
index 7a888079293..2aa883ca143 100644
--- a/src/lib/formats/ap2_dsk.cpp
+++ b/src/lib/formats/ap2_dsk.cpp
@@ -606,10 +606,13 @@ const floppy_image_format_t::desc_e a2_16sect_format::mac_gcr[] = {
bool a2_16sect_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
{
+ uint64_t size = io_generic_size(io);
+
m_prodos_order = false;
+ m_tracks = (size == (40 * 16 * 256)) ? 40 : 35;
int fpos = 0;
- for(int track=0; track < APPLE2_TRACK_COUNT; track++) {
+ for(int track=0; track < m_tracks; track++) {
std::vector<uint32_t> track_data;
uint8_t sector_data[256*16];
static const unsigned char pascal_block1[4] = { 0x08, 0xa5, 0x0f, 0x29 };
@@ -781,7 +784,7 @@ bool a2_16sect_format::save(io_generic *io, floppy_image *image)
// data postamble is good
#define DATAPOST 16
for (auto & elem : visualgrid) {
- for (int j = 0; j < APPLE2_TRACK_COUNT; j++) {
+ for (int j = 0; j < m_tracks; j++) {
elem[j] = 0;
}
}
@@ -791,7 +794,7 @@ bool a2_16sect_format::save(io_generic *io, floppy_image *image)
int pos_data = 0;
- for(int track=0; track < APPLE2_TRACK_COUNT; track++) {
+ for(int track=0; track < m_tracks; track++) {
uint8_t sectdata[(256)*16];
memset(sectdata, 0, sizeof(sectdata));
int nsect = 16;
diff --git a/src/lib/formats/ap2_dsk.h b/src/lib/formats/ap2_dsk.h
index f2f5e005f8c..b5b08db663b 100644
--- a/src/lib/formats/ap2_dsk.h
+++ b/src/lib/formats/ap2_dsk.h
@@ -57,6 +57,8 @@ private:
void update_chk(const uint8_t *data, int size, uint32_t &chk);
bool m_prodos_order;
+
+ int m_tracks;
};
extern const floppy_format_type FLOPPY_A216S_FORMAT;