summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/apollo.c
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2014-06-15 15:56:23 +0000
committer R. Belmont <rb6502@users.noreply.github.com>2014-06-15 15:56:23 +0000
commit9e57e262c6848e97b26c131df0cd3629b8854382 (patch)
treee7fbbd875441a35a384ce653c5423c6d7bc425df /src/mess/drivers/apollo.c
parentcb235992feafa571145593710098fb5898be0c68 (diff)
Apollo updates [Hans Ostermeyer]
- Fixed ISA bus endianness, it's the same as other 680x0 systems with ISA - Improved logging in several places - "20 years ago" option updated to now-necessary "25 years ago" - Fixed ISA high IRQ routing - Fixed 3c505 to have a 16 bit ISA interface - Fixed omti8621 and sc499 to have correct-endian ISA interfaces
Diffstat (limited to 'src/mess/drivers/apollo.c')
-rw-r--r--src/mess/drivers/apollo.c62
1 files changed, 36 insertions, 26 deletions
diff --git a/src/mess/drivers/apollo.c b/src/mess/drivers/apollo.c
index 75db1652dc5..8ad7152d02b 100644
--- a/src/mess/drivers/apollo.c
+++ b/src/mess/drivers/apollo.c
@@ -27,16 +27,15 @@
#define VERBOSE 0
#include "includes/apollo.h"
-#include "machine/apollo_kbd.h"
-
#include "debugger.h"
-
#include "cpu/m68000/m68kcpu.h"
-
#include "sound/beep.h"
-
#include "apollo_dsp.lh"
+// we use set_verbose
+#include "bus/isa/omti8621.h"
+#include "bus/isa/3c505.h"
+
#define TERMINAL_TAG "terminal"
// we use this to prevent excessive logging (if emulation runs amok)
@@ -56,22 +55,25 @@
#define ATBUS_MEMORY_BASE 0x080000
#define ATBUS_MEMORY_END 0xffffff
-#define DN3500_RAM_SIZE 16 // 8 or 16 MB
+#define DN3500_RAM_SIZE 16 // 8, 16 or 32 MB
#if DN3500_RAM_SIZE == 8
#define DN3500_RAM_BASE 0x1000000
#define DN3500_RAM_END 0x17fffff
-#define DN3500_RAM_CONFIG_BYTE 0x64 // or 0xe8
-#else /* DN3500_RAM_SIZE == 16 */
+#define DN3500_RAM_CONFIG_BYTE 0x64 // 4-4-0-0
+#elif DN3500_RAM_SIZE == 16
#define DN3500_RAM_BASE 0x1000000
#define DN3500_RAM_END 0x1ffffff
#define DN3500_RAM_CONFIG_BYTE 0x60 // 4-4-4-4
-//#define DN3500_RAM_CONFIG_BYTE 0x14 // 8-8-0-0
+#else /* DN3500_RAM_SIZE == 32 */
+#define DN3500_RAM_BASE 0x1000000
+#define DN3500_RAM_END 0x3ffffff
+#define DN3500_RAM_CONFIG_BYTE 0x20 // 8-8-8-8
#endif
#define DN3000_RAM_BASE 0x100000
#define DN3000_RAM_END 0x8fffff
-#define DN3000_RAM_CONFIG_8MB 0xA8
+#define DN3000_RAM_CONFIG_8MB 0x20 // 2-2-2-2
#define DN5500_RAM_SIZE 32 // 16 or 32 MB
@@ -570,16 +572,24 @@ WRITE32_MEMBER(apollo_state::apollo_rom_w)
READ16_MEMBER(apollo_state::apollo_atbus_io_r)
{
- UINT32 isa_addr = (offset & 3) + ((offset & ~0x1ff)>>7);
+ UINT32 isa_addr = (offset & 3) + ((offset & ~0x1ff) >> 7);
+
+ // Motorola CPU is MSB first, ISA Bus is LSB first
+ UINT16 data = m_isa->io16_swap_r(space, isa_addr, mem_mask);
+
+ SLOG2(("apollo_atbus_io_r at %08x -> %04x = %04x & %04x", offset*2, isa_addr*2, data, mem_mask));
- return m_isa->io16_r(space, isa_addr, mem_mask);
+ return data;
}
WRITE16_MEMBER(apollo_state::apollo_atbus_io_w)
{
- UINT32 isa_addr = (offset & 3) + ((offset & ~0x1ff)>>7);
+ UINT32 isa_addr = (offset & 3) + ((offset & ~0x1ff) >> 7);
+
+ SLOG2(("apollo_atbus_io_w at %08x -> %04x = %04x & %04x", offset*2, isa_addr*2, data, mem_mask));
- m_isa->io16_w(space, isa_addr, data, mem_mask);
+ // Motorola CPU is MSB first, ISA Bus is LSB first
+ m_isa->io16_swap_w(space, isa_addr, data, mem_mask);
}
/***************************************************************************
@@ -671,7 +681,7 @@ static ADDRESS_MAP_START(dn3500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
- AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8(APOLLO_SIO2_TAG, mc68681_device, read, write, 0x00ff00ff )
AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
@@ -717,7 +727,7 @@ static ADDRESS_MAP_START(dsp3500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
- AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8(APOLLO_SIO2_TAG, mc68681_device, read, write, 0x00ff00ff )
AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
@@ -749,7 +759,7 @@ static ADDRESS_MAP_START(dn3000_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x000000, 0x007fff) AM_WRITE(apollo_rom_w)
AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
- AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x008800, 0x0088ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
AM_RANGE(0x009000, 0x0090ff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
@@ -784,7 +794,7 @@ static ADDRESS_MAP_START(dsp3000_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x000000, 0x007fff) AM_WRITE(apollo_rom_w)
AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
- AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x008800, 0x0088ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
@@ -817,7 +827,7 @@ static ADDRESS_MAP_START(dn5500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
- AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8(APOLLO_SIO2_TAG, mc68681_device, read, write, 0x00ff00ff )
AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
@@ -866,7 +876,7 @@ static ADDRESS_MAP_START(dsp5500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
- AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, mc68681_device, read, write, 0x00ff00ff )
+ AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8(APOLLO_SIO_TAG, apollo_sio, read, write, 0xffffffff )
AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8(APOLLO_SIO2_TAG, mc68681_device, read, write, 0x00ff00ff )
AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8(APOLLO_PTM_TAG, ptm6840_device, read, write, 0x00ff00ff )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
@@ -1096,7 +1106,7 @@ static MACHINE_CONFIG_DERIVED( dn3500_19i, dn3500 )
/* video hardware 19" monochrome */
MCFG_APOLLO_MONO19I_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END
@@ -1104,7 +1114,7 @@ static MACHINE_CONFIG_DERIVED( dn3500_15i, dn3500 )
/* video hardware is 15" monochrome or color */
MCFG_APOLLO_GRAPHICS_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END
@@ -1147,7 +1157,7 @@ static MACHINE_CONFIG_DERIVED( dn3000_19i, dn3000 )
/* video hardware 19" monochrome */
MCFG_APOLLO_MONO19I_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END
@@ -1155,7 +1165,7 @@ static MACHINE_CONFIG_DERIVED( dn3000_15i, dn3000 )
/* video hardware 15" monochrome */
MCFG_APOLLO_GRAPHICS_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END
@@ -1185,7 +1195,7 @@ static MACHINE_CONFIG_DERIVED( dn5500_19i, dn5500 )
/* video hardware 19" monochrome */
MCFG_APOLLO_MONO19I_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END
@@ -1193,7 +1203,7 @@ static MACHINE_CONFIG_DERIVED( dn5500_15i, dn5500 )
/* video hardware 15" monochrome */
MCFG_APOLLO_GRAPHICS_ADD(APOLLO_SCREEN_TAG)
MCFG_DEVICE_ADD(APOLLO_KBD_TAG, APOLLO_KBD, 0)
- MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, mc68681_device, rx_a_w))
+ MCFG_APOLLO_KBD_TX_CALLBACK(DEVWRITELINE(APOLLO_SIO_TAG, apollo_sio, rx_a_w))
MCFG_APOLLO_KBD_GERMAN_CALLBACK(READLINE(apollo_state, apollo_kbd_is_german))
MACHINE_CONFIG_END