1 // license:GPL-2.0+
2 // copyright-holders:Jarek Burczynski
3 #ifndef MAME_INCLUDES_MSISAAC_H
4 #define MAME_INCLUDES_MSISAAC_H
5 
6 #pragma once
7 
8 #include "machine/taito68705interface.h"
9 #include "machine/gen_latch.h"
10 #include "sound/msm5232.h"
11 #include "sound/ta7630.h"
12 #include "emupal.h"
13 #include "tilemap.h"
14 
15 /* Disabled because the mcu dump is currently unavailable. -AS */
16 //#define USE_MCU
17 
18 class msisaac_state : public driver_device
19 {
20 public:
msisaac_state(const machine_config & mconfig,device_type type,const char * tag)21 	msisaac_state(const machine_config &mconfig, device_type type, const char *tag) :
22 		driver_device(mconfig, type, tag),
23 		m_spriteram(*this, "spriteram"),
24 		m_videoram(*this, "videoram"),
25 		m_videoram3(*this, "videoram3"),
26 		m_videoram2(*this, "videoram2"),
27 		m_audiocpu(*this, "audiocpu"),
28 		m_maincpu(*this, "maincpu"),
29 		m_bmcu(*this, "bmcu"),
30 		m_msm(*this, "msm"),
31 		m_ta7630(*this, "ta7630"),
32 		m_gfxdecode(*this, "gfxdecode"),
33 		m_palette(*this, "palette"),
34 		m_soundlatch(*this, "soundlatch")
35 	{ }
36 
37 	void msisaac(machine_config &config);
38 
39 protected:
40 	virtual void machine_start() override;
41 	virtual void machine_reset() override;
42 	virtual void video_start() override;
43 
44 private:
45 	/* memory pointers */
46 	required_shared_ptr<uint8_t> m_spriteram;
47 	required_shared_ptr<uint8_t> m_videoram;
48 	required_shared_ptr<uint8_t> m_videoram3;
49 	required_shared_ptr<uint8_t> m_videoram2;
50 
51 	/* video-related */
52 	bitmap_ind16    *m_tmp_bitmap1;
53 	bitmap_ind16    *m_tmp_bitmap2;
54 	tilemap_t     *m_bg_tilemap;
55 	tilemap_t     *m_fg_tilemap;
56 	tilemap_t     *m_bg2_tilemap;
57 	int         m_bg2_textbank;
58 
59 	/* sound-related */
60 	int         m_sound_nmi_enable;
61 	int         m_pending_nmi;
62 
63 	/* fake mcu (in msisaac.c) */
64 #ifndef USE_MCU
65 	uint8_t       m_mcu_val;
66 	uint8_t       m_direction;
67 #endif
68 
69 	uint8_t       m_snd_ctrl0;
70 	uint8_t       m_snd_ctrl1;
71 	uint8_t       m_snd_ctrl2;
72 	uint8_t       m_snd_ctrl3;
73 
74 	/* devices */
75 	required_device<cpu_device> m_audiocpu;
76 	required_device<cpu_device> m_maincpu;
77 	optional_device<taito68705_mcu_device> m_bmcu;
78 	required_device<msm5232_device> m_msm;
79 	required_device<ta7630_device> m_ta7630;
80 	required_device<gfxdecode_device> m_gfxdecode;
81 	required_device<palette_device> m_palette;
82 	required_device<generic_latch_8_device> m_soundlatch;
83 
84 	void sound_command_w(uint8_t data);
85 	void nmi_disable_w(uint8_t data);
86 	void nmi_enable_w(uint8_t data);
87 	void ms_unknown_w(uint8_t data);
88 	uint8_t msisaac_mcu_r(offs_t offset);
89 	uint8_t msisaac_mcu_status_r(offs_t offset);
90 	void msisaac_mcu_w(offs_t offset, uint8_t data);
91 	void sound_control_1_w(uint8_t data);
92 	void msisaac_fg_scrolly_w(uint8_t data);
93 	void msisaac_fg_scrollx_w(uint8_t data);
94 	void msisaac_bg2_scrolly_w(uint8_t data);
95 	void msisaac_bg2_scrollx_w(uint8_t data);
96 	void msisaac_bg_scrolly_w(uint8_t data);
97 	void msisaac_bg_scrollx_w(uint8_t data);
98 	void msisaac_bg2_textbank_w(uint8_t data);
99 	void msisaac_bg_videoram_w(offs_t offset, uint8_t data);
100 	void msisaac_bg2_videoram_w(offs_t offset, uint8_t data);
101 	void msisaac_fg_videoram_w(offs_t offset, uint8_t data);
102 	void sound_control_0_w(uint8_t data);
103 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
104 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
105 	TILE_GET_INFO_MEMBER(get_bg2_tile_info);
106 	uint32_t screen_update_msisaac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
107 	TIMER_CALLBACK_MEMBER(nmi_callback);
108 	void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
109 	void msisaac_map(address_map &map);
110 	void msisaac_sound_map(address_map &map);
111 };
112 
113 #endif // MAME_INCLUDES_MSISAAC_H
114