summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mess/drivers/cgenie.c29
-rw-r--r--src/mess/drivers/orion.c38
-rw-r--r--src/mess/drivers/pv1000.c86
-rw-r--r--src/mess/drivers/radio86.c27
-rw-r--r--src/mess/drivers/timex.c186
-rw-r--r--src/mess/drivers/vector06.c19
-rw-r--r--src/mess/includes/cgenie.h5
-rw-r--r--src/mess/includes/orion.h3
-rw-r--r--src/mess/includes/radio86.h7
-rw-r--r--src/mess/includes/spectrum.h16
-rw-r--r--src/mess/includes/vector06.h7
-rw-r--r--src/mess/machine/cgenie.c7
-rw-r--r--src/mess/machine/orion.c7
-rw-r--r--src/mess/machine/radio86.c11
-rw-r--r--src/mess/machine/vector06.c10
15 files changed, 223 insertions, 235 deletions
diff --git a/src/mess/drivers/cgenie.c b/src/mess/drivers/cgenie.c
index aeb2daff475..00dd1700e27 100644
--- a/src/mess/drivers/cgenie.c
+++ b/src/mess/drivers/cgenie.c
@@ -488,6 +488,25 @@ static const floppy_interface cgenie_floppy_interface =
NULL
};
+
+// TODO: investigate this! I think it is some sort of expansion of the DOS cart...
+DEVICE_IMAGE_LOAD_MEMBER( cgenie_state, cgenie_cart )
+{
+ UINT32 size = m_cart->common_get_size("rom");
+
+ if (size > 0x1000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
+ return IMAGE_INIT_FAIL;
+ }
+
+ m_cart->rom_alloc(0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ return IMAGE_INIT_PASS;
+}
+
+
static MACHINE_CONFIG_START( cgenie_common, cgenie_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_17_73447MHz/8) /* 2,2168 MHz */
@@ -535,9 +554,11 @@ static MACHINE_CONFIG_START( cgenie_common, cgenie_state )
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(cgenie_floppy_interface)
/* cartridge */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("rom")
- MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "cgenie_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
+ MCFG_GENERIC_LOAD(cgenie_state, cgenie_cart)
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "cgenie_cart")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -565,7 +586,6 @@ ROM_START (cgenie)
ROM_REGION(0x13000,"maincpu",0)
ROM_LOAD ("cgenie.rom", 0x00000, 0x4000, CRC(d359ead7) SHA1(d8c2fc389ad38c45fba0ed556a7d91abac5463f4))
ROM_LOAD ("cgdos.rom", 0x10000, 0x2000, CRC(2a96cf74) SHA1(6dcac110f87897e1ee7521aefbb3d77a14815893))
- ROM_CART_LOAD("cart", 0x12000, 0x1000, ROM_NOMIRROR | ROM_OPTIONAL)
ROM_REGION(0x0c00,"gfx1",0)
ROM_LOAD ("cgenie1.fnt", 0x0000, 0x0800, CRC(4fed774a) SHA1(d53df8212b521892cc56be690db0bb474627d2ff))
@@ -582,7 +602,6 @@ ROM_START (cgenienz)
ROM_SYSTEM_BIOS(1, "new", "New ROM")
ROMX_LOAD( "cgromv2.rom", 0x0000, 0x4000, CRC(cfb84e09) SHA1(e199e4429bab6f9fca2bb05e71324538928a693a), ROM_BIOS(2) )
ROM_LOAD ("cgdos.rom", 0x10000, 0x2000, CRC(2a96cf74) SHA1(6dcac110f87897e1ee7521aefbb3d77a14815893))
- ROM_CART_LOAD("cart", 0x12000, 0x1000, ROM_NOMIRROR | ROM_OPTIONAL)
ROM_REGION(0x0c00,"gfx1",0)
ROM_LOAD ("cgenie1.fnt", 0x0000, 0x0800, CRC(4fed774a) SHA1(d53df8212b521892cc56be690db0bb474627d2ff))
diff --git a/src/mess/drivers/orion.c b/src/mess/drivers/orion.c
index 3516d311a77..69c2c5da82c 100644
--- a/src/mess/drivers/orion.c
+++ b/src/mess/drivers/orion.c
@@ -9,15 +9,10 @@
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "cpu/i8085/i8085.h"
-#include "sound/ay8910.h"
-#include "sound/wave.h"
+#include "includes/orion.h"
#include "imagedev/cassette.h"
-#include "imagedev/cartslot.h"
#include "formats/smx_dsk.h"
#include "formats/rk_cas.h"
-#include "includes/orion.h"
/* Address maps */
@@ -124,7 +119,7 @@ static MACHINE_CONFIG_START( orion128, orion_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
MCFG_CASSETTE_INTERFACE("orion_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list","orion_cass")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "orion_cass")
MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
@@ -134,9 +129,9 @@ static MACHINE_CONFIG_START( orion128, orion_state )
MCFG_FLOPPY_DRIVE_ADD("fd3", orion_floppies, "525qd", orion_state::orion_floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","orion_flop")
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_INTERFACE("orion_cart")
- MCFG_SOFTWARE_LIST_ADD("cart_list","orion_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "orion_cart")
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "orion_cart")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -203,7 +198,7 @@ static MACHINE_CONFIG_START( orionz80, orion_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
MCFG_CASSETTE_INTERFACE("orion_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list","orion_cass")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "orion_cass")
MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
@@ -213,9 +208,9 @@ static MACHINE_CONFIG_START( orionz80, orion_state )
MCFG_FLOPPY_DRIVE_ADD("fd3", orion_floppies, "525qd", orion_state::orion_floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","orion_flop")
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_INTERFACE("orion_cart")
- MCFG_SOFTWARE_LIST_ADD("cart_list","orion_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "orion_cart")
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "orion_cart")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -278,7 +273,7 @@ static MACHINE_CONFIG_START( orionpro, orion_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
MCFG_CASSETTE_INTERFACE("orion_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list","orion_cass")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "orion_cass")
MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
@@ -289,9 +284,9 @@ static MACHINE_CONFIG_START( orionpro, orion_state )
MCFG_SOFTWARE_LIST_ADD("flop_list","orionpro_flop")
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop128_list","orion_flop")
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_INTERFACE("orion_cart")
- MCFG_SOFTWARE_LIST_ADD("cart_list","orion_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "orion_cart")
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "orion_cart")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -307,13 +302,11 @@ ROM_START( orion128 )
ROMX_LOAD( "m2rk.bin", 0x0f800, 0x0800, CRC(2025c234) SHA1(caf86918629be951fe698cddcdf4589f07e2fb96), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "m2_2rk", "Version 3.2.2 rk" )
ROMX_LOAD( "m2_2rk.bin", 0x0f800, 0x0800, CRC(fc662351) SHA1(7c6de67127fae5869281449de1c503597c0c058e), ROM_BIOS(2) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionms )
ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "ms7007.bin", 0x0f800, 0x0800, CRC(c6174ba3) SHA1(8f9a42c3e09684718fe4121a8408e7860129d26f) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionz80 )
@@ -330,13 +323,11 @@ ROM_START( orionz80 )
ROMX_LOAD( "m35zrkd.bin", 0x0f800, 0x0800, CRC(9368b38f) SHA1(64a77f22119d40c9b18b64d78ad12acc6fff9efb), ROM_BIOS(5) )
ROM_SYSTEM_BIOS( 5, "peter", "Peterburg '91" )
ROMX_LOAD( "peter.bin", 0x0f800, 0x0800, CRC(df9b1d8c) SHA1(c7f1e074e58ad1c1799cf522161b4f4cffa5aefa), ROM_BIOS(6) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionide )
ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "m35zrkh.bin", 0x0f800, 0x0800, CRC(b7745f28) SHA1(c3bd3e662db7ec56ecbab54bf6b3a4c26200d0bb) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionzms )
@@ -347,18 +338,15 @@ ROM_START( orionzms )
ROMX_LOAD( "m34zms.bin", 0x0f800, 0x0800, CRC(0f87a80b) SHA1(ab1121092e61268d8162ed8a7d4fd081016a409a), ROM_BIOS(2) )
ROM_SYSTEM_BIOS( 2, "m35zmsd", "Version 3.5 zmsd" )
ROMX_LOAD( "m35zmsd.bin", 0x0f800, 0x0800, CRC(f714ff37) SHA1(fbe9514adb3384aff146cbedd4fede37ce9591e1), ROM_BIOS(3) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionidm )
ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "m35zmsh.bin", 0x0f800, 0x0800, CRC(01e66df4) SHA1(8c785a3c32fe3eacda73ec79157b41a6e4b63ba8) )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_END
ROM_START( orionpro )
ROM_REGION( 0x32000, "maincpu", ROMREGION_ERASEFF )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_OPTIONAL)
ROM_SYSTEM_BIOS( 0, "ver21", "Version 2.1" )
ROMX_LOAD( "rom1-210.bin", 0x20000, 0x2000, CRC(8e1a0c78) SHA1(61c8a5ed596ce7e3fd32da920dcc80dc5375b421), ROM_BIOS(1) )
ROMX_LOAD( "rom2-210.bin", 0x22000, 0x10000, CRC(7cb7a49b) SHA1(601f3dd61db323407c4874fd7f23c10dccac0209), ROM_BIOS(1) )
diff --git a/src/mess/drivers/pv1000.c b/src/mess/drivers/pv1000.c
index 5dfb7664fbe..bf3118263f5 100644
--- a/src/mess/drivers/pv1000.c
+++ b/src/mess/drivers/pv1000.c
@@ -6,7 +6,8 @@
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "imagedev/cartslot.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
// PV-1000 Sound device
@@ -143,15 +144,16 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_sound(*this, "pv1000_sound"),
+ m_cart(*this, "cartslot"),
m_p_videoram(*this, "p_videoram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
{ }
- DECLARE_WRITE8_MEMBER(pv1000_io_w);
- DECLARE_READ8_MEMBER(pv1000_io_r);
- DECLARE_WRITE8_MEMBER(pv1000_gfxram_w);
+ DECLARE_WRITE8_MEMBER(io_w);
+ DECLARE_READ8_MEMBER(io_r);
+ DECLARE_WRITE8_MEMBER(gfxram_w);
UINT8 m_io_regs[8];
UINT8 m_fd_data;
@@ -167,6 +169,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<pv1000_sound_device> m_sound;
+ required_device<generic_slot_device> m_cart;
required_shared_ptr<UINT8> m_p_videoram;
virtual void machine_start();
virtual void machine_reset();
@@ -182,19 +185,19 @@ public:
static ADDRESS_MAP_START( pv1000, AS_PROGRAM, 8, pv1000_state )
- AM_RANGE( 0x0000, 0x3fff ) AM_MIRROR( 0x4000 ) AM_ROM AM_REGION( "cart", 0 )
- AM_RANGE( 0xb800, 0xbbff ) AM_RAM AM_SHARE("p_videoram")
- AM_RANGE( 0xbc00, 0xbfff ) AM_RAM_WRITE( pv1000_gfxram_w ) AM_REGION( "gfxram", 0 )
+ //AM_RANGE(0x0000, 0x7fff) // mapped by the cartslot
+ AM_RANGE(0xb800, 0xbbff) AM_RAM AM_SHARE("p_videoram")
+ AM_RANGE(0xbc00, 0xbfff) AM_RAM_WRITE(gfxram_w) AM_REGION("gfxram", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( pv1000_io, AS_IO, 8, pv1000_state )
- ADDRESS_MAP_GLOBAL_MASK( 0xff )
- AM_RANGE( 0xf8, 0xff ) AM_READWRITE( pv1000_io_r, pv1000_io_w )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0xf8, 0xff) AM_READWRITE(io_r, io_w)
ADDRESS_MAP_END
-WRITE8_MEMBER( pv1000_state::pv1000_gfxram_w )
+WRITE8_MEMBER( pv1000_state::gfxram_w )
{
UINT8 *gfxram = memregion( "gfxram" )->base();
@@ -203,14 +206,14 @@ WRITE8_MEMBER( pv1000_state::pv1000_gfxram_w )
}
-WRITE8_MEMBER( pv1000_state::pv1000_io_w )
+WRITE8_MEMBER( pv1000_state::io_w )
{
switch (offset)
{
case 0x00:
case 0x01:
case 0x02:
- //logerror("pv1000_io_w offset=%02x, data=%02x (%03d)\n", offset, data , data);
+ //logerror("io_w offset=%02x, data=%02x (%03d)\n", offset, data , data);
m_sound->voice_w(space, offset, data);
break;
@@ -234,11 +237,11 @@ WRITE8_MEMBER( pv1000_state::pv1000_io_w )
}
-READ8_MEMBER( pv1000_state::pv1000_io_r )
+READ8_MEMBER( pv1000_state::io_r )
{
UINT8 data = m_io_regs[offset];
-// logerror("pv1000_io_r offset=%02x\n", offset );
+// logerror("io_r offset=%02x\n", offset );
switch ( offset )
{
@@ -308,37 +311,17 @@ PALETTE_INIT_MEMBER(pv1000_state, pv1000)
DEVICE_IMAGE_LOAD_MEMBER( pv1000_state, pv1000_cart )
{
- UINT8 *cart = memregion("cart")->base();
- UINT32 size;
-
- if (image.software_entry() == NULL)
- size = image.length();
- else
- size = image.get_software_region_length("rom");
-
-
+ UINT32 size = m_cart->common_get_size("rom");
+
if (size != 0x2000 && size != 0x4000)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
return IMAGE_INIT_FAIL;
}
-
- if (image.software_entry() == NULL)
- {
- if (image.fread( cart, size) != size)
- {
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unable to fully read from file");
- return IMAGE_INIT_FAIL;
- }
- }
- else
- memcpy(cart, image.get_software_region("rom"), size);
-
-
- /* Mirror 8KB rom */
- if (size == 0x2000)
- memcpy(cart + 0x2000, cart, 0x2000);
-
+
+ m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
return IMAGE_INIT_PASS;
}
@@ -406,7 +389,7 @@ void pv1000_state::pv1000_postload()
{
// restore GFX ram
for (int i = 0; i < 0x400; i++)
- pv1000_gfxram_w(m_maincpu->space(AS_PROGRAM), i, m_gfxram[i]);
+ gfxram_w(m_maincpu->space(AS_PROGRAM), i, m_gfxram[i]);
}
void pv1000_state::machine_start()
@@ -417,6 +400,15 @@ void pv1000_state::machine_start()
m_gfxram = memregion("gfxram")->base();
save_pointer(NAME(m_gfxram), 0x400);
+ if (m_cart->exists())
+ {
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x0000, 0x7fff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
+
+ // FIXME: this is needed for gfx decoding, but there is probably a cleaner solution!
+ astring region_tag;
+ memcpy(memregion("gfxrom")->base(), memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG))->base(), m_cart->get_rom_size());
+ }
+
save_item(NAME(m_io_regs));
save_item(NAME(m_fd_data));
save_item(NAME(m_pcg_bank));
@@ -450,7 +442,7 @@ static const gfx_layout pv1000_3bpp_gfx =
static GFXDECODE_START( pv1000 )
- GFXDECODE_ENTRY( "cart", 8, pv1000_3bpp_gfx, 0, 8 )
+ GFXDECODE_ENTRY( "gfxrom", 8, pv1000_3bpp_gfx, 0, 8 )
GFXDECODE_ENTRY( "gfxram", 8, pv1000_3bpp_gfx, 0, 8 )
GFXDECODE_END
@@ -478,11 +470,9 @@ static MACHINE_CONFIG_START( pv1000, pv1000_state )
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
/* Cartridge slot */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin")
- MCFG_CARTSLOT_MANDATORY
- MCFG_CARTSLOT_INTERFACE("pv1000_cart")
- MCFG_CARTSLOT_LOAD(pv1000_state,pv1000_cart)
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_linear_slot, "pv1000_cart")
+ MCFG_GENERIC_MANDATORY
+ MCFG_GENERIC_LOAD(pv1000_state, pv1000_cart)
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","pv1000")
@@ -490,7 +480,7 @@ MACHINE_CONFIG_END
ROM_START( pv1000 )
- ROM_REGION( 0x4000, "cart", ROMREGION_ERASE00 )
+ ROM_REGION( 0x4000, "gfxrom", ROMREGION_ERASE00 )
ROM_REGION( 0x400, "gfxram", ROMREGION_ERASE00 )
ROM_END
diff --git a/src/mess/drivers/radio86.c b/src/mess/drivers/radio86.c
index cf7a45102a0..5f4c778b71e 100644
--- a/src/mess/drivers/radio86.c
+++ b/src/mess/drivers/radio86.c
@@ -12,7 +12,6 @@
#include "sound/wave.h"
#include "machine/i8255.h"
#include "imagedev/cassette.h"
-#include "imagedev/cartslot.h"
#include "formats/rk_cas.h"
#include "includes/radio86.h"
@@ -379,7 +378,7 @@ static MACHINE_CONFIG_START( radio86, radio86_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
MCFG_CASSETTE_INTERFACE("radio86_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list","radio86")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "radio86_cass")
MACHINE_CONFIG_END
@@ -395,13 +394,14 @@ static MACHINE_CONFIG_DERIVED( radiorom, radio86 )
MCFG_CPU_PROGRAM_MAP(radio86rom_mem)
MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86_romdisk_porta_r))
+ MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86rom_romdisk_porta_r))
MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, radio86_romdisk_portb_w))
MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_romdisk_portc_w))
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
- MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "radio86_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "radio86_cart")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( radioram, radio86 )
@@ -410,7 +410,7 @@ static MACHINE_CONFIG_DERIVED( radioram, radio86 )
MCFG_CPU_PROGRAM_MAP(radio86ram_mem)
MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86_romdisk_porta_r))
+ MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86ram_romdisk_porta_r))
MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, radio86_romdisk_portb_w))
MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_romdisk_portc_w))
MACHINE_CONFIG_END
@@ -486,27 +486,26 @@ ROM_END
ROM_START( radiorom )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "32k", "32 KB rom disk")
- ROMX_LOAD( "radiorom.rom", 0xf800, 0x0800, CRC(B5CDEAB7) SHA1(1c80d72082f2fb2190b575726cb82d86ae0ee7d8), ROM_BIOS(1))
+ ROMX_LOAD( "radiorom.rom", 0xf800, 0x0800, CRC(b5cdeab7) SHA1(1c80d72082f2fb2190b575726cb82d86ae0ee7d8), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "64k", "64 KB rom disk")
ROMX_LOAD( "radiorom.64", 0xf800, 0x0800, CRC(5250b927) SHA1(e885e0f5b2325190b38a4c92b20a8b4fa78fbd8f), ROM_BIOS(2))
ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
- ROM_CART_LOAD("cart", 0x10000, 0x10000, ROM_NOMIRROR | ROM_OPTIONAL)
ROM_REGION(0x0800, "gfx1",0)
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( radioram )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "r86-1.bin", 0xf800, 0x0800, CRC(7E7AB7CB) SHA1(fedb00b6b8fbe1167faba3e4611b483f800e6934))
+ ROM_LOAD( "r86-1.bin", 0xf800, 0x0800, CRC(7e7ab7cb) SHA1(fedb00b6b8fbe1167faba3e4611b483f800e6934))
ROM_LOAD( "r86-2.bin", 0xe000, 0x0800, CRC(955F0616) SHA1(d2b9f960558bdcb60074091fc79d1ad56c313586))
- ROM_LOAD( "romdisk.bin", 0x10000, 0x10000, CRC(43C0279B) SHA1(bc1dfd9bdbce39460616e2158f5d96279d0af3cf))
+ ROM_LOAD( "romdisk.bin", 0x10000, 0x10000, CRC(43c0279b) SHA1(bc1dfd9bdbce39460616e2158f5d96279d0af3cf))
ROM_REGION(0x0800, "gfx1",0)
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
ROM_END
ROM_START( rk7007 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "ms7007.rom", 0xf800, 0x0800, CRC(002811DC) SHA1(4529eb72198c49af77fbcd7833bcd06a1cf9b1ac))
+ ROM_LOAD( "ms7007.rom", 0xf800, 0x0800, CRC(002811dc) SHA1(4529eb72198c49af77fbcd7833bcd06a1cf9b1ac))
ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
ROM_REGION(0x0800, "gfx1",0)
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
@@ -514,7 +513,7 @@ ROM_END
ROM_START( rk700716 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "ms7007.16k", 0xf800, 0x0800, CRC(5268D7B6) SHA1(efd69d8456b8cf8b37f33237153c659725608528))
+ ROM_LOAD( "ms7007.16k", 0xf800, 0x0800, CRC(5268d7b6) SHA1(efd69d8456b8cf8b37f33237153c659725608528))
ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
ROM_REGION(0x0800, "gfx1",0)
ROM_LOAD ("radio86.fnt", 0x0000, 0x0400, CRC(7666bd5e) SHA1(8652787603bee9b4da204745e3b2aa07a4783dfc))
@@ -530,7 +529,7 @@ ROM_END
ROM_START( kr03 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "kr03-dd17.rf2", 0xf800, 0x0800, CRC(AC2E24D5) SHA1(a1317a261bfd55b3b37109b14d1391308dee04de))
+ ROM_LOAD( "kr03-dd17.rf2", 0xf800, 0x0800, CRC(ac2e24d5) SHA1(a1317a261bfd55b3b37109b14d1391308dee04de))
ROM_COPY( "maincpu", 0xf800, 0xf000, 0x0800 )
ROM_REGION(0x0800, "gfx1",0)
ROM_LOAD ("kr03-dd12.rf2", 0x0000, 0x0800, CRC(085F4259) SHA1(11c5829b072a00961ad936c26559fb63bf2dc896))
diff --git a/src/mess/drivers/timex.c b/src/mess/drivers/timex.c
index a91a906775b..29e1cc6d521 100644
--- a/src/mess/drivers/timex.c
+++ b/src/mess/drivers/timex.c
@@ -157,28 +157,6 @@ http://www.z88forever.org.uk/zxplus3e/
#include "machine/beta.h"
#include "machine/ram.h"
-enum
-{
- TIMEX_CART_NONE,
- TIMEX_CART_DOCK,
- TIMEX_CART_EXROM,
- TIMEX_CART_HOME
-};
-
-struct timex_cart_t
-{
- int type;
- UINT8 chunks;
- UINT8 *data;
-};
-
-static timex_cart_t timex_cart;
-
-const timex_cart_t *timex_cart_data(void)
-{
- return &timex_cart;
-}
-
/****************************************************************************************************/
/* TS2048 specific functions */
@@ -234,13 +212,9 @@ void spectrum_state::ts2068_update_memory()
{
UINT8 *messram = m_ram->pointer();
address_space &space = m_maincpu->space(AS_PROGRAM);
- unsigned char *ChosenROM, *ExROM;
- const timex_cart_t *timex_cart = timex_cart_data();
- int timex_cart_type = timex_cart->type;
- UINT8 timex_cart_chunks = timex_cart->chunks;
- UINT8 *DOCK = timex_cart->data;
-
- ExROM = memregion("maincpu")->base() + 0x014000;
+ UINT8 *DOCK = m_dock_crt->base();
+ UINT8 *ExROM = memregion("maincpu")->base() + 0x014000;
+ UINT8 *ChosenROM;
if (m_port_f4_data & 0x01)
{
@@ -253,11 +227,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank1")->set_base(DOCK);
space.install_read_bank(0x0000, 0x1fff, "bank1");
- if (timex_cart_chunks&0x01)
+ if (m_ram_chunks & 0x01)
space.install_write_bank(0x0000, 0x1fff, "bank9");
else
space.unmap_write(0x0000, 0x1fff);
@@ -292,11 +266,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank2")->set_base(DOCK+0x2000);
space.install_read_bank(0x2000, 0x3fff, "bank2");
- if (timex_cart_chunks&0x02)
+ if (m_ram_chunks & 0x02)
space.install_write_bank(0x2000, 0x3fff, "bank10");
else
space.unmap_write(0x2000, 0x3fff);
@@ -330,11 +304,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank3")->set_base(DOCK+0x4000);
space.install_read_bank(0x4000, 0x5fff, "bank3");
- if (timex_cart_chunks&0x04)
+ if (m_ram_chunks & 0x04)
space.install_write_bank(0x4000, 0x5fff, "bank11");
else
space.unmap_write(0x4000, 0x5fff);
@@ -367,11 +341,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank4")->set_base(DOCK+0x6000);
space.install_read_bank(0x6000, 0x7fff, "bank4");
- if (timex_cart_chunks&0x08)
+ if (m_ram_chunks & 0x08)
space.install_write_bank(0x6000, 0x7fff, "bank12");
else
space.unmap_write(0x6000, 0x7fff);
@@ -404,11 +378,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank5")->set_base(DOCK+0x8000);
space.install_read_bank(0x8000, 0x9fff,"bank5");
- if (timex_cart_chunks&0x10)
+ if (m_ram_chunks & 0x10)
space.install_write_bank(0x8000, 0x9fff,"bank13");
else
space.unmap_write(0x8000, 0x9fff);
@@ -441,11 +415,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank6")->set_base(DOCK+0xa000);
space.install_read_bank(0xa000, 0xbfff, "bank6");
- if (timex_cart_chunks&0x20)
+ if (m_ram_chunks & 0x20)
space.install_write_bank(0xa000, 0xbfff, "bank14");
else
space.unmap_write(0xa000, 0xbfff);
@@ -479,11 +453,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank7")->set_base(DOCK+0xc000);
space.install_read_bank(0xc000, 0xdfff, "bank7");
- if (timex_cart_chunks&0x40)
+ if (m_ram_chunks & 0x40)
space.install_write_bank(0xc000, 0xdfff, "bank15");
else
space.unmap_write(0xc000, 0xdfff);
@@ -516,11 +490,11 @@ void spectrum_state::ts2068_update_memory()
}
else
{
- if (timex_cart_type == TIMEX_CART_DOCK)
+ if (m_dock_cart_type == TIMEX_CART_DOCK)
{
membank("bank8")->set_base(DOCK+0xe000);
space.install_read_bank(0xe000, 0xffff, "bank8");
- if (timex_cart_chunks&0x80)
+ if (m_ram_chunks & 0x80)
space.install_write_bank(0xe000, 0xffff, "bank16");
else
space.unmap_write(0xe000, 0xffff);
@@ -570,9 +544,13 @@ MACHINE_RESET_MEMBER(spectrum_state,ts2068)
{
m_port_ff_data = 0;
m_port_f4_data = 0;
+
+ astring region_tag;
+ m_dock_crt = memregion(region_tag.cpy(m_dock->tag()).cat(GENERIC_ROM_REGION_TAG));
+ m_dock_cart_type = (m_dock->exists()) ? TIMEX_CART_DOCK : TIMEX_CART_NONE;
+
ts2068_update_memory();
MACHINE_RESET_CALL_MEMBER(spectrum);
-
}
@@ -613,88 +591,68 @@ MACHINE_RESET_MEMBER(spectrum_state,tc2048)
DEVICE_IMAGE_LOAD_MEMBER( spectrum_state, timex_cart )
{
- int file_size;
- dynamic_buffer file_data;
-
+ UINT32 size = m_dock->common_get_size("rom");
+ UINT8 *DOCK;
int chunks_in_file = 0;
+ dynamic_buffer header;
+ header.resize(9);
- int i;
-
- logerror ("Trying to load cart\n");
-
- file_size = image.length();
-
- if (file_size < 0x09)
+ if (size % 0x2000 != 9)
{
- logerror ("Bad file size\n");
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
return IMAGE_INIT_FAIL;
}
-
- file_data.resize(file_size);
-
- image.fread(file_data, file_size);
-
- for (i=0; i<8; i++)
- if(file_data[i+1]&0x02) chunks_in_file++;
-
- if (chunks_in_file*0x2000+0x09 != file_size)
+ if (image.software_entry() != NULL)
{
- logerror ("File corrupted\n");
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Loading from softlist is not supported yet");
return IMAGE_INIT_FAIL;
}
-
- switch (file_data[0x00])
+
+ m_dock->rom_alloc(0x10000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ DOCK = m_dock->get_rom_base();
+
+ // check header
+ image.fread(header, 9);
+
+ for (int i = 0; i < 8; i++)
+ if (header[i + 1] & 0x02) chunks_in_file++;
+
+ if (chunks_in_file * 0x2000 + 0x09 != size)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
+ return IMAGE_INIT_FAIL;
+ }
+
+ switch (header[0])
{
case 0x00: logerror ("DOCK cart\n");
- timex_cart.type = TIMEX_CART_DOCK;
- timex_cart.data = global_alloc_array(UINT8, 0x10000);
- if (!timex_cart.data)
- {
- logerror ("Memory allocate error\n");
- return IMAGE_INIT_FAIL;
- }
- chunks_in_file = 0;
- for (i=0; i<8; i++)
+ m_ram_chunks = 0;
+ for (int i = 0; i < 8; i++)
+ {
+ m_ram_chunks = m_ram_chunks | ((header[i + 1] & 0x01) << i);
+ if (header[i + 1] & 0x02)
+ image.fread(DOCK + i * 0x2000, 0x2000);
+ else
{
- timex_cart.chunks = timex_cart.chunks | ((file_data[i+1]&0x01)<<i);
- if (file_data[i+1]&0x02)
- {
- memcpy (timex_cart.data+i*0x2000, file_data+0x09+chunks_in_file*0x2000, 0x2000);
- chunks_in_file++;
- }
+ if (header[i + 1] & 0x01)
+ memset(DOCK + i * 0x2000, 0x00, 0x2000);
else
- {
- if (file_data[i+1]&0x01)
- memset (timex_cart.data+i*0x2000, 0x00, 0x2000);
- else
- memset (timex_cart.data+i*0x2000, 0xff, 0x2000);
- }
+ memset(DOCK + i * 0x2000, 0xff, 0x2000);
}
- break;
-
- default: logerror ("Cart type not supported\n");
- timex_cart.type = TIMEX_CART_NONE;
- return IMAGE_INIT_FAIL;
+ }
+ break;
+
+ default:
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cart type not supported");
+ return IMAGE_INIT_FAIL;
}
+
+ logerror ("Cart loaded [Chunks %02x]\n", m_ram_chunks);
- logerror ("Cart loaded\n");
- logerror ("Chunks %02x\n", timex_cart.chunks);
return IMAGE_INIT_PASS;
}
-DEVICE_IMAGE_UNLOAD_MEMBER( spectrum_state, timex_cart )
-{
- if (timex_cart.data)
- {
- global_free_array(timex_cart.data);
- timex_cart.data = NULL;
- }
- timex_cart.type = TIMEX_CART_NONE;
- timex_cart.chunks = 0x00;
-}
-
-
/* F4 Character Displayer - tc2048 code is inherited from the spectrum */
static const gfx_layout ts2068_charlayout =
{
@@ -737,12 +695,9 @@ static MACHINE_CONFIG_DERIVED( ts2068, spectrum_128 )
/* cartridge */
MCFG_DEVICE_REMOVE("cartslot")
-
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("dck")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_LOAD(spectrum_state,timex_cart)
- MCFG_CARTSLOT_UNLOAD(spectrum_state,timex_cart)
+ MCFG_GENERIC_CARTSLOT_ADD("dockslot", generic_plain_slot, NULL)
+ MCFG_GENERIC_EXTENSIONS("dck")
+ MCFG_GENERIC_LOAD(spectrum_state, timex_cart)
/* internal ram */
MCFG_RAM_MODIFY(RAM_TAG)
@@ -788,7 +743,6 @@ MACHINE_CONFIG_END
ROM_START(tc2048)
ROM_REGION(0x10000,"maincpu",0)
ROM_LOAD("tc2048.rom",0x0000,0x4000, CRC(f1b5fa67) SHA1(febb2d495b6eda7cdcb4074935d6e9d9f328972d))
- ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_NOCLEAR | ROM_NOMIRROR | ROM_OPTIONAL)
ROM_END
ROM_START(ts2068)
diff --git a/src/mess/drivers/vector06.c b/src/mess/drivers/vector06.c
index 4f6729e95f5..0dba67d923d 100644
--- a/src/mess/drivers/vector06.c
+++ b/src/mess/drivers/vector06.c
@@ -183,9 +183,10 @@ static MACHINE_CONFIG_START( vector06, vector06_state )
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(vector_floppy_interface)
/* cartridge */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("emr")
- MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "vector06_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,emr")
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "vector06_cart")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -196,7 +197,7 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( vector06 )
- ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "unboot32k", "Universal Boot 32K")
ROMX_LOAD( "unboot32k.rt", 0x10000, 0x8000, CRC(28c9b5cd) SHA1(8cd7fb658896a7066ae93b10eaafa0f12139ad81), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "unboot2k", "Universal Boot 2K")
@@ -209,28 +210,24 @@ ROM_START( vector06 )
ROMX_LOAD( "bootos.rt", 0x10000, 0x0200, CRC(46bef038) SHA1(6732f4a360cd38112c53c458842d31f5b035cf59), ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "boot512", "Boot 512")
ROMX_LOAD( "boot512.rt", 0x10000, 0x0200, CRC(a0b1c6b2) SHA1(f6fe15cb0974aed30f9b7aa72133324a66d1ed3f), ROM_BIOS(6))
- ROM_CART_LOAD("cart", 0x18000, 0x8000, ROM_OPTIONAL)
ROM_END
ROM_START( vec1200 )
- ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "vec1200.bin", 0x10000, 0x2000, CRC(37349224) SHA1(060fbb2c1a89040c929521cfd58cb6f1431a8b75))
- ROM_CART_LOAD("cart", 0x18000, 0x8000, ROM_OPTIONAL)
ROM_REGION( 0x0200, "palette", 0 )
ROM_LOAD( "palette.bin", 0x0000, 0x0200, CRC(74b7376b) SHA1(fb56b60babd7e6ed68e5f4e791ad2800d7ef6729))
ROM_END
ROM_START( pk6128c )
- ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "6128.bin", 0x10000, 0x4000, CRC(d4f68433) SHA1(ef5ac75f9240ca8996689c23642d4e47e5e774d8))
- ROM_CART_LOAD("cart", 0x18000, 0x8000, ROM_OPTIONAL)
ROM_END
ROM_START( krista2 )
- ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "krista2.epr", 0x10000, 0x0200, CRC(df5440b0) SHA1(bcbbb3cc10aeb17c1262b45111d20279266b9ba4))
- ROM_CART_LOAD("cart", 0x18000, 0x8000, ROM_OPTIONAL)
ROM_LOAD( "krista2.pal", 0x0000, 0x0200, CRC(b243da33) SHA1(9af7873e6f8bf452c8d831833ffb02dce833c095))
ROM_END
/* Driver */
diff --git a/src/mess/includes/cgenie.h b/src/mess/includes/cgenie.h
index f95f676ed00..0393c1c3c71 100644
--- a/src/mess/includes/cgenie.h
+++ b/src/mess/includes/cgenie.h
@@ -11,6 +11,8 @@
#include "imagedev/cassette.h"
#include "machine/ram.h"
#include "sound/ay8910.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
// CRTC 6845
struct CRTC6845
@@ -46,6 +48,7 @@ public:
m_fontram(*this, "fontram"),
m_maincpu(*this, "maincpu"),
m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
m_ram(*this, RAM_TAG),
m_ay8910(*this, "ay8910"),
m_gfxdecode(*this, "gfxdecode"),
@@ -91,6 +94,7 @@ public:
DECLARE_WRITE8_MEMBER(cgenie_sh_control_port_w);
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
+ required_device<generic_slot_device> m_cart;
required_device<ram_device> m_ram;
required_device<ay8910_device> m_ay8910;
required_device<gfxdecode_device> m_gfxdecode;
@@ -143,6 +147,7 @@ public:
DECLARE_WRITE8_MEMBER( cgenie_index_w );
DECLARE_WRITE8_MEMBER( cgenie_register_w );
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cgenie_cart);
};
#endif /* CGENIE_H_ */
diff --git a/src/mess/includes/orion.h b/src/mess/includes/orion.h
index da163628c4c..6f40ab5de82 100644
--- a/src/mess/includes/orion.h
+++ b/src/mess/includes/orion.h
@@ -9,11 +9,14 @@
#include "machine/wd_fdc.h"
#include "includes/radio86.h"
+#include "cpu/z80/z80.h"
+#include "cpu/i8085/i8085.h"
#include "machine/i8255.h"
#include "machine/ram.h"
#include "machine/mc146818.h"
#include "sound/speaker.h"
#include "sound/ay8910.h"
+#include "sound/wave.h"
class orion_state : public radio86_state
diff --git a/src/mess/includes/radio86.h b/src/mess/includes/radio86.h
index fde5cfc4014..d2f5dd00e1e 100644
--- a/src/mess/includes/radio86.h
+++ b/src/mess/includes/radio86.h
@@ -11,6 +11,8 @@
#include "machine/i8257.h"
#include "video/i8275.h"
#include "imagedev/cassette.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
class radio86_state : public driver_device
@@ -25,6 +27,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
m_dma8257(*this, "dma8257"),
m_ppi8255_1(*this, "ppi8255_1"),
m_ppi8255_2(*this, "ppi8255_2"),
@@ -73,7 +76,8 @@ public:
DECLARE_WRITE8_MEMBER(radio86_8255_portc_w2);
DECLARE_READ8_MEMBER(rk7007_8255_portc_r);
DECLARE_WRITE_LINE_MEMBER(hrq_w);
- DECLARE_READ8_MEMBER(radio86_romdisk_porta_r);
+ DECLARE_READ8_MEMBER(radio86rom_romdisk_porta_r);
+ DECLARE_READ8_MEMBER(radio86ram_romdisk_porta_r);
DECLARE_WRITE8_MEMBER(radio86_romdisk_portb_w);
DECLARE_WRITE8_MEMBER(radio86_romdisk_portc_w);
DECLARE_WRITE8_MEMBER(mikrosha_8255_font_page_w);
@@ -84,6 +88,7 @@ public:
protected:
required_device<cassette_image_device> m_cassette;
+ optional_device<generic_slot_device> m_cart; // for ROMDisk - only Radio86K & Orion?
optional_device<i8257_device> m_dma8257;
required_device<i8255_device> m_ppi8255_1;
optional_device<i8255_device> m_ppi8255_2;
diff --git a/src/mess/includes/spectrum.h b/src/mess/includes/spectrum.h
index e4334384d12..27b7a5bee25 100644
--- a/src/mess/includes/spectrum.h
+++ b/src/mess/includes/spectrum.h
@@ -70,6 +70,15 @@ struct EVENT_LIST_ITEM
};
+enum
+{
+ TIMEX_CART_NONE,
+ TIMEX_CART_DOCK,
+ TIMEX_CART_EXROM,
+ TIMEX_CART_HOME
+};
+
+
class spectrum_state : public driver_device
{
public:
@@ -81,6 +90,7 @@ public:
m_ram(*this, RAM_TAG),
m_speaker(*this, "speaker"),
m_cart(*this, "cartslot"),
+ m_dock(*this, "dockslot"),
m_upd765(*this, "upd765"),
m_upd765_0(*this, "upd765:0"),
m_upd765_1(*this, "upd765:1"),
@@ -171,8 +181,11 @@ public:
void screen_eof_spectrum(screen_device &screen, bool state);
INTERRUPT_GEN_MEMBER(spec_interrupt);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( spectrum_cart );
+
+ // for timex cart only
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( timex_cart );
- DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( timex_cart );
+ int m_dock_cart_type, m_ram_chunks;
+ memory_region *m_dock_crt;
unsigned int m_previous_border_x, m_previous_border_y;
bitmap_ind16 m_border_bitmap;
@@ -192,6 +205,7 @@ protected:
required_device<ram_device> m_ram;
required_device<speaker_sound_device> m_speaker;
optional_device<generic_slot_device> m_cart;
+ optional_device<generic_slot_device> m_dock;
optional_device<upd765a_device> m_upd765;
optional_device<floppy_connector> m_upd765_0;
optional_device<floppy_connector> m_upd765_1;
diff --git a/src/mess/includes/vector06.h b/src/mess/includes/vector06.h
index 06fac2e956b..4a8ad06fe64 100644
--- a/src/mess/includes/vector06.h
+++ b/src/mess/includes/vector06.h
@@ -15,9 +15,10 @@
#include "machine/ram.h"
#include "machine/wd17xx.h"
#include "imagedev/cassette.h"
-#include "imagedev/cartslot.h"
#include "imagedev/flopdrv.h"
#include "formats/basicdsk.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
class vector06_state : public driver_device
@@ -27,6 +28,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
m_fdc(*this, "wd1793"),
m_ppi(*this, "ppi8255"),
m_ppi2(*this, "ppi8255_2"),
@@ -36,6 +38,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
+ required_device<generic_slot_device> m_cart;
required_device<fd1793_device> m_fdc;
required_device<i8255_device> m_ppi;
required_device<i8255_device> m_ppi2;
@@ -57,7 +60,7 @@ public:
UINT8 m_keyboard_mask;
UINT8 m_color_index;
UINT8 m_video_mode;
- UINT16 m_romdisk_msb;
+ UINT8 m_romdisk_msb;
UINT8 m_romdisk_lsb;
UINT8 m_vblank_state;
void vector06_set_video_mode(int width);
diff --git a/src/mess/machine/cgenie.c b/src/mess/machine/cgenie.c
index f3977fb7ed7..a2da2cadfdf 100644
--- a/src/mess/machine/cgenie.c
+++ b/src/mess/machine/cgenie.c
@@ -101,18 +101,15 @@ void cgenie_state::machine_reset()
}
/* copy EXT ROM, if enabled or wipe out that memory area */
- if( ioport("DSW0")->read() & 0x20 )
+ if (ioport("DSW0")->read() & 0x20 && m_cart->exists())
{
- space.install_rom(0xe000, 0xefff, 0); // mess 0135u3 need to check
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0xe000, 0xefff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
logerror("cgenie EXT enabled\n");
- memcpy(&memregion("maincpu")->base()[0x0e000],
- &memregion("maincpu")->base()[0x12000], 0x1000);
}
else
{
space.nop_readwrite(0xe000, 0xefff);
logerror("cgenie EXT disabled\n");
- memset(&memregion("maincpu")->base()[0x0e000], 0x00, 0x1000);
}
m_cass_level = 0;
diff --git a/src/mess/machine/orion.c b/src/mess/machine/orion.c
index c785c772ef5..015aa008767 100644
--- a/src/mess/machine/orion.c
+++ b/src/mess/machine/orion.c
@@ -22,8 +22,11 @@
READ8_MEMBER(orion_state::orion_romdisk_porta_r)
{
- UINT8 *romdisk = m_region_maincpu->base() + 0x10000;
- return romdisk[m_romdisk_msb*256+m_romdisk_lsb];
+ UINT16 addr = (m_romdisk_msb << 8) | m_romdisk_lsb;
+ if (m_cart->exists() && addr < m_cart->get_rom_size())
+ return m_cart->read_rom(space, addr);
+ else
+ return 0xff;
}
WRITE8_MEMBER(orion_state::orion_romdisk_portb_w)
diff --git a/src/mess/machine/radio86.c b/src/mess/machine/radio86.c
index 4e77c33ef15..46ea0bf1d93 100644
--- a/src/mess/machine/radio86.c
+++ b/src/mess/machine/radio86.c
@@ -155,7 +155,16 @@ WRITE8_MEMBER(radio86_state::radio86_pagesel)
m_disk_sel = data;
}
-READ8_MEMBER(radio86_state::radio86_romdisk_porta_r)
+READ8_MEMBER(radio86_state::radio86rom_romdisk_porta_r)
+{
+ UINT16 addr = (m_romdisk_msb << 8) | m_romdisk_lsb;
+ if (m_cart->exists() && addr < m_cart->get_rom_size())
+ return m_cart->read_rom(space, addr);
+ else
+ return 0xff;
+}
+
+READ8_MEMBER(radio86_state::radio86ram_romdisk_porta_r)
{
UINT8 *romdisk = m_region_maincpu->base() + 0x10000;
if ((m_disk_sel & 0x0f) ==0) {
diff --git a/src/mess/machine/vector06.c b/src/mess/machine/vector06.c
index 20f93af4c34..0e135b11d9d 100644
--- a/src/mess/machine/vector06.c
+++ b/src/mess/machine/vector06.c
@@ -66,9 +66,11 @@ WRITE8_MEMBER( vector06_state::vector06_color_set )
READ8_MEMBER( vector06_state::vector06_romdisk_portb_r )
{
- UINT8 *romdisk = memregion("maincpu")->base() + 0x18000;
- UINT16 addr = (m_romdisk_msb | m_romdisk_lsb) & 0x7fff;
- return romdisk[addr];
+ UINT16 addr = (m_romdisk_msb << 8) | m_romdisk_lsb;
+ if (m_cart->exists() && addr < m_cart->get_rom_size())
+ return m_cart->read_rom(space, addr);
+ else
+ return 0xff;
}
WRITE8_MEMBER( vector06_state::vector06_romdisk_porta_w )
@@ -78,7 +80,7 @@ WRITE8_MEMBER( vector06_state::vector06_romdisk_porta_w )
WRITE8_MEMBER( vector06_state::vector06_romdisk_portc_w )
{
- m_romdisk_msb = data << 8;
+ m_romdisk_msb = data;
}
READ8_MEMBER( vector06_state::vector06_8255_1_r )