trunk/src/mess/drivers/apogee.c
r25447 | r25448 | |
10 | 10 | #include "emu.h" |
11 | 11 | #include "cpu/i8085/i8085.h" |
12 | 12 | #include "sound/wave.h" |
| 13 | #include "sound/speaker.h" |
13 | 14 | #include "machine/i8255.h" |
14 | 15 | #include "machine/8257dma.h" |
| 16 | #include "machine/pit8253.h" |
15 | 17 | #include "video/i8275.h" |
16 | 18 | #include "imagedev/cassette.h" |
17 | 19 | #include "formats/rk_cas.h" |
r25447 | r25448 | |
22 | 24 | { |
23 | 25 | public: |
24 | 26 | apogee_state(const machine_config &mconfig, device_type type, const char *tag) |
25 | | : radio86_state(mconfig, type, tag) { } |
| 27 | : radio86_state(mconfig, type, tag), |
| 28 | m_speaker(*this, "speaker") { } |
| 29 | |
| 30 | UINT8 m_out0; |
| 31 | UINT8 m_out1; |
| 32 | UINT8 m_out2; |
| 33 | DECLARE_WRITE_LINE_MEMBER(pit8253_out0_changed); |
| 34 | DECLARE_WRITE_LINE_MEMBER(pit8253_out1_changed); |
| 35 | DECLARE_WRITE_LINE_MEMBER(pit8253_out2_changed); |
| 36 | |
| 37 | required_device<speaker_sound_device> m_speaker; |
26 | 38 | }; |
27 | 39 | |
28 | 40 | |
r25447 | r25448 | |
30 | 42 | static ADDRESS_MAP_START(apogee_mem, AS_PROGRAM, 8, apogee_state ) |
31 | 43 | AM_RANGE( 0x0000, 0x0fff ) AM_RAMBANK("bank1") // First bank |
32 | 44 | AM_RANGE( 0x1000, 0xebff ) AM_RAM // RAM |
33 | | //AM_RANGE( 0xec00, 0xecff ) AM_RAM // Timer |
| 45 | AM_RANGE( 0xec00, 0xec03 ) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) AM_MIRROR(0x00fc) |
34 | 46 | AM_RANGE( 0xed00, 0xed03 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x00fc) |
35 | 47 | //AM_RANGE( 0xee00, 0xee03 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x00fc) |
36 | 48 | AM_RANGE( 0xef00, 0xef01 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x00fe) // video |
r25447 | r25448 | |
140 | 152 | NULL |
141 | 153 | }; |
142 | 154 | |
| 155 | static const INT16 speaker_levels[] = {-32767, -10922, 10922, 32767}; |
143 | 156 | |
| 157 | static const speaker_interface apogee_speaker_interface = |
| 158 | { |
| 159 | 4, |
| 160 | speaker_levels |
| 161 | }; |
| 162 | |
| 163 | WRITE_LINE_MEMBER(apogee_state::pit8253_out0_changed) |
| 164 | { |
| 165 | m_out0 = state; |
| 166 | m_speaker->level_w(m_out0+m_out1+m_out2); |
| 167 | } |
| 168 | |
| 169 | WRITE_LINE_MEMBER(apogee_state::pit8253_out1_changed) |
| 170 | { |
| 171 | m_out1 = state; |
| 172 | m_speaker->level_w(m_out0+m_out1+m_out2); |
| 173 | } |
| 174 | |
| 175 | WRITE_LINE_MEMBER(apogee_state::pit8253_out2_changed) |
| 176 | { |
| 177 | m_out2 = state; |
| 178 | m_speaker->level_w(m_out0+m_out1+m_out2); |
| 179 | } |
| 180 | |
| 181 | const struct pit8253_interface apogee_pit8253_config = |
| 182 | { |
| 183 | { |
| 184 | { |
| 185 | XTAL_16MHz/9, |
| 186 | DEVCB_NULL, |
| 187 | DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out0_changed) |
| 188 | }, { |
| 189 | XTAL_16MHz/9, |
| 190 | DEVCB_NULL, |
| 191 | DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out1_changed) |
| 192 | }, { |
| 193 | XTAL_16MHz/9, |
| 194 | DEVCB_NULL, |
| 195 | DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out2_changed) |
| 196 | } |
| 197 | } |
| 198 | }; |
| 199 | |
| 200 | |
144 | 201 | /* F4 Character Displayer */ |
145 | 202 | static const gfx_layout apogee_charlayout = |
146 | 203 | { |
r25447 | r25448 | |
167 | 224 | MCFG_CPU_PROGRAM_MAP(apogee_mem) |
168 | 225 | MCFG_MACHINE_RESET_OVERRIDE(apogee_state, radio86 ) |
169 | 226 | |
| 227 | MCFG_PIT8253_ADD( "pit8253", apogee_pit8253_config ) |
| 228 | |
170 | 229 | MCFG_I8255_ADD( "ppi8255_1", radio86_ppi8255_interface_1 ) |
171 | 230 | |
172 | 231 | //MCFG_I8255_ADD( "ppi8255_2", apogee_ppi8255_interface_2 ) |
r25447 | r25448 | |
187 | 246 | MCFG_SPEAKER_STANDARD_MONO("mono") |
188 | 247 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") |
189 | 248 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 249 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 250 | MCFG_SOUND_CONFIG(apogee_speaker_interface) |
| 251 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) |
190 | 252 | |
191 | 253 | MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma) |
192 | 254 | |