Added Samsung SPC-6000A and SPC-6033P. Patch from Greatpsycho.

This commit is contained in:
SarahW 2020-11-14 12:25:36 +00:00
commit 9bdbcc18c0
8 changed files with 105 additions and 4 deletions

View file

@ -209,6 +209,8 @@ enum
ROM_MEGAPC,
ROM_AMA932J,
ROM_AMI386SX,
ROM_SPC6000A,
ROM_SPC6033P,
ROM_AMI486,
ROM_WIN486,
ROM_PCI486,

View file

@ -522,9 +522,9 @@ void keyboard_at_write(uint16_t port, uint8_t val, void *priv)
key_ctrl_queue_start = key_ctrl_queue_end = 0;
keyboard_at.status &= ~STAT_OFULL;
}
/* T3100e expects STAT_IFULL to be set immediately
/* T3100e and Samsung SPC-6000A expects STAT_IFULL to be set immediately
* after sending 0xAA */
if(romset == ROM_T3100E) keyboard_at.status |= STAT_IFULL;
if(romset == ROM_T3100E || romset == ROM_SPC6000A) keyboard_at.status |= STAT_IFULL;
keyboard_at.status |= STAT_SYSFLAG;
keyboard_at.mem[0] |= 0x04;
keyboard_at_adddata(0x55);

View file

@ -446,6 +446,37 @@ int loadbios()
}
break;
case ROM_SPC6000A:
f = romfopen("spc6000a/3c80.u27", "rb");
ff = romfopen("spc6000a/9f80.u26","rb");
if (f && ff)
{
for (c = 0x8000; c < 0x10000; c += 2)
{
rom[c] = getc(f);
rom[c + 1] = getc(ff);
}
fclose(ff);
fclose(f);
return 1;
}
break;
case ROM_SPC6033P:
f=romfopen("spc6033p/svb6120a_font.rom","rb");
if (!f) break;
fclose(f);
f=romfopen("spc6033p/phoenix.bin","rb");
if (f)
{
fseek(f, 0x10000, SEEK_SET);
romfread(rom,65536,1,f);
fclose(f);
return 1;
}
break;
case ROM_EUROPC:
// return 0;
f=romfopen("europc/50145","rb");

View file

