rewrite the emulator to use UTF-8 internally

This commit is contained in:
David Hrdlička
2021-03-14 20:35:01 +01:00
parent 56d62de4fe
commit dfbbe08a07
146 changed files with 1507 additions and 1457 deletions

View File

@@ -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))

View File

@@ -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
{

View File

@@ -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]));

View File

@@ -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++) {

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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]));

View File

@@ -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;