mn1400: add mn1405 device

New clones marked not working
-----------------------------
Scrabble Lexor: Computer Word Game (MN1405 version) [hap, Sean Riddle]
This commit is contained in:
hap 2023-05-06 22:07:22 +02:00
parent 3e707ab942
commit 0d002a80b5
8 changed files with 140 additions and 26 deletions

View File

@ -2,7 +2,7 @@
// copyright-holders:hap
/*
Matsushita MN1400 MCU
Matsushita MN1400, MN1405
TODO:
- stuff
@ -15,29 +15,23 @@ TODO:
#include "mn1400d.h"
// device definitions
DEFINE_DEVICE_TYPE(MN1400, mn1400_cpu_device, "mn1400", "Matsushita MN1400")
DEFINE_DEVICE_TYPE(MN1405, mn1405_cpu_device, "mn1405", "Matsushita MN1405")
// constructor
mn1400_cpu_device::mn1400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
mn1400_base_device(mconfig, type, tag, owner, clock, prgwidth, program, datawidth, data)
mn1400_cpu_device::mn1400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int stack_levels, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
mn1400_base_device(mconfig, type, tag, owner, clock, stack_levels, prgwidth, program, datawidth, data)
{ }
mn1400_cpu_device::mn1400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
mn1400_cpu_device(mconfig, MN1400, tag, owner, clock, 10, address_map_constructor(FUNC(mn1400_cpu_device::program_1024x8), this), 6, address_map_constructor(FUNC(mn1400_cpu_device::data_64x4), this))
mn1400_cpu_device(mconfig, MN1400, tag, owner, clock, 2 /* stack levels */, 10 /* rom bits */, address_map_constructor(FUNC(mn1400_cpu_device::program_1kx8), this), 6 /* ram bits */, address_map_constructor(FUNC(mn1400_cpu_device::data_64x4), this))
{ }
// internal memory maps
void mn1400_cpu_device::program_1024x8(address_map &map)
{
map(0x000, 0x3ff).rom();
}
void mn1400_cpu_device::data_64x4(address_map &map)
{
map(0x00, 0x3f).ram();
}
mn1405_cpu_device::mn1405_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
mn1400_cpu_device(mconfig, MN1405, tag, owner, clock, 2, 11, address_map_constructor(FUNC(mn1405_cpu_device::program_2kx8), this), 7, address_map_constructor(FUNC(mn1405_cpu_device::data_128x4), this))
{ }
// disasm

View File

@ -2,7 +2,7 @@
// copyright-holders:hap
/*
Matsushita MN1400 MCU
Matsushita MN1400, MN1405
*/
@ -25,7 +25,7 @@ public:
mn1400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
mn1400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
mn1400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int stack_levels, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
@ -34,16 +34,20 @@ protected:
virtual void execute_one() override;
virtual bool op_has_param(u8 op) override;
void program_1024x8(address_map &map);
void data_64x4(address_map &map);
// opcode helpers
void op_illegal();
// opcode handlers
};
class mn1405_cpu_device : public mn1400_cpu_device
{
public:
mn1405_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(MN1400, mn1400_cpu_device)
DECLARE_DEVICE_TYPE(MN1405, mn1405_cpu_device)
#endif // MAME_CPU_MN1400_MN1400_H

View File

@ -12,10 +12,11 @@ x
#include "mn1400base.h"
mn1400_base_device::mn1400_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
mn1400_base_device::mn1400_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int stack_levels, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
cpu_device(mconfig, type, tag, owner, clock),
m_program_config("program", ENDIANNESS_LITTLE, 8, prgwidth, 0, program),
m_data_config("data", ENDIANNESS_LITTLE, 8, datawidth, 0, data),
m_stack_levels(stack_levels),
m_prgwidth(prgwidth),
m_datawidth(datawidth)
{ }
@ -90,6 +91,31 @@ void mn1400_base_device::device_reset()
}
//-------------------------------------------------
// common internal memory maps
//-------------------------------------------------
void mn1400_base_device::program_1kx8(address_map &map)
{
map(0x000, 0x3ff).rom();
}
void mn1400_base_device::program_2kx8(address_map &map)
{
map(0x000, 0x7ff).rom();
}
void mn1400_base_device::data_64x4(address_map &map)
{
map(0x00, 0x3f).ram();
}
void mn1400_base_device::data_128x4(address_map &map)
{
map(0x00, 0x7f).ram();
}
//-------------------------------------------------
// execute
//-------------------------------------------------

View File

