1 // license:BSD-3-Clause
2 // copyright-holders:Victor Trucco, Mike Balfour, Phil Stroffolino
3 #include "sound/samples.h"
4 #include "video/tms9927.h"
5 #include "emupal.h"
6 #include "screen.h"
7 
8 struct coprocessor_t {
9 	std::unique_ptr<uint8_t[]> context_ram;
10 	uint8_t bank;
11 	std::unique_ptr<uint8_t[]> image_ram;
12 	uint8_t param[0x9];
13 };
14 
15 class thief_state : public driver_device
16 {
17 public:
thief_state(const machine_config & mconfig,device_type type,const char * tag)18 	thief_state(const machine_config &mconfig, device_type type, const char *tag)
19 		: driver_device(mconfig, type, tag) ,
20 		m_maincpu(*this, "maincpu"),
21 		m_samples(*this, "samples"),
22 		m_tms(*this, "tms"),
23 		m_screen(*this, "screen"),
24 		m_palette(*this, "palette") { }
25 
26 	void natodef(machine_config &config);
27 	void sharkatt(machine_config &config);
28 	void thief(machine_config &config);
29 
30 	void init_thief();
31 
32 	DECLARE_WRITE_LINE_MEMBER(slam_w);
33 
34 private:
35 	std::unique_ptr<uint8_t[]> m_videoram;
36 	uint8_t m_input_select;
37 	uint8_t m_read_mask;
38 	uint8_t m_write_mask;
39 	uint8_t m_video_control;
40 	coprocessor_t m_coprocessor;
41 	void thief_input_select_w(uint8_t data);
42 	uint8_t thief_io_r();
43 	uint8_t thief_context_ram_r(offs_t offset);
44 	void thief_context_ram_w(offs_t offset, uint8_t data);
45 	void thief_context_bank_w(uint8_t data);
46 	void thief_video_control_w(uint8_t data);
47 	void thief_color_map_w(offs_t offset, uint8_t data);
48 	void thief_color_plane_w(uint8_t data);
49 	uint8_t thief_videoram_r(offs_t offset);
50 	void thief_videoram_w(offs_t offset, uint8_t data);
51 	void thief_blit_w(uint8_t data);
52 	uint8_t thief_coprocessor_r(offs_t offset);
53 	void thief_coprocessor_w(offs_t offset, uint8_t data);
54 	void tape_control_w(uint8_t data);
55 	virtual void video_start() override;
56 	uint32_t screen_update_thief(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
57 
58 	IRQ_CALLBACK_MEMBER(iack);
59 	uint16_t fetch_image_addr( coprocessor_t &thief_coprocessor );
60 	void tape_set_audio( int track, int bOn );
61 	void tape_set_motor( int bOn );
62 	required_device<cpu_device> m_maincpu;
63 	required_device<samples_device> m_samples;
64 	required_device<tms9927_device> m_tms;
65 	required_device<screen_device> m_screen;
66 	required_device<palette_device> m_palette;
67 
68 	void io_map(address_map &map);
69 	void sharkatt_main_map(address_map &map);
70 	void thief_main_map(address_map &map);
71 };
72