@ -203,6 +203,7 @@ MODEL models[] =
{"[386SX] IBM PS/2 Model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, MODEL_GFX_DISABLE_SW|MODEL_AT|MODEL_PS2|MODEL_MCA, 1, 8, 1, ps2_model_55sx_init, NULL},
{"[386SX] KMX-C-02", ROM_KMXC02, "kmxc02", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, MODEL_GFX_NONE|MODEL_AT, 512,16384, 512, at_scatsx_init, NULL},
{"[386SX] Packard Bell Legend 300SX", ROM_PB_L300SX, "pb_l300sx", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 16, 1, pb_l300sx_init, NULL},
{"[386SX] Samsung SPC-6033P", ROM_SPC6033P, "spc6033p", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, MODEL_GFX_DISABLE_HW|MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 2, 12, 2, at_scamp_init, NULL},
{"[386DX] AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 1, 256, 1, at_opti495_init, NULL},
{"[386DX] Compaq Deskpro 386", ROM_DESKPRO_386, "deskpro386", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_NONE|MODEL_AT, 1, 15, 1, deskpro386_init, NULL},
@ -210,6 +211,7 @@ MODEL models[] =
{"[386DX] IBM PS/2 Model 70 (type 3)", ROM_IBMPS2_M70_TYPE3, "ibmps2_m70_type3", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_DISABLE_SW|MODEL_AT|MODEL_PS2|MODEL_MCA, 2, 16, 2, ps2_model_70_init, NULL},
{"[386DX] IBM PS/2 Model 80", ROM_IBMPS2_M80, "ibmps2_m80", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_DISABLE_SW|MODEL_AT|MODEL_PS2|MODEL_MCA, 1, 12, 1, ps2_model_80_init, NULL},
{"[386DX] MR 386DX clone", ROM_MR386DX_OPTI495, "mr386dx", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 1, 256, 1, at_opti495_init, NULL},
{"[386DX] Samsung SPC-6000A", ROM_SPC6000A, "spc6000a", { {"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 1, 32, 1, at_cs8230_init, NULL},
{"[486] AMI 486 clone", ROM_AMI486, "ami486", { {"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 1, 256, 1, at_ali1429_init, NULL},
{"[486] AMI WinBIOS 486", ROM_WIN486, "win486", { {"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}}, MODEL_GFX_NONE|MODEL_AT|MODEL_HAS_IDE, 1, 256, 1, at_ali1429_init, NULL},

View file

@ -303,6 +303,8 @@ void loadnvr()
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_SPC6000A: f = nvrfopen("spc6000a.nvr", "rb"); nvrmask = 127; break;
case ROM_SPC6033P: f = nvrfopen("spc6033p.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;
@ -408,6 +410,8 @@ void savenvr()
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_SPC6000A: f = nvrfopen("spc6000a.nvr", "wb"); break;
case ROM_SPC6033P: f = nvrfopen("spc6033p.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

@ -268,7 +268,7 @@ uint8_t ati28800k_in(uint16_t addr, void *p)
void ati28800_recalctimings(svga_t *svga)
{
ati28800_t *ati28800 = (ati28800_t *)svga->p;
pclog("ati28800_recalctimings\n");
//pclog("ati28800_recalctimings\n");
switch (((ati28800->regs[0xbe] & 0x10) >> 1) | ((ati28800->regs[0xb9] & 2) << 1) | ((svga->miscout & 0x0C) >> 2))
{
@ -299,7 +299,7 @@ void ati28800_recalctimings(svga_t *svga)
if (!svga->scrblank && (ati28800->regs[0xb0] & 0x20)) /*Extended 256 colour modes*/
{
pclog("8bpp_highres\n");
//pclog("8bpp_highres\n");
svga->render = svga_render_8bpp_highres;
svga->rowoffset <<= 1;
svga->ma <<= 1;
@ -407,6 +407,40 @@ void *ati28800k_spc4620p_init()
return ati28800;
}
void *ati28800k_spc6033p_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(&ati28800->bios_rom, "spc6033p/phoenix.bin", 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
loadfont("spc6033p/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_spc6033p.nvr", 0);
return ati28800;
}
static int ati28800_available()
{
return rom_present("bios.bin");
@ -493,3 +527,15 @@ device_t ati28800k_spc4620p_device =
ati28800_force_redraw,
ati28800k_add_status_info
};
device_t ati28800k_spc6033p_device =
{
"SVB-6120A",
0,
ati28800k_spc6033p_init,
ati28800_close,
NULL,
ati28800_speed_changed,
ati28800_force_redraw,
ati28800k_add_status_info
};

View file

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

View file

@ -217,6 +217,12 @@ device_t *video_card_getdevice(int card, int romset)
case ROM_SPC4620P:
if (card == GFX_BUILTIN)
return &ati28800k_spc4620p_device;
break;
case ROM_SPC6033P:
if (card == GFX_BUILTIN)
return &ati28800k_spc6033p_device;
break;
case ROM_ACER386:
return &oti067_acer386_device;
@ -595,6 +601,7 @@ void video_updatetiming()
break;
case ROM_SPC4620P:
case ROM_SPC6033P:
if (gfxcard == GFX_BUILTIN)
timing = &timing_spc4620p;
break;
@ -800,6 +807,14 @@ void video_init()
}
break;
case ROM_SPC6033P:
if (gfxcard == GFX_BUILTIN)
{
device_add(&ati28800k_spc6033p_device);
return;
}
break;
case ROM_ACER386:
device_add(&oti067_acer386_device);
if (gfxcard != GFX_BUILTIN)