trunk/src/emu/machine/mb89363b.c
| r0 | r30903 | |
| 1 | /* |
| 2 | (this acts as a trampoline to 2x i8255 chips) |
| 3 | |
| 4 | |
| 5 | Manufacturer: Fujitsu |
| 6 | Part Number: MB89363 / MB89363B / MB89363R |
| 7 | Package: Surface Mount QFP80 / QFP64P (MB89363R) |
| 8 | Description: 8-bit x 3 x 2 (6 x 8-bit) parallel data I/O port VLSI chip |
| 9 | Parallel Communication Interface |
| 10 | Extended I/O |
| 11 | |
| 12 | Note: MB89363B is compatible with 8255 |
| 13 | |
| 14 | Pin Assignment: |
| 15 | +5v |
| 16 | P P P P P P P P P V P P P P P P P P P |
| 17 | N N 5 4 4 4 4 4 4 4 4 C N 1 1 1 1 1 1 1 1 2 N N |
| 18 | C C 3 0 1 2 3 4 5 6 7 C C 7 6 5 4 3 2 1 0 3 C C |
| 19 | |
| 20 | | | ^ ^ ^ ^ ^ ^ ^ ^ ^ | | ^ ^ ^ ^ ^ ^ ^ ^ ^ | | |
| 21 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 22 | | | v v v v v v v v v | | v v v v v v v v v | | |
| 23 | .-------------------------------------------------------. |
| 24 | | 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 | |
| 25 | | 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 | |
| 26 | P52 <-> | 65 40 | <-> P22 |
| 27 | P51 <-> | 66 39 | <-> P21 |
| 28 | P50 <-> | 67 38 | <-> P20 |
| 29 | P54 <-> | 68 37 | <-> P24 |
| 30 | P55 <-> | 69 36 | <-> P25 |
| 31 | P56 <-> | 70 35 | <-> P26 |
| 32 | P57 <-> | 71 34 | <-> P27 |
| 33 | NC --- | 72 MB89363B 33 | --- NC |
| 34 | NC --- | 73 32 | <-- RSLCT1 |
| 35 | GND --> | 74 31 | <-- RSLCT0 |
| 36 | CS2 --> | 75 30 | <-- GND |
| 37 | R --> | 76 29 | <-- CS1 |
| 38 | P30 <-> | 77 28 | <-> P00 |
| 39 | P31 <-> | 78 27 | <-> P01 |
| 40 | P32 <-> | 79 26 | <-> P02 |
| 41 | P33 <-> | 80 25 | <-> P03 |
| 42 | \ 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 | |
| 43 | \ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 | |
| 44 | -----------------------------------------------------' |
| 45 | ^ ^ ^ ^ ^ ^ | | ^ | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | |
| 46 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 47 | v v v v | | | | | | | v v v v v v v v v v v v | |
| 48 | |
| 49 | P P P P W R N N R N O D D D D D D D D P P P P N |
| 50 | 3 3 3 3 S C C H C U B B B B B B B B 0 0 0 0 C |
| 51 | 4 5 6 7 T / S 0 1 2 3 4 5 6 7 7 6 5 4 |
| 52 | R / |
| 53 | L I |
| 54 | N |
| 55 | S |
| 56 | |
| 57 | Block Diagram / Pin Descriptions: |
| 58 | http://www.mess.org/_media/datasheets/fujitsu/mb89363b_partial.pdf |
| 59 | |
| 60 | D.C. Characteristics: |
| 61 | (Recommended operating conditions unless otherwise noted) |
| 62 | (VCC = +5V +- 10%, GND = 0V, TA = -40o C to 85o C) |
| 63 | Value |
| 64 | Parameter Symbol Min Max Unit Test Condition |
| 65 | ---------------------------------------------------------------------------------- |
| 66 | Input Low Voltage ViL -0.3 0.8 V |
| 67 | Input High Voltage ViH 2.2 VCC +0.3 V |
| 68 | Output Low Voltage VoL - 0.4 V IoL = 2.5mA |
| 69 | Output High Voltage VoH 3.0 - V IoH =-2.5mA |
| 70 | |
| 71 | Sources: |
| 72 | http://www.emb-tech.co.jp/pc104/96dio.pdf |
| 73 | http://www.pb5800.com/resources/2350ser01.pdf |
| 74 | http://www.diagramasde.com/diagramas/otros2/TS-850S%20Service%20Manual%20.pdf |
| 75 | */ |
| 76 | |
| 77 | #include "emu.h" |
| 78 | #include "machine/mb89363b.h" |
| 79 | |
| 80 | |
| 81 | |
| 82 | extern const device_type MB89363B = &device_creator<mb89363b_device>; |
| 83 | |
| 84 | |
| 85 | mb89363b_device::mb89363b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 86 | : device_t(mconfig, MB89363B, "MB89363B", tag, owner, clock, "mb89363b", __FILE__), |
| 87 | m_i8255_a(*this, "i8255_a"), |
| 88 | m_i8255_b(*this, "i8255_b"), |
| 89 | m_in_a_pa_cb(*this), |
| 90 | m_in_a_pb_cb(*this), |
| 91 | m_in_a_pc_cb(*this), |
| 92 | m_out_a_pa_cb(*this), |
| 93 | m_out_a_pb_cb(*this), |
| 94 | m_out_a_pc_cb(*this), |
| 95 | m_in_b_pa_cb(*this), |
| 96 | m_in_b_pb_cb(*this), |
| 97 | m_in_b_pc_cb(*this), |
| 98 | m_out_b_pa_cb(*this), |
| 99 | m_out_b_pb_cb(*this), |
| 100 | m_out_b_pc_cb(*this) |
| 101 | { |
| 102 | } |
| 103 | |
| 104 | |
| 105 | READ8_MEMBER(mb89363b_device::i8255_a_port_a_r) { return m_in_a_pa_cb(space, offset); } |
| 106 | READ8_MEMBER(mb89363b_device::i8255_a_port_b_r) { return m_in_a_pb_cb(space, offset); } |
| 107 | READ8_MEMBER(mb89363b_device::i8255_a_port_c_r) { return m_in_a_pc_cb(space, offset); } |
| 108 | WRITE8_MEMBER(mb89363b_device::i8255_a_port_a_w) { m_out_a_pa_cb(space, offset, data); } |
| 109 | WRITE8_MEMBER(mb89363b_device::i8255_a_port_b_w) { m_out_a_pb_cb(space, offset, data); } |
| 110 | WRITE8_MEMBER(mb89363b_device::i8255_a_port_c_w) { m_out_a_pc_cb(space, offset, data); } |
| 111 | READ8_MEMBER(mb89363b_device::i8255_b_port_a_r) { return m_in_b_pa_cb(space, offset); } |
| 112 | READ8_MEMBER(mb89363b_device::i8255_b_port_b_r) { return m_in_b_pb_cb(space, offset); } |
| 113 | READ8_MEMBER(mb89363b_device::i8255_b_port_c_r) { return m_in_b_pc_cb(space, offset); } |
| 114 | WRITE8_MEMBER(mb89363b_device::i8255_b_port_a_w) { m_out_b_pa_cb(space, offset, data); } |
| 115 | WRITE8_MEMBER(mb89363b_device::i8255_b_port_b_w) { m_out_b_pb_cb(space, offset, data); } |
| 116 | WRITE8_MEMBER(mb89363b_device::i8255_b_port_c_w) { m_out_b_pc_cb(space, offset, data); } |
| 117 | |
| 118 | |
| 119 | READ8_MEMBER( mb89363b_device::read ) |
| 120 | { |
| 121 | if (offset & 4) |
| 122 | return m_i8255_b->read(space, offset & 3); |
| 123 | else |
| 124 | return m_i8255_a->read(space, offset & 3); |
| 125 | } |
| 126 | |
| 127 | WRITE8_MEMBER( mb89363b_device::write ) |
| 128 | { |
| 129 | if (offset & 4) |
| 130 | m_i8255_b->write(space, offset & 3, data); |
| 131 | else |
| 132 | m_i8255_a->write(space, offset & 3, data); |
| 133 | } |
| 134 | |
| 135 | |
| 136 | static MACHINE_CONFIG_FRAGMENT( mb89363b ) |
| 137 | MCFG_DEVICE_ADD("i8255_a", I8255, 0) |
| 138 | MCFG_I8255_IN_PORTA_CB(READ8(mb89363b_device, i8255_a_port_a_r)) |
| 139 | MCFG_I8255_IN_PORTB_CB(READ8(mb89363b_device, i8255_a_port_b_r)) |
| 140 | MCFG_I8255_IN_PORTC_CB(READ8(mb89363b_device, i8255_a_port_c_r)) |
| 141 | MCFG_I8255_OUT_PORTA_CB(WRITE8(mb89363b_device, i8255_a_port_a_w)) |
| 142 | MCFG_I8255_OUT_PORTB_CB(WRITE8(mb89363b_device, i8255_a_port_b_w)) |
| 143 | MCFG_I8255_OUT_PORTC_CB(WRITE8(mb89363b_device, i8255_a_port_c_w)) |
| 144 | |
| 145 | MCFG_DEVICE_ADD("i8255_b", I8255, 0) |
| 146 | MCFG_I8255_IN_PORTA_CB(READ8(mb89363b_device, i8255_b_port_a_r)) |
| 147 | MCFG_I8255_IN_PORTB_CB(READ8(mb89363b_device, i8255_b_port_b_r)) |
| 148 | MCFG_I8255_IN_PORTC_CB(READ8(mb89363b_device, i8255_b_port_c_r)) |
| 149 | MCFG_I8255_OUT_PORTA_CB(WRITE8(mb89363b_device, i8255_b_port_a_w)) |
| 150 | MCFG_I8255_OUT_PORTB_CB(WRITE8(mb89363b_device, i8255_b_port_b_w)) |
| 151 | MCFG_I8255_OUT_PORTC_CB(WRITE8(mb89363b_device, i8255_b_port_c_w)) |
| 152 | MACHINE_CONFIG_END |
| 153 | |
| 154 | machine_config_constructor mb89363b_device::device_mconfig_additions() const |
| 155 | { |
| 156 | return MACHINE_CONFIG_NAME( mb89363b ); |
| 157 | } |
| 158 | |
| 159 | void mb89363b_device::device_start() |
| 160 | { |
| 161 | m_in_a_pa_cb.resolve_safe(0); |
| 162 | m_in_a_pb_cb.resolve_safe(0); |
| 163 | m_in_a_pc_cb.resolve_safe(0); |
| 164 | m_out_a_pa_cb.resolve_safe(); |
| 165 | m_out_a_pb_cb.resolve_safe(); |
| 166 | m_out_a_pc_cb.resolve_safe(); |
| 167 | |
| 168 | m_in_b_pa_cb.resolve_safe(0); |
| 169 | m_in_b_pb_cb.resolve_safe(0); |
| 170 | m_in_b_pc_cb.resolve_safe(0); |
| 171 | m_out_b_pa_cb.resolve_safe(); |
| 172 | m_out_b_pb_cb.resolve_safe(); |
| 173 | m_out_b_pc_cb.resolve_safe(); |
| 174 | |
| 175 | } |
| 176 | |
| 177 | void mb89363b_device::device_reset() |
| 178 | { |
| 179 | } |
trunk/src/emu/machine/mb89363b.h
| r0 | r30903 | |
| 1 | |
| 2 | #pragma once |
| 3 | |
| 4 | #ifndef __MB89363B__ |
| 5 | #define __MB89363B__ |
| 6 | |
| 7 | |
| 8 | #include "machine/i8255.h" |
| 9 | |
| 10 | |
| 11 | extern const device_type MB89363B; |
| 12 | |
| 13 | #define MCFG_MB89363B_ADD(_tag) \ |
| 14 | MCFG_DEVICE_ADD(_tag, MB89363B, 0) |
| 15 | |
| 16 | |
| 17 | |
| 18 | #define MCFG_MB89363B_IN_PORTA_CB(_devcb) \ |
| 19 | devcb = &mb89363b_device::set_in_a_pa_callback(*device, DEVCB_##_devcb); |
| 20 | |
| 21 | #define MCFG_MB89363B_IN_PORTB_CB(_devcb) \ |
| 22 | devcb = &mb89363b_device::set_in_a_pb_callback(*device, DEVCB_##_devcb); |
| 23 | |
| 24 | #define MCFG_MB89363B_IN_PORTC_CB(_devcb) \ |
| 25 | devcb = &mb89363b_device::set_in_a_pc_callback(*device, DEVCB_##_devcb); |
| 26 | |
| 27 | #define MCFG_MB89363B_OUT_PORTA_CB(_devcb) \ |
| 28 | devcb = &mb89363b_device::set_out_a_pa_callback(*device, DEVCB_##_devcb); |
| 29 | |
| 30 | #define MCFG_MB89363B_OUT_PORTB_CB(_devcb) \ |
| 31 | devcb = &mb89363b_device::set_out_a_pb_callback(*device, DEVCB_##_devcb); |
| 32 | |
| 33 | #define MCFG_MB89363B_OUT_PORTC_CB(_devcb) \ |
| 34 | devcb = &mb89363b_device::set_out_a_pc_callback(*device, DEVCB_##_devcb); |
| 35 | |
| 36 | |
| 37 | #define MCFG_MB89363B_IN_PORTD_CB(_devcb) \ |
| 38 | devcb = &mb89363b_device::set_in_b_pa_callback(*device, DEVCB_##_devcb); |
| 39 | |
| 40 | #define MCFG_MB89363B_IN_PORTE_CB(_devcb) \ |
| 41 | devcb = &mb89363b_device::set_in_b_pb_callback(*device, DEVCB_##_devcb); |
| 42 | |
| 43 | #define MCFG_MB89363B_IN_PORTF_CB(_devcb) \ |
| 44 | devcb = &mb89363b_device::set_in_b_pc_callback(*device, DEVCB_##_devcb); |
| 45 | |
| 46 | #define MCFG_MB89363B_OUT_PORTD_CB(_devcb) \ |
| 47 | devcb = &mb89363b_device::set_out_b_pa_callback(*device, DEVCB_##_devcb); |
| 48 | |
| 49 | #define MCFG_MB89363B_OUT_PORTE_CB(_devcb) \ |
| 50 | devcb = &mb89363b_device::set_out_b_pb_callback(*device, DEVCB_##_devcb); |
| 51 | |
| 52 | #define MCFG_MB89363B_OUT_PORTF_CB(_devcb) \ |
| 53 | devcb = &mb89363b_device::set_out_b_pc_callback(*device, DEVCB_##_devcb); |
| 54 | |
| 55 | |
| 56 | |
| 57 | class mb89363b_device : public device_t |
| 58 | { |
| 59 | public: |
| 60 | // construction/destruction |
| 61 | mb89363b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 62 | |
| 63 | DECLARE_READ8_MEMBER(read); |
| 64 | DECLARE_WRITE8_MEMBER(write); |
| 65 | |
| 66 | DECLARE_READ8_MEMBER(i8255_a_port_a_r); |
| 67 | DECLARE_READ8_MEMBER(i8255_a_port_b_r); |
| 68 | DECLARE_READ8_MEMBER(i8255_a_port_c_r); |
| 69 | DECLARE_WRITE8_MEMBER(i8255_a_port_a_w); |
| 70 | DECLARE_WRITE8_MEMBER(i8255_a_port_b_w); |
| 71 | DECLARE_WRITE8_MEMBER(i8255_a_port_c_w); |
| 72 | DECLARE_READ8_MEMBER(i8255_b_port_a_r); |
| 73 | DECLARE_READ8_MEMBER(i8255_b_port_b_r); |
| 74 | DECLARE_READ8_MEMBER(i8255_b_port_c_r); |
| 75 | DECLARE_WRITE8_MEMBER(i8255_b_port_a_w); |
| 76 | DECLARE_WRITE8_MEMBER(i8255_b_port_b_w); |
| 77 | DECLARE_WRITE8_MEMBER(i8255_b_port_c_w); |
| 78 | |
| 79 | |
| 80 | template<class _Object> static devcb_base &set_in_a_pa_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_a_pa_cb.set_callback(object); } |
| 81 | template<class _Object> static devcb_base &set_in_a_pb_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_a_pb_cb.set_callback(object); } |
| 82 | template<class _Object> static devcb_base &set_in_a_pc_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_a_pc_cb.set_callback(object); } |
| 83 | template<class _Object> static devcb_base &set_out_a_pa_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_a_pa_cb.set_callback(object); } |
| 84 | template<class _Object> static devcb_base &set_out_a_pb_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_a_pb_cb.set_callback(object); } |
| 85 | template<class _Object> static devcb_base &set_out_a_pc_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_a_pc_cb.set_callback(object); } |
| 86 | |
| 87 | template<class _Object> static devcb_base &set_in_b_pa_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_b_pa_cb.set_callback(object); } |
| 88 | template<class _Object> static devcb_base &set_in_b_pb_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_b_pb_cb.set_callback(object); } |
| 89 | template<class _Object> static devcb_base &set_in_b_pc_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_in_b_pc_cb.set_callback(object); } |
| 90 | template<class _Object> static devcb_base &set_out_b_pa_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_b_pa_cb.set_callback(object); } |
| 91 | template<class _Object> static devcb_base &set_out_b_pb_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_b_pb_cb.set_callback(object); } |
| 92 | template<class _Object> static devcb_base &set_out_b_pc_callback(device_t &device, _Object object) { return downcast<mb89363b_device &>(device).m_out_b_pc_cb.set_callback(object); } |
| 93 | |
| 94 | |
| 95 | required_device<i8255_device> m_i8255_a; |
| 96 | required_device<i8255_device> m_i8255_b; |
| 97 | |
| 98 | protected: |
| 99 | virtual machine_config_constructor device_mconfig_additions() const; |
| 100 | virtual void device_start(); |
| 101 | virtual void device_reset(); |
| 102 | |
| 103 | |
| 104 | |
| 105 | private: |
| 106 | |
| 107 | devcb_read8 m_in_a_pa_cb; |
| 108 | devcb_read8 m_in_a_pb_cb; |
| 109 | devcb_read8 m_in_a_pc_cb; |
| 110 | |
| 111 | devcb_write8 m_out_a_pa_cb; |
| 112 | devcb_write8 m_out_a_pb_cb; |
| 113 | devcb_write8 m_out_a_pc_cb; |
| 114 | |
| 115 | devcb_read8 m_in_b_pa_cb; |
| 116 | devcb_read8 m_in_b_pb_cb; |
| 117 | devcb_read8 m_in_b_pc_cb; |
| 118 | |
| 119 | devcb_write8 m_out_b_pa_cb; |
| 120 | devcb_write8 m_out_b_pb_cb; |
| 121 | devcb_write8 m_out_b_pc_cb; |
| 122 | |
| 123 | |
| 124 | }; |
| 125 | |
| 126 | #endif |
trunk/src/mame/drivers/kenseim.c
| r30902 | r30903 | |
| 142 | 142 | #include "cpu/z80/z80.h" |
| 143 | 143 | #include "machine/z80ctc.h" |
| 144 | 144 | #include "includes/cps1.h" |
| 145 | | #include "machine/i8255.h" |
| 146 | 145 | #include "kenseim.lh" |
| 146 | #include "machine/mb89363b.h" |
| 147 | 147 | |
| 148 | 148 | class kenseim_state : public cps_state |
| 149 | 149 | { |
| r30902 | r30903 | |
| 515 | 515 | |
| 516 | 516 | |
| 517 | 517 | /* |
| 518 | | Manufacturer: Fujitsu |
| 519 | | Part Number: MB89363 / MB89363B / MB89363R |
| 520 | | Package: Surface Mount QFP80 / QFP64P (MB89363R) |
| 521 | | Description: 8-bit x 3 x 2 (6 x 8-bit) parallel data I/O port VLSI chip |
| 522 | | Parallel Communication Interface |
| 523 | | Extended I/O |
| 524 | | |
| 525 | | Note: MB89363B is compatible with 8255 |
| 526 | | |
| 527 | | Pin Assignment: |
| 528 | | +5v |
| 529 | | P P P P P P P P P V P P P P P P P P P |
| 530 | | N N 5 4 4 4 4 4 4 4 4 C N 1 1 1 1 1 1 1 1 2 N N |
| 531 | | C C 3 0 1 2 3 4 5 6 7 C C 7 6 5 4 3 2 1 0 3 C C |
| 532 | | |
| 533 | | | | ^ ^ ^ ^ ^ ^ ^ ^ ^ | | ^ ^ ^ ^ ^ ^ ^ ^ ^ | | |
| 534 | | | | | | | | | | | | | | | | | | | | | | | | | | |
| 535 | | | | v v v v v v v v v | | v v v v v v v v v | | |
| 536 | | .-------------------------------------------------------. |
| 537 | | | 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 | |
| 538 | | | 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 | |
| 539 | | P52 <-> | 65 40 | <-> P22 |
| 540 | | P51 <-> | 66 39 | <-> P21 |
| 541 | | P50 <-> | 67 38 | <-> P20 |
| 542 | | P54 <-> | 68 37 | <-> P24 |
| 543 | | P55 <-> | 69 36 | <-> P25 |
| 544 | | P56 <-> | 70 35 | <-> P26 |
| 545 | | P57 <-> | 71 34 | <-> P27 |
| 546 | | NC --- | 72 MB89363B 33 | --- NC |
| 547 | | NC --- | 73 32 | <-- RSLCT1 |
| 548 | | GND --> | 74 31 | <-- RSLCT0 |
| 549 | | CS2 --> | 75 30 | <-- GND |
| 550 | | R --> | 76 29 | <-- CS1 |
| 551 | | P30 <-> | 77 28 | <-> P00 |
| 552 | | P31 <-> | 78 27 | <-> P01 |
| 553 | | P32 <-> | 79 26 | <-> P02 |
| 554 | | P33 <-> | 80 25 | <-> P03 |
| 555 | | \ 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 | |
| 556 | | \ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 | |
| 557 | | -----------------------------------------------------' |
| 558 | | ^ ^ ^ ^ ^ ^ | | ^ | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | |
| 559 | | | | | | | | | | | | | | | | | | | | | | | | | | |
| 560 | | v v v v | | | | | | | v v v v v v v v v v v v | |
| 561 | | |
| 562 | | P P P P W R N N R N O D D D D D D D D P P P P N |
| 563 | | 3 3 3 3 S C C H C U B B B B B B B B 0 0 0 0 C |
| 564 | | 4 5 6 7 T / S 0 1 2 3 4 5 6 7 7 6 5 4 |
| 565 | | R / |
| 566 | | L I |
| 567 | | N |
| 568 | | S |
| 569 | | |
| 570 | | Block Diagram / Pin Descriptions: |
| 571 | | http://www.mess.org/_media/datasheets/fujitsu/mb89363b_partial.pdf |
| 572 | | |
| 573 | | D.C. Characteristics: |
| 574 | | (Recommended operating conditions unless otherwise noted) |
| 575 | | (VCC = +5V +- 10%, GND = 0V, TA = -40o C to 85o C) |
| 576 | | Value |
| 577 | | Parameter Symbol Min Max Unit Test Condition |
| 578 | | ---------------------------------------------------------------------------------- |
| 579 | | Input Low Voltage ViL -0.3 0.8 V |
| 580 | | Input High Voltage ViH 2.2 VCC +0.3 V |
| 581 | | Output Low Voltage VoL - 0.4 V IoL = 2.5mA |
| 582 | | Output High Voltage VoH 3.0 - V IoH =-2.5mA |
| 583 | | |
| 584 | | Sources: |
| 585 | | http://www.emb-tech.co.jp/pc104/96dio.pdf |
| 586 | | http://www.pb5800.com/resources/2350ser01.pdf |
| 587 | | http://www.diagramasde.com/diagramas/otros2/TS-850S%20Service%20Manual%20.pdf |
| 518 | |
| 588 | 519 | */ |
| 589 | 520 | |
| 590 | 521 | static ADDRESS_MAP_START( kenseim_map, AS_PROGRAM, 8, kenseim_state ) |
| r30902 | r30903 | |
| 596 | 527 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 597 | 528 | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("gamecpu_ctc", z80ctc_device, read, write) |
| 598 | 529 | |
| 599 | | AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("i8255", i8255_device, read, write) |
| 600 | | AM_RANGE(0x24, 0x27) AM_DEVREADWRITE("i8255_2", i8255_device, read, write) |
| 530 | AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("mb89363b", mb89363b_device, read, write) |
| 601 | 531 | |
| 602 | 532 | ADDRESS_MAP_END |
| 603 | 533 | |
| r30902 | r30903 | |
| 628 | 558 | |
| 629 | 559 | MCFG_DEVICE_ADD("gamecpu_ctc", Z80CTC, XTAL_16MHz/2 ) // part of the tmpz84 |
| 630 | 560 | MCFG_Z80CTC_INTR_CB(INPUTLINE("gamecpu", INPUT_LINE_IRQ0)) |
| 561 | |
| 562 | // a,b,c always $80: all ports set as output |
| 563 | // d,e,f always $92: port D and E as input, port F as output |
| 631 | 564 | |
| 632 | | // the MB89363B seems to be 2 * i8255? |
| 633 | | MCFG_DEVICE_ADD("i8255", I8255, 0) // MB89363B! |
| 634 | | // always $80: all ports set as output |
| 635 | | MCFG_I8255_OUT_PORTA_CB(WRITE8(kenseim_state, i8255_porta_w)) |
| 636 | | MCFG_I8255_OUT_PORTB_CB(WRITE8(kenseim_state, i8255_portb_w)) |
| 637 | | MCFG_I8255_OUT_PORTC_CB(WRITE8(kenseim_state, i8255_portc_w)) |
| 565 | MCFG_MB89363B_ADD("mb89363b") |
| 566 | MCFG_MB89363B_OUT_PORTA_CB(WRITE8(kenseim_state, i8255_porta_w)) |
| 567 | MCFG_MB89363B_OUT_PORTB_CB(WRITE8(kenseim_state, i8255_portb_w)) |
| 568 | MCFG_MB89363B_OUT_PORTC_CB(WRITE8(kenseim_state, i8255_portc_w)) |
| 569 | MCFG_MB89363B_IN_PORTD_CB(READ8(kenseim_state, i8255_portd_r)) |
| 570 | MCFG_MB89363B_IN_PORTE_CB(READ8(kenseim_state, i8255_porte_r)) |
| 571 | MCFG_MB89363B_OUT_PORTF_CB(WRITE8(kenseim_state, i8255_portf_w)) |
| 638 | 572 | |
| 639 | | MCFG_DEVICE_ADD("i8255_2", I8255, 0) // MB89363B! |
| 640 | | // always $92: port A and B as input, port C as output |
| 641 | | MCFG_I8255_IN_PORTA_CB(READ8(kenseim_state, i8255_portd_r)) |
| 642 | | MCFG_I8255_IN_PORTB_CB(READ8(kenseim_state, i8255_porte_r)) |
| 643 | | MCFG_I8255_OUT_PORTC_CB(WRITE8(kenseim_state, i8255_portf_w)) |
| 644 | 573 | |
| 645 | | |
| 646 | 574 | MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| 647 | 575 | MACHINE_CONFIG_END |
| 648 | 576 | |