1 // license:GPL-2.0+
2 // copyright-holders:Kevin Thacker,Sandro Ronco
3 /*****************************************************************************
4  *
5  * includes/avigo.h
6  *
7  ****************************************************************************/
8 
9 #ifndef MAME_INCLUDES_AVIGO_H
10 #define MAME_INCLUDES_AVIGO_H
11 
12 #pragma once
13 
14 #include "bus/rs232/rs232.h"
15 #include "cpu/z80/z80.h"
16 #include "imagedev/snapquik.h"
17 #include "machine/bankdev.h"
18 #include "machine/ins8250.h"
19 #include "machine/intelfsh.h"
20 #include "machine/nvram.h"
21 #include "machine/ram.h"
22 #include "machine/rp5c01.h"
23 #include "machine/timer.h"
24 #include "sound/spkrdev.h"
25 #include "emupal.h"
26 
27 #define AVIGO_SCREEN_WIDTH        160
28 #define AVIGO_SCREEN_HEIGHT       240
29 #define AVIGO_PANEL_HEIGHT        26
30 
31 
32 class avigo_state : public driver_device
33 {
34 public:
avigo_state(const machine_config & mconfig,device_type type,const char * tag)35 	avigo_state(const machine_config &mconfig, device_type type, const char *tag)
36 		: driver_device(mconfig, type, tag)
37 		, m_maincpu(*this, "maincpu")
38 		, m_ram(*this, RAM_TAG)
39 		, m_speaker(*this, "speaker")
40 		, m_uart(*this, "ns16550")
41 		, m_serport(*this, "serport")
42 		, m_palette(*this, "palette")
43 		, m_bankdev1(*this, "bank0")
44 		, m_bankdev2(*this, "bank1")
45 		, m_flash1(*this, "flash1")
46 		, m_nvram(*this, "nvram")
47 	{ }
48 
49 	void avigo(machine_config &config);
50 
51 	DECLARE_INPUT_CHANGED_MEMBER(pen_irq);
52 	DECLARE_INPUT_CHANGED_MEMBER(pen_move_irq);
53 	DECLARE_INPUT_CHANGED_MEMBER(kb_irq);
54 	DECLARE_INPUT_CHANGED_MEMBER(power_down_irq);
55 
56 protected:
57 	// defined in drivers/avigo.cpp
58 	virtual void machine_start() override;
59 	virtual void machine_reset() override;
60 	void refresh_ints();
61 	void nvram_init(nvram_device &nvram, void *base, size_t size);
62 
63 	DECLARE_WRITE_LINE_MEMBER( tc8521_alarm_int );
64 	DECLARE_WRITE_LINE_MEMBER( com_interrupt );
65 
66 	uint8_t key_data_read_r();
67 	void set_key_line_w(uint8_t data);
68 	void port2_w(uint8_t data);
69 	uint8_t irq_r();
70 	void irq_w(uint8_t data);
71 	uint8_t bank1_r(offs_t offset);
72 	uint8_t bank2_r(offs_t offset);
73 	void bank1_w(offs_t offset, uint8_t data);
74 	void bank2_w(offs_t offset, uint8_t data);
75 	uint8_t ad_control_status_r();
76 	void ad_control_status_w(uint8_t data);
77 	uint8_t ad_data_r();
78 	void speaker_w(uint8_t data);
79 	uint8_t port_04_r();
80 
81 	// defined in video/avigo.cpp
82 	virtual void video_start() override;
83 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
84 	uint8_t vid_memory_r(offs_t offset);
85 	void vid_memory_w(offs_t offset, uint8_t data);
86 
87 	TIMER_DEVICE_CALLBACK_MEMBER(avigo_scan_timer);
88 	TIMER_DEVICE_CALLBACK_MEMBER(avigo_1hz_timer);
89 
90 	DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
91 	void avigo_banked_map(address_map &map);
92 	void avigo_io(address_map &map);
93 	void avigo_mem(address_map &map);
94 
95 	required_device<cpu_device> m_maincpu;
96 	required_device<ram_device> m_ram;
97 	required_device<speaker_sound_device> m_speaker;
98 	required_device<ns16550_device> m_uart;
99 	required_device<rs232_port_device> m_serport;
100 	required_device<palette_device> m_palette;
101 	required_device<address_map_bank_device> m_bankdev1;
102 	required_device<address_map_bank_device> m_bankdev2;
103 	required_device<intelfsh8_device> m_flash1;
104 	required_shared_ptr<uint8_t> m_nvram;
105 
106 	// driver state
107 	uint8_t               m_key_line;
108 	uint8_t               m_irq;
109 	uint8_t               m_port2;
110 	uint8_t               m_bank2_l;
111 	uint8_t               m_bank2_h;
112 	uint8_t               m_bank1_l;
113 	uint8_t               m_bank1_h;
114 	uint8_t               m_ad_control_status;
115 	uint16_t              m_ad_value;
116 	std::unique_ptr<uint8_t[]> m_video_memory;
117 	uint8_t               m_screen_column;
118 	uint8_t               m_warm_start;
119 };
120 
121 #endif // MAME_INCLUDES_AVIGO_H
122