1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 #ifndef MAME_INCLUDES_MPZ80_H
4 #define MAME_INCLUDES_MPZ80_H
5 
6 #pragma once
7 
8 #include "bus/s100/s100.h"
9 #include "cpu/z80/z80.h"
10 #include "machine/ram.h"
11 
12 #define Z80_TAG         "17a"
13 #define AM9512_TAG      "17d"
14 #define S100_TAG        "s100"
15 
16 class mpz80_state : public driver_device
17 {
18 public:
mpz80_state(const machine_config & mconfig,device_type type,const char * tag)19 	mpz80_state(const machine_config &mconfig, device_type type, const char *tag)
20 		: driver_device(mconfig, type, tag),
21 			m_maincpu(*this, Z80_TAG),
22 			m_ram(*this, RAM_TAG),
23 			m_s100(*this, S100_TAG),
24 			m_rom(*this, Z80_TAG),
25 			m_map_ram(*this, "map_ram"),
26 			m_16c(*this, "16C"),
27 			m_nmi(1),
28 			m_pint(1),
29 			m_int_pend(0),
30 			m_pretrap(0),
31 			m_trap(0),
32 			m_trap_reset(0),
33 			m_trap_void(1),
34 			m_trap_halt(1),
35 			m_trap_int(1),
36 			m_trap_stop(1),
37 			m_trap_aux(1)
38 	{ }
39 
40 	void mpz80(machine_config &config);
41 
42 private:
43 	required_device<cpu_device> m_maincpu;
44 	required_device<ram_device> m_ram;
45 	required_device<s100_bus_device> m_s100;
46 	required_memory_region m_rom;
47 	optional_shared_ptr<uint8_t> m_map_ram;
48 	required_ioport m_16c;
49 
50 	virtual void machine_start() override;
51 	virtual void machine_reset() override;
52 
53 	inline offs_t get_address(offs_t offset);
54 	inline offs_t get_io_address(offs_t offset);
55 
56 	inline void check_traps();
57 	inline void check_interrupt();
58 
59 	uint8_t mmu_r(offs_t offset);
60 	void mmu_w(offs_t offset, uint8_t data);
61 	uint8_t mmu_io_r(offs_t offset);
62 	void mmu_io_w(offs_t offset, uint8_t data);
63 	uint8_t trap_addr_r();
64 	uint8_t keyboard_r();
65 	uint8_t switch_r();
66 	uint8_t status_r();
67 	void disp_seg_w(uint8_t data);
68 	void disp_col_w(uint8_t data);
69 	void task_w(uint8_t data);
70 	void mask_w(uint8_t data);
71 	DECLARE_WRITE_LINE_MEMBER( s100_pint_w );
72 	DECLARE_WRITE_LINE_MEMBER( s100_nmi_w );
73 
74 	// memory state
75 	uint32_t m_addr;
76 	uint8_t m_task;
77 	uint8_t m_mask;
78 
79 	// interrupt state
80 	int m_nmi;
81 	int m_pint;
82 	int m_int_pend;
83 
84 	// trap state
85 	uint8_t m_pretrap_addr;
86 	uint8_t m_trap_addr;
87 	uint8_t m_status;
88 	uint16_t m_trap_start;
89 	int m_pretrap;
90 	int m_trap;
91 	int m_trap_reset;
92 	int m_trap_void;
93 	int m_trap_halt;
94 	int m_trap_int;
95 	int m_trap_stop;
96 	int m_trap_aux;
97 	void init_mpz80();
98 	void mpz80_io(address_map &map);
99 	void mpz80_mem(address_map &map);
100 };
101 
102 #endif // MAME_INCLUDES_MPZ80_H
103