trunk/src/emu/bus/msx_cart/bm_012.c
| r31087 | r31088 | |
| 23 | 23 | msx_cart_bm_012::msx_cart_bm_012(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 24 | 24 | : device_t(mconfig, MSX_CART_BM_012, "MSX Cartridge - BM-012", tag, owner, clock, "msx_cart_bm_012", __FILE__) |
| 25 | 25 | , msx_cart_interface(mconfig, *this) |
| 26 | | , m_tmpz84c015af_pio(*this, "tmpz84_pio") |
| 27 | | , m_tmpz84c015af_ctc(*this, "tmpz84_ctc") |
| 28 | | , m_tmpz84c015af_sio(*this, "tmpz84_sio") |
| 29 | | , m_irq_priority(0) |
| 26 | , m_tmpz84c015af(*this, "tmpz84c015af") |
| 30 | 27 | , m_bm012_pio(*this, "bm012_pio") |
| 31 | 28 | , m_mdthru(*this, "mdthru") |
| 32 | 29 | { |
| r31087 | r31088 | |
| 39 | 36 | ADDRESS_MAP_END |
| 40 | 37 | |
| 41 | 38 | |
| 42 | | static ADDRESS_MAP_START( bm_012_io_map, AS_IO, 8, msx_cart_bm_012 ) |
| 43 | | ADDRESS_MAP_UNMAP_HIGH |
| 44 | | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 45 | | |
| 46 | | // 10-13 - CTC channels 0-3 |
| 47 | | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("tmpz84_ctc", z80ctc_device, read, write) |
| 48 | | |
| 49 | | // 18-1B - SIO |
| 50 | | AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE("tmpz84_sio", z80dart_device, ba_cd_r, ba_cd_w) |
| 51 | | |
| 52 | | // 1C-1F - PIO |
| 53 | | AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("tmpz84_pio", z80pio_device, read_alt, write_alt) |
| 54 | | |
| 55 | | // F0-F1 - WDT |
| 56 | | // F4 - IRQ priority |
| 57 | | AM_RANGE(0xf4, 0xf4) AM_WRITE(tmpz84c015af_f4_w) |
| 58 | | ADDRESS_MAP_END |
| 59 | | |
| 60 | | |
| 61 | | static const z80_daisy_config bm_012_daisy_chain[] = |
| 62 | | { |
| 63 | | { "tmpz84_pio" }, |
| 64 | | { "tmpz84_sio" }, |
| 65 | | { "tmpz84_ctc" }, |
| 66 | | { NULL } |
| 67 | | }; |
| 68 | | |
| 69 | | |
| 70 | 39 | static MACHINE_CONFIG_FRAGMENT( msx_cart_bm_012 ) |
| 71 | 40 | // 12MHz XTAL @ X1 |
| 72 | 41 | // Toshiba TMPZ84C015AF-6 (@U5) components: |
| r31087 | r31088 | |
| 76 | 45 | // - PIO |
| 77 | 46 | // - CGC |
| 78 | 47 | // - WDT |
| 79 | | MCFG_CPU_ADD("tmpz84_cpu", Z80, XTAL_12MHz/2) /* 6 MHz */ |
| 48 | MCFG_CPU_ADD("tmpz84c015af", TMPZ84C015, XTAL_12MHz/2) /* 6 MHz */ |
| 80 | 49 | MCFG_CPU_PROGRAM_MAP(bm_012_memory_map) |
| 81 | | MCFG_CPU_IO_MAP(bm_012_io_map) |
| 82 | | MCFG_CPU_CONFIG(bm_012_daisy_chain) |
| 50 | // PIO callbacks |
| 51 | MCFG_TMPZ84C015_IN_PA_CB(DEVREAD8("bm012_pio", z80pio_device, pa_r)) |
| 52 | MCFG_TMPZ84C015_OUT_PA_CB(DEVWRITE8("bm012_pio", z80pio_device, pa_w)) |
| 53 | MCFG_TMPZ84C015_IN_PB_CB(DEVREAD8("bm012_pio", z80pio_device, pb_r)) |
| 54 | MCFG_TMPZ84C015_OUT_PB_CB(DEVWRITE8("bm012_pio", z80pio_device, pb_w)) |
| 55 | MCFG_TMPZ84C015_OUT_BRDY_CB(DEVWRITELINE("bm012_pio", z80pio_device, strobe_b)) |
| 56 | // SIO callbacks |
| 57 | MCFG_TMPZ84C015_OUT_TXDA_CB(DEVWRITELINE("mdout", midi_port_device, write_txd)) |
| 83 | 58 | |
| 84 | | MCFG_DEVICE_ADD("tmpz84_pio", Z80PIO, XTAL_12MHz/2) |
| 85 | | MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("tmpz84_cpu", INPUT_LINE_IRQ0)) |
| 86 | | MCFG_Z80PIO_IN_PA_CB(DEVREAD8("bm012_pio", z80pio_device, pa_r)) |
| 87 | | MCFG_Z80PIO_OUT_PA_CB(DEVWRITE8("bm012_pio", z80pio_device, pa_w)) |
| 88 | | MCFG_Z80PIO_IN_PB_CB(DEVREAD8("bm012_pio", z80pio_device, pb_r)) |
| 89 | | MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("bm012_pio", z80pio_device, pb_w)) |
| 90 | | MCFG_Z80PIO_OUT_BRDY_CB(DEVWRITELINE("bm012_pio", z80pio_device, strobe_b)) |
| 91 | | |
| 92 | | MCFG_DEVICE_ADD("tmpz84_ctc", Z80CTC, XTAL_12MHz/2) |
| 93 | | MCFG_Z80CTC_INTR_CB(INPUTLINE("tmpz84_cpu", INPUT_LINE_IRQ0)) |
| 94 | | |
| 95 | | MCFG_Z80SIO0_ADD("tmpz84_sio", XTAL_12MHz/2, 0, 0, 0, 0) |
| 96 | | MCFG_Z80DART_OUT_INT_CB(INPUTLINE("tmpz84_cpu", INPUT_LINE_IRQ0)) |
| 97 | | MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE("mdout", midi_port_device, write_txd)) |
| 98 | | |
| 99 | 59 | // Sony CXK5864BSP-10L (8KB ram) |
| 100 | 60 | // Sharp LH0081A Z80A-PIO-0 - For communicating between the MSX and the TMP |
| 101 | 61 | MCFG_DEVICE_ADD("bm012_pio", Z80PIO, XTAL_3_579545MHz) // ????? |
| 102 | | MCFG_Z80PIO_OUT_PA_CB(DEVWRITE8("tmpz84_pio", z80pio_device, pa_w)) |
| 103 | | MCFG_Z80PIO_IN_PA_CB(DEVREAD8("tmpz84_pio", z80pio_device, pa_r)) |
| 104 | | MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("tmpz84_pio", z80pio_device, pb_w)) |
| 105 | | MCFG_Z80PIO_IN_PB_CB(DEVREAD8("tmpz84_pio", z80pio_device, pb_r)) |
| 106 | | MCFG_Z80PIO_OUT_BRDY_CB(DEVWRITELINE("tmpz84_pio", z80pio_device, strobe_b)) |
| 62 | MCFG_Z80PIO_OUT_PA_CB(DEVWRITE8("tmpz84c015af", tmpz84c015_device, pa_w)) |
| 63 | MCFG_Z80PIO_IN_PA_CB(DEVREAD8("tmpz84c015af", tmpz84c015_device, pa_r)) |
| 64 | MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("tmpz84c015af", tmpz84c015_device, pb_w)) |
| 65 | MCFG_Z80PIO_IN_PB_CB(DEVREAD8("tmpz84c015af", tmpz84c015_device, pb_r)) |
| 66 | MCFG_Z80PIO_OUT_BRDY_CB(DEVWRITELINE("tmpz84c015af", tmpz84c015_device, strobe_b)) |
| 107 | 67 | |
| 108 | 68 | // MIDI ports |
| 109 | 69 | MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin") |
| r31087 | r31088 | |
| 122 | 82 | |
| 123 | 83 | |
| 124 | 84 | ROM_START( msx_cart_bm_012 ) |
| 125 | | ROM_REGION(0x8000, "tmpz84_cpu", 0) |
| 85 | ROM_REGION(0x8000, "tmpz84c015af", 0) |
| 126 | 86 | // The rom chip at U4 is a 27256, but it contains the same 8KB duplicated 4 times |
| 127 | 87 | ROM_LOAD("midi_v1.00.u4", 0x0, 0x8000, CRC(840c9e74) SHA1(6d07637ad3a61b509221ed4650eed18442371010)) |
| 128 | 88 | ROM_END |
| r31087 | r31088 | |
| 143 | 103 | } |
| 144 | 104 | |
| 145 | 105 | |
| 146 | | void msx_cart_bm_012::device_reset() |
| 147 | | { |
| 148 | | } |
| 149 | | |
| 150 | | |
| 151 | | WRITE8_MEMBER(msx_cart_bm_012::tmpz84c015af_f4_w) |
| 152 | | { |
| 153 | | m_irq_priority = data; |
| 154 | | } |
| 155 | | |
| 156 | | |
| 157 | 106 | WRITE_LINE_MEMBER(msx_cart_bm_012::midi_in) |
| 158 | 107 | { |
| 159 | 108 | m_mdthru->write_txd(state); |
| 160 | | m_tmpz84c015af_sio->rxb_w(state); |
| 109 | m_tmpz84c015af->rxb_w(state); |
| 161 | 110 | } |
| 162 | 111 | |
| 163 | 112 | |