@ -23,7 +23,7 @@ public:
protected:
// construction/destruction
mn1400_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
mn1400_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int stack_levels, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
// device-level overrides
virtual void device_start() override;
@ -45,9 +45,15 @@ protected:
address_space *m_program;
address_space *m_data;
void program_1kx8(address_map &map);
void program_2kx8(address_map &map);
void data_64x4(address_map &map);
void data_128x4(address_map &map);
int m_icount;
int m_state_count;
int m_stack_levels;
int m_prgwidth; // ROM/RAM address size
int m_datawidth; // "
u16 m_prgmask; // "

View File

@ -20,6 +20,9 @@ TODO:
#include "screen.h"
#include "speaker.h"
// internal artwork
#include "scrablexa.lh"
#include "hh_mn1400_test.lh" // common test-layout - use external artwork
@ -155,6 +158,63 @@ ROM_END
/*******************************************************************************
Selchow & Righter Scrabble Lexor
* PCB label: 2294HB
* MN1405MS MCU (die label: 1405 MS-0)
* 8-digit 14-seg LEDs, 2-bit sound
This is the MN1405 version, see scrablex.cpp for the MB8841 version.
*******************************************************************************/
class scrablexa_state : public hh_mn1400_state
{
public:
scrablexa_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_mn1400_state(mconfig, type, tag)
{ }
void scrablexa(machine_config &config);
private:
};
// handlers
// inputs
static INPUT_PORTS_START( scrablexa )
INPUT_PORTS_END
// config
void scrablexa_state::scrablexa(machine_config &config)
{
// basic machine hardware
MN1405(config, m_maincpu, 300000);
// video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_scrablexa);
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
// roms
ROM_START( scrablexa )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mn1405ms", 0x0000, 0x0800, NO_DUMP )
ROM_END
} // anonymous namespace
/*******************************************************************************
@ -163,5 +223,7 @@ ROM_END
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1979, compperf, 0, 0, compperf, compperf, compperf_state, empty_init, "Lakeside", "Computer Perfection", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1979, compperf, 0, 0, compperf, compperf, compperf_state, empty_init, "Lakeside", "Computer Perfection", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
SYST( 1980, scrablexa, scrablex, 0, scrablexa, scrablexa, scrablexa_state, empty_init, "Selchow & Righter", "Scrabble Lexor: Computer Word Game (MN1405 version)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )

View File

@ -11,7 +11,7 @@ Hardware notes:
- Fujitsu MB8841 MCU
- 8-digit 14-seg LEDs, 2-bit sound
There's also a version of this game on a Panasonic MN1405 MCU.
There's also a version of this game on a Matsushita MN1405 MCU (see hh_mn1400.cpp).
*******************************************************************************/
@ -228,4 +228,4 @@ ROM_END
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1980, scrablex, 0, 0, scrablex, scrablex, scrablex_state, empty_init, "Selchow & Righter", "Scrabble Lexor: Computer Word Game", MACHINE_SUPPORTS_SAVE )
SYST( 1980, scrablex, 0, 0, scrablex, scrablex, scrablex_state, empty_init, "Selchow & Righter", "Scrabble Lexor: Computer Word Game (MB8841 version)", MACHINE_SUPPORTS_SAVE )

View File

@ -0,0 +1,21 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
-->
<mamelayout version="2">
<element name="digit" defstate="0">
<led14seg><color red="1.0" green="0.1" blue="0.15" /></led14seg>
</element>
<view name="Internal Layout">
<element name="digit0" ref="digit"><bounds x="0" y="0" width="10" height="15" /></element>
<element name="digit1" ref="digit"><bounds x="10" y="0" width="10" height="15" /></element>
<element name="digit2" ref="digit"><bounds x="20" y="0" width="10" height="15" /></element>
<element name="digit3" ref="digit"><bounds x="30" y="0" width="10" height="15" /></element>
<element name="digit4" ref="digit"><bounds x="40" y="0" width="10" height="15" /></element>
<element name="digit5" ref="digit"><bounds x="50" y="0" width="10" height="15" /></element>
<element name="digit6" ref="digit"><bounds x="60" y="0" width="10" height="15" /></element>
<element name="digit7" ref="digit"><bounds x="70" y="0" width="10" height="15" /></element>
</view>
</mamelayout>

View File

@ -18713,6 +18713,7 @@ gjungler // Gakken
@source:handheld/hh_mn1400.cpp
compperf // Lakeside
scrablexa // Selchow & Righter
@source:handheld/hh_pic16.cpp
drdunk // Kmart