diff --git a/src/include/86box/vid_mda.h b/src/include/86box/vid_mda.h
index 17c028343..4d11305f4 100644
--- a/src/include/86box/vid_mda.h
+++ b/src/include/86box/vid_mda.h
@@ -18,6 +18,7 @@
// Defines
#define MDA_CRTC_NUM_REGISTERS 32
+#define MDA_VRAM 0x1000
// Enums & structures
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 83fb2492e..b94bdf415 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -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
@@ -202,8 +217,6 @@ extern int video_fullscreen;
extern int video_fullscreen_scale;
extern uint8_t fontdat[2048][8]; /* IBM CGA font */
extern uint8_t fontdatm[2048][16]; /* IBM MDA font */
-extern uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */
-extern uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */
extern uint8_t fontdatw[512][32]; /* Wyse700 font */
extern uint8_t fontdat8x12[256][16]; /* MDSI Genius font */
extern uint8_t fontdat12x18[256][36]; /* IM1024 font */
@@ -285,8 +298,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)
diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c
index 8e52bd488..f056397a1 100644
--- a/src/machine/m_amstrad.c
+++ b/src/machine/m_amstrad.c
@@ -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);
diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c
index 78f7ba710..10d2d0c7b 100644
--- a/src/machine/m_pcjr.c
+++ b/src/machine/m_pcjr.c
@@ -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();
diff --git a/src/machine/m_v86p.c b/src/machine/m_v86p.c
index 0be44de53..126517345 100644
--- a/src/machine/m_v86p.c
+++ b/src/machine/m_v86p.c
@@ -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);
diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c
index 2d314b7f2..81c9eba72 100644
--- a/src/machine/m_xt.c
+++ b/src/machine/m_xt.c
@@ -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);
diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c
index 50a891e2c..e6c64cf95 100644
--- a/src/machine/m_xt_olivetti.c
+++ b/src/machine/m_xt_olivetti.c
@@ -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");
diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c
index 87899e7c6..8fd692588 100644
--- a/src/machine/m_xt_t1000.c
+++ b/src/machine/m_xt_t1000.c
@@ -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++) {
diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c
index 2fe46bea3..70b360c1e 100644
--- a/src/video/vid_ati28800.c
+++ b/src/video/vid_ati28800.c
@@ -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;
}
diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c
index 3bedf53a4..f4c93e9c4 100644
--- a/src/video/vid_cga.c
+++ b/src/video/vid_cga.c
@@ -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);
diff --git a/src/video/vid_cga_ncr.c b/src/video/vid_cga_ncr.c
index 6b0f15f65..cda38036b 100644
--- a/src/video/vid_cga_ncr.c
+++ b/src/video/vid_cga_ncr.c
@@ -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");
diff --git a/src/video/vid_cga_olivetti.c b/src/video/vid_cga_olivetti.c
index 4cb845684..bd565c0d7 100644
--- a/src/video/vid_cga_olivetti.c
+++ b/src/video/vid_cga_olivetti.c
@@ -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
diff --git a/src/video/vid_cga_quadcolor.c b/src/video/vid_cga_quadcolor.c
index 4159dc2c1..c5c3d3456 100644
--- a/src/video/vid_cga_quadcolor.c
+++ b/src/video/vid_cga_quadcolor.c
@@ -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;
}
diff --git a/src/video/vid_cga_toshiba_t1000.c b/src/video/vid_cga_toshiba_t1000.c
index 894d28a56..2a16a7d0e 100644
--- a/src/video/vid_cga_toshiba_t1000.c
+++ b/src/video/vid_cga_toshiba_t1000.c
@@ -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);
diff --git a/src/video/vid_cga_toshiba_t3100e.c b/src/video/vid_cga_toshiba_t3100e.c
index 25f079204..d8344426b 100644
--- a/src/video/vid_cga_toshiba_t3100e.c
+++ b/src/video/vid_cga_toshiba_t3100e.c
@@ -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);
diff --git a/src/video/vid_cga_v6355.c b/src/video/vid_cga_v6355.c
index 1ddc1f2cd..f259f6277 100644
--- a/src/video/vid_cga_v6355.c
+++ b/src/video/vid_cga_v6355.c
@@ -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;
}
diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c
index 937623689..c17495c1e 100644
--- a/src/video/vid_et4000.c
+++ b/src/video/vid_et4000.c
@@ -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;
diff --git a/src/video/vid_genius.c b/src/video/vid_genius.c
index 472217d30..5dd3d2ade 100644
--- a/src/video/vid_genius.c
+++ b/src/video/vid_genius.c
@@ -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);
diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c
index 758b041af..a53ea9871 100644
--- a/src/video/vid_hercules.c
+++ b/src/video/vid_hercules.c
@@ -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;
}
diff --git a/src/video/vid_hercules_incolor.c b/src/video/vid_hercules_incolor.c
index b9be0765e..e6acb9bbb 100644
--- a/src/video/vid_hercules_incolor.c
+++ b/src/video/vid_hercules_incolor.c
@@ -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;
}
diff --git a/src/video/vid_hercules_plus.c b/src/video/vid_hercules_plus.c
index 25b44ad70..f6eb2e9fb 100644
--- a/src/video/vid_hercules_plus.c
+++ b/src/video/vid_hercules_plus.c
@@ -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;
}
diff --git a/src/video/vid_im1024.c b/src/video/vid_im1024.c
index 1ade8badb..b16855229 100644
--- a/src/video/vid_im1024.c
+++ b/src/video/vid_im1024.c
@@ -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);
diff --git a/src/video/vid_jega.c b/src/video/vid_jega.c
index d3c806708..8a34b9f61 100644
--- a/src/video/vid_jega.c
+++ b/src/video/vid_jega.c
@@ -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);
diff --git a/src/video/vid_mda.c b/src/video/vid_mda.c
index f530419f2..574e31550 100644
--- a/src/video/vid_mda.c
+++ b/src/video/vid_mda.c
@@ -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;
}
diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c
index a97d2aa84..3df73f92c 100644
--- a/src/video/vid_ps55da2.c
+++ b/src/video/vid_ps55da2.c
@@ -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;
diff --git a/src/video/vid_sigma.c b/src/video/vid_sigma.c
index 4759bb7af..d2c79b62e 100644
--- a/src/video/vid_sigma.c
+++ b/src/video/vid_sigma.c
@@ -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
diff --git a/src/video/vid_table.c b/src/video/vid_table.c
index 504e3dd54..88cd6789e 100644
--- a/src/video/vid_table.c
+++ b/src/video/vid_table.c
@@ -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) &&
diff --git a/src/video/vid_wy700.c b/src/video/vid_wy700.c
index bd9ba9386..0245b7e3e 100644
--- a/src/video/vid_wy700.c
+++ b/src/video/vid_wy700.c
@@ -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);
diff --git a/src/video/video.c b/src/video/video.c
index 81fe3a26b..4c4256a89 100644
--- a/src/video/video.c
+++ b/src/video/video.c
@@ -8,37 +8,8 @@
*
* Main video-rendering module.
*
- * Video timing settings -
- *
- * 8-bit - 1mb/sec
- * B = 8 ISA clocks
- * W = 16 ISA clocks
- * L = 32 ISA clocks
- *
- * Slow 16-bit - 2mb/sec
- * B = 6 ISA clocks
- * W = 8 ISA clocks
- * L = 16 ISA clocks
- *
- * Fast 16-bit - 4mb/sec
- * B = 3 ISA clocks
- * W = 3 ISA clocks
- * L = 6 ISA clocks
- *
- * Slow VLB/PCI - 8mb/sec (ish)
- * B = 4 bus clocks
- * W = 8 bus clocks
- * L = 16 bus clocks
- *
- * Mid VLB/PCI -
- * B = 4 bus clocks
- * W = 5 bus clocks
- * L = 10 bus clocks
- *
- * Fast VLB/PCI -
- * B = 3 bus clocks
- * W = 3 bus clocks
- * L = 4 bus clocks
+ * Video timings are set individually by the graphics cards.
+ *
*
* Authors: Sarah Walker,
* Miran Grca,
@@ -79,8 +50,6 @@ uint8_t edatlookup[4][4];
uint8_t egaremap2bpp[256];
uint8_t fontdat[2048][8]; /* IBM CGA font */
uint8_t fontdatm[2048][16]; /* IBM MDA font */
-uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */
-uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */
uint8_t fontdatw[512][32]; /* Wyse700 font */
uint8_t fontdat8x12[256][16]; /* MDSI Genius font */
uint8_t fontdat12x18[256][36]; /* IM1024 font */
@@ -793,30 +762,6 @@ hline(bitmap_t *b, int x1, int y, int x2, uint32_t col)
b->line[y][x] = col;
}
-void
-blit(UNUSED(bitmap_t *src), UNUSED(bitmap_t *dst), UNUSED(int x1), UNUSED(int y1), UNUSED(int x2), UNUSED(int y2), UNUSED(int xs), UNUSED(int ys))
-{
- //
-}
-
-void
-stretch_blit(UNUSED(bitmap_t *src), UNUSED(bitmap_t *dst), UNUSED(int x1), UNUSED(int y1), UNUSED(int xs1), UNUSED(int ys1), UNUSED(int x2), UNUSED(int y2), UNUSED(int xs2), UNUSED(int ys2))
-{
- //
-}
-
-void
-rectfill(UNUSED(bitmap_t *b), UNUSED(int x1), UNUSED(int y1), UNUSED(int x2), UNUSED(int y2), UNUSED(uint32_t col))
-{
- //
-}
-
-void
-set_palette(UNUSED(PALETTE p))
-{
- //
-}
-
void
destroy_bitmap(bitmap_t *b)
{
@@ -1005,10 +950,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 +974,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 +986,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 +1028,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 +1041,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 +1050,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)
{