diff --git a/user_io.cpp b/user_io.cpp index 873dcc2..a77a287 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -40,6 +40,7 @@ static char core_path[1024] = {}; static char rbf_path[1024] = {}; static fileTYPE sd_image[4] = {}; +static int sd_image_cangrow[4] = {}; static uint64_t buffer_lba[4] = { ULLONG_MAX,ULLONG_MAX,ULLONG_MAX,ULLONG_MAX }; static int use_save = 0; @@ -1521,6 +1522,8 @@ int user_io_file_mount(const char *name, unsigned char index, char pre) int ret = 0; int len = strlen(name); + sd_image_cangrow[index] = (pre != 0); + if (len) { if (!strcasecmp(user_io_get_core_name(), "apple-ii")) @@ -2680,14 +2683,20 @@ void user_io_poll() { // ... and write it to disk __off64_t size = sd_image[disk].size >> 9; - if (size && size >= lba) + if (size && lba <= size) { diskled_on(); if (FileSeekLBA(&sd_image[disk], lba)) { - if (FileWriteSec(&sd_image[disk], buffer[disk])) + int sz = 512; + if (!sd_image_cangrow[disk]) { - if (size == lba) + __off64_t rem = sd_image[disk].size - sd_image[disk].offset; + sz = (rem >= 512) ? 512 : (int)rem; + } + if(sz && FileWriteAdv(&sd_image[disk], buffer[disk], sz)) + { + if (size == lba && sd_image_cangrow[disk]) { size++; sd_image[disk].size = size << 9;