trunk/src/mess/includes/victor9k.h
| r23469 | r23470 | |
| 20 | 20 | #include "sound/hc55516.h" |
| 21 | 21 | #include "video/mc6845.h" |
| 22 | 22 | |
| 23 | | #define SCREEN_TAG "screen" |
| 24 | 23 | #define I8088_TAG "8l" |
| 25 | 24 | #define I8048_TAG "5d" |
| 26 | 25 | #define I8253_TAG "13h" |
| 27 | 26 | #define I8259A_TAG "7l" |
| 28 | 27 | #define UPD7201_TAG "16e" |
| 29 | 28 | #define HD46505S_TAG "11a" |
| 30 | | #define MC6852_TAG "13b" |
| 31 | | #define HC55516_TAG "1m" |
| 29 | #define MC6852_TAG "11b" |
| 30 | #define HC55516_TAG "15c" |
| 32 | 31 | #define M6522_1_TAG "m6522_1" |
| 33 | 32 | #define M6522_2_TAG "m6522_2" |
| 34 | | #define M6522_3_TAG "m6522_3" |
| 35 | | #define M6522_4_TAG "m6522_4" |
| 36 | | #define M6522_5_TAG "m6522_5" |
| 37 | | #define M6522_6_TAG "m6522_6" |
| 33 | #define M6522_3_TAG "14l" |
| 34 | #define M6522_4_TAG "1f" |
| 35 | #define M6522_5_TAG "1k" |
| 36 | #define M6522_6_TAG "1h" |
| 37 | #define DAC0808_0_TAG "5b" |
| 38 | #define DAC0808_1_TAG "5c" |
| 38 | 39 | #define CENTRONICS_TAG "centronics" |
| 39 | 40 | #define RS232_A_TAG "rs232a" |
| 40 | 41 | #define RS232_B_TAG "rs232b" |
| 42 | #define SCREEN_TAG "screen" |
| 41 | 43 | |
| 42 | 44 | class victor9k_state : public driver_device |
| 43 | 45 | { |
| r23469 | r23470 | |
| 51 | 53 | m_ssda(*this, MC6852_TAG), |
| 52 | 54 | m_via1(*this, M6522_1_TAG), |
| 53 | 55 | m_via2(*this, M6522_2_TAG), |
| 56 | m_via3(*this, M6522_3_TAG), |
| 57 | m_via4(*this, M6522_4_TAG), |
| 58 | m_via5(*this, M6522_5_TAG), |
| 59 | m_via6(*this, M6522_6_TAG), |
| 54 | 60 | m_cvsd(*this, HC55516_TAG), |
| 55 | 61 | m_crtc(*this, HD46505S_TAG), |
| 56 | 62 | m_ram(*this, RAM_TAG), |
| 57 | 63 | m_floppy0(*this, I8048_TAG":0:525qd"), |
| 58 | 64 | m_floppy1(*this, I8048_TAG":1:525qd"), |
| 59 | 65 | m_kb(*this, VICTOR9K_KEYBOARD_TAG), |
| 66 | m_rs232a(*this, RS232_A_TAG), |
| 67 | m_rs232b(*this, RS232_B_TAG), |
| 60 | 68 | m_video_ram(*this, "video_ram") |
| 61 | 69 | { } |
| 62 | 70 | |
| r23469 | r23470 | |
| 67 | 75 | required_device<mc6852_device> m_ssda; |
| 68 | 76 | required_device<via6522_device> m_via1; |
| 69 | 77 | required_device<via6522_device> m_via2; |
| 78 | required_device<via6522_device> m_via3; |
| 79 | required_device<via6522_device> m_via4; |
| 80 | required_device<via6522_device> m_via5; |
| 81 | required_device<via6522_device> m_via6; |
| 70 | 82 | required_device<hc55516_device> m_cvsd; |
| 71 | 83 | required_device<mc6845_device> m_crtc; |
| 72 | 84 | required_device<ram_device> m_ram; |
| 73 | 85 | required_device<floppy_image_device> m_floppy0; |
| 74 | 86 | required_device<floppy_image_device> m_floppy1; |
| 75 | 87 | required_device<victor9k_keyboard_device> m_kb; |
| 88 | required_device<rs232_port_device> m_rs232a; |
| 89 | required_device<rs232_port_device> m_rs232b; |
| 76 | 90 | |
| 77 | 91 | virtual void machine_start(); |
| 78 | 92 | |
| 79 | | DECLARE_WRITE_LINE_MEMBER( ssda_irq_w ); |
| 80 | | DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); |
| 81 | | DECLARE_WRITE_LINE_MEMBER( via2_irq_w ); |
| 82 | | DECLARE_WRITE_LINE_MEMBER( via3_irq_w ); |
| 83 | | DECLARE_WRITE_LINE_MEMBER( via4_irq_w ); |
| 84 | | DECLARE_WRITE_LINE_MEMBER( via5_irq_w ); |
| 85 | | DECLARE_WRITE_LINE_MEMBER( via6_irq_w ); |
| 93 | DECLARE_READ8_MEMBER( floppy_p1_r ); |
| 94 | DECLARE_READ8_MEMBER( floppy_p2_r ); |
| 95 | DECLARE_WRITE8_MEMBER( floppy_p2_w ); |
| 96 | DECLARE_READ8_MEMBER( tach0_r ); |
| 97 | DECLARE_READ8_MEMBER( tach1_r ); |
| 98 | DECLARE_WRITE8_MEMBER( da_w ); |
| 99 | |
| 86 | 100 | DECLARE_WRITE8_MEMBER( via1_pa_w ); |
| 87 | 101 | DECLARE_READ8_MEMBER( via1_pb_r ); |
| 88 | 102 | DECLARE_WRITE8_MEMBER( via1_pb_w ); |
| 103 | DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); |
| 89 | 104 | DECLARE_WRITE_LINE_MEMBER( codec_vol_w ); |
| 105 | |
| 90 | 106 | DECLARE_READ8_MEMBER( via2_pa_r ); |
| 91 | 107 | DECLARE_WRITE8_MEMBER( via2_pa_w ); |
| 92 | 108 | DECLARE_WRITE8_MEMBER( via2_pb_w ); |
| 109 | DECLARE_WRITE_LINE_MEMBER( via2_irq_w ); |
| 110 | |
| 93 | 111 | DECLARE_READ8_MEMBER( via3_pa_r ); |
| 94 | 112 | DECLARE_READ8_MEMBER( via3_pb_r ); |
| 95 | 113 | DECLARE_WRITE8_MEMBER( via3_pa_w ); |
| 96 | 114 | DECLARE_WRITE8_MEMBER( via3_pb_w ); |
| 115 | DECLARE_WRITE_LINE_MEMBER( via3_irq_w ); |
| 116 | |
| 97 | 117 | DECLARE_WRITE8_MEMBER( via4_pa_w ); |
| 98 | 118 | DECLARE_WRITE8_MEMBER( via4_pb_w ); |
| 99 | 119 | DECLARE_WRITE_LINE_MEMBER( mode_w ); |
| 120 | DECLARE_WRITE_LINE_MEMBER( via4_irq_w ); |
| 121 | |
| 100 | 122 | DECLARE_READ8_MEMBER( via5_pa_r ); |
| 101 | 123 | DECLARE_WRITE8_MEMBER( via5_pb_w ); |
| 124 | DECLARE_READ_LINE_MEMBER( brdy_r ); |
| 125 | DECLARE_READ_LINE_MEMBER( rdy0_r ); |
| 126 | DECLARE_READ_LINE_MEMBER( rdy1_r ); |
| 127 | DECLARE_WRITE_LINE_MEMBER( via5_irq_w ); |
| 128 | |
| 102 | 129 | DECLARE_READ8_MEMBER( via6_pa_r ); |
| 103 | 130 | DECLARE_READ8_MEMBER( via6_pb_r ); |
| 104 | 131 | DECLARE_WRITE8_MEMBER( via6_pa_w ); |
| 105 | 132 | DECLARE_WRITE8_MEMBER( via6_pb_w ); |
| 133 | DECLARE_READ_LINE_MEMBER( gcrerr_r ); |
| 106 | 134 | DECLARE_WRITE_LINE_MEMBER( drw_w ); |
| 107 | 135 | DECLARE_WRITE_LINE_MEMBER( erase_w ); |
| 108 | 136 | DECLARE_WRITE_LINE_MEMBER( kbrdy_w ); |
| 137 | DECLARE_WRITE_LINE_MEMBER( via6_irq_w ); |
| 109 | 138 | |
| 139 | DECLARE_WRITE_LINE_MEMBER( ssda_irq_w ); |
| 140 | |
| 141 | enum |
| 142 | { |
| 143 | LED_A = 0, |
| 144 | LED_B |
| 145 | }; |
| 146 | |
| 110 | 147 | /* video state */ |
| 111 | 148 | required_shared_ptr<UINT8> m_video_ram; |
| 112 | 149 | int m_brt; |
| r23469 | r23470 | |
| 122 | 159 | int m_ssda_irq; |
| 123 | 160 | |
| 124 | 161 | /* floppy state */ |
| 125 | | int m_lms[2]; /* motor speed */ |
| 162 | UINT8 m_da; |
| 163 | UINT8 m_da0; |
| 164 | UINT8 m_da1; |
| 165 | int m_sel0; |
| 166 | int m_sel1; |
| 167 | int m_tach0; |
| 168 | int m_tach1; |
| 169 | int m_rdy0; |
| 170 | int m_rdy1; |
| 171 | UINT8 m_lms; /* motor speed */ |
| 126 | 172 | int m_st[2]; /* stepper phase */ |
| 127 | | int m_se[2]; /* stepper enable */ |
| 173 | int m_stp[2]; /* stepper enable */ |
| 128 | 174 | int m_drive; /* selected drive */ |
| 129 | 175 | int m_side; /* selected side */ |
| 176 | int m_brdy; |
| 177 | int m_sync; |
| 178 | int m_gcrerr; |
| 179 | |
| 130 | 180 | DECLARE_WRITE_LINE_MEMBER(mux_serial_b_w); |
| 131 | 181 | DECLARE_WRITE_LINE_MEMBER(mux_serial_a_w); |
| 132 | 182 | IRQ_CALLBACK_MEMBER(victor9k_irq_callback); |
trunk/src/mess/drivers/victor9k.c
| r23469 | r23470 | |
| 24 | 24 | |
| 25 | 25 | */ |
| 26 | 26 | |
| 27 | | enum |
| 27 | #include "includes/victor9k.h" |
| 28 | |
| 29 | |
| 30 | |
| 31 | //************************************************************************** |
| 32 | // READ/WRITE HANDLERS |
| 33 | //************************************************************************** |
| 34 | |
| 35 | //------------------------------------------------- |
| 36 | // floppy_p1_r - |
| 37 | //------------------------------------------------- |
| 38 | |
| 39 | READ8_MEMBER( victor9k_state::floppy_p1_r ) |
| 28 | 40 | { |
| 29 | | LED_A = 0, |
| 30 | | LED_B |
| 31 | | }; |
| 41 | /* |
| 42 | |
| 43 | bit description |
| 44 | |
| 45 | 0 L0MS0 |
| 46 | 1 L0MS1 |
| 47 | 2 L0MS2 |
| 48 | 3 L0MS3 |
| 49 | 4 L1MS0 |
| 50 | 5 L1MS1 |
| 51 | 6 L1MS2 |
| 52 | 7 L1MS3 |
| 53 | |
| 54 | */ |
| 32 | 55 | |
| 33 | | #include "includes/victor9k.h" |
| 56 | return m_lms; |
| 57 | } |
| 34 | 58 | |
| 35 | | // Memory Maps |
| 36 | 59 | |
| 60 | //------------------------------------------------- |
| 61 | // floppy_p2_w - |
| 62 | //------------------------------------------------- |
| 63 | |
| 64 | WRITE8_MEMBER( victor9k_state::floppy_p2_w ) |
| 65 | { |
| 66 | /* |
| 67 | |
| 68 | bit description |
| 69 | |
| 70 | 0 START0 |
| 71 | 1 STOP0 |
| 72 | 2 START1 |
| 73 | 3 STOP1 |
| 74 | 4 SEL1 |
| 75 | 5 SEL0 |
| 76 | 6 RDY0 |
| 77 | 7 RDY1 |
| 78 | |
| 79 | */ |
| 80 | |
| 81 | if (BIT(data, 0)) m_floppy0->mon_w(0); |
| 82 | if (BIT(data, 1)) m_floppy0->mon_w(1); |
| 83 | if (BIT(data, 2)) m_floppy1->mon_w(0); |
| 84 | if (BIT(data, 3)) m_floppy1->mon_w(1); |
| 85 | |
| 86 | int sel0 = BIT(data, 5); |
| 87 | |
| 88 | if (m_sel0 && !sel0) |
| 89 | { |
| 90 | m_da0 = m_da; |
| 91 | //m_floppy0->set_rpm(); |
| 92 | } |
| 93 | |
| 94 | m_sel0 = sel0; |
| 95 | |
| 96 | int sel1 = BIT(data, 4); |
| 97 | |
| 98 | if (m_sel1 && !sel1) |
| 99 | { |
| 100 | m_da1 = m_da; |
| 101 | //m_floppy1->set_rpm(); |
| 102 | } |
| 103 | |
| 104 | m_sel1 = sel1; |
| 105 | |
| 106 | m_rdy0 = BIT(data, 6); |
| 107 | m_via5->write_ca2(m_rdy0); |
| 108 | |
| 109 | m_rdy1 = BIT(data, 7); |
| 110 | m_via5->write_cb2(m_rdy1); |
| 111 | } |
| 112 | |
| 113 | |
| 114 | //------------------------------------------------- |
| 115 | // tach0_r - |
| 116 | //------------------------------------------------- |
| 117 | |
| 118 | READ8_MEMBER( victor9k_state::tach0_r ) |
| 119 | { |
| 120 | return m_tach0; |
| 121 | } |
| 122 | |
| 123 | |
| 124 | //------------------------------------------------- |
| 125 | // tach1_r - |
| 126 | //------------------------------------------------- |
| 127 | |
| 128 | READ8_MEMBER( victor9k_state::tach1_r ) |
| 129 | { |
| 130 | return m_tach1; |
| 131 | } |
| 132 | |
| 133 | |
| 134 | //------------------------------------------------- |
| 135 | // da_w - |
| 136 | //------------------------------------------------- |
| 137 | |
| 138 | WRITE8_MEMBER( victor9k_state::da_w ) |
| 139 | { |
| 140 | m_da = data; |
| 141 | } |
| 142 | |
| 143 | |
| 144 | |
| 145 | //************************************************************************** |
| 146 | // ADDRESS MAPS |
| 147 | //************************************************************************** |
| 148 | |
| 149 | //------------------------------------------------- |
| 150 | // ADDRESS_MAP( victor9k_mem ) |
| 151 | //------------------------------------------------- |
| 152 | |
| 37 | 153 | static ADDRESS_MAP_START( victor9k_mem, AS_PROGRAM, 8, victor9k_state ) |
| 38 | 154 | // AM_RANGE(0x00000, 0xdffff) AM_RAM |
| 39 | 155 | AM_RANGE(0xe0000, 0xe0001) AM_DEVREADWRITE(I8259A_TAG, pic8259_device, read, write) |
| r23469 | r23470 | |
| 52 | 168 | AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION(I8088_TAG, 0) |
| 53 | 169 | ADDRESS_MAP_END |
| 54 | 170 | |
| 171 | |
| 172 | //------------------------------------------------- |
| 173 | // ADDRESS_MAP( floppy_io ) |
| 174 | //------------------------------------------------- |
| 175 | |
| 55 | 176 | static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor9k_state ) |
| 56 | | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_NOP |
| 57 | | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_NOP |
| 58 | | AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_NOP |
| 59 | | AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_NOP |
| 177 | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) |
| 178 | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(floppy_p2_w) |
| 179 | AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r) |
| 180 | AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r) |
| 181 | AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w) |
| 60 | 182 | ADDRESS_MAP_END |
| 61 | 183 | |
| 62 | | // Input Ports |
| 63 | 184 | |
| 185 | |
| 186 | //************************************************************************** |
| 187 | // INPUT PORTS |
| 188 | //************************************************************************** |
| 189 | |
| 190 | //------------------------------------------------- |
| 191 | // INPUT_PORTS( victor9k ) |
| 192 | //------------------------------------------------- |
| 193 | |
| 64 | 194 | static INPUT_PORTS_START( victor9k ) |
| 65 | 195 | // defined in machine/victor9kb.c |
| 66 | 196 | INPUT_PORTS_END |
| 67 | 197 | |
| 68 | | // Video |
| 69 | 198 | |
| 199 | |
| 200 | //************************************************************************** |
| 201 | // DEVICE CONFIGURATION |
| 202 | //************************************************************************** |
| 203 | |
| 204 | //------------------------------------------------- |
| 205 | // MC6845_INTERFACE( hd46505s_intf ) |
| 206 | //------------------------------------------------- |
| 207 | |
| 70 | 208 | #define CODE_NON_DISPLAY 0x1000 |
| 71 | 209 | #define CODE_UNDERLINE 0x2000 |
| 72 | 210 | #define CODE_LOW_INTENSITY 0x4000 |
| r23469 | r23470 | |
| 107 | 245 | } |
| 108 | 246 | } |
| 109 | 247 | |
| 110 | | |
| 111 | 248 | static MC6845_INTERFACE( hd46505s_intf ) |
| 112 | 249 | { |
| 113 | 250 | SCREEN_TAG, |
| r23469 | r23470 | |
| 123 | 260 | NULL |
| 124 | 261 | }; |
| 125 | 262 | |
| 126 | | // Intel 8253 Interface |
| 127 | 263 | |
| 264 | //------------------------------------------------- |
| 265 | // pit8253_interface pit_intf |
| 266 | //------------------------------------------------- |
| 267 | |
| 128 | 268 | WRITE_LINE_MEMBER(victor9k_state::mux_serial_b_w) |
| 129 | 269 | { |
| 130 | 270 | } |
| r23469 | r23470 | |
| 152 | 292 | } |
| 153 | 293 | }; |
| 154 | 294 | |
| 155 | | // Intel 8259 Interfaces |
| 156 | 295 | |
| 296 | |
| 297 | //------------------------------------------------- |
| 298 | // PIC8259 |
| 299 | //------------------------------------------------- |
| 300 | |
| 157 | 301 | /* |
| 158 | 302 | |
| 159 | 303 | pin signal description |
| r23469 | r23470 | |
| 169 | 313 | |
| 170 | 314 | */ |
| 171 | 315 | |
| 172 | | // NEC uPD7201 Interface |
| 316 | IRQ_CALLBACK_MEMBER( victor9k_state::victor9k_irq_callback ) |
| 317 | { |
| 318 | return m_pic->inta_r(); |
| 319 | } |
| 173 | 320 | |
| 321 | |
| 322 | //------------------------------------------------- |
| 323 | // UPD7201_INTERFACE( mpsc_intf ) |
| 324 | //------------------------------------------------- |
| 325 | |
| 174 | 326 | static UPD7201_INTERFACE( mpsc_intf ) |
| 175 | 327 | { |
| 176 | 328 | 0, 0, 0, 0, |
| r23469 | r23470 | |
| 196 | 348 | DEVCB_NULL |
| 197 | 349 | }; |
| 198 | 350 | |
| 199 | | // MC6852 Interface |
| 200 | 351 | |
| 352 | //------------------------------------------------- |
| 353 | // MC6852_INTERFACE( ssda_intf ) |
| 354 | //------------------------------------------------- |
| 355 | |
| 201 | 356 | WRITE_LINE_MEMBER( victor9k_state::ssda_irq_w ) |
| 202 | 357 | { |
| 203 | 358 | m_ssda_irq = state; |
| r23469 | r23470 | |
| 218 | 373 | DEVCB_NULL |
| 219 | 374 | }; |
| 220 | 375 | |
| 221 | | // M6522 Interface |
| 222 | 376 | |
| 377 | //------------------------------------------------- |
| 378 | // via6522_interface via1_intf |
| 379 | //------------------------------------------------- |
| 380 | |
| 223 | 381 | WRITE8_MEMBER( victor9k_state::via1_pa_w ) |
| 224 | 382 | { |
| 225 | 383 | /* |
| r23469 | r23470 | |
| 259 | 417 | |
| 260 | 418 | UINT8 data = 0; |
| 261 | 419 | |
| 262 | | // data valid |
| 420 | // IEEE-488 |
| 263 | 421 | data |= m_ieee488->dav_r(); |
| 264 | | |
| 265 | | // end or identify |
| 266 | 422 | data |= m_ieee488->eoi_r() << 1; |
| 267 | | |
| 268 | | // remote enable |
| 269 | 423 | data |= m_ieee488->ren_r() << 2; |
| 270 | | |
| 271 | | // attention |
| 272 | 424 | data |= m_ieee488->atn_r() << 3; |
| 273 | | |
| 274 | | // interface clear |
| 275 | 425 | data |= m_ieee488->ifc_r() << 4; |
| 276 | | |
| 277 | | // service request |
| 278 | 426 | data |= m_ieee488->srq_r() << 5; |
| 279 | | |
| 280 | | // not ready for data |
| 281 | 427 | data |= m_ieee488->nrfd_r() << 6; |
| 282 | | |
| 283 | | // data not accepted |
| 284 | 428 | data |= m_ieee488->ndac_r() << 7; |
| 285 | 429 | |
| 286 | 430 | return data; |
| r23469 | r23470 | |
| 303 | 447 | |
| 304 | 448 | */ |
| 305 | 449 | |
| 306 | | // data valid |
| 450 | // IEEE-488 |
| 307 | 451 | m_ieee488->dav_w(BIT(data, 0)); |
| 308 | | |
| 309 | | // end or identify |
| 310 | 452 | m_ieee488->eoi_w(BIT(data, 1)); |
| 311 | | |
| 312 | | // remote enable |
| 313 | 453 | m_ieee488->ren_w(BIT(data, 2)); |
| 314 | | |
| 315 | | // attention |
| 316 | 454 | m_ieee488->atn_w(BIT(data, 3)); |
| 317 | | |
| 318 | | // interface clear |
| 319 | 455 | m_ieee488->ifc_w(BIT(data, 4)); |
| 320 | | |
| 321 | | // service request |
| 322 | 456 | m_ieee488->srq_w(BIT(data, 5)); |
| 323 | | |
| 324 | | // not ready for data |
| 325 | 457 | m_ieee488->nrfd_w(BIT(data, 6)); |
| 326 | | |
| 327 | | // data not accepted |
| 328 | 458 | m_ieee488->ndac_w(BIT(data, 7)); |
| 329 | 459 | } |
| 330 | 460 | |
| r23469 | r23470 | |
| 358 | 488 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via1_irq_w) |
| 359 | 489 | }; |
| 360 | 490 | |
| 491 | |
| 492 | //------------------------------------------------- |
| 493 | // via6522_interface via2_intf |
| 494 | //------------------------------------------------- |
| 495 | |
| 361 | 496 | READ8_MEMBER( victor9k_state::via2_pa_r ) |
| 362 | 497 | { |
| 363 | 498 | /* |
| r23469 | r23470 | |
| 377 | 512 | |
| 378 | 513 | UINT8 data = 0; |
| 379 | 514 | |
| 515 | // serial |
| 516 | data |= m_rs232a->ri_r() << 2; |
| 517 | data |= m_rs232a->dsr_r() << 3; |
| 518 | data |= m_rs232b->ri_r() << 4; |
| 519 | data |= m_rs232b->dsr_r() << 5; |
| 520 | |
| 380 | 521 | // keyboard data |
| 381 | 522 | data |= m_kb->kbdata_r() << 6; |
| 382 | 523 | |
| r23469 | r23470 | |
| 457 | 598 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via2_irq_w) |
| 458 | 599 | }; |
| 459 | 600 | |
| 601 | |
| 602 | //------------------------------------------------- |
| 603 | // via6522_interface via3_intf |
| 604 | //------------------------------------------------- |
| 605 | |
| 460 | 606 | READ8_MEMBER( victor9k_state::via3_pa_r ) |
| 461 | 607 | { |
| 462 | 608 | /* |
| r23469 | r23470 | |
| 563 | 709 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via3_irq_w) |
| 564 | 710 | }; |
| 565 | 711 | |
| 712 | |
| 713 | //------------------------------------------------- |
| 714 | // via6522_interface via4_intf |
| 715 | //------------------------------------------------- |
| 716 | |
| 566 | 717 | WRITE8_MEMBER( victor9k_state::via4_pa_w ) |
| 567 | 718 | { |
| 568 | 719 | /* |
| r23469 | r23470 | |
| 580 | 731 | |
| 581 | 732 | */ |
| 582 | 733 | |
| 734 | m_lms = (m_lms & 0xf0) | (data & 0x0f); |
| 583 | 735 | m_st[0] = data >> 4; |
| 584 | 736 | } |
| 585 | 737 | |
| r23469 | r23470 | |
| 600 | 752 | |
| 601 | 753 | */ |
| 602 | 754 | |
| 755 | m_lms = (data << 4) | (m_lms & 0x0f); |
| 603 | 756 | m_st[1] = data >> 4; |
| 604 | 757 | } |
| 605 | 758 | |
| r23469 | r23470 | |
| 633 | 786 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via4_irq_w) |
| 634 | 787 | }; |
| 635 | 788 | |
| 789 | |
| 790 | //------------------------------------------------- |
| 791 | // via6522_interface via5_intf |
| 792 | //------------------------------------------------- |
| 793 | |
| 636 | 794 | READ8_MEMBER( victor9k_state::via5_pa_r ) |
| 637 | 795 | { |
| 638 | 796 | /* |
| r23469 | r23470 | |
| 671 | 829 | */ |
| 672 | 830 | } |
| 673 | 831 | |
| 832 | READ_LINE_MEMBER( victor9k_state::brdy_r ) |
| 833 | { |
| 834 | return m_brdy; |
| 835 | } |
| 836 | |
| 837 | READ_LINE_MEMBER( victor9k_state::rdy0_r ) |
| 838 | { |
| 839 | return m_rdy0; |
| 840 | } |
| 841 | |
| 842 | READ_LINE_MEMBER( victor9k_state::rdy1_r ) |
| 843 | { |
| 844 | return m_rdy1; |
| 845 | } |
| 846 | |
| 674 | 847 | WRITE_LINE_MEMBER( victor9k_state::via5_irq_w ) |
| 675 | 848 | { |
| 676 | 849 | m_via5_irq = state; |
| r23469 | r23470 | |
| 682 | 855 | { |
| 683 | 856 | DEVCB_DRIVER_MEMBER(victor9k_state, via5_pa_r), |
| 684 | 857 | DEVCB_NULL, |
| 685 | | DEVCB_NULL, // BRDY |
| 858 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, brdy_r), |
| 686 | 859 | DEVCB_NULL, |
| 687 | | DEVCB_NULL, // RDY0 |
| 688 | | DEVCB_NULL, // RDY1 |
| 860 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, rdy0_r), |
| 861 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, rdy1_r), |
| 689 | 862 | |
| 690 | 863 | DEVCB_NULL, |
| 691 | 864 | DEVCB_DRIVER_MEMBER(victor9k_state, via5_pb_w), |
| r23469 | r23470 | |
| 697 | 870 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via5_irq_w) |
| 698 | 871 | }; |
| 699 | 872 | |
| 873 | |
| 874 | //------------------------------------------------- |
| 875 | // via6522_interface via1_intf |
| 876 | //------------------------------------------------- |
| 877 | |
| 700 | 878 | READ8_MEMBER( victor9k_state::via6_pa_r ) |
| 701 | 879 | { |
| 702 | 880 | /* |
| r23469 | r23470 | |
| 704 | 882 | bit description |
| 705 | 883 | |
| 706 | 884 | PA0 |
| 707 | | PA1 TRK0D0 |
| 885 | PA1 _TRK0D0 |
| 708 | 886 | PA2 |
| 709 | | PA3 TRK0D1 |
| 887 | PA3 _TRK0D1 |
| 710 | 888 | PA4 |
| 711 | 889 | PA5 |
| 712 | 890 | PA6 WPS |
| 713 | | PA7 SYNC |
| 891 | PA7 _SYNC |
| 714 | 892 | |
| 715 | 893 | */ |
| 716 | 894 | |
| r23469 | r23470 | |
| 726 | 904 | data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6; |
| 727 | 905 | |
| 728 | 906 | // disk sync detect |
| 907 | data |= m_sync << 7; |
| 729 | 908 | |
| 730 | 909 | return data; |
| 731 | 910 | } |
| r23469 | r23470 | |
| 780 | 959 | UINT8 data = 0; |
| 781 | 960 | |
| 782 | 961 | // motor speed status, drive A |
| 962 | data |= m_rdy0; |
| 783 | 963 | |
| 784 | 964 | // motor speed status, drive B |
| 965 | data |= m_rdy1 << 1; |
| 785 | 966 | |
| 786 | 967 | // door B sense |
| 787 | 968 | |
| r23469 | r23470 | |
| 789 | 970 | |
| 790 | 971 | // single/double sided |
| 791 | 972 | data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5; |
| 792 | | |
| 973 | |
| 793 | 974 | return data; |
| 794 | 975 | } |
| 795 | 976 | |
| r23469 | r23470 | |
| 801 | 982 | |
| 802 | 983 | PB0 |
| 803 | 984 | PB1 |
| 804 | | PB2 SCRESET |
| 985 | PB2 _SCRESET |
| 805 | 986 | PB3 |
| 806 | 987 | PB4 |
| 807 | 988 | PB5 |
| 808 | | PB6 stepper enable A |
| 809 | | PB7 stepper enable B |
| 989 | PB6 STP0 |
| 990 | PB7 STP1 |
| 810 | 991 | |
| 811 | 992 | */ |
| 812 | 993 | |
| 813 | 994 | // motor speed controller reset |
| 814 | | m_fdc_cpu->set_input_line(INPUT_LINE_RESET, BIT(data, 2)); |
| 995 | if (!BIT(data, 2)) |
| 996 | m_fdc_cpu->reset(); |
| 815 | 997 | |
| 816 | 998 | // stepper enable A |
| 817 | | m_se[0] = BIT(data, 6); |
| 999 | m_stp[0] = BIT(data, 6); |
| 818 | 1000 | |
| 819 | 1001 | // stepper enable B |
| 820 | | m_se[1] = BIT(data, 7); |
| 1002 | m_stp[1] = BIT(data, 7); |
| 821 | 1003 | } |
| 822 | 1004 | |
| 1005 | READ_LINE_MEMBER( victor9k_state::gcrerr_r ) |
| 1006 | { |
| 1007 | return m_gcrerr; |
| 1008 | } |
| 1009 | |
| 823 | 1010 | WRITE_LINE_MEMBER( victor9k_state::drw_w ) |
| 824 | 1011 | { |
| 825 | 1012 | } |
| r23469 | r23470 | |
| 839 | 1026 | { |
| 840 | 1027 | DEVCB_DRIVER_MEMBER(victor9k_state, via6_pa_r), |
| 841 | 1028 | DEVCB_DRIVER_MEMBER(victor9k_state, via6_pb_r), |
| 842 | | DEVCB_NULL, // GCRERR |
| 1029 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, gcrerr_r), |
| 843 | 1030 | DEVCB_NULL, |
| 844 | 1031 | DEVCB_NULL, |
| 845 | 1032 | DEVCB_NULL, |
| r23469 | r23470 | |
| 854 | 1041 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, via6_irq_w) |
| 855 | 1042 | }; |
| 856 | 1043 | |
| 857 | | // Keyboard |
| 858 | 1044 | |
| 1045 | |
| 1046 | //------------------------------------------------- |
| 1047 | // VICTOR9K_KEYBOARD_INTERFACE( kb_intf ) |
| 1048 | //------------------------------------------------- |
| 1049 | |
| 859 | 1050 | WRITE_LINE_MEMBER( victor9k_state::kbrdy_w ) |
| 860 | 1051 | { |
| 861 | 1052 | m_via2->write_cb1(state); |
| r23469 | r23470 | |
| 868 | 1059 | DEVCB_DRIVER_LINE_MEMBER(victor9k_state, kbrdy_w) |
| 869 | 1060 | }; |
| 870 | 1061 | |
| 1062 | |
| 1063 | //------------------------------------------------- |
| 1064 | // SLOT_INTERFACE( victor9k_floppies ) |
| 1065 | //------------------------------------------------- |
| 1066 | |
| 871 | 1067 | static SLOT_INTERFACE_START( victor9k_floppies ) |
| 872 | 1068 | SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) |
| 873 | 1069 | SLOT_INTERFACE_END |
| 874 | 1070 | |
| 1071 | |
| 875 | 1072 | //------------------------------------------------- |
| 876 | 1073 | // rs232_port_interface rs232a_intf |
| 877 | 1074 | //------------------------------------------------- |
| r23469 | r23470 | |
| 899 | 1096 | DEVCB_DEVICE_LINE_MEMBER(UPD7201_TAG, z80dart_device, ctsb_w) |
| 900 | 1097 | }; |
| 901 | 1098 | |
| 902 | | // Machine Initialization |
| 903 | 1099 | |
| 904 | | IRQ_CALLBACK_MEMBER(victor9k_state::victor9k_irq_callback) |
| 905 | | { |
| 906 | | return m_pic->inta_r(); |
| 907 | | } |
| 908 | 1100 | |
| 1101 | //************************************************************************** |
| 1102 | // MACHINE INITIALIZATION |
| 1103 | //************************************************************************** |
| 1104 | |
| 1105 | //------------------------------------------------- |
| 1106 | // MACHINE_START( victor9k ) |
| 1107 | //------------------------------------------------- |
| 1108 | |
| 909 | 1109 | void victor9k_state::machine_start() |
| 910 | 1110 | { |
| 911 | 1111 | // set interrupt callback |
| r23469 | r23470 | |
| 916 | 1116 | program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer()); |
| 917 | 1117 | } |
| 918 | 1118 | |
| 919 | | // Machine Driver |
| 920 | 1119 | |
| 1120 | //************************************************************************** |
| 1121 | // MACHINE CONFIGURATION |
| 1122 | //************************************************************************** |
| 1123 | |
| 1124 | //------------------------------------------------- |
| 1125 | // MACHINE_CONFIG( victor9k ) |
| 1126 | //------------------------------------------------- |
| 1127 | |
| 921 | 1128 | static MACHINE_CONFIG_START( victor9k, victor9k_state ) |
| 922 | 1129 | // basic machine hardware |
| 923 | 1130 | MCFG_CPU_ADD(I8088_TAG, I8088, XTAL_30MHz/6) |
| r23469 | r23470 | |
| 970 | 1177 | MCFG_RAM_EXTRA_OPTIONS("256K,384K,512K,640K,768K,896K") |
| 971 | 1178 | MACHINE_CONFIG_END |
| 972 | 1179 | |
| 973 | | // ROMs |
| 974 | 1180 | |
| 1181 | |
| 1182 | //************************************************************************** |
| 1183 | // ROMS |
| 1184 | //************************************************************************** |
| 1185 | |
| 1186 | //------------------------------------------------- |
| 1187 | // ROM( victor9k ) |
| 1188 | //------------------------------------------------- |
| 1189 | |
| 975 | 1190 | ROM_START( victor9k ) |
| 976 | 1191 | ROM_REGION( 0x2000, I8088_TAG, 0 ) |
| 977 | 1192 | ROM_DEFAULT_BIOS( "univ" ) |
| r23469 | r23470 | |
| 989 | 1204 | ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) ) |
| 990 | 1205 | ROM_END |
| 991 | 1206 | |
| 992 | | // System Drivers |
| 993 | 1207 | |
| 994 | | // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS |
| 1208 | |
| 1209 | //************************************************************************** |
| 1210 | // SYSTEM DRIVERS |
| 1211 | //************************************************************************** |
| 1212 | |
| 1213 | // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS |
| 995 | 1214 | COMP( 1982, victor9k, 0, 0, victor9k, victor9k, driver_device, 0, "Victor Business Products", "Victor 9000", GAME_NOT_WORKING ) |