mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
f2mc16: add MB90610A and MB90611A microcontrollers. [R. Belmont]
This commit is contained in:
parent
30970c8e93
commit
515bbedaf3
@ -2924,6 +2924,8 @@ if (CPUS["F2MC16"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/cpu/f2mc16/f2mc16.cpp",
|
||||
MAME_DIR .. "src/devices/cpu/f2mc16/f2mc16.h",
|
||||
MAME_DIR .. "src/devices/cpu/f2mc16/mb9061x.cpp",
|
||||
MAME_DIR .. "src/devices/cpu/f2mc16/mb9061x.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -3,11 +3,15 @@
|
||||
/***************************************************************************
|
||||
|
||||
Fujitsu Micro F2MC-16 series
|
||||
Emulation by R. Belmont
|
||||
|
||||
From 50,000 feet these chips look a lot like a 65C816 with no index
|
||||
registers. As you get closer, you can see the banking includes some
|
||||
concepts from 8086 segmentation, and the interrupt handling is 68000-like.
|
||||
|
||||
There are two main branches: F and L. They appear to be compatible with
|
||||
each other as far as their extentions to the base ISA not conflicting.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -62,8 +66,8 @@ void f2mc16_device::device_start()
|
||||
state_add(STATE_GENPC, "GENPC", m_temp).callimport().callexport().noshow();
|
||||
state_add(STATE_GENPCBASE, "CURPC", m_temp).callimport().callexport().noshow();
|
||||
state_add(F2MC16_PS, "PS", m_ps).formatstr("%04X");
|
||||
state_add(F2MC16_PCB, "DTB", m_dtb).formatstr("%02X");
|
||||
state_add(F2MC16_PCB, "ADB", m_adb).formatstr("%02X");
|
||||
state_add(F2MC16_DTB, "DTB", m_dtb).formatstr("%02X");
|
||||
state_add(F2MC16_ADB, "ADB", m_adb).formatstr("%02X");
|
||||
state_add(F2MC16_ACC, "AL", m_acc).formatstr("%08X");
|
||||
state_add(F2MC16_USB, "USB", m_usb).formatstr("%02X");
|
||||
state_add(F2MC16_USP, "USP", m_usp).formatstr("%04X");
|
||||
@ -113,7 +117,6 @@ void f2mc16_device::state_export(const device_state_entry &entry)
|
||||
void f2mc16_device::execute_run()
|
||||
{
|
||||
debugger_instruction_hook((m_pcb<<16) | m_pc);
|
||||
printf("Debug hook: %06x\n", (m_pcb<<16) | m_pc);
|
||||
|
||||
m_icount = 0;
|
||||
}
|
||||
|
95
src/devices/cpu/f2mc16/mb9061x.cpp
Normal file
95
src/devices/cpu/f2mc16/mb9061x.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/*
|
||||
Fujitsu Micro MB9061x Microcontroller Family
|
||||
Emulation by R. Belmont
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "mb9061x.h"
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(MB90610A, mb90610_device, "mb90610a", "Fujitsu MB90610A")
|
||||
DEFINE_DEVICE_TYPE(MB90611A, mb90611_device, "mb90611a", "Fujitsu MB90611A")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mb9061x_device - constructor
|
||||
//-------------------------------------------------
|
||||
mb9061x_device::mb9061x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map) :
|
||||
f2mc16_device(mconfig, type, tag, owner, clock),
|
||||
m_program_config("program", ENDIANNESS_LITTLE, 16, 24, 0, internal_map)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb9061x_device::device_start()
|
||||
{
|
||||
f2mc16_device::device_start();
|
||||
}
|
||||
|
||||
|
||||
device_memory_interface::space_config_vector mb9061x_device::memory_space_config() const
|
||||
{
|
||||
return space_config_vector {
|
||||
std::make_pair(AS_PROGRAM, &m_program_config)
|
||||
};
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb9061x_device::device_reset()
|
||||
{
|
||||
f2mc16_device::device_reset();
|
||||
}
|
||||
|
||||
void mb9061x_device::execute_set_input(int inputnum, int state)
|
||||
{
|
||||
}
|
||||
|
||||
/* MB90610 - "Evaluation device" with extra RAM */
|
||||
void mb90610_device::mb90610_map(address_map &map)
|
||||
{
|
||||
map(0x0100, 0x10ff).ram(); // 4K of internal RAM from 0x100 to 0x1100
|
||||
}
|
||||
|
||||
mb90610_device::mb90610_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
mb90610_device(mconfig, MB90610A, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
mb90610_device::mb90610_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
mb9061x_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(mb90610_device::mb90610_map), this))
|
||||
{
|
||||
}
|
||||
|
||||
/* MB90611 - Production version of this series */
|
||||
void mb90611_device::mb90611_map(address_map &map)
|
||||
{
|
||||
map(0x0100, 0x04ff).ram(); // 1K of internal RAM from 0x100 to 0x500
|
||||
}
|
||||
|
||||
mb90611_device::mb90611_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
mb90611_device(mconfig, MB90611A, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
mb90611_device::mb90611_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
mb9061x_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(mb90611_device::mb90611_map), this))
|
||||
{
|
||||
}
|
64
src/devices/cpu/f2mc16/mb9061x.h
Normal file
64
src/devices/cpu/f2mc16/mb9061x.h
Normal file
@ -0,0 +1,64 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
#ifndef MAME_CPU_F2MC16_MB9061X_H
|
||||
#define MAME_CPU_F2MC16_MB9061X_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "f2mc16.h"
|
||||
|
||||
//**************************************************************************
|
||||
// CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> m5074x_device
|
||||
|
||||
class mb9061x_device : public f2mc16_device
|
||||
{
|
||||
friend class mb90610_device;
|
||||
friend class mb90611_device;
|
||||
|
||||
public:
|
||||
const address_space_config m_program_config;
|
||||
|
||||
protected:
|
||||
// construction/destruction
|
||||
mb9061x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void execute_set_input(int inputnum, int state) override;
|
||||
virtual space_config_vector memory_space_config() const override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
class mb90610_device : public mb9061x_device
|
||||
{
|
||||
public:
|
||||
mb90610_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
void mb90610_map(address_map &map);
|
||||
protected:
|
||||
mb90610_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
class mb90611_device : public mb9061x_device
|
||||
{
|
||||
public:
|
||||
mb90611_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
void mb90611_map(address_map &map);
|
||||
protected:
|
||||
mb90611_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(MB90610A, mb90610_device)
|
||||
DECLARE_DEVICE_TYPE(MB90611A, mb90611_device)
|
||||
|
||||
#endif // MAME_CPU_F2MC16_MB9061X_H
|
@ -10,7 +10,7 @@
|
||||
#include "emu.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "cpu/f2mc16/f2mc16.h"
|
||||
#include "cpu/f2mc16/mb9061x.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
@ -54,8 +54,8 @@ INPUT_PORTS_END
|
||||
|
||||
void tomy_princ_state::tomy_princ(machine_config &config)
|
||||
{
|
||||
// F2MC-16L based CPU
|
||||
F2MC16(config, m_maincpu, 16_MHz_XTAL);
|
||||
// MB90611A microcontroller, F2MC-16L architecture
|
||||
MB90611A(config, m_maincpu, 16_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &tomy_princ_state::princ_map);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
|
Loading…
Reference in New Issue
Block a user