summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mn1400/mn1400.h
blob: 1f31fc39f5e33523d9e37c886052a7eddb3d689c (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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// license:BSD-3-Clause
// copyright-holders:hap
/*

  Matsushita MN1400, MN1405

*/

#ifndef MAME_CPU_MN1400_MN1400_H
#define MAME_CPU_MN1400_MN1400_H

#pragma once

#include "mn1400base.h"

// pinout reference

/*
            ____   ____                      ____   ____
    Vss  1 |    \_/    | 40 OSC      Vss  1 |    \_/    | 28 OSC
   CO11  2 |           | 39 Vdd      CO9  2 |           | 27 Vdd
   CO10  3 |           | 38 DO7      CO8  3 |           | 26 SNS1
    CO9  4 |           | 37 DO6      CO7  4 |           | 25 SNS0
    CO8  5 |           | 36 DO5      CO6  5 |           | 24 DO0
    CO7  6 |           | 35 DO4      CO5  6 |  MN1400   | 23 DO1
    CO6  7 |           | 34 DO3      AI3  7 |  MN1402   | 22 DO2
    CO5  8 |  MN1400   | 33 DO2      AI2  8 |  MN1432   | 21 DO3
    CO4  9 |  MN1405   | 32 DO1      AI1  9 |           | 20 TST
    CO3 10 |  MN1430   | 31 DO0      AI0 10 |           | 19 RST
    CO2 11 |  MN1435   | 30 SNS1     BI3 11 |           | 18 EO3
    CO1 12 |  MN1450   | 29 SNS0     BI2 12 |           | 17 EO2
    CO0 13 |  MN1455   | 28 CSLCT    BI1 13 |           | 16 EO1
    AI3 14 |           | 27 RST      BI0 14 |___________| 15 EO0
    AI2 15 |           | 26 TST
    AI1 16 |           | 25 EO3
    AI0 17 |           | 24 EO2
    BI3 18 |           | 23 EO1
    BI2 19 |           | 22 EO0
    BI1 20 |___________| 21 BI0

*/

class mn1400_cpu_device : public mn1400_base_device
{
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 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;

	// device_execute_interface overrides
	virtual void execute_one() override;
	virtual bool op_has_param(u8 op) override;

	// opcode helpers
	u8 ram_r();
	void ram_w(u8 data);
	void set_z(u8 data);
	void set_cz(u8 data);
	void op_illegal();

	// opcode handlers
	void op_l();
	void op_ld();
	void op_li();
	void op_lic();
	void op_ldc();
	void op_st();
	void op_std();
	void op_stic();
	void op_stdc();
	void op_lx();
	void op_ly();
	void op_tax();
	void op_tay();
	void op_tya();
	void op_tacu();
	void op_tacl();
	void op_tcau();
	void op_tcal();

	void op_nop();
	void op_and();
	void op_andi();
	void op_or();
	void op_xor();
	void op_a();
	void op_ai();
	void op_cpl();
	void op_c();
	void op_ci();
	void op_cy();
	void op_sl();
	void op_icy();
	void op_dcy();
	void op_icm();
	void op_dcm();
	void op_sm();
	void op_rm();
	void op_tb();

	void op_ina();
	void op_inb();
	void op_otd();
	void op_otmd();
	void op_ote();
	void op_otie();
	void op_rco();
	void op_sco();
	void op_cco();

	void op_rc();
	void op_rp();
	void op_sc();
	void op_sp();
	void op_bs01();
	void op_bpcz();
	void op_jmp();
	void op_cal();
	void op_ret();
	void op_ec();
	void op_dc();
};

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