mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
bus/bbc/rom: Added support for the Gemini DataGem ROM carrier board.
This commit is contained in:
parent
b2a2942e3f
commit
382e6fea50
@ -543,6 +543,8 @@ if (BUSES["BBC_ROM"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/ram.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/nvram.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/nvram.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/datagem.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/datagem.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/dfs.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/dfs.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/genie.cpp",
|
||||
|
96
src/devices/bus/bbc/rom/datagem.cpp
Normal file
96
src/devices/bus/bbc/rom/datagem.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Gemini DataGem ROM Carrier
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "datagem.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_DATAGEM, bbc_datagem_device, "bbc_datagem", "Gemini DataGem ROM Carrier")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_datagem_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_datagem_device::bbc_datagem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_DATAGEM, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_bank(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_datagem_device::device_start()
|
||||
{
|
||||
/* register for save states */
|
||||
save_item(NAME(m_bank));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// decrypt_rom
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_datagem_device::decrypt_rom()
|
||||
{
|
||||
uint8_t *rom = get_rom_base();
|
||||
|
||||
for (int i = 0x0000; i < 0x6000; i++)
|
||||
{
|
||||
/* decrypt 16K and 8K ROM data lines */
|
||||
switch (rom[i] & 0x07)
|
||||
{
|
||||
case 0x01: case 0x06: rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 0, 1, 2); break;
|
||||
case 0x02: case 0x05: rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 2, 0, 1); break;
|
||||
case 0x03: case 0x04: rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0); break;
|
||||
}
|
||||
|
||||
/* decrypt additional 8K ROM data lines */
|
||||
if (i & 0x4000)
|
||||
{
|
||||
rom[i] = bitswap<8>(rom[i], 3, 6, 5, 4, 7, 2, 1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
uint8_t bbc_datagem_device::read(offs_t offset)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
/* switching zones for DataGem */
|
||||
switch (offset & 0x3fff)
|
||||
{
|
||||
case 0x1ffe: m_bank = 1; break;
|
||||
case 0x1fff: m_bank = 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset & 0x2000)
|
||||
{
|
||||
return get_rom_base()[(offset & 0x3fff) + (m_bank << 13)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_rom_base()[offset & 0x3fff];
|
||||
}
|
||||
}
|
48
src/devices/bus/bbc/rom/datagem.h
Normal file
48
src/devices/bus/bbc/rom/datagem.h
Normal file
@ -0,0 +1,48 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Gemini DataGem ROM Carrier
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_DATAGEM_H
|
||||
#define MAME_BUS_BBC_ROM_DATAGEM_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_datagem_device
|
||||
|
||||
class bbc_datagem_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_datagem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// device_bbc_rom_interface overrides
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void decrypt_rom() override;
|
||||
|
||||
private:
|
||||
uint8_t m_bank;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_DATAGEM, bbc_datagem_device)
|
||||
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_DATAGEM_H
|
@ -133,6 +133,8 @@ image_init_result bbc_romslot_device::call_load()
|
||||
else
|
||||
memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
|
||||
|
||||
m_cart->decrypt_rom();
|
||||
|
||||
if (get_software_region("ram"))
|
||||
m_cart->ram_alloc(get_software_region_length("ram"));
|
||||
|
||||
@ -208,6 +210,7 @@ void bbc_romslot_device::write(offs_t offset, uint8_t data)
|
||||
#include "rom.h"
|
||||
#include "ram.h"
|
||||
#include "nvram.h"
|
||||
#include "datagem.h"
|
||||
#include "dfs.h"
|
||||
#include "genie.h"
|
||||
#include "pal.h"
|
||||
@ -229,6 +232,7 @@ void bbc_rom_devices(device_slot_interface &device)
|
||||
device.option_add_internal("palabep", BBC_PALABEP);
|
||||
device.option_add_internal("palabe", BBC_PALABE);
|
||||
device.option_add_internal("palmo2", BBC_PALMO2);
|
||||
device.option_add_internal("datagem", BBC_DATAGEM);
|
||||
device.option_add_internal("genie", BBC_PMSGENIE);
|
||||
device.option_add_internal("dfse00", BBC_DFSE00);
|
||||
//device.option_add_internal("ramagic", BBC_RAMAGIC);
|
||||
|
@ -138,6 +138,9 @@ public:
|
||||
uint8_t* get_nvram_base() { return &m_nvram[0]; }
|
||||
uint32_t get_nvram_size() { return m_nvram.size(); }
|
||||
|
||||
// decrypt data lines
|
||||
virtual void decrypt_rom() { };
|
||||
|
||||
protected:
|
||||
device_bbc_rom_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user