From 9bb8016a7552030d88f1cf33f5967e4d0e8b2233 Mon Sep 17 00:00:00 2001 From: Wilbert Pol Date: Sat, 12 Jan 2013 12:13:59 +0000 Subject: [PATCH] (MESS)Merged src/mess/machine/odyssey2.c and src/mess/drivers/odyssey2.c (nw) --- .gitattributes | 1 - src/mess/drivers/odyssey2.c | 176 +++++++++++++++++++++++++++++++++ src/mess/machine/odyssey2.c | 190 ------------------------------------ src/mess/mess.mak | 1 - 4 files changed, 176 insertions(+), 192 deletions(-) delete mode 100644 src/mess/machine/odyssey2.c diff --git a/.gitattributes b/.gitattributes index d6c54e0ccb1..e309df4ec56 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7249,7 +7249,6 @@ src/mess/machine/nubus_image.c svneol=native#text/plain src/mess/machine/nubus_image.h svneol=native#text/plain src/mess/machine/null_modem.c svneol=native#text/plain src/mess/machine/null_modem.h svneol=native#text/plain -src/mess/machine/odyssey2.c svneol=native#text/plain src/mess/machine/omti8621.c svneol=native#text/plain src/mess/machine/omti8621.h svneol=native#text/plain src/mess/machine/ondra.c svneol=native#text/plain diff --git a/src/mess/drivers/odyssey2.c b/src/mess/drivers/odyssey2.c index c1bff25f021..da78ce39d08 100644 --- a/src/mess/drivers/odyssey2.c +++ b/src/mess/drivers/odyssey2.c @@ -137,6 +137,182 @@ WRITE_LINE_MEMBER(odyssey2_state::irq_callback) } +void odyssey2_state::switch_banks() +{ + switch ( m_cart_size ) + { + case 12288: + /* 12KB cart support (for instance, KTAA as released) */ + membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 ); + membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 + 0x800 ); + break; + + case 16384: + /* 16KB cart support (for instance, full sized version KTAA) */ + membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0x400 ); + membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0xC00 ); + break; + + default: + membank("bank1")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800); + membank("bank2")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800 ); + break; + } +} + + +WRITE_LINE_MEMBER(odyssey2_state::the_voice_lrq_callback) +{ + m_the_voice_lrq_state = state; +} + + +READ8_MEMBER(odyssey2_state::t0_read) +{ + return ( m_the_voice_lrq_state == ASSERT_LINE ) ? 0 : 1; +} + + +DRIVER_INIT_MEMBER(odyssey2_state,odyssey2) +{ + int i; + int size = 0; + UINT8 *gfx = memregion("gfx1")->base(); + device_image_interface *image = dynamic_cast(machine().device("cart")); + + m_ram = auto_alloc_array(machine(), UINT8, 256); + + for (i = 0; i < 256; i++) + { + gfx[i] = i; /* TODO: Why i and not 0? */ + m_ram[i] = 0; + } + + if (image->exists()) + { + if (image->software_entry() == NULL) + { + size = image->length(); + } + else + { + size = image->get_software_region_length("rom"); + } + } + m_cart_size = size; +} + + +void odyssey2_state::machine_start() +{ + save_item(NAME(m_ef934x_ram_a)); + save_item(NAME(m_ef934x_ram_b)); + save_item(NAME(m_ef9340.X)); + save_item(NAME(m_ef9340.Y)); + save_item(NAME(m_ef9340.Y0)); + save_item(NAME(m_ef9340.R)); + save_item(NAME(m_ef9340.M)); + save_item(NAME(m_ef9341.TA)); + save_item(NAME(m_ef9341.TB)); + save_item(NAME(m_ef9341.busy)); + save_item(NAME(m_ef934x_ext_char_ram)); +} + + +void odyssey2_state::machine_reset() +{ + m_lum = 0; + + /* jump to "last" bank, will work for all sizes due to being mirrored */ + m_p1 = 0xFF; + m_p2 = 0xFF; + switch_banks(); + + for ( int i = 0; i < 8; i++ ) + { + m_g7400_ic674_decode[i] = 0; + m_g7400_ic678_decode[i] = 0; + } +} + +/****** External RAM ******************************/ + +READ8_MEMBER(odyssey2_state::io_read) +{ + if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) + { + return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */ + } + if (!(m_p1 & P1_EXT_RAM_ENABLE)) + { + return m_ram[offset]; + } + + return 0; +} + + +WRITE8_MEMBER(odyssey2_state::io_write) +{ + if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) + { + m_ram[offset] = data; + if ( offset & 0x80 ) + { + if ( data & 0x20 ) + { + logerror("voice write %02X, data = %02X (p1 = %02X)\n", offset, data, m_p1 ); + sp0256_ALD_w( machine().device("sp0256_speech"), space, 0, offset & 0x7F ); + } + else + { + /* TODO: Reset sp0256 in this case */ + } + } + } + else if (!(m_p1 & P1_VDC_ENABLE)) + { + m_i8244->write(space, offset, data); + } +} + + +READ8_MEMBER(odyssey2_state::g7400_io_read) +{ + if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) + { + return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */ + } + else if (!(m_p1 & P1_EXT_RAM_ENABLE)) + { + return m_ram[offset]; + } + else + { + return ef9341_r( offset & 0x02, offset & 0x01 ); + } + + return 0; +} + + +WRITE8_MEMBER(odyssey2_state::g7400_io_write) +{ + if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) + { + m_ram[offset] = data; + } + else if (!(m_p1 & P1_VDC_ENABLE)) + { + m_i8244->write(space, offset, data); + } + else + { + ef9341_w( offset & 0x02, offset & 0x01, data ); + } +} + + WRITE16_MEMBER(odyssey2_state::scanline_postprocess) { int vpos = data; diff --git a/src/mess/machine/odyssey2.c b/src/mess/machine/odyssey2.c deleted file mode 100644 index b9ad588d7f5..00000000000 --- a/src/mess/machine/odyssey2.c +++ /dev/null @@ -1,190 +0,0 @@ -/*************************************************************************** - - odyssey2.c - - Machine file to handle emulation of the Odyssey 2. - -***************************************************************************/ - -#include "emu.h" -#include "includes/odyssey2.h" -#include "imagedev/cartslot.h" -#include "sound/sp0256.h" - - - -void odyssey2_state::switch_banks() -{ - switch ( m_cart_size ) - { - case 12288: - /* 12KB cart support (for instance, KTAA as released) */ - membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 ); - membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 + 0x800 ); - break; - - case 16384: - /* 16KB cart support (for instance, full sized version KTAA) */ - membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0x400 ); - membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0xC00 ); - break; - - default: - membank("bank1")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800); - membank("bank2")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800 ); - break; - } -} - - -WRITE_LINE_MEMBER(odyssey2_state::the_voice_lrq_callback) -{ - m_the_voice_lrq_state = state; -} - - -READ8_MEMBER(odyssey2_state::t0_read) -{ - return ( m_the_voice_lrq_state == ASSERT_LINE ) ? 0 : 1; -} - - -DRIVER_INIT_MEMBER(odyssey2_state,odyssey2) -{ - int i; - int size = 0; - UINT8 *gfx = memregion("gfx1")->base(); - device_image_interface *image = dynamic_cast(machine().device("cart")); - - m_ram = auto_alloc_array(machine(), UINT8, 256); - - for (i = 0; i < 256; i++) - { - gfx[i] = i; /* TODO: Why i and not 0? */ - m_ram[i] = 0; - } - - if (image->exists()) - { - if (image->software_entry() == NULL) - { - size = image->length(); - } - else - { - size = image->get_software_region_length("rom"); - } - } - m_cart_size = size; -} - - -void odyssey2_state::machine_start() -{ - save_item(NAME(m_ef934x_ram_a)); - save_item(NAME(m_ef934x_ram_b)); - save_item(NAME(m_ef9340.X)); - save_item(NAME(m_ef9340.Y)); - save_item(NAME(m_ef9340.Y0)); - save_item(NAME(m_ef9340.R)); - save_item(NAME(m_ef9340.M)); - save_item(NAME(m_ef9341.TA)); - save_item(NAME(m_ef9341.TB)); - save_item(NAME(m_ef9341.busy)); - save_item(NAME(m_ef934x_ext_char_ram)); -} - - -void odyssey2_state::machine_reset() -{ - m_lum = 0; - - /* jump to "last" bank, will work for all sizes due to being mirrored */ - m_p1 = 0xFF; - m_p2 = 0xFF; - switch_banks(); - - for ( int i = 0; i < 8; i++ ) - { - m_g7400_ic674_decode[i] = 0; - m_g7400_ic678_decode[i] = 0; - } -} - -/****** External RAM ******************************/ - -READ8_MEMBER(odyssey2_state::io_read) -{ - if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) - { - return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */ - } - if (!(m_p1 & P1_EXT_RAM_ENABLE)) - { - return m_ram[offset]; - } - - return 0; -} - - -WRITE8_MEMBER(odyssey2_state::io_write) -{ - if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) - { - m_ram[offset] = data; - if ( offset & 0x80 ) - { - if ( data & 0x20 ) - { - logerror("voice write %02X, data = %02X (p1 = %02X)\n", offset, data, m_p1 ); - sp0256_ALD_w( machine().device("sp0256_speech"), space, 0, offset & 0x7F ); - } - else - { - /* TODO: Reset sp0256 in this case */ - } - } - } - else if (!(m_p1 & P1_VDC_ENABLE)) - { - m_i8244->write(space, offset, data); - } -} - - -READ8_MEMBER(odyssey2_state::g7400_io_read) -{ - if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) - { - return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */ - } - else if (!(m_p1 & P1_EXT_RAM_ENABLE)) - { - return m_ram[offset]; - } - else - { - return ef9341_r( offset & 0x02, offset & 0x01 ); - } - - return 0; -} - - -WRITE8_MEMBER(odyssey2_state::g7400_io_write) -{ - if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) - { - m_ram[offset] = data; - } - else if (!(m_p1 & P1_VDC_ENABLE)) - { - m_i8244->write(space, offset, data); - } - else - { - ef9341_w( offset & 0x02, offset & 0x01, data ); - } -} - diff --git a/src/mess/mess.mak b/src/mess/mess.mak index b7096962d5b..0dba26dad2f 100644 --- a/src/mess/mess.mak +++ b/src/mess/mess.mak @@ -1302,7 +1302,6 @@ $(MESSOBJ)/luxor.a: \ $(MESS_MACHINE)/s1410.o \ $(MESSOBJ)/magnavox.a: \ - $(MESS_MACHINE)/odyssey2.o \ $(MESS_VIDEO)/odyssey2.o \ $(MESS_DRIVERS)/odyssey2.o \