1 // license:BSD-3-Clause
2 // copyright-holders:Phil Stroffolino
3 /*************************************************************************
4 
5     DJ Boy
6 
7 *************************************************************************/
8 
9 #include "cpu/mcs51/mcs51.h"
10 #include "machine/gen_latch.h"
11 #include "machine/timer.h"
12 #include "video/kan_pand.h"
13 #include "emupal.h"
14 #include "tilemap.h"
15 
16 #define PROT_OUTPUT_BUFFER_SIZE 8
17 
18 class djboy_state : public driver_device
19 {
20 public:
djboy_state(const machine_config & mconfig,device_type type,const char * tag)21 	djboy_state(const machine_config &mconfig, device_type type, const char *tag)
22 		: driver_device(mconfig, type, tag)
23 		, m_videoram(*this, "videoram")
24 		, m_paletteram(*this, "paletteram")
25 		, m_masterbank(*this, "master_bank")
26 		, m_slavebank(*this, "slave_bank")
27 		, m_soundbank(*this, "sound_bank")
28 		, m_masterbank_l(*this, "master_bank_l")
29 		, m_port_in(*this, "IN%u", 0)
30 		, m_port_dsw(*this, "DSW%u", 1)
31 		, m_mastercpu(*this, "mastercpu")
32 		, m_slavecpu(*this, "slavecpu")
33 		, m_soundcpu(*this, "soundcpu")
34 		, m_beast(*this, "beast")
35 		, m_pandora(*this, "pandora")
36 		, m_gfxdecode(*this, "gfxdecode")
37 		, m_palette(*this, "palette")
38 		, m_soundlatch(*this, "soundlatch")
39 		, m_slavelatch(*this, "slavelatch")
40 		, m_beastlatch(*this, "beastlatch")
41 	{
42 	}
43 
44 	void djboy(machine_config &config);
45 
46 	void init_djboy();
47 	void init_djboyj();
48 
49 private:
50 	/* memory pointers */
51 	required_shared_ptr<uint8_t> m_videoram;
52 	required_shared_ptr<uint8_t> m_paletteram;
53 
54 	/* ROM banking */
55 	uint8_t       m_bankxor;
56 
57 	required_memory_bank m_masterbank;
58 	required_memory_bank m_slavebank;
59 	required_memory_bank m_soundbank;
60 	required_memory_bank m_masterbank_l;
61 
62 	required_ioport_array<3> m_port_in;
63 	required_ioport_array<2> m_port_dsw;
64 
65 	/* video-related */
66 	tilemap_t   *m_background;
67 	uint8_t       m_videoreg;
68 	uint8_t       m_scrollx;
69 	uint8_t       m_scrolly;
70 
71 	/* Kaneko BEAST state */
72 	uint8_t       m_beast_p0;
73 	uint8_t       m_beast_p1;
74 	uint8_t       m_beast_p2;
75 	uint8_t       m_beast_p3;
76 
77 	/* devices */
78 	required_device<cpu_device> m_mastercpu;
79 	required_device<cpu_device> m_slavecpu;
80 	required_device<cpu_device> m_soundcpu;
81 	required_device<i80c51_device> m_beast;
82 	required_device<kaneko_pandora_device> m_pandora;
83 	required_device<gfxdecode_device> m_gfxdecode;
84 	required_device<palette_device> m_palette;
85 	required_device<generic_latch_8_device> m_soundlatch;
86 	required_device<generic_latch_8_device> m_slavelatch;
87 	required_device<generic_latch_8_device> m_beastlatch;
88 
89 	uint8_t beast_status_r();
90 	void trigger_nmi_on_mastercpu(uint8_t data);
91 	void mastercpu_bankswitch_w(uint8_t data);
92 	void slavecpu_bankswitch_w(uint8_t data);
93 	void coin_count_w(uint8_t data);
94 	void soundcpu_bankswitch_w(uint8_t data);
95 	uint8_t beast_p0_r();
96 	void beast_p0_w(uint8_t data);
97 	uint8_t beast_p1_r();
98 	void beast_p1_w(uint8_t data);
99 	uint8_t beast_p2_r();
100 	void beast_p2_w(uint8_t data);
101 	uint8_t beast_p3_r();
102 	void beast_p3_w(uint8_t data);
103 	void djboy_scrollx_w(uint8_t data);
104 	void djboy_scrolly_w(uint8_t data);
105 	void djboy_videoram_w(offs_t offset, uint8_t data);
106 	void djboy_paletteram_w(offs_t offset, uint8_t data);
107 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
108 	virtual void machine_start() override;
109 	virtual void machine_reset() override;
110 	virtual void video_start() override;
111 	uint32_t screen_update_djboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
112 	DECLARE_WRITE_LINE_MEMBER(screen_vblank_djboy);
113 	TIMER_DEVICE_CALLBACK_MEMBER(djboy_scanline);
114 	void mastercpu_am(address_map &map);
115 	void mastercpu_port_am(address_map &map);
116 	void slavecpu_am(address_map &map);
117 	void slavecpu_port_am(address_map &map);
118 	void soundcpu_am(address_map &map);
119 	void soundcpu_port_am(address_map &map);
120 };
121