trunk/src/mess/includes/apple2.h
| r29619 | r29620 | |
| 19 | 19 | #include "machine/kb3600.h" |
| 20 | 20 | #include "sound/speaker.h" |
| 21 | 21 | #include "machine/ram.h" |
| 22 | #include "bus/rs232/rs232.h" |
| 23 | #include "machine/mos6551.h" |
| 22 | 24 | |
| 23 | 25 | #define AUXSLOT_TAG "auxbus" |
| 24 | 26 | |
| 27 | #define IIC_ACIA1_TAG "acia1" |
| 28 | #define IIC_ACIA2_TAG "acia2" |
| 29 | |
| 30 | #define PRINTER_PORT_TAG "printer" |
| 31 | #define MODEM_PORT_TAG "modem" |
| 32 | |
| 25 | 33 | /*************************************************************************** |
| 26 | 34 | SOFTSWITCH VALUES |
| 27 | 35 | ***************************************************************************/ |
| r29619 | r29620 | |
| 127 | 135 | m_kbspecial(*this, "keyb_special"), |
| 128 | 136 | m_kbrepeat(*this, "keyb_repeat"), |
| 129 | 137 | m_resetdip(*this, "reset_dip"), |
| 130 | | m_cassette(*this, "cassette") |
| 138 | m_cassette(*this, "cassette"), |
| 139 | m_acia1(*this, IIC_ACIA1_TAG), |
| 140 | m_acia2(*this, IIC_ACIA2_TAG) |
| 131 | 141 | { } |
| 132 | 142 | |
| 133 | 143 | required_device<cpu_device> m_maincpu; |
| r29619 | r29620 | |
| 143 | 153 | optional_ioport m_resetdip; |
| 144 | 154 | optional_device<cassette_image_device> m_cassette; |
| 145 | 155 | |
| 156 | optional_device<mos6551_device> m_acia1, m_acia2; |
| 157 | |
| 146 | 158 | UINT32 m_flags, m_flags_mask; |
| 147 | 159 | INT32 m_a2_cnxx_slot; |
| 148 | 160 | UINT32 m_a2_mask; |
trunk/src/mess/drivers/apple2.c
| r29619 | r29620 | |
| 1169 | 1169 | MCFG_A2BUS_SLOT_REMOVE("sl6") |
| 1170 | 1170 | MCFG_A2BUS_SLOT_REMOVE("sl7") |
| 1171 | 1171 | |
| 1172 | MCFG_DEVICE_ADD(IIC_ACIA1_TAG, MOS6551, 0) |
| 1173 | MCFG_MOS6551_XTAL(XTAL_14_31818MHz / 8) // ~1.789 MHz |
| 1174 | MCFG_MOS6551_TXD_HANDLER(DEVWRITELINE(PRINTER_PORT_TAG, rs232_port_device, write_txd)) |
| 1175 | |
| 1176 | MCFG_DEVICE_ADD(IIC_ACIA2_TAG, MOS6551, 0) |
| 1177 | MCFG_MOS6551_XTAL(XTAL_1_8432MHz) // matches SSC so modem software is compatible |
| 1178 | MCFG_MOS6551_TXD_HANDLER(DEVWRITELINE("modem", rs232_port_device, write_txd)) |
| 1179 | |
| 1180 | MCFG_RS232_PORT_ADD(PRINTER_PORT_TAG, default_rs232_devices, NULL) |
| 1181 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE(IIC_ACIA1_TAG, mos6551_device, write_rxd)) |
| 1182 | MCFG_RS232_DCD_HANDLER(DEVWRITELINE(IIC_ACIA1_TAG, mos6551_device, write_dcd)) |
| 1183 | MCFG_RS232_DSR_HANDLER(DEVWRITELINE(IIC_ACIA1_TAG, mos6551_device, write_dsr)) |
| 1184 | MCFG_RS232_CTS_HANDLER(DEVWRITELINE(IIC_ACIA1_TAG, mos6551_device, write_cts)) |
| 1185 | |
| 1186 | MCFG_RS232_PORT_ADD(MODEM_PORT_TAG, default_rs232_devices, NULL) |
| 1187 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE(IIC_ACIA2_TAG, mos6551_device, write_rxd)) |
| 1188 | MCFG_RS232_DCD_HANDLER(DEVWRITELINE(IIC_ACIA2_TAG, mos6551_device, write_dcd)) |
| 1189 | MCFG_RS232_DSR_HANDLER(DEVWRITELINE(IIC_ACIA2_TAG, mos6551_device, write_dsr)) |
| 1190 | MCFG_RS232_CTS_HANDLER(DEVWRITELINE(IIC_ACIA2_TAG, mos6551_device, write_cts)) |
| 1191 | |
| 1172 | 1192 | // TODO: populate the IIc's other virtual slots with ONBOARD_ADD |
| 1173 | | MCFG_A2BUS_ONBOARD_ADD("a2bus", "sl1", A2BUS_SSC, NULL) |
| 1174 | | MCFG_A2BUS_ONBOARD_ADD("a2bus", "sl2", A2BUS_SSC, NULL) |
| 1175 | 1193 | MCFG_A2BUS_ONBOARD_ADD("a2bus", "sl6", A2BUS_DISKIING, NULL) |
| 1176 | 1194 | |
| 1177 | 1195 | MCFG_A2EAUXSLOT_SLOT_REMOVE("aux") |
| r29619 | r29620 | |
| 1195 | 1213 | static MACHINE_CONFIG_DERIVED( laser128, apple2c ) |
| 1196 | 1214 | MCFG_MACHINE_START_OVERRIDE(apple2_state,laser128) |
| 1197 | 1215 | |
| 1198 | | MCFG_A2BUS_SLOT_REMOVE("sl1") |
| 1199 | | MCFG_A2BUS_SLOT_REMOVE("sl2") |
| 1200 | 1216 | MCFG_A2BUS_SLOT_REMOVE("sl6") |
| 1201 | 1217 | |
| 1202 | 1218 | MCFG_A2BUS_ONBOARD_ADD("a2bus", "sl1", A2BUS_LASER128, NULL) |
trunk/src/mess/machine/apple2.c
| r29619 | r29620 | |
| 345 | 345 | if(!space.debugger_access()) |
| 346 | 346 | { |
| 347 | 347 | device_a2bus_card_interface *slotdevice; |
| 348 | int slot; |
| 348 | 349 | |
| 349 | 350 | offset &= 0x7F; |
| 351 | slot = offset / 0x10; |
| 350 | 352 | |
| 353 | if ((m_machinetype == APPLE_IIC) || (m_machinetype == APPLE_IICPLUS)) |
| 354 | { |
| 355 | if (slot == 1) |
| 356 | { |
| 357 | offset &= 0xf; |
| 358 | if (offset >= 8 && offset <= 0xb) |
| 359 | { |
| 360 | return m_acia1->read(space, offset-8); |
| 361 | } |
| 362 | } |
| 363 | else if (slot == 2) |
| 364 | { |
| 365 | offset &= 0xf; |
| 366 | if (offset >= 8 && offset <= 0xb) |
| 367 | { |
| 368 | return m_acia2->read(space, offset-8); |
| 369 | } |
| 370 | } |
| 371 | } |
| 372 | |
| 351 | 373 | /* now identify the device */ |
| 352 | | slotdevice = m_a2bus->get_a2bus_card(offset / 0x10); |
| 374 | slotdevice = m_a2bus->get_a2bus_card(slot); |
| 353 | 375 | |
| 354 | 376 | /* and if we can, read from the slot */ |
| 355 | 377 | if (slotdevice != NULL) |
| r29619 | r29620 | |
| 365 | 387 | WRITE8_MEMBER(apple2_state::apple2_c080_w) |
| 366 | 388 | { |
| 367 | 389 | device_a2bus_card_interface *slotdevice; |
| 390 | int slot; |
| 368 | 391 | |
| 369 | 392 | offset &= 0x7F; |
| 393 | slot = offset / 0x10; |
| 370 | 394 | |
| 395 | if ((m_machinetype == APPLE_IIC) || (m_machinetype == APPLE_IICPLUS)) |
| 396 | { |
| 397 | if (slot == 1) |
| 398 | { |
| 399 | offset &= 0xf; |
| 400 | if (offset >= 8 && offset <= 0xb) |
| 401 | { |
| 402 | m_acia1->write(space, offset-8, data); |
| 403 | return; |
| 404 | } |
| 405 | } |
| 406 | else if (slot == 2) |
| 407 | { |
| 408 | offset &= 0xf; |
| 409 | if (offset >= 8 && offset <= 0xb) |
| 410 | { |
| 411 | m_acia2->write(space, offset-8, data); |
| 412 | return; |
| 413 | } |
| 414 | } |
| 415 | } |
| 416 | |
| 371 | 417 | /* now identify the device */ |
| 372 | | slotdevice = m_a2bus->get_a2bus_card(offset / 0x10); |
| 418 | slotdevice = m_a2bus->get_a2bus_card(slot); |
| 373 | 419 | |
| 374 | 420 | /* and if we can, write to the slot */ |
| 375 | 421 | if (slotdevice != NULL) |