Added Samsung SPC-4620P. Patch from Greatpsycho.
This commit is contained in:
parent
832717fe66
commit
c8638b9b2b
8 changed files with 92 additions and 2 deletions
|
|
@ -200,6 +200,7 @@ enum
|
||||||
ROM_GW286CT,
|
ROM_GW286CT,
|
||||||
ROM_SPC4200P,
|
ROM_SPC4200P,
|
||||||
ROM_SPC4216P,
|
ROM_SPC4216P,
|
||||||
|
ROM_SPC4620P,
|
||||||
ROM_DELL200,
|
ROM_DELL200,
|
||||||
ROM_MISC286,
|
ROM_MISC286,
|
||||||
ROM_IBMAT386,
|
ROM_IBMAT386,
|
||||||
|
|
|
||||||
|
|
@ -418,6 +418,27 @@ int loadbios()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ROM_SPC4620P:
|
||||||
|
f=romfopen("spc4620p/svb6120a_font.rom","rb");
|
||||||
|
if (!f) break;
|
||||||
|
fclose(f);
|
||||||
|
f = romfopen("spc4620p/31005h.u8", "rb");
|
||||||
|
ff = romfopen("spc4620p/31005h.u10","rb");
|
||||||
|
if (f && ff)
|
||||||
|
{
|
||||||
|
fseek(f, 0x8000, SEEK_SET);
|
||||||
|
fseek(ff, 0x8000, SEEK_SET);
|
||||||
|
for (c = 0x0000; c < 0x10000; c += 2)
|
||||||
|
{
|
||||||
|
rom[c] = getc(f);
|
||||||
|
rom[c + 1] = getc(ff);
|
||||||
|
}
|
||||||
|
fclose(ff);
|
||||||
|
fclose(f);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ROM_EUROPC:
|
case ROM_EUROPC:
|
||||||
// return 0;
|
// return 0;
|
||||||
f=romfopen("europc/50145","rb");
|
f=romfopen("europc/50145","rb");
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,7 @@ MODEL models[] =
|
||||||
{"[286] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", { {"", cpus_ibmxt286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT, 256,15872, 128, ibm_at_init, NULL},
|
{"[286] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", { {"", cpus_ibmxt286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT, 256,15872, 128, ibm_at_init, NULL},
|
||||||
{"[286] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 512, 2048, 128, at_scat_init, NULL},
|
{"[286] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 512, 2048, 128, at_scat_init, NULL},
|
||||||
{"[286] Samsung SPC-4216P", ROM_SPC4216P, "spc4216p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 5, 1, at_scat_init, NULL},
|
{"[286] Samsung SPC-4216P", ROM_SPC4216P, "spc4216p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 5, 1, at_scat_init, NULL},
|
||||||
|
{"[286] Samsung SPC-4620P", ROM_SPC4620P, "spc4620p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_DISABLE_HW|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 5, 1, at_scat_init, NULL},
|
||||||
{"[286] Toshiba T3100e", ROM_T3100E, "t3100e", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_FIXED|MODEL_AT|MODEL_HAS_IDE, 1024, 5120, 256, at_t3100e_init, NULL},
|
{"[286] Toshiba T3100e", ROM_T3100E, "t3100e", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_FIXED|MODEL_AT|MODEL_HAS_IDE, 1024, 5120, 256, at_t3100e_init, NULL},
|
||||||
{"[286] Trigem 286M", ROM_TG286M, "tg286m", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 512, 8192, 128, at_headland_init, NULL},
|
{"[286] Trigem 286M", ROM_TG286M, "tg286m", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 512, 8192, 128, at_headland_init, NULL},
|
||||||
{"[286] Tulip AT Compact", ROM_TULIP_TC7, "tulip_tc7", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 640,15872, 128, ibm_at_init, NULL},
|
{"[286] Tulip AT Compact", ROM_TULIP_TC7, "tulip_tc7", { {"", cpus_286}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 640,15872, 128, ibm_at_init, NULL},
|
||||||
|
|
|
||||||
|
|
@ -301,6 +301,7 @@ void loadnvr()
|
||||||
case ROM_GW286CT: f = nvrfopen("gw286ct.nvr", "rb"); nvrmask = 127; break;
|
case ROM_GW286CT: f = nvrfopen("gw286ct.nvr", "rb"); nvrmask = 127; break;
|
||||||
case ROM_SPC4200P: f = nvrfopen("spc4200p.nvr", "rb"); nvrmask = 127; break;
|
case ROM_SPC4200P: f = nvrfopen("spc4200p.nvr", "rb"); nvrmask = 127; break;
|
||||||
case ROM_SPC4216P: f = nvrfopen("spc4216p.nvr", "rb"); nvrmask = 127; break;
|
case ROM_SPC4216P: f = nvrfopen("spc4216p.nvr", "rb"); nvrmask = 127; break;
|
||||||
|
case ROM_SPC4620P: f = nvrfopen("spc4620p.nvr", "rb"); nvrmask = 127; break;
|
||||||
case ROM_DELL200: f = nvrfopen("dell200.nvr", "rb"); nvrmask = 127; break;
|
case ROM_DELL200: f = nvrfopen("dell200.nvr", "rb"); nvrmask = 127; break;
|
||||||
case ROM_IBMAT386: f = nvrfopen("at386.nvr", "rb"); nvrmask = 127; break;
|
case ROM_IBMAT386: f = nvrfopen("at386.nvr", "rb"); nvrmask = 127; break;
|
||||||
case ROM_DESKPRO_386: f = nvrfopen("deskpro386.nvr", "rb"); break;
|
case ROM_DESKPRO_386: f = nvrfopen("deskpro386.nvr", "rb"); break;
|
||||||
|
|
@ -403,6 +404,7 @@ void savenvr()
|
||||||
case ROM_GW286CT: f = nvrfopen("gw286ct.nvr", "wb"); break;
|
case ROM_GW286CT: f = nvrfopen("gw286ct.nvr", "wb"); break;
|
||||||
case ROM_SPC4200P: f = nvrfopen("spc4200p.nvr", "wb"); break;
|
case ROM_SPC4200P: f = nvrfopen("spc4200p.nvr", "wb"); break;
|
||||||
case ROM_SPC4216P: f = nvrfopen("spc4216p.nvr", "wb"); break;
|
case ROM_SPC4216P: f = nvrfopen("spc4216p.nvr", "wb"); break;
|
||||||
|
case ROM_SPC4620P: f = nvrfopen("spc4620p.nvr", "wb"); break;
|
||||||
case ROM_DELL200: f = nvrfopen("dell200.nvr", "wb"); break;
|
case ROM_DELL200: f = nvrfopen("dell200.nvr", "wb"); break;
|
||||||
case ROM_IBMAT386: f = nvrfopen("at386.nvr", "wb"); break;
|
case ROM_IBMAT386: f = nvrfopen("at386.nvr", "wb"); break;
|
||||||
case ROM_DESKPRO_386: f = nvrfopen("deskpro386.nvr", "wb"); break;
|
case ROM_DESKPRO_386: f = nvrfopen("deskpro386.nvr", "wb"); break;
|
||||||
|
|
|
||||||
|
|
@ -1369,6 +1369,7 @@ void scat_init()
|
||||||
{
|
{
|
||||||
case ROM_GW286CT:
|
case ROM_GW286CT:
|
||||||
case ROM_SPC4216P:
|
case ROM_SPC4216P:
|
||||||
|
case ROM_SPC4620P:
|
||||||
scat_regs[SCAT_VERSION] = 4;
|
scat_regs[SCAT_VERSION] = 4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -383,6 +383,39 @@ void *ati28800k_init()
|
||||||
return ati28800;
|
return ati28800;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *ati28800k_spc4620p_init()
|
||||||
|
{
|
||||||
|
ati28800_t *ati28800 = malloc(sizeof(ati28800_t));
|
||||||
|
memset(ati28800, 0, sizeof(ati28800_t));
|
||||||
|
|
||||||
|
ati28800->port_03dd_val = 0;
|
||||||
|
ati28800->get_korean_font_base = 0;
|
||||||
|
ati28800->get_korean_font_index = 0;
|
||||||
|
ati28800->get_korean_font_enabled = 0;
|
||||||
|
ati28800->get_korean_font_kind = 0;
|
||||||
|
ati28800->in_get_korean_font_kind_set = 0;
|
||||||
|
ati28800->ksc5601_mode_enabled = 0;
|
||||||
|
|
||||||
|
rom_init_interleaved(&ati28800->bios_rom, "spc4620p/31005h.u8", "spc4620p/31005h.u10", 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||||
|
loadfont("spc4620p/svb6120a_font.rom", 6);
|
||||||
|
|
||||||
|
svga_init(&ati28800->svga, ati28800, 1 << 19, /*512kb*/
|
||||||
|
ati28800k_recalctimings,
|
||||||
|
ati28800k_in, ati28800k_out,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
io_sethandler(0x01ce, 0x0002, ati28800k_in, NULL, NULL, ati28800k_out, NULL, NULL, ati28800);
|
||||||
|
io_sethandler(0x03c0, 0x0020, ati28800k_in, NULL, NULL, ati28800k_out, NULL, NULL, ati28800);
|
||||||
|
|
||||||
|
ati28800->svga.miscout = 1;
|
||||||
|
ati28800->svga.ksc5601_sbyte_mask = 0;
|
||||||
|
|
||||||
|
ati_eeprom_load(&ati28800->eeprom, "svb6120a.nvr", 0);
|
||||||
|
|
||||||
|
return ati28800;
|
||||||
|
}
|
||||||
|
|
||||||
static int ati28800_available()
|
static int ati28800_available()
|
||||||
{
|
{
|
||||||
return rom_present("bios.bin");
|
return rom_present("bios.bin");
|
||||||
|
|
@ -457,3 +490,15 @@ device_t ati28800k_device =
|
||||||
ati28800_force_redraw,
|
ati28800_force_redraw,
|
||||||
ati28800k_add_status_info
|
ati28800k_add_status_info
|
||||||
};
|
};
|
||||||
|
|
||||||
|
device_t ati28800k_spc4620p_device =
|
||||||
|
{
|
||||||
|
"SVB-6120A",
|
||||||
|
0,
|
||||||
|
ati28800k_spc4620p_init,
|
||||||
|
ati28800_close,
|
||||||
|
NULL,
|
||||||
|
ati28800_speed_changed,
|
||||||
|
ati28800_force_redraw,
|
||||||
|
ati28800k_add_status_info
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
extern device_t ati28800_device;
|
extern device_t ati28800_device;
|
||||||
extern device_t ati28800k_device;
|
extern device_t ati28800k_device;
|
||||||
|
extern device_t ati28800k_spc4620p_device;
|
||||||
|
|
|
||||||
18
src/video.c
18
src/video.c
|
|
@ -141,6 +141,7 @@ static video_timings_t timing_vga = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||||
static video_timings_t timing_ps1_svga = {VIDEO_ISA, 6, 8,16, 6, 8,16};
|
static video_timings_t timing_ps1_svga = {VIDEO_ISA, 6, 8,16, 6, 8,16};
|
||||||
static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32};
|
static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||||
static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||||
|
static video_timings_t timing_spc4620p = {VIDEO_ISA, 2, 2, 4, 4, 4, 8};
|
||||||
static video_timings_t timing_pc425x = {VIDEO_BUS, 5, 5, 9, 20,20,30};
|
static video_timings_t timing_pc425x = {VIDEO_BUS, 5, 5, 9, 20,20,30};
|
||||||
static video_timings_t timing_pb410a = {VIDEO_BUS, 5, 5, 9, 20,20,30};
|
static video_timings_t timing_pb410a = {VIDEO_BUS, 5, 5, 9, 20,20,30};
|
||||||
static video_timings_t timing_pb570 = {VIDEO_BUS, 4, 4, 8, 10,10,20};
|
static video_timings_t timing_pb570 = {VIDEO_BUS, 4, 4, 8, 10,10,20};
|
||||||
|
|
@ -212,6 +213,10 @@ device_t *video_card_getdevice(int card, int romset)
|
||||||
case ROM_MEGAPC:
|
case ROM_MEGAPC:
|
||||||
return ¶dise_wd90c11_megapc_device;
|
return ¶dise_wd90c11_megapc_device;
|
||||||
|
|
||||||
|
case ROM_SPC4620P:
|
||||||
|
if (card == GFX_BUILTIN)
|
||||||
|
return &ati28800k_spc4620p_device;
|
||||||
|
|
||||||
case ROM_ACER386:
|
case ROM_ACER386:
|
||||||
return &oti067_acer386_device;
|
return &oti067_acer386_device;
|
||||||
|
|
||||||
|
|
@ -588,6 +593,11 @@ void video_updatetiming()
|
||||||
timing = &timing_wd90c11;
|
timing = &timing_wd90c11;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ROM_SPC4620P:
|
||||||
|
if (gfxcard == GFX_BUILTIN)
|
||||||
|
timing = &timing_spc4620p;
|
||||||
|
break;
|
||||||
|
|
||||||
case ROM_ACER386:
|
case ROM_ACER386:
|
||||||
if (gfxcard == GFX_BUILTIN)
|
if (gfxcard == GFX_BUILTIN)
|
||||||
timing = &timing_oti067;
|
timing = &timing_oti067;
|
||||||
|
|
@ -781,6 +791,14 @@ void video_init()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ROM_SPC4620P:
|
||||||
|
if (gfxcard == GFX_BUILTIN)
|
||||||
|
{
|
||||||
|
device_add(&ati28800k_spc4620p_device);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ROM_ACER386:
|
case ROM_ACER386:
|
||||||
device_add(&oti067_acer386_device);
|
device_add(&oti067_acer386_device);
|
||||||
if (gfxcard != GFX_BUILTIN)
|
if (gfxcard != GFX_BUILTIN)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue