1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*****************************************************************************
4  *
5  * includes/ut88.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_UT88_H
9 #define MAME_INCLUDES_UT88_H
10 
11 #pragma once
12 
13 #include "cpu/i8085/i8085.h"
14 #include "sound/dac.h"
15 #include "machine/i8255.h"
16 #include "imagedev/cassette.h"
17 #include "machine/timer.h"
18 #include "emupal.h"
19 
20 class ut88_common : public driver_device
21 {
22 public:
ut88_common(const machine_config & mconfig,device_type type,const char * tag)23 	ut88_common(const machine_config &mconfig, device_type type, const char *tag)
24 		: driver_device(mconfig, type, tag)
25 		, m_maincpu(*this, "maincpu")
26 		, m_cassette(*this, "cassette")
27 		, m_io_line0(*this, "LINE0")
28 		, m_io_line1(*this, "LINE1")
29 		, m_io_line2(*this, "LINE2")
30 	{
31 	}
32 
33 protected:
34 	uint8_t tape_r();
35 
36 	required_device<cpu_device> m_maincpu;
37 	required_device<cassette_image_device> m_cassette;
38 	required_ioport m_io_line0;
39 	required_ioport m_io_line1;
40 	required_ioport m_io_line2;
41 };
42 
43 class ut88_state : public ut88_common
44 {
45 public:
ut88_state(const machine_config & mconfig,device_type type,const char * tag)46 	ut88_state(const machine_config &mconfig, device_type type, const char *tag)
47 		: ut88_common(mconfig, type, tag)
48 		, m_ppi(*this, "ppi")
49 		, m_dac(*this, "dac")
50 		, m_vram(*this, "videoram")
51 		, m_rom(*this, "maincpu")
52 		, m_ram(*this, "mainram")
53 		, m_io_line3(*this, "LINE3")
54 		, m_io_line4(*this, "LINE4")
55 		, m_io_line5(*this, "LINE5")
56 		, m_io_line6(*this, "LINE6")
57 		, m_io_line7(*this, "LINE7")
58 		, m_io_line8(*this, "LINE8")
59 		, m_gfxdecode(*this, "gfxdecode")
60 		, m_palette(*this, "palette")
61 	{ }
62 
63 	void ut88(machine_config &config);
64 
65 private:
66 	void machine_start() override;
67 	void machine_reset() override;
68 	uint8_t keyboard_r(offs_t offset);
69 	void keyboard_w(offs_t offset, uint8_t data);
70 	void sound_w(uint8_t data);
71 	uint8_t ppi_portb_r();
72 	uint8_t ppi_portc_r();
73 	void ppi_porta_w(uint8_t data);
74 
75 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
76 
77 	void io_map(address_map &map);
78 	void mem_map(address_map &map);
79 
80 	int m_keyboard_mask;
81 
82 	memory_passthrough_handler *m_rom_shadow_tap;
83 	required_device<i8255_device> m_ppi;
84 	required_device<dac_bit_interface> m_dac;
85 	required_shared_ptr<uint8_t> m_vram;
86 	required_region_ptr<u8> m_rom;
87 	required_shared_ptr<u8> m_ram;
88 	required_ioport m_io_line3;
89 	required_ioport m_io_line4;
90 	required_ioport m_io_line5;
91 	required_ioport m_io_line6;
92 	required_ioport m_io_line7;
93 	required_ioport m_io_line8;
94 	required_device<gfxdecode_device> m_gfxdecode;
95 	required_device<palette_device> m_palette;
96 };
97 
98 class ut88mini_state : public ut88_common
99 {
100 public:
ut88mini_state(const machine_config & mconfig,device_type type,const char * tag)101 	ut88mini_state(const machine_config &mconfig, device_type type, const char *tag)
102 		: ut88_common(mconfig, type, tag)
103 		, m_proms(*this, "proms")
104 		, m_digits(*this, "digit%u", 0U)
105 	{ }
106 
107 	void ut88mini(machine_config &config);
108 
109 private:
110 	void machine_start() override;
111 	void machine_reset() override;
112 	TIMER_DEVICE_CALLBACK_MEMBER(display_timer);
113 
114 	void io_map(address_map &map);
115 	void mem_map(address_map &map);
116 
117 	uint8_t keyboard_r();
118 	void led_w(offs_t offset, uint8_t data);
119 
120 	required_memory_region m_proms;
121 
122 	int m_lcd_digit[6];
123 	output_finder<6> m_digits;
124 };
125 
126 
127 #endif // MAME_INCLUDES_UT88_H
128