trunk/src/emu/sound/asc.c
| r24546 | r24547 | |
| 46 | 46 | asc_device::asc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 47 | 47 | : device_t(mconfig, ASC, "ASC", tag, owner, clock, "asc", __FILE__), |
| 48 | 48 | device_sound_interface(mconfig, *this), |
| 49 | | m_chip_type(0), |
| 50 | | m_irq_cb(NULL) |
| 49 | write_irq(*this), |
| 50 | m_chip_type(0) |
| 51 | 51 | { |
| 52 | 52 | } |
| 53 | 53 | |
| r24546 | r24547 | |
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | //------------------------------------------------- |
| 67 | | // static_set_type - configuration helper to set |
| 68 | | // the IRQ callback |
| 69 | | //------------------------------------------------- |
| 70 | | |
| 71 | | |
| 72 | | void asc_device::static_set_irqf(device_t &device, void (*irqf)(device_t *device, int state)) |
| 73 | | { |
| 74 | | asc_device &asc = downcast<asc_device &>(device); |
| 75 | | asc.m_irq_cb = irqf; |
| 76 | | } |
| 77 | | |
| 78 | | //------------------------------------------------- |
| 79 | 67 | // device_start - device-specific startup |
| 80 | 68 | //------------------------------------------------- |
| 81 | 69 | |
| r24546 | r24547 | |
| 99 | 87 | save_item(NAME(m_regs)); |
| 100 | 88 | save_item(NAME(m_phase)); |
| 101 | 89 | save_item(NAME(m_incr)); |
| 90 | |
| 91 | write_irq.resolve_safe(); |
| 102 | 92 | } |
| 103 | 93 | |
| 104 | 94 | |
| r24546 | r24547 | |
| 183 | 173 | { |
| 184 | 174 | m_regs[R_FIFOSTAT-0x800] |= 0x4; // fifo less than half full |
| 185 | 175 | m_regs[R_FIFOSTAT-0x800] |= 0x8; // just pass the damn test |
| 186 | | if (m_irq_cb) |
| 187 | | { |
| 188 | | m_irq_cb(this, 1); |
| 189 | | } |
| 176 | write_irq(ASSERT_LINE); |
| 190 | 177 | } |
| 191 | 178 | break; |
| 192 | 179 | |
| r24546 | r24547 | |
| 194 | 181 | if (m_fifo_cap_a == 0x1ff) |
| 195 | 182 | { |
| 196 | 183 | m_regs[R_FIFOSTAT-0x800] |= 1; // fifo A half-empty |
| 197 | | if (m_irq_cb) |
| 198 | | { |
| 199 | | m_irq_cb(this, 1); |
| 200 | | } |
| 184 | write_irq(ASSERT_LINE); |
| 201 | 185 | } |
| 202 | 186 | else if (m_fifo_cap_a == 0x1) // fifo A fully empty |
| 203 | 187 | { |
| 204 | 188 | m_regs[R_FIFOSTAT-0x800] |= 2; // fifo A empty |
| 205 | | if (m_irq_cb) |
| 206 | | { |
| 207 | | m_irq_cb(this, 1); |
| 208 | | } |
| 189 | write_irq(ASSERT_LINE); |
| 209 | 190 | } |
| 210 | 191 | |
| 211 | 192 | if (m_fifo_cap_b == 0x1ff) |
| 212 | 193 | { |
| 213 | 194 | m_regs[R_FIFOSTAT-0x800] |= 4; // fifo B half-empty |
| 214 | | if (m_irq_cb) |
| 215 | | { |
| 216 | | m_irq_cb(this, 1); |
| 217 | | } |
| 195 | write_irq(ASSERT_LINE); |
| 218 | 196 | } |
| 219 | 197 | else if (m_fifo_cap_b == 0x1) // fifo B fully empty |
| 220 | 198 | { |
| 221 | 199 | m_regs[R_FIFOSTAT-0x800] |= 8; // fifo B empty |
| 222 | | if (m_irq_cb) |
| 223 | | { |
| 224 | | m_irq_cb(this, 1); |
| 225 | | } |
| 200 | write_irq(ASSERT_LINE); |
| 226 | 201 | } |
| 227 | 202 | break; |
| 228 | 203 | } |
| r24546 | r24547 | |
| 356 | 331 | m_regs[R_FIFOSTAT-0x800] = 0; |
| 357 | 332 | |
| 358 | 333 | // reading this clears interrupts |
| 359 | | if (m_irq_cb) |
| 360 | | { |
| 361 | | m_irq_cb(this, 0); |
| 362 | | } |
| 334 | write_irq(CLEAR_LINE); |
| 363 | 335 | |
| 364 | 336 | return rv; |
| 365 | 337 | |
trunk/src/mess/drivers/mac.c
| r24546 | r24547 | |
| 1051 | 1051 | |
| 1052 | 1052 | /* sound hardware */ |
| 1053 | 1053 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1054 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1054 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1055 | 1055 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1056 | 1056 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1057 | 1057 | |
| r24546 | r24547 | |
| 1087 | 1087 | |
| 1088 | 1088 | /* sound hardware */ |
| 1089 | 1089 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1090 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1090 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1091 | 1091 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1092 | 1092 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1093 | 1093 | |
| r24546 | r24547 | |
| 1137 | 1137 | |
| 1138 | 1138 | /* sound hardware */ |
| 1139 | 1139 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1140 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1140 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1141 | 1141 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1142 | 1142 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1143 | 1143 | |
| r24546 | r24547 | |
| 1206 | 1206 | MCFG_NUBUS_BUS_ADD("pds", "maincpu", nubus_intf) |
| 1207 | 1207 | MCFG_NUBUS_SLOT_ADD("pds","lcpds", mac_lcpds_cards, NULL) |
| 1208 | 1208 | |
| 1209 | | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_V8, mac_asc_irq) |
| 1209 | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_V8, WRITELINE(mac_state, mac_asc_irq)) |
| 1210 | 1210 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1211 | 1211 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1212 | 1212 | |
| r24546 | r24547 | |
| 1247 | 1247 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 1248 | 1248 | MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,48M,64M,80M") |
| 1249 | 1249 | |
| 1250 | | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_SONORA, mac_asc_irq) |
| 1250 | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_SONORA, WRITELINE(mac_state, mac_asc_irq)) |
| 1251 | 1251 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1252 | 1252 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1253 | 1253 | |
| r24546 | r24547 | |
| 1345 | 1345 | |
| 1346 | 1346 | /* sound hardware */ |
| 1347 | 1347 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1348 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1348 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1349 | 1349 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1350 | 1350 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1351 | 1351 | |
| r24546 | r24547 | |
| 1397 | 1397 | |
| 1398 | 1398 | /* sound hardware */ |
| 1399 | 1399 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1400 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1400 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1401 | 1401 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1402 | 1402 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1403 | 1403 | |
| r24546 | r24547 | |
| 1465 | 1465 | |
| 1466 | 1466 | /* sound hardware */ |
| 1467 | 1467 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1468 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq) |
| 1468 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1469 | 1469 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1470 | 1470 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1471 | 1471 | |
| r24546 | r24547 | |
| 1537 | 1537 | MCFG_SCREEN_VISIBLE_AREA(0, MAC_H_VIS-1, 0, MAC_V_VIS-1) |
| 1538 | 1538 | MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv) |
| 1539 | 1539 | |
| 1540 | | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_EAGLE, mac_asc_irq) |
| 1540 | MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_EAGLE, WRITELINE(mac_state, mac_asc_irq)) |
| 1541 | 1541 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1542 | 1542 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1543 | 1543 | |
| r24546 | r24547 | |
| 1679 | 1679 | |
| 1680 | 1680 | /* sound hardware */ |
| 1681 | 1681 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1682 | | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_EASC, mac_asc_irq) |
| 1682 | MCFG_ASC_ADD("asc", C15M, ASC_TYPE_EASC, WRITELINE(mac_state, mac_asc_irq)) |
| 1683 | 1683 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 1684 | 1684 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 1685 | 1685 | |
trunk/src/mess/machine/mac.c
| r24546 | r24547 | |
| 107 | 107 | #define AUDIO_IS_CLASSIC (m_model <= MODEL_MAC_CLASSIC) |
| 108 | 108 | #define MAC_HAS_VIA2 ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX)) |
| 109 | 109 | |
| 110 | | #define ASC_INTS_RBV ((mac->m_model >= MODEL_MAC_IICI) && (mac->m_model <= MODEL_MAC_IIVI)) || ((mac->m_model >= MODEL_MAC_LC) && (mac->m_model <= MODEL_MAC_LC_580)) |
| 111 | 110 | #define INTS_RBV ((m_model >= MODEL_MAC_IICI) && (m_model <= MODEL_MAC_IIVI)) || ((m_model >= MODEL_MAC_LC) && (m_model <= MODEL_MAC_LC_580)) |
| 112 | 111 | |
| 113 | 112 | #ifdef MAME_DEBUG |
| r24546 | r24547 | |
| 304 | 303 | this->field_interrupts(); |
| 305 | 304 | } |
| 306 | 305 | |
| 307 | | void mac_asc_irq(device_t *device, int state) |
| 306 | WRITE_LINE_MEMBER(mac_state::mac_asc_irq) |
| 308 | 307 | { |
| 309 | | mac_state *mac = device->machine().driver_data<mac_state>(); |
| 310 | | |
| 311 | | if (ASC_INTS_RBV) |
| 308 | if (INTS_RBV) |
| 312 | 309 | { |
| 313 | | if (state) |
| 310 | if (state == ASSERT_LINE) |
| 314 | 311 | { |
| 315 | | mac->m_rbv_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt |
| 316 | | mac->rbv_recalc_irqs(); |
| 312 | m_rbv_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt |
| 313 | rbv_recalc_irqs(); |
| 317 | 314 | } |
| 318 | 315 | else |
| 319 | 316 | { |
| 320 | | mac->m_rbv_regs[3] &= ~0x10; |
| 321 | | mac->rbv_recalc_irqs(); |
| 317 | m_rbv_regs[3] &= ~0x10; |
| 318 | rbv_recalc_irqs(); |
| 322 | 319 | } |
| 323 | 320 | } |
| 324 | | else if ((mac->m_model == MODEL_MAC_PORTABLE) || (mac->m_model == MODEL_MAC_PB100)) |
| 321 | else if ((m_model == MODEL_MAC_PORTABLE) || (m_model == MODEL_MAC_PB100)) |
| 325 | 322 | { |
| 326 | 323 | // m_asc_interrupt = state; |
| 327 | | // mac->field_interrupts(); |
| 324 | // field_interrupts(); |
| 328 | 325 | } |
| 329 | | else if ((mac->m_model >= MODEL_MAC_II) && (mac->m_model != MODEL_MAC_IIFX)) |
| 326 | else if ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX)) |
| 330 | 327 | { |
| 331 | | mac->m_via2->write_cb1(state^1); |
| 328 | m_via2->write_cb1(state^1); |
| 332 | 329 | } |
| 333 | 330 | } |
| 334 | 331 | |