Fixed the first batch of problems.

This commit is contained in:
OBattler
2020-01-15 03:04:59 +01:00
parent 714d77dedd
commit 8749776144
10 changed files with 62 additions and 26 deletions

View File

@@ -566,6 +566,7 @@ load_video(void)
{
char *cat = "Video";
char *p;
int free_p = 0;
if (machines[machine].flags & MACHINE_VIDEO_FIXED) {
config_delete_var(cat, "gfxcard");
@@ -580,8 +581,11 @@ load_video(void)
p = (char *)malloc((strlen("none")+1)*sizeof(char));
strcpy(p, "none");
}
free_p = 1;
}
gfxcard = video_get_video_from_internal_name(p);
if (free_p)
free(p);
}
voodoo_enabled = !!config_get_int(cat, "voodoo", 0);
@@ -763,7 +767,7 @@ load_other_peripherals(void)
char *cat = "Other peripherals";
char *p;
char temp[512];
int c;
int c, free_p = 0;
p = config_get_string(cat, "scsicard", NULL);
if (p != NULL)
@@ -780,6 +784,7 @@ load_other_peripherals(void)
p = (char *)malloc((strlen("none")+1)*sizeof(char));
strcpy(p, "none");
}
free_p = 1;
}
if (!strcmp(p, "mfm_xt"))
hdc_current = hdc_get_from_internal_name("st506_xt");
@@ -790,6 +795,11 @@ load_other_peripherals(void)
else
hdc_current = hdc_get_from_internal_name(p);
if (free_p) {
free(p);
p = NULL;
}
ide_ter_enabled = !!config_get_int(cat, "ide_ter", 0);
ide_qua_enabled = !!config_get_int(cat, "ide_qua", 0);

View File

