summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine
diff options
context:
space:
mode:
author mahlemiut <mahlemiut@users.noreply.github.com>2012-08-26 00:15:06 +0000
committer mahlemiut <mahlemiut@users.noreply.github.com>2012-08-26 00:15:06 +0000
commit390362ac6e885fdc89039a617bd02461afee3fdb (patch)
treea020629b936c9cfcabfdb9f8ed586b4081bf3693 /src/mess/machine
parent5895fb0137a085a3886ff5245b38a9a78d96de1b (diff)
(MESS) svga_s3: converted to 16-bit ISA device. The S3 chipsets have 16-bit wide registers, and can only be used on AT systems. (no whatsnew)
Diffstat (limited to 'src/mess/machine')
-rw-r--r--src/mess/machine/isa.c28
-rw-r--r--src/mess/machine/isa.h1
2 files changed, 29 insertions, 0 deletions
diff --git a/src/mess/machine/isa.c b/src/mess/machine/isa.c
index 23c9af388d3..e4911eb48c6 100644
--- a/src/mess/machine/isa.c
+++ b/src/mess/machine/isa.c
@@ -599,6 +599,34 @@ void isa16_device::install16_device(offs_t start, offs_t end, offs_t mask, offs_
}
}
+void isa16_device::install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_space_func rhandler, const char* rhandler_name, write16_space_func whandler, const char *whandler_name)
+{
+ int buswidth = m_maincpu->memory().space_config(AS_PROGRAM)->m_databus_width;
+ switch(buswidth)
+ {
+ case 16:
+ m_maincpu->memory().space(AS_IO)->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name, 0);
+ break;
+ case 32:
+ m_maincpu->memory().space(AS_IO)->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name, 0xffffffff);
+ if ((start % 4) == 0) {
+ if ((end-start)==1) {
+ m_maincpu->memory().space(AS_IO)->install_legacy_readwrite_handler(start, end+2, mask, mirror, rhandler, rhandler_name, whandler, whandler_name, 0x0000ffff);
+ } else {
+ m_maincpu->memory().space(AS_IO)->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name, 0xffffffff);
+ }
+ } else {
+ // we handle just misalligned by 2
+ m_maincpu->memory().space(AS_IO)->install_legacy_readwrite_handler(start-2, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name, 0xffff0000);
+ }
+
+ break;
+ default:
+ fatalerror("ISA16: Bus width %d not supported", buswidth);
+ break;
+ }
+}
+
// interrupt request from isa card
WRITE_LINE_MEMBER( isa16_device::irq10_w ) { m_out_irq10_func(state); }
WRITE_LINE_MEMBER( isa16_device::irq11_w ) { m_out_irq11_func(state); }
diff --git a/src/mess/machine/isa.h b/src/mess/machine/isa.h
index 5e5599f90e8..8cbbe6b06c5 100644
--- a/src/mess/machine/isa.h
+++ b/src/mess/machine/isa.h
@@ -294,6 +294,7 @@ public:
void install16_device(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_device_func rhandler, const char* rhandler_name, write16_device_func whandler, const char *whandler_name);
void install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_delegate rhandler, write16_delegate whandler);
+ void install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_space_func rhandler, const char* rhandler_name, write16_space_func whandler, const char *whandler_name);
DECLARE_WRITE_LINE_MEMBER( irq10_w );
DECLARE_WRITE_LINE_MEMBER( irq11_w );