From bf4977b20c3ab4f8ef4e9044264085d598be2690 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 11 Jun 2024 03:51:15 +0500 Subject: [PATCH 1/4] mem.c: Remove duplicate definitions (#4524) Fixes building with debug registers for 486+ enabled --- src/mem/mem.c | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/src/mem/mem.c b/src/mem/mem.c index 5fe7f3c29..0e06fbfca 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -164,46 +164,6 @@ mem_log(const char *fmt, ...) # define mem_log(fmt, ...) #endif -#ifdef USE_DEBUG_REGS_486 -/* As below, 1 = exec, 4 = read. */ -int read_type = 4; - -/* Set trap for data address breakpoints - 1 = exec, 2 = write, 4 = read. */ -void -mem_debug_check_addr(uint32_t addr, int flags) -{ - uint32_t bp_addr; - uint32_t bp_mask; - uint32_t len_type_pair; - int bp_enabled; - uint8_t match_flags[4] = { 0, 2, 0, 6 }; - - if (cpu_state.abrt || ((flags == 1) && (cpu_state.eflags & RF_FLAG))) - return; - - if (dr[7] & 0x000000ff) for (uint8_t i = 0; i < 4; i++) { - bp_addr = dr[i]; - bp_enabled = (dr[7] >> (i << 1)) & 0x03; - len_type_pair = (dr[7] >> (16 + (i << 2))) & 0x0f; - bp_mask = ~((len_type_pair >> 2) & 0x03); - - if ((flags & match_flags[len_type_pair & 0x03]) && ((bp_addr & bp_mask) == (addr & bp_mask))) { - /* - From the Intel i386 documemntation: - - (Note that the processor sets Bn regardless of whether Gn or - Ln is set. If more than one breakpoint condition occurs at one time and if - the breakpoint trap occurs due to an enabled condition other than n, Bn may - be set, even though neither Gn nor Ln is set.) - */ - dr[6] |= (1 << i); - if (bp_enabled) - trap |= (read_type == 1) ? 8 : 4; - } - } -} -#endif - int mem_addr_is_ram(uint32_t addr) { From ec0998a0896a53e63b9140fc53c28414ddf6965b Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 11 Jun 2024 03:58:24 +0500 Subject: [PATCH 2/4] Add onboard C&T 69000 video to the ADLink NuPRO-592 (#4525) * Give the ADLink NuPRO-592 the onboard C&T 69000 This turns it into the 591 model, if the internal video is chosen * Use machine_get_vid_device --- src/machine/m_at_socket7.c | 8 ++++++-- src/machine/machine_table.c | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 49ad043e8..d13f0039a 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -869,13 +869,17 @@ machine_at_nupro592_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x0B, PCI_CARD_VIDEO, 3, 4, 1, 2); /* C&T B69000 */ + pci_register_slot(0x0C, PCI_CARD_NETWORK, 4, 1, 2, 3); /* Intel 82559 */ pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); /* PIIX4 */ + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 31a86bd5c..b6ea732af 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11922,7 +11922,7 @@ const machine_t machines[] = { /* 430TX */ /* The BIOS sends KBC command B8, CA, and CB, so it has an AMI KBC firmware. */ { - .name = "[i430TX] ADLink NuPRO-592", + .name = "[i430TX] ADLink NuPRO-591/592", .internal_name = "nupro592", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430TX, @@ -11942,7 +11942,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI, /* Has internal video: C&T B69000 */ + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO, .ram = { .min = 8192, .max = 262144, @@ -11956,7 +11956,7 @@ const machine_t machines[] = { .device = NULL, .fdc_device = NULL, .sio_device = NULL, - .vid_device = NULL, + .vid_device = &chips_69000_onboard_device, .snd_device = NULL, .net_device = NULL }, From eaed7643c0f5e3de0f165803c41a98f16e4a3509 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Tue, 11 Jun 2024 01:29:00 +0200 Subject: [PATCH 3/4] ET4000 RAMDAC break fix. This should fix the black screens when returning to text mode after the GUI. --- src/video/vid_et4000.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index 583487c5f..c223d37ba 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -145,6 +145,7 @@ et4000_in(uint16_t addr, void *priv) case 0x3c9: if (dev->type >= ET4000_TYPE_ISA) return sc1502x_ramdac_in(addr, svga->ramdac, svga); + break; case 0x3cd: /*Banking*/ return dev->banking; From 5b8bf0239913998047798c240363e1c7a7181ef8 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 11 Jun 2024 02:35:38 +0200 Subject: [PATCH 4/4] Fix a bug in dma_advance(). --- src/dma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dma.c b/src/dma.c index 0593d0395..1c23c53c2 100644 --- a/src/dma.c +++ b/src/dma.c @@ -1411,7 +1411,7 @@ dma_retreat(dma_t *dma_c) dma_c->page = dma_c->page_l = (dma_c->ac >> 16) & 0xff; dma_c->page_h = (dma_c->ac >> 24) & 0xff; } else if (as == 2) - dma_c->ac = ((dma_c->ac & 0xfffe0000) & dma_mask) | ((dma_c->ac - as) & 0xffff); + dma_c->ac = ((dma_c->ac & 0xfffe0000) & dma_mask) | ((dma_c->ac - as) & 0x1ffff); else dma_c->ac = ((dma_c->ac & 0xffff0000) & dma_mask) | ((dma_c->ac - as) & 0xffff); } @@ -1427,7 +1427,7 @@ dma_advance(dma_t *dma_c) dma_c->page = dma_c->page_l = (dma_c->ac >> 16) & 0xff; dma_c->page_h = (dma_c->ac >> 24) & 0xff; } else if (as == 2) - dma_c->ac = ((dma_c->ac & 0xfffe0000) & dma_mask) | ((dma_c->ac + as) & 0xffff); + dma_c->ac = ((dma_c->ac & 0xfffe0000) & dma_mask) | ((dma_c->ac + as) & 0x1ffff); else dma_c->ac = ((dma_c->ac & 0xffff0000) & dma_mask) | ((dma_c->ac + as) & 0xffff); }