trunk/src/mess/drivers/pve500.c
| r29514 | r29515 | |
| 64 | 64 | |
| 65 | 65 | static Z80CTC_INTERFACE( external_ctc_intf ) |
| 66 | 66 | { |
| 67 | | DEVCB_NULL, /* interrupt handler */ |
| 67 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* interrupt handler */ |
| 68 | 68 | DEVCB_NULL, /* ZC/TO0 callback */ |
| 69 | 69 | DEVCB_NULL, /* ZC/TO1 callback */ |
| 70 | 70 | DEVCB_NULL /* ZC/TO2 callback */ |
| r29514 | r29515 | |
| 72 | 72 | |
| 73 | 73 | static const z80sio_interface external_sio_intf = |
| 74 | 74 | { |
| 75 | | DEVCB_NULL, /* interrupt handler */ |
| 76 | | DEVCB_NULL, /* DTR changed handler */ |
| 75 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* interrupt handler */ |
| 76 | DEVCB_NULL, /* DTR changed handler */ |
| 77 | 77 | DEVCB_NULL, /* RTS changed handler */ |
| 78 | 78 | DEVCB_NULL, /* BREAK changed handler */ |
| 79 | 79 | DEVCB_NULL, /* transmit handler */ |
| 80 | 80 | DEVCB_NULL /* receive handler */ |
| 81 | 81 | }; |
| 82 | 82 | |
| 83 | static const z80_daisy_config maincpu_daisy_chain[] = |
| 84 | { |
| 85 | { "external_ctc" }, |
| 86 | { "external_sio" }, |
| 87 | { NULL } |
| 88 | }; |
| 89 | |
| 90 | |
| 83 | 91 | static ADDRESS_MAP_START(maincpu_io, AS_IO, 8, pve500_state) |
| 84 | 92 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("external_sio", z80sio_device, read, write) |
| 85 | 93 | AM_RANGE(0x08, 0x0B) AM_DEVREADWRITE("external_ctc", z80ctc_device, read, write) |
| r29514 | r29515 | |
| 106 | 114 | } |
| 107 | 115 | |
| 108 | 116 | static INPUT_PORTS_START( pve500 ) |
| 109 | | PORT_START("keyboard") |
| 110 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_NAME("TODO") PORT_CODE(KEYCODE_A) |
| 117 | PORT_START("SCAN0") |
| 118 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS") PORT_CODE(KEYCODE_5) |
| 119 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A/B") PORT_CODE(KEYCODE_4) |
| 120 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("FROM TO") PORT_CODE(KEYCODE_3) |
| 121 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2") PORT_CODE(KEYCODE_2) |
| 122 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1") PORT_CODE(KEYCODE_1) |
| 123 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 124 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 125 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) |
| 126 | |
| 127 | PORT_START("SCAN1") |
| 128 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALL STOP") PORT_CODE(KEYCODE_M) |
| 129 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LAST EDIT") PORT_CODE(KEYCODE_I) |
| 130 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUDIO SPLIT") PORT_CODE(KEYCODE_T) |
| 131 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A2") PORT_CODE(KEYCODE_9) |
| 132 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ASMBL") PORT_CODE(KEYCODE_6) |
| 133 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_7) |
| 134 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A1") PORT_CODE(KEYCODE_8) |
| 135 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) |
| 136 | |
| 137 | PORT_START("SCAN2") |
| 138 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RVW/JUMP") PORT_CODE(KEYCODE_N) |
| 139 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUTO EDIT") PORT_CODE(KEYCODE_B) |
| 140 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PREVIEW") PORT_CODE(KEYCODE_V) |
| 141 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-FF") PORT_CODE(KEYCODE_R) |
| 142 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-REW") PORT_CODE(KEYCODE_E) |
| 143 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-STILL") PORT_CODE(KEYCODE_W) |
| 144 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-PLAY") PORT_CODE(KEYCODE_Q) |
| 145 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) |
| 146 | |
| 147 | PORT_START("SCAN3") |
| 148 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-OUT") PORT_CODE(KEYCODE_K) |
| 149 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-IN") PORT_CODE(KEYCODE_J) |
| 150 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GO TO") PORT_CODE(KEYCODE_H) |
| 151 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-OUT") PORT_CODE(KEYCODE_G) |
| 152 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-IN") PORT_CODE(KEYCODE_F) |
| 153 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM+") PORT_CODE(KEYCODE_U) |
| 154 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM-") PORT_CODE(KEYCODE_Y) |
| 155 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) |
| 156 | |
| 157 | PORT_START("SCAN4") |
| 158 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-FF") PORT_CODE(KEYCODE_OPENBRACE) |
| 159 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-REW") PORT_CODE(KEYCODE_QUOTE) |
| 160 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-STILL") PORT_CODE(KEYCODE_P) |
| 161 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-PLAY") PORT_CODE(KEYCODE_O) |
| 162 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EDIT") PORT_CODE(KEYCODE_EQUALS) |
| 163 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("REC") PORT_CODE(KEYCODE_MINUS) |
| 164 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 165 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY") PORT_CODE(KEYCODE_SPACE) |
| 166 | |
| 167 | PORT_START("SCAN5") |
| 168 | PORT_DIPNAME( 0x03, 0x02, "R-EDIT REF" ) |
| 169 | PORT_DIPSETTING( 0x02, "TC" ) |
| 170 | PORT_DIPSETTING( 0x00, "RTC" ) |
| 171 | PORT_DIPSETTING( 0x01, "CTL" ) |
| 172 | |
| 173 | PORT_DIPNAME( 0x0C, 0x08, "P2-EDIT REF" ) |
| 174 | PORT_DIPSETTING( 0x08, "TC" ) |
| 175 | PORT_DIPSETTING( 0x00, "RTC" ) |
| 176 | PORT_DIPSETTING( 0x04, "CTL" ) |
| 177 | |
| 178 | PORT_DIPNAME( 0x30, 0x20, "P1-EDIT REF" ) |
| 179 | PORT_DIPSETTING( 0x20, "TC" ) |
| 180 | PORT_DIPSETTING( 0x00, "RTC" ) |
| 181 | PORT_DIPSETTING( 0x10, "CTL" ) |
| 182 | |
| 183 | PORT_START("SCAN6") |
| 184 | PORT_DIPNAME( 0x03, 0x02, "SYNCHRO" ) |
| 185 | PORT_DIPSETTING( 0x02, "ON/CF" ) |
| 186 | PORT_DIPSETTING( 0x00, "ON" ) |
| 187 | PORT_DIPSETTING( 0x01, "OFF" ) |
| 188 | |
| 189 | PORT_DIPNAME( 0x0C, 0x08, "PREROLL" ) |
| 190 | PORT_DIPSETTING( 0x08, "7" ) |
| 191 | PORT_DIPSETTING( 0x00, "5" ) |
| 192 | PORT_DIPSETTING( 0x04, "3" ) |
| 193 | |
| 194 | PORT_START("SCAN7") |
| 195 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOTAL") PORT_CODE(KEYCODE_CLOSEBRACE) |
| 196 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LEARN") PORT_CODE(KEYCODE_L) |
| 197 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-1F") PORT_CODE(KEYCODE_Z) |
| 198 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-10F") PORT_CODE(KEYCODE_X) |
| 199 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-100F") PORT_CODE(KEYCODE_C) |
| 200 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-RESET") PORT_CODE(KEYCODE_A) |
| 201 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2-RESET") PORT_CODE(KEYCODE_S) |
| 202 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1-RESET") PORT_CODE(KEYCODE_D) |
| 111 | 203 | INPUT_PORTS_END |
| 112 | 204 | |
| 113 | 205 | void pve500_state::machine_start() |
| r29514 | r29515 | |
| 119 | 211 | io_KY = 0; |
| 120 | 212 | |
| 121 | 213 | for (int i=0; i<27; i++) |
| 122 | | output_set_digit_value(i, 0xff); |
| 214 | output_set_digit_value(i, 0x00); |
| 123 | 215 | } |
| 124 | 216 | |
| 125 | 217 | void pve500_state::machine_reset() |
| r29514 | r29515 | |
| 162 | 254 | case IO_EXPANDER_PORTB: |
| 163 | 255 | return io_LE; |
| 164 | 256 | case IO_EXPANDER_PORTC: |
| 257 | io_KY = 0x00; |
| 258 | if (io_SC & 0x01) io_KY |= ioport("SCAN0")->read(); |
| 259 | if (io_SC & 0x02) io_KY |= ioport("SCAN1")->read(); |
| 260 | if (io_SC & 0x04) io_KY |= ioport("SCAN2")->read(); |
| 261 | if (io_SC & 0x08) io_KY |= ioport("SCAN3")->read(); |
| 262 | if (io_SC & 0x10) io_KY |= ioport("SCAN4")->read(); |
| 263 | if (io_SC & 0x20) io_KY |= ioport("SCAN5")->read(); |
| 264 | if (io_SC & 0x40) io_KY |= ioport("SCAN6")->read(); |
| 265 | if (io_SC & 0x80) io_KY |= ioport("SCAN7")->read(); |
| 165 | 266 | return io_KY; |
| 166 | 267 | case IO_EXPANDER_PORTD: |
| 167 | 268 | return io_LD; |
| r29514 | r29515 | |
| 192 | 293 | io_SEL = data; |
| 193 | 294 | for (int i=0; i<4; i++){ |
| 194 | 295 | if (io_SEL & (1 << i)){ |
| 195 | | switch (io_SC){ |
| 196 | | case 1: output_set_digit_value(8*i + 0, io_LD & 0x7F); break; |
| 197 | | case 2: output_set_digit_value(8*i + 1, io_LD & 0x7F); break; |
| 198 | | case 4: output_set_digit_value(8*i + 2, io_LD & 0x7F); break; |
| 199 | | case 8: output_set_digit_value(8*i + 3, io_LD & 0x7F); break; |
| 200 | | case 16: output_set_digit_value(8*i + 4, io_LD & 0x7F); break; |
| 201 | | case 32: output_set_digit_value(8*i + 5, io_LD & 0x7F); break; |
| 202 | | case 64: output_set_digit_value(8*i + 6, io_LD & 0x7F); break; |
| 203 | | case 128: output_set_digit_value(8*i + 7, io_LD & 0x7F); break; |
| 204 | | default: |
| 205 | | /*software should not do it. |
| 206 | | any idea how to emulate that in case it does? */ break; |
| 296 | for (int j=0; j<8; j++){ |
| 297 | if (io_SC & (1<<j)){ |
| 298 | output_set_digit_value(8*i + j, BITSWAP8(io_LD & 0x7F, 7, 0, 1, 2, 3, 4, 5, 6)); |
| 299 | printf("io_expander_w PORTE data=%02X\n", data); |
| 300 | } |
| 207 | 301 | } |
| 208 | 302 | } |
| 209 | 303 | } |
| r29514 | r29515 | |
| 217 | 311 | MCFG_CPU_ADD("maincpu", TLCS_Z80, XTAL_12MHz / 2) /* TMPZ84C015BF-6 (TOSHIBA TLCS-Z80) */ |
| 218 | 312 | MCFG_CPU_PROGRAM_MAP(maincpu_prg) |
| 219 | 313 | MCFG_CPU_IO_MAP(maincpu_io) |
| 314 | MCFG_CPU_CONFIG(maincpu_daisy_chain) |
| 220 | 315 | MCFG_Z80CTC_ADD("external_ctc", XTAL_12MHz / 2, external_ctc_intf) |
| 221 | 316 | MCFG_Z80SIO_ADD("external_sio", XTAL_12MHz / 2, external_sio_intf) |
| 222 | 317 | |