summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/am1000.cpp
blob: bab4bb80447b085d0c0b1ff8a31b182fcad0a46b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// license:BSD-3-Clause
// copyright-holders:AJR
/****************************************************************************

    Skeleton driver for Alpha Micro AM-1000 system.

    This system was sold in various configurations beginning in 1982.

****************************************************************************/

#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
//#include "machine/6840ptm.h"
//#include "machine/6850acia.h"
//#include "machine/com8116.h"
//#include "machine/msm5832.h"

class am1000_state : public driver_device
{
public:
	am1000_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag)
		, m_maincpu(*this, "maincpu")
		, m_subcpu(*this, "subcpu")
		, m_mainprom(*this, "mainprom")
		, m_mainram(*this, "mainram")
	{
	}

	void am1000(machine_config &config);

protected:
	virtual void machine_start() override;
	virtual void machine_reset() override;

private:
	u16 rom_ram_r(offs_t offset, u16 mem_mask);
	void control_w(u8 data);

	void main_map(address_map &map);
	void sub_map(address_map &map);

	required_device<m68000_device> m_maincpu;
	required_device<z80_device> m_subcpu;
	required_region_ptr<u16> m_mainprom;
	required_shared_ptr<u16> m_mainram;

	bool m_ram_enabled;
};


void am1000_state::machine_start()
{
	save_item(NAME(m_ram_enabled));
}

void am1000_state::machine_reset()
{
	m_ram_enabled = false;
}


u16 am1000_state::rom_ram_r(offs_t offset, u16 mem_mask)
{
	if (m_ram_enabled)
		return m_mainram[offset];
	else
		return m_mainprom[offset & m_mainprom.mask()];
}

void am1000_state::control_w(u8 data)
{
	m_ram_enabled = true;
}


void am1000_state::main_map(address_map &map)
{
	map(0x000000, 0x07ffff).r(FUNC(am1000_state::rom_ram_r)).writeonly().share("mainram"); // TMM41256P-12 x16
	map(0x800000, 0x801fff).rom().region("mainprom", 0);
	map(0xfffe00, 0xfffe00).w(FUNC(am1000_state::control_w));
}

void am1000_state::sub_map(address_map &map)
{
	map(0x0000, 0x07ff).rom().region("subprom", 0);
	map(0x4000, 0x4fff).ram(); // NEC D4016C-2 x2
}


static INPUT_PORTS_START(am1000)
INPUT_PORTS_END


void am1000_state::am1000(machine_config &config)
{
	M68000(config, m_maincpu, 16_MHz_XTAL / 2); // MK68000P-8B
	m_maincpu->set_addrmap(AS_PROGRAM, &am1000_state::main_map);

	Z80(config, m_subcpu, 16_MHz_XTAL / 4); // NEC D780C-1
	m_subcpu->set_addrmap(AS_PROGRAM, &am1000_state::sub_map);
}


ROM_START(am1000)
	ROM_REGION16_BE(0x2000, "mainprom", 0) // "© COPYRIGHT 1988 ALPHA MICRO" on labels; "COPR. 1985 ALMI" in byte-swapped data
	ROM_LOAD16_BYTE("169-13_c00.u83", 0x0000, 0x1000, CRC(1d9cc8c0) SHA1(fced7bde6dbee4b54050bc7a91fc8eb74a659823))
	ROM_LOAD16_BYTE("169-12_c00.u82", 0x0001, 0x1000, CRC(72bca8ae) SHA1(67d7a13ea2d630af8e6aefeb1a30b2de8cf6012a))
	// Adjacent 24-pin sockets at U100 and U101 are both unpopulated

	ROM_REGION(0x800, "subprom", 0)
	ROM_LOAD("169-05_b00.u162", 0x000, 0x800, CRC(e0f8bb40) SHA1(ac2531994eb90447d320401948af07723e51c8f9))
ROM_END


COMP(1988, am1000, 0, 0, am1000, am1000, am1000_state, empty_init, "Alpha Micro", "AM-1000", MACHINE_IS_SKELETON)