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/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"
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"
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
};
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;
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;