The AT keyboard controller now recognizes the Green-B as an AMI BIOS board, should handle the AMI-specific keyboard controller commands correctly now;

Fixed (S)VGA sense handling - fixes error 2401 on PS/2's;
Fixed the IBM XT Model 286 NVR flags.
This commit is contained in:
OBattler
2017-12-05 18:34:09 +01:00
parent af08e251d3
commit 55d2e3c9a7
3 changed files with 3 additions and 81 deletions

View File

@@ -981,6 +981,7 @@ bad_command:
case ROM_AP53:
case ROM_P55T2S:
case ROM_S1668:
case ROM_4GPV31:
/*Set extended controller RAM*/
kbdlog("ATkbd: set extended controller RAM\n");
kbd->want60 = 1;

View File

@@ -64,7 +64,7 @@ machine_t machines[] = {
{ "[286 ISA] IBM AT", ROM_IBMAT, "ibmat", {{"", cpus_ibmat}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_top_remap_init, NULL, nvr_at_close },
{ "[286 ISA] IBM PS/1 model 2011", ROM_IBMPS1_2011, "ibmps1es", {{"", cpus_ps1_m2011}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 512,16384, 512, 127, machine_ps1_m2011_init, NULL, nvr_at_close },
{ "[286 ISA] IBM PS/2 model 30-286", ROM_IBMPS2_M30_286, "ibmps2_m30_286", {{"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 16, 1, 127, machine_ps2_m30_286_init, NULL, nvr_at_close },
{ "[286 ISA] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", {{"", cpus_ibmxt286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 0, machine_at_top_remap_init, NULL, NULL },
{ "[286 ISA] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", {{"", cpus_ibmxt286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_top_remap_init, NULL, nvr_at_close },
{ "[286 ISA] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_PS2, 512, 2048, 128, 127, machine_at_scat_init, NULL, nvr_at_close },
#ifdef WALTJE
{ "[286 ISA] OpenAT 286", ROM_OPENAT, "open_at", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512, 4096, 128, 127, machine_at_init, NULL, nvr_at_close },

View File

@@ -263,10 +263,7 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
svga->pallook[svga->dac_write] = makecol32(svga->vgapal[svga->dac_write].r, svga->vgapal[svga->dac_write].g, svga->vgapal[svga->dac_write].b);
else
svga->pallook[svga->dac_write] = makecol32(video_6to8[svga->vgapal[svga->dac_write].r & 0x3f], video_6to8[svga->vgapal[svga->dac_write].g & 0x3f], video_6to8[svga->vgapal[svga->dac_write].b & 0x3f]);
#if 1
// FIXME: temp to see if this fixes 2401 on PS/1.
svga->sense = (svga->vgapal[svga->dac_write].r & svga->vgapal[svga->dac_write].g & svga->vgapal[svga->dac_write].b) & 0x10;
#endif
svga->dac_pos = 0;
svga->dac_write = (svga->dac_write + 1) & 255;
break;
@@ -324,46 +321,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
}
}
/*
* Get the switch sense input
*
* This is reverse engineered from the IBM VGA BIOS. I have no
* idea how and why this works.
*
* Note by Tohka: This code is from PCE, modified to be 86Box-compatible.
*/
static int svga_get_input_status_0_ss(svga_t *svga)
{
const unsigned char *p;
unsigned char dac[3];
static unsigned char vals[] = {
0x12, 0x12, 0x12, 0x10,
0x14, 0x14, 0x14, 0x10,
0x2d, 0x14, 0x14, 0x00,
0x14, 0x2d, 0x14, 0x00,
0x14, 0x14, 0x2d, 0x00,
0x2d, 0x2d, 0x2d, 0x00,
0x00, 0x00, 0x00, 0xff
};
dac[0] = svga->vgapal[0].r >> 2;
dac[1] = svga->vgapal[0].g >> 2;
dac[2] = svga->vgapal[0].b >> 2;
p = vals;
while (p[3] != 0xff) {
if ((p[0] == dac[0]) && (p[1] == dac[1]) && (p[2] == dac[2])) {
return (p[3] != 0);
}
p += 4;
}
return (1);
}
uint8_t svga_in(uint16_t addr, void *p)
{
svga_t *svga = (svga_t *)p;
@@ -408,43 +365,7 @@ uint8_t svga_in(uint16_t addr, void *p)
case 0x3C1:
return svga->attrregs[svga->attraddr];
case 0x3c2:
// if ((romset == ROM_IBMPS1_2011) || (romset == ROM_IBMPS1_2121) || (romset == ROM_IBMPS1_2121_ISA) || (romset == ROM_IBMPS1_2133) || (romset == ROM_IBMPS2_M30_286) || (romset == ROM_IBMPS2_M50) || (romset == ROM_IBMPS2_M55SX) || (romset == ROM_IBMPS2_M80))
if (romset == ROM_IBMPS1_2011)
{
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x50)
{
temp = 0;
}
else
{
temp = 0x10;
}
}
else
{
if (gfxcard == GFX_RIVA128)
{
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x4e)
{
temp = 0;
}
else
{
temp = 0x10;
}
}
else
{
if (svga_get_input_status_0_ss(svga))
{
temp = 0x10;
}
else
{
temp = 0;
}
}
}
temp = svga->sense;
return temp;
case 0x3C3:
return svga->enabled & 0x01;