1 // license:BSD-3-Clause
2 // copyright-holders:Luca Elia
3 #ifndef MAME_INCLUDES_GALPANI2_H
4 #define MAME_INCLUDES_GALPANI2_H
5 
6 #pragma once
7 
8 #include "video/kaneko_spr.h"
9 #include "sound/okim6295.h"
10 #include "machine/eepromser.h"
11 #include "machine/timer.h"
12 #include "emupal.h"
13 
14 class galpani2_state : public driver_device
15 {
16 public:
galpani2_state(const machine_config & mconfig,device_type type,const char * tag)17 	galpani2_state(const machine_config &mconfig, device_type type, const char *tag) :
18 		driver_device(mconfig, type, tag),
19 		m_maincpu(*this,"maincpu"),
20 		m_subcpu(*this,"sub"),
21 		m_kaneko_spr(*this, "kan_spr"),
22 		m_oki2(*this, "oki2"),
23 		m_eeprom(*this, "eeprom"),
24 		m_palette(*this, "palette"),
25 		m_bg15palette(*this, "bgpalette"),
26 		m_bg8palette(*this, "bg8palette"),
27 		m_bg8(*this, "bg8.%u", 0),
28 		m_palette_val(*this, "palette.%u", 0),
29 		m_bg8_scrollx(*this, "bg8_scrollx.%u", 0),
30 		m_bg8_scrolly(*this, "bg8_scrolly.%u", 0),
31 		m_bg15(*this, "bg15"),
32 		m_ram(*this, "ram"),
33 		m_ram2(*this, "ram2"),
34 		m_spriteram(*this, "spriteram")
35 	{ }
36 
37 	void galpani2(machine_config &config);
38 
39 private:
40 	required_device<cpu_device> m_maincpu;
41 	required_device<cpu_device> m_subcpu;
42 	optional_device<kaneko16_sprite_device> m_kaneko_spr;
43 	required_device<okim6295_device> m_oki2;
44 	required_device<eeprom_serial_93cxx_device> m_eeprom;
45 	required_device<palette_device> m_palette;
46 	required_device<palette_device> m_bg15palette;
47 	required_device<palette_device> m_bg8palette;
48 
49 	required_shared_ptr_array<uint16_t, 2> m_bg8;
50 	optional_shared_ptr_array<uint16_t, 2> m_palette_val;
51 	required_shared_ptr_array<uint16_t, 2> m_bg8_scrollx;
52 	required_shared_ptr_array<uint16_t, 2> m_bg8_scrolly;
53 	required_shared_ptr<uint16_t> m_bg15;
54 	required_shared_ptr<uint16_t> m_ram;
55 	required_shared_ptr<uint16_t> m_ram2;
56 	optional_shared_ptr<uint16_t> m_spriteram;
57 
58 	uint16_t m_eeprom_word;
59 	uint16_t m_old_mcu_nmi1;
60 	uint16_t m_old_mcu_nmi2;
61 
62 	void galpani2_mcu_init_w(uint8_t data);
63 	void galpani2_mcu_nmi1_w(uint8_t data);
64 	void galpani2_mcu_nmi2_w(uint8_t data);
65 	void galpani2_coin_lockout_w(uint8_t data);
66 	uint16_t galpani2_eeprom_r();
67 	void galpani2_eeprom_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
68 	void galpani2_oki1_bank_w(uint8_t data);
69 	void galpani2_oki2_bank_w(uint8_t data);
70 	void subdatabank_select_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
71 	virtual void machine_start() override;
72 	virtual void machine_reset() override;
73 	uint32_t screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
74 	void copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer);
75 	void copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
76 
77 	TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt1);
78 	TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt2);
79 	void galpani2_mcu_nmi1();
80 	void galpani2_mcu_nmi2();
81 	void galpani2_mem1(address_map &map);
82 	void galpani2_mem2(address_map &map);
83 };
84 
85 #endif // MAME_INCLUDES_GALPANI2_H
86