@@ -166,7 +166,10 @@ image_is_vhd(const wchar_t *s, int check_signature)
return 0;
fseeko64(f, 0, SEEK_END);
filelen = ftello64(f);
fseeko64(f, -512, SEEK_END);
if (fseeko64(f, -512, SEEK_END) == -1) {
fclose(f);
fatal("image_is_vhd(): Error seeking\n");
}
if (filelen < 512) {
if (f != NULL)
fclose(f);

View File

@@ -3779,10 +3779,13 @@ d86f_load(int drive, wchar_t *fn)
}
/* Load track 0 flags as default. */
fseek(dev->f, dev->track_offset[0], SEEK_SET);
fread(&(dev->side_flags[0]), 2, 1, dev->f);
if (fseek(dev->f, dev->track_offset[0], SEEK_SET) == -1)
fatal("d86f_load(): Track 0: Error seeking to the beginning of the file\n");
if (fread(&(dev->side_flags[0]), 1, 2, dev->f) != 2)
fatal("d86f_load(): Track 0: Error reading side flags\n");
if (dev->disk_flags & 0x80) {
fread(&(dev->extra_bit_cells[0]), 4, 1, dev->f);
if (fread(&(dev->extra_bit_cells[0]), 1, 4, dev->f) != 4)
fatal("d86f_load(): Track 0: Error reading the amount of extra bit cells\n");
if ((dev->disk_flags & 0x1060) != 0x1000) {
if (dev->extra_bit_cells[0] < -32768) dev->extra_bit_cells[0] = -32768;
if (dev->extra_bit_cells[0] > 32768) dev->extra_bit_cells[0] = 32768;
@@ -3792,10 +3795,13 @@ d86f_load(int drive, wchar_t *fn)
}
if (d86f_get_sides(drive) == 2) {
fseek(dev->f, dev->track_offset[1], SEEK_SET);
fread(&(dev->side_flags[1]), 2, 1, dev->f);
if (fseek(dev->f, dev->track_offset[1], SEEK_SET) == -1)
fatal("d86f_load(): Track 1: Error seeking to the beginning of the file\n");
if (fread(&(dev->side_flags[1]), 1, 2, dev->f) != 2)
fatal("d86f_load(): Track 1: Error reading side flags\n");
if (dev->disk_flags & 0x80) {
fread(&(dev->extra_bit_cells[1]), 4, 1, dev->f);
if (fread(&(dev->extra_bit_cells[1]), 1, 4, dev->f) != 4)
fatal("d86f_load(): Track 4: Error reading the amount of extra bit cells\n");
if ((dev->disk_flags & 0x1060) != 0x1000) {
if (dev->extra_bit_cells[1] < -32768) dev->extra_bit_cells[1] = -32768;
if (dev->extra_bit_cells[1] > 32768) dev->extra_bit_cells[1] = 32768;

View File

@@ -393,15 +393,19 @@ write_back(int drive)
{
img_t *dev = img[drive];
int ssize = 128 << ((int) dev->sector_size);
int side;
int side, size;
if (dev->f == NULL) return;
if (dev->disk_at_once) return;
fseek(dev->f, dev->base + (dev->track * dev->sectors * ssize * dev->sides), SEEK_SET);
for (side = 0; side < dev->sides; side++)
fwrite(dev->track_data[side], dev->sectors * ssize, 1, dev->f);
if (fseek(dev->f, dev->base + (dev->track * dev->sectors * ssize * dev->sides), SEEK_SET) == -1)
pclog("IMG write_back(): Error seeking to the beginning of the file\n");
for (side = 0; side < dev->sides; side++) {
size = dev->sectors * ssize;
if (fwrite(dev->track_data[side], 1, size, dev->f) != size)
fatal("IMG write_back(): Error writing data\n");
}
}
@@ -1156,8 +1160,12 @@ jump_if_fdf:
dev->gap2_size = (temp_rate == 3) ? 41 : 22;
if (dev->dmf)
dev->gap3_size = 8;
else
dev->gap3_size = gap3_sizes[temp_rate][dev->sector_size][dev->sectors];
else {
if (dev->sectors == -1)
dev->gap3_size = 8;
else
dev->gap3_size = gap3_sizes[temp_rate][dev->sector_size][dev->sectors];
}
if (! dev->gap3_size) {
img_log("ERROR: Floppy image of unknown format was inserted into drive %c:!\n", drive + 0x41);
fclose(dev->f);

View File

@@ -1293,7 +1293,8 @@ eep_init(const device_t *info)
f = nvr_fopen(eep->path, L"rb");
if (f != NULL) {
fread(eep->store, 128, 1, f);
if (fread(eep->store, 1, 128, f) != 128)
fatal("eep_init(): Error reading Tandy EEPROM\n");
(void)fclose(f);
}

View File

@@ -157,10 +157,10 @@ machine_xt86_init(const machine_t *model)
ret = bios_load_linear(L"roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN",
0x000fe000, 65536, 0x6000);
if (ret) {
bios_load_aux_linear(L"roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN",
0x000f8000, 24576, 0);
bios_load_aux_linear(L"roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN",
0x000f0000, 32768, 0);
(void) bios_load_aux_linear(L"roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN",
0x000f8000, 24576, 0);
(void) bios_load_aux_linear(L"roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN",
0x000f0000, 32768, 0);
}
if (bios_only || !ret)

View File

@@ -128,7 +128,8 @@ ps2_nvr_init(const device_t *info)
memset(nvr->ram, 0xff, 8192);
if (f != NULL) {
(void)fread(nvr->ram, 8192, 1, f);
if (fread(nvr->ram, 1, 8192, f) != 8192)
fatal("ps2_nvr_init(): Error reading EEPROM data\n");
fclose(f);
}

View File

@@ -58,18 +58,20 @@ enum
void ati_eeprom_load(ati_eeprom_t *eeprom, wchar_t *fn, int type)
{
FILE *f;
int size;
eeprom->type = type;
if (wcslen(fn) <= 256)
wcscpy(eeprom->fn, fn);
else
wcsncpy(eeprom->fn, fn, 256);
f = nvr_fopen(eeprom->fn, L"rb");
if (!f)
{
memset(eeprom->data, 0, eeprom->type ? 512 : 128);
int size = eeprom->type ? 512 : 128;
if (!f) {
memset(eeprom->data, 0, size);
return;
}
fread(eeprom->data, 1, eeprom->type ? 512 : 128, f);
if (fread(eeprom->data, 1, size, f) != size)
memset(eeprom->data, 0, size);
fclose(f);
}

View File

@@ -2065,8 +2065,12 @@ pgc_parse_coords(pgc_t *dev, pgc_cl_t *cl, int count)
return 0;
}
for (n = 0; n < count; n++)
if (! pgc_param_coord(dev, &param[n])) return 0;
for (n = 0; n < count; n++) {
if (! pgc_param_coord(dev, &param[n])) {
free(param);
return 0;
}
}
/* Here is how the real PGC serializes coords:
*

View File

@@ -308,6 +308,7 @@ void tgui_out(uint16_t addr, uint8_t val, void *p)
}
return;
}
/*FALLTHROUGH*/
case 0x3C7: case 0x3C8: case 0x3C9:
if (tgui->type == TGUI_9400CXI)
{