Example #1
0
void DoSTAIfCan(HDesign& hd)
{
    if (hd.CanDoTiming())
    {
        WRITELINE("");
        ALERT("Running STA:");
        STA(hd);
        FindCriticalPaths(hd);
        PrintTimingReport(hd, hd.cfg.ValueOf("CriticalPaths.countLogReportCriticalPaths", 0));
        hd.Plotter->PlotMostCriticalPaths(hd, hd.cfg.ValueOf("CriticalPaths.countPlotCriticalPaths", 0));
    }
}
void ReportCountNetsWithTypes(HDesign& design)
{
	WRITELINE("");
	WRITELINE("Reporting: count nets with type : all, skipped, buffered, removed, Active\n");
	WRITELINE("  Nets count all = %d", design.Nets.Count());
	WRITELINE("  Nets with active type   = %d", design.Nets.Count(NetKind_Active));
	WRITELINE("  Nets with skipped type  = %d", design.Nets.Count(NetKind_Skipped));
	WRITELINE("  Nets with buffered type = %d", design.Nets.Count(NetKind_Buffered));
	WRITELINE("  Nets with removed type  = %d", design.Nets.Count(NetKind_Removed));
}
void ReportTEPNames(HDesign& design)
{
    if (!design.TimingPoints.IsInitialized()) return;

    ALERT("REPORTING LIST OF TIMING END POINTS:\n");
    
    HTimingPoint endPointsEnd = design.TimingPoints.LastInternalPoint();
    for (HTimingPointWrapper ep = design[design.TimingPoints.TopologicalOrderRoot()]; ep.GoPrevious() != endPointsEnd; )
    {
        WRITELINE("\tTEP: %s", GetCellPinName(design, ep).c_str());
    }
}
void TimingHelper::PrintNetPinsDetails(HNet net, BufferInfo& binf)
{
  WRITELINE("Net: %s", hd.GetString<HNet::Name>(net).c_str());

  AdaptiveRoute(hd, net);
  CalculateNetDelays<LayersModel_Lumped, SignalModel_Universal>(hd, net);

  NetInfo ni = NetInfo::Create(hd, net, binf);
  if (ni.Rd() == 0.0)
  {
    WRITELINE("DriverResistance: %.10f", binf.Rb());
    WRITELINE("BufferDelay     : %.10f", binf.Tb());
  }
  else
  {
    WRITELINE("DriverResistance: %.10f", ni.Rd());
  }

  WRITELINE("CellName PinName X Y ObservedC PathDelay");
  for(HNet::PinsEnumeratorW pin = hd.Get<HNet::Pins, HNet::PinsEnumeratorW>(net); pin.MoveNext(); )
  {
    HSteinerPointWrapper st = hd[hd.SteinerPoints[pin]];
    WRITELINE("%s %s %10.2f %10.2f %12.10f %12.10f",
      hd.GetString<HCell::Name>(pin.Cell()).c_str(),
      pin.Name().c_str(),
      pin.X(),
      pin.Y(),
      st.ObservedC(),
      st.PathDelay());
  }
}
Example #5
0
bool DoRandomPlacementIfRequired(HDesign& hd, const char* cfgOptName)
{
    if (hd.cfg.ValueOf(cfgOptName, false))
    {
        RandomPlacement(hd);

        WRITELINE("");
        if (hd.CanDoTiming()) ALERT("STA after random placement:");
        STA(hd);
        return true;
    }
    return false;
}
Example #6
0
bool DoDetailedPlacementIfRequired(HDPGrid& grid, const char* cfgOptName)
{
    if (grid.Design().cfg.ValueOf(cfgOptName, false))
    {
        DetailedPlacement(grid);

        WRITELINE("");
        if (grid.Design().CanDoTiming()) ALERT("STA after detailed placement:");
        STA(grid.Design());
        return true;
    }
    return false;
}
Example #7
0
bool DoGlobalPlacementIfRequired(HDesign& hd, const char* cfgOptName)
{
    if (hd.cfg.ValueOf(cfgOptName, false))
    {
        GlobalPlacement(hd, hd.cfg.ValueOf("params.objective"));

        WRITELINE("");
        if (hd.CanDoTiming()) ALERT("STA after global placement:");
        STA(hd);
        return true;
    }
    return false;
}
Example #8
0
OsStatus_t
ArchDumpThreadContext(
    _In_ Context_t *Context)
{
    // Dump general registers
    WRITELINE("EAX: 0x%" PRIxIN ", EBX 0x%" PRIxIN ", ECX 0x%" PRIxIN ", EDX 0x%" PRIxIN "",
        Context->Eax, Context->Ebx, Context->Ecx, Context->Edx);

    // Dump stack registers
    WRITELINE("ESP 0x%" PRIxIN " (UserESP 0x%" PRIxIN "), EBP 0x%" PRIxIN ", Flags 0x%" PRIxIN "",
        Context->Esp, Context->UserEsp, Context->Ebp, Context->Eflags);
        
    // Dump copy registers
    WRITELINE("ESI 0x%" PRIxIN ", EDI 0x%" PRIxIN "", Context->Esi, Context->Edi);

    // Dump segments
    WRITELINE("CS 0x%" PRIxIN ", DS 0x%" PRIxIN ", GS 0x%" PRIxIN ", ES 0x%" PRIxIN ", FS 0x%" PRIxIN "",
        Context->Cs, Context->Ds, Context->Gs, Context->Es, Context->Fs);

    // Dump IRQ information
    WRITELINE("IRQ 0x%" PRIxIN ", ErrorCode 0x%" PRIxIN ", UserSS 0x%" PRIxIN "",
        Context->Irq, Context->ErrorCode, Context->UserSs);
    return OsSuccess;
}
Example #9
0
bool DoLegalizationIfRequired(HDPGrid& grid, const char* cfgOptName)
{
    if (grid.Design().cfg.ValueOf(cfgOptName, false))
    {
        Legalization(grid);

        WRITELINE("");
        if (grid.Design().CanDoTiming()) 
        {
            //ALERT("No wire STA:");
            //NoWireDelaySTA(grid.Design());
            ALERT("STA after legalization:");
            STA(grid.Design());            
        }
        return true;
    }
    return false;
}
Example #10
0
bool DoLRTimingDrivenPlacementIfRequired(HDesign& hd, const char* cfgOptName)
{
    if (hd.cfg.ValueOf(cfgOptName, false))
    {
        GlobalPlacement(hd, "LR");

        WRITELINE("");
        if (hd.CanDoTiming())
        {
            //ALERT("No wire STA:");
            //NoWireDelaySTA(hd);
            ALERT("STA after LR placement:");
            STA(hd);
        }
        return true;
    }
    return false;
}
Example #11
0
	MCFG_SCREEN_PALETTE("palette")

	MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_exprraid)
	MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256)

	/* sound hardware */
	SPEAKER(config, "mono").front_center();

	MCFG_GENERIC_LATCH_8_ADD("soundlatch")
	MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("slave", INPUT_LINE_NMI))

	MCFG_DEVICE_ADD("ym1", YM2203, XTAL(12'000'000) / 8)
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)

	MCFG_DEVICE_ADD("ym2", YM3526, XTAL(12'000'000) / 4)
	MCFG_YM3526_IRQ_HANDLER(WRITELINE(*this, exprraid_state, irqhandler))
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
MACHINE_CONFIG_END

