Exemple #1
0
// This function expects initialized mpz integers in all array fields between `from` and `to`.
//
// Algorithm 15.3 [PDF page 20](http://cr.yp.to/lineartime/dcba-20040404.pdf)
//
// See [split test](test-split.html) for basic usage.
void split(mpz_array *ret, const mpz_t a, mpz_t *p, size_t from, size_t to) {
	mpz_t b, x;
	size_t n = to - from;

	// **Sep 2**
	//
	//  Compute b ← ppi(a,prodP)
	mpz_init(x);
	mpz_init(b);
	prod(x, p, from, to);
	ppi(b, a, x);
	mpz_clear(x);

	// **Sep 2**
	//
	//  If #P = 1: find p ∈ P, print (p,b), and stop
	if (n == 0) {
		array_add(ret, b);
		mpz_clear(b);
		return;
	}

	// **Sep 3**
	//
	//  Select Q ⊆ P with #Q = b#P/2c.
	split(ret, b, p, from, to - n/2 - 1);
	split(ret, b, p, to - n/2, to);

	// Free the memory.
	mpz_clear(b);
}
Exemple #2
0
static void
output(int on1, int on2)	/* print items from olist */
{
    int i;
    const char *temp;

    if (no <= 0) {	/* default case */
        printf("%s", on1? ppi(F1, j1): on2? ppi(F2, j2) : null);
        for (i = 0; i < on1; i++)
            if (i != j1) {
                if (mb_cur_max > 1)
                    printf("%lc%s",(wint_t)sep1,ppi(F1, i));
                else
                    printf("%c%s", (int)sep1, ppi(F1, i));
            }
        for (i = 0; i < on2; i++)
            if (i != j2) {
                if (mb_cur_max > 1)
                    printf("%lc%s",(wint_t)sep1,ppi(F2, i));
                else
                    printf("%c%s", (int)sep1, ppi(F2, i));
            }
        printf("\n");
    } else {
        for (i = 0; i < no; i++) {
            temp = ppi(olistf[i], olist[i]);
            if(olistf[i]==F1 && on1<=olist[i] ||
                    olistf[i]==F2 && on2<=olist[i])
                temp = null;
            else if (olistf[i]==JF) {
                if (on1)
                    temp = ppi(F1, j1);
                else if (on2)
                    temp = ppi(F2, j2);
                else
                    temp = null;
            }
            if (temp == 0 || *temp == 0)
                temp = null;
            printf("%s", temp ? temp : null);
            if (i == no - 1)
                printf("\n");
            else if (mb_cur_max > 1)
                printf("%lc", (wint_t)sep1);
            else
                printf("%c", (int)sep1);
        }
    }
}
// Builds a lookup for finding PP matrix element indices given
// single particle configurations
boost::tuple< PPIndices, Indexsizes >
build_ppindices( const SingleParticleModelspace &spms ) {
    PPIndices ppi(3); ppi.resize(3);
    Indexsizes sizes(3); sizes.resize(3);

    for ( int tz = -1; tz <= 1; ++tz ) {
        ppi  [ tz + 1 ].resize(2);
        sizes[ tz + 1 ].resize(2);
        for ( int parity = -1; parity <= 1; parity += 2 ) {
            int maxJ = get_max_pp_J( spms, tz, parity );
            ppi  [ tz + 1 ][ (parity + 1)/2 ].resize( maxJ + 1 );
            sizes[ tz + 1 ][ (parity + 1)/2 ].resize( maxJ + 1 );
            for ( int J = 0;
                    J < static_cast<int>(ppi[tz + 1][(parity + 1)/2].size());
                    ++J ) {
                boost::tie( ppi  [ tz + 1 ][ (parity + 1)/2 ][ J ],
                            sizes[ tz + 1 ][ (parity + 1)/2 ][ J ] )
                        = make_pp_indices( tz, parity, J, spms ); } } }
    return boost::make_tuple( ppi, sizes );
}
Exemple #4
0
void pulsar_state::pulsar(machine_config &config)
{
	/* basic machine hardware */
	Z80(config, m_maincpu, 4_MHz_XTAL);
	m_maincpu->set_addrmap(AS_PROGRAM, &pulsar_state::mem_map);
	m_maincpu->set_addrmap(AS_IO, &pulsar_state::io_map);
	m_maincpu->set_daisy_config(daisy_chain_intf);


	/* Devices */
	i8255_device &ppi(I8255(config, "ppi"));
	ppi.out_pa_callback().set(FUNC(pulsar_state::ppi_pa_w));
	ppi.out_pb_callback().set(FUNC(pulsar_state::ppi_pb_w));
	ppi.in_pc_callback().set(FUNC(pulsar_state::ppi_pc_r));
	ppi.out_pc_callback().set(FUNC(pulsar_state::ppi_pc_w));

	MSM5832(config, "rtc", 32.768_kHz_XTAL);

	z80dart_device& dart(Z80DART(config, "dart", 4_MHz_XTAL));
	dart.out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd));
	dart.out_dtra_callback().set("rs232", FUNC(rs232_port_device::write_dtr));
	dart.out_rtsa_callback().set("rs232", FUNC(rs232_port_device::write_rts));
	dart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);

	rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
	rs232.rxd_handler().set("dart", FUNC(z80dart_device::rxa_w));
	rs232.cts_handler().set("dart", FUNC(z80dart_device::ctsa_w));
	rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));

	com8116_device &brg(COM8116(config, "brg", 5.0688_MHz_XTAL));
	// Schematic has the labels for FT and FR the wrong way around, but the pin numbers are correct.
	brg.fr_handler().set("dart", FUNC(z80dart_device::txca_w));
	brg.fr_handler().append("dart", FUNC(z80dart_device::rxca_w));
	brg.ft_handler().set("dart", FUNC(z80dart_device::txcb_w));
	brg.ft_handler().append("dart", FUNC(z80dart_device::rxcb_w));

	FD1797(config, m_fdc, 4_MHz_XTAL / 2);
	FLOPPY_CONNECTOR(config, "fdc:0", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats).enable_sound(true);
	FLOPPY_CONNECTOR(config, "fdc:1", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats).enable_sound(true);
}
Exemple #5
0
GFXDECODE_END


