mirror of
https://github.com/holub/mame
synced 2025-07-03 09:06:08 +03:00
amerihok: Make some educated guesses regarding manufacturer, decade, MCU and sound chip types (nw)
z8: A few technical modifications to memory interface; add Z8681 type (nw)
This commit is contained in:
parent
b6d7d31d49
commit
a85ae608dd
@ -155,45 +155,54 @@ enum
|
|||||||
DEFINE_DEVICE_TYPE(Z8601, z8601_device, "z8601", "Z8601")
|
DEFINE_DEVICE_TYPE(Z8601, z8601_device, "z8601", "Z8601")
|
||||||
DEFINE_DEVICE_TYPE(UB8830D, ub8830d_device, "ub8830d", "UB8830D")
|
DEFINE_DEVICE_TYPE(UB8830D, ub8830d_device, "ub8830d", "UB8830D")
|
||||||
DEFINE_DEVICE_TYPE(Z8611, z8611_device, "z8611", "Z8611")
|
DEFINE_DEVICE_TYPE(Z8611, z8611_device, "z8611", "Z8611")
|
||||||
|
DEFINE_DEVICE_TYPE(Z8681, z8681_device, "z8681", "Z8681")
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
ADDRESS MAPS
|
ADDRESS MAPS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( program_2kb, AS_PROGRAM, 8, z8_device )
|
DEVICE_ADDRESS_MAP_START( program_2kb, 8, z8_device )
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_ROM
|
AM_RANGE(0x0000, 0x07ff) AM_ROM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( program_4kb, AS_PROGRAM, 8, z8_device )
|
DEVICE_ADDRESS_MAP_START( program_4kb, 8, z8_device )
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
z8_device::z8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int size)
|
z8_device::z8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t rom_size, address_map_delegate map)
|
||||||
: cpu_device(mconfig, type, tag, owner, clock)
|
: cpu_device(mconfig, type, tag, owner, clock)
|
||||||
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, (size == 4) ? ADDRESS_MAP_NAME(program_4kb) : ADDRESS_MAP_NAME(program_2kb))
|
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, map)
|
||||||
, m_data_config("data", ENDIANNESS_LITTLE, 8, 16, 0)
|
, m_data_config("data", ENDIANNESS_LITTLE, 8, 16, 0)
|
||||||
, m_input_cb{{*this}, {*this}, {*this}, {*this}}
|
, m_input_cb{{*this}, {*this}, {*this}, {*this}}
|
||||||
, m_output_cb{{*this}, {*this}, {*this}, {*this}}
|
, m_output_cb{{*this}, {*this}, {*this}, {*this}}
|
||||||
|
, m_rom_size(rom_size)
|
||||||
{
|
{
|
||||||
|
(void)m_rom_size; // not used at the moment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
z8601_device::z8601_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
z8601_device::z8601_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: z8_device(mconfig, Z8601, tag, owner, clock, 2)
|
: z8_device(mconfig, Z8601, tag, owner, clock, 0x800, address_map_delegate(FUNC(z8601_device::program_2kb), this))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ub8830d_device::ub8830d_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
ub8830d_device::ub8830d_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: z8_device(mconfig, UB8830D, tag, owner, clock, 2)
|
: z8_device(mconfig, UB8830D, tag, owner, clock, 0x800, address_map_delegate(FUNC(ub8830d_device::program_2kb), this))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
z8611_device::z8611_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
z8611_device::z8611_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: z8_device(mconfig, Z8611, tag, owner, clock, 4)
|
: z8_device(mconfig, Z8611, tag, owner, clock, 0x1000, address_map_delegate(FUNC(z8611_device::program_4kb), this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
z8681_device::z8681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: z8_device(mconfig, Z8681, tag, owner, clock, 0, address_map_delegate())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -775,6 +784,10 @@ void z8_device::device_reset()
|
|||||||
{
|
{
|
||||||
m_pc = 0x000c;
|
m_pc = 0x000c;
|
||||||
|
|
||||||
|
// crude hack for Z8681
|
||||||
|
if (m_rom_size == 0)
|
||||||
|
m_pc |= m_input_cb[0]() << 8;
|
||||||
|
|
||||||
register_write(Z8_REGISTER_TMR, 0x00);
|
register_write(Z8_REGISTER_TMR, 0x00);
|
||||||
register_write(Z8_REGISTER_PRE1, PRE1 & 0xfc);
|
register_write(Z8_REGISTER_PRE1, PRE1 & 0xfc);
|
||||||
register_write(Z8_REGISTER_PRE0, PRE0 & 0xfe);
|
register_write(Z8_REGISTER_PRE0, PRE0 & 0xfe);
|
||||||
|
@ -67,7 +67,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
z8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int size);
|
z8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t rom_size, address_map_delegate map);
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
@ -95,6 +95,8 @@ protected:
|
|||||||
virtual uint32_t disasm_max_opcode_bytes() const override { return 3; }
|
virtual uint32_t disasm_max_opcode_bytes() const override { return 3; }
|
||||||
virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override;
|
virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override;
|
||||||
|
|
||||||
|
DECLARE_ADDRESS_MAP(program_2kb, 8);
|
||||||
|
DECLARE_ADDRESS_MAP(program_4kb, 8);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
address_space_config m_program_config;
|
address_space_config m_program_config;
|
||||||
@ -108,6 +110,8 @@ private:
|
|||||||
devcb_read8 m_input_cb[4];
|
devcb_read8 m_input_cb[4];
|
||||||
devcb_write8 m_output_cb[4];
|
devcb_write8 m_output_cb[4];
|
||||||
|
|
||||||
|
uint32_t m_rom_size;
|
||||||
|
|
||||||
/* registers */
|
/* registers */
|
||||||
uint16_t m_pc; /* program counter */
|
uint16_t m_pc; /* program counter */
|
||||||
uint8_t m_r[256]; /* register file */
|
uint8_t m_r[256]; /* register file */
|
||||||
@ -344,6 +348,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class z8681_device : public z8_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
z8681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Zilog Z8601
|
// Zilog Z8601
|
||||||
DECLARE_DEVICE_TYPE(Z8601, z8601_device)
|
DECLARE_DEVICE_TYPE(Z8601, z8601_device)
|
||||||
|
|
||||||
@ -353,4 +364,7 @@ DECLARE_DEVICE_TYPE(UB8830D, ub8830d_device)
|
|||||||
// Zilog Z8611
|
// Zilog Z8611
|
||||||
DECLARE_DEVICE_TYPE(Z8611, z8611_device)
|
DECLARE_DEVICE_TYPE(Z8611, z8611_device)
|
||||||
|
|
||||||
|
// Zilog Z8681 ROMless
|
||||||
|
DECLARE_DEVICE_TYPE(Z8681, z8681_device)
|
||||||
|
|
||||||
#endif // MAME_CPU_Z8_Z8_H
|
#endif // MAME_CPU_Z8_Z8_H
|
||||||
|
@ -17,7 +17,7 @@ Processor is a ROMless MCU from the Z8 family.
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/z8/z8.h"
|
#include "cpu/z8/z8.h"
|
||||||
#include "sound/okim6295.h"
|
#include "sound/okim6376.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
@ -56,14 +56,14 @@ void amerihok_state::machine_reset()
|
|||||||
static MACHINE_CONFIG_START( amerihok )
|
static MACHINE_CONFIG_START( amerihok )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", Z8601, 8000000) // unknown clock; type definitely wrong
|
MCFG_CPU_ADD("maincpu", Z8681, XTAL_12MHz) // type guessed
|
||||||
MCFG_CPU_PROGRAM_MAP(amerihok_map)
|
MCFG_CPU_PROGRAM_MAP(amerihok_map)
|
||||||
// MCFG_CPU_VBLANK_INT_DRIVER("screen", amerihok_state, irq4_line_hold)
|
// MCFG_CPU_VBLANK_INT_DRIVER("screen", amerihok_state, irq4_line_hold)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
|
||||||
MCFG_OKIM6295_ADD("oki", 1000000, PIN7_HIGH) // maybe
|
MCFG_SOUND_ADD("oki", OKIM6376, 1000000) // 64-pin surface mount
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -79,4 +79,4 @@ ROM_START( amerihok )
|
|||||||
ROM_LOAD( "airh-u10", 0x80000, 0x40000, CRC(71ee6421) SHA1(10131fc7c009158308c4a8bb2b037101622c07a1) )
|
ROM_LOAD( "airh-u10", 0x80000, 0x40000, CRC(71ee6421) SHA1(10131fc7c009158308c4a8bb2b037101622c07a1) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
GAME( 19??, amerihok, 0, amerihok, amerihok, driver_device, 0, ROT0, "<unknown>", "Ameri-Hockey", MACHINE_IS_SKELETON_MECHANICAL )
|
GAME( 199?, amerihok, 0, amerihok, amerihok, driver_device, 0, ROT0, "Ameri Corporation", "Ameri-Hockey", MACHINE_IS_SKELETON_MECHANICAL )
|
||||||
|
Loading…
Reference in New Issue
Block a user