rewrite the emulator to use UTF-8 internally
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
#include <86box/fdc.h>
|
||||
#include <86box/fdc_ext.h>
|
||||
|
||||
#define ROM_B215 L"roms/floppy/magitronic/Magitronic B215 - BIOS ROM.bin"
|
||||
#define ROM_B215 "roms/floppy/magitronic/Magitronic B215 - BIOS ROM.bin"
|
||||
#define ROM_ADDR (uint32_t)(device_get_config_hex20("bios_addr") & 0x000fffff)
|
||||
|
||||
#define DRIVE_SELECT (int)(real_drive(dev->fdc_controller, i))
|
||||
|
||||
@@ -79,8 +79,8 @@ MiniMicro 4 also won't work with the XT FDC which the Zilog claims to be.
|
||||
#define DTK_VARIANT ((info->local == 158) ? ROM_PII_158B : ROM_PII_151B)
|
||||
#define DTK_CHIP ((info->local == 158) ? &fdc_xt_device : &fdc_dp8473_device)
|
||||
#define BIOS_ADDR (uint32_t)(device_get_config_hex20("bios_addr") & 0x000fffff)
|
||||
#define ROM_PII_151B L"roms/floppy/dtk/pii-151b.rom"
|
||||
#define ROM_PII_158B L"roms/floppy/dtk/pii-158b.rom"
|
||||
#define ROM_PII_151B "roms/floppy/dtk/pii-151b.rom"
|
||||
#define ROM_PII_158B "roms/floppy/dtk/pii-158b.rom"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -77,7 +77,7 @@ typedef struct {
|
||||
|
||||
fdd_t fdd[FDD_NUM];
|
||||
|
||||
wchar_t floppyfns[FDD_NUM][512];
|
||||
char floppyfns[FDD_NUM][512];
|
||||
|
||||
pc_timer_t fdd_poll_time[FDD_NUM];
|
||||
|
||||
@@ -99,44 +99,44 @@ d86f_handler_t d86f_handler[FDD_NUM];
|
||||
|
||||
static const struct
|
||||
{
|
||||
wchar_t *ext;
|
||||
void (*load)(int drive, wchar_t *fn);
|
||||
char *ext;
|
||||
void (*load)(int drive, char *fn);
|
||||
void (*close)(int drive);
|
||||
int size;
|
||||
} loaders[]=
|
||||
{
|
||||
{L"001", img_load, img_close, -1},
|
||||
{L"002", img_load, img_close, -1},
|
||||
{L"003", img_load, img_close, -1},
|
||||
{L"004", img_load, img_close, -1},
|
||||
{L"005", img_load, img_close, -1},
|
||||
{L"006", img_load, img_close, -1},
|
||||
{L"007", img_load, img_close, -1},
|
||||
{L"008", img_load, img_close, -1},
|
||||
{L"009", img_load, img_close, -1},
|
||||
{L"010", img_load, img_close, -1},
|
||||
{L"12", img_load, img_close, -1},
|
||||
{L"144", img_load, img_close, -1},
|
||||
{L"360", img_load, img_close, -1},
|
||||
{L"720", img_load, img_close, -1},
|
||||
{L"86F", d86f_load, d86f_close, -1},
|
||||
{L"BIN", img_load, img_close, -1},
|
||||
{L"CQ", img_load, img_close, -1},
|
||||
{L"CQM", img_load, img_close, -1},
|
||||
{L"DDI", img_load, img_close, -1},
|
||||
{L"DSK", img_load, img_close, -1},
|
||||
{L"FDI", fdi_load, fdi_close, -1},
|
||||
{L"FDF", img_load, img_close, -1},
|
||||
{L"FLP", img_load, img_close, -1},
|
||||
{L"HDM", img_load, img_close, -1},
|
||||
{L"IMA", img_load, img_close, -1},
|
||||
{L"IMD", imd_load, imd_close, -1},
|
||||
{L"IMG", img_load, img_close, -1},
|
||||
{L"JSON", json_load, json_close, -1},
|
||||
{L"MFM", mfm_load, mfm_close, -1},
|
||||
{L"TD0", td0_load, td0_close, -1},
|
||||
{L"VFD", img_load, img_close, -1},
|
||||
{L"XDF", img_load, img_close, -1},
|
||||
{"001", img_load, img_close, -1},
|
||||
{"002", img_load, img_close, -1},
|
||||
{"003", img_load, img_close, -1},
|
||||
{"004", img_load, img_close, -1},
|
||||
{"005", img_load, img_close, -1},
|
||||
{"006", img_load, img_close, -1},
|
||||
{"007", img_load, img_close, -1},
|
||||
{"008", img_load, img_close, -1},
|
||||
{"009", img_load, img_close, -1},
|
||||
{"010", img_load, img_close, -1},
|
||||
{"12", img_load, img_close, -1},
|
||||
{"144", img_load, img_close, -1},
|
||||
{"360", img_load, img_close, -1},
|
||||
{"720", img_load, img_close, -1},
|
||||
{"86F", d86f_load, d86f_close, -1},
|
||||
{"BIN", img_load, img_close, -1},
|
||||
{"CQ", img_load, img_close, -1},
|
||||
{"CQM", img_load, img_close, -1},
|
||||
{"DDI", img_load, img_close, -1},
|
||||
{"DSK", img_load, img_close, -1},
|
||||
{"FDI", fdi_load, fdi_close, -1},
|
||||
{"FDF", img_load, img_close, -1},
|
||||
{"FLP", img_load, img_close, -1},
|
||||
{"HDM", img_load, img_close, -1},
|
||||
{"IMA", img_load, img_close, -1},
|
||||
{"IMD", imd_load, imd_close, -1},
|
||||
{"IMG", img_load, img_close, -1},
|
||||
{"JSON", json_load, json_close, -1},
|
||||
{"MFM", mfm_load, mfm_close, -1},
|
||||
{"TD0", td0_load, td0_close, -1},
|
||||
{"VFD", img_load, img_close, -1},
|
||||
{"XDF", img_load, img_close, -1},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -475,20 +475,20 @@ fdd_get_densel(int drive)
|
||||
|
||||
|
||||
void
|
||||
fdd_load(int drive, wchar_t *fn)
|
||||
fdd_load(int drive, char *fn)
|
||||
{
|
||||
int c = 0, size;
|
||||
wchar_t *p;
|
||||
char *p;
|
||||
FILE *f;
|
||||
|
||||
fdd_log("FDD: loading drive %d with '%ls'\n", drive, fn);
|
||||
fdd_log("FDD: loading drive %d with '%s'\n", drive, fn);
|
||||
|
||||
if (!fn)
|
||||
return;
|
||||
p = plat_get_extension(fn);
|
||||
if (!p)
|
||||
return;
|
||||
f = plat_fopen(fn, L"rb");
|
||||
f = plat_fopen(fn, "rb");
|
||||
if (!f)
|
||||
return;
|
||||
if (fseek(f, -1, SEEK_END) == -1)
|
||||
@@ -496,9 +496,9 @@ fdd_load(int drive, wchar_t *fn)
|
||||
size = ftell(f) + 1;
|
||||
fclose(f);
|
||||
while (loaders[c].ext) {
|
||||
if (!wcscasecmp(p, (wchar_t *) loaders[c].ext) && (size == loaders[c].size || loaders[c].size == -1)) {
|
||||
if (!strcasecmp(p, (char *) loaders[c].ext) && (size == loaders[c].size || loaders[c].size == -1)) {
|
||||
driveloaders[drive] = c;
|
||||
memcpy(floppyfns[drive], fn, (wcslen(fn) << 1) + 2);
|
||||
strcpy(floppyfns[drive], fn);
|
||||
d86f_setup(drive);
|
||||
loaders[c].load(drive, floppyfns[drive]);
|
||||
drive_empty[drive] = 0;
|
||||
@@ -508,7 +508,7 @@ fdd_load(int drive, wchar_t *fn)
|
||||
}
|
||||
c++;
|
||||
}
|
||||
fdd_log("FDD: could not load '%ls' %s\n",fn,p);
|
||||
fdd_log("FDD: could not load '%s' %s\n",fn,p);
|
||||
drive_empty[drive] = 1;
|
||||
fdd_set_head(drive, 0);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
|
||||
@@ -204,7 +204,7 @@ typedef struct {
|
||||
find_t data_find;
|
||||
crc_t calc_crc;
|
||||
crc_t track_crc;
|
||||
wchar_t original_file_name[2048];
|
||||
char original_file_name[2048];
|
||||
uint8_t *filebuf, *outbuf;
|
||||
sector_t *last_side_sector[2];
|
||||
} d86f_t;
|
||||
@@ -3425,7 +3425,7 @@ d86f_common_handlers(int drive)
|
||||
|
||||
|
||||
int
|
||||
d86f_export(int drive, wchar_t *fn)
|
||||
d86f_export(int drive, char *fn)
|
||||
{
|
||||
uint32_t tt[512];
|
||||
d86f_t *dev = d86f[drive];
|
||||
@@ -3440,7 +3440,7 @@ d86f_export(int drive, wchar_t *fn)
|
||||
|
||||
memset(tt, 0, 512 * sizeof(uint32_t));
|
||||
|
||||
f = plat_fopen(fn, L"wb");
|
||||
f = plat_fopen(fn, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
|
||||
@@ -3470,7 +3470,7 @@ d86f_export(int drive, wchar_t *fn)
|
||||
|
||||
fclose(f);
|
||||
|
||||
f = plat_fopen(fn, L"rb+");
|
||||
f = plat_fopen(fn, "rb+");
|
||||
|
||||
fseek(f, 8, SEEK_SET);
|
||||
fwrite(tt, 1, ((d86f_get_sides(drive) == 2) ? 2048 : 1024), f);
|
||||
@@ -3488,14 +3488,14 @@ d86f_export(int drive, wchar_t *fn)
|
||||
|
||||
|
||||
void
|
||||
d86f_load(int drive, wchar_t *fn)
|
||||
d86f_load(int drive, char *fn)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t magic = 0;
|
||||
uint32_t len = 0;
|
||||
int i = 0, j = 0;
|
||||
#ifdef D86F_COMPRESS
|
||||
wchar_t temp_file_name[2048];
|
||||
char temp_file_name[2048];
|
||||
uint16_t temp = 0;
|
||||
FILE *tf;
|
||||
#endif
|
||||
@@ -3504,9 +3504,9 @@ d86f_load(int drive, wchar_t *fn)
|
||||
|
||||
writeprot[drive] = 0;
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb+");
|
||||
dev->f = plat_fopen(fn, "rb+");
|
||||
if (! dev->f) {
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (! dev->f) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
@@ -3617,13 +3617,13 @@ d86f_load(int drive, wchar_t *fn)
|
||||
|
||||
#ifdef D86F_COMPRESS
|
||||
if (dev->is_compressed) {
|
||||
memcpy(temp_file_name, drive ? nvr_path(L"TEMP$$$1.$$$") : nvr_path(L"TEMP$$$0.$$$"), 256);
|
||||
memcpy(dev->original_file_name, fn, (wcslen(fn) << 1) + 2);
|
||||
memcpy(temp_file_name, drive ? nvr_path("TEMP$$$1.$$$") : nvr_path("TEMP$$$0.$$$"), 256);
|
||||
memcpy(dev->original_file_name, fn, strlen(fn) + 1);
|
||||
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
|
||||
dev->f = plat_fopen(temp_file_name, L"wb");
|
||||
dev->f = plat_fopen(temp_file_name, "wb");
|
||||
if (! dev->f) {
|
||||
d86f_log("86F: Unable to create temporary decompressed file\n");
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
@@ -3631,7 +3631,7 @@ d86f_load(int drive, wchar_t *fn)
|
||||
return;
|
||||
}
|
||||
|
||||
tf = plat_fopen(fn, L"rb");
|
||||
tf = plat_fopen(fn, "rb");
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
fread(&temp, 1, 2, tf);
|
||||
@@ -3660,7 +3660,7 @@ d86f_load(int drive, wchar_t *fn)
|
||||
return;
|
||||
}
|
||||
|
||||
dev->f = plat_fopen(temp_file_name, L"rb+");
|
||||
dev->f = plat_fopen(temp_file_name, "rb+");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -3703,10 +3703,10 @@ d86f_load(int drive, wchar_t *fn)
|
||||
|
||||
#ifdef D86F_COMPRESS
|
||||
if (dev->is_compressed)
|
||||
dev->f = plat_fopen(temp_file_name, L"rb");
|
||||
dev->f = plat_fopen(temp_file_name, "rb");
|
||||
else
|
||||
#endif
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
}
|
||||
|
||||
/* OK, set the drive data, other code needs it. */
|
||||
@@ -3835,13 +3835,13 @@ d86f_close(int drive)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
wchar_t temp_file_name[2048];
|
||||
char temp_file_name[2048];
|
||||
d86f_t *dev = d86f[drive];
|
||||
|
||||
/* Make sure the drive is alive. */
|
||||
if (dev == NULL) return;
|
||||
|
||||
memcpy(temp_file_name, drive ? nvr_path(L"TEMP$$$1.$$$") : nvr_path(L"TEMP$$$0.$$$"), 26);
|
||||
memcpy(temp_file_name, drive ? nvr_path("TEMP$$$1.$$$") : nvr_path("TEMP$$$0.$$$"), 26);
|
||||
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
|
||||
@@ -320,7 +320,7 @@ fdi_seek(int drive, int track)
|
||||
|
||||
|
||||
void
|
||||
fdi_load(int drive, wchar_t *fn)
|
||||
fdi_load(int drive, char *fn)
|
||||
{
|
||||
char header[26];
|
||||
fdi_t *dev;
|
||||
@@ -339,7 +339,7 @@ fdi_load(int drive, wchar_t *fn)
|
||||
|
||||
d86f_unregister(drive);
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (fread(header, 1, 25, dev->f) != 25)
|
||||
fatal("fdi_load(): Error reading header\n");
|
||||
if (fseek(dev->f, 0, SEEK_SET) == -1)
|
||||
|
||||
@@ -601,7 +601,7 @@ imd_init(void)
|
||||
|
||||
|
||||
void
|
||||
imd_load(int drive, wchar_t *fn)
|
||||
imd_load(int drive, char *fn)
|
||||
{
|
||||
uint32_t magic = 0;
|
||||
uint32_t fsize = 0;
|
||||
@@ -634,9 +634,9 @@ imd_load(int drive, wchar_t *fn)
|
||||
dev = (imd_t *)malloc(sizeof(imd_t));
|
||||
memset(dev, 0x00, sizeof(imd_t));
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb+");
|
||||
dev->f = plat_fopen(fn, "rb+");
|
||||
if (dev->f == NULL) {
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (dev->f == NULL) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
|
||||
@@ -70,7 +70,7 @@ static img_t *img[FDD_NUM];
|
||||
static fdc_t *img_fdc;
|
||||
|
||||
static double bit_rate_300;
|
||||
static wchar_t *ext;
|
||||
static char *ext;
|
||||
static uint8_t first_byte,
|
||||
second_byte,
|
||||
third_byte,
|
||||
@@ -621,7 +621,7 @@ is_divisible(uint16_t total, uint8_t what)
|
||||
|
||||
|
||||
void
|
||||
img_load(int drive, wchar_t *fn)
|
||||
img_load(int drive, char *fn)
|
||||
{
|
||||
uint16_t bpb_bps;
|
||||
uint16_t bpb_total;
|
||||
@@ -654,9 +654,9 @@ img_load(int drive, wchar_t *fn)
|
||||
dev = (img_t *)malloc(sizeof(img_t));
|
||||
memset(dev, 0x00, sizeof(img_t));
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb+");
|
||||
dev->f = plat_fopen(fn, "rb+");
|
||||
if (dev->f == NULL) {
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (dev->f == NULL) {
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
@@ -673,13 +673,13 @@ img_load(int drive, wchar_t *fn)
|
||||
|
||||
dev->interleave = dev->skew = 0;
|
||||
|
||||
if (! wcscasecmp(ext, L"DDI")) {
|
||||
if (! strcasecmp(ext, "DDI")) {
|
||||
ddi = 1;
|
||||
dev->base = 0x2400;
|
||||
} else
|
||||
dev->base = 0;
|
||||
|
||||
if (! wcscasecmp(ext, L"FDI")) {
|
||||
if (! strcasecmp(ext, "FDI")) {
|
||||
/* This is a Japanese FDI image, so let's read the header */
|
||||
img_log("img_load(): File is a Japanese FDI image...\n");
|
||||
fseek(dev->f, 0x10, SEEK_SET);
|
||||
@@ -721,7 +721,7 @@ img_load(int drive, wchar_t *fn)
|
||||
img_log("img_load(): File is a FDF image...\n");
|
||||
fwriteprot[drive] = writeprot[drive] = 1;
|
||||
fclose(dev->f);
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
|
||||
fdf = 1;
|
||||
cqm = 0;
|
||||
@@ -861,7 +861,7 @@ img_load(int drive, wchar_t *fn)
|
||||
img_log("img_load(): File is a CopyQM image...\n");
|
||||
fwriteprot[drive] = writeprot[drive] = 1;
|
||||
fclose(dev->f);
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
|
||||
fseek(dev->f, 0x03, SEEK_SET);
|
||||
fread(&bpb_bps, 1, 2, dev->f);
|
||||
|
||||
@@ -523,7 +523,7 @@ json_init(void)
|
||||
|
||||
|
||||
void
|
||||
json_load(int drive, wchar_t *fn)
|
||||
json_load(int drive, char *fn)
|
||||
{
|
||||
double bit_rate;
|
||||
int temp_rate;
|
||||
@@ -539,10 +539,10 @@ json_load(int drive, wchar_t *fn)
|
||||
memset(dev, 0x00, sizeof(json_t));
|
||||
|
||||
/* Open the image file. */
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (dev->f == NULL) {
|
||||
free(dev);
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
memset(fn, 0x00, sizeof(char));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -558,11 +558,11 @@ json_load(int drive, wchar_t *fn)
|
||||
(void)fclose(dev->f);
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
memset(fn, 0x00, sizeof(char));
|
||||
return;
|
||||
}
|
||||
|
||||
json_log("JSON(%d): %ls (%i tracks, %i sides, %i sectors)\n",
|
||||
json_log("JSON(%d): %s (%i tracks, %i sides, %i sectors)\n",
|
||||
drive, fn, dev->tracks, dev->sides, dev->spt[0][0]);
|
||||
|
||||
/*
|
||||
@@ -624,7 +624,7 @@ json_load(int drive, wchar_t *fn)
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
memset(fn, 0x00, sizeof(char));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -646,7 +646,7 @@ json_load(int drive, wchar_t *fn)
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
memset(fn, 0x00, sizeof(char));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -398,7 +398,7 @@ mfm_seek(int drive, int track)
|
||||
|
||||
|
||||
void
|
||||
mfm_load(int drive, wchar_t *fn)
|
||||
mfm_load(int drive, char *fn)
|
||||
{
|
||||
mfm_t *dev;
|
||||
double dbr;
|
||||
@@ -410,7 +410,7 @@ mfm_load(int drive, wchar_t *fn)
|
||||
dev = (mfm_t *)malloc(sizeof(mfm_t));
|
||||
memset(dev, 0x00, sizeof(mfm_t));
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (dev->f == NULL) {
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
|
||||
@@ -1191,7 +1191,7 @@ td0_abort(int drive)
|
||||
|
||||
|
||||
void
|
||||
td0_load(int drive, wchar_t *fn)
|
||||
td0_load(int drive, char *fn)
|
||||
{
|
||||
td0_t *dev;
|
||||
uint32_t i;
|
||||
@@ -1204,7 +1204,7 @@ td0_load(int drive, wchar_t *fn)
|
||||
memset(dev, 0x00, sizeof(td0_t));
|
||||
td0[drive] = dev;
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
if (dev->f == NULL) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user