/*************************
*    Machine Drivers     *
*************************/

void gatron_state::gat(machine_config &config)
{
	/* basic machine hardware */
	Z80(config, m_maincpu, CPU_CLOCK);
	m_maincpu->set_addrmap(AS_PROGRAM, &gatron_state::gat_map);
	m_maincpu->set_addrmap(AS_IO, &gatron_state::gat_portmap);

	NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);

	i8255_device &ppi(I8255A(config, "ppi8255"));
	ppi.in_pa_callback().set_ioport("IN0");
	ppi.in_pb_callback().set_ioport("IN1");
	ppi.out_pc_callback().set(FUNC(gatron_state::output_port_1_w));

	/* video hardware */
	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
	screen.set_refresh_hz(60);
	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
	screen.set_size(48*8, 16*16);
	screen.set_visarea(0*8, 48*8-1, 0*8, 16*16-1);
	screen.set_screen_update(FUNC(gatron_state::screen_update));
	screen.set_palette("palette");
	screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);

	GFXDECODE(config, m_gfxdecode, "palette", gfx_gat);
	PALETTE(config, "palette").set_entries(8);

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
	SN76489(config, "snsnd", MASTER_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 2.00);   // Present in Bingo PCB. Clock need to be verified.
}
Exemple #6
0
// This algorithm factors each element a ∈ S over P if P is a base for S; otherwise it proclaims failure.
//
// Algorithm 21.2  [PDF page 27](http://cr.yp.to/lineartime/dcba-20040404.pdf)
//
// See [findfactors test](test-findfactors.html) for basic usage.
void find_factors(mpz_array *out, mpz_t *s, size_t from, size_t to, mpz_array *p) {
	mpz_t x, y, z;
	mpz_array d, q;
	size_t i, n = to - from;

	mpz_init(x);
	array_prod(p, x);

	mpz_init(y);
	prod(y, s, from, to);

	mpz_init(z);
	ppi(z, x, y);

	array_init(&d, p->size);
	array_split(&d, z, p);

	array_init(&q, p->size);
	for (i = 0; i < p->used; i++) {
		if (mpz_cmp(d.array[i], p->array[i]) == 0)
			array_add(&q, p->array[i]);
	}

	if (n == 0) {
		array_find_factor(out, y, &q);
	} else {
		find_factors(out, s, from, to - n/2 - 1, &q);
		find_factors(out, s, to - n/2, to, &q);
	}

	mpz_clear(x);
	mpz_clear(y);
	mpz_clear(z);
	array_clear(&d);
	array_clear(&q);
}
Exemple #7
0
void iq151_state::iq151(machine_config &config)
{
	/* basic machine hardware */
	I8080(config, m_maincpu, XTAL(2'000'000));
	m_maincpu->set_addrmap(AS_PROGRAM, &iq151_state::iq151_mem);
	m_maincpu->set_addrmap(AS_IO, &iq151_state::iq151_io);
	m_maincpu->set_vblank_int("screen", FUNC(iq151_state::iq151_vblank_interrupt));
	m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb));

	/* video hardware */
	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green()));
	screen.set_refresh_hz(50);
	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
	screen.set_screen_update(FUNC(iq151_state::screen_update));
	screen.set_size(64*8, 32*8);
	screen.set_visarea(0, 32*8-1, 0, 32*8-1);
	screen.set_palette("palette");

	PALETTE(config, "palette", palette_device::MONOCHROME);

	/* sound hardware */
	SPEAKER(config, "mono").front_center();
	SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);

	PIC8259(config, m_pic, 0);
	m_pic->out_int_callback().set_inputline(m_maincpu, 0);

	i8255_device &ppi(I8255(config, "ppi8255"));
	ppi.in_pa_callback().set(FUNC(iq151_state::keyboard_row_r));
	ppi.in_pb_callback().set(FUNC(iq151_state::keyboard_column_r));
	ppi.in_pc_callback().set(FUNC(iq151_state::ppi_portc_r));
	ppi.out_pc_callback().set(FUNC(iq151_state::ppi_portc_w));

	CASSETTE(config, m_cassette);
	m_cassette->set_default_state(CASSETTE_STOPPED);
	m_cassette->set_interface("iq151_cass");

	TIMER(config, "cassette_timer").configure_periodic(FUNC(iq151_state::cassette_timer), attotime::from_hz(2000));

	/* cartridge */
	IQ151CART_SLOT(config, m_carts[0], iq151_cart, nullptr);
	m_carts[0]->set_screen_tag("screen");
	m_carts[0]->out_irq0_callback().set(m_pic, FUNC(pic8259_device::ir0_w));
	m_carts[0]->out_irq1_callback().set(m_pic, FUNC(pic8259_device::ir1_w));
	m_carts[0]->out_irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w));
	m_carts[0]->out_irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w));
	m_carts[0]->out_irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w));
	IQ151CART_SLOT(config, m_carts[1], iq151_cart, nullptr);
	m_carts[1]->set_screen_tag("screen");
	m_carts[1]->out_irq0_callback().set(m_pic, FUNC(pic8259_device::ir0_w));
	m_carts[1]->out_irq1_callback().set(m_pic, FUNC(pic8259_device::ir1_w));
	m_carts[1]->out_irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w));
	m_carts[1]->out_irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w));
	m_carts[1]->out_irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w));
	IQ151CART_SLOT(config, m_carts[2], iq151_cart, nullptr);
	m_carts[2]->set_screen_tag("screen");
	m_carts[2]->out_irq0_callback().set(m_pic, FUNC(pic8259_device::ir0_w));
	m_carts[2]->out_irq1_callback().set(m_pic, FUNC(pic8259_device::ir1_w));
	m_carts[2]->out_irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w));
	m_carts[2]->out_irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w));
	m_carts[2]->out_irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w));
	IQ151CART_SLOT(config, m_carts[3], iq151_cart, nullptr);
	m_carts[3]->set_screen_tag("screen");
	m_carts[3]->out_irq0_callback().set(m_pic, FUNC(pic8259_device::ir0_w));
	m_carts[3]->out_irq1_callback().set(m_pic, FUNC(pic8259_device::ir1_w));
	m_carts[3]->out_irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w));
	m_carts[3]->out_irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w));
	m_carts[3]->out_irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w));
	IQ151CART_SLOT(config, m_carts[4], iq151_cart, "video32");
	m_carts[4]->set_screen_tag("screen");
	m_carts[4]->out_irq0_callback().set(m_pic, FUNC(pic8259_device::ir0_w));
	m_carts[4]->out_irq1_callback().set(m_pic, FUNC(pic8259_device::ir1_w));
	m_carts[4]->out_irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w));
	m_carts[4]->out_irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w));
	m_carts[4]->out_irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w));

	/* Software lists */
	SOFTWARE_LIST(config, "cart_list").set_original("iq151_cart");
	SOFTWARE_LIST(config, "flop_list").set_original("iq151_flop");
}
Exemple #8
0
int main( int argc, const char** argv)
{
	try
	{
		g_errorBuffer = strus::createErrorBuffer_standard( 0, 1);
		if (!g_errorBuffer)
		{
			std::cerr << "construction of error buffer failed" << std::endl;
			return -1;
		}
		else if (argc > 3)
		{
			printUsage( argc, argv);
			std::cerr << "too many arguments" << std::endl;
			return 1;
		}
		else if (argc < 3)
		{
			printUsage( argc, argv);
			std::cerr << "too few arguments" << std::endl;
			return 1;
		}
		// Create objects:
		std::auto_ptr<strus::TokenPatternMatchInterface> pti( strus::createTokenPatternMatch_standard( g_errorBuffer));
		if (!pti.get()) throw std::runtime_error("failed to create pattern matcher");
		std::auto_ptr<strus::CharRegexMatchInterface> cri( strus::createCharRegexMatch_standard( g_errorBuffer));
		if (!cri.get()) throw std::runtime_error("failed to create char regex matcher");
		std::auto_ptr<strus::PatternMatchProgramInterface> ppi( strus::createPatternMatchProgram_standard( pti.get(), cri.get(), g_errorBuffer));
		if (!ppi.get()) throw std::runtime_error("failed to create pattern program loader");
		std::auto_ptr<strus::PatternMatchProgramInstanceInterface> pii( ppi->createInstance());
		if (!pii.get()) throw std::runtime_error("failed to create pattern program loader instance");

		// Load program:
		std::string programfile( argv[ 1]);
		std::string programsrc;
		unsigned int ec;
		ec = strus::readFile( programfile, programsrc);
		if (ec)
		{
			char errmsg[ 256];
			::snprintf( errmsg, sizeof(errmsg), "error (%u) reading program source '%s': %s", ec, programfile.c_str(), ::strerror(ec));
			throw std::runtime_error( errmsg);
		}
		if (!pii->load( programsrc))
		{
			throw std::runtime_error( "error loading pattern match program source");
		}
		if (!pii->compile())
		{
			throw std::runtime_error( "error compiling pattern match program");
		}

		// Load input:
		std::string inputfile( argv[ 2]);
		std::string inputsrc;
		ec = strus::readFile( inputfile, inputsrc);
		if (ec)
		{
			char errmsg[ 256];
			::snprintf( errmsg, sizeof(errmsg), "error (%u) reading input file '%s': %s", ec, inputfile.c_str(), ::strerror(ec));
			throw std::runtime_error( errmsg);
		}

		// Load expected output:
		char const* argv2ext = std::strchr( argv[ 2], '.');
		if (argv2ext)
		{
			char const* aa = std::strchr( argv2ext+1, '.');
			while (aa)
			{
				argv2ext = aa;
				aa = std::strchr( argv2ext+1, '.');
			}
		}
		else
		{
			argv2ext = std::strchr( argv[ 2], '\0');
		}
		std::string expectedfile( argv[ 2], argv2ext - argv[ 2]);
		expectedfile.append( ".res");
		std::string expectedsrc;
		ec = strus::readFile( expectedfile, expectedsrc);
		if (ec)
		{
			char errmsg[ 256];
			::snprintf( errmsg, sizeof(errmsg), "error (%u) reading expected file '%s': %s", ec, expectedfile.c_str(), ::strerror(ec));
			throw std::runtime_error( errmsg);
		}

		// Scan source with char regex automaton for tokens:
		const strus::CharRegexMatchInstanceInterface* crinst = pii->getCharRegexMatchInstance();
		std::auto_ptr<strus::CharRegexMatchContextInterface> crctx( crinst->createContext());

		std::vector<strus::stream::PatternMatchToken> crmatches = crctx->match( inputsrc.c_str(), inputsrc.size());
		if (crmatches.size() == 0 && g_errorBuffer->hasError())
		{
			throw std::runtime_error( "failed to scan for tokens with char regex match automaton");
		}
		std::ostringstream resultstrbuf;

		// Scan tokens with token pattern match automaton and print results:
		const strus::TokenPatternMatchInstanceInterface* ptinst = pii->getTokenPatternMatchInstance();
		std::auto_ptr<strus::TokenPatternMatchContextInterface> ptctx( ptinst->createContext());
		std::vector<strus::stream::PatternMatchToken>::const_iterator
			ci = crmatches.begin(), ce = crmatches.end();
		for (; ci != ce; ++ci)
		{
			std::string tokstr( std::string( inputsrc.c_str() + ci->origpos(), ci->origsize()));
			resultstrbuf << "token " << pii->tokenName(ci->id()) << "(" << ci->id() << ") at " << ci->ordpos() 
					<< "[" << ci->origpos() << ":" << ci->origsize() << "] '"
					<< tokstr << "'" << std::endl;
			ptctx->putInput( *ci);
		}
		std::vector<strus::stream::TokenPatternMatchResult> results = ptctx->fetchResults();
		if (results.size() == 0 && g_errorBuffer->hasError())
		{
			throw std::runtime_error( "failed to scan for patterns with token pattern match automaton");
		}

		// Print results to buffer:
		strus::utils::printResults( resultstrbuf, results, inputsrc.c_str());
		strus::stream::TokenPatternMatchStatistics stats = ptctx->getStatistics();
		strus::utils::printStatistics( resultstrbuf, stats);

		// Print result to stdout and verify result by comparing it with the expected output:
		std::string resultstr = resultstrbuf.str();
		std::cout << resultstr << std::endl;
		if (!diffContent( expectedsrc, resultstr))
		{
			throw std::runtime_error( "output and expected result differ");
		}

		if (g_errorBuffer->hasError())
		{
			throw std::runtime_error( "uncaught error");
		}
		std::cerr << "OK" << std::endl;
		delete g_errorBuffer;
		return 0;
	}
	catch (const std::runtime_error& err)
	{
		if (g_errorBuffer->hasError())
		{
			std::cerr << "error processing pattern matching: "
					<< g_errorBuffer->fetchError() << " (" << err.what()
					<< ")" << std::endl;
		}
		else
		{
			std::cerr << "error processing pattern matching: "
					<< err.what() << std::endl;
		}
	}
	catch (const std::bad_alloc&)
	{
		std::cerr << "out of memory processing pattern matching" << std::endl;
	}
	delete g_errorBuffer;
	return -1;
}
Exemple #9
0
void mrgame_state::mrgame(machine_config &config)
{
	/* basic machine hardware */
	M68000(config, m_maincpu, 6_MHz_XTAL);
	m_maincpu->set_addrmap(AS_PROGRAM, &mrgame_state::main_map);
	m_maincpu->set_periodic_int(FUNC(mrgame_state::irq1_line_hold), attotime::from_hz(183));

	Z80(config, m_videocpu, 18.432_MHz_XTAL / 6);
	m_videocpu->set_addrmap(AS_PROGRAM, &mrgame_state::video_map);

	Z80(config, m_audiocpu1, 4_MHz_XTAL);
	m_audiocpu1->set_addrmap(AS_PROGRAM, &mrgame_state::audio1_map);
	m_audiocpu1->set_addrmap(AS_IO, &mrgame_state::audio1_io);

	Z80(config, m_audiocpu2, 4_MHz_XTAL);
	m_audiocpu2->set_addrmap(AS_PROGRAM, &mrgame_state::audio2_map);
	m_audiocpu2->set_addrmap(AS_IO, &mrgame_state::audio2_io);

	NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 5564 (x2) + battery

	LS259(config, m_selectlatch); // 5B
	m_selectlatch->q_out_cb<0>().set(FUNC(mrgame_state::video_a11_w));
	m_selectlatch->q_out_cb<1>().set(FUNC(mrgame_state::nmi_intst_w));
	m_selectlatch->q_out_cb<3>().set(FUNC(mrgame_state::video_a12_w));
	m_selectlatch->q_out_cb<4>().set(FUNC(mrgame_state::video_a13_w));
	m_selectlatch->q_out_cb<6>().set(FUNC(mrgame_state::flip_w));

	//watchdog_timer_device &watchdog(WATCHDOG_TIMER(config, "watchdog")); // LS393 at 5D (video board) driven by VBLANK
	//watchdog.set_vblank_count("screen", 8);

	/* video hardware */
	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
	screen.set_raw(18.432_MHz_XTAL / 3, 384, 0, 256, 264, 8, 248); // If you align with X on test screen some info is chopped off
	screen.set_screen_update(FUNC(mrgame_state::screen_update_mrgame));
	screen.set_palette(m_palette);
	screen.screen_vblank().set(FUNC(mrgame_state::vblank_nmi_w));

	PALETTE(config, m_palette, FUNC(mrgame_state::mrgame_palette), 64);

	GFXDECODE(config, m_gfxdecode, m_palette, gfx_mrgame);

	/* Sound */
	SPEAKER(config, "lspeaker").front_left();
	SPEAKER(config, "rspeaker").front_right();
	DAC_8BIT_R2R(config, "ldac", 0).add_route(ALL_OUTPUTS, "lspeaker", 0.25); // unknown DAC
	DAC_8BIT_R2R(config, "rdac", 0).add_route(ALL_OUTPUTS, "rspeaker", 0.25); // unknown DAC

	dac_8bit_r2r_device &dacvol(DAC_8BIT_R2R(config, "dacvol", 0)); // unknown DAC
	dacvol.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
	dacvol.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
	dacvol.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
	dacvol.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);

	voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
	vref.set_output(5.0);
	vref.add_route(0, "dacvol", 1.0, DAC_VREF_POS_INPUT);
	vref.add_route(0, "dacvol", -1.0, DAC_VREF_NEG_INPUT);

	tms5220_device &tms(TMS5220(config, "tms", 672000)); // uses a RC combination. 672k copied from jedi.h
	tms.ready_cb().set_inputline("audiocpu2", Z80_INPUT_LINE_BOGUSWAIT);
	tms.add_route(ALL_OUTPUTS, "lspeaker", 1.0);
	tms.add_route(ALL_OUTPUTS, "rspeaker", 1.0);

	/* Devices */
	TIMER(config, "irq_timer").configure_periodic(FUNC(mrgame_state::irq_timer), attotime::from_hz(16000)); //ugh

	i8255_device &ppi(I8255A(config, "ppi"));
	ppi.in_pa_callback().set(FUNC(mrgame_state::porta_r));
	ppi.out_pb_callback().set(FUNC(mrgame_state::portb_w));
	ppi.in_pc_callback().set(FUNC(mrgame_state::portc_r));
}
Exemple #10
0
int
main(int argc, char **argv)
{
    int i;
    int n1, n2;
    off_t top2 = 0, bot2;
    char	*arg = 0, *x;

    progname = basename(argv[0]);
    setlocale(LC_COLLATE, "");
    setlocale(LC_CTYPE, "");
    mb_cur_max = MB_CUR_MAX;
    while (argc > 1 && argv[1][0] == '-') {
        if (argv[1][1] == '\0')
            break;
        switch (argv[1][1]) {
        case 'a':
            if (argv[1][2])
                arg = &argv[1][2];
            else if (argv[2]) {
                arg = argv[2];
                argv++, argc--;
            } else
                arg = "3";
            switch(*arg) {
            case '1':
                aflg |= 1;
                break;
            case '2':
                aflg |= 2;
                break;
            default:
                aflg |= 3;
            }
            break;
        case 'e':
            if (argv[1][2])
                null = &argv[1][2];
            else if (argv[2]) {
                null = argv[2];
                argv++;
                argc--;
            } else
                usage();
            break;
        case 't':
            if (argv[1][2]) {
                int n;
                next(sep1, &argv[1][2], n);
                sep2 = sep1;
            } else if (argv[2]) {
                int n;
                next(sep1, argv[2], n);
                sep2 = sep1;
                argv++, argc--;
            } else
                usage();
            break;
        case 'o':
            if (argv[2] == NULL)
                usage();
            arg = argv[1][2] ? &argv[1][2] : argv[2];
            for (no = 0;
                    olist = srealloc(olist, (no+1)*sizeof *olist),
                    olistf = srealloc(olistf,(no+1)*sizeof *olistf),
                    olist[no] = 0, olistf[no] = 0,
                    arg; no++) {
                if (arg[0] == '1' && arg[1] == '.') {
                    olistf[no] = F1;
                    olist[no] = strtol(&arg[2], &x, 10);
                } else if (arg[0] == '2' && arg[1] == '.') {
                    olist[no] = strtol(&arg[2], &x, 10);
                    olistf[no] = F2;
                } else if (arg[0] == '0') {
                    olistf[no] = JF;
                    x = &arg[1];
                } else
                    break;
                while (*x == ' ' || *x == ',')
                    x++;
                if (*x)
                    arg = x;
                else {
                    argc--;
                    argv++;
                    arg = argv[2];
                }
            }
            if (no == 0) {
                fprintf(stderr, "%s: invalid file number (%s) "
                        "for -o\n", progname, arg);
                exit(2);
            }
            break;
        case 'j':
            if (argv[2] == NULL)
                usage();
            if (argv[1][2] == '1')
                j1 = atoi(argv[2]);
            else if (argv[1][2] == '2')
                j2 = atoi(argv[2]);
            else
                j1 = j2 = atoi(argv[2]);
            argc--;
            argv++;
            break;
        case '1':
            if (argv[1][2])
                arg = &argv[1][2];
            else if (argv[2]) {
                arg = argv[2];
                argv++, argc--;
            } else
                usage();
            j1 = atoi(arg);
            break;
        case '2':
            if (argv[1][2])
                arg = &argv[1][2];
            else if (argv[2]) {
                arg = argv[2];
                argv++, argc--;
            } else
                usage();
            j2 = atoi(arg);
            break;
        case 'v':
            if (argv[1][2])
                arg = &argv[1][2];
            else if (argv[2]) {
                arg = argv[2];
                argv++, argc--;
            } else
                usage();
            if (*arg == '1')
                vflg |= 1;
            else if (*arg == '2')
                vflg |= 2;
            break;
        }
        argc--;
        argv++;
    }
    for (i = 0; i < no; i++)
        olist[i]--;	/* 0 origin */
    if (argc != 3)
        usage();
    j1--;
    j2--;	/* everyone else believes in 0 origin */
    s1 = ppi(F1, j1);
    s2 = ppi(F2, j2);
    if (argv[1][0] == '-' && argv[1][1] == '\0')
        f[F1] = ib_alloc(0, 0);
    else if ((f[F1] = ib_open(argv[1], 0)) == NULL)
        error("can't open ", argv[1]);
    if (argv[2][0] == '-' && argv[2][1] == '\0')
        f[F2] = ib_alloc(0, 0);
    else if ((f[F2] = ib_open(argv[2], 0)) == NULL)
        error("can't open ", argv[2]);

#define get1() n1=input(F1)
#define get2() n2=input(F2)
    get1();
    bot2 = ib_seek(f[F2], 0, SEEK_CUR);
    get2();
    while(n1>=0 && n2>=0 || (aflg|vflg)!=0 && (n1>=0||n2>=0)) {
        if(n1>=0 && n2>=0 && comp()>0 || n1<0) {
            if(aflg&2||vflg&2) output(0, n2);
            bot2 = ib_seek(f[F2], 0, SEEK_CUR);
            get2();
        } else if(n1>=0 && n2>=0 && comp()<0 || n2<0) {
            if(aflg&1||vflg&1) output(n1, 0);
            get1();
        } else { /*(n1>=0 && n2>=0 && comp()==0)*/
            while(n2>=0 && comp()==0) {
                if(vflg==0) output(n1, n2);
                top2 = ib_seek(f[F2], 0, SEEK_CUR);
                get2();
            }
            ib_seek(f[F2], bot2, SEEK_SET);
            get2();
            get1();
            for(;;) {
                if(n1>=0 && n2>=0 && comp()==0) {
                    if(vflg==0) output(n1, n2);
                    get2();
                } else if(n1>=0 && n2>=0 && comp()<0 || n2<0) {
                    ib_seek(f[F2], bot2, SEEK_SET);
                    get2();
                    get1();
                } else { /*(n1>=0 && n2>=0 && comp()>0 || n1<0)*/
                    ib_seek(f[F2], top2, SEEK_SET);
                    bot2 = top2;
                    get2();
                    break;
                }
            }
        }
    }
    return(0);
}
void Foam::cyclicAMIPointPatchField<Type>::swapAddSeparated
(
    const Pstream::commsTypes,
    gpuField<Type>& pField
) const
{
    if (cyclicAMIPatch_.cyclicAMIPatch().owner())
    {
        // We inplace modify pField. To prevent the other side (which gets
        // evaluated at a later date) using already changed values we do
        // all swaps on the side that gets evaluated first.

        // Get neighbouring pointPatch
        const cyclicAMIPointPatch& nbrPatch = cyclicAMIPatch_.neighbPatch();

        // Get neighbouring pointPatchField
        const GeometricField<Type, pointPatchField, pointMesh>& fld =
            refCast<const GeometricField<Type, pointPatchField, pointMesh> >
            (
                this->dimensionedInternalField()
            );

        const cyclicAMIPointPatchField<Type>& nbr =
            refCast<const cyclicAMIPointPatchField<Type> >
            (
                fld.boundaryField()[nbrPatch.index()]
            );


        Field<Type> ptFld(this->patchInternalField(pField)().asField());
        Field<Type> nbrPtFld(nbr.patchInternalField(pField)().asField());


        if (doTransform())
        {
            const tensor& forwardT = this->forwardT()[0];
            const tensor& reverseT = this->reverseT()[0];

            transform(ptFld, reverseT, ptFld);
            transform(nbrPtFld, forwardT, nbrPtFld);
        }

        // convert point field to face field, AMI interpolate, then
        // face back to point
        {
            // add neighbour side contribution to owner
            Field<Type> nbrFcFld(nbrPpi().pointToFaceInterpolate(nbrPtFld));

            // interpolate to owner
            if (cyclicAMIPatch_.cyclicAMIPatch().applyLowWeightCorrection())
            {
                Field<Type> fcFld(ppi().pointToFaceInterpolate(ptFld));

                nbrFcFld =
                    cyclicAMIPatch_.cyclicAMIPatch().interpolate
                    (
                        nbrFcFld,
                        fcFld
                    );
            }
            else
            {
                nbrFcFld =
                    cyclicAMIPatch_.cyclicAMIPatch().interpolate(nbrFcFld);
            }

            // add to internal field
            this->addToInternalField
            (
                pField,
                gpuField<Type>(ppi().faceToPointInterpolate(nbrFcFld)())
            );
        }

        {
            // add owner side contribution to neighbour
            Field<Type> fcFld(ppi().pointToFaceInterpolate(ptFld));

            // interpolate to neighbour
            if (cyclicAMIPatch_.cyclicAMIPatch().applyLowWeightCorrection())
            {
                Field<Type> nbrFcFld(nbrPpi().pointToFaceInterpolate(nbrPtFld));

                fcFld =
                    cyclicAMIPatch_.cyclicAMIPatch().neighbPatch().interpolate
                    (
                        fcFld,
                        nbrFcFld
                    );
            }
            else
            {
                fcFld =
                    cyclicAMIPatch_.cyclicAMIPatch().neighbPatch().interpolate
                    (
                        fcFld
                    );
            }

            // add to internal field
            nbr.addToInternalField
            (
                pField,
                gpuField<Type>(nbrPpi().faceToPointInterpolate(fcFld)())
            );
        }
    }
}