mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 09:35:32 -07:00
Merge branch 'master' of https://github.com/86Box/86Box
This commit is contained in:
@@ -1267,6 +1267,7 @@ void
|
||||
MainWindow::refreshMediaMenu()
|
||||
{
|
||||
mm->refresh(ui->menuMedia);
|
||||
status->setSoundGainAction(ui->actionSound_gain);
|
||||
status->refresh(ui->statusbar);
|
||||
ui->actionMCA_devices->setVisible(machine_has_bus(machine, MACHINE_BUS_MCA));
|
||||
ui->actionACPI_Shutdown->setEnabled(!!acpi_enabled);
|
||||
|
||||
@@ -789,6 +789,10 @@ pas16_in(uint16_t port, void *priv)
|
||||
scsi_bus = &pas16->scsi->ncr.scsibus;
|
||||
/* Bits 0-6 must absolutely be set for SCSI hard disk drivers to work. */
|
||||
ret = (((scsi_bus->tx_mode != PIO_TX_BUS) && (pas16->scsi->status & 0x04)) << 7) | 0x7f;
|
||||
if ((scsi_bus->tx_mode == PIO_TX_BUS) && !(ret & 0x80))
|
||||
ret |= 0x80;
|
||||
|
||||
pas16_log("5C01 read ret=%02x, status=%02x, txmode=%x.\n", ret, pas16->scsi->status & 0x06, scsi_bus->tx_mode);
|
||||
}
|
||||
break;
|
||||
case 0x5c03:
|
||||
@@ -1190,6 +1194,7 @@ pas16_scsi_callback(void *priv)
|
||||
|
||||
t128_callback(pas16->scsi);
|
||||
|
||||
pas16_log("TimeOutStatus=%02x, t128stat=%02x.\n", pas16->timeout_status, dev->status);
|
||||
if ((scsi_bus->tx_mode != PIO_TX_BUS) && (dev->status & 0x04)) {
|
||||
timer_stop(&pas16->scsi_timer);
|
||||
pas16->timeout_status &= 0x7f;
|
||||
|
||||
@@ -1727,6 +1727,7 @@ ess_mixer_read(uint16_t addr, void *priv)
|
||||
case 0x32:
|
||||
case 0x36:
|
||||
case 0x38:
|
||||
case 0x3a:
|
||||
case 0x3e:
|
||||
ret = mixer->regs[mixer->index];
|
||||
break;
|
||||
@@ -2593,10 +2594,10 @@ ess_soundpiper_mca_write(const int port, const uint8_t val, void *priv)
|
||||
ess->dsp.sb_addr = 0x0000;
|
||||
break;
|
||||
case 0x08:
|
||||
ess->dsp.sb_addr = 0x0240;
|
||||
ess->dsp.sb_addr = 0x0220;
|
||||
break;
|
||||
case 0x0c:
|
||||
ess->dsp.sb_addr = 0x0220;
|
||||
ess->dsp.sb_addr = 0x0240;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2750,64 +2751,59 @@ ess_chipchat_mca_write(int port, uint8_t val, void *priv)
|
||||
|
||||
ess->pos_regs[port & 7] = val;
|
||||
|
||||
if (ess->pos_regs[2] & 1) {
|
||||
ess->dsp.sb_addr = (ess->pos_regs[2] == 0x51) ? 0x0220 : 0x0000;
|
||||
if (ess->pos_regs[2] & 0x01) {
|
||||
ess->dsp.sb_addr = 0x0220;
|
||||
|
||||
if (ess->dsp.sb_addr != 0x0000) {
|
||||
io_sethandler(ess->dsp.sb_addr, 0x0004,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL,
|
||||
ess->opl.priv);
|
||||
io_sethandler(ess->dsp.sb_addr + 8, 0x0002,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL,
|
||||
ess->opl.priv);
|
||||
io_sethandler(ess->dsp.sb_addr + 8, 0x0002,
|
||||
io_sethandler(ess->dsp.sb_addr, 0x0004,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL,
|
||||
ess->opl.priv);
|
||||
io_sethandler(ess->dsp.sb_addr + 8, 0x0002,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL,
|
||||
ess->opl.priv);
|
||||
io_sethandler(ess->dsp.sb_addr + 8, 0x0002,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(0x0388, 0x0004,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL, ess->opl.priv);
|
||||
io_sethandler(0x0388, 0x0004,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 4, 0x0002,
|
||||
ess_mixer_read, NULL, NULL,
|
||||
ess_mixer_write, NULL, NULL,
|
||||
ess);
|
||||
|
||||
io_sethandler(ess->dsp.sb_addr + 2, 0x0004,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 6, 0x0001,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 0x0a, 0x0006,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
|
||||
if (ess->dsp.sb_subtype == SB_SUBTYPE_ESS_ES1688) {
|
||||
mpu401_change_addr(ess->mpu, 0x0330);
|
||||
|
||||
io_sethandler(0x0330, 0x0002,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(0x0388, 0x0004,
|
||||
ess->opl.read, NULL, NULL,
|
||||
ess->opl.write, NULL, NULL, ess->opl.priv);
|
||||
io_sethandler(0x0388, 0x0004,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 4, 0x0004,
|
||||
ess_mixer_read, NULL, NULL,
|
||||
ess_mixer_write, NULL, NULL,
|
||||
ess);
|
||||
|
||||
io_sethandler(ess->dsp.sb_addr + 2, 0x0004,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 6, 0x0001,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
io_sethandler(ess->dsp.sb_addr + 0x0a, 0x0006,
|
||||
ess_base_read, NULL, NULL,
|
||||
ess_base_write, NULL, NULL,
|
||||
ess);
|
||||
|
||||
if (ess->dsp.sb_subtype == SB_SUBTYPE_ESS_ES1688) {
|
||||
mpu401_change_addr(ess->mpu, (ess->pos_regs[2] == 0x51) ? 0x0330 : 0);
|
||||
|
||||
if (ess->pos_regs[2] == 0x51)
|
||||
io_sethandler(0x0330, 0x0002,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
ess);
|
||||
}
|
||||
}
|
||||
|
||||
/* DSP I/O handler is activated in sb_dsp_setaddr */
|
||||
sb_dsp_setaddr(&ess->dsp, ess->dsp.sb_addr);
|
||||
gameport_remap(ess->gameport, (ess->pos_regs[2] == 0x51) ? 0x200 : 0);
|
||||
}
|
||||
gameport_remap(ess->gameport, 0x0200);
|
||||
|
||||
if (ess->pos_regs[2] == 0x51) {
|
||||
sb_dsp_setirq(&ess->dsp, 7);
|
||||
mpu401_setirq(ess->mpu, 7);
|
||||
|
||||
|
||||
@@ -388,6 +388,7 @@ sb_update_status(sb_dsp_t *dsp, int bit, int set)
|
||||
{
|
||||
int masked = 0;
|
||||
|
||||
sb_dsp_log("SBIRQ8=%d, irqnum=%d, bit=%x, set=%x.\n", dsp->sb_irq8, dsp->sb_irqnum, bit, set);
|
||||
if (dsp->sb_irq8 || dsp->sb_irq16)
|
||||
return;
|
||||
|
||||
@@ -423,6 +424,7 @@ sb_update_status(sb_dsp_t *dsp, int bit, int set)
|
||||
}
|
||||
}
|
||||
|
||||
sb_dsp_log("Masked=%02x.\n", masked);
|
||||
if (set && !masked)
|
||||
dsp->irq_update(dsp->irq_priv, 1);
|
||||
else if (!set)
|
||||
@@ -1039,6 +1041,8 @@ sb_ess_write_reg(sb_dsp_t *dsp, const uint8_t reg, uint8_t data)
|
||||
{
|
||||
uint8_t chg;
|
||||
|
||||
sb_dsp_log("ESS Write reg=%02x, val=%02x.\n", reg, data);
|
||||
|
||||
switch (reg) {
|
||||
case 0xA1: /* Extended Mode Sample Rate Generator */
|
||||
{
|
||||
@@ -1110,6 +1114,7 @@ sb_ess_write_reg(sb_dsp_t *dsp, const uint8_t reg, uint8_t data)
|
||||
dsp->sb_irqnum = 10;
|
||||
break;
|
||||
}
|
||||
sb_dsp_log("Legacy Audio IRQ control=%d.\n", dsp->sb_irqnum);
|
||||
sb_ess_update_irq_drq_readback_regs(dsp, false);
|
||||
break;
|
||||
case 0xB2: /* DRQ Control */
|
||||
@@ -1131,6 +1136,7 @@ sb_ess_write_reg(sb_dsp_t *dsp, const uint8_t reg, uint8_t data)
|
||||
dsp->sb_8_dmanum = 3;
|
||||
break;
|
||||
}
|
||||
sb_dsp_log("Legacy Audio DRQ control=%d, chg=%02x.\n", dsp->sb_8_dmanum, chg);
|
||||
sb_ess_update_irq_drq_readback_regs(dsp, false);
|
||||
if (chg & 0x40)
|
||||
sb_ess_update_dma_status(dsp);
|
||||
@@ -1876,12 +1882,12 @@ sb_write(uint16_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
sb_dsp_t *dsp = (sb_dsp_t *) priv;
|
||||
|
||||
sb_dsp_log("[%04X:%08X] DSP: [W] %04X = %02X\n", CS, cpu_state.pc, addr, val);
|
||||
|
||||
/* Sound Blasters prior to Sound Blaster 16 alias the I/O ports. */
|
||||
if ((dsp->sb_type < SB16_DSP_404) && (IS_NOT_ESS(dsp) || ((addr & 0xF) != 0xE)))
|
||||
addr &= 0xfffe;
|
||||
|
||||
sb_dsp_log("[%04X:%08X] DSP: [W] %04X = %02X\n", CS, cpu_state.pc, addr, val);
|
||||
|
||||
switch (addr & 0xF) {
|
||||
case 6: /* Reset */
|
||||
sb_do_reset(dsp, val);
|
||||
@@ -1962,7 +1968,7 @@ sb_read(uint16_t addr, void *priv)
|
||||
uint8_t ret = 0x00;
|
||||
|
||||
/* Sound Blasters prior to Sound Blaster 16 alias the I/O ports. */
|
||||
if ((dsp->sb_type < SB16_DSP_404) && (IS_NOT_ESS(dsp) || ((addr & 0xF) != 0xF)))
|
||||
if ((dsp->sb_type < SB16_DSP_404) && (IS_NOT_ESS(dsp) || ((addr & 0xF) != 0xE)))
|
||||
/* Exception: ESS AudioDrive does not alias port base+0xf */
|
||||
addr &= 0xfffe;
|
||||
|
||||
@@ -2085,7 +2091,7 @@ sb_read(uint16_t addr, void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
sb_dsp_log("[%04X:%08X] DSP: [R] %04X = %02X\n", CS, cpu_state.pc, a, ret);
|
||||
sb_dsp_log("[%04X:%08X] DSP: [R] %04X = %02X\n", CS, cpu_state.pc, addr, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2319,6 +2325,7 @@ pollsb(void *priv)
|
||||
if (dsp->sb_8_enable && dsp->sb_pausetime < 0 && dsp->sb_8_output) {
|
||||
sb_dsp_update(dsp);
|
||||
|
||||
sb_dsp_log("8-bit format=%02x, pause=%x, length=%d.\n", dsp->sb_8_format, dsp->sb_8_pause, dsp->sb_8_length);
|
||||
switch (dsp->sb_8_format) {
|
||||
case 0x00: /* Mono unsigned */
|
||||
if (!dsp->sb_8_pause) {
|
||||
|
||||
@@ -5226,7 +5226,7 @@ mach32_ap_writeb(uint32_t addr, uint8_t val, void *priv)
|
||||
uint8_t port_dword = addr & 0xfc;
|
||||
|
||||
if (((mach->local_cntl & 0x20) || (mach->pci_cntl_reg & 0x80)) &&
|
||||
(((addr - mach->linear_base) >= ((mach->ap_size << 20) - 0x200)) && (addr < (mach->ap_size << 20)))) {
|
||||
(((addr - mach->linear_base) >= ((mach->ap_size << 20) - 0x200)) && ((addr - mach->linear_base) < (mach->ap_size << 20)))) {
|
||||
if (addr & 0x100) {
|
||||
mach_log("Port WORDB Write=%04x.\n", 0x02ee + (port_dword << 8));
|
||||
mach_accel_outb(0x02ee + (addr & 1) + (port_dword << 8), val, mach);
|
||||
@@ -5279,6 +5279,9 @@ mach32_ap_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
const ibm8514_t *dev = (ibm8514_t *) svga->dev8514;
|
||||
uint8_t port_dword = addr & 0xfc;
|
||||
|
||||
mach_log("Linear WORDL Write=%08x, val=%08x, ON=%x, dpconfig=%04x, apsize=%08x.\n",
|
||||
addr - mach->linear_base, val, dev->on, mach->accel.dp_config, mach->ap_size << 20);
|
||||
|
||||
if (((mach->local_cntl & 0x20) || (mach->pci_cntl_reg & 0x80)) &&
|
||||
(((addr - mach->linear_base) >= ((mach->ap_size << 20) - 0x200)) && ((addr - mach->linear_base) < (mach->ap_size << 20)))) {
|
||||
if (addr & 0x100) {
|
||||
@@ -5291,8 +5294,6 @@ mach32_ap_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
mach_accel_outw(0x02e8 + (port_dword << 8) + 4, val >> 16, mach);
|
||||
}
|
||||
} else {
|
||||
mach_log("Linear WORDL Write=%08x, val=%08x, ON=%x, dpconfig=%04x, apsize=%08x.\n",
|
||||
addr - mach->linear_base, val, dev->on, mach->accel.dp_config, mach->ap_size << 20);
|
||||
if (dev->on)
|
||||
mach32_writel_linear(addr, val, mach);
|
||||
else
|
||||
|
||||
@@ -782,7 +782,8 @@ svga_recalctimings(svga_t *svga)
|
||||
|
||||
if (xga_active && (svga->xga != NULL)) {
|
||||
if (xga->on) {
|
||||
if ((svga->mapping.base == 0xb8000) && (xga->aperture_cntl == 1)) /*Some operating systems reset themselves with ctrl-alt-del by going into text mode.*/
|
||||
svga_log("XGA on=%d, base=%05x, ap=%x.\n", xga->on, svga->mapping.base, xga->aperture_cntl);
|
||||
if ((svga->mapping.base == 0xb8000) && (xga->aperture_cntl >= 1)) /*Some operating systems reset themselves with ctrl-alt-del by going into text mode.*/
|
||||
xga->on = 0;
|
||||
}
|
||||
}
|
||||
@@ -1541,7 +1542,7 @@ svga_init(const device_t *info, svga_t *svga, void *priv, int memsize,
|
||||
svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 32;
|
||||
|
||||
svga->translate_address = NULL;
|
||||
|
||||
|
||||
svga->cable_connected = 1;
|
||||
svga->ksc5601_english_font_type = 0;
|
||||
|
||||
|
||||
@@ -2738,7 +2738,7 @@ xga_write_test(uint32_t addr, uint8_t val, void *priv)
|
||||
xga_t *xga = (xga_t *) svga->xga;
|
||||
|
||||
if (xga_active && xga) {
|
||||
if (((xga->op_mode & 7) >= 1) && xga->aperture_cntl) {
|
||||
if (((xga->op_mode & 7) >= 1) && xga->aperture_cntl && (svga->mapping.base == 0xb8000)) {
|
||||
xga_log("WriteAddr=%05x.\n", addr);
|
||||
if (val == 0xa5) { /*Memory size test of XGA*/
|
||||
xga->test = val;
|
||||
@@ -2843,7 +2843,7 @@ xga_read_test(uint32_t addr, void *priv)
|
||||
uint8_t ret = 0x00;
|
||||
|
||||
if (xga_active && xga) {
|
||||
if (((xga->op_mode & 7) >= 1) && xga->aperture_cntl) {
|
||||
if (((xga->op_mode & 7) >= 1) && xga->aperture_cntl && (svga->mapping.base == 0xb8000)) {
|
||||
if (xga->test == 0xa5) { /*Memory size test of XGA*/
|
||||
if (addr == 0xa0001) {
|
||||
ret = xga->test;
|
||||
|
||||
Reference in New Issue
Block a user