rename load font to video_load_font, get rid of loadfont_ex; use calloc and don't malloc magic amount of vram

This commit is contained in:
starfrost013
2025-12-21 18:49:10 +00:00
parent 1739b8303c
commit 407a0958f2
29 changed files with 104 additions and 111 deletions

View File

@@ -18,6 +18,7 @@
// Defines
#define MDA_CRTC_NUM_REGISTERS 32
#define MDA_VRAM 0x1000
// Enums & structures

View File

@@ -58,6 +58,21 @@ enum {
VIDEO_AGP
};
typedef enum video_font_format_e
{
FONT_FORMAT_MDA = 0,
FONT_FORMAT_PC200 = 1,
FONT_FORMAT_CGA = 2,
FONT_FORMAT_WY700 = 3,
FONT_FORMAT_MDSI_GENIUS = 4,
FONT_FORMAT_TOSHIBA_3100E = 5,
FONT_FORMAT_KSC6501 = 6,
FONT_FORMAT_SIGMA = 7,
FONT_FORMAT_PC1512_T1000 = 8,
FONT_FORMAT_IM1024 = 9,
FONT_FORMAT_PRAVETZ = 10,
} video_font_format;
#define VIDEO_FLAG_TYPE_CGA 0
#define VIDEO_FLAG_TYPE_MDA 1
#define VIDEO_FLAG_TYPE_SPECIAL 2
@@ -285,8 +300,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_update_timing(void);
extern void loadfont_ex(char *fn, int format, int offset);
extern void loadfont(char *fn, int format);
#define LOAD_FONT_NO_OFFSET 0
extern void video_load_font(char *fn, int format, int offset);
extern uint32_t video_color_transform(uint32_t color);
#define video_inform(type, video_timings_ptr) video_inform_monitor(type, video_timings_ptr, monitor_index_global)

View File