MACHINE_CONFIG_START(exprraid_state::exprboot)
	exprraid(config);

	MCFG_DEVICE_REPLACE("maincpu", M6502, 1500000)        /* 1.5 MHz ??? */
	MCFG_DEVICE_PROGRAM_MAP(master_map)
MACHINE_CONFIG_END


/***************************************************************************

  Game driver(s)
Example #12
0
	m_maincpu->set_addrmap(AS_PROGRAM, &zorba_state::zorba_mem);
	m_maincpu->set_addrmap(AS_IO, &zorba_state::zorba_io);

	/* video hardware */
	MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
	MCFG_SCREEN_REFRESH_RATE(50)
	MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
	MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, m_palette, gfx_zorba)
	MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT(m_palette)

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
	BEEP(config, m_beep, 800).add_route(ALL_OUTPUTS, "mono", 1.00); // should be horizontal frequency / 16, so depends on CRTC parameters

	MCFG_INPUT_MERGER_ANY_HIGH("irq0")
	MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE(*this, zorba_state, irq_w<0>))
	MCFG_INPUT_MERGER_ANY_HIGH("irq1")
	MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE(*this, zorba_state, irq_w<1>))
	MCFG_INPUT_MERGER_ANY_HIGH("irq2")
	MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE(*this, zorba_state, irq_w<2>))

	/* devices */
	Z80DMA(config, m_dma, 24_MHz_XTAL / 6);
	// busack on cpu connects to bai pin
	m_dma->out_busreq_callback().set(FUNC(zorba_state::busreq_w));  //connects to busreq on cpu
	m_dma->out_int_callback().set("irq0", FUNC(input_merger_device::in_w<0>));
	//ba0 - not connected
	m_dma->in_mreq_callback().set(FUNC(zorba_state::memory_read_byte));
	m_dma->out_mreq_callback().set(FUNC(zorba_state::memory_write_byte));
	m_dma->in_iorq_callback().set(FUNC(zorba_state::io_read_byte));
	m_dma->out_iorq_callback().set(FUNC(zorba_state::io_write_byte));
Example #13
0
	MCFG_PALETTE_INIT_OWNER(pk8020_state, pk8020)


	MCFG_I8255_ADD( "ppi8255_1", pk8020_ppi8255_interface_1 )
	MCFG_I8255_ADD( "ppi8255_2", pk8020_ppi8255_interface_2 )
	MCFG_I8255_ADD( "ppi8255_3", pk8020_ppi8255_interface_3 )

	MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
	MCFG_PIT8253_CLK0(XTAL_20MHz / 10)
	MCFG_PIT8253_OUT0_HANDLER(WRITELINE(pk8020_state,pk8020_pit_out0))
	MCFG_PIT8253_CLK1(XTAL_20MHz / 10)
	MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pk8020_state,pk8020_pit_out1))
	MCFG_PIT8253_CLK2((XTAL_20MHz / 8) / 164)
	MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir5_w))

	MCFG_PIC8259_ADD( "pic8259", WRITELINE(pk8020_state,pk8020_pic_set_int_line), VCC, NULL )
	MCFG_DEVICE_ADD( "rs232", I8251, 0)
	MCFG_DEVICE_ADD( "lan", I8251, 0)

	MCFG_FD1793_ADD( "wd1793", pk8020_wd17xx_interface )

	/* audio hardware */
	MCFG_SPEAKER_STANDARD_MONO("mono")
	MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
	MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)

	MCFG_CASSETTE_ADD( "cassette", pk8020_cassette_interface )

	MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(pk8020_floppy_interface)
