summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess
diff options
context:
space:
mode:
author Fabio Priuli <etabeta78@users.noreply.github.com>2014-10-10 15:28:46 +0000
committer Fabio Priuli <etabeta78@users.noreply.github.com>2014-10-10 15:28:46 +0000
commitf0fad04eb68b545e6075f3b65d6d4db8c03e4025 (patch)
treee1a52b526fd0a7e306fd5cfe9adac62976555823 /src/mess
parent4de494250b26fc201171ac3b2b3c24f25ac08aab (diff)
(MESS) converted vectrex and crvision to use slot devices for
their carts. nw. (with these, we are done for the moment with new slot devices for carts...)
Diffstat (limited to 'src/mess')
-rw-r--r--src/mess/drivers/crvision.c148
-rw-r--r--src/mess/includes/crvision.h6
-rw-r--r--src/mess/mess.mak2
3 files changed, 36 insertions, 120 deletions
diff --git a/src/mess/drivers/crvision.c b/src/mess/drivers/crvision.c
index 1acab4cb555..269d832135f 100644
--- a/src/mess/drivers/crvision.c
+++ b/src/mess/drivers/crvision.c
@@ -699,6 +699,12 @@ void crvision_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
+
+ if (m_cart->exists())
+ {
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
+ }
}
void crvision_pal_state::machine_start()
@@ -706,6 +712,12 @@ void crvision_pal_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
+
+ if (m_cart->exists())
+ {
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
+ }
}
/*-------------------------------------------------
@@ -717,122 +729,29 @@ void laser2001_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
-}
-
-/***************************************************************************
- CARTRIDGE
-***************************************************************************/
-
-DEVICE_IMAGE_LOAD_MEMBER( crvision_state, crvision_cart )
-{
- UINT32 size;
- dynamic_buffer temp_copy;
- UINT8 *mem = memregion(M6502_TAG)->base();
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
- if (image.software_entry() == NULL)
+
+ if (m_cart->exists())
{
- size = image.length();
- temp_copy.resize(size);
- image.fread( temp_copy, size);
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
}
- else
- {
- size= image.get_software_region_length("rom");
- temp_copy.resize(size);
- memcpy(temp_copy, image.get_software_region("rom"), size);
- }
-
- switch (size)
- {
- case 0x1000: // 4K
- memcpy(mem + 0x9000, temp_copy, 0x1000); // load 4KB at 0x9000
- memcpy(mem + 0xb000, mem + 0x9000, 0x1000); // mirror 4KB at 0xb000
- program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
- break;
-
- case 0x1800: // 6K
- memcpy(mem + 0x9000, temp_copy, 0x1000); // load lower 4KB at 0x9000
- memcpy(mem + 0xb000, mem + 0x9000, 0x1000); // mirror lower 4KB at 0xb000
- memcpy(mem + 0x8000, temp_copy + 0x1000, 0x0800); // load higher 2KB at 0x8000
- memcpy(mem + 0x8800, mem + 0x8000, 0x0800); // mirror higher 2KB at 0x8800
- memcpy(mem + 0xa000, mem + 0x8000, 0x0800); // mirror higher 2KB at 0xa000
- memcpy(mem + 0xa800, mem + 0x8000, 0x0800); // mirror higher 2KB at 0xa800
- program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
- break;
-
- case 0x2000: // 8K
- memcpy(mem + 0x8000, temp_copy, 0x2000); // load 8KB at 0x8000
- memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror 8KB at 0xa000
- program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
- break;
-
- case 0x2800: // 10K
- memcpy(mem + 0x8000, temp_copy, 0x2000); // load lower 8KB at 0x8000
- memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror lower 8KB at 0xa000
- memcpy(mem + 0x4000, temp_copy + 0x2000, 0x0800); // load higher 2KB at 0x4000
- memcpy(mem + 0x4800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x4800
- memcpy(mem + 0x5000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5000
- memcpy(mem + 0x5800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5800
- memcpy(mem + 0x6000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6000
- memcpy(mem + 0x6800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6800
- memcpy(mem + 0x7000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7000
- memcpy(mem + 0x7800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7800
- program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
- program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
- break;
-
- case 0x3000: // 12K
- memcpy(mem + 0x8000, temp_copy, 0x2000); // load lower 8KB at 0x8000
- memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror lower 8KB at 0xa000
- memcpy(mem + 0x4000, temp_copy + 0x2000, 0x1000); // load higher 4KB at 0x4000
- memcpy(mem + 0x5000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x5000
- memcpy(mem + 0x6000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x6000
- memcpy(mem + 0x7000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x7000
- program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
- program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
- break;
-
- case 0x4000: // 16K
- memcpy(mem + 0xa000, temp_copy, 0x2000); // load lower 8KB at 0xa000
- memcpy(mem + 0x8000, temp_copy + 0x2000, 0x2000); // load higher 8KB at 0x8000
- program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
- program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
- break;
-
- case 0x4800: // 18K
- memcpy(mem + 0xa000, temp_copy, 0x2000); // load lower 8KB at 0xa000
- memcpy(mem + 0x8000, temp_copy + 0x2000, 0x2000); // load higher 8KB at 0x8000
- memcpy(mem + 0x4000, temp_copy + 0x4000, 0x0800); // load higher 2KB at 0x4000
- memcpy(mem + 0x4800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x4800
- memcpy(mem + 0x5000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5000
- memcpy(mem + 0x5800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5800
- memcpy(mem + 0x6000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6000
- memcpy(mem + 0x6800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6800
- memcpy(mem + 0x7000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7000
- memcpy(mem + 0x7800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7800
- program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
- program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
- break;
-
- default:
- auto_free(machine(), temp_copy);
- return IMAGE_INIT_FAIL;
- }
-
- membank(BANK_ROM1)->configure_entry(0, mem + 0x8000);
- membank(BANK_ROM1)->set_entry(0);
-
- membank(BANK_ROM2)->configure_entry(0, mem + 0x4000);
- membank(BANK_ROM2)->set_entry(0);
-
- return IMAGE_INIT_PASS;
}
+
/***************************************************************************
MACHINE DRIVERS
***************************************************************************/
+static SLOT_INTERFACE_START(crvision_cart)
+ SLOT_INTERFACE_INTERNAL("crv_rom4k", CRVISION_ROM_4K)
+ SLOT_INTERFACE_INTERNAL("crv_rom6k", CRVISION_ROM_6K)
+ SLOT_INTERFACE_INTERNAL("crv_rom8k", CRVISION_ROM_8K)
+ SLOT_INTERFACE_INTERNAL("crv_rom10k", CRVISION_ROM_10K)
+ SLOT_INTERFACE_INTERNAL("crv_rom12k", CRVISION_ROM_12K)
+ SLOT_INTERFACE_INTERNAL("crv_rom16k", CRVISION_ROM_16K)
+ SLOT_INTERFACE_INTERNAL("crv_rom18k", CRVISION_ROM_18K)
+SLOT_INTERFACE_END
+
/*-------------------------------------------------
MACHINE_CONFIG_START( creativision, crvision_state )
-------------------------------------------------*/
@@ -872,11 +791,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state )
MCFG_SOUND_ROUTE(1, "mono", 0.25)
// cartridge
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
- MCFG_CARTSLOT_MANDATORY
- MCFG_CARTSLOT_INTERFACE("crvision_cart")
- MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
+ MCFG_CRVISION_CARTRIDGE_ADD("cartslot", crvision_cart, NULL)
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@@ -884,7 +799,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state )
MCFG_RAM_EXTRA_OPTIONS("15K") // 16K expansion (lower 14K available only, upper 2K shared with BIOS ROM)
// software lists
- MCFG_SOFTWARE_LIST_ADD("cart_list","crvision")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "crvision")
MACHINE_CONFIG_END
/*-------------------------------------------------
@@ -958,10 +873,7 @@ static MACHINE_CONFIG_START( lasr2001, laser2001_state )
MCFG_SOUND_ROUTE(1, "mono", 0.25)
// cartridge
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
- MCFG_CARTSLOT_INTERFACE("crvision_cart")
- MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
+ MCFG_CRVISION_CARTRIDGE_ADD("cartslot", crvision_cart, NULL)
// internal ram
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/includes/crvision.h b/src/mess/includes/crvision.h
index 2c1775eb351..89ee61b7f3f 100644
--- a/src/mess/includes/crvision.h
+++ b/src/mess/includes/crvision.h
@@ -6,11 +6,12 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
-#include "imagedev/cartslot.h"
#include "imagedev/cassette.h"
#include "machine/6821pia.h"
#include "machine/buffer.h"
#include "bus/centronics/ctronics.h"
+#include "bus/crvision/slot.h"
+#include "bus/crvision/rom.h"
#include "machine/ram.h"
#include "sound/sn76496.h"
#include "sound/wave.h"
@@ -35,6 +36,7 @@ public:
m_pia(*this, PIA6821_TAG),
m_psg(*this, SN76489_TAG),
m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
m_cent_data_out(*this, "cent_data_out"),
m_ram(*this, RAM_TAG)
{
@@ -44,6 +46,7 @@ public:
required_device<pia6821_device> m_pia;
required_device<sn76496_base_device> m_psg;
required_device<cassette_image_device> m_cassette;
+ required_device<crvision_cart_slot_device> m_cart;
required_device<output_latch_device> m_cent_data_out;
required_device<ram_device> m_ram;
@@ -53,7 +56,6 @@ public:
DECLARE_READ8_MEMBER( pia_pa_r );
DECLARE_READ8_MEMBER( pia_pb_r );
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER( crvision_cart );
UINT8 read_keyboard(int pa);
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index 39e8aa225c5..a355f631bd3 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -582,6 +582,7 @@ BUSES += COLECO
BUSES += COMPUCOLOR
BUSES += COMX35
BUSES += CPC
+BUSES += CRVISION
BUSES += DMV
BUSES += ECBBUS
BUSES += ECONET
@@ -628,6 +629,7 @@ BUSES += VBOY
BUSES += VC4000
BUSES += VCS
BUSES += VCS_CTRL
+BUSES += VECTREX
BUSES += VIC10
BUSES += VIC20
BUSES += VIDBRAIN