1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*****************************************************************************
4  *
5  * includes/mikro80.h
6  *
7  ****************************************************************************/
8 
9 #ifndef MAME_INCLUDES_MIKRO80_H
10 #define MAME_INCLUDES_MIKRO80_H
11 
12 #pragma once
13 
14 #include "machine/i8255.h"
15 #include "imagedev/cassette.h"
16 #include "sound/dac.h"
17 
18 class mikro80_state : public driver_device
19 {
20 public:
mikro80_state(const machine_config & mconfig,device_type type,const char * tag)21 	mikro80_state(const machine_config &mconfig, device_type type, const char *tag)
22 		: driver_device(mconfig, type, tag)
23 		, m_aram(*this, "attrram")
24 		, m_vram(*this, "videoram")
25 		, m_ppi(*this, "ppi8255")
26 		, m_cassette(*this, "cassette")
27 		, m_rom(*this, "maincpu")
28 		, m_ram(*this, "mainram")
29 		, m_p_chargen(*this, "chargen")
30 		, m_io_keyboard(*this, "LINE%u", 0U)
31 		, m_dac(*this, "dac")
32 		, m_maincpu(*this, "maincpu")
33 	{ }
34 
35 	void kristall(machine_config &config);
36 	void radio99(machine_config &config);
37 	void mikro80(machine_config &config);
38 
39 	void init_radio99();
40 	void init_mikro80();
41 
42 private:
43 	u8 m_keyboard_mask;
44 	u8 m_key_mask;
45 	void sound_w(u8 data);
46 	u8 portb_r();
47 	u8 portc_r();
48 	u8 kristall2_portc_r();
49 	void porta_w(u8 data);
50 	void portc_w(u8 data);
51 	void tape_w(u8 data);
52 	u8 tape_r();
53 	virtual void machine_reset() override;
54 	virtual void machine_start() override;
55 	u32 screen_update_mikro80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
56 
57 	void kristall_io(address_map &map);
58 	void mikro80_io(address_map &map);
59 	void mikro80_mem(address_map &map);
60 	void radio99_io(address_map &map);
61 
62 	memory_passthrough_handler *m_rom_shadow_tap;
63 	required_shared_ptr<uint8_t> m_aram;
64 	required_shared_ptr<uint8_t> m_vram;
65 	required_device<i8255_device> m_ppi;
66 	required_device<cassette_image_device> m_cassette;
67 	required_region_ptr<u8> m_rom;
68 	required_shared_ptr<u8> m_ram;
69 	required_region_ptr<u8> m_p_chargen;
70 	required_ioport_array<9> m_io_keyboard;
71 	optional_device<dac_bit_interface> m_dac;
72 	required_device<cpu_device> m_maincpu;
73 };
74 
75 #endif // MAME_INCLUDES_MIKRO80_H
76