summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author yz70s <yz70s@users.noreply.github.com>2017-11-19 18:33:53 +0100
committer yz70s <yz70s@users.noreply.github.com>2017-11-19 20:54:57 +0100
commit6b5b4c345ccd02c6d36ffdab0ef512fffa5f67c2 (patch)
treea0b3ec3a81a6d19767f5978621c5926de6df9732
parent5fc8470a00f7d8c482b65db7c0977cc9eed7b519 (diff)
i82439tx: correct error in shadow ram adresses and convert comments to c++ (nw)
-rw-r--r--src/devices/bus/lpci/i82439tx.cpp94
-rw-r--r--src/devices/bus/lpci/i82439tx.h2
2 files changed, 52 insertions, 44 deletions
diff --git a/src/devices/bus/lpci/i82439tx.cpp b/src/devices/bus/lpci/i82439tx.cpp
index 39750f7cd7f..5c943036f8b 100644
--- a/src/devices/bus/lpci/i82439tx.cpp
+++ b/src/devices/bus/lpci/i82439tx.cpp
@@ -9,6 +9,8 @@
#include "emu.h"
#include "i82439tx.h"
+//#define VERBOSE
+
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
@@ -57,37 +59,40 @@ uint32_t i82439tx_device::pci_read(pci_bus_device *pcibus, int function, int off
{
uint32_t result;
+#ifdef VERBOSE
+ logerror("i82439tx_pci_read: read from function %d offset %08X mask %08X\n", function, offset, mem_mask);
+#endif
if (function != 0)
return 0;
switch(offset)
{
- case 0x00: /* vendor/device ID */
+ case 0x00: // vendor/device ID
result = 0x71008086;
break;
- case 0x08: /* revision identification register and class code register*/
+ case 0x08: // revision identification register and class code register
result = 0x06000001;
break;
- case 0x04: /* PCI command register */
+ case 0x04: // PCI command register
case 0x0C:
- case 0x10: /* reserved */
- case 0x14: /* reserved */
- case 0x18: /* reserved */
- case 0x1C: /* reserved */
- case 0x20: /* reserved */
- case 0x24: /* reserved */
- case 0x28: /* reserved */
- case 0x2C: /* reserved */
- case 0x30: /* reserved */
- case 0x34: /* reserved */
- case 0x38: /* reserved */
- case 0x3C: /* reserved */
- case 0x40: /* reserved */
- case 0x44: /* reserved */
- case 0x48: /* reserved */
- case 0x4C: /* reserved */
+ case 0x10: // reserved
+ case 0x14: // reserved
+ case 0x18: // reserved
+ case 0x1C: // reserved
+ case 0x20: // reserved
+ case 0x24: // reserved
+ case 0x28: // reserved
+ case 0x2C: // reserved
+ case 0x30: // reserved
+ case 0x34: // reserved
+ case 0x38: // reserved
+ case 0x3C: // reserved
+ case 0x40: // reserved
+ case 0x44: // reserved
+ case 0x48: // reserved
+ case 0x4C: // reserved
logerror("i82439tx_pci_read(): Unemulated PCI read 0x%02X, returning 0\n", offset);
result = 0;
break;
@@ -148,27 +153,30 @@ uint32_t i82439tx_device::pci_read(pci_bus_device *pcibus, int function, int off
void i82439tx_device::pci_write(pci_bus_device *pcibus, int function, int offset, uint32_t data, uint32_t mem_mask)
{
+#ifdef VERBOSE
+ logerror("i82439tx_pci_write: write to function %d offset %08X mask %08X data %08X\n", function, offset, mem_mask, data);
+#endif
if (function != 0)
return;
switch(offset)
{
- case 0x00: /* vendor/device ID */
- case 0x10: /* reserved */
- case 0x14: /* reserved */
- case 0x18: /* reserved */
- case 0x1C: /* reserved */
- case 0x20: /* reserved */
- case 0x24: /* reserved */
- case 0x28: /* reserved */
- case 0x2C: /* reserved */
- case 0x30: /* reserved */
- case 0x3C: /* reserved */
- case 0x40: /* reserved */
- case 0x44: /* reserved */
- case 0x48: /* reserved */
- case 0x4C: /* reserved */
- /* read only */
+ case 0x00: // vendor/device ID
+ case 0x10: // reserved
+ case 0x14: // reserved
+ case 0x18: // reserved
+ case 0x1C: // reserved
+ case 0x20: // reserved
+ case 0x24: // reserved
+ case 0x28: // reserved
+ case 0x2C: // reserved
+ case 0x30: // reserved
+ case 0x3C: // reserved
+ case 0x40: // reserved
+ case 0x44: // reserved
+ case 0x48: // reserved
+ case 0x4C: // reserved
+ // read only
break;
case 0x58:
@@ -179,7 +187,7 @@ void i82439tx_device::pci_write(pci_bus_device *pcibus, int function, int offset
if ((mem_mask & 0x00f00000))
i82439tx_configure_memory(data >> 20, 0xc4000, 0xc7fff);
if ((mem_mask & 0x0f000000))
- i82439tx_configure_memory(data >> 24, 0xc8000, 0xccfff);
+ i82439tx_configure_memory(data >> 24, 0xc8000, 0xcbfff);
if ((mem_mask & 0xf0000000))
i82439tx_configure_memory(data >> 28, 0xcc000, 0xcffff);
COMBINE_DATA(&m_regs[(offset - 0x50) / 4]);
@@ -199,13 +207,13 @@ void i82439tx_device::pci_write(pci_bus_device *pcibus, int function, int offset
if ((mem_mask & 0x00f00000))
i82439tx_configure_memory(data >> 20, 0xe4000, 0xe7fff);
if ((mem_mask & 0x0f000000))
- i82439tx_configure_memory(data >> 24, 0xe8000, 0xecfff);
+ i82439tx_configure_memory(data >> 24, 0xe8000, 0xebfff);
if ((mem_mask & 0xf0000000))
i82439tx_configure_memory(data >> 28, 0xec000, 0xeffff);
COMBINE_DATA(&m_regs[(offset - 0x50) / 4]);
break;
- case 0x04: /* PCI command register */
+ case 0x04: // PCI command register
case 0x0C:
logerror("i82439tx_pci_write(): Unemulated PCI write 0x%02X = 0x%04X\n", offset, data);
break;
@@ -268,16 +276,16 @@ void i82439tx_device::pci_write(pci_bus_device *pcibus, int function, int offset
void i82439tx_device::device_start()
{
northbridge_device::device_start();
- /* get address space we are working on */
+ // get address space we are working on
device_t *cpu = machine().device(m_cpu_tag);
assert(cpu != nullptr);
m_space = &cpu->memory().space(AS_PROGRAM);
- /* get rom region */
+ // get rom region
m_rom = machine().root_device().memregion(m_region_tag)->base();
- /* setup save states */
+ // setup save states
save_item(NAME(m_regs));
save_item(NAME(m_bios_ram));
}
@@ -289,7 +297,7 @@ void i82439tx_device::device_start()
void i82439tx_device::device_reset()
{
northbridge_device::device_reset();
- /* setup initial values */
+ // setup initial values
m_regs[0x00] = 0x14020000;
m_regs[0x01] = 0x01520000;
m_regs[0x02] = 0x00000000;
@@ -301,7 +309,7 @@ void i82439tx_device::device_reset()
memset(m_bios_ram, 0, sizeof(m_bios_ram));
- /* configure initial memory state */
+ // configure initial memory state
i82439tx_configure_memory(0, 0xf0000, 0xfffff);
i82439tx_configure_memory(0, 0xc0000, 0xc3fff);
i82439tx_configure_memory(0, 0xc4000, 0xc7fff);
diff --git a/src/devices/bus/lpci/i82439tx.h b/src/devices/bus/lpci/i82439tx.h
index e94b95629c0..8853b9b96a6 100644
--- a/src/devices/bus/lpci/i82439tx.h
+++ b/src/devices/bus/lpci/i82439tx.h
@@ -50,7 +50,7 @@ private:
address_space *m_space;
uint8_t *m_rom;
- uint32_t m_regs[8];
+ uint32_t m_regs[8*256];
uint32_t m_bios_ram[0x40000 / 4];
};