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