1 // license:BSD-3-Clause
2 // copyright-holders:Tomasz Slanina
3 #include "sound/dac.h"
4 #include <algorithm>
5 
6 #define RLT_NUM_BLITTER_REGS    8
7 #define RLT_NUM_BITMAPS         8
8 
9 class rltennis_state : public driver_device
10 {
11 public:
rltennis_state(const machine_config & mconfig,device_type type,const char * tag)12 	rltennis_state(const machine_config &mconfig, device_type type, const char *tag) :
13 		driver_device(mconfig, type, tag),
14 		m_maincpu(*this, "maincpu"),
15 		m_dac(*this, "dac%u", 1U),
16 		m_samples(*this, "samples%u", 1U),
17 		m_gfx(*this, "gfx"),
18 		m_data760000(0), m_data740000(0), m_dac_counter(0),
19 		m_offset_shift(0)
20 	{
21 		std::fill(std::begin(m_sample_rom_offset), std::end(m_sample_rom_offset), 0);
22 	}
23 
24 	void rltennis(machine_config &config);
25 
26 private:
27 	required_device<cpu_device> m_maincpu;
28 	required_device_array<dac_byte_interface, 2> m_dac;
29 	required_region_ptr_array<uint8_t, 2> m_samples;
30 	required_region_ptr<uint8_t> m_gfx;
31 
32 	uint16_t m_blitter[RLT_NUM_BLITTER_REGS];
33 	int32_t m_data760000;
34 	int32_t m_data740000;
35 	int32_t m_dac_counter;
36 	int32_t m_sample_rom_offset[2];
37 	int32_t m_offset_shift;
38 	int32_t m_unk_counter;
39 	std::unique_ptr<bitmap_ind16> m_tmp_bitmap[RLT_NUM_BITMAPS];
40 	emu_timer *m_timer;
41 
42 	uint16_t io_r();
43 	void snd1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
44 	void snd2_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
45 	void blitter_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
46 
47 	virtual void machine_start() override;
48 	virtual void machine_reset() override;
49 	virtual void video_start() override;
50 
51 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
52 
53 	INTERRUPT_GEN_MEMBER(interrupt);
54 	TIMER_CALLBACK_MEMBER(sample_player);
55 	void ramdac_map(address_map &map);
56 	void rltennis_main(address_map &map);
57 };
58