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_SPC4200P,
|
||||
ROM_SPC4216P,
|
||||
ROM_SPC4620P,
|
||||
ROM_DELL200,
|
||||
ROM_MISC286,
|
||||
ROM_IBMAT386,
|
||||
|
|
|
|||
|
|
@ -418,6 +418,27 @@ int loadbios()
|
|||
}
|
||||
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:
|
||||
// return 0;
|
||||
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] 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-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] 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},
|
||||
|
|
|
|||
|
|
@ -301,6 +301,7 @@ void loadnvr()
|
|||
case ROM_GW286CT: f = nvrfopen("gw286ct.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_SPC4620P: f = nvrfopen("spc4620p.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_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_SPC4200P: f = nvrfopen("spc4200p.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_IBMAT386: f = nvrfopen("at386.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_SPC4216P:
|
||||
case ROM_SPC4620P:
|
||||
scat_regs[SCAT_VERSION] = 4;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -383,6 +383,39 @@ void *ati28800k_init()
|
|||
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()
|
||||
{
|
||||
return rom_present("bios.bin");
|
||||
|
|
@ -457,3 +490,15 @@ device_t ati28800k_device =
|
|||
ati28800_force_redraw,
|
||||
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 ati28800k_device;
|
||||
extern device_t ati28800k_spc4620p_device;
|
||||
|
|
|
|||
22
src/video.c
22
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_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_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_pb410a = {VIDEO_BUS, 5, 5, 9, 20,20,30};
|
||||
static video_timings_t timing_pb570 = {VIDEO_BUS, 4, 4, 8, 10,10,20};
|
||||
|
|
@ -211,7 +212,11 @@ device_t *video_card_getdevice(int card, int romset)
|
|||
|
||||
case ROM_MEGAPC:
|
||||
return ¶dise_wd90c11_megapc_device;
|
||||
|
||||
|
||||
case ROM_SPC4620P:
|
||||
if (card == GFX_BUILTIN)
|
||||
return &ati28800k_spc4620p_device;
|
||||
|
||||
case ROM_ACER386:
|
||||
return &oti067_acer386_device;
|
||||
|
||||
|
|
@ -587,6 +592,11 @@ void video_updatetiming()
|
|||
if (gfxcard == GFX_BUILTIN)
|
||||
timing = &timing_wd90c11;
|
||||
break;
|
||||
|
||||
case ROM_SPC4620P:
|
||||
if (gfxcard == GFX_BUILTIN)
|
||||
timing = &timing_spc4620p;
|
||||
break;
|
||||
|
||||
case ROM_ACER386:
|
||||
if (gfxcard == GFX_BUILTIN)
|
||||
|
|
@ -780,7 +790,15 @@ void video_init()
|
|||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ROM_SPC4620P:
|
||||
if (gfxcard == GFX_BUILTIN)
|
||||
{
|
||||
device_add(&ati28800k_spc4620p_device);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case ROM_ACER386:
|
||||
device_add(&oti067_acer386_device);
|
||||
if (gfxcard != GFX_BUILTIN)
|
||||
|
|
|
|||
Loading…
Reference in a new issue