Example #14
0
	ROMX_LOAD("dfs v2.26,1986,acorn.bin", 0x0000, 0x4000, CRC(5ae33e94) SHA1(cf2ebc422a8d24ec6f1a0320520c38a0e704109a), ROM_BIOS(5))
	// Advanced Computer Products
	ROM_SYSTEM_BIOS(5, "acp108", "Advanced 1770 DFS 1.08")
	ROMX_LOAD("advanced 1770 dfs 1.08,acp.rom", 0x0000, 0x4000, CRC(eb0eaa34) SHA1(d16ba3c8ed5e5ab6af62aad13a8e567b1c3639c2), ROM_BIOS(6))
	ROM_SYSTEM_BIOS(6, "acp200", "Advanced 1770 DFS 2.00")
	ROMX_LOAD("advanced 1770 dfs 2.00,acp.rom", 0x0000, 0x4000, CRC(65c0d170) SHA1(6907806e2b5b904a6f2041c11f8ccbd298d63ab9), ROM_BIOS(7))
ROM_END


//-------------------------------------------------
//  device_add_mconfig - add device configuration
//-------------------------------------------------

MACHINE_CONFIG_START(bbc_acorn8271_device::device_add_mconfig)
	MCFG_DEVICE_ADD("i8271", I8271, 0)
	MCFG_I8271_IRQ_CALLBACK(WRITELINE(*this, bbc_acorn8271_device, fdc_intrq_w))
	MCFG_I8271_HDL_CALLBACK(WRITELINE(*this, bbc_acorn8271_device, motor_w))
	MCFG_I8271_OPT_CALLBACK(WRITELINE(*this, bbc_acorn8271_device, side_w))
	MCFG_FLOPPY_DRIVE_ADD("i8271:0", bbc_floppies_525, "525qd", bbc_acorn8271_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
	MCFG_FLOPPY_DRIVE_ADD("i8271:1", bbc_floppies_525, "525qd", bbc_acorn8271_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
MACHINE_CONFIG_END

MACHINE_CONFIG_START(bbc_acorn1770_device::device_add_mconfig)
	MCFG_WD1770_ADD("wd1770", XTAL(16'000'000) / 2)
	MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, bbc_acorn1770_device, fdc_intrq_w))
	MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, bbc_acorn1770_device, fdc_drq_w))
	MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "525qd", bbc_acorn8271_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
	MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "525qd", bbc_acorn8271_device::floppy_formats)
Example #15
0
	MCFG_CPU_IO_MAP(ibmpcjr_io)
	MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)

/*
  On the PC Jr the input for clock 1 seems to be selectable
  based on bit 4(/5?) written to output port A0h. This is not
  supported yet.
 */
	MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
	MCFG_PIT8253_CLK0(XTAL_14_31818MHz/12)
	MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w))
	MCFG_PIT8253_CLK1(XTAL_14_31818MHz/12)
	MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12)
	MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pcjr_state, out2_changed))

	MCFG_PIC8259_ADD( "pic8259", WRITELINE(pcjr_state, pic8259_set_int_line), VCC, NULL )

	MCFG_DEVICE_ADD("ppi8255", I8255, 0)
	MCFG_I8255_IN_PORTA_CB(CONSTANT(0xff))
	MCFG_I8255_OUT_PORTB_CB(WRITE8(pcjr_state, pcjr_ppi_portb_w))
	MCFG_I8255_IN_PORTC_CB(READ8(pcjr_state, pcjr_ppi_portc_r))

	MCFG_DEVICE_ADD( "ins8250", INS8250, XTAL_1_8432MHz )
	MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("serport", rs232_port_device, write_txd))
	MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("serport", rs232_port_device, write_dtr))
	MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("serport", rs232_port_device, write_rts))
	MCFG_INS8250_OUT_INT_CB(DEVWRITELINE("pic8259", pic8259_device, ir3_w))

	MCFG_RS232_PORT_ADD( "serport", pcjr_com, nullptr )
	MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ins8250", ins8250_uart_device, rx_w))
	MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ins8250", ins8250_uart_device, dcd_w))
