mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
bbc: Implemented PMS Genie ROM device.
This commit is contained in:
parent
4437d3bbc2
commit
5f68641241
@ -396,6 +396,8 @@ if (BUSES["BBC_ROM"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/ram.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",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/genie.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/pal.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/pal.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/rom/rtc.cpp",
|
||||
|
115
src/devices/bus/bbc/rom/genie.cpp
Normal file
115
src/devices/bus/bbc/rom/genie.cpp
Normal file
@ -0,0 +1,115 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
// thanks-to:Derek Mathieson (original author of Genie)
|
||||
/***************************************************************************
|
||||
|
||||
PMS Genie
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "genie.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_PMSGENIE, bbc_pmsgenie_device, "bbc_pmsgenie", "PMS Genie ROM Board")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_palprom_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_pmsgenie_device::bbc_pmsgenie_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_PMSGENIE, tag, owner, clock)
|
||||
, device_bbc_rom_interface(mconfig, *this)
|
||||
, m_write_latch(0)
|
||||
, m_bank_latch(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_pmsgenie_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_write_latch));
|
||||
save_item(NAME(m_bank_latch));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
uint8_t bbc_pmsgenie_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
switch (offset >> 8)
|
||||
{
|
||||
case 0x1e:
|
||||
/* &9E00-&9EFF - Write value latch */
|
||||
m_write_latch = offset & 0xff;
|
||||
break;
|
||||
case 0x1f:
|
||||
/* &9F00-&9FFF - Bank select latch
|
||||
Bit
|
||||
0-2: RAM bank select
|
||||
3: Not used
|
||||
4-5: ROM bank select
|
||||
6: Not used
|
||||
7: Read / NOT Write for internal RAM */
|
||||
m_bank_latch = offset & 0xff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (offset & 0x2000)
|
||||
{
|
||||
case 0x0000:
|
||||
/* &8000-&9FFF - 4 Pages of 8K ROM (32K in total) */
|
||||
data = get_rom_base()[(offset & 0x1fff) | (m_bank_latch & 0x30) << 9];
|
||||
break;
|
||||
|
||||
case 0x2000:
|
||||
/* &A000-&BFFF - 8 Pages of 8K RAM (64K in total) */
|
||||
if (m_bank_latch & 0x80)
|
||||
{
|
||||
/* RAM read */
|
||||
if (m_bank_latch & 0x04)
|
||||
{
|
||||
data = get_nvram_base()[(offset & 0x1fff) | (m_bank_latch & 0x03) << 13];
|
||||
}
|
||||
else
|
||||
{
|
||||
data = get_ram_base()[(offset & 0x1fff) | (m_bank_latch & 0x03) << 13];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* RAM write */
|
||||
if (m_bank_latch & 0x04)
|
||||
{
|
||||
get_nvram_base()[(offset & 0x1fff) | (m_bank_latch & 0x03) << 13] = m_write_latch;
|
||||
}
|
||||
else
|
||||
{
|
||||
get_ram_base()[(offset & 0x1fff) | (m_bank_latch & 0x03) << 13] = m_write_latch;
|
||||
}
|
||||
data = m_write_latch;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
48
src/devices/bus/bbc/rom/genie.h
Normal file
48
src/devices/bus/bbc/rom/genie.h
Normal file
@ -0,0 +1,48 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
BBC Micro ROM carrier boards
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_BBC_ROM_GENIE_H
|
||||
#define MAME_BUS_BBC_ROM_GENIE_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bbc_genie_device
|
||||
|
||||
class bbc_pmsgenie_device : public device_t,
|
||||
public device_bbc_rom_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_pmsgenie_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 uint8_t read(offs_t offset) override;
|
||||
virtual uint32_t get_rom_size() override { return 0x4000; }
|
||||
|
||||
private:
|
||||
uint8_t m_write_latch;
|
||||
uint8_t m_bank_latch;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_PMSGENIE, bbc_pmsgenie_device)
|
||||
|
||||
|
||||
#endif // MAME_BUS_BBC_ROM_GENIE_H
|
@ -207,7 +207,7 @@ void bbc_romslot_device::write(offs_t offset, uint8_t data)
|
||||
#include "rom.h"
|
||||
#include "ram.h"
|
||||
#include "dfs.h"
|
||||
//#include "genie.h"
|
||||
#include "genie.h"
|
||||
#include "pal.h"
|
||||
//#include "replay.h"
|
||||
#include "rtc.h"
|
||||
@ -226,7 +226,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("genie", BBC_PMSGENIE);
|
||||
device.option_add_internal("genie", BBC_PMSGENIE);
|
||||
device.option_add_internal("mrme00", BBC_MRME00);
|
||||
//device.option_add_internal("replay", BBC_REPLAY);
|
||||
device.option_add_internal("stlrtc", BBC_STLRTC);
|
||||
|
Loading…
Reference in New Issue
Block a user