trunk/src/emu/bus/ieee488/c8050.c
| r245630 | r245631 | |
| 549 | 549 | MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w)) |
| 550 | 550 | MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w)) |
| 551 | 551 | MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w)) |
| 552 | MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r)) |
| 552 | 553 | MCFG_MOS6530n_IN_PB6_CB(VCC) // SINGLE SIDED |
| 553 | 554 | |
| 554 | 555 | MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL_12MHz/2) |
| r245630 | r245631 | |
| 556 | 557 | MCFG_C8050_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) |
| 557 | 558 | MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) |
| 558 | 559 | MCFG_C8050_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) |
| 559 | | MCFG_C8050_WPS_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb3_w)) |
| 560 | 560 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8050_floppies, "525ssqd", c8050_device::floppy_formats) |
| 561 | 561 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8050_floppies, "525ssqd", c8050_device::floppy_formats) |
| 562 | 562 | MACHINE_CONFIG_END |
| r245630 | r245631 | |
| 609 | 609 | MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w)) |
| 610 | 610 | MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w)) |
| 611 | 611 | MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w)) |
| 612 | MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r)) |
| 612 | 613 | MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w)) |
| 613 | 614 | MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED |
| 614 | 615 | |
| r245630 | r245631 | |
| 617 | 618 | MCFG_C8050_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) |
| 618 | 619 | MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) |
| 619 | 620 | MCFG_C8050_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) |
| 620 | | MCFG_C8050_WPS_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb3_w)) |
| 621 | 621 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250_device::floppy_formats) |
| 622 | 622 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250_device::floppy_formats) |
| 623 | 623 | MACHINE_CONFIG_END |
| r245630 | r245631 | |
| 670 | 670 | MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w)) |
| 671 | 671 | MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w)) |
| 672 | 672 | MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w)) |
| 673 | MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r)) |
| 673 | 674 | MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w)) |
| 674 | 675 | MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED |
| 675 | 676 | |
| r245630 | r245631 | |
| 678 | 679 | MCFG_C8050_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) |
| 679 | 680 | MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) |
| 680 | 681 | MCFG_C8050_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) |
| 681 | | MCFG_C8050_WPS_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb3_w)) |
| 682 | 682 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250lp_device::floppy_formats) |
| 683 | 683 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250lp_device::floppy_formats) |
| 684 | 684 | MACHINE_CONFIG_END |
| r245630 | r245631 | |
| 731 | 731 | MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w)) |
| 732 | 732 | MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w)) |
| 733 | 733 | MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w)) |
| 734 | MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r)) |
| 734 | 735 | MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w)) |
| 735 | 736 | MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED |
| 736 | 737 | |
| r245630 | r245631 | |
| 739 | 740 | MCFG_C8050_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) |
| 740 | 741 | MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) |
| 741 | 742 | MCFG_C8050_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) |
| 742 | | MCFG_C8050_WPS_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb3_w)) |
| 743 | 743 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", sfd1001_device::floppy_formats) |
| 744 | 744 | MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, NULL, sfd1001_device::floppy_formats) |
| 745 | 745 | MACHINE_CONFIG_END |
trunk/src/emu/bus/ieee488/c8050fdc.h
| r245630 | r245631 | |
| 38 | 38 | #define MCFG_C8050_ERROR_CALLBACK(_write) \ |
| 39 | 39 | devcb = &c8050_fdc_t::set_error_wr_callback(*device, DEVCB_##_write); |
| 40 | 40 | |
| 41 | | #define MCFG_C8050_WPS_CALLBACK(_write) \ |
| 42 | | devcb = &c8050_fdc_t::set_wps_wr_callback(*device, DEVCB_##_write); |
| 43 | 41 | |
| 44 | 42 | |
| 45 | | |
| 46 | 43 | //************************************************************************** |
| 47 | 44 | // TYPE DEFINITIONS |
| 48 | 45 | //************************************************************************** |
| r245630 | r245631 | |
| 59 | 56 | template<class _Object> static devcb_base &set_ready_wr_callback(device_t &device, _Object object) { return downcast<c8050_fdc_t &>(device).m_write_ready.set_callback(object); } |
| 60 | 57 | template<class _Object> static devcb_base &set_brdy_wr_callback(device_t &device, _Object object) { return downcast<c8050_fdc_t &>(device).m_write_brdy.set_callback(object); } |
| 61 | 58 | template<class _Object> static devcb_base &set_error_wr_callback(device_t &device, _Object object) { return downcast<c8050_fdc_t &>(device).m_write_error.set_callback(object); } |
| 62 | | template<class _Object> static devcb_base &set_wps_wr_callback(device_t &device, _Object object) { return downcast<c8050_fdc_t &>(device).m_write_wps.set_callback(object); } |
| 63 | 59 | |
| 64 | 60 | DECLARE_READ8_MEMBER( read ); |
| 65 | 61 | DECLARE_WRITE8_MEMBER( write ); |
| r245630 | r245631 | |
| 74 | 70 | DECLARE_WRITE_LINE_MEMBER( odd_hd_w ); |
| 75 | 71 | DECLARE_WRITE_LINE_MEMBER( pull_sync_w ); |
| 76 | 72 | |
| 73 | DECLARE_READ_LINE_MEMBER( wps_r ) { return checkpoint_live.drv_sel ? m_floppy1->wpt_r() : m_floppy0->wpt_r(); } |
| 74 | |
| 77 | 75 | void stp0_w(int stp); |
| 78 | 76 | void stp1_w(int stp); |
| 79 | 77 | void ds_w(int ds); |
| 80 | 78 | |
| 81 | 79 | void set_floppy(floppy_image_device *floppy0, floppy_image_device *floppy1); |
| 82 | | void wps0_w(floppy_image_device *floppy, int state); |
| 83 | | void wps1_w(floppy_image_device *floppy, int state); |
| 84 | 80 | |
| 85 | 81 | protected: |
| 86 | 82 | // device-level overrides |
| r245630 | r245631 | |
| 92 | 88 | virtual const rom_entry *device_rom_region() const; |
| 93 | 89 | |
| 94 | 90 | void stp_w(floppy_image_device *floppy, int mtr, int &old_stp, int stp); |
| 95 | | void update_wps(); |
| 96 | 91 | |
| 97 | 92 | enum { |
| 98 | 93 | IDLE, |
| r245630 | r245631 | |
| 123 | 118 | |
| 124 | 119 | UINT8 pi; |
| 125 | 120 | UINT16 shift_reg_write; |
| 126 | | int wps; |
| 127 | 121 | }; |
| 128 | 122 | |
| 129 | 123 | devcb_write_line m_write_sync; |
| 130 | 124 | devcb_write_line m_write_ready; |
| 131 | 125 | devcb_write_line m_write_brdy; |
| 132 | 126 | devcb_write_line m_write_error; |
| 133 | | devcb_write_line m_write_wps; |
| 134 | 127 | |
| 135 | 128 | required_memory_region m_gcr_rom; |
| 136 | 129 | |
| r245630 | r245631 | |
| 149 | 142 | int m_rw_sel; |
| 150 | 143 | int m_odd_hd; |
| 151 | 144 | UINT8 m_pi; |
| 152 | | int m_wps; |
| 153 | | int m_wps0; |
| 154 | | int m_wps1; |
| 155 | 145 | |
| 156 | 146 | live_info cur_live, checkpoint_live; |
| 157 | 147 | fdc_pll_t cur_pll, checkpoint_pll; |
trunk/src/emu/machine/mos6530n.c
| r245630 | r245631 | |
| 18 | 18 | //************************************************************************** |
| 19 | 19 | |
| 20 | 20 | #define LOG 0 |
| 21 | #define LOG_TIMER 0 |
| 21 | 22 | |
| 22 | 23 | |
| 23 | 24 | |
| r245630 | r245631 | |
| 111 | 112 | { |
| 112 | 113 | // resolve callbacks |
| 113 | 114 | m_irq_cb.resolve_safe(); |
| 114 | | m_in_pa_cb.resolve_safe(0xff); |
| 115 | | m_out_pa_cb.resolve_safe(); |
| 116 | | m_in_pb_cb.resolve_safe(0xff); |
| 117 | | m_out_pb_cb.resolve_safe(); |
| 115 | m_in_pa_cb.resolve(); |
| 116 | m_out_pa_cb.resolve(); |
| 117 | m_in_pb_cb.resolve(); |
| 118 | m_out_pb_cb.resolve(); |
| 118 | 119 | m_in_pa0_cb.resolve_safe(1); |
| 119 | 120 | m_in_pa1_cb.resolve_safe(1); |
| 120 | 121 | m_in_pa2_cb.resolve_safe(1); |
| r245630 | r245631 | |
| 198 | 199 | UINT8 ddr = m_pa_ddr; |
| 199 | 200 | UINT8 data = (out & ddr) | (ddr ^ 0xff); |
| 200 | 201 | |
| 201 | | m_out_pa_cb(data); |
| 202 | | |
| 203 | | m_out_pa0_cb(BIT(data, 0)); |
| 204 | | m_out_pa1_cb(BIT(data, 1)); |
| 205 | | m_out_pa2_cb(BIT(data, 2)); |
| 206 | | m_out_pa3_cb(BIT(data, 3)); |
| 207 | | m_out_pa4_cb(BIT(data, 4)); |
| 208 | | m_out_pa5_cb(BIT(data, 5)); |
| 209 | | m_out_pa6_cb(BIT(data, 6)); |
| 210 | | m_out_pa7_cb(BIT(data, 7)); |
| 202 | if (m_out_pa_cb.isnull()) |
| 203 | { |
| 204 | m_out_pa0_cb(BIT(data, 0)); |
| 205 | m_out_pa1_cb(BIT(data, 1)); |
| 206 | m_out_pa2_cb(BIT(data, 2)); |
| 207 | m_out_pa3_cb(BIT(data, 3)); |
| 208 | m_out_pa4_cb(BIT(data, 4)); |
| 209 | m_out_pa5_cb(BIT(data, 5)); |
| 210 | m_out_pa6_cb(BIT(data, 6)); |
| 211 | m_out_pa7_cb(BIT(data, 7)); |
| 212 | } |
| 213 | else |
| 214 | { |
| 215 | m_out_pa_cb(data); |
| 216 | } |
| 211 | 217 | } |
| 212 | 218 | |
| 213 | 219 | |
| r245630 | r245631 | |
| 228 | 234 | m_irq_cb(m_irq ? ASSERT_LINE : CLEAR_LINE); |
| 229 | 235 | } |
| 230 | 236 | |
| 231 | | m_out_pb_cb(data); |
| 232 | | |
| 233 | | m_out_pb0_cb(BIT(data, 0)); |
| 234 | | m_out_pb1_cb(BIT(data, 1)); |
| 235 | | m_out_pb2_cb(BIT(data, 2)); |
| 236 | | m_out_pb3_cb(BIT(data, 3)); |
| 237 | | m_out_pb4_cb(BIT(data, 4)); |
| 238 | | m_out_pb5_cb(BIT(data, 5)); |
| 239 | | m_out_pb6_cb(BIT(data, 6)); |
| 240 | | m_out_pb7_cb(BIT(data, 7)); |
| 237 | if (m_out_pb_cb.isnull()) |
| 238 | { |
| 239 | m_out_pb0_cb(BIT(data, 0)); |
| 240 | m_out_pb1_cb(BIT(data, 1)); |
| 241 | m_out_pb2_cb(BIT(data, 2)); |
| 242 | m_out_pb3_cb(BIT(data, 3)); |
| 243 | m_out_pb4_cb(BIT(data, 4)); |
| 244 | m_out_pb5_cb(BIT(data, 5)); |
| 245 | m_out_pb6_cb(BIT(data, 6)); |
| 246 | m_out_pb7_cb(BIT(data, 7)); |
| 247 | } |
| 248 | else |
| 249 | { |
| 250 | m_out_pb_cb(data); |
| 251 | } |
| 241 | 252 | } |
| 242 | 253 | |
| 243 | 254 | |
| r245630 | r245631 | |
| 247 | 258 | |
| 248 | 259 | void mos6530_t::pa_w(int bit, int state) |
| 249 | 260 | { |
| 250 | | m_pa_in &= ~(2 << bit); |
| 251 | | |
| 252 | | if (state) m_pa_in |= (2 << bit); |
| 261 | m_pa_in &= ~(1 << bit); |
| 262 | m_pa_in |= (state << bit); |
| 253 | 263 | } |
| 254 | 264 | |
| 255 | 265 | |
| r245630 | r245631 | |
| 259 | 269 | |
| 260 | 270 | void mos6530_t::pb_w(int bit, int state) |
| 261 | 271 | { |
| 262 | | m_pb_in &= ~(2 << bit); |
| 263 | | |
| 264 | | if (state) m_pb_in |= (2 << bit); |
| 272 | m_pb_in &= ~(1 << bit); |
| 273 | m_pb_in |= (state << bit); |
| 265 | 274 | } |
| 266 | 275 | |
| 267 | 276 | |
| r245630 | r245631 | |
| 275 | 284 | |
| 276 | 285 | if (m_in_pa_cb.isnull()) |
| 277 | 286 | { |
| 278 | | in |= m_in_pa0_cb.isnull() ? BIT(m_pa_in, 0) : m_in_pa0_cb() << 0; |
| 279 | | in |= m_in_pa1_cb.isnull() ? BIT(m_pa_in, 1) : m_in_pa1_cb() << 1; |
| 280 | | in |= m_in_pa2_cb.isnull() ? BIT(m_pa_in, 2) : m_in_pa2_cb() << 2; |
| 281 | | in |= m_in_pa3_cb.isnull() ? BIT(m_pa_in, 3) : m_in_pa3_cb() << 3; |
| 282 | | in |= m_in_pa4_cb.isnull() ? BIT(m_pa_in, 4) : m_in_pa4_cb() << 4; |
| 283 | | in |= m_in_pa5_cb.isnull() ? BIT(m_pa_in, 5) : m_in_pa5_cb() << 5; |
| 284 | | in |= m_in_pa6_cb.isnull() ? BIT(m_pa_in, 6) : m_in_pa6_cb() << 6; |
| 285 | | in |= m_in_pa7_cb.isnull() ? BIT(m_pa_in, 7) : m_in_pa7_cb() << 7; |
| 287 | in |= (m_in_pa0_cb.isnull() ? BIT(m_pa_in, 0) : m_in_pa0_cb()); |
| 288 | in |= (m_in_pa1_cb.isnull() ? BIT(m_pa_in, 1) : m_in_pa1_cb()) << 1; |
| 289 | in |= (m_in_pa2_cb.isnull() ? BIT(m_pa_in, 2) : m_in_pa2_cb()) << 2; |
| 290 | in |= (m_in_pa3_cb.isnull() ? BIT(m_pa_in, 3) : m_in_pa3_cb()) << 3; |
| 291 | in |= (m_in_pa4_cb.isnull() ? BIT(m_pa_in, 4) : m_in_pa4_cb()) << 4; |
| 292 | in |= (m_in_pa5_cb.isnull() ? BIT(m_pa_in, 5) : m_in_pa5_cb()) << 5; |
| 293 | in |= (m_in_pa6_cb.isnull() ? BIT(m_pa_in, 6) : m_in_pa6_cb()) << 6; |
| 294 | in |= (m_in_pa7_cb.isnull() ? BIT(m_pa_in, 7) : m_in_pa7_cb()) << 7; |
| 286 | 295 | } |
| 287 | 296 | else |
| 288 | 297 | { |
| r245630 | r245631 | |
| 290 | 299 | } |
| 291 | 300 | |
| 292 | 301 | UINT8 out = m_pa_out; |
| 293 | | UINT8 ddr = m_pa_ddr; |
| 302 | UINT8 ddr_out = m_pa_ddr; |
| 303 | UINT8 ddr_in = m_pa_ddr ^ 0xff; |
| 304 | UINT8 data = (out & ddr_out) | (in & ddr_in); |
| 294 | 305 | |
| 295 | | return (out & ddr) | (in & (ddr ^ 0xff)); |
| 306 | if (LOG) logerror("%s %s MOS6530 '%s' Port A Data In %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 307 | |
| 308 | return data; |
| 296 | 309 | } |
| 297 | 310 | |
| 298 | 311 | |
| r245630 | r245631 | |
| 304 | 317 | { |
| 305 | 318 | m_pa_out = data; |
| 306 | 319 | |
| 307 | | if (LOG) logerror("%s %s MOS6530 '%s' Port A data %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 320 | if (LOG) logerror("%s %s MOS6530 '%s' Port A Data Out %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 308 | 321 | |
| 309 | 322 | update_pa(); |
| 310 | 323 | } |
| r245630 | r245631 | |
| 334 | 347 | |
| 335 | 348 | if (m_in_pb_cb.isnull()) |
| 336 | 349 | { |
| 337 | | in |= m_in_pb0_cb.isnull() ? BIT(m_pb_in, 0) : m_in_pb0_cb() << 0; |
| 338 | | in |= m_in_pb1_cb.isnull() ? BIT(m_pb_in, 1) : m_in_pb1_cb() << 1; |
| 339 | | in |= m_in_pb2_cb.isnull() ? BIT(m_pb_in, 2) : m_in_pb2_cb() << 2; |
| 340 | | in |= m_in_pb3_cb.isnull() ? BIT(m_pb_in, 3) : m_in_pb3_cb() << 3; |
| 341 | | in |= m_in_pb4_cb.isnull() ? BIT(m_pb_in, 4) : m_in_pb4_cb() << 4; |
| 342 | | in |= m_in_pb5_cb.isnull() ? BIT(m_pb_in, 5) : m_in_pb5_cb() << 5; |
| 343 | | in |= m_in_pb6_cb.isnull() ? BIT(m_pb_in, 6) : m_in_pb6_cb() << 6; |
| 344 | | in |= m_in_pb7_cb.isnull() ? BIT(m_pb_in, 7) : m_in_pb7_cb() << 7; |
| 350 | in |= (m_in_pb0_cb.isnull() ? BIT(m_pb_in, 0) : m_in_pb0_cb()); |
| 351 | in |= (m_in_pb1_cb.isnull() ? BIT(m_pb_in, 1) : m_in_pb1_cb()) << 1; |
| 352 | in |= (m_in_pb2_cb.isnull() ? BIT(m_pb_in, 2) : m_in_pb2_cb()) << 2; |
| 353 | in |= (m_in_pb3_cb.isnull() ? BIT(m_pb_in, 3) : m_in_pb3_cb()) << 3; |
| 354 | in |= (m_in_pb4_cb.isnull() ? BIT(m_pb_in, 4) : m_in_pb4_cb()) << 4; |
| 355 | in |= (m_in_pb5_cb.isnull() ? BIT(m_pb_in, 5) : m_in_pb5_cb()) << 5; |
| 356 | in |= (m_in_pb6_cb.isnull() ? BIT(m_pb_in, 6) : m_in_pb6_cb()) << 6; |
| 357 | in |= (m_in_pb7_cb.isnull() ? BIT(m_pb_in, 7) : m_in_pb7_cb()) << 7; |
| 345 | 358 | } |
| 346 | 359 | else |
| 347 | 360 | { |
| r245630 | r245631 | |
| 349 | 362 | } |
| 350 | 363 | |
| 351 | 364 | UINT8 out = m_pb_out; |
| 352 | | UINT8 ddr = m_pb_ddr; |
| 365 | UINT8 ddr_out = m_pb_ddr; |
| 366 | UINT8 ddr_in = m_pb_ddr ^ 0xff; |
| 367 | UINT8 data = (out & ddr_out) | (in & ddr_in); |
| 353 | 368 | |
| 354 | | return (out & ddr) | (in & (ddr ^ 0xff)); |
| 369 | if (LOG) logerror("%s %s MOS6530 '%s' Port B Data In %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 370 | logerror("PB data read %02x\n",data); |
| 371 | return data; |
| 355 | 372 | } |
| 356 | 373 | |
| 357 | 374 | |
| r245630 | r245631 | |
| 363 | 380 | { |
| 364 | 381 | m_pb_out = data; |
| 365 | 382 | |
| 366 | | if (LOG) logerror("%s %s MOS6530 '%s' Port B data %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 383 | if (LOG) logerror("%s %s MOS6530 '%s' Port B Data Out %02x\n", machine().time().as_string(), machine().describe_context(), tag(), data); |
| 367 | 384 | |
| 368 | 385 | update_pb(); |
| 369 | 386 | } |
| r245630 | r245631 | |
| 438 | 455 | |
| 439 | 456 | m_ie = BIT(offset, 3) ? true : false; |
| 440 | 457 | |
| 441 | | if (LOG) logerror("%s %s MOS6530 '%s' Timer value %02x shift %u IE %u\n", machine().time().as_string(), machine().describe_context(), tag(), data, m_shift, m_ie ? 1 : 0); |
| 458 | if (LOG_TIMER) logerror("%s %s MOS6530 '%s' Timer value %02x shift %u IE %u\n", machine().time().as_string(), machine().describe_context(), tag(), data, m_shift, m_ie ? 1 : 0); |
| 442 | 459 | |
| 443 | 460 | if (m_irq) { |
| 444 | 461 | m_irq = false; |
| r245630 | r245631 | |
| 541 | 558 | |
| 542 | 559 | cur_live.value--; |
| 543 | 560 | |
| 544 | | if (LOG) logerror("%s MOS6530 '%s' timer %02x IRQ 1\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 561 | if (LOG_TIMER) logerror("%s MOS6530 '%s' timer %02x IRQ 1\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 545 | 562 | |
| 546 | 563 | if (!cur_live.value) { |
| 547 | 564 | cur_live.period = attotime::from_hz(clock()); |
| r245630 | r245631 | |
| 559 | 576 | cur_live.value--; |
| 560 | 577 | cur_live.irq = true; |
| 561 | 578 | |
| 562 | | if (LOG) logerror("%s MOS6530 '%s' timer %02x IRQ 0\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 579 | if (LOG_TIMER) logerror("%s MOS6530 '%s' timer %02x IRQ 0\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 563 | 580 | |
| 564 | 581 | live_delay(RUNNING_SYNCPOINT); |
| 565 | 582 | |
| r245630 | r245631 | |
| 568 | 585 | } |
| 569 | 586 | |
| 570 | 587 | case RUNNING_SYNCPOINT: { |
| 571 | | if (LOG) logerror("%s MOS6530 '%s' IRQ\n", machine().time().as_string(), tag()); |
| 588 | if (LOG_TIMER) logerror("%s MOS6530 '%s' IRQ\n", machine().time().as_string(), tag()); |
| 572 | 589 | |
| 573 | 590 | m_irq = true; |
| 574 | 591 | update_pb(); |
| r245630 | r245631 | |
| 584 | 601 | |
| 585 | 602 | cur_live.value--; |
| 586 | 603 | |
| 587 | | if (LOG) logerror("%s MOS6530 '%s' timer %02x IRQ 0\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 604 | if (LOG_TIMER) logerror("%s MOS6530 '%s' timer %02x IRQ 0\n", cur_live.tm.as_string(), tag(), cur_live.value); |
| 588 | 605 | |
| 589 | 606 | if (!cur_live.value) { |
| 590 | 607 | live_abort(); |