mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 09:58:19 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
@@ -1070,10 +1070,14 @@ write64_generic(void *priv, uint8_t val)
|
||||
fixed_bits |= 8;
|
||||
/* (B0 or F0) | (0x04 or 0x0c) */
|
||||
kbc_delay_to_ob(dev, dev->p1 | fixed_bits, 0, 0x00);
|
||||
} else if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_GREEN))
|
||||
} else if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_GREEN)) {
|
||||
/* (B0 or F0) | (0x08 or 0x0c) */
|
||||
kbc_delay_to_ob(dev, ((dev->p1 | fixed_bits) & 0xf0) | (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c), 0, 0x00);
|
||||
else if (kbc_ven == KBC_VEN_COMPAQ)
|
||||
uint8_t p1_out = ((dev->p1 | fixed_bits) & 0xf0) |
|
||||
(((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c);
|
||||
if (!strcmp(machine_get_internal_name(), "alfredo"))
|
||||
p1_out &= 0xef;
|
||||
kbc_delay_to_ob(dev, p1_out, 0, 0x00);
|
||||
} else if (kbc_ven == KBC_VEN_COMPAQ)
|
||||
kbc_delay_to_ob(dev, dev->p1 | (hasfpu ? 0x00 : 0x04), 0, 0x00);
|
||||
else
|
||||
/* (B0 or F0) | (0x04 or 0x44) */
|
||||
@@ -1578,8 +1582,13 @@ write64_phoenix(void *priv, uint8_t val)
|
||||
case 0xd5: /* Read MultiKey code revision level */
|
||||
kbc_at_log("ATkbc: Phoenix - Read MultiKey code revision level\n");
|
||||
if (dev->misc_flags & FLAG_PS2) {
|
||||
kbc_at_queue_add(dev, 0x04);
|
||||
kbc_at_queue_add(dev, 0x16);
|
||||
if (dev->flags & DEVICE_PCI) {
|
||||
kbc_at_queue_add(dev, 0x04);
|
||||
kbc_at_queue_add(dev, 0x16);
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x01);
|
||||
kbc_at_queue_add(dev, 0x38);
|
||||
}
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x01);
|
||||
kbc_at_queue_add(dev, 0x29);
|
||||
@@ -1598,9 +1607,15 @@ write64_phoenix(void *priv, uint8_t val)
|
||||
case 0xd7: /* Read MultiKey model numbers */
|
||||
kbc_at_log("ATkbc: Phoenix - Read MultiKey model numbers\n");
|
||||
if (dev->misc_flags & FLAG_PS2) {
|
||||
kbc_at_queue_add(dev, 0x02);
|
||||
kbc_at_queue_add(dev, 0x87);
|
||||
kbc_at_queue_add(dev, 0x02);
|
||||
if (dev->flags & DEVICE_PCI) {
|
||||
kbc_at_queue_add(dev, 0x02);
|
||||
kbc_at_queue_add(dev, 0x87);
|
||||
kbc_at_queue_add(dev, 0x02);
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x99);
|
||||
kbc_at_queue_add(dev, 0x75);
|
||||
kbc_at_queue_add(dev, 0x01);
|
||||
}
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x90);
|
||||
kbc_at_queue_add(dev, 0x88);
|
||||
@@ -2608,6 +2623,20 @@ const device_t keyboard_ps2_ami_device = {
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_ps2_compaq_device = {
|
||||
.name = "PS/2 Keyboard (Compaq)",
|
||||
.internal_name = "keyboard_at_compaq",
|
||||
.flags = DEVICE_KBC,
|
||||
.local = KBC_TYPE_PS2_1 | KBC_VEN_COMPAQ,
|
||||
.init = kbc_at_init,
|
||||
.close = kbc_at_close,
|
||||
.reset = kbc_at_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_ps2_holtek_device = {
|
||||
.name = "PS/2 Keyboard (Holtek)",
|
||||
.internal_name = "keyboard_ps2_holtek",
|
||||
@@ -2775,3 +2804,17 @@ const device_t keyboard_ps2_acer_pci_device = {
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_ps2_phoenix_pci_device = {
|
||||
.name = "PS/2 Keyboard (Phoenix)",
|
||||
.internal_name = "keyboard_ps2_acer_pci",
|
||||
.flags = DEVICE_KBC | DEVICE_PCI,
|
||||
.local = KBC_TYPE_PS2_1 | KBC_VEN_PHOENIX,
|
||||
.init = kbc_at_init,
|
||||
.close = kbc_at_close,
|
||||
.reset = kbc_at_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
@@ -1281,14 +1281,15 @@ machine_at_ninja_init(const machine_t *model)
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
machine_at_common_init_ex(model, 2);
|
||||
device_add(&amstrad_megapc_nvr_device);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x05, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1);
|
||||
pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1);
|
||||
device_add(&keyboard_ps2_intel_ami_pci_device);
|
||||
device_add(&keyboard_ps2_phoenix_device);
|
||||
device_add(&intel_flash_bxt_ami_device);
|
||||
|
||||
device_add(&i420ex_device);
|
||||
|
||||
@@ -194,8 +194,6 @@ win_keyboard_handle(uint32_t scancode, int up, int e0, int e1)
|
||||
it's not an invalid scan code. */
|
||||
if (scancode != 0xFFFF)
|
||||
keyboard_input(!up, scancode);
|
||||
|
||||
main_window->checkFullscreenHotkey();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,8 +368,6 @@ emu_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
else if ((lpKdhs->scanCode == 0x3e) && (lpKdhs->flags & LLKHF_ALTDOWN) &&
|
||||
!(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x49) && bCtrlDown && !(lpKdhs->flags & LLKHF_UP))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode >= 0x5b) && (lpKdhs->scanCode <= 0x5d) && (lpKdhs->flags & LLKHF_EXTENDED))
|
||||
ret = TRUE;
|
||||
else if (inhibit_multimedia_keys
|
||||
|
||||
@@ -674,6 +674,13 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
/* Remove default Shift+F10 handler, which unfocuses keyboard input even with no context menu. */
|
||||
connect(new QShortcut(QKeySequence(Qt::SHIFT + Qt::Key_F10), this), &QShortcut::activated, this, [](){});
|
||||
|
||||
auto windowedShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_PageDown), this);
|
||||
windowedShortcut->setContext(Qt::ShortcutContext::ApplicationShortcut);
|
||||
connect(windowedShortcut, &QShortcut::activated, this, [this] () {
|
||||
if (video_fullscreen)
|
||||
ui->actionFullscreen->trigger();
|
||||
});
|
||||
|
||||
connect(this, &MainWindow::initRendererMonitor, this, &MainWindow::initRendererMonitorSlot);
|
||||
connect(this, &MainWindow::initRendererMonitorForNonQtThread, this, &MainWindow::initRendererMonitorSlot, Qt::BlockingQueuedConnection);
|
||||
connect(this, &MainWindow::destroyRendererMonitor, this, &MainWindow::destroyRendererMonitorSlot);
|
||||
@@ -696,6 +703,22 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
});
|
||||
#endif
|
||||
|
||||
QTimer::singleShot(0, this, [this]() {
|
||||
for (auto curObj : this->menuBar()->children()) {
|
||||
if (qobject_cast<QMenu *>(curObj)) {
|
||||
auto menu = qobject_cast<QMenu *>(curObj);
|
||||
for (auto curObj2 : menu->children()) {
|
||||
if (qobject_cast<QAction *>(curObj2)) {
|
||||
auto action = qobject_cast<QAction *>(curObj2);
|
||||
if (!action->shortcut().isEmpty()) {
|
||||
this->insertAction(nullptr, action);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
actGroup = new QActionGroup(this);
|
||||
actGroup->addAction(ui->actionCursor_Puck);
|
||||
actGroup->addAction(ui->actionPen);
|
||||
@@ -833,6 +856,11 @@ MainWindow::initRendererMonitorSlot(int monitor_index)
|
||||
});
|
||||
secondaryRenderer->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
|
||||
secondaryRenderer->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(monitor_index + 1));
|
||||
secondaryRenderer->setContextMenuPolicy(Qt::PreventContextMenu);
|
||||
|
||||
for (int i = 0; i < this->actions().size(); i++) {
|
||||
secondaryRenderer->addAction(this->actions()[i]);
|
||||
}
|
||||
|
||||
if (vid_resize == 2)
|
||||
secondaryRenderer->setFixedSize(fixed_size_x, fixed_size_y);
|
||||
@@ -1360,18 +1388,9 @@ MainWindow::keyPressEvent(QKeyEvent *event)
|
||||
#endif
|
||||
}
|
||||
|
||||
checkFullscreenHotkey();
|
||||
|
||||
if (keyboard_ismsexit())
|
||||
plat_mouse_capture(0);
|
||||
|
||||
if ((video_fullscreen > 0) && (keyboard_recv_ui(0x1D) || keyboard_recv_ui(0x11D))) {
|
||||
if (keyboard_recv_ui(0x57))
|
||||
ui->actionTake_screenshot->trigger();
|
||||
else if (keyboard_recv_ui(0x58))
|
||||
pc_send_cad();
|
||||
}
|
||||
|
||||
event->accept();
|
||||
}
|
||||
|
||||
@@ -1403,28 +1422,6 @@ MainWindow::keyReleaseEvent(QKeyEvent *event)
|
||||
processKeyboardInput(false, event->nativeScanCode());
|
||||
#endif
|
||||
}
|
||||
|
||||
checkFullscreenHotkey();
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::checkFullscreenHotkey()
|
||||
{
|
||||
if (!fs_off_signal && video_fullscreen && keyboard_isfsexit()) {
|
||||
/* Signal "exit fullscreen mode". */
|
||||
fs_off_signal = true;
|
||||
} else if (fs_off_signal && video_fullscreen && keyboard_isfsexit_up()) {
|
||||
ui->actionFullscreen->trigger();
|
||||
fs_off_signal = false;
|
||||
}
|
||||
|
||||
if (!fs_on_signal && !video_fullscreen && keyboard_isfsenter()) {
|
||||
/* Signal "enter fullscreen mode". */
|
||||
fs_on_signal = true;
|
||||
} else if (fs_on_signal && !video_fullscreen && keyboard_isfsenter_up()) {
|
||||
ui->actionFullscreen->trigger();
|
||||
fs_on_signal = false;
|
||||
}
|
||||
}
|
||||
|
||||
QSize
|
||||
|
||||
@@ -31,7 +31,6 @@ public:
|
||||
void blitToWidget(int x, int y, int w, int h, int monitor_index);
|
||||
QSize getRenderWidgetSize();
|
||||
void setSendKeyboardInput(bool enabled);
|
||||
void checkFullscreenHotkey();
|
||||
void reloadAllRenderers();
|
||||
|
||||
std::array<std::unique_ptr<RendererStack>, 8> renderers;
|
||||
|
||||
@@ -1055,7 +1055,7 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, const int msf, const int type, const int
|
||||
ret = -1;
|
||||
} else {
|
||||
ret = 1;
|
||||
for (int i = 0; (i < num) && (ret > 0); i++) {
|
||||
for (int i = 0; (i < num) && (ret > 0) && (dev->sector_len > 0); i++) {
|
||||
ret = cdrom_readsector_raw(dev->drv, dev->buffer + dev->buffer_pos,
|
||||
dev->sector_pos, msf, type,
|
||||
flags, &temp_len, vendor_type);
|
||||
@@ -1070,7 +1070,11 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, const int msf, const int type, const int
|
||||
|
||||
if ((dev->drv->bus_type != CDROM_BUS_SCSI) &&
|
||||
(scsi_cdrom_current_mode(dev) != 2)) {
|
||||
num = (dev->packet_len / dev->block_len);
|
||||
num = (dev->tf->request_length < dev->block_len) ?
|
||||
dev->block_len : dev->tf->request_length;
|
||||
num = (num / dev->block_len) * dev->block_len;
|
||||
if (num > dev->sector_len)
|
||||
num = dev->sector_len;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -686,7 +686,7 @@ bochs_vbe_pci_read(const int func, const int addr, void *priv)
|
||||
ret = dev->pci_rom_enable & 0x01;
|
||||
break;
|
||||
case 0x32:
|
||||
ret = dev->rom_addr & 0xff;
|
||||
ret = dev->rom_addr & 0xfc;
|
||||
break;
|
||||
case 0x33:
|
||||
ret = (dev->rom_addr & 0xff00) >> 8;
|
||||
@@ -743,6 +743,7 @@ bochs_vbe_pci_write(const int func, const int addr, const uint8_t val, void *pri
|
||||
mem_mapping_disable(&dev->linear_mapping_2);
|
||||
mem_mapping_disable(&dev->linear_mapping);
|
||||
mem_mapping_disable(&dev->svga.mapping);
|
||||
mem_mapping_disable(&dev->bios_rom.mapping);
|
||||
if (dev->pci_conf_status & PCI_COMMAND_IO) {
|
||||
io_sethandler(0x03c0, 0x0020, bochs_vbe_in, NULL, NULL,
|
||||
bochs_vbe_out, NULL, NULL, dev);
|
||||
@@ -751,11 +752,13 @@ bochs_vbe_pci_write(const int func, const int addr, const uint8_t val, void *pri
|
||||
}
|
||||
if (dev->pci_conf_status & PCI_COMMAND_MEM) {
|
||||
mem_mapping_enable(&dev->svga.mapping);
|
||||
if (dev->pci_regs[0x13] != 0x00) {
|
||||
if ((dev->pci_regs[0x13] != 0x00) && (dev->pci_regs[0x13] != 0xff)) {
|
||||
mem_mapping_enable(&dev->linear_mapping);
|
||||
if (dev->pci_regs[0x13] != 0xe0)
|
||||
mem_mapping_enable(&dev->linear_mapping_2);
|
||||
}
|
||||
if (dev->pci_rom_enable && (dev->rom_addr != 0x0000) && (dev->rom_addr < 0xfff8))
|
||||
mem_mapping_set_addr(&dev->bios_rom.mapping, dev->rom_addr << 16, 0x10000);
|
||||
}
|
||||
break;
|
||||
case 0x13:
|
||||
@@ -764,7 +767,7 @@ bochs_vbe_pci_write(const int func, const int addr, const uint8_t val, void *pri
|
||||
mem_mapping_disable(&dev->linear_mapping_2);
|
||||
mem_mapping_disable(&dev->linear_mapping);
|
||||
|
||||
if ((dev->pci_conf_status & PCI_COMMAND_MEM) && (val != 0x00)) {
|
||||
if ((dev->pci_conf_status & PCI_COMMAND_MEM) && (val != 0x00) && (val != 0xff)) {
|
||||
mem_mapping_set_addr(&dev->linear_mapping, val << 24, 0x01000000);
|
||||
if (val != 0xe0)
|
||||
mem_mapping_set_addr(&dev->linear_mapping_2, 0xe0000000, 0x01000000);
|
||||
@@ -776,18 +779,26 @@ bochs_vbe_pci_write(const int func, const int addr, const uint8_t val, void *pri
|
||||
case 0x30:
|
||||
dev->pci_rom_enable = val & 0x01;
|
||||
mem_mapping_disable(&dev->bios_rom.mapping);
|
||||
if (dev->pci_rom_enable)
|
||||
if (dev->pci_rom_enable && (dev->pci_conf_status & PCI_COMMAND_MEM) &&
|
||||
(dev->rom_addr != 0x0000) && (dev->rom_addr < 0xfff8)) {
|
||||
mem_mapping_set_addr(&dev->bios_rom.mapping, dev->rom_addr << 16, 0x10000);
|
||||
}
|
||||
break;
|
||||
case 0x32:
|
||||
dev->rom_addr = (dev->rom_addr & 0xff00) | (val & 0xfc);
|
||||
if (dev->pci_rom_enable)
|
||||
mem_mapping_disable(&dev->bios_rom.mapping);
|
||||
if (dev->pci_rom_enable && (dev->pci_conf_status & PCI_COMMAND_MEM) &&
|
||||
(dev->rom_addr != 0x0000) && (dev->rom_addr < 0xfff8)) {
|
||||
mem_mapping_set_addr(&dev->bios_rom.mapping, dev->rom_addr << 16, 0x10000);
|
||||
}
|
||||
break;
|
||||
case 0x33:
|
||||
dev->rom_addr = (dev->rom_addr & 0x00ff) | (val << 8);
|
||||
if (dev->pci_rom_enable)
|
||||
mem_mapping_disable(&dev->bios_rom.mapping);
|
||||
if (dev->pci_rom_enable && (dev->pci_conf_status & PCI_COMMAND_MEM) &&
|
||||
(dev->rom_addr != 0x0000) && (dev->rom_addr < 0xfff8)) {
|
||||
mem_mapping_set_addr(&dev->bios_rom.mapping, dev->rom_addr << 16, 0x10000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user