(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)
This commit is contained in:
Curt Coder 2012-10-26 16:08:52 +00:00
parent 4c72225c6e
commit 88ceab4e84
11 changed files with 1599 additions and 90 deletions

2
.gitattributes vendored
View File

@ -6706,6 +6706,8 @@ src/mess/machine/c65.c svneol=native#text/plain
src/mess/machine/c8280.c svneol=native#text/plain
src/mess/machine/c8280.h svneol=native#text/plain
src/mess/machine/cbm.c svneol=native#text/plain
src/mess/machine/cbm2_24k.c svneol=native#text/plain
src/mess/machine/cbm2_24k.h svneol=native#text/plain
src/mess/machine/cbm2_graphic.c svneol=native#text/plain
src/mess/machine/cbm2_graphic.h svneol=native#text/plain
src/mess/machine/cbm2_std.c svneol=native#text/plain

View File

@ -2,24 +2,6 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="cbm2_cart" description="Commodore CBM-II cartridges">
<software name="calcresu">
<description>Calc Result</description>
<year>1983</year>
<publisher>Handic Software</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank3" size="0x2000">
<rom name="calc_result-bx700.bin" size="0x2000" crc="4775ebb3" sha1="5c6928a9cd8a3ce6a1d11221292b832295d6543e" offset="0" />
</dataarea>
</part>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1070662">
<rom name="calc_result_700_bx_single_version_v1.0.d82" size="1070662" crc="244a2122" sha1="44661ed8e3307bb967f97ce1f5a247ca3cded0b3" offset="0" />
</dataarea>
</part>
</software>
<software name="profitxt">
<description>ProfiText</description>
<year>198?</year>
@ -102,17 +84,4 @@
</part>
</software>
<software name="wordresu">
<description>Word Result</description>
<year>198?</year>
<publisher>Handic Software</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x1000">
<!-- this is the Commodore 64 character generator ROM, used as a copy protection dongle -->
<rom name="901225-01.bin" size="0x1000" crc="ec4272ee" sha1="adc7c31e18c7c7413d54802ef2f4193da14711aa" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

File diff suppressed because it is too large Load Diff

View File

@ -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];
}
else
if (!_64kcasen && !aec && !viddaten && !viddat_tr)
{
return m_video_ram[offset & 0x3ff];
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];
}
}
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)
{
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) )
@ -2378,20 +2412,20 @@ ROM_END
//**************************************************************************
// 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, 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 (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, 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 (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
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

View File

@ -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 );

View File

@ -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;
}
}

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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 \