1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles,Nicola Salmoria
3 #define NVRAM_UNLOCK_SEQ_LEN 10
4 
5 #include "cpu/tms34010/tms34010.h"
6 #include "machine/gen_latch.h"
7 #include "machine/timer.h"
8 #include "video/tlc34076.h"
9 
10 class coolpool_state : public driver_device
11 {
12 public:
coolpool_state(const machine_config & mconfig,device_type type,const char * tag)13 	coolpool_state(const machine_config &mconfig, device_type type, const char *tag)
14 		: driver_device(mconfig, type, tag)
15 		, m_maincpu(*this, "maincpu")
16 		, m_dsp(*this, "dsp")
17 		, m_tlc34076(*this, "tlc34076")
18 		, m_main2dsp(*this, "main2dsp")
19 		, m_dsp2main(*this, "dsp2main")
20 		, m_nvram_timer(*this, "nvram_timer")
21 		, m_vram_base(*this, "vram_base")
22 		, m_nvram(*this, "nvram")
23 		, m_dsp_rom(*this, "dspdata")
24 	{ }
25 
26 	required_device<tms34010_device> m_maincpu;
27 	required_device<cpu_device> m_dsp;
28 	optional_device<tlc34076_device> m_tlc34076;
29 
30 	required_device<generic_latch_16_device> m_main2dsp;
31 	required_device<generic_latch_16_device> m_dsp2main;
32 
33 	required_device<timer_device> m_nvram_timer;
34 
35 	required_shared_ptr<uint16_t> m_vram_base;
36 	required_shared_ptr<uint16_t> m_nvram;
37 	required_region_ptr<uint8_t> m_dsp_rom;
38 
39 	int m_iop_romaddr;
40 
41 	uint8_t m_newx[3];
42 	uint8_t m_newy[3];
43 	uint8_t m_oldx[3];
44 	uint8_t m_oldy[3];
45 	int m_dx[3];
46 	int m_dy[3];
47 
48 	uint16_t m_result;
49 	uint16_t m_lastresult;
50 
51 	uint16_t m_nvram_write_seq[NVRAM_UNLOCK_SEQ_LEN];
52 	uint8_t m_nvram_write_enable;
53 	bool m_old_cmd;
54 	uint8_t m_same_cmd_count;
55 	void nvram_thrash_w(offs_t offset, uint16_t data);
56 	void nvram_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
57 	void nvram_thrash_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
58 	void amerdart_misc_w(uint16_t data);
59 	DECLARE_READ_LINE_MEMBER(amerdart_dsp_bio_line_r);
60 	uint16_t amerdart_trackball_r(offs_t offset);
61 	void coolpool_misc_w(uint16_t data);
62 	uint16_t dsp_bio_line_r();
63 	uint16_t dsp_hold_line_r();
64 	uint16_t dsp_rom_r();
65 	void dsp_romaddr_w(offs_t offset, uint16_t data);
66 	uint16_t coolpool_input_r(offs_t offset);
67 	TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg);
68 	TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg);
69 	TMS340X0_SCANLINE_RGB32_CB_MEMBER(amerdart_scanline);
70 	TMS340X0_SCANLINE_RGB32_CB_MEMBER(coolpool_scanline);
71 	void init_coolpool();
72 	void init_amerdart();
73 	void init_9ballsht();
74 	DECLARE_MACHINE_RESET(amerdart);
75 	DECLARE_MACHINE_RESET(coolpool);
76 	TIMER_DEVICE_CALLBACK_MEMBER(nvram_write_timeout);
77 	TIMER_DEVICE_CALLBACK_MEMBER(amerdart_audio_int_gen);
78 	void register_state_save();
79 	int amerdart_trackball_direction(int num, int data);
80 	void _9ballsht(machine_config &config);
81 	void coolpool(machine_config &config);
82 	void amerdart(machine_config &config);
83 	void amerdart_dsp_io_map(address_map &map);
84 	void amerdart_dsp_pgm_map(address_map &map);
85 	void amerdart_map(address_map &map);
86 	void coolpool_dsp_io_map(address_map &map);
87 	void coolpool_dsp_io_base_map(address_map &map);
88 	void coolpool_dsp_pgm_map(address_map &map);
89 	void coolpool_map(address_map &map);
90 	void nballsht_dsp_io_map(address_map &map);
91 	void nballsht_map(address_map &map);
92 };
93