Example #16
0
/*  MCFG_DEVICE_ADD(AM2910_TAG, AM2910, XTAL(17'360'000))
    MCFG_DEVICE_PROGRAM_MAP(omti10_mem)*/

	/* video hardware */
	cgc7900_video(config);

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
	AY8910(config, AY8910_TAG, XTAL(28'480'000)/16).add_route(ALL_OUTPUTS, "mono", 0.25);

	/* devices */
	generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0));
	keyboard.set_keyboard_callback(FUNC(cgc7900_state::kbd_put));

	MCFG_DEVICE_ADD(MM58167_TAG, MM58167, XTAL(32'768))
	MCFG_MM58167_IRQ_CALLBACK(WRITELINE(*this, cgc7900_state, irq<0x0>))

	com8116_device &k1135a(COM8116(config, K1135A_TAG, XTAL(5'068'800)));
	k1135a.fr_handler().set(m_i8251_0, FUNC(i8251_device::write_txc));
	k1135a.fr_handler().append(m_i8251_0, FUNC(i8251_device::write_rxc));
	k1135a.ft_handler().set(m_i8251_1, FUNC(i8251_device::write_txc));
	k1135a.ft_handler().append(m_i8251_1, FUNC(i8251_device::write_rxc));

	I8251(config, m_i8251_0, 0);
	m_i8251_0->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
	m_i8251_0->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
	m_i8251_0->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
	m_i8251_0->rxrdy_handler().set(FUNC(cgc7900_state::irq<0xf>));
	m_i8251_0->txrdy_handler().set(FUNC(cgc7900_state::irq<0x3>));

	rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "null_modem"));
Example #17
0
	MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_fromance)
	MCFG_PALETTE_ADD("palette", 1024)

	VSYSTEM_GGA(config, m_gga, 14318181 / 2); // clock not verified
	m_gga->write_cb().set(FUNC(fromance_state::fromance_gga_data_w));

	MCFG_VIDEO_START_OVERRIDE(fromance_state,nekkyoku)

	/* sound hardware */
	SPEAKER(config, "mono").front_center();

	AY8910(config, "aysnd", 12000000/6).add_route(ALL_OUTPUTS, "mono", 0.15); // type not verified

	MCFG_DEVICE_ADD("msm", MSM5205, 384000)
	MCFG_MSM5205_VCLK_CB(WRITELINE(*this, fromance_state, fromance_adpcm_int)) /* IRQ handler */
	MCFG_MSM5205_PRESCALER_SELECTOR(S48_4B)      /* 8 KHz */
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_CONFIG_END


MACHINE_CONFIG_START(fromance_state::idolmj)

	/* basic machine hardware */
	MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 2)     /* 6.00 Mhz ? */
	MCFG_DEVICE_PROGRAM_MAP(fromance_main_map)
	MCFG_DEVICE_VBLANK_INT_DRIVER("screen", fromance_state,  irq0_line_hold)

	MCFG_DEVICE_ADD("sub", Z80, XTAL(12'000'000) / 2)     /* 6.00 Mhz ? */
	MCFG_DEVICE_PROGRAM_MAP(fromance_sub_map)
	MCFG_DEVICE_IO_MAP(idolmj_sub_io_map)
Example #18
0
	/* basic machine hardware */
	MCFG_CPU_ADD("maincpu", I8086, 8000000)
	MCFG_CPU_PROGRAM_MAP(multi16_map)
	MCFG_CPU_IO_MAP(multi16_io)


	/* video hardware */
	MCFG_SCREEN_ADD("screen", RASTER)
	MCFG_SCREEN_REFRESH_RATE(60)
	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
	MCFG_SCREEN_SIZE(640, 200)
	MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
	MCFG_SCREEN_UPDATE_DRIVER(multi16_state, screen_update_multi16)
	MCFG_PALETTE_LENGTH(8)

	/* Devices */
	MCFG_MC6845_ADD("crtc", H46505, 16000000/5, mc6845_intf)    /* unknown clock, hand tuned to get ~60 fps */
	MCFG_PIC8259_ADD( "pic8259", WRITELINE(multi16_state, multi16_set_int_line), GND, NULL )
MACHINE_CONFIG_END

/* ROM definition */
ROM_START( multi16 )
	ROM_REGION( 0x4000, "ipl", ROMREGION_ERASEFF )
	ROM_LOAD( "ipl.rom", 0x0000, 0x4000, CRC(5beb5e94) SHA1(d3b9dc9a08995a0f26af9671893417e795370306))
ROM_END

/* Driver */

/*    YEAR  NAME     PARENT  COMPAT   MACHINE    INPUT    INIT    COMPANY     FULLNAME       FLAGS */
COMP( 1986, multi16, 0,      0,       multi16,   multi16, driver_device, 0,   "Mitsubishi", "Multi 16", GAME_NOT_WORKING | GAME_NO_SOUND)
Example #19
0
	/* basic machine hardware */
	MCFG_DEVICE_ADD("maincpu",Z80,MASTER_CLOCK/2) //!!! TC0091LVC !!!
	MCFG_DEVICE_PROGRAM_MAP(dfruit_map)
	MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dfruit_state, dfruit_irq_scanline, "screen", 0, 1)

	//MCFG_MACHINE_START_OVERRIDE(dfruit_state,4enraya)
	//MCFG_MACHINE_RESET_OVERRIDE(dfruit_state,4enraya)

	/* video hardware */
	MCFG_SCREEN_ADD("screen", RASTER)
	MCFG_SCREEN_REFRESH_RATE(60)
	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
	MCFG_SCREEN_SIZE(64*8, 32*8)
	MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1)
	MCFG_SCREEN_UPDATE_DRIVER(dfruit_state, screen_update)
	MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dfruit_state, screen_vblank))
	MCFG_SCREEN_PALETTE("palette")

	MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dfruit )
	MCFG_PALETTE_ADD("palette", 0x100)

	TC0091LVC(config, m_vdp, 0);
	m_vdp->set_gfxdecode_tag("gfxdecode");

	i8255_device &ppi(I8255A(config, "ppi8255_0"));
	ppi.in_pa_callback().set_ioport("IN0");
	ppi.in_pb_callback().set_ioport("IN1");
	ppi.in_pc_callback().set_ioport("IN2");

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
Example #20
0
	MCFG_SCREEN_ADD("screen", RASTER)
	MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
	MCFG_SCREEN_REFRESH_RATE(60)
	MCFG_SCREEN_UPDATE_DRIVER(beathead_state, screen_update)
	MCFG_SCREEN_SIZE(42*8, 262)
	MCFG_SCREEN_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1)
	MCFG_SCREEN_PALETTE("palette")

	MCFG_PALETTE_ADD("palette", 32768)
	MCFG_PALETTE_FORMAT(IRRRRRGGGGGBBBBB)
	MCFG_PALETTE_MEMBITS(16)

	/* sound hardware */
	MCFG_SPEAKER_STANDARD_MONO("mono")

	MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
	MCFG_ATARI_JSA_TEST_PORT("IN2", 6)
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END



/*************************************
 *
 *  ROM definition(s)
 *
 *************************************/

ROM_START( beathead )
	ROM_REGION( 0x10000, "jsa:cpu", 0 )         /* 64k for 6502 code */
	ROM_LOAD( "bhsnd.bin",  0x00000, 0x10000, CRC(dfd33f02) SHA1(479a4838c89691d5a4654a4cd84b6433a9e86109) )
Example #21
0
void BufferingAndReport(HDesign& design)
{
    {
        ConfigContext ctx(design.cfg.OpenContext("Buffering"));

        BufferInfo buf = BufferInfo::Create(design);
        //VanGinneken vg(design);

        WRITELINE("Buffering Parameters:");
        WRITELINE("Rb: %.20f kOhm", buf.Rb());
        WRITELINE("Cb: %.20f pF", buf.Cb());
        WRITELINE("Tb: %.20f ns", buf.Tb());
        WRITELINE("r:  %.20f kOhm/nm", design.RoutingLayers.Physics.RPerDist);
        WRITELINE("c:  %.20f pf/nm", design.RoutingLayers.Physics.LinearC);
        WRITELINE("Lbuf: %.20f", buf.Lbuf());
        WRITELINE("Dbuf: %.20f", buf.Dbuf());

        int buffers = 0;
        int vgbuffers = 0;

        string h1 = "fanout ",     b1 = "%6d ";
        string h2 = "vgbufs ",     b2 = "%6d ";
        string h3 = "kopt ",       b3 = "%4d ";
        string h4 = "koptd ",      b4 = "%5.3f ";
        string h5 = "   knaked ",  b5 = "%9.5f ";
        string h6 = "   T(kopt) ", b6 = "%10.8f ";
        string h7 = "  T(koptd) ", b7 = "%10.8f ";
        string hh = "   vgSlack ", bb = "%10.8f ";
        string h8 = "      T(0) ", b8 = "%10.8f ";
        string h9 = "  maxSlack ", b9 = "%10.8f ";
        string f1 = "      HPWL ", c1 = "%10.2f ";
        string f2 = "        WL ", c2 = "%10.2f ";
        string f3 = "        Rd ", c3 = "%10.8f ";
        string f4 = "        Cs ", c4 = "%10.8f ";
        string f5 = "OO ",         c5 = "%2d ";
        string f6 = "OM ",         c6 = "%2d ";
        string f7 = "OE ",         c7 = "%2d ";
        string ff = "      Name",  cc = "%10s";

        string header = h1 + h2 + h3 + h4 + h5 + h6 + h7 + h8 + hh + h9 + f1 + f2 + f3 + f4 + f5 + f6 + f7 + ff;
        string bodyer = b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + bb + b9 + c1 + c2 + c4 + c4 + c5 + c6 + c7 + cc;
        WRITELINE(header.c_str());
        for(HNets::ActiveNetsEnumeratorW net = design.Nets.GetActiveNetsEnumeratorW(); net.MoveNext(); )
        {
            NetInfo n = NetInfo::Create(design, net, buf);
            buffers += n.KoptInt();

            //vg.__DriverResistance = n.Rd();
            int vgbufs = 0;//vg.InsertBuffers(net);
            vgbuffers += vgbufs;

            double bufferedDelay = TimingHelper(design).GetBufferedNetMaxDelay(net, n, buf);

            WRITELINE(bodyer.c_str()
                , n.Fanout() //h1
                , vgbufs //h2
                , n.KoptInt() //h3
                , n.Kopt() //h4
                , n.KoptNaked() //h5
                , n.KoptDelay() //h6
                , n.OptimalDelay() //h7
                , n.OttenDelay() //h8
                , bufferedDelay //hh
                , n.MaxRealDelay() //h9
                , n.HPWL() //f1
                , n.WL() //f2
                , n.Rd() //f3
                , n.Cs() //f4
                , n.IsOttenApplicable() //f5
                , n.IsModifiedOttenApplicable() //f6
                , n.IsOttenApplicableExact() //f7
                , n.Name().c_str() //ff
                );
            //if ((n.IsOttenApplicable() || n.IsModifiedOttenApplicable()))
            //{

            //WRITELINE("%3d %3d %.5f %.5f %.5f %.5f %.5f %.5f %d %.5f %d",
            //n.Fanout(), n.KoptInt(), n.Kopt(),
            //n.KoptDelay(), n.OptimalDelay(), n.OttenDelay(), n.MaxRealDelay(), n.L(), n.IsOttenApplicable(), n.X2opt(), nets);
            //}
        }

        WRITELINE("Inserted             %d buffers", buffers);
        WRITELINE("VanGinneken Inserted %d buffers", vgbuffers);
    }
}
Example #22
0
	DEVCB_NULL
};


