Added Samsung SPC-6000A and SPC-6033P. Patch from Greatpsycho.
This commit is contained in:
parent
2efda3598b
commit
9bdbcc18c0
8 changed files with 105 additions and 4 deletions
|
|
@ -209,6 +209,8 @@ enum
|
|||
ROM_MEGAPC,
|
||||
ROM_AMA932J,
|
||||
ROM_AMI386SX,
|
||||
ROM_SPC6000A,
|
||||
ROM_SPC6033P,
|
||||
ROM_AMI486,
|
||||
ROM_WIN486,
|
||||
ROM_PCI486,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
15
src/video.c
15
src/video.c
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue