1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 
4 /*************************************************************************
5 
6     Deniam games
7 
8 *************************************************************************/
9 
10 #include "machine/gen_latch.h"
11 #include "sound/okim6295.h"
12 #include "emupal.h"
13 #include "tilemap.h"
14 
15 class deniam_state : public driver_device
16 {
17 public:
deniam_state(const machine_config & mconfig,device_type type,const char * tag)18 	deniam_state(const machine_config &mconfig, device_type type, const char *tag) :
19 		driver_device(mconfig, type, tag),
20 		m_videoram(*this, "videoram"),
21 		m_textram(*this, "textram"),
22 		m_spriteram(*this, "spriteram"),
23 		m_spritegfx(*this, "spritegfx"),
24 		m_maincpu(*this, "maincpu"),
25 		m_audiocpu(*this, "audiocpu"),
26 		m_oki(*this, "oki"),
27 		m_gfxdecode(*this, "gfxdecode"),
28 		m_palette(*this, "palette"),
29 		m_soundlatch(*this, "soundlatch")
30 	{ }
31 
32 	void deniam16c(machine_config &config);
33 	void deniam16b(machine_config &config);
34 
35 	void init_karianx();
36 	void init_logicpro();
37 
38 private:
39 	/* memory pointers */
40 	required_shared_ptr<u16> m_videoram;
41 	required_shared_ptr<u16> m_textram;
42 	required_shared_ptr<u16> m_spriteram;
43 
44 	required_memory_region m_spritegfx;
45 
46 	/* video-related */
47 	tilemap_t      *m_fg_tilemap;
48 	tilemap_t      *m_bg_tilemap;
49 	tilemap_t      *m_tx_tilemap;
50 	int            m_display_enable;
51 	int            m_bg_scrollx_offs;
52 	int            m_bg_scrolly_offs;
53 	int            m_fg_scrollx_offs;
54 	int            m_fg_scrolly_offs;
55 	int            m_bg_scrollx_reg;
56 	int            m_bg_scrolly_reg;
57 	int            m_bg_page_reg;
58 	int            m_fg_scrollx_reg;
59 	int            m_fg_scrolly_reg;
60 	int            m_fg_page_reg;
61 	int            m_bg_page[4];
62 	int            m_fg_page[4];
63 	u16            m_coinctrl;
64 
65 	/* devices */
66 	void irq_ack_w(u16 data);
67 	void videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
68 	void textram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
69 	u16 coinctrl_r();
70 	void coinctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0);
71 	void deniam16b_oki_rom_bank_w(u8 data);
72 	void deniam16c_oki_rom_bank_w(u8 data);
73 	TILEMAP_MAPPER_MEMBER(scan_pages);
74 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
75 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
76 	TILE_GET_INFO_MEMBER(get_tx_tile_info);
77 	virtual void machine_start() override;
78 	virtual void machine_reset() override;
79 	virtual void video_start() override;
80 	u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
81 	void deniam_common_init(  );
82 	void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
83 	void set_bg_page( int page, int value );
84 	void set_fg_page( int page, int value );
85 	required_device<cpu_device> m_maincpu;
86 	optional_device<cpu_device> m_audiocpu; // system 16c does not have sound CPU
87 	required_device<okim6295_device> m_oki;
88 	required_device<gfxdecode_device> m_gfxdecode;
89 	required_device<palette_device> m_palette;
90 	optional_device<generic_latch_8_device> m_soundlatch;
91 	void deniam16b_map(address_map &map);
92 	void deniam16c_map(address_map &map);
93 	void sound_io_map(address_map &map);
94 	void sound_map(address_map &map);
95 };
96