//-------------------------------------------------
//  MACHINE_DRIVER( c1570 )
//-------------------------------------------------

static MACHINE_CONFIG_FRAGMENT( c1570 )
	MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
	MCFG_CPU_PROGRAM_MAP(c1571_mem)
	MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)

	MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
	MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
	MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, WRITELINE(c1571_device, cia_irq_w))
	MCFG_MOS6526_SERIAL_CALLBACKS(WRITELINE(c1571_device, cia_cnt_w), WRITELINE(c1571_device, cia_sp_w))
	MCFG_MOS6526_PORT_B_CALLBACKS(READ8(c1571_device, cia_pb_r), WRITE8(c1571_device, cia_pb_w), WRITELINE(c1571_device, cia_pc_w))
	MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)

	MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1570_floppy_interface)
	//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1570_floppies, "525ssdd", 0, c1571_device::floppy_formats)
	MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
MACHINE_CONFIG_END


//-------------------------------------------------
//  machine_config_additions - device-specific
//  machine configurations
//-------------------------------------------------
Example #23
0
	MCFG_I8237_OUT_DACK_3_CB(WRITELINE(wd7600_device, dma1_dack3_w))
	MCFG_DEVICE_ADD("dma2", AM9517A, 0)
	MCFG_I8237_OUT_HREQ_CB(WRITELINE(wd7600_device, dma2_hreq_w))
	MCFG_I8237_IN_MEMR_CB(READ8(wd7600_device, dma_read_word))
	MCFG_I8237_OUT_MEMW_CB(WRITE8(wd7600_device, dma_write_word))
	MCFG_I8237_IN_IOR_1_CB(READ8(wd7600_device, dma2_ior1_r))
	MCFG_I8237_IN_IOR_2_CB(READ8(wd7600_device, dma2_ior2_r))
	MCFG_I8237_IN_IOR_3_CB(READ8(wd7600_device, dma2_ior3_r))
	MCFG_I8237_OUT_IOW_1_CB(WRITE8(wd7600_device, dma2_iow1_w))
	MCFG_I8237_OUT_IOW_2_CB(WRITE8(wd7600_device, dma2_iow2_w))
	MCFG_I8237_OUT_IOW_3_CB(WRITE8(wd7600_device, dma2_iow3_w))
	MCFG_I8237_OUT_DACK_0_CB(WRITELINE(wd7600_device, dma2_dack0_w))
	MCFG_I8237_OUT_DACK_1_CB(WRITELINE(wd7600_device, dma2_dack1_w))
	MCFG_I8237_OUT_DACK_2_CB(WRITELINE(wd7600_device, dma2_dack2_w))
	MCFG_I8237_OUT_DACK_3_CB(WRITELINE(wd7600_device, dma2_dack3_w))
	MCFG_PIC8259_ADD("intc1", WRITELINE(wd7600_device, pic1_int_w), VCC, READ8(wd7600_device, pic1_slave_ack_r))
	MCFG_PIC8259_ADD("intc2", DEVWRITELINE("intc1", pic8259_device, ir2_w), GND, NULL)

	MCFG_DEVICE_ADD("ctc", PIT8254, 0)
	MCFG_PIT8253_CLK0(XTAL_14_31818MHz / 12)
	MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("intc1", pic8259_device, ir0_w))
	MCFG_PIT8253_CLK1(XTAL_14_31818MHz / 12)
	MCFG_PIT8253_OUT1_HANDLER(WRITELINE(wd7600_device, ctc_out1_w))
	MCFG_PIT8253_CLK2(XTAL_14_31818MHz / 12)
	MCFG_PIT8253_OUT2_HANDLER(WRITELINE(wd7600_device, ctc_out2_w))

	MCFG_DS12885_ADD("rtc")
	MCFG_MC146818_IRQ_HANDLER(WRITELINE(wd7600_device, rtc_irq_w))
	MCFG_MC146818_CENTURY_INDEX(0x32)
MACHINE_CONFIG_END
Example #24
0

//**************************************************************************
//  MACHINE FRAGMENTS
//**************************************************************************

