summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/ut88.h
blob: 3a19639d0cb3a5421127847dc76e907befb075d7 (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
139
140
141
142
143
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic
/*****************************************************************************
 *
 * includes/ut88.h
 *
 ****************************************************************************/
#ifndef MAME_INCLUDES_UT88_H
#define MAME_INCLUDES_UT88_H

#pragma once

#include "cpu/i8085/i8085.h"
#include "sound/dac.h"
#include "machine/i8255.h"
#include "imagedev/cassette.h"
#include "emupal.h"

class ut88_base_state : public driver_device
{
public:
	ut88_base_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag)
		, m_cassette(*this, "cassette")
		, m_region_maincpu(*this, "maincpu")
		, m_io_line0(*this, "LINE0")
		, m_io_line1(*this, "LINE1")
		, m_io_line2(*this, "LINE2")
		, m_maincpu(*this, "maincpu")
	{
	}

protected:
	DECLARE_READ8_MEMBER(tape_r);

	required_device<cassette_image_device> m_cassette;
	required_memory_region m_region_maincpu;
	required_ioport m_io_line0;
	required_ioport m_io_line1;
	required_ioport m_io_line2;
	required_device<cpu_device> m_maincpu;
};

class ut88_state : public ut88_base_state
{
public:
	ut88_state(const machine_config &mconfig, device_type type, const char *tag)
		: ut88_base_state(mconfig, type, tag)
		, m_ppi(*this, "ppi8255")
		, m_dac(*this, "dac")
		, m_p_videoram(*this, "videoram")
		, m_bank1(*this, "bank1")
		, m_io_line3(*this, "LINE3")
		, m_io_line4(*this, "LINE4")
		, m_io_line5(*this, "LINE5")
		, m_io_line6(*this, "LINE6")
		, m_io_line7(*this, "LINE7")
		, m_io_line8(*this, "LINE8")
		, m_gfxdecode(*this, "gfxdecode")
		, m_palette(*this, "palette")
	{ }

	void ut88(machine_config &config);

private:
	virtual void driver_init() override;
	virtual void machine_reset() override;
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

	enum
	{
		TIMER_RESET,
		TIMER_UPDATE_DISPLAY
	};

	DECLARE_READ8_MEMBER(keyboard_r);
	DECLARE_WRITE8_MEMBER(keyboard_w);
	DECLARE_WRITE8_MEMBER(sound_w);
	DECLARE_READ8_MEMBER(ppi_portb_r);
	DECLARE_READ8_MEMBER(ppi_portc_r);
	DECLARE_WRITE8_MEMBER(ppi_porta_w);

	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

	void io_map(address_map &map);
	void mem_map(address_map &map);

	int m_keyboard_mask;

	required_device<i8255_device> m_ppi;
	required_device<dac_bit_interface> m_dac;
	required_shared_ptr<uint8_t> m_p_videoram;
	required_memory_bank m_bank1;
	required_ioport m_io_line3;
	required_ioport m_io_line4;
	required_ioport m_io_line5;
	required_ioport m_io_line6;
	required_ioport m_io_line7;
	required_ioport m_io_line8;
	required_device<gfxdecode_device> m_gfxdecode;
	required_device<palette_device> m_palette;
};

class ut88mini_state : public ut88_base_state
{
public:
	ut88mini_state(const machine_config &mconfig, device_type type, const char *tag)
		: ut88_base_state(mconfig, type, tag)
		, m_region_proms(*this, "proms")
		, m_digits(*this, "digit%u", 0U)
	{ }

	void ut88mini(machine_config &config);

private:
	virtual void machine_start() override;
	virtual void machine_reset() override;
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

	void io_map(address_map &map);
	void mem_map(address_map &map);

	enum
	{
		TIMER_RESET,
		TIMER_UPDATE_DISPLAY
	};

	DECLARE_READ8_MEMBER(keyboard_r);
	DECLARE_WRITE8_MEMBER(led_w);

	required_memory_region m_region_proms;

	int m_lcd_digit[6];
	output_finder<6> m_digits;
};

/*----------- defined in video/ut88.c -----------*/

extern const gfx_layout ut88_charlayout;


#endif // MAME_INCLUDES_UT88_H