From 036c6cb101fd2b9eeb07c841aec9698a5f6ee32b Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 30 Aug 2023 18:11:15 +0200 Subject: [PATCH 1/5] Fixed the PCI device type for the 450kx Memory Controller. --- src/machine/m_at_socket8.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index c1c95f197..c8e507335 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -54,14 +54,14 @@ machine_at_p6rp4_init(const machine_t *model) device_add(&p6rp4_nvr_device); pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x14, PCI_CARD_NORTHBRIDGE_SEC, 0, 0, 0, 0); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i450kx_device); device_add(&sio_zb_device); device_add(&ide_cmd646_device); From 07af166d2fe7ffb3994a64eacee14d674dbe6874 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 26 Sep 2023 04:51:59 -0400 Subject: [PATCH 2/5] Fix a build error on haiku in ini.c --- src/ini.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ini.c b/src/ini.c index 604c3d5eb..35c7504eb 100644 --- a/src/ini.c +++ b/src/ini.c @@ -348,7 +348,7 @@ ini_read(const char *fn) while (1) { memset(buff, 0x00, sizeof(buff)); #ifdef __HAIKU__ - ini_fgetws(buff, sizeof_w(buff), f); + ini_fgetws(buff, sizeof_w(buff), fp); #else (void) !fgetws(buff, sizeof_w(buff), fp); #endif From 9b9dc6cdccc439a61bbca1fc9864d5519d91d829 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 26 Sep 2023 05:00:30 -0400 Subject: [PATCH 3/5] Removed escaped whitespace at end of line. --- src/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index ea314997a..f0b48dc1a 100644 --- a/src/config.c +++ b/src/config.c @@ -1805,7 +1805,7 @@ load_other_removable_devices(void) if (p[0] != 0x00) { if (path_abs(p)) { if (strlen(p) > 511) - fatal("load_other_removable_devices(): strlen(p) > 511 (mo_drives[%i].image_path)\n", + fatal("load_other_removable_devices(): strlen(p) > 511 (mo_drives[%i].image_path)\n", c); else strncpy(mo_drives[c].image_path, p, 511); From 8bdecb1f59fd7f53359c77938d33af23684a18bf Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 28 Sep 2023 00:20:15 +0200 Subject: [PATCH 4/5] Some PIC and ACPI IRQ fixes. --- src/acpi.c | 4 ++-- src/pic.c | 25 ++++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/acpi.c b/src/acpi.c index 614deaa8c..fd38bae29 100644 --- a/src/acpi.c +++ b/src/acpi.c @@ -128,14 +128,14 @@ acpi_update_irq(acpi_t *dev) else if (dev->irq_mode == 2) pci_set_mirq(5, dev->mirq_is_level, &dev->irq_state); else - pci_set_mirq(PCI_DIRQ_BASE | dev->irq_line, 1, &dev->irq_state); + picintlevel(1 << dev->irq_line, &dev->irq_state); } else { if (dev->irq_mode == 1) pci_clear_irq(dev->slot, dev->irq_pin, &dev->irq_state); else if (dev->irq_mode == 2) pci_clear_mirq(5, dev->mirq_is_level, &dev->irq_state); else - pci_clear_mirq(PCI_DIRQ_BASE | dev->irq_line, 1, &dev->irq_state); + picintclevel(1 << dev->irq_line, &dev->irq_state); } acpi_timer_update(dev, (dev->regs.pmen & TMROF_EN) && !(dev->regs.pmsts & TMROF_STS)); diff --git a/src/pic.c b/src/pic.c index c01053268..83b5b785a 100644 --- a/src/pic.c +++ b/src/pic.c @@ -630,6 +630,7 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) int raise; uint8_t b; uint8_t slaves = 0; + uint16_t lines = 0x0000; /* Make sure to ignore all slave IRQ's, and in case of AT+, translate IRQ 2 to IRQ 9. */ @@ -659,7 +660,7 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if (num & 0x0100) acpi_rtc_status = !!set; - if (set) { + if (set) { if (smi_irq_mask & num) { smi_raise(); smi_irq_status |= num; @@ -709,8 +710,12 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if (level) { for (uint8_t i = 0; i < 8; i++) { b = (uint8_t) (1 << i); - if (((num >> 8) & b) && ((!!*irq_state) != !!set)) - pic2.lines[i]--; + if ((num >> 8) & b) { + if ((!!*irq_state) != !!set) + pic2.lines[i]--; + if (pic2.lines[i] == 0) + lines |= ((uint16_t) b << 8); + } } if ((!!*irq_state) != !!set) @@ -721,15 +726,20 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if ((num & 0x1000) && mouse_latch) latched_irqs &= 0xefff; - pic2.irr &= ~(num >> 8); + if (!level || lines) + pic2.irr &= ~(num >> 8); } if (num & 0x00ff) { if (level) { for (uint8_t i = 0; i < 8; i++) { b = (uint8_t) (1 << i); - if ((num & b) && ((!!*irq_state) != !!set)) - pic.lines[i]--; + if (num & b) { + if ((!!*irq_state) != !!set) + pic.lines[i]--; + if (pic.lines[i] == 0) + lines |= ((uint16_t) b << 8); + } } if ((!!*irq_state) != !!set) @@ -740,7 +750,8 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if (kbd_latch && (num & 0x0002)) latched_irqs &= 0xfffd; - pic.irr &= ~(num & 0x00ff); + if (!level || lines) + pic.irr &= ~(num & 0x00ff); } } From d7bc7b302d62ffb5cde5b08fe8cb6d5ecbd5b8fb Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 28 Sep 2023 01:15:07 +0200 Subject: [PATCH 5/5] Always clear IRR on clear if the specified interrupt is not set to level-triggered on the PIC or ELCR. --- src/pic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pic.c b/src/pic.c index 83b5b785a..490468410 100644 --- a/src/pic.c +++ b/src/pic.c @@ -713,7 +713,7 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if ((num >> 8) & b) { if ((!!*irq_state) != !!set) pic2.lines[i]--; - if (pic2.lines[i] == 0) + if (!pic_level_triggered(&pic2, i) || (pic2.lines[i] == 0)) lines |= ((uint16_t) b << 8); } } @@ -737,7 +737,7 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) if (num & b) { if ((!!*irq_state) != !!set) pic.lines[i]--; - if (pic.lines[i] == 0) + if (!pic_level_triggered(&pic, i) || (pic.lines[i] == 0)) lines |= ((uint16_t) b << 8); } }