From d75700d5178e454973f4f4a41daeca7a03acbfd4 Mon Sep 17 00:00:00 2001
From: Nelson Kerber Hennemann Filho
<87081197+nelsonhef@users.noreply.github.com>
Date: Mon, 11 Aug 2025 11:06:42 -0300
Subject: [PATCH 1/5] Update 86box.pot
Fix missing tags
---
src/qt/languages/86box.pot | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot
index 4dc411f09..54a6bb204 100644
--- a/src/qt/languages/86box.pot
+++ b/src/qt/languages/86box.pot
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
From 6b8680c5a0aeffc7dcd6a56aa485ab8361232c8c Mon Sep 17 00:00:00 2001
From: nelsonhef
Date: Mon, 11 Aug 2025 11:18:58 -0300
Subject: [PATCH 2/5] Merge updated POT to PO files
---
src/qt/languages/ca-ES.po | 2 +-
src/qt/languages/cs-CZ.po | 2 +-
src/qt/languages/de-DE.po | 2 +-
src/qt/languages/es-ES.po | 2 +-
src/qt/languages/fi-FI.po | 2 +-
src/qt/languages/fr-FR.po | 2 +-
src/qt/languages/hr-HR.po | 2 +-
src/qt/languages/hu-HU.po | 2 +-
src/qt/languages/it-IT.po | 2 +-
src/qt/languages/ja-JP.po | 2 +-
src/qt/languages/ko-KR.po | 2 +-
src/qt/languages/nl-NL.po | 2 +-
src/qt/languages/pl-PL.po | 2 +-
src/qt/languages/pt-BR.po | 4 ++--
src/qt/languages/pt-PT.po | 2 +-
src/qt/languages/ru-RU.po | 2 +-
src/qt/languages/sk-SK.po | 2 +-
src/qt/languages/sl-SI.po | 2 +-
src/qt/languages/sv-SE.po | 2 +-
src/qt/languages/tr-TR.po | 2 +-
src/qt/languages/uk-UA.po | 2 +-
src/qt/languages/vi-VN.po | 2 +-
src/qt/languages/zh-CN.po | 2 +-
src/qt/languages/zh-TW.po | 2 +-
24 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/src/qt/languages/ca-ES.po b/src/qt/languages/ca-ES.po
index 8f43fb946..08f17e20b 100644
--- a/src/qt/languages/ca-ES.po
+++ b/src/qt/languages/ca-ES.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po
index 48ae6df56..b8184562f 100644
--- a/src/qt/languages/cs-CZ.po
+++ b/src/qt/languages/cs-CZ.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po
index 4b37d9666..e88d5c8af 100644
--- a/src/qt/languages/de-DE.po
+++ b/src/qt/languages/de-DE.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po
index ca65b3695..b99d96819 100644
--- a/src/qt/languages/es-ES.po
+++ b/src/qt/languages/es-ES.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po
index 01ccac09e..ab630dcc0 100644
--- a/src/qt/languages/fi-FI.po
+++ b/src/qt/languages/fi-FI.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po
index 04a9c1c10..bf8f59237 100644
--- a/src/qt/languages/fr-FR.po
+++ b/src/qt/languages/fr-FR.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po
index b783a9ab5..694c61ad2 100644
--- a/src/qt/languages/hr-HR.po
+++ b/src/qt/languages/hr-HR.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po
index 7e2260029..84889a336 100644
--- a/src/qt/languages/hu-HU.po
+++ b/src/qt/languages/hu-HU.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po
index d5cbf918e..2ce8571a8 100644
--- a/src/qt/languages/it-IT.po
+++ b/src/qt/languages/it-IT.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po
index 259e134be..47731d6c9 100644
--- a/src/qt/languages/ja-JP.po
+++ b/src/qt/languages/ja-JP.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po
index 457f89d0e..29b19f683 100644
--- a/src/qt/languages/ko-KR.po
+++ b/src/qt/languages/ko-KR.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po
index 378427d85..b24895bf2 100644
--- a/src/qt/languages/nl-NL.po
+++ b/src/qt/languages/nl-NL.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po
index cf80e50dd..9e6cac667 100644
--- a/src/qt/languages/pl-PL.po
+++ b/src/qt/languages/pl-PL.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po
index ed2c13f72..94fde8f9e 100644
--- a/src/qt/languages/pt-BR.po
+++ b/src/qt/languages/pt-BR.po
@@ -1278,8 +1278,8 @@ msgstr "Build"
msgid "Version"
msgstr "Versão"
-msgid "An update to 86Box is available!"
-msgstr "Uma atualização do 86Box está disponível!"
+msgid "An update to 86Box is available!"
+msgstr "Uma atualização do 86Box está disponível!"
msgid "Warning"
msgstr "Aviso"
diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po
index 5bf32c78f..df927a72e 100644
--- a/src/qt/languages/pt-PT.po
+++ b/src/qt/languages/pt-PT.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po
index 91eedb053..305b99068 100644
--- a/src/qt/languages/ru-RU.po
+++ b/src/qt/languages/ru-RU.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po
index 367c5f06a..5aa01a455 100644
--- a/src/qt/languages/sk-SK.po
+++ b/src/qt/languages/sk-SK.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po
index 3e1f1c977..593198ae8 100644
--- a/src/qt/languages/sl-SI.po
+++ b/src/qt/languages/sl-SI.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po
index a311d9947..c423558d6 100644
--- a/src/qt/languages/sv-SE.po
+++ b/src/qt/languages/sv-SE.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po
index 110637acb..986689463 100644
--- a/src/qt/languages/tr-TR.po
+++ b/src/qt/languages/tr-TR.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po
index 6caa65ca8..799fa07b7 100644
--- a/src/qt/languages/uk-UA.po
+++ b/src/qt/languages/uk-UA.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po
index b823f8530..c603fa8fe 100644
--- a/src/qt/languages/vi-VN.po
+++ b/src/qt/languages/vi-VN.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po
index 6b79358ab..74001fe1e 100644
--- a/src/qt/languages/zh-CN.po
+++ b/src/qt/languages/zh-CN.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po
index c55a7d34f..a57f8f30b 100644
--- a/src/qt/languages/zh-TW.po
+++ b/src/qt/languages/zh-TW.po
@@ -1278,7 +1278,7 @@ msgstr ""
msgid "Version"
msgstr ""
-msgid "An update to 86Box is available!"
+msgid "An update to 86Box is available!"
msgstr ""
msgid "Warning"
From eedbccd974af71680a69ad2e0235f7721241061e Mon Sep 17 00:00:00 2001
From: Cacodemon345
Date: Tue, 12 Aug 2025 01:09:24 +0600
Subject: [PATCH 3/5] Several Clang warning fixes
---
src/sio/sio_fdc37c669.c | 2 +-
src/sio/sio_gm82c803ab.c | 2 +-
src/sio/sio_gm82c803c.c | 2 +-
src/sio/sio_pc87307.c | 2 +-
src/sio/sio_pc87309.c | 2 +-
src/sio/sio_pc873xx.c | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c
index d49dd9d30..6a8c73563 100644
--- a/src/sio/sio_fdc37c669.c
+++ b/src/sio/sio_fdc37c669.c
@@ -39,7 +39,7 @@ typedef struct fdc37c669_t {
uint8_t tries;
uint8_t has_ide;
uint8_t dma_map[4];
- uint8_t irq_map[10];
+ uint8_t irq_map[16];
uint8_t regs[256];
int locked;
int rw_locked;
diff --git a/src/sio/sio_gm82c803ab.c b/src/sio/sio_gm82c803ab.c
index 8dca4ae6c..8f7749494 100644
--- a/src/sio/sio_gm82c803ab.c
+++ b/src/sio/sio_gm82c803ab.c
@@ -35,7 +35,7 @@ typedef struct gm82c803ab_t {
uint8_t type;
uint8_t tries;
uint8_t has_ide;
- uint8_t regs[16];
+ uint8_t regs[256];
int cur_reg;
int com3_addr;
int com4_addr;
diff --git a/src/sio/sio_gm82c803c.c b/src/sio/sio_gm82c803c.c
index eb54b6661..91c03b369 100644
--- a/src/sio/sio_gm82c803c.c
+++ b/src/sio/sio_gm82c803c.c
@@ -35,7 +35,7 @@ typedef struct gm82c803c_t {
uint8_t has_ide;
uint8_t dma_map[4];
uint8_t irq_map[10];
- uint8_t regs[16];
+ uint8_t regs[256];
int cur_reg;
fdc_t *fdc;
serial_t *uart[2];
diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c
index e18d94428..48c2aeb27 100644
--- a/src/sio/sio_pc87307.c
+++ b/src/sio/sio_pc87307.c
@@ -42,7 +42,7 @@ typedef struct pc87307_t {
uint8_t baddr;
uint8_t pm_idx;
uint8_t regs[48];
- uint8_t ld_regs[256][208];
+ uint8_t ld_regs[256][256];
uint8_t pcregs[16];
uint8_t gpio[2][8];
uint8_t pm[8];
diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c
index 9b50f8181..a6e4a5fa3 100644
--- a/src/sio/sio_pc87309.c
+++ b/src/sio/sio_pc87309.c
@@ -42,7 +42,7 @@ typedef struct pc87309_t {
uint8_t baddr;
uint8_t pm_idx;
uint8_t regs[48];
- uint8_t ld_regs[256][208];
+ uint8_t ld_regs[256][256];
uint8_t pm[8];
uint16_t superio_base;
uint16_t pm_base;
diff --git a/src/sio/sio_pc873xx.c b/src/sio/sio_pc873xx.c
index bec747ed2..72c156426 100644
--- a/src/sio/sio_pc873xx.c
+++ b/src/sio/sio_pc873xx.c
@@ -39,7 +39,7 @@ typedef struct pc873xx_t {
uint8_t tries;
uint8_t has_ide;
uint8_t fdc_on;
- uint8_t regs[15];
+ uint8_t regs[256];
uint16_t base_addr;
int cur_reg;
int max_reg;
From d60602dd5dbf89d44db82c46d77ac0137c58e56e Mon Sep 17 00:00:00 2001
From: TC1995
Date: Mon, 11 Aug 2025 22:48:30 +0200
Subject: [PATCH 4/5] 53c9x changes of the night (August 11th, 2025)
1. Add the original AMD 53c974 (AMD bios only and revision 0x00 compared to the A revision which is 0x10 in the PCI regs) as well as correcting the SCSI bus reset when prompted (ESP CMD 0x03), the latter fixes DawiControl 53c974 drivers on win9x.
2. Check if DMA length is not 0 for DMA transfers.
3. More logs for possible problem diagnostics.
---
src/include/86box/scsi_pcscsi.h | 1 +
src/scsi/scsi.c | 1 +
src/scsi/scsi_pcscsi.c | 104 ++++++++++++++++++++++++++------
3 files changed, 89 insertions(+), 17 deletions(-)
diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h
index 8547aba25..c4dbedeff 100644
--- a/src/include/86box/scsi_pcscsi.h
+++ b/src/include/86box/scsi_pcscsi.h
@@ -26,6 +26,7 @@
#define SCSI_PCSCSI_H
extern const device_t am53c974_pci_device;
+extern const device_t am53c974a_pci_device;
extern const device_t dc390_pci_device;
extern const device_t ncr53c90a_mca_device;
diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c
index a2bdc92ce..a02f4e7a5 100644
--- a/src/scsi/scsi.c
+++ b/src/scsi/scsi.c
@@ -84,6 +84,7 @@ static SCSI_CARD scsi_cards[] = {
{ &buslogic_445c_device, },
/* PCI */
{ &am53c974_pci_device, },
+ { &am53c974a_pci_device, },
{ &buslogic_958d_pci_device, },
{ &ncr53c810_pci_device, },
{ &ncr53c815_pci_device, },
diff --git a/src/scsi/scsi_pcscsi.c b/src/scsi/scsi_pcscsi.c
index b0563020b..f91eef683 100644
--- a/src/scsi/scsi_pcscsi.c
+++ b/src/scsi/scsi_pcscsi.c
@@ -141,6 +141,7 @@ enum ESPASCMode {
#define CFG1_RESREPT 0x40
+#define TCHI_ESP100A 0x01
#define TCHI_FAS100A 0x04
#define TCHI_AM53C974 0x12
@@ -666,6 +667,7 @@ esp_hard_reset(esp_t *dev)
dev->tchi_written = 0;
dev->asc_mode = ESP_ASC_MODE_DIS;
dev->rregs[ESP_CFG1] = dev->mca ? dev->HostID : 7;
+ dev->sbac = 1 << 19;
esp_log("ESP Reset\n");
@@ -716,7 +718,7 @@ esp_do_dma(esp_t *dev)
len = esp_get_tc(dev);
- esp_log("ESP SCSI Actual DMA len=%d, cfg3=%02x.\n", len, dev->rregs[ESP_CFG3]);
+ esp_log("ESP SCSI Actual DMA len=%d, cfg3=%02x, phase=%x.\n", len, dev->rregs[ESP_CFG3], esp_get_phase(dev));
switch (esp_get_phase(dev)) {
case STAT_MO:
@@ -1316,6 +1318,7 @@ handle_s_without_atn(void *priv)
if (esp_select(dev) < 0)
return;
+ esp_log("Selection without ATN.\n");
esp_set_phase(dev, STAT_CD);
dev->cmdfifo_cdb_offset = 0;
@@ -1333,6 +1336,7 @@ handle_satn(void *priv)
if (esp_select(dev) < 0)
return;
+ esp_log("Selection with ATN.\n");
esp_set_phase(dev, STAT_MO);
if (dev->dma)
@@ -1434,12 +1438,17 @@ esp_reg_read(esp_t *dev, uint32_t saddr)
esp_log("Read Interrupt=%02x (old).\n", ret);
break;
case ESP_TCHI: /* Return the unique id if the value has never been written */
- if (!dev->mca && !dev->tchi_written)
- ret = TCHI_AM53C974;
- else
- ret = dev->rregs[ESP_TCHI];
+ if (!dev->tchi_written) {
+ if (dev->mca)
+ ret = TCHI_ESP100A;
+ else
+ ret = TCHI_AM53C974;
- esp_log("Read TCHI Register=%02x.\n", ret);
+ esp_log("ChipID=%02x.\n", ret);
+ } else {
+ ret = dev->rregs[ESP_TCHI];
+ esp_log("Read TCHI Register=%02x.\n", ret);
+ }
break;
case ESP_RFLAGS:
ret = fifo8_num_used(&dev->fifo);
@@ -1525,6 +1534,12 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val)
break;
case CMD_BUSRESET:
esp_log("ESP Bus Reset val=%02x.\n", (dev->rregs[ESP_CFG1] & CFG1_RESREPT));
+ if (dev->mca) {
+ esp_lower_irq(dev);
+ esp_hard_reset(dev);
+ } else
+ esp_pci_soft_reset(dev);
+
for (uint8_t i = 0; i < 16; i++) {
scsi_device_reset(&scsi_devices[dev->bus][i]);
}
@@ -1635,6 +1650,7 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir)
if (dev->dma_regs[DMA_WBC] < len)
len = dev->dma_regs[DMA_WBC];
+ esp_log("DMA Length=%d.\n", len);
if (dev->dma_regs[DMA_CMD] & DMA_CMD_MDL) {
if (len) {
dma_bm_read(dev->dma_regs[DMA_WMAC], (uint8_t *)&DMAPtr, 4, 4);
@@ -1681,16 +1697,18 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir)
}
}
} else {
- addr = dev->dma_regs[DMA_WAC];
+ if (len) {
+ addr = dev->dma_regs[DMA_WAC];
- if (expected_dir)
- dma_bm_write(addr, buf, len, 4);
- else
- dma_bm_read(addr, buf, len, 4);
+ if (expected_dir)
+ dma_bm_write(addr, buf, len, 4);
+ else
+ dma_bm_read(addr, buf, len, 4);
- /* update status registers */
- dev->dma_regs[DMA_WBC] -= len;
- dev->dma_regs[DMA_WAC] += len;
+ /* update status registers */
+ dev->dma_regs[DMA_WBC] -= len;
+ dev->dma_regs[DMA_WAC] += len;
+ }
}
esp_log("Finished count=%d.\n", dev->dma_regs[DMA_WBC]);
@@ -2184,7 +2202,7 @@ esp_pci_read(UNUSED(int func), int addr, void *priv)
case 0x07:
return esp_pci_regs[0x07] | 0x02;
case 0x08:
- return 0x10; /*Revision ID*/
+ return (dev->local == 1) ? 0 : 0x10; /*Revision ID*/
case 0x09:
return 0; /*Programming interface*/
case 0x0A:
@@ -2363,7 +2381,7 @@ esp_pci_reset(void *priv)
memcpy(dev, &reset_state, sizeof(esp_t));
- dev->sbac = 1 << 19;
+ esp_pci_soft_reset(dev);
}
static void *
@@ -2650,6 +2668,44 @@ static const device_config_t bios_enable_config[] = {
// clang-format on
};
+static const device_config_t am53c974_bios_enable_config[] = {
+ // clang-format off
+ {
+ .name = "bios_rev",
+ .description = "BIOS Revision",
+ .type = CONFIG_BIOS,
+ .default_string = "v3_01_amd",
+ .default_int = 0,
+ .file_filter = NULL,
+ .spinner = { 0 },
+ .bios = {
+ {
+ .name = "Version 3.01 (AMD)",
+ .internal_name = "v3_01_amd",
+ .bios_type = BIOS_NORMAL,
+ .files_no = 1,
+ .local = 0,
+ .size = 16384,
+ .files = { AM53C974_3_01_AMD_ROM, "" }
+ },
+ { .files_no = 0 }
+ },
+ },
+ {
+ .name = "bios",
+ .description = "Enable BIOS",
+ .type = CONFIG_BINARY,
+ .default_string = NULL,
+ .default_int = 0,
+ .file_filter = NULL,
+ .spinner = { 0 },
+ .selection = { { 0 } },
+ .bios = { { 0 } }
+ },
+ { .name = "", .description = "", .type = CONFIG_END }
+ // clang-format on
+};
+
static const device_config_t am53c974a_bios_enable_config[] = {
// clang-format off
{
@@ -2739,7 +2795,7 @@ const device_t dc390_pci_device = {
};
const device_t am53c974_pci_device = {
- .name = "AMD 53c974A PCI",
+ .name = "AMD 53c974 PCI",
.internal_name = "am53c974",
.flags = DEVICE_PCI,
.local = 1,
@@ -2749,6 +2805,20 @@ const device_t am53c974_pci_device = {
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
+ .config = am53c974_bios_enable_config
+};
+
+const device_t am53c974a_pci_device = {
+ .name = "AMD 53c974A PCI",
+ .internal_name = "am53c974a",
+ .flags = DEVICE_PCI,
+ .local = 2,
+ .init = dc390_init,
+ .close = esp_close,
+ .reset = esp_pci_reset,
+ .available = NULL,
+ .speed_changed = NULL,
+ .force_redraw = NULL,
.config = am53c974a_bios_enable_config
};
From 9b9f1a261056dbb288210583768bc6b99d9af1fc Mon Sep 17 00:00:00 2001
From: TC1995
Date: Mon, 11 Aug 2025 22:55:47 +0200
Subject: [PATCH 5/5] 8514/A (and XGA) compatible refresh rate fixes.
Correct the refresh rates of the 8514/A compatibles and XGA cards to match their real world rates.
---
src/video/vid_ati_mach8.c | 46 ++++++++++++++++++++-------------------
src/video/vid_svga.c | 11 +++++-----
2 files changed, 30 insertions(+), 27 deletions(-)
diff --git a/src/video/vid_ati_mach8.c b/src/video/vid_ati_mach8.c
index 32b466740..45a69ffab 100644
--- a/src/video/vid_ati_mach8.c
+++ b/src/video/vid_ati_mach8.c
@@ -2928,10 +2928,12 @@ mach_recalctimings(svga_t *svga)
dev->h_disp_time = dev->hdisp >> 3;
- svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
+ svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen) / 2;
if (mach->accel.clock_sel & 0x40)
svga->clock_8514 *= 2;
+ mach_log("8514/A clock sel=%x, divide reg ibm=%02x, divide reg vga=%02x.\n", clock_sel, mach->accel.clock_sel & 0x40, mach->regs[0xb8] & 0xc0);
+
if (dev->interlace)
dev->dispend >>= 1;
@@ -3060,29 +3062,29 @@ mach_recalctimings(svga_t *svga)
if (!svga->scrblank && (svga->crtc[0x17] & 0x80) && svga->attr_palette_enable) {
mach_log("GDCREG5=%02x, ATTR10=%02x, ATI B0 bit 5=%02x, ON=%d.\n",
svga->gdcreg[5] & 0x60, svga->attrregs[0x10] & 0x40, mach->regs[0xb0] & 0x20, dev->on);
+ svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
+ mach_log("VGA clock sel=%x, divide reg=%02x.\n", clock_sel, mach->regs[0xb8] & 0xc0);
+ if (ATI_MACH32) {
+ if (mach->regs[0xb8] & 0x40)
+ svga->clock *= 2;
+ } else {
+ switch (mach->regs[0xb8] & 0xc0) {
+ case 0x40:
+ svga->clock *= 2;
+ break;
+ case 0x80:
+ svga->clock *= 3;
+ break;
+ case 0xc0:
+ svga->clock *= 4;
+ break;
+
+ default:
+ break;
+ }
+ }
if ((svga->gdcreg[6] & 0x01) || (svga->attrregs[0x10] & 0x01)) {
if ((svga->gdcreg[5] & 0x40) || (svga->attrregs[0x10] & 0x40) || (mach->regs[0xb0] & 0x20)) {
- svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
- mach_log("VGA clock=%02x.\n", mach->regs[0xa7] & 0x80);
- if (ATI_MACH32) {
- if (mach->regs[0xb8] & 0x40)
- svga->clock *= 2;
- } else {
- switch (mach->regs[0xb8] & 0xc0) {
- case 0x40:
- svga->clock *= 2;
- break;
- case 0x80:
- svga->clock *= 3;
- break;
- case 0xc0:
- svga->clock *= 4;
- break;
-
- default:
- break;
- }
- }
svga->map8 = svga->pallook;
mach_log("Lowres=%x, seqreg[1]bit3=%x.\n", svga->lowres, svga->seqregs[1] & 8);
if (svga->lowres)
diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c
index 113a8984f..caed7113f 100644
--- a/src/video/vid_svga.c
+++ b/src/video/vid_svga.c
@@ -799,9 +799,10 @@ svga_recalctimings(svga_t *svga)
if ((svga->bpp <= 8) || ((svga->gdcreg[5] & 0x60) <= 0x20)) {
if ((svga->gdcreg[5] & 0x60) == 0x00) {
- if (svga->seqregs[1] & 8) /*Low res (320)*/
+ if (svga->seqregs[1] & 8) { /*Low res (320)*/
svga->render = svga_render_4bpp_lowres;
- else
+ svga_log("4 bpp low res.\n");
+ } else
svga->render = svga_render_4bpp_highres;
} else if ((svga->gdcreg[5] & 0x60) == 0x20) {
if (svga->seqregs[1] & 8) { /*Low res (320)*/
@@ -1045,11 +1046,11 @@ svga_recalctimings(svga_t *svga)
crtcconst = svga->clock * svga->char_width;
if (ibm8514_active && (svga->dev8514 != NULL)) {
if (dev->on)
- crtcconst8514 = svga->clock_8514;
+ crtcconst8514 = svga->clock_8514 * 8;
}
if (xga_active && (svga->xga != NULL)) {
if (xga->on)
- crtcconst_xga = svga->clock_xga;
+ crtcconst_xga = svga->clock_xga * svga->char_width;
}
#ifdef ENABLE_SVGA_LOG
@@ -1093,7 +1094,6 @@ svga_recalctimings(svga_t *svga)
if (dev->on) {
disptime8514 = dev->h_total;
_dispontime8514 = dev->h_disp_time;
- svga_log("HTOTAL=%d, HDISP=%d.\n", dev->h_total, dev->h_disp);
}
}
@@ -1135,6 +1135,7 @@ svga_recalctimings(svga_t *svga)
case 1: /*Plus 8514/A*/
if (dev->on) {
_dispofftime8514 = disptime8514 - _dispontime8514;
+ svga_log("DISPTIME8514=%lf, off=%lf, DISPONTIME8514=%lf, CRTCCONST8514=%lf.\n", disptime8514, _dispofftime8514, _dispontime8514, crtcconst8514);
_dispontime8514 *= crtcconst8514;
_dispofftime8514 *= crtcconst8514;