@@ -3020,7 +3020,7 @@ machine_amstrad_init(const machine_t *model, int type)
if (gfxcard[0] == VID_INTERNAL)
switch (type) {
case AMS_PC1512:
loadfont("roms/machines/pc1512/40078", 8);
video_load_font("roms/machines/pc1512/40078", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);
device_context(&vid_1512_device);
ams->language = device_get_config_int("language");
vid_init_1512(ams);
@@ -3029,7 +3029,7 @@ machine_amstrad_init(const machine_t *model, int type)
break;
case AMS_PPC512:
loadfont("roms/machines/ppc512/40109", 1);
video_load_font("roms/machines/ppc512/40109", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET);
device_context(&vid_ppc512_device);
ams->language = device_get_config_int("language");
vid_init_200(ams);
@@ -3038,7 +3038,7 @@ machine_amstrad_init(const machine_t *model, int type)
break;
case AMS_PC1640:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
device_context(&vid_1640_device);
ams->language = device_get_config_int("language");
vid_init_1640(ams);
@@ -3047,7 +3047,7 @@ machine_amstrad_init(const machine_t *model, int type)
break;
case AMS_PC200:
loadfont("roms/machines/pc200/40109", 1);
video_load_font("roms/machines/pc200/40109", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET);
device_context(&vid_200_device);
ams->language = device_get_config_int("language");
vid_init_200(ams);

View File

@@ -897,7 +897,7 @@ machine_pcjr_init(UNUSED(const machine_t *model))
/* Initialize the video controller. */
video_reset(gfxcard[0]);
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
device_context(&pcjr_device);
pcjr_vid_init(pcjr);
device_context_restore();

View File

@@ -77,9 +77,9 @@ machine_v86p_init(const machine_t *model)
return ret;
if (rom_id == 2)
loadfont("roms/machines/v86p/V86P.FON", 8);
video_load_font("roms/machines/v86p/V86P.FON", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);
else
loadfont("roms/machines/v86p/v86pfont.rom", 8);
video_load_font("roms/machines/v86p/v86pfont.rom", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);
machine_common_init(model);

View File

@@ -2154,7 +2154,7 @@ machine_xt_maz1016_init(const machine_t *model)
if (bios_only || !ret)
return ret;
loadfont("roms/machines/maz1016/crt-8.bin", 0);
video_load_font("roms/machines/maz1016/crt-8.bin", FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
machine_xt_clone_init(model, 0);

View File

@@ -2018,7 +2018,7 @@ m19_vid_init(m19_vid_t *vid)
#endif
/* OGC emulation part begin */
loadfont("roms/machines/m19/MBM2764-30 8514 107 AB PCF3.BIN", 7);
video_load_font("roms/machines/m19/MBM2764-30 8514 107 AB PCF3.BIN", FONT_FORMAT_SIGMA, LOAD_FONT_NO_OFFSET);
/* composite is not working yet */
vid->ogc.cga.composite = 0; // (display_type != CGA_RGB);
vid->ogc.cga.revision = device_get_config_int("composite_type");

View File

@@ -846,7 +846,7 @@ machine_xt_t1000_init(const machine_t *model)
t1000.ems_port_index = 7; /* EMS disabled */
/* Load the T1000 CGA Font ROM. */
loadfont("roms/machines/t1000/t1000font.bin", 2);
video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_CGA, LOAD_FONT_NO_OFFSET);
/*
* The ROM drive is optional.
@@ -928,7 +928,7 @@ machine_xt_t1200_init(const machine_t *model)
t1000.ems_port_index = 7; /* EMS disabled */
/* Load the T1000 CGA Font ROM. */
loadfont("roms/machines/t1000/t1000font.bin", 2);
video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_CGA, LOAD_FONT_NO_OFFSET);
/* Map the EMS page frame */
for (uint8_t pg = 0; pg < 4; pg++) {

View File

@@ -574,16 +574,16 @@ ati28800k_init(const device_t *info)
default:
case 0:
rom_init(&ati28800->bios_rom, BIOS_ATIKOR_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
loadfont(FONT_ATIKOR_PATH, 6);
video_load_font(FONT_ATIKOR_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET);
break;
case 1:
rom_init_interleaved(&ati28800->bios_rom, BIOS_ATIKOR_4620P_PATH_L, BIOS_ATIKOR_4620P_PATH_H, 0xc0000,
0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
loadfont(FONT_ATIKOR_4620P_PATH, 6);
video_load_font(FONT_ATIKOR_4620P_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET);
break;
case 2:
rom_init(&ati28800->bios_rom, BIOS_ATIKOR_6033P_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
loadfont(FONT_ATIKOR_6033P_PATH, 6);
video_load_font(FONT_ATIKOR_6033P_PATH, FONT_FORMAT_KSC6501,LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -782,13 +782,13 @@ cga_standalone_init(UNUSED(const device_t *info))
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}
@@ -802,7 +802,7 @@ cga_pravetz_init(const device_t *info)
{
cga_t *cga = cga_standalone_init(info);
loadfont("roms/video/cga/PRAVETZ-VDC2.BIN", 10);
video_load_font("roms/video/cga/PRAVETZ-VDC2.BIN", FONT_FORMAT_PRAVETZ, LOAD_FONT_NO_OFFSET);
io_removehandler(0x03dd, 0x0001, cga_in, NULL, NULL, cga_out, NULL, NULL, cga);
io_sethandler(0x03dd, 0x0001, cga_pravetz_in, NULL, NULL, cga_pravetz_out, NULL, NULL, cga);

View File

@@ -562,7 +562,7 @@ nga_init(UNUSED(const device_t *info))
charset = device_get_config_int("charset");
loadfont_ex("roms/video/nga/ncr_nga_35122.bin", 1, 4096 * charset);
video_load_font("roms/video/nga/ncr_nga_35122.bin", 1, 4096 * charset);
nga->cga.composite = 0;
nga->cga.snow_enabled = device_get_config_int("snow_enabled");

View File

@@ -592,7 +592,7 @@ ogc_init(UNUSED(const device_t *info))
memset(ogc, 0x00, sizeof(ogc_t));
video_inform(VIDEO_FLAG_TYPE_CGA, &timing_ogc);
loadfont("roms/video/ogc/ogc graphics board go380 258 pqbq.bin", 1);
video_load_font("roms/video/ogc/ogc graphics board go380 258 pqbq.bin", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET);
/* FIXME: composite is not working yet */
#if 0

View File

@@ -828,13 +828,13 @@ quadcolor_standalone_init(UNUSED(const device_t *info))
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -650,7 +650,7 @@ static void *
t1000_init(UNUSED(const device_t *info))
{
t1000_t *t1000 = calloc(1, sizeof(t1000_t));
loadfont("roms/machines/t1000/t1000font.bin", 8);
video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET);
cga_init(&t1000->cga);
video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t1000);

View File

@@ -654,7 +654,7 @@ void *
t3100e_init(UNUSED(const device_t *info))
{
t3100e_t *t3100e = calloc(1, sizeof(t3100e_t));
loadfont("roms/machines/t3100e/t3100e_font.bin", 5);
video_load_font("roms/machines/t3100e/t3100e_font.bin", FONT_FORMAT_TOSHIBA_3100E, LOAD_FONT_NO_OFFSET);
cga_init(&t3100e->cga);
video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t3100e);

View File

@@ -924,13 +924,13 @@ v6355_standalone_init(const device_t *info) {
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -850,7 +850,7 @@ et4000_init(const device_t *info)
et4000k_in, NULL, NULL, et4000k_out, NULL, NULL, dev);
io_sethandler(0x32cb, 1,
et4000k_in, NULL, NULL, et4000k_out, NULL, NULL, dev);
loadfont(KOREAN_FONT_ROM_PATH, 6);
video_load_font(KOREAN_FONT_ROM_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET);
fn = KOREAN_BIOS_ROM_PATH;
break;
@@ -884,7 +884,7 @@ et4000_init(const device_t *info)
et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev);
io_sethandler(0x0258, 2,
et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev);
loadfont(KASAN_FONT_ROM_PATH, 6);
video_load_font(KASAN_FONT_ROM_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET);
fn = KASAN_BIOS_ROM_PATH;
break;

View File

@@ -744,7 +744,7 @@ genius_init(UNUSED(const device_t *info))
/* 160k video RAM */
genius->vram = malloc(0x28000);
loadfont(BIOS_ROM_PATH, 4);
video_load_font(BIOS_ROM_PATH, FONT_FORMAT_MDSI_GENIUS, LOAD_FONT_NO_OFFSET);
timer_add(&genius->timer, genius_poll, genius, 1);

View File

@@ -542,19 +542,19 @@ hercules_init(UNUSED(const device_t *info))
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 2:
loadfont(FONT_KAM_PATH, 0);
video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 3:
loadfont(FONT_KAMCL16_PATH, 0);
video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -994,19 +994,19 @@ incolor_init(UNUSED(const device_t *info))
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 2:
loadfont(FONT_KAM_PATH, 0);
video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 3:
loadfont(FONT_KAMCL16_PATH, 0);
video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -631,19 +631,19 @@ herculesplus_init(UNUSED(const device_t *info))
switch(device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 2:
loadfont(FONT_KAM_PATH, 0);
video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 3:
loadfont(FONT_KAMCL16_PATH, 0);
video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -1036,7 +1036,7 @@ im1024_init(UNUSED(const device_t *info))
dev = (im1024_t *) malloc(sizeof(im1024_t));
memset(dev, 0x00, sizeof(im1024_t));
loadfont(BIOS_ROM_PATH, 9);
video_load_font(BIOS_ROM_PATH, FONT_FORMAT_IM1024, LOAD_FONT_NO_OFFSET);
dev->fifo_len = 4096;
dev->fifo = (uint8_t *) malloc(dev->fifo_len);

View File

@@ -686,7 +686,7 @@ readfontxtbl(fontx_tbl *table, int size, FILE *fp)
}
static int
LoadFontxFile(const char *fn, void *priv)
jega_load_font(const char *fn, void *priv)
{
fontx_h fhead;
fontx_tbl *ftbl;
@@ -793,7 +793,7 @@ jega_standalone_init(const device_t *info)
rom_init(&jega->bios_rom, JEGA_PATH_BIOS, 0xc0000, 0x8000, 0x7fff, 0, 0);
memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE);
LoadFontxFile(JEGA_PATH_FONTDBCS, jega);
jega_load_font(JEGA_PATH_FONTDBCS, jega);
jega_commoninit(info, jega, 0);
@@ -807,7 +807,7 @@ jvga_standalone_init(const device_t *info)
rom_init(&jega->bios_rom, JVGA_PATH_BIOS, 0xc0000, 0x8000, 0x7fff, 0, 0);
memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE);
LoadFontxFile(JVGA_PATH_FONTDBCS, jega);
jega_load_font(JVGA_PATH_FONTDBCS, jega);
jega_commoninit(info, jega, 1);
@@ -1024,7 +1024,7 @@ if386jega_init(const device_t *info)
rom_init(&jega->bios_rom, IF386_PATH_VBIOS, 0xc0000, 0x8000, 0x7fff, 0, 0);
memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE);
LoadFontxFile(JEGA_PATH_FONTDBCS, jega);
jega_load_font(JEGA_PATH_FONTDBCS, jega);
jega_commoninit(info, jega, 0);

View File

@@ -414,27 +414,27 @@ mda_init(mda_t *mda)
void *
mda_standalone_init(UNUSED(const device_t *info))
{
mda_t *mda = malloc(sizeof(mda_t));
memset(mda, 0, sizeof(mda_t));
mda_t *mda = calloc(1, sizeof(mda_t));
video_inform(VIDEO_FLAG_TYPE_MDA, &timing_mda);
mda->vram = malloc(0x1000);
mda->vram = malloc(MDA_VRAM);
switch (device_get_config_int("font")) {
case 0:
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 1:
loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0);
video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 2:
loadfont(FONT_KAM_PATH, 0);
video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 3:
loadfont(FONT_KAMCL16_PATH, 0);
video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
case 4:
loadfont(FONT_TULIP_DGA_PATH, 0);
video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
break;
}

View File

@@ -3149,7 +3149,7 @@ da2_poll(void *priv)
}
static void
da2_loadfont(char *fname, void *priv)
da2_video_load_font(char *fname, void *priv)
{
da2_t *da2 = (da2_t *) priv;
uint8_t buf;
@@ -3267,10 +3267,10 @@ da2_init(UNUSED(const device_t *info))
da2->mmio.font = malloc(DA2_FONTROM_SIZE);
switch (da2->mmio.charset) {
case DA2_DCONFIG_CHARSET_HANT:
da2_loadfont(DA2_FONTROM_PATH_HANT, da2);
da2_video_load_font(DA2_FONTROM_PATH_HANT, da2);
break;
case DA2_DCONFIG_CHARSET_JPAN:
da2_loadfont(DA2_FONTROM_PATH_JPAN, da2);
da2_video_load_font(DA2_FONTROM_PATH_JPAN, da2);
/* Add magic code for OS/2 J1.3. This disables BitBlt's text drawing function. */
da2->mmio.font[0x1AFFE] = 0x80;
da2->mmio.font[0x1AFFF] = 0x01;

View File

@@ -794,7 +794,7 @@ sigma_init(UNUSED(const device_t *info))
sigma->enable_nmi = device_get_config_int("enable_nmi");
loadfont(ROM_SIGMA_FONT, 7);
video_load_font(ROM_SIGMA_FONT, FONT_FORMAT_SIGMA, LOAD_FONT_NO_OFFSET);
rom_init(&sigma->bios_rom, ROM_SIGMA_BIOS, bios_addr, 0x2000,
0x1FFF, 0, MEM_MAPPING_EXTERNAL);
/* The BIOS ROM is overlaid by RAM, so remove its default mapping

View File

@@ -360,7 +360,7 @@ video_reset(int card)
card, machine_has_flags(machine, MACHINE_VIDEO) ? 1 : 0);
monitor_index_global = 0;
loadfont(FONT_IBM_MDA_437_PATH, 0);
video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET);
for (uint8_t i = 1; i < GFXCARD_MAX; i ++) {
if ((card != VID_NONE) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY) &&

View File

@@ -886,7 +886,7 @@ wy700_init(UNUSED(const device_t *info))
/* 128k video RAM */
wy700->vram = malloc(0x20000);
loadfont("roms/video/wyse700/wy700.rom", 3);
video_load_font("roms/video/wyse700/wy700.rom", FONT_FORMAT_WY700, LOAD_FONT_NO_OFFSET);
timer_add(&wy700->timer, wy700_poll, wy700, 1);

View File

@@ -1005,10 +1005,18 @@ video_force_resize_set_monitor(uint8_t res, int monitor_index)
}
void
loadfont_common(FILE *fp, int format)
video_load_font(char *fn, int format, int offset)
{
FILE *fp;
fp = rom_fopen(fn, "rb");
if (fp == NULL)
return;
fseek(fp, offset, SEEK_SET);
switch (format) {
case 0: /* MDA */
case FONT_FORMAT_MDA: /* MDA */
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x8 cell (lines 0-7) */
for (uint8_t d = 0; d < 8; d++)
fontdatm[c][d] = fgetc(fp) & 0xff;
@@ -1021,7 +1029,7 @@ loadfont_common(FILE *fp, int format)
fontdat[c][d] = fgetc(fp) & 0xff;
break;
case 1: /* PC200 */
case FONT_FORMAT_PC200: /* PC200 */
for (uint8_t d = 0; d < 4; d++) {
/* There are 4 fonts in the ROM */
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
@@ -1033,26 +1041,25 @@ loadfont_common(FILE *fp, int format)
}
break;
default:
case 2: /* CGA */
case FONT_FORMAT_CGA: /* CGA */
for (uint16_t c = 0; c < 256; c++)
for (uint8_t d = 0; d < 8; d++)
fontdat[c][d] = fgetc(fp) & 0xff;
break;
case 3: /* Wyse 700 */
case FONT_FORMAT_WY700: /* Wyse 700 */
for (uint16_t c = 0; c < 512; c++)
for (uint8_t d = 0; d < 32; d++)
fontdatw[c][d] = fgetc(fp) & 0xff;
break;
case 4: /* MDSI Genius */
case FONT_FORMAT_MDSI_GENIUS: /* MDSI Genius */
for (uint16_t c = 0; c < 256; c++)
for (uint8_t d = 0; d < 16; d++)
fontdat8x12[c][d] = fgetc(fp) & 0xff;
break;
case 5: /* Toshiba 3100e */
case FONT_FORMAT_TOSHIBA_3100E: /* Toshiba 3100e */
for (uint16_t d = 0; d < 2048; d += 512) { /* Four languages... */
for (uint16_t c = d; c < d + 256; c++) {
(void) !fread(&fontdatm[c][8], 1, 8, fp);
@@ -1076,7 +1083,7 @@ loadfont_common(FILE *fp, int format)
}
break;
case 6: /* Korean KSC-5601 */
case FONT_FORMAT_KSC6501: /* Korean KSC-5601 */
if (!fontdatksc5601)
fontdatksc5601 = malloc(16384 * sizeof(dbcs_font_t));
@@ -1089,7 +1096,7 @@ loadfont_common(FILE *fp, int format)
}
break;
case 7: /* Sigma Color 400 */
case FONT_FORMAT_SIGMA: /* Sigma Color 400 */
/* The first 4k of the character ROM holds an 8x8 font */
for (uint16_t c = 0; c < 256; c++) {
(void) !fread(&fontdat[c][0], 1, 8, fp);
@@ -1098,62 +1105,32 @@ loadfont_common(FILE *fp, int format)
/* The second 4k holds an 8x16 font */
for (uint16_t c = 0; c < 256; c++) {
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("video_load_font(): Error reading 8x16 font in Sigma Color 400 mode, c = %i\n", c);
}
break;
case 8: /* Amstrad PC1512, Toshiba T1000/T1200 */
case FONT_FORMAT_PC1512_T1000: /* Amstrad PC1512, Toshiba T1000/T1200 */
for (uint16_t c = 0; c < 2048; c++) /* Allow up to 2048 chars */
for (uint8_t d = 0; d < 8; d++)
fontdat[c][d] = fgetc(fp) & 0xff;
break;
case 9: /* Image Manager 1024 native font */
case FONT_FORMAT_IM1024: /* Image Manager 1024 native font */
for (uint16_t c = 0; c < 256; c++)
(void) !fread(&fontdat12x18[c][0], 1, 36, fp);
break;
case 10: /* Pravetz */
case FONT_FORMAT_PRAVETZ: /* Pravetz */
for (uint16_t c = 0; c < 1024; c++) /* Allow up to 1024 chars */
for (uint8_t d = 0; d < 8; d++)
fontdat[c][d] = fgetc(fp) & 0xff;
break;
case 11: /* PC200 */
for (uint8_t d = 0; d < 4; d++) {
/* There are 4 fonts in the ROM */
for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
(void) !fread(&fontdatm2[256 * d + c][0], 1, 16, fp);
for (uint16_t c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
(void) !fread(&fontdat2[256 * d + c][0], 1, 8, fp);
fseek(fp, 8, SEEK_CUR);
}
}
break;
}
(void) fclose(fp);
}
void
loadfont_ex(char *fn, int format, int offset)
{
FILE *fp;
fp = rom_fopen(fn, "rb");
if (fp == NULL)
return;
fseek(fp, offset, SEEK_SET);
loadfont_common(fp, format);
}
void
loadfont(char *fn, int format)
{
loadfont_ex(fn, format, 0);
}
uint32_t
video_color_transform(uint32_t color)
{