mirror of
https://github.com/86Box/86Box.git
synced 2026-02-21 17:15:32 -07:00
Merge pull request #6600 from starfrost013/bugfixes
Video refactor part 7(?): Font improvements part 1
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
// Defines
|
||||
#define MDA_CRTC_NUM_REGISTERS 32
|
||||
#define MDA_VRAM 0x1000
|
||||
|
||||
// Enums & structures
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) &&
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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, <https://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user