Some fixes and implemented the --image/-I command line parameter to load an image to the specified floppy drive.

This commit is contained in:
OBattler
2022-10-31 03:24:09 +01:00
parent 8d49489637
commit 65fc4e989d
2 changed files with 41 additions and 2 deletions

View File

@@ -403,10 +403,12 @@ pc_init(int argc, char *argv[])
{
char *ppath = NULL, *rpath = NULL;
char *cfg = NULL, *p;
char temp[2048];
char temp[2048], *fn[FDD_NUM] = { NULL };
char drive = 0, *temp2 = NULL;
struct tm *info;
time_t now;
int c, lvmp = 0;
int i;
#ifdef ENABLE_NG
int ng = 0;
#endif
@@ -456,6 +458,13 @@ pc_init(int argc, char *argv[])
if (!strcasecmp(argv[c], "--help") || !strcasecmp(argv[c], "-?")) {
usage:
for (i = 0; i < FDD_NUM; i++) {
if (fn[i] != NULL) {
free(fn[i]);
fn[i] = NULL;
}
}
printf("\nUsage: 86box [options] [cfg-file]\n\n");
printf("Valid options are:\n\n");
printf("-? or --help - show this information\n");
@@ -471,6 +480,7 @@ usage:
#ifdef _WIN32
printf("-H or --hwnd id,hwnd - sends back the main dialog's hwnd\n");
#endif
printf("-I or --image d:path - load 'path' as floppy image on drive d\n");
printf("-L or --logfile path - set 'path' to be the logfile\n");
printf("-N or --noconfirm - do not ask for confirmation on quit\n");
printf("-O or --dumpcfg - dump config file after loading\n");
@@ -519,6 +529,25 @@ usage:
goto usage;
cfg = argv[++c];
} else if (!strcasecmp(argv[c], "--image") || !strcasecmp(argv[c], "-I")) {
if ((c + 1) == argc)
goto usage;
temp2 = (char *) calloc(2048, 1);
sscanf(argv[++c], "%c:%s", &drive, temp2);
if (drive > 0x40)
drive = (drive & 0x1f) - 1;
else
drive = drive & 0x1f;
if (drive < 0)
drive = 0;
if (drive >= FDD_NUM)
drive = FDD_NUM - 1;
fn[(int) drive] = (char *) calloc(2048, 1);
strcpy(fn[(int) drive], temp2);
pclog("Drive %c: %s\n", drive + 0x41, fn[(int) drive]);
free(temp2);
temp2 = NULL;
} else if (!strcasecmp(argv[c], "--vmname") || !strcasecmp(argv[c], "-V")) {
if ((c + 1) == argc)
goto usage;
@@ -738,6 +767,15 @@ usage:
/* Load the configuration file. */
config_load();
for (i = 0; i < FDD_NUM; i++) {
if (fn[i] != NULL) {
if (strlen(fn[i]) <= 511)
strncpy(floppyfns[i], fn[i], 511);
free(fn[i]);
fn[i] = NULL;
}
}
/* Load the desired language */
if (lang_init)
lang_id = lang_init;

View File

@@ -17,6 +17,7 @@
*/
#include <stdarg.h>
#include <inttypes.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
@@ -594,7 +595,7 @@ scsi_cdrom_update_request_length(scsi_cdrom_t *dev, int len, int block_len)
that a media access comand does not DRQ in the middle of a sector. One of the drivers that
relies on the correctness of this behavior is MTMCDAI.SYS (the Mitsumi CD-ROM driver) for DOS
which uses the READ CD command to read data on some CD types. */
if (dev->current_cdb[0] == 0xb9) || (dev->current_cdb[0] == 0xbe) {
if ((dev->current_cdb[0] == 0xb9) || (dev->current_cdb[0] == 0xbe)) {
/* Round to sector length. */
dlen = ((double) dev->request_length) / ((double) block_len);
dev->request_length = ((uint16_t) floor(dlen)) * block_len;