Added Samsung SPC-4620P. Patch from Greatpsycho.

This commit is contained in:
SarahW 2020-03-07 13:47:37 +00:00
commit c8638b9b2b
8 changed files with 92 additions and 2 deletions

View file

@ -200,6 +200,7 @@ enum
ROM_GW286CT,
ROM_SPC4200P,
ROM_SPC4216P,
ROM_SPC4620P,
ROM_DELL200,
ROM_MISC286,
ROM_IBMAT386,

View file

@ -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");

View file

@ -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},

View file

@ -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;

View file

@ -1369,6 +1369,7 @@ void scat_init()
{
case ROM_GW286CT:
case ROM_SPC4216P:
case ROM_SPC4620P:
scat_regs[SCAT_VERSION] = 4;
break;
default:

View file

@ -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
};

View file

@ -1,2 +1,3 @@
extern device_t ati28800_device;
extern device_t ati28800k_device;
extern device_t ati28800k_spc4620p_device;

View file

@ -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 &paradise_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)