1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*****************************************************************************
4  *
5  * includes/mz80.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_MZ80_H
9 #define MAME_INCLUDES_MZ80_H
10 
11 #pragma once
12 
13 #include "cpu/z80/z80.h"
14 #include "machine/i8255.h"
15 #include "machine/pit8253.h"
16 #include "machine/timer.h"
17 #include "imagedev/cassette.h"
18 #include "sound/spkrdev.h"
19 
20 class mz80_state : public driver_device
21 {
22 public:
mz80_state(const machine_config & mconfig,device_type type,const char * tag)23 	mz80_state(const machine_config &mconfig, device_type type, const char *tag)
24 		: driver_device(mconfig, type, tag)
25 		, m_maincpu(*this, "maincpu")
26 		, m_pit(*this, "pit8253")
27 		, m_ppi(*this, "ppi8255")
28 		, m_cassette(*this, "cassette")
29 		, m_speaker(*this, "speaker")
30 		, m_p_ram(*this, "p_ram")
31 		, m_p_videoram(*this, "videoram")
32 		, m_p_chargen(*this, "chargen")
33 	{ }
34 
35 	void mz80kj(machine_config &config);
36 	void mz80k(machine_config &config);
37 	void mz80a(machine_config &config);
38 
39 	void init_mz80k();
40 
41 private:
42 	uint8_t mz80k_strobe_r();
43 	void mz80k_strobe_w(uint8_t data);
44 	uint8_t mz80k_8255_portb_r();
45 	uint8_t mz80k_8255_portc_r();
46 	void mz80k_8255_porta_w(uint8_t data);
47 	void mz80k_8255_portc_w(uint8_t data);
48 	DECLARE_WRITE_LINE_MEMBER(pit_out0_changed);
49 	DECLARE_WRITE_LINE_MEMBER(pit_out2_changed);
50 	uint32_t screen_update_mz80k(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
51 	uint32_t screen_update_mz80kj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
52 	uint32_t screen_update_mz80a(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
53 	TIMER_DEVICE_CALLBACK_MEMBER(ne555_tempo_callback);
54 
55 	void mz80k_io(address_map &map);
56 	void mz80k_mem(address_map &map);
57 	bool m_mz80k_vertical;
58 	bool m_mz80k_tempo_strobe;
59 	uint8_t m_speaker_level;
60 	bool m_prev_state;
61 	uint8_t m_mz80k_cursor_cnt;
62 	uint8_t m_mz80k_keyboard_line;
63 	virtual void machine_reset() override;
64 	required_device<cpu_device> m_maincpu;
65 	required_device<pit8253_device> m_pit;
66 	required_device<i8255_device> m_ppi;
67 	required_device<cassette_image_device> m_cassette;
68 	required_device<speaker_sound_device> m_speaker;
69 	required_shared_ptr<uint8_t> m_p_ram;
70 	required_shared_ptr<uint8_t> m_p_videoram;
71 	required_region_ptr<u8> m_p_chargen;
72 };
73 
74 
75 /*----------- defined in video/mz80.c -----------*/
76 
77 extern const gfx_layout mz80k_charlayout;
78 extern const gfx_layout mz80kj_charlayout;
79 
80 #endif // MAME_INCLUDES_MZ80_H
81