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
|
// license:BSD-3-Clause
// copyright-holders:Mike Balfour
/***************************************************************************
Irem M27 hardware
If you have any questions about how this driver works, don't hesitate to
ask. - Mike Balfour (mab22@po.cwru.edu)
To Do:
- Device-ify video and audio hardware to turn optional_devices into
required_devices.
****************************************************************************/
#ifndef MAME_INCLUDES_REDALERT_H
#define MAME_INCLUDES_REDALERT_H
#pragma once
#include "cpu/i8085/i8085.h"
#include "machine/6821pia.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "sound/hc55516.h"
#include "screen.h"
class redalert_state : public driver_device
{
public:
redalert_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_bitmap_videoram(*this, "bitmap_videoram"),
m_charmap_videoram(*this, "charram"),
m_video_control(*this, "video_control"),
m_bitmap_color(*this, "bitmap_color"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_voicecpu(*this, "voice"),
m_ay8910(*this, "aysnd"),
m_ay(*this, "ay%u", 1U),
m_cvsd(*this, "cvsd"),
m_sndpia(*this, "sndpia"),
m_screen(*this, "screen"),
m_soundlatch(*this, "soundlatch"),
m_soundlatch2(*this, "soundlatch2")
{
}
void redalert_video_common(machine_config &config);
void redalert_video(machine_config &config);
void ww3_video(machine_config &config);
void panther_video(machine_config &config);
void demoneye_video(machine_config &config);
void redalert_audio_m37b(machine_config &config);
void redalert_audio_voice(machine_config &config);
void redalert_audio(machine_config &config);
void ww3_audio(machine_config &config);
void panther_audio(machine_config &config);
void demoneye_audio(machine_config &config);
void demoneye(machine_config &config);
void ww3(machine_config &config);
void panther(machine_config &config);
void redalert(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
DECLARE_CUSTOM_INPUT_MEMBER(sound_status_r);
private:
required_shared_ptr<uint8_t> m_bitmap_videoram;
required_shared_ptr<uint8_t> m_charmap_videoram;
required_shared_ptr<uint8_t> m_video_control;
required_shared_ptr<uint8_t> m_bitmap_color;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<i8085a_cpu_device> m_voicecpu;
optional_device<ay8910_device> m_ay8910;
optional_device_array<ay8910_device, 2> m_ay;
optional_device<hc55516_device> m_cvsd;
optional_device<pia6821_device> m_sndpia;
required_device<screen_device> m_screen;
required_device<generic_latch_8_device> m_soundlatch;
optional_device<generic_latch_8_device> m_soundlatch2;
std::unique_ptr<uint8_t[]> m_bitmap_colorram;
uint8_t m_control_xor;
uint8_t redalert_interrupt_clear_r();
void redalert_interrupt_clear_w(uint8_t data);
uint8_t panther_interrupt_clear_r();
void redalert_bitmap_videoram_w(offs_t offset, uint8_t data);
void redalert_audio_command_w(uint8_t data);
uint8_t redalert_ay8910_latch_1_r();
void redalert_ay8910_latch_2_w(uint8_t data);
void redalert_voice_command_w(uint8_t data);
void demoneye_audio_command_w(uint8_t data);
DECLARE_VIDEO_START(redalert);
DECLARE_VIDEO_START(ww3);
DECLARE_VIDEO_START(demoneye);
uint32_t screen_update_redalert(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_demoneye(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_panther(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(redalert_vblank_interrupt);
TIMER_CALLBACK_MEMBER(audio_irq_on);
TIMER_CALLBACK_MEMBER(audio_irq_off);
void redalert_analog_w(uint8_t data);
void redalert_AY8910_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(sod_callback);
DECLARE_READ_LINE_MEMBER(sid_callback);
void demoneye_ay8910_latch_1_w(uint8_t data);
uint8_t demoneye_ay8910_latch_2_r();
void demoneye_ay8910_data_w(uint8_t data);
void get_redalert_pens(pen_t *pens);
void get_panther_pens(pen_t *pens);
void get_demoneye_pens(pen_t *pens);
void demoneye_bitmap_layer_w(offs_t offset, uint8_t data);
void demoneye_bitmap_ypos_w(u8 data);
virtual void sound_start() override;
void redalert_main_map(address_map &map);
void ww3_main_map(address_map &map);
void panther_main_map(address_map &map);
void demoneye_main_map(address_map &map);
void redalert_audio_map(address_map &map);
void panther_audio_map(address_map &map);
void demoneye_audio_map(address_map &map);
void redalert_voice_map(address_map &map);
emu_timer *m_audio_irq_on_timer;
emu_timer *m_audio_irq_off_timer;
uint8_t m_ay8910_latch_1;
uint8_t m_ay8910_latch_2;
u8 m_demoneye_bitmap_reg[4];
u8 m_demoneye_bitmap_yoffs;
u8 m_sound_hs;
};
#endif // MAME_INCLUDES_REDALERT_H
|