summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2012-10-26 16:08:52 +0000
committer Curt Coder <curtcoder@mail.com>2012-10-26 16:08:52 +0000
commit88ceab4e84d6e6efe6fe0aa73c9d70996f8908ab (patch)
tree7aee7653cf1641e905089cc5dcf7735eb370ffe0 /src
parent4c72225c6e44b1a9470d553713e4ca58f0414c23 (diff)
(MESS) p500: Added VIC video/color RAM access thru PLA. (nw)
(MESS) cbm2: Implemented the 24K RAM cartridge, added CBUG disks to software list. (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mess/drivers/cbm2.c150
-rw-r--r--src/mess/includes/cbm2.h3
-rw-r--r--src/mess/machine/cbm2_24k.c88
-rw-r--r--src/mess/machine/cbm2_24k.h49
-rw-r--r--src/mess/machine/cbmipt.c1
-rw-r--r--src/mess/machine/cbmipt.h1
-rw-r--r--src/mess/mess.lst4
-rw-r--r--src/mess/mess.mak1
8 files changed, 236 insertions, 61 deletions
diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c
index 0b97d7e9415..7d234ab7fe4 100644
--- a/src/mess/drivers/cbm2.c
+++ b/src/mess/drivers/cbm2.c
@@ -7,7 +7,6 @@
- shift lock
- Hungarian keyboard
- cbm620hu charom banking?
- - read VIC video/color RAM thru PLA (Sphi2 = 1, AE = 0)
- user port
- co-processor bus
- 8088 co-processor board
@@ -450,7 +449,7 @@ void p500_state::bankswitch(offs_t offset, offs_t va, int srw, int ba, int ae, i
// read_memory -
//-------------------------------------------------
-UINT8 p500_state::read_memory(address_space &space, offs_t offset, offs_t va, int ba, int ae, UINT8 *clrnib)
+UINT8 p500_state::read_memory(address_space &space, offs_t offset, offs_t va, int ba, int ae)
{
int srw = 1, busy2 = 1, refen = 0;
@@ -467,27 +466,6 @@ UINT8 p500_state::read_memory(address_space &space, offs_t offset, offs_t va, in
&cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden);
UINT8 data = 0xff;
- *clrnib = 0xf;
-
- if (vsysaden)
- {
- if (!_64kcasen && !aec && !viddaten && !viddat_tr)
- {
- data = m_ram->pointer()[(m_vicbnksel << 14) | va];
- }
- if (!clrnibcs)
- {
- *clrnib = m_color_ram[va & 0x3ff];
- }
- if (!vidmatcs)
- {
- data = m_video_ram[va & 0x3ff];
- }
- if (!charomcs)
- {
- data = m_charom[va & 0xfff];
- }
- }
if (clrniben)
{
@@ -662,9 +640,8 @@ READ8_MEMBER( p500_state::read )
{
int ba = 0, ae = 1;
offs_t va = 0xffff;
- UINT8 clrnib = 0xf;
- return read_memory(space, offset, va, ba, ae, &clrnib);
+ return read_memory(space, offset, va, ba, ae);
}
@@ -686,21 +663,75 @@ WRITE8_MEMBER( p500_state::write )
READ8_MEMBER( p500_state::vic_videoram_r )
{
-/* int ba = !m_vic->ba_r(), ae = m_vic->aec_r();
- offs_t va = offset;
- UINT8 clrnib = 0xf;
- logerror("VIC %04x phi0 %u BA %u AEC %u VICDOTSEL %u STATVID %u\n", va, m_vic->phi0_r(), !m_vic->ba_r(), m_vic->aec_r(), m_vicdotsel, m_statvid);
+ int srw = 1, busy2 = 1, refen = 0;
+ int ba = !m_vic->ba_r(), ae = m_vic->aec_r();
+ int datxen = 1, dramxen = 1, clrniben = 1, _64kcasen = 1, casenb = 1, viddaten = 1, viddat_tr = 1;
+ int clrnibcs = 1, extbufcs = 1, discromcs = 1, buframcs = 1, charomcs = 1, viccs = 1, vidmatcs = 1;
+ int csbank1 = 1, csbank2 = 1, csbank3 = 1, basiclocs = 1, basichics = 1, kernalcs = 1;
+ int cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
+ int aec = 1, vsysaden = 1;
- return read_memory(space, 0, va, ba, ae, &clrnib);
-*/
- if (offset < 0x1000)
+ bankswitch(0, offset, srw, ba, ae, busy2, refen,
+ &datxen, &dramxen, &clrniben, &_64kcasen, &casenb, &viddaten, &viddat_tr,
+ &clrnibcs, &extbufcs, &discromcs, &buframcs, &charomcs, &viccs, &vidmatcs,
+ &csbank1, &csbank2, &csbank3, &basiclocs, &basichics, &kernalcs,
+ &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden);
+
+ UINT8 data = 0xff;
+ UINT8 clrnib = 0xf;
+
+ if (vsysaden)
{
- return m_charom[offset & 0xfff];
+ if (!_64kcasen && !aec && !viddaten && !viddat_tr)
+ {
+ data = m_ram->pointer()[(m_vicbnksel << 14) | offset];
+ }
+ if (!clrnibcs)
+ {
+ clrnib = m_color_ram[offset & 0x3ff];
+ }
+ if (!vidmatcs)
+ {
+ data = m_video_ram[offset & 0x3ff];
+ }
+ if (!charomcs)
+ {
+ data = m_charom[offset & 0xfff];
+ }
}
- else
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// vic_videoram_r -
+//-------------------------------------------------
+
+READ8_MEMBER( p500_state::vic_colorram_r )
+{
+ int srw = 1, busy2 = 1, refen = 0;
+ int ba = !m_vic->ba_r(), ae = m_vic->aec_r();
+ int datxen = 1, dramxen = 1, clrniben = 1, _64kcasen = 1, casenb = 1, viddaten = 1, viddat_tr = 1;
+ int clrnibcs = 1, extbufcs = 1, discromcs = 1, buframcs = 1, charomcs = 1, viccs = 1, vidmatcs = 1;
+ int csbank1 = 1, csbank2 = 1, csbank3 = 1, basiclocs = 1, basichics = 1, kernalcs = 1;
+ int cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
+ int aec = 1, vsysaden = 1;
+
+ bankswitch(0, offset, srw, ba, ae, busy2, refen,
+ &datxen, &dramxen, &clrniben, &_64kcasen, &casenb, &viddaten, &viddat_tr,
+ &clrnibcs, &extbufcs, &discromcs, &buframcs, &charomcs, &viccs, &vidmatcs,
+ &csbank1, &csbank2, &csbank3, &basiclocs, &basichics, &kernalcs,
+ &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden);
+
+ UINT8 data = 0x0f;
+
+ if (!clrnibcs)
{
- return m_video_ram[offset & 0x3ff];
+ data = m_color_ram[offset & 0x3ff];
}
+
+ return data;
}
@@ -741,7 +772,7 @@ ADDRESS_MAP_END
//-------------------------------------------------
static ADDRESS_MAP_START( vic_colorram_map, AS_1, 8, p500_state )
- AM_RANGE(0x000, 0x3ff) AM_RAM AM_SHARE("color_ram")
+ AM_RANGE(0x000, 0x3ff) AM_READ(vic_colorram_r)
ADDRESS_MAP_END
@@ -1708,6 +1739,9 @@ MACHINE_START_MEMBER( p500_state, p500 )
MACHINE_START_CALL_MEMBER(cbm2);
+ // allocate memory
+ m_color_ram.allocate(0x400);
+
// state saving
save_item(NAME(m_statvid));
save_item(NAME(m_vicdotsel));
@@ -2236,10 +2270,10 @@ ROM_END
//-------------------------------------------------
-// ROM( cbm620hu )
+// ROM( cbm620_hu )
//-------------------------------------------------
-ROM_START( cbm620hu )
+ROM_START( cbm620_hu )
ROM_REGION( 0x4000, "basic", 0 )
ROM_LOAD( "610.u60", 0x0000, 0x4000, CRC(8eed0d7e) SHA1(9d06c5c3c012204eaaef8b24b1801759b62bf57e) )
@@ -2353,10 +2387,10 @@ ROM_END
//-------------------------------------------------
-// ROM( cbm720sw )
+// ROM( cbm720_se )
//-------------------------------------------------
-ROM_START( cbm720sw )
+ROM_START( cbm720_se )
ROM_REGION( 0x4000, "basic", 0 )
ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
@@ -2377,21 +2411,21 @@ ROM_END
// SYSTEM DRIVERS
//**************************************************************************
-// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
-COMP( 1983, p500, 0, 0, p500_ntsc, cbm2, driver_device, 0, "Commodore Business Machines", "P500 ~ C128-40 ~ PET-II (NTSC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // VIC 64K RAM mode is not supported
-COMP( 1983, p500p, p500, 0, p500_pal, cbm2, driver_device, 0, "Commodore Business Machines", "P500 ~ C128-40 ~ PET-II (PAL)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // VIC 64K RAM mode is not supported
-
-COMP( 1983, b500, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B500 (NTSC)", GAME_SUPPORTS_SAVE )
-COMP( 1983, b128, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B128 (NTSC)", GAME_SUPPORTS_SAVE )
-COMP( 1983, b256, p500, 0, b256, cbm2, driver_device, 0, "Commodore Business Machines", "B256 (NTSC)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm610, p500, 0, cbm610, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 610 (PAL)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm620, p500, 0, cbm620, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 620 (PAL)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm620hu, p500, 0, cbm620, cbm2hu, driver_device, 0, "Commodore Business Machines", "CBM 620 (Hungary)", GAME_SUPPORTS_SAVE )
-
-COMP( 1983, b128hp, p500, 0, b128hp, cbm2, driver_device, 0, "Commodore Business Machines", "B128-80HP (NTSC)", GAME_SUPPORTS_SAVE )
-COMP( 1983, b256hp, p500, 0, b256hp, cbm2, driver_device, 0, "Commodore Business Machines", "B256-80HP (NTSC)", GAME_SUPPORTS_SAVE )
-COMP( 1983, bx256hp, p500, 0, bx256hp, cbm2, driver_device, 0, "Commodore Business Machines", "BX256-80HP (NTSC)", GAME_NOT_WORKING ) // 8088 co-processor is missing
-COMP( 1983, cbm710, p500, 0, cbm710, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 710 (PAL)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm720, p500, 0, cbm720, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 720 (PAL)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm720sw, p500, 0, cbm720, cbm2sw, driver_device, 0, "Commodore Business Machines", "CBM 720 (Sweden/Finland)", GAME_SUPPORTS_SAVE )
-COMP( 1983, cbm730, p500, 0, cbm730, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 730 (PAL)", GAME_NOT_WORKING ) // 8088 co-processor is missing
+// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
+COMP( 1983, p500, 0, 0, p500_ntsc, cbm2, driver_device, 0, "Commodore Business Machines", "P500 (NTSC)", GAME_SUPPORTS_SAVE )
+COMP( 1983, p500p, p500, 0, p500_pal, cbm2, driver_device, 0, "Commodore Business Machines", "P500 (PAL)", GAME_SUPPORTS_SAVE )
+
+COMP( 1983, b500, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B500", GAME_SUPPORTS_SAVE )
+COMP( 1983, b128, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B128", GAME_SUPPORTS_SAVE )
+COMP( 1983, b256, p500, 0, b256, cbm2, driver_device, 0, "Commodore Business Machines", "B256", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm610, p500, 0, cbm610, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 610", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm620, p500, 0, cbm620, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 620", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm620_hu, p500, 0, cbm620, cbm2hu, driver_device, 0, "Commodore Business Machines", "CBM 620 (Hungary)", GAME_SUPPORTS_SAVE )
+
+COMP( 1983, b128hp, p500, 0, b128hp, cbm2, driver_device, 0, "Commodore Business Machines", "B128-80HP", GAME_SUPPORTS_SAVE )
+COMP( 1983, b256hp, p500, 0, b256hp, cbm2, driver_device, 0, "Commodore Business Machines", "B256-80HP", GAME_SUPPORTS_SAVE )
+COMP( 1983, bx256hp, p500, 0, bx256hp, cbm2, driver_device, 0, "Commodore Business Machines", "BX256-80HP", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // 8088 co-processor is missing
+COMP( 1983, cbm710, p500, 0, cbm710, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 710", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm720, p500, 0, cbm720, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 720", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm720_se, p500, 0, cbm720, cbm2sw, driver_device, 0, "Commodore Business Machines", "CBM 720 (Sweden/Finland)", GAME_SUPPORTS_SAVE )
+COMP( 1983, cbm730, p500, 0, cbm730, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 730", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // 8088 co-processor is missing
diff --git a/src/mess/includes/cbm2.h b/src/mess/includes/cbm2.h
index 859d63114f9..eb9c3371586 100644
--- a/src/mess/includes/cbm2.h
+++ b/src/mess/includes/cbm2.h
@@ -213,13 +213,14 @@ public:
int *csbank1, int *csbank2, int *csbank3, int *basiclocs, int *basichics, int *kernalcs,
int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs, int *aec, int *vsysaden);
- UINT8 read_memory(address_space &space, offs_t offset, offs_t va, int ba, int ae, UINT8 *clrnib);
+ UINT8 read_memory(address_space &space, offs_t offset, offs_t va, int ba, int ae);
void write_memory(address_space &space, offs_t offset, UINT8 data, int ba, int ae);
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
DECLARE_READ8_MEMBER( vic_videoram_r );
+ DECLARE_READ8_MEMBER( vic_colorram_r );
DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
DECLARE_WRITE_LINE_MEMBER( tpi1_irq_w );
diff --git a/src/mess/machine/cbm2_24k.c b/src/mess/machine/cbm2_24k.c
new file mode 100644
index 00000000000..a2f5ec61b88
--- /dev/null
+++ b/src/mess/machine/cbm2_24k.c
@@ -0,0 +1,88 @@
+/**********************************************************************
+
+ GLA 24K RAM cartridge emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#include "cbm2_24k.h"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type CBM2_24K = &device_creator<cbm2_24k_cartridge_device>;
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// cbm2_24k_cartridge_device - constructor
+//-------------------------------------------------
+
+cbm2_24k_cartridge_device::cbm2_24k_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, CBM2_24K, "24K RAM/ROM cartridge", tag, owner, clock),
+ device_cbm2_expansion_card_interface(mconfig, *this)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void cbm2_24k_cartridge_device::device_start()
+{
+ cbm2_ram_pointer(machine(), 0x6000);
+}
+
+
+//-------------------------------------------------
+// cbm2_bd_r - cartridge data read
+//-------------------------------------------------
+
+UINT8 cbm2_24k_cartridge_device::cbm2_bd_r(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3)
+{
+ if (!csbank1)
+ {
+ data = m_ram[offset];
+ }
+ else if (!csbank2)
+ {
+ data = m_ram[0x2000 | offset];
+ }
+ else if (!csbank3)
+ {
+ data = m_ram[0x4000 | offset];
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// cbm2_bd_w - cartridge data write
+//-------------------------------------------------
+
+void cbm2_24k_cartridge_device::cbm2_bd_w(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3)
+{
+ if (!csbank1)
+ {
+ m_ram[offset] = data;
+ }
+ else if (!csbank2)
+ {
+ m_ram[0x2000 | offset] = data;
+ }
+ else if (!csbank3)
+ {
+ m_ram[0x4000 | offset] = data;
+ }
+}
diff --git a/src/mess/machine/cbm2_24k.h b/src/mess/machine/cbm2_24k.h
new file mode 100644
index 00000000000..027b866d4fb
--- /dev/null
+++ b/src/mess/machine/cbm2_24k.h
@@ -0,0 +1,49 @@
+/**********************************************************************
+
+ GLA 24K RAM cartridge emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __CBM2_24K_CARTRIDGE__
+#define __CBM2_24K_CARTRIDGE__
+
+
+#include "emu.h"
+#include "machine/cbm2exp.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> cbm2_24k_cartridge_device
+
+class cbm2_24k_cartridge_device : public device_t,
+ public device_cbm2_expansion_card_interface
+{
+public:
+ // construction/destruction
+ cbm2_24k_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete() { m_shortname = "cbm2_24k"; }
+ virtual void device_start();
+
+ // device_cbm2_expansion_card_interface overrides
+ virtual UINT8 cbm2_bd_r(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3);
+ virtual void cbm2_bd_w(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3);
+};
+
+
+// device type definition
+extern const device_type CBM2_24K;
+
+
+#endif
diff --git a/src/mess/machine/cbmipt.c b/src/mess/machine/cbmipt.c
index 3b0fdf1c6eb..d1199887609 100644
--- a/src/mess/machine/cbmipt.c
+++ b/src/mess/machine/cbmipt.c
@@ -1024,6 +1024,7 @@ INPUT_PORTS_END
SLOT_INTERFACE_START( cbm2_expansion_cards )
+ SLOT_INTERFACE("24k", CBM2_24K)
SLOT_INTERFACE_INTERNAL("standard", CBM2_STD)
SLOT_INTERFACE_INTERNAL("graphic", CBM2_GRAPHIC)
SLOT_INTERFACE_END
diff --git a/src/mess/machine/cbmipt.h b/src/mess/machine/cbmipt.h
index 870d165974e..df249b45d14 100644
--- a/src/mess/machine/cbmipt.h
+++ b/src/mess/machine/cbmipt.h
@@ -62,6 +62,7 @@
#include "machine/c64_zaxxon.h"
#include "machine/c128_comal80.h"
#include "machine/cbm2_std.h"
+#include "machine/cbm2_24k.h"
#include "machine/cbm2_graphic.h"
#include "machine/c1541.h"
#include "machine/c1551.h"
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 209cd91afc1..2782f520bac 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -612,13 +612,13 @@ b128 // Commodore B128
b256 // Commodore B256
cbm610 // Commodore CBM 610
cbm620 // Commodore CBM 620
-cbm620hu // Commodore CBM 620 (Hungary)
+cbm620_hu // Commodore CBM 620 (Hungary)
b128hp // Commodore B128HP
b256hp // Commodore B256HP
bx256hp // Commodore BX256HP
cbm710 // Commodore CBM 710
cbm720 // Commodore CBM 720
-cbm720sw // Commodore CBM 720 (Sweden / Finland)
+cbm720_se // Commodore CBM 720 (Sweden / Finland)
cbm730
p500 // Commodore P500 (proto, a.k.a. C128-40, PET-II)
p500p
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index ff6e280990f..f5df2be50b7 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -896,6 +896,7 @@ $(MESSOBJ)/cbm.a: \
$(MESS_DRIVERS)/cbm2.o \
$(MESS_MACHINE)/cbm2exp.o \
$(MESS_MACHINE)/cbm2_std.o \
+ $(MESS_MACHINE)/cbm2_24k.o \
$(MESS_MACHINE)/cbm2_graphic.o \
$(MESS_DRIVERS)/c65.o \
$(MESS_MACHINE)/c65.o \