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
118
119
120
121
122
123
124
125
126
127
128
129
130
|
// license:BSD-3-Clause
// copyright-holders:hap
/*
Rockwell MM77/MM78 MCU
*/
#ifndef MAME_CPU_PPS41_MM78_H
#define MAME_CPU_PPS41_MM78_H
#pragma once
#include "mm76.h"
// pinout reference
/*
____ ____ ____ ____
BP 1 |* \_/ | 42 DIO9 BP 1 |* \_/ | 40 DIO9
A 2 | | 41 DIO8 A 2 | | 39 DIO8
CLKIN 3 | | 40 DIO7 XTLOUT 3 | | 38 DIO7
EXCLK 4 | | 39 DIO6 XTLIN 4 | | 37 DIO6
VC 5 | | 38 DIO5 VC 5 | | 36 DIO5
Vdd 6 | | 37 DIO4 Vdd 6 | | 35 DIO4
Vss 7 | | 36 DIO3 Vss 7 | | 34 DIO3
N/C 8 | | 35 DIO2 TEST 8 | | 33 DIO2
TEST 9 | | 34 DIO1 PI4 9 | | 32 DIO1
PI4 10 | MM77 | 33 DIO0 PI8 10 | MM77L | 31 DIO0
PI8 11 | MM78 | 32 INT1 PI3 11 | MM78L | 30 INT1
PI3 12 | | 31 INT0 PI7 12 | | 29 INT0
PI7 13 | | 30 DATAI PI6 13 | | 28 DATAI
PI6 14 | | 29 DATAO PI2 14 | | 27 DATAO
PI2 15 | | 28 CLOCK PI5 15 | | 26 CLOCK
PI5 16 | | 27 RIO4 PI1 16 | | 25 RIO4
Vdd 17 | | 26 RIO3 PO 17 | | 24 RIO3
PI1 18 | | 25 RIO2 RIO5 18 | | 23 RIO2
PO 19 | | 24 RIO1 RIO6 19 | | 22 RIO1
RIO5 20 | | 23 RIO8 RIO7 20 |___________| 21 RIO8
RIO6 21 |___________| 22 RIO7
*/
class mm78_device : public mm76_device
{
public:
mm78_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
mm78_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);
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override { ; }
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
// device_execute_interface overrides
virtual void execute_one() override;
void data_128x4(address_map &map);
void program_2k(address_map &map);
// opcode helpers
virtual bool op_is_eob(u8 op) override { return (op & 0xf8) == 0x08; };
virtual bool op_is_lb(u8 op) override { return (op & 0xf0) == 0x10; };
virtual bool op_is_lai(u8 op) override { return (op & 0xf0) == 0x40; };
// opcode handlers
virtual void op_lba() override;
virtual void op_acsk() override;
virtual void op_aisk() override;
virtual void op_sb() override;
virtual void op_rb() override;
virtual void op_skbf() override;
virtual void op_sos();
virtual void op_ros();
virtual void op_skisl();
virtual void op_sag();
virtual void op_lxa();
virtual void op_xax();
virtual void op_tlb();
virtual void op_tmlb();
virtual void op_tab();
virtual void op_ix();
virtual void op_ox();
virtual void op_ioa();
virtual void op_i1sk();
virtual void op_int0h();
virtual void op_int1l();
};
class mm78l_device : public mm78_device
{
public:
mm78l_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
class mm77_device : public mm78_device
{
public:
mm77_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
mm77_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);
void data_96x4(address_map &map);
void program_1_3k(address_map &map);
};
class mm77l_device : public mm77_device
{
public:
mm77l_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
void program_1_5k(address_map &map);
};
DECLARE_DEVICE_TYPE(MM78, mm78_device)
DECLARE_DEVICE_TYPE(MM78L, mm78l_device)
DECLARE_DEVICE_TYPE(MM77, mm77_device)
DECLARE_DEVICE_TYPE(MM77L, mm77l_device)
#endif // MAME_CPU_PPS41_MM78_H
|