From 55d2e3c9a7aa2d48e0740418879a9fa639258e4d Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 5 Dec 2017 18:34:09 +0100 Subject: [PATCH] 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. --- src/keyboard_at.c | 1 + src/machine/machine_table.c | 2 +- src/video/vid_svga.c | 81 +------------------------------------ 3 files changed, 3 insertions(+), 81 deletions(-) diff --git a/src/keyboard_at.c b/src/keyboard_at.c index 7e3dd853a..9b275f9ee 100644 --- a/src/keyboard_at.c +++ b/src/keyboard_at.c @@ -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; diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b1754ecc0..ce89bb3b7 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -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 }, diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 4dbe5d826..ca741cd22 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -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;