1 // license:BSD-3-Clause
2 // copyright-holders:Dan Boris
3 /***************************************************************************
4 
5     Sun Electronics Arabian hardware
6 
7     driver by Dan Boris
8 
9 ***************************************************************************/
10 #ifndef MAME_INCLUDES_ARABIAN_H
11 #define MAME_INCLUDES_ARABIAN_H
12 
13 #pragma once
14 
15 #include "cpu/mb88xx/mb88xx.h"
16 #include "emupal.h"
17 
18 class arabian_state : public driver_device
19 {
20 public:
arabian_state(const machine_config & mconfig,device_type type,const char * tag)21 	arabian_state(const machine_config &mconfig, device_type type, const char *tag) :
22 		driver_device(mconfig, type, tag),
23 		m_custom_cpu_ram(*this, "custom_cpu_ram"),
24 		m_blitter(*this, "blitter"),
25 		m_maincpu(*this, "maincpu"),
26 		m_mcu(*this, "mcu"),
27 		m_palette(*this, "palette")
28 	{ }
29 
30 	void arabian(machine_config &config);
31 
32 protected:
33 	virtual void machine_start() override;
34 	virtual void machine_reset() override;
35 	virtual void video_start() override;
36 
37 	void main_io_map(address_map &map);
38 	void main_map(address_map &map);
39 
40 private:
41 	uint8_t mcu_port_r0_r();
42 	uint8_t mcu_port_r1_r();
43 	uint8_t mcu_port_r2_r();
44 	uint8_t mcu_port_r3_r();
45 	void mcu_port_r0_w(uint8_t data);
46 	void mcu_port_r1_w(uint8_t data);
47 	void mcu_port_r2_w(uint8_t data);
48 	void mcu_port_r3_w(uint8_t data);
49 	uint8_t mcu_portk_r();
50 	void mcu_port_o_w(uint8_t data);
51 	void mcu_port_p_w(uint8_t data);
52 	void arabian_blitter_w(offs_t offset, uint8_t data);
53 	void arabian_videoram_w(offs_t offset, uint8_t data);
54 	void ay8910_porta_w(uint8_t data);
55 	void ay8910_portb_w(uint8_t data);
56 	void arabian_palette(palette_device &palette) const;
57 	uint32_t screen_update_arabian(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
58 	void blit_area(uint8_t plane, uint16_t src, uint8_t x, uint8_t y, uint8_t sx, uint8_t sy);
59 
60 	/* memory pointers */
61 	required_shared_ptr<uint8_t> m_custom_cpu_ram;
62 	required_shared_ptr<uint8_t> m_blitter;
63 
64 	std::unique_ptr<uint8_t[]>  m_main_bitmap;
65 	std::unique_ptr<uint8_t[]>  m_converted_gfx;
66 
67 	/* video-related */
68 	uint8_t    m_video_control;
69 	uint8_t    m_flip_screen;
70 
71 	/* MCU */
72 	uint8_t    m_mcu_port_o;
73 	uint8_t    m_mcu_port_p;
74 	uint8_t    m_mcu_port_r[4];
75 
76 	required_device<cpu_device> m_maincpu;
77 	required_device<mb8841_cpu_device> m_mcu;
78 	required_device<palette_device> m_palette;
79 };
80 
81 #endif // MAME_INCLUDES_ARABIAN_H
82