mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
CoCo: Added Disto RAM cartridge (#6664)
* adding disto ram cart * logging update * minor change stil no worky * DSTOTEST.BIN passed tests.
This commit is contained in:
parent
df9f867b6b
commit
2dfb819208
@ -3306,6 +3306,8 @@ if (BUSES["COCO"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_dcmodem.h",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_orch90.cpp",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_orch90.h",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_ram.cpp",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_ram.h",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_ssc.cpp",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_ssc.h",
|
||||
MAME_DIR .. "src/devices/bus/coco/coco_pak.cpp",
|
||||
|
@ -64,6 +64,7 @@
|
||||
#include "coco_pak.h"
|
||||
#include "coco_rs232.h"
|
||||
#include "coco_ssc.h"
|
||||
#include "coco_ram.h"
|
||||
|
||||
#define SLOT1_TAG "slot1"
|
||||
#define SLOT2_TAG "slot2"
|
||||
@ -164,6 +165,7 @@ static void coco_cart_slot1_3(device_slot_interface &device)
|
||||
device.option_add("dcmodem", COCO_DCMODEM);
|
||||
device.option_add("orch90", COCO_ORCH90);
|
||||
device.option_add("ssc", COCO_SSC);
|
||||
device.option_add("ram", COCO_PAK_RAM);
|
||||
device.option_add("games_master", COCO_PAK_GMC);
|
||||
device.option_add("banked_16k", COCO_PAK_BANKED);
|
||||
device.option_add("pak", COCO_PAK);
|
||||
@ -177,6 +179,7 @@ static void coco_cart_slot4(device_slot_interface &device)
|
||||
device.option_add("dcmodem", COCO_DCMODEM);
|
||||
device.option_add("orch90", COCO_ORCH90);
|
||||
device.option_add("ssc", COCO_SSC);
|
||||
device.option_add("ram", COCO_PAK_RAM);
|
||||
device.option_add("games_master", COCO_PAK_GMC);
|
||||
device.option_add("banked_16k", COCO_PAK_BANKED);
|
||||
device.option_add("pak", COCO_PAK);
|
||||
|
183
src/devices/bus/coco/coco_ram.cpp
Normal file
183
src/devices/bus/coco/coco_ram.cpp
Normal file
@ -0,0 +1,183 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:tim lindner
|
||||
/***************************************************************************
|
||||
|
||||
coco_ram.cpp
|
||||
|
||||
Code for emulating the Disto RAM cartridge
|
||||
|
||||
This cartridge came in several forms: 256K, 512K, 768K, and 1024K.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "coco_ram.h"
|
||||
#include "cococart.h"
|
||||
#include "machine/ram.h"
|
||||
|
||||
#define STATICRAM_TAG "static_ram"
|
||||
|
||||
|
||||
// #define VERBOSE (LOG_GENERAL )
|
||||
#include "logmacro.h"
|
||||
|
||||
#define RAM_SIZE_IN_K 1024
|
||||
#define BUFFER_SIZE (RAM_SIZE_IN_K * 1024)
|
||||
|
||||
#define STRINGIZE_HELPER(expr) #expr
|
||||
#define STRINGIZE(expr) STRINGIZE_HELPER(expr)
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DECLARATIONS
|
||||
//**************************************************************************
|
||||
|
||||
namespace
|
||||
{
|
||||
// ======================> coco_pak_device
|
||||
|
||||
class coco_pak_ram_device :
|
||||
public device_t,
|
||||
public device_cococart_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
coco_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual DECLARE_WRITE8_MEMBER(scs_write) override;
|
||||
virtual DECLARE_READ8_MEMBER(scs_read) override;
|
||||
|
||||
private:
|
||||
required_device<ram_device> m_staticram;
|
||||
int m_offset;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(COCO_PAK_RAM, device_cococart_interface, coco_pak_ram_device, "cocopakram", "Disto " STRINGIZE(RAM_SIZE_IN_K) "K RAM Cartridge")
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// coco_pak_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
coco_pak_ram_device::coco_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, COCO_PAK_RAM, tag, owner, clock)
|
||||
, device_cococart_interface(mconfig, *this)
|
||||
, m_staticram(*this, STATICRAM_TAG)
|
||||
, m_offset(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE FRAGMENTS AND ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
|
||||
void coco_pak_ram_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
RAM(config, STATICRAM_TAG).set_default_size(STRINGIZE(RAM_SIZE_IN_K) "K").set_default_value(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void coco_pak_ram_device::device_start()
|
||||
{
|
||||
// initial state
|
||||
m_offset = 0;
|
||||
|
||||
// save state
|
||||
save_item(NAME(m_offset));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void coco_pak_ram_device::device_reset()
|
||||
{
|
||||
m_offset = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// scs_write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(coco_pak_ram_device::scs_write)
|
||||
{
|
||||
// int idata = data;
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
m_offset = ((m_offset & 0xffff00) + data);
|
||||
break;
|
||||
case 1:
|
||||
m_offset = ((m_offset & 0xff00ff) + (data << 8));
|
||||
break;
|
||||
case 2:
|
||||
m_offset = ((m_offset & 0x00ffff) + (data << 16));
|
||||
break;
|
||||
case 3:
|
||||
if( m_offset < BUFFER_SIZE )
|
||||
{
|
||||
m_staticram->write(m_offset, data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
LOG("scs_write: %s: %06x, %02x, %02x\n", machine().describe_context(), m_offset, offset, data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// scs_read
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(coco_pak_ram_device::scs_read)
|
||||
{
|
||||
uint8_t data = 0x00;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
data = (m_offset) & 0xff;
|
||||
break;
|
||||
case 1:
|
||||
data = (m_offset & 0xff00ff) >> 8;
|
||||
break;
|
||||
case 2:
|
||||
data = (m_offset & 0xff0000) >> 16;
|
||||
break;
|
||||
case 3:
|
||||
if( m_offset < BUFFER_SIZE )
|
||||
{
|
||||
data = m_staticram->read(m_offset);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
LOG("scs_read: %s: %06x, %02x, %02x\n", machine().describe_context(), m_offset, offset, data);
|
||||
return data;
|
||||
}
|
14
src/devices/bus/coco/coco_ram.h
Normal file
14
src/devices/bus/coco/coco_ram.h
Normal file
@ -0,0 +1,14 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:tim lindner
|
||||
#ifndef MAME_BUS_COCO_COCO_RAM_H
|
||||
#define MAME_BUS_COCO_COCO_RAM_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cococart.h"
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(COCO_PAK_RAM, device_cococart_interface)
|
||||
|
||||
#endif // MAME_BUS_COCO_COCO_RAM_H
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "bus/coco/coco_psg.h"
|
||||
#include "bus/coco/coco_rs232.h"
|
||||
#include "bus/coco/coco_ssc.h"
|
||||
#include "bus/coco/coco_ram.h"
|
||||
#include "bus/coco/coco_t4426.h"
|
||||
|
||||
#include "cpu/m6809/m6809.h"
|
||||
@ -415,6 +416,7 @@ void coco_cart(device_slot_interface &device)
|
||||
device.option_add("dcmodem", COCO_DCMODEM);
|
||||
device.option_add("orch90", COCO_ORCH90);
|
||||
device.option_add("ssc", COCO_SSC);
|
||||
device.option_add("ram", COCO_PAK_RAM);
|
||||
device.option_add("games_master", COCO_PAK_GMC);
|
||||
device.option_add("banked_16k", COCO_PAK_BANKED);
|
||||
device.option_add("pak", COCO_PAK);
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "bus/coco/dragon_sprites.h"
|
||||
#include "bus/coco/coco_pak.h"
|
||||
#include "bus/coco/coco_ssc.h"
|
||||
#include "bus/coco/coco_ram.h"
|
||||
#include "bus/coco/coco_orch90.h"
|
||||
#include "bus/coco/coco_gmc.h"
|
||||
#include "bus/coco/coco_psg.h"
|
||||
@ -207,6 +208,7 @@ void dragon_cart(device_slot_interface &device)
|
||||
device.option_add("jcbspch", DRAGON_JCBSPCH);
|
||||
device.option_add("sprites", DRAGON_SPRITES);
|
||||
device.option_add("ssc", COCO_SSC);
|
||||
device.option_add("ram", COCO_PAK_RAM);
|
||||
device.option_add("orch90", COCO_ORCH90);
|
||||
device.option_add("gmc", COCO_PAK_GMC);
|
||||
device.option_add("pak", COCO_PAK);
|
||||
|
Loading…
Reference in New Issue
Block a user