summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/opwolf.h
blob: 2bf20a5c1eabb29295e0bc43682d4a9e0714c513 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// license:GPL-2.0+
// copyright-holders:David Graves, Jarek Burczynski
/*************************************************************************

    Operation Wolf

*************************************************************************/
#ifndef MAME_INCLUDES_OPWOLF_H
#define MAME_INCLUDES_OPWOLF_H

#pragma once


#include "machine/taitocchip.h"

#include "sound/msm5205.h"
#include "video/pc080sn.h"
#include "video/pc090oj.h"


class opwolf_state : public driver_device
{
public:
	enum
	{
		TIMER_OPWOLF,
		TIMER_CCHIP
	};

	opwolf_state(const machine_config &mconfig, device_type type, const char *tag) :
		driver_device(mconfig, type, tag),
		m_cchip_ram(*this, "cchip_ram"),
		m_maincpu(*this, "maincpu"),
		m_audiocpu(*this, "audiocpu"),
		m_cchip(*this, "cchip"),
		m_pc080sn(*this, "pc080sn"),
		m_pc090oj(*this, "pc090oj"),
		m_msm1(*this, "msm1"),
		m_msm2(*this, "msm2")
	{ }

	DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_x_r);
	DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_y_r);
	void init_opwolf();
	void init_opwolfb();
	void init_opwolfp();
	void opwolf(machine_config &config);
	void opwolfb(machine_config &config);
	void opwolfp(machine_config &config);

protected:
	DECLARE_READ16_MEMBER(cchip_r);
	DECLARE_WRITE16_MEMBER(cchip_w);
	DECLARE_READ16_MEMBER(opwolf_in_r);
	DECLARE_READ16_MEMBER(opwolf_dsw_r);
	DECLARE_READ16_MEMBER(opwolf_lightgun_r);
	DECLARE_READ8_MEMBER(z80_input1_r);
	DECLARE_READ8_MEMBER(z80_input2_r);
	DECLARE_WRITE8_MEMBER(opwolf_adpcm_d_w);
	DECLARE_WRITE8_MEMBER(opwolf_adpcm_e_w);
	DECLARE_WRITE16_MEMBER(opwolf_cchip_status_w);
	DECLARE_WRITE16_MEMBER(opwolf_cchip_bank_w);
	DECLARE_WRITE16_MEMBER(opwolf_cchip_data_w);
	DECLARE_READ16_MEMBER(opwolf_cchip_status_r);
	DECLARE_READ16_MEMBER(opwolf_cchip_data_r);
	DECLARE_WRITE16_MEMBER(opwolf_spritectrl_w);
	DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
	DECLARE_WRITE8_MEMBER(opwolf_adpcm_b_w);
	DECLARE_WRITE8_MEMBER(opwolf_adpcm_c_w);

	virtual void machine_start() override;
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
	DECLARE_MACHINE_RESET(opwolf);
	uint32_t screen_update_opwolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	TIMER_CALLBACK_MEMBER(opwolf_timer_callback);
	TIMER_CALLBACK_MEMBER(cchip_timer);
	void updateDifficulty(int mode);
	void opwolf_cchip_init();
	void opwolf_msm5205_vck(msm5205_device *device, int chip);
	DECLARE_WRITE_LINE_MEMBER(opwolf_msm5205_vck_1);
	DECLARE_WRITE_LINE_MEMBER(opwolf_msm5205_vck_2);

	void opwolf_map(address_map &map);
	void opwolf_sound_z80_map(address_map &map);
	void opwolfb_map(address_map &map);
	void opwolfb_sub_z80_map(address_map &map);
	void opwolfp_map(address_map &map);

private:
	/* memory pointers */
	optional_shared_ptr<uint8_t> m_cchip_ram;

	/* video-related */
	uint16_t       m_sprite_ctrl;
	uint16_t       m_sprites_flipscreen;

	/* misc */
	uint8_t        m_adpcm_b[0x08];
	uint8_t        m_adpcm_c[0x08];
	uint32_t       m_adpcm_pos[2];
	uint32_t       m_adpcm_end[2];
	int          m_adpcm_data[2];

	int          m_opwolf_gun_xoffs;
	int          m_opwolf_gun_yoffs;

	emu_timer   *m_opwolf_timer;

	/* c-chip */
	emu_timer   *m_cchip_timer;

	int          m_opwolf_region;

	uint8_t        m_current_bank;
	uint8_t        m_current_cmd;
	uint8_t        m_cchip_last_7a;
	uint8_t        m_cchip_last_04;
	uint8_t        m_cchip_last_05;
	uint8_t        m_cchip_coins_for_credit[2];
	uint8_t        m_cchip_credits_for_coin[2];
	uint8_t        m_cchip_coins[2];
	uint8_t        m_c588;
	uint8_t        m_c589;
	uint8_t        m_c58a; // These variables derived from the bootleg
	uint8_t        m_triggeredLevel1b; // These variables derived from comparison to unprotection version
	uint8_t        m_triggeredLevel2;
	uint8_t        m_triggeredLevel2b;
	uint8_t        m_triggeredLevel2c;
	uint8_t        m_triggeredLevel3b;
	uint8_t        m_triggeredLevel13b;
	uint8_t        m_triggeredLevel4;
	uint8_t        m_triggeredLevel5;
	uint8_t        m_triggeredLevel7;
	uint8_t        m_triggeredLevel8;
	uint8_t        m_triggeredLevel9;

	/* devices */
	required_device<cpu_device> m_maincpu;
	required_device<cpu_device> m_audiocpu;
	optional_device<taito_cchip_device> m_cchip;
	required_device<pc080sn_device> m_pc080sn;
	required_device<pc090oj_device> m_pc090oj;
	required_device<msm5205_device> m_msm1;
	required_device<msm5205_device> m_msm2;
};


#endif // MAME_INCLUDES_OPWOLF_H