diff options
Diffstat (limited to 'src/mess/drivers/victor9k.c')
-rw-r--r-- | src/mess/drivers/victor9k.c | 302 |
1 files changed, 40 insertions, 262 deletions
diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 1ed0db25aa6..40af098cbc3 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -29,144 +29,6 @@ //************************************************************************** -// READ/WRITE HANDLERS -//************************************************************************** - -//------------------------------------------------- -// floppy_p1_r - -//------------------------------------------------- - -READ8_MEMBER( victor9k_state::floppy_p1_r ) -{ - /* - - bit description - - 0 L0MS0 - 1 L0MS1 - 2 L0MS2 - 3 L0MS3 - 4 L1MS0 - 5 L1MS1 - 6 L1MS2 - 7 L1MS3 - - */ - - return m_lms; -} - - -//------------------------------------------------- -// floppy_p2_r - -//------------------------------------------------- - -READ8_MEMBER( victor9k_state::floppy_p2_r ) -{ - /* - - bit description - - 0 - 1 - 2 - 3 - 4 - 5 - 6 RDY0 - 7 RDY1 - - */ - - UINT8 data = 0; - - data |= m_rdy0 << 6; - data |= m_rdy1 << 7; - - return data; -} - - -//------------------------------------------------- -// floppy_p2_w - -//------------------------------------------------- - -WRITE8_MEMBER( victor9k_state::floppy_p2_w ) -{ - /* - - bit description - - 0 START0 - 1 STOP0 - 2 START1 - 3 STOP1 - 4 SEL1 - 5 SEL0 - 6 - 7 - - */ - - if (BIT(data, 0)) m_floppy0->mon_w(0); - if (BIT(data, 1)) m_floppy0->mon_w(1); - if (BIT(data, 2)) m_floppy1->mon_w(0); - if (BIT(data, 3)) m_floppy1->mon_w(1); - - int sel0 = BIT(data, 5); - - if (m_sel0 && !sel0) - { - m_da0 = m_da; - //m_floppy0->set_rpm(); - } - - m_sel0 = sel0; - - int sel1 = BIT(data, 4); - - if (m_sel1 && !sel1) - { - m_da1 = m_da; - //m_floppy1->set_rpm(); - } - - m_sel1 = sel1; -} - - -//------------------------------------------------- -// tach0_r - -//------------------------------------------------- - -READ8_MEMBER( victor9k_state::tach0_r ) -{ - return m_tach0; -} - - -//------------------------------------------------- -// tach1_r - -//------------------------------------------------- - -READ8_MEMBER( victor9k_state::tach1_r ) -{ - return m_tach1; -} - - -//------------------------------------------------- -// da_w - -//------------------------------------------------- - -WRITE8_MEMBER( victor9k_state::da_w ) -{ - m_da = data; -} - - - -//************************************************************************** // ADDRESS MAPS //************************************************************************** @@ -193,19 +55,6 @@ static ADDRESS_MAP_START( victor9k_mem, AS_PROGRAM, 8, victor9k_state ) ADDRESS_MAP_END -//------------------------------------------------- -// ADDRESS_MAP( floppy_io ) -//------------------------------------------------- - -static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor9k_state ) - AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w) - AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r) - AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r) - AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w) -ADDRESS_MAP_END - - //************************************************************************** // INPUT PORTS @@ -511,8 +360,8 @@ WRITE8_MEMBER( victor9k_state::via4_pa_w ) */ - m_lms = (m_lms & 0xf0) | (data & 0x0f); - m_st[0] = data >> 4; + m_fdc->l0ms_w(data & 0x0f); + m_fdc->st0_w(data >> 4); } WRITE8_MEMBER( victor9k_state::via4_pb_w ) @@ -532,8 +381,8 @@ WRITE8_MEMBER( victor9k_state::via4_pb_w ) */ - m_lms = (data << 4) | (m_lms & 0x0f); - m_st[1] = data >> 4; + m_fdc->l1ms_w(data & 0x0f); + m_fdc->st1_w(data >> 4); } WRITE_LINE_MEMBER( victor9k_state::mode_w ) @@ -609,16 +458,16 @@ READ8_MEMBER( victor9k_state::via6_pa_r ) UINT8 data = 0; // track 0 drive A sense - data |= m_floppy0->trk00_r() << 1; + data |= m_fdc->trk0d0_r() << 1; // track 0 drive B sense - data |= m_floppy1->trk00_r() << 3; + data |= m_fdc->trk0d1_r() << 3; // write protect sense - data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6; + data |= m_fdc->wps_r() << 6; // disk sync detect - data |= m_sync << 7; + data |= m_fdc->sync_r() << 7; return data; } @@ -641,16 +490,16 @@ WRITE8_MEMBER( victor9k_state::via6_pa_w ) */ // LED, drive A - output_set_led_value(LED_A, BIT(data, 0)); + m_fdc->led0a_w(BIT(data, 0)); // LED, drive B - output_set_led_value(LED_B, BIT(data, 2)); + m_fdc->led1a_w(BIT(data, 2)); // dual side select - m_side = BIT(data, 4); + m_fdc->side_select_w(BIT(data, 4)); // select drive A/B - m_drive = BIT(data, 5); + m_fdc->drive_select_w(BIT(data, 5)); } READ8_MEMBER( victor9k_state::via6_pb_r ) @@ -673,19 +522,19 @@ READ8_MEMBER( victor9k_state::via6_pb_r ) UINT8 data = 0; // motor speed status, drive A - data |= m_rdy0; + data |= m_fdc->rdy0_r(); // motor speed status, drive B - data |= m_rdy1 << 1; + data |= m_fdc->rdy1_r() << 1; // door B sense - data |= m_ds1 << 3; + data |= m_fdc->ds1_r() << 3; // door A sense - data |= m_ds0 << 4; + data |= m_fdc->ds0_r() << 4; // single/double sided - data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5; + data |= m_fdc->single_double_sided_r() << 5; return data; } @@ -708,22 +557,13 @@ WRITE8_MEMBER( victor9k_state::via6_pb_w ) */ // motor speed controller reset - if (!BIT(data, 2)) - m_fdc_cpu->reset(); + m_fdc->screset_w(BIT(data, 2)); // stepper enable A - m_stp[0] = BIT(data, 6); + m_fdc->stp0_w(BIT(data, 6)); // stepper enable B - m_stp[1] = BIT(data, 7); -} - -WRITE_LINE_MEMBER( victor9k_state::drw_w ) -{ -} - -WRITE_LINE_MEMBER( victor9k_state::erase_w ) -{ + m_fdc->stp1_w(BIT(data, 7)); } WRITE_LINE_MEMBER( victor9k_state::via6_irq_w ) @@ -753,64 +593,6 @@ WRITE_LINE_MEMBER( victor9k_state::kbdata_w ) m_via2->write_pa6(state); } -//------------------------------------------------- -// SLOT_INTERFACE( victor9k_floppies ) -//------------------------------------------------- - -void victor9k_state::ready0_cb(floppy_image_device *device, int state) -{ - m_rdy0 = state; - - m_via5->write_ca2(m_rdy0); -} - -int victor9k_state::load0_cb(floppy_image_device *device) -{ - m_ds0 = 0; - - m_via4->write_ca1(m_ds0); - - return IMAGE_INIT_PASS; -} - -void victor9k_state::unload0_cb(floppy_image_device *device) -{ - m_ds0 = 1; - - m_via4->write_ca1(m_ds0); -} - -void victor9k_state::ready1_cb(floppy_image_device *device, int state) -{ - m_rdy1 = state; - - m_via5->write_cb2(m_rdy1); -} - -int victor9k_state::load1_cb(floppy_image_device *device) -{ - m_ds1 = 0; - - m_via4->write_cb1(m_ds1); - - return IMAGE_INIT_PASS; -} - -void victor9k_state::unload1_cb(floppy_image_device *device) -{ - m_ds1 = 1; - - m_via4->write_cb1(m_ds1); -} - -static SLOT_INTERFACE_START( victor9k_floppies ) - SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) -SLOT_INTERFACE_END - -FLOPPY_FORMATS_MEMBER( victor9k_state::floppy_formats ) - FLOPPY_VICTOR_9000_FORMAT -FLOPPY_FORMATS_END - //************************************************************************** // MACHINE INITIALIZATION @@ -822,20 +604,20 @@ FLOPPY_FORMATS_END void victor9k_state::machine_start() { - // set floppy callbacks - m_floppy0->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready0_cb), this)); - m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load0_cb), this)); - m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload0_cb), this)); - m_floppy1->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready1_cb), this)); - m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load1_cb), this)); - m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload1_cb), this)); + // state saving + save_item(NAME(m_brt)); + save_item(NAME(m_cont)); + save_item(NAME(m_via1_irq)); + save_item(NAME(m_via2_irq)); + save_item(NAME(m_via3_irq)); + save_item(NAME(m_via4_irq)); + save_item(NAME(m_via5_irq)); + save_item(NAME(m_via6_irq)); + save_item(NAME(m_ssda_irq)); // memory banking address_space &program = m_maincpu->space(AS_PROGRAM); program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer()); - - m_via5->write_ca1(m_brdy); - m_via6->write_ca1(m_gcrerr); } @@ -854,9 +636,6 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_CPU_PROGRAM_MAP(victor9k_mem) MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb) - MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_30MHz/6) - MCFG_CPU_IO_MAP(floppy_io) - // video hardware MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_REFRESH_RATE(50) @@ -942,13 +721,10 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_VIA6522_READPB_HANDLER(READ8(victor9k_state, via6_pb_r)) MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via6_pa_w)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via6_pb_w)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor9k_state, drw_w)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(victor9k_state, erase_w)) + MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, victor_9000_fdc_t, drw_w)) + MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, victor_9000_fdc_t, erase_w)) MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via6_irq_w)) - MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":0", victor9k_floppies, "525qd", victor9k_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", victor9k_state::floppy_formats) - MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL) MCFG_RS232_RXD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxa_w)) MCFG_RS232_DCD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, dcda_w)) @@ -967,6 +743,14 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_VICTOR9K_KBRDY_HANDLER(WRITELINE(victor9k_state, kbrdy_w)) MCFG_VICTOR9K_KBDATA_HANDLER(WRITELINE(victor9k_state, kbdata_w)) + MCFG_DEVICE_ADD(FDC_TAG, VICTOR_9000_FDC, 0) + MCFG_VICTOR_9000_FDC_DS0_CB(DEVWRITELINE(M6522_4_TAG, via6522_device, write_ca1)) + MCFG_VICTOR_9000_FDC_DS1_CB(DEVWRITELINE(M6522_4_TAG, via6522_device, write_cb1)) + MCFG_VICTOR_9000_FDC_RDY0_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_ca2)) + MCFG_VICTOR_9000_FDC_RDY1_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_cb2)) + MCFG_VICTOR_9000_FDC_BRDY_CB(DEVWRITELINE(M6522_5_TAG, via6522_device, write_ca1)) + MCFG_VICTOR_9000_FDC_GCRERR_CB(DEVWRITELINE(M6522_6_TAG, via6522_device, write_ca1)) + // internal ram MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("128K") @@ -995,12 +779,6 @@ ROM_START( victor9k ) ROM_SYSTEM_BIOS( 1, "univ", "Universal" ) ROMX_LOAD( "v9000 univ. fe f3f7 13db.7j", 0x0000, 0x1000, CRC(25c7a59f) SHA1(8784e9aa7eb9439f81e18b8e223c94714e033911), ROM_BIOS(2) ) ROMX_LOAD( "v9000 univ. ff f3f7 39fe.8j", 0x1000, 0x1000, CRC(496c7467) SHA1(eccf428f62ef94ab85f4a43ba59ae6a066244a66), ROM_BIOS(2) ) - - ROM_REGION( 0x400, I8048_TAG, 0) - ROM_LOAD( "36080.5d", 0x000, 0x400, CRC(9bf49f7d) SHA1(b3a11bb65105db66ae1985b6f482aab6ea1da38b) ) - - ROM_REGION( 0x800, "gcr", 0 ) - ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) ) ROM_END |