Improved 8042 (AT and PS/2 keyboard controller emulation), no more hacks, split into various devices depending on vendor (generic, AMI, IBM (MCA), Quadtel, Toshiba), and fixed several commands - hopefully fixes all existing AT+ keyboard problems (such as incorrect scan codes on some machine under some circumstances);

Fixed a bug in the SMC FDC37C932 emulation, fixes the FDC on the two Acer machines;
Re-added some Acer-specific I/O port handlers, fixes entry into CMOS Setup on the two Acer machines.
This commit is contained in:
OBattler
2018-01-04 07:44:33 +01:00
parent 9b2705eb9f
commit 1d4fed2110
23 changed files with 670 additions and 312 deletions

View File

@@ -260,10 +260,10 @@ static void model_55sx_write(uint16_t port, uint8_t val)
case 0x104:
ps2.memory_bank[ps2.option[3] & 7] &= ~0xf;
ps2.memory_bank[ps2.option[3] & 7] |= (val & 0xf);
pclog("Write memory bank %i %02x\n", ps2.option[3] & 7, val);
/* pclog("Write memory bank %i %02x\n", ps2.option[3] & 7, val); */
break;
case 0x105:
pclog("Write POS3 %02x\n", val);
/* pclog("Write POS3 %02x\n", val); */
ps2.option[3] = val;
shadowbios = !(val & 0x10);
shadowbios_write = val & 0x10;
@@ -440,15 +440,15 @@ uint8_t ps2_mca_read(uint16_t port, void *p)
temp = 0xff;
break;
}
pclog("ps2_read: port=%04x temp=%02x\n", port, temp);
/* pclog("ps2_read: port=%04x temp=%02x\n", port, temp); */
return temp;
}
static void ps2_mca_write(uint16_t port, uint8_t val, void *p)
{
pclog("ps2_write: port=%04x val=%02x %04x:%04x\n", port, val, CS,cpu_state.pc);
/* pclog("ps2_write: port=%04x val=%02x %04x:%04x\n", port, val, CS,cpu_state.pc); */
switch (port)
{
@@ -619,18 +619,18 @@ static void mem_encoding_update()
if (ps2.mem_regs[1] & 2) {
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
pclog("PS/2 Model 80-111: ROM space enabled\n");
/* pclog("PS/2 Model 80-111: ROM space enabled\n"); */
} else {
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED);
pclog("PS/2 Model 80-111: ROM space disabled\n");
/* pclog("PS/2 Model 80-111: ROM space disabled\n"); */
}
if (ps2.mem_regs[1] & 4) {
mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0x80000);
pclog("PS/2 Model 80-111: 00080000- 0009FFFF disabled\n");
/* pclog("PS/2 Model 80-111: 00080000- 0009FFFF disabled\n"); */
} else {
mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0xa0000);
pclog("PS/2 Model 80-111: 00080000- 0009FFFF enabled\n");
/* pclog("PS/2 Model 80-111: 00080000- 0009FFFF enabled\n"); */
}
if (!(ps2.mem_regs[1] & 8))
@@ -642,10 +642,10 @@ static void mem_encoding_update()
mem_split_enable(ps2.split_size, ps2.split_addr);
pclog("PS/2 Model 80-111: Split memory block enabled at %08X\n", ps2.split_addr);
} else {
/* pclog("PS/2 Model 80-111: Split memory block enabled at %08X\n", ps2.split_addr); */
} /* else {
pclog("PS/2 Model 80-111: Split memory block disabled\n");
}
} */
}
static uint8_t mem_encoding_read(uint16_t addr, void *p)
@@ -773,7 +773,7 @@ static void ps2_mca_board_model_80_type2_init(int is486)
break;
}
pclog("ps2.mem_pos_regs[4] = %08X\n", ps2.mem_pos_regs[4]);
/* pclog("ps2.mem_pos_regs[4] = %08X\n", ps2.mem_pos_regs[4]); */
mca_add(ps2_mem_expansion_read, ps2_mem_expansion_write, NULL);
mem_mapping_add(&ps2.expansion_mapping,
@@ -802,7 +802,7 @@ machine_ps2_common_init(machine_t *model)
dma16_init();
ps2_dma_init();
device_add(&keyboard_ps2_device);
device_add(&keyboard_ps2_mca_device);
nvr_at_init(8);
pic2_init();