Alternate font support for MDA and Hercules
This commit is contained in:
@@ -36,6 +36,10 @@ using atomic_int = std::atomic_int;
|
|||||||
#define getcolg(color) (((color) >> 8) & 0xFF)
|
#define getcolg(color) (((color) >> 8) & 0xFF)
|
||||||
#define getcolb(color) ((color) & 0xFF)
|
#define getcolb(color) ((color) & 0xFF)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
VID_NONE = 0,
|
VID_NONE = 0,
|
||||||
VID_INTERNAL
|
VID_INTERNAL
|
||||||
@@ -49,10 +53,6 @@ enum {
|
|||||||
FULLSCR_SCALE_INT43
|
FULLSCR_SCALE_INT43
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
VIDEO_ISA = 0,
|
VIDEO_ISA = 0,
|
||||||
VIDEO_MCA,
|
VIDEO_MCA,
|
||||||
@@ -71,6 +71,11 @@ enum {
|
|||||||
|
|
||||||
#define VIDEO_FLAG_TYPE_SECONDARY VIDEO_FLAG_TYPE_SPECIAL
|
#define VIDEO_FLAG_TYPE_SECONDARY VIDEO_FLAG_TYPE_SPECIAL
|
||||||
|
|
||||||
|
#define FONT_IBM_MDA_437_PATH "roms/video/mda/mda.rom"
|
||||||
|
#define FONT_IBM_MDA_437_NORDIC_PATH "roms/video/mda/4733197.bin"
|
||||||
|
#define FONT_KAM_PATH "roms/video/mda/kam.bin"
|
||||||
|
#define FONT_KAMCL16_PATH "roms/video/mda/kamcl16.bin"
|
||||||
|
|
||||||
typedef struct video_timings_t {
|
typedef struct video_timings_t {
|
||||||
int type;
|
int type;
|
||||||
int write_b;
|
int write_b;
|
||||||
@@ -189,15 +194,15 @@ extern uint32_t pal_lookup[256];
|
|||||||
#endif
|
#endif
|
||||||
extern int video_fullscreen;
|
extern int video_fullscreen;
|
||||||
extern int video_fullscreen_scale;
|
extern int video_fullscreen_scale;
|
||||||
extern uint8_t fontdat[2048][8];
|
extern uint8_t fontdat[2048][8]; /* IBM CGA font */
|
||||||
extern uint8_t fontdatm[2048][16];
|
extern uint8_t fontdatm[2048][16]; /* IBM MDA font */
|
||||||
extern uint8_t fontdat2[2048][8];
|
extern uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */
|
||||||
extern uint8_t fontdatm2[2048][16];
|
extern uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */
|
||||||
extern uint8_t fontdatw[512][32];
|
extern uint8_t fontdatw[512][32]; /* Wyse700 font */
|
||||||
extern uint8_t fontdat8x12[256][16];
|
extern uint8_t fontdat8x12[256][16]; /* MDSI Genius font */
|
||||||
extern uint8_t fontdat12x18[256][36];
|
extern uint8_t fontdat12x18[256][36]; /* IM1024 font */
|
||||||
extern dbcs_font_t *fontdatksc5601;
|
extern dbcs_font_t *fontdatksc5601; /* Korean KSC-5601 font */
|
||||||
extern dbcs_font_t *fontdatksc5601_user;
|
extern dbcs_font_t *fontdatksc5601_user; /* Korean KSC-5601 user defined font */
|
||||||
extern uint32_t *video_6to8;
|
extern uint32_t *video_6to8;
|
||||||
extern uint32_t *video_8togs;
|
extern uint32_t *video_8togs;
|
||||||
extern uint32_t *video_8to32;
|
extern uint32_t *video_8to32;
|
||||||
@@ -277,8 +282,8 @@ extern uint8_t video_force_resize_get_monitor(int monitor_index);
|
|||||||
extern void video_force_resize_set_monitor(uint8_t res, int monitor_index);
|
extern void video_force_resize_set_monitor(uint8_t res, int monitor_index);
|
||||||
extern void video_update_timing(void);
|
extern void video_update_timing(void);
|
||||||
|
|
||||||
extern void loadfont_ex(char *s, int format, int offset);
|
extern void loadfont_ex(char *fn, int format, int offset);
|
||||||
extern void loadfont(char *s, int format);
|
extern void loadfont(char *fn, int format);
|
||||||
|
|
||||||
extern int get_actual_size_x(void);
|
extern int get_actual_size_x(void);
|
||||||
extern int get_actual_size_y(void);
|
extern int get_actual_size_y(void);
|
||||||
|
|||||||
@@ -2936,7 +2936,7 @@ machine_amstrad_init(const machine_t *model, int type)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case AMS_PC1640:
|
case AMS_PC1640:
|
||||||
loadfont("roms/video/mda/mda.rom", 0);
|
loadfont(FONT_IBM_MDA_437_PATH, 0);
|
||||||
device_context(&vid_1640_device);
|
device_context(&vid_1640_device);
|
||||||
ams->language = device_get_config_int("language");
|
ams->language = device_get_config_int("language");
|
||||||
vid_init_1640(ams);
|
vid_init_1640(ams);
|
||||||
|
|||||||
@@ -1541,7 +1541,7 @@ machine_pcjr_init(UNUSED(const machine_t *model))
|
|||||||
|
|
||||||
/* Initialize the video controller. */
|
/* Initialize the video controller. */
|
||||||
video_reset(gfxcard[0]);
|
video_reset(gfxcard[0]);
|
||||||
loadfont("roms/video/mda/mda.rom", 0);
|
loadfont(FONT_IBM_MDA_437_PATH, 0);
|
||||||
device_context(&pcjr_device);
|
device_context(&pcjr_device);
|
||||||
pcjr_vid_init(pcjr);
|
pcjr_vid_init(pcjr);
|
||||||
device_context_restore();
|
device_context_restore();
|
||||||
|
|||||||
@@ -543,14 +543,33 @@ hercules_init(UNUSED(const device_t *info))
|
|||||||
|
|
||||||
dev->vram = (uint8_t *) malloc(0x10000);
|
dev->vram = (uint8_t *) malloc(0x10000);
|
||||||
|
|
||||||
|
switch(device_get_config_int("font")) {
|
||||||
|
case 0:
|
||||||
|
loadfont(FONT_IBM_MDA_437_PATH, 0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
loadfont(FONT_KAM_PATH, 0);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
loadfont(FONT_KAMCL16_PATH, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
timer_add(&dev->timer, hercules_poll, dev, 1);
|
timer_add(&dev->timer, hercules_poll, dev, 1);
|
||||||
|
|
||||||
mem_mapping_add(&dev->mapping, 0xb0000, 0x08000,
|
mem_mapping_add(&dev->mapping, 0xb0000, 0x08000,
|
||||||
hercules_read, NULL, NULL, hercules_write, NULL, NULL,
|
hercules_read, NULL, NULL,
|
||||||
NULL /*dev->vram*/, MEM_MAPPING_EXTERNAL, dev);
|
hercules_write, NULL, NULL,
|
||||||
|
NULL /*dev->vram*/, MEM_MAPPING_EXTERNAL,
|
||||||
|
dev);
|
||||||
|
|
||||||
io_sethandler(0x03b0, 16,
|
io_sethandler(0x03b0, 0x0010,
|
||||||
hercules_in, NULL, NULL, hercules_out, NULL, NULL, dev);
|
hercules_in, NULL, NULL,
|
||||||
|
hercules_out, NULL, NULL,
|
||||||
|
dev);
|
||||||
|
|
||||||
for (uint16_t c = 0; c < 256; c++) {
|
for (uint16_t c = 0; c < 256; c++) {
|
||||||
dev->cols[c][0][0] = dev->cols[c][1][0] = dev->cols[c][1][1] = 16;
|
dev->cols[c][0][0] = dev->cols[c][1][0] = dev->cols[c][1][1] = 16;
|
||||||
@@ -642,6 +661,23 @@ static const device_config_t hercules_config[] = {
|
|||||||
.selection = { { 0 } },
|
.selection = { { 0 } },
|
||||||
.bios = { { 0 } }
|
.bios = { { 0 } }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "font",
|
||||||
|
.description = "Font",
|
||||||
|
.type = CONFIG_SELECTION,
|
||||||
|
.default_string = NULL,
|
||||||
|
.default_int = 0,
|
||||||
|
.file_filter = NULL,
|
||||||
|
.spinner = { 0 },
|
||||||
|
.selection = {
|
||||||
|
{ .description = "US (CP 437)", .value = 0 },
|
||||||
|
{ .description = "IBM Nordic (CP 437-Nordic)", .value = 1 },
|
||||||
|
{ .description = "Czech Kamenicky (CP 895) #1", .value = 2 },
|
||||||
|
{ .description = "Czech Kamenicky (CP 895) #2", .value = 3 },
|
||||||
|
{ .description = "" }
|
||||||
|
},
|
||||||
|
.bios = { { 0 } }
|
||||||
|
},
|
||||||
{ .name = "", .description = "", .type = CONFIG_END }
|
{ .name = "", .description = "", .type = CONFIG_END }
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -317,8 +317,32 @@ mda_standalone_init(UNUSED(const device_t *info))
|
|||||||
|
|
||||||
mda->vram = malloc(0x1000);
|
mda->vram = malloc(0x1000);
|
||||||
|
|
||||||
mem_mapping_add(&mda->mapping, 0xb0000, 0x08000, mda_read, NULL, NULL, mda_write, NULL, NULL, NULL, MEM_MAPPING_EXTERNAL, mda);
|
switch(device_get_config_int("font")) {
|
||||||
io_sethandler(0x03b0, 0x0010, mda_in, NULL, NULL, mda_out, NULL, NULL, mda);
|
case 0:
|
||||||
|
loadfont(FONT_IBM_MDA_437_PATH, 0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
loadfont(FONT_KAM_PATH, 0);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
loadfont(FONT_KAMCL16_PATH, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mem_mapping_add(&mda->mapping, 0xb0000, 0x08000,
|
||||||
|
mda_read, NULL, NULL,
|
||||||
|
mda_write, NULL, NULL,
|
||||||
|
NULL, MEM_MAPPING_EXTERNAL,
|
||||||
|
mda);
|
||||||
|
|
||||||
|
io_sethandler(0x03b0, 0x0010,
|
||||||
|
mda_in, NULL, NULL,
|
||||||
|
mda_out, NULL, NULL,
|
||||||
|
mda);
|
||||||
|
|
||||||
mda_init(mda);
|
mda_init(mda);
|
||||||
|
|
||||||
@@ -369,6 +393,23 @@ static const device_config_t mda_config[] = {
|
|||||||
},
|
},
|
||||||
.bios = { { 0 } }
|
.bios = { { 0 } }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "font",
|
||||||
|
.description = "Font",
|
||||||
|
.type = CONFIG_SELECTION,
|
||||||
|
.default_string = NULL,
|
||||||
|
.default_int = 0,
|
||||||
|
.file_filter = NULL,
|
||||||
|
.spinner = { 0 },
|
||||||
|
.selection = {
|
||||||
|
{ .description = "US (CP 437)", .value = 0 },
|
||||||
|
{ .description = "IBM Nordic (CP 437-Nordic)", .value = 1 },
|
||||||
|
{ .description = "Czech Kamenicky (CP 895) #1", .value = 2 },
|
||||||
|
{ .description = "Czech Kamenicky (CP 895) #2", .value = 3 },
|
||||||
|
{ .description = "" }
|
||||||
|
},
|
||||||
|
.bios = { { 0 } }
|
||||||
|
},
|
||||||
{ .name = "", .description = "", .type = CONFIG_END }
|
{ .name = "", .description = "", .type = CONFIG_END }
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ video_reset(int card)
|
|||||||
card, machine_has_flags(machine, MACHINE_VIDEO) ? 1 : 0);
|
card, machine_has_flags(machine, MACHINE_VIDEO) ? 1 : 0);
|
||||||
|
|
||||||
monitor_index_global = 0;
|
monitor_index_global = 0;
|
||||||
loadfont("roms/video/mda/mda.rom", 0);
|
loadfont(FONT_IBM_MDA_437_PATH, 0);
|
||||||
|
|
||||||
for (uint8_t i = 1; i < GFXCARD_MAX; i ++) {
|
for (uint8_t i = 1; i < GFXCARD_MAX; i ++) {
|
||||||
if ((card != VID_NONE) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY) &&
|
if ((card != VID_NONE) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY) &&
|
||||||
|
|||||||
@@ -1006,76 +1006,73 @@ video_force_resize_set_monitor(uint8_t res, int monitor_index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
loadfont_common(FILE *f, int format)
|
loadfont_common(FILE *fp, int format)
|
||||||
{
|
{
|
||||||
int c;
|
|
||||||
int d;
|
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case 0: /* MDA */
|
case 0: /* MDA */
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x8 cell (lines 0-7) */
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++)
|
||||||
fontdatm[c][d] = fgetc(f) & 0xff;
|
fontdatm[c][d] = fgetc(fp) & 0xff;
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x8 cell (lines 8-13 + padding lines) */
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++)
|
||||||
fontdatm[c][d + 8] = fgetc(f) & 0xff;
|
fontdatm[c][d + 8] = fgetc(fp) & 0xff;
|
||||||
(void) fseek(f, 4096 + 2048, SEEK_SET);
|
(void) fseek(fp, 4096 + 2048, SEEK_SET);
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++)
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++) /* 8x8 CGA (thick, primary) */
|
||||||
fontdat[c][d] = fgetc(f) & 0xff;
|
fontdat[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* PC200 */
|
case 1: /* PC200 */
|
||||||
for (d = 0; d < 4; d++) {
|
for (uint8_t d = 0; d < 4; d++) {
|
||||||
/* There are 4 fonts in the ROM */
|
/* There are 4 fonts in the ROM */
|
||||||
for (c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
|
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
|
||||||
(void) !fread(&fontdatm[256 * d + c][0], 1, 16, f);
|
(void) !fread(&fontdatm[256 * d + c][0], 1, 16, fp);
|
||||||
for (c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
|
for (uint16_t c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
|
||||||
(void) !fread(&fontdat[256 * d + c][0], 1, 8, f);
|
(void) !fread(&fontdat[256 * d + c][0], 1, 8, fp);
|
||||||
fseek(f, 8, SEEK_CUR);
|
fseek(fp, 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case 2: /* CGA */
|
case 2: /* CGA */
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++)
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++)
|
||||||
fontdat[c][d] = fgetc(f) & 0xff;
|
fontdat[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* Wyse 700 */
|
case 3: /* Wyse 700 */
|
||||||
for (c = 0; c < 512; c++)
|
for (uint16_t c = 0; c < 512; c++)
|
||||||
for (d = 0; d < 32; d++)
|
for (uint8_t d = 0; d < 32; d++)
|
||||||
fontdatw[c][d] = fgetc(f) & 0xff;
|
fontdatw[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: /* MDSI Genius */
|
case 4: /* MDSI Genius */
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++)
|
||||||
for (d = 0; d < 16; d++)
|
for (uint8_t d = 0; d < 16; d++)
|
||||||
fontdat8x12[c][d] = fgetc(f) & 0xff;
|
fontdat8x12[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: /* Toshiba 3100e */
|
case 5: /* Toshiba 3100e */
|
||||||
for (d = 0; d < 2048; d += 512) { /* Four languages... */
|
for (uint16_t d = 0; d < 2048; d += 512) { /* Four languages... */
|
||||||
for (c = d; c < d + 256; c++) {
|
for (uint16_t c = d; c < d + 256; c++) {
|
||||||
(void) !fread(&fontdatm[c][8], 1, 8, f);
|
(void) !fread(&fontdatm[c][8], 1, 8, fp);
|
||||||
}
|
}
|
||||||
for (c = d + 256; c < d + 512; c++) {
|
for (uint16_t c = d + 256; c < d + 512; c++) {
|
||||||
(void) !fread(&fontdatm[c][8], 1, 8, f);
|
(void) !fread(&fontdatm[c][8], 1, 8, fp);
|
||||||
}
|
}
|
||||||
for (c = d; c < d + 256; c++) {
|
for (uint16_t c = d; c < d + 256; c++) {
|
||||||
(void) !fread(&fontdatm[c][0], 1, 8, f);
|
(void) !fread(&fontdatm[c][0], 1, 8, fp);
|
||||||
}
|
}
|
||||||
for (c = d + 256; c < d + 512; c++) {
|
for (uint16_t c = d + 256; c < d + 512; c++) {
|
||||||
(void) !fread(&fontdatm[c][0], 1, 8, f);
|
(void) !fread(&fontdatm[c][0], 1, 8, fp);
|
||||||
}
|
}
|
||||||
fseek(f, 4096, SEEK_CUR); /* Skip blank section */
|
fseek(fp, 4096, SEEK_CUR); /* Skip blank section */
|
||||||
for (c = d; c < d + 256; c++) {
|
for (uint16_t c = d; c < d + 256; c++) {
|
||||||
(void) !fread(&fontdat[c][0], 1, 8, f);
|
(void) !fread(&fontdat[c][0], 1, 8, fp);
|
||||||
}
|
}
|
||||||
for (c = d + 256; c < d + 512; c++) {
|
for (uint16_t c = d + 256; c < d + 512; c++) {
|
||||||
(void) !fread(&fontdat[c][0], 1, 8, f);
|
(void) !fread(&fontdat[c][0], 1, 8, fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1087,65 +1084,64 @@ loadfont_common(FILE *f, int format)
|
|||||||
if (!fontdatksc5601_user)
|
if (!fontdatksc5601_user)
|
||||||
fontdatksc5601_user = malloc(192 * sizeof(dbcs_font_t));
|
fontdatksc5601_user = malloc(192 * sizeof(dbcs_font_t));
|
||||||
|
|
||||||
for (c = 0; c < 16384; c++) {
|
for (uint32_t c = 0; c < 16384; c++) {
|
||||||
for (d = 0; d < 32; d++)
|
for (uint8_t d = 0; d < 32; d++)
|
||||||
fontdatksc5601[c].chr[d] = fgetc(f) & 0xff;
|
fontdatksc5601[c].chr[d] = fgetc(fp) & 0xff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: /* Sigma Color 400 */
|
case 7: /* Sigma Color 400 */
|
||||||
/* The first 4k of the character ROM holds an 8x8 font */
|
/* The first 4k of the character ROM holds an 8x8 font */
|
||||||
for (c = 0; c < 256; c++) {
|
for (uint16_t c = 0; c < 256; c++) {
|
||||||
(void) !fread(&fontdat[c][0], 1, 8, f);
|
(void) !fread(&fontdat[c][0], 1, 8, fp);
|
||||||
fseek(f, 8, SEEK_CUR);
|
fseek(fp, 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
/* The second 4k holds an 8x16 font */
|
/* The second 4k holds an 8x16 font */
|
||||||
for (c = 0; c < 256; c++) {
|
for (uint16_t c = 0; c < 256; c++) {
|
||||||
if (fread(&fontdatm[c][0], 1, 16, f) != 16)
|
if (fread(&fontdatm[c][0], 1, 16, fp) != 16)
|
||||||
fatal("loadfont(): Error reading 8x16 font in Sigma Color 400 mode, c = %i\n", c);
|
fatal("loadfont(): Error reading 8x16 font in Sigma Color 400 mode, c = %i\n", c);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8: /* Amstrad PC1512, Toshiba T1000/T1200 */
|
case 8: /* Amstrad PC1512, Toshiba T1000/T1200 */
|
||||||
for (c = 0; c < 2048; c++) /* Allow up to 2048 chars */
|
for (uint16_t c = 0; c < 2048; c++) /* Allow up to 2048 chars */
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++)
|
||||||
fontdat[c][d] = fgetc(f) & 0xff;
|
fontdat[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9: /* Image Manager 1024 native font */
|
case 9: /* Image Manager 1024 native font */
|
||||||
for (c = 0; c < 256; c++)
|
for (uint16_t c = 0; c < 256; c++)
|
||||||
(void) !fread(&fontdat12x18[c][0], 1, 36, f);
|
(void) !fread(&fontdat12x18[c][0], 1, 36, fp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 10: /* Pravetz */
|
case 10: /* Pravetz */
|
||||||
for (c = 0; c < 1024; c++) /* Allow up to 1024 chars */
|
for (uint16_t c = 0; c < 1024; c++) /* Allow up to 1024 chars */
|
||||||
for (d = 0; d < 8; d++)
|
for (uint8_t d = 0; d < 8; d++)
|
||||||
fontdat[c][d] = fgetc(f) & 0xff;
|
fontdat[c][d] = fgetc(fp) & 0xff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case 11: /* PC200 */
|
case 11: /* PC200 */
|
||||||
for (d = 0; d < 4; d++) {
|
for (uint8_t d = 0; d < 4; d++) {
|
||||||
/* There are 4 fonts in the ROM */
|
/* There are 4 fonts in the ROM */
|
||||||
for (c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
|
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
|
||||||
(void) !fread(&fontdatm2[256 * d + c][0], 1, 16, f);
|
(void) !fread(&fontdatm2[256 * d + c][0], 1, 16, fp);
|
||||||
for (c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
|
for (uint16_t c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
|
||||||
(void) !fread(&fontdat2[256 * d + c][0], 1, 8, f);
|
(void) !fread(&fontdat2[256 * d + c][0], 1, 8, fp);
|
||||||
fseek(f, 8, SEEK_CUR);
|
fseek(fp, 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) fclose(f);
|
(void) fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
loadfont_ex(char *s, int format, int offset)
|
loadfont_ex(char *fn, int format, int offset)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
fp = rom_fopen(s, "rb");
|
fp = rom_fopen(fn, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1154,9 +1150,9 @@ loadfont_ex(char *s, int format, int offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
loadfont(char *s, int format)
|
loadfont(char *fn, int format)
|
||||||
{
|
{
|
||||||
loadfont_ex(s, format, 0);
|
loadfont_ex(fn, format, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
|||||||
Reference in New Issue
Block a user