// Fully populated JSA-I, not used by anyone
MACHINE_CONFIG_FRAGMENT( jsa_i_config )

	// basic machine hardware
	MCFG_CPU_ADD("cpu", M6502, JSA_MASTER_CLOCK/2)
	MCFG_CPU_PROGRAM_MAP(atarijsa1_map)
	MCFG_DEVICE_PERIODIC_INT_DEVICE("soundcomm", atari_sound_comm_device, sound_irq_gen, (double)JSA_MASTER_CLOCK/4/16/16/14)

	// sound hardware
	MCFG_ATARI_SOUND_COMM_ADD("soundcomm", "cpu", WRITELINE(atari_jsa_base_device, main_int_write_line))

	MCFG_YM2151_ADD("ym2151", JSA_MASTER_CLOCK)
	MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("soundcomm", atari_sound_comm_device, ym2151_irq_gen))
	MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(atari_jsa_base_device, ym2151_port_w))
	MCFG_MIXER_ROUTE(0, DEVICE_SELF_OWNER, 0.60, 0)
	MCFG_MIXER_ROUTE(1, DEVICE_SELF_OWNER, 0.60, 1)

	MCFG_POKEY_ADD("pokey", JSA_MASTER_CLOCK/2)
	MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.40, 0)
	MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.40, 1)

	MCFG_SOUND_ADD("tms", TMS5220C, JSA_MASTER_CLOCK*2/11) // potentially JSA_MASTER_CLOCK/9 as well
	MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0, 0)
	MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0, 1)
MACHINE_CONFIG_END
Example #25
0
	MCFG_DEVICE_IO_MAP(tim100_io)

	/* video hardware */
	MCFG_SCREEN_ADD("screen", RASTER)
	MCFG_SCREEN_UPDATE_DEVICE("crtc", i8276_device, screen_update)
	MCFG_SCREEN_REFRESH_RATE(50)
	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
	MCFG_SCREEN_SIZE(600, 352)
	MCFG_SCREEN_VISIBLE_AREA(0, 40*12-1, 0, 16*16-1)

	MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tim100 )

	MCFG_DEVICE_ADD("crtc", I8276, XTAL(4'915'200))
	MCFG_I8275_CHARACTER_WIDTH(12)
	MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(tim100_state, crtc_display_pixels)
	MCFG_I8275_DRQ_CALLBACK(WRITELINE(*this, tim100_state, drq_w))
	MCFG_I8275_IRQ_CALLBACK(WRITELINE(*this, tim100_state, irq_w))
	MCFG_VIDEO_SET_SCREEN("screen")

	MCFG_PALETTE_ADD("palette", 3)

	i8251_device &uart_u17(I8251(config, "uart_u17", 0));
	uart_u17.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
	uart_u17.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
	uart_u17.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));

	rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "keyboard"));
	rs232.rxd_handler().set("uart_u17", FUNC(i8251_device::write_rxd));
	rs232.dsr_handler().set("uart_u17", FUNC(i8251_device::write_dsr));
	rs232.cts_handler().set("uart_u17", FUNC(i8251_device::write_cts));
	rs232.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(tim100));
Example #26
0
	MC146818(config, m_rtc, XTAL(32'768));
	m_rtc->irq().set("ioga", FUNC(dec_ioga_device::rtc_irq_w));
	m_rtc->set_binary(true);

	SCC85C30(config, m_scc0, XTAL(14'745'600)/2);
	m_scc0->out_int_callback().set("ioga", FUNC(dec_ioga_device::scc0_irq_w));
	m_scc0->out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd));
	m_scc0->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));

	SCC85C30(config, m_scc1, XTAL(14'745'600)/2);
	m_scc1->out_int_callback().set("ioga", FUNC(dec_ioga_device::scc1_irq_w));
	m_scc1->out_txdb_callback().set("lk201", FUNC(lk201_device::rx_w));

	MCFG_DEVICE_ADD("lk201", LK201, 0)
	MCFG_LK201_TX_HANDLER(WRITELINE("scc1", z80scc_device, rxb_w))

	rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr));
	rs232a.rxd_handler().set(m_scc0, FUNC(z80scc_device::rxa_w));
	rs232a.dcd_handler().set(m_scc0, FUNC(z80scc_device::dcda_w));
	rs232a.cts_handler().set(m_scc0, FUNC(z80scc_device::ctsa_w));

	rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
	rs232b.rxd_handler().set(m_scc0, FUNC(z80scc_device::rxb_w));
	rs232b.dcd_handler().set(m_scc0, FUNC(z80scc_device::dcdb_w));
	rs232b.cts_handler().set(m_scc0, FUNC(z80scc_device::ctsb_w));

	MCFG_NSCSI_BUS_ADD("scsibus")
	MCFG_NSCSI_ADD("scsibus:0", dec_scsi_devices, "harddisk", false)
	MCFG_NSCSI_ADD("scsibus:1", dec_scsi_devices, "cdrom", false)
	MCFG_NSCSI_ADD("scsibus:2", dec_scsi_devices, nullptr, false)
Example #27
0
	MCFG_CPU_PROGRAM_MAP(extra_map)

	MCFG_MACHINE_START_OVERRIDE(thunderj_state,thunderj)
	MCFG_MACHINE_RESET_OVERRIDE(thunderj_state,thunderj)

	MCFG_ATARI_EEPROM_2816_ADD("eeprom")

	/* perfect synchronization due to shared RAM */
	MCFG_QUANTUM_PERFECT_CPU("maincpu")

	/* video hardware */
	MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
	MCFG_GFXDECODE(thunderj)
	MCFG_PALETTE_LENGTH(2048)

	MCFG_ATARI_VAD_ADD("vad", "screen", WRITELINE(atarigen_state, scanline_int_write_line))
	MCFG_ATARI_VAD_PLAYFIELD(thunderj_state, get_playfield_tile_info)
	MCFG_ATARI_VAD_PLAYFIELD2(thunderj_state, get_playfield2_tile_info)
	MCFG_ATARI_VAD_ALPHA(thunderj_state, get_alpha_tile_info)
	MCFG_ATARI_VAD_MOB(thunderj_state::s_mob_config)

	MCFG_SCREEN_ADD("screen", RASTER)
	/* note: these parameters are from published specs, not derived */
	/* the board uses a VAD chip to generate video signals */
	MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
	MCFG_SCREEN_UPDATE_DRIVER(thunderj_state, screen_update_thunderj)

	MCFG_VIDEO_START_OVERRIDE(thunderj_state,thunderj)

	/* sound hardware */
	MCFG_SPEAKER_STANDARD_MONO("mono")
