diff options
author | 2012-08-26 00:15:06 +0000 | |
---|---|---|
committer | 2012-08-26 00:15:06 +0000 | |
commit | 390362ac6e885fdc89039a617bd02461afee3fdb (patch) | |
tree | a020629b936c9cfcabfdb9f8ed586b4081bf3693 /src/mess/machine | |
parent | 5895fb0137a085a3886ff5245b38a9a78d96de1b (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.c | 28 | ||||
-rw-r--r-- | src/mess/machine/isa.h | 1 |
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 ); |