Example #28
0
	MCFG_PALETTE_ADD_MONOCHROME("palette")

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
	MCFG_DEVICE_ADD("beeper", BEEP, 950) /* piezo-device needs to be measured */
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)

	/* devices */
	MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3)

	kaypro_10_keyboard_device &kbd(KAYPRO_10_KEYBOARD(config, "kbd"));
	kbd.rxd_cb().set("sio", FUNC(z80sio_device::rxb_w));
	kbd.rxd_cb().append("sio", FUNC(z80sio_device::syncb_w));

	MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
	MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, kaypro_state, write_centronics_busy))

	MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")

	rs232_port_device &serial(RS232_PORT(config, "serial", default_rs232_devices, nullptr));
	serial.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w));
	serial.rxd_handler().append("sio", FUNC(z80sio_device::synca_w)); // TODO: confirm this is connected
	serial.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w));
	serial.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w));

	com8116_device &brg(COM8116(config, "brg", XTAL(5'068'800))); // WD1943, SMC8116
	brg.ft_handler().set("sio", FUNC(z80sio_device::rxca_w));
	brg.ft_handler().append("sio", FUNC(z80sio_device::txca_w));
	brg.fr_handler().set("sio", FUNC(z80sio_device::rxtxcb_w));

	Z80PIO(config, m_pio_g, 20_MHz_XTAL / 8);
Example #29
0
static MACHINE_CONFIG_START( relief, relief_state )

	/* basic machine hardware */
	MCFG_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
	MCFG_CPU_PROGRAM_MAP(main_map)

	MCFG_MACHINE_RESET_OVERRIDE(relief_state,relief)

	MCFG_ATARI_EEPROM_2816_ADD("eeprom")

	/* video hardware */
	MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
	MCFG_GFXDECODE(relief)
	MCFG_PALETTE_LENGTH(2048)

	MCFG_ATARI_VAD_ADD("vad", "screen", WRITELINE(atarigen_state, scanline_int_write_line))
	MCFG_ATARI_VAD_PLAYFIELD(relief_state, get_playfield_tile_info)
	MCFG_ATARI_VAD_PLAYFIELD2(relief_state, get_playfield2_tile_info)
	MCFG_ATARI_VAD_MOB(relief_state::s_mob_config)

	MCFG_SCREEN_ADD("screen", RASTER)
	/* note: these parameters are from published specs, not derived */
	/* the board uses a VAD chip to generate video signals */
	MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
	MCFG_SCREEN_UPDATE_DRIVER(relief_state, screen_update_relief)

	MCFG_VIDEO_START_OVERRIDE(relief_state,relief)

	/* sound hardware */
	MCFG_SPEAKER_STANDARD_MONO("mono")
Example #30
0
	ROM_REGION(0x4000, "dfs_rom", 0)
	ROM_DEFAULT_BIOS("ddos346")
	ROM_SYSTEM_BIOS(0, "ddos345", "Opus DDOS 3.45")
	ROMX_LOAD("opus-ddos345.rom", 0x0000, 0x4000, CRC(c0163b95) SHA1(1c5a68e08abbb7ffe663151c59088f750d2287a9), ROM_BIOS(1))
	ROM_SYSTEM_BIOS(1, "ddos346", "Opus DDOS 3.46")
	ROMX_LOAD("opus-ddos346.rom", 0x0000, 0x4000, CRC(bf9c35cf) SHA1(a1ad3e9acbd15400e7da1e50bc6673835cde1fe7), ROM_BIOS(2))
ROM_END


//-------------------------------------------------
//  device_add_mconfig - add device configuration
//-------------------------------------------------

MACHINE_CONFIG_START(bbc_opus8272_device::device_add_mconfig)
	MCFG_I8272A_ADD("i8272", true)
	MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, bbc_opus8272_device, fdc_intrq_w))
	MCFG_FLOPPY_DRIVE_ADD("i8272:0", bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
	MCFG_FLOPPY_DRIVE_ADD("i8272:1", bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
MACHINE_CONFIG_END

MACHINE_CONFIG_START(bbc_opus2791_device::device_add_mconfig)
	MCFG_WD2791_ADD("fdc", XTAL(16'000'000) / 16)
	MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, bbc_opusfdc_device, fdc_drq_w))
	MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(*this, bbc_opusfdc_device, motor_w))
	MCFG_FLOPPY_DRIVE_ADD("fdc:0", bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
	MCFG_FLOPPY_DRIVE_ADD("fdc:1", bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats)
	MCFG_FLOPPY_DRIVE_SOUND(true)
MACHINE_CONFIG_END