コード例 #1
0
ファイル: sim-at.c プロジェクト: altoplano/PHC
static void smix_loop1_pow2(uint32_t N2div)
{
	uint64_t X = B;
	uint32_t i, j, n, N2;

	printf("loop1_pow2(N2 = N/%u)\n", N2div);

	t_cost = 0;
	at_cost1 = at_cost2 = 0;

	n = 1;
	for (i = 0; i < N; i++) {
		V[i] = X;

		hits[i] = 0;
		if (i > 1) {
			if ((i & (i - 1)) == 0)
				n <<= 1;
			j = (X & (n - 1)) + (i - n);
			if (j >= i)
				fprintf(stderr, "Bad j = %08x\n", j);
			hits[j]++;

			X ^= V[j];
		}

		X = H(X);

		at_cost1 += n; /* 1 time * n area */
	}

	count_hits();
	print_hits("loop1");

	N2 = N / N2div;
	for (i = 0; i < N2; i++) {
		j = X % N;
		X = H(X ^ V[j]);

		hits[j]++;
		at_cost2 += N; /* 1 time * N area */
	}

	count_hits();

	at_cost1 /= 2; /* extreme TMTO, probably impossible */
	at_cost2 /= 2; /* extreme TMTO, probably impossible */

	print_costs(X);
	print_hits("total");
	puts("");
}
コード例 #2
0
ファイル: sim-at.c プロジェクト: altoplano/PHC
static void smix_loop1_mod(uint32_t N2div)
{
	uint64_t X = B;
	uint32_t i, j, N2;

	printf("loop1_mod(N2 = N/%u)\n", N2div);

	t_cost = 0;
	at_cost1 = at_cost2 = 0;

	for (i = 0; i < N; i++) {
		V[i] = X;

		hits[i] = 0;
		if (i > 1) {
			j = X % i; /* drawbacks: depends on chosen size of X (beyond bits in N-1), somewhat slow, not constant time, slightly non-uniform when size of X is not a lot larger than log2(N) */
			if (j >= i)
				fprintf(stderr, "Bad j = %08x\n", j);
			hits[j]++;

			X ^= V[j];
		}

		X = H(X);

		at_cost1 += i; /* 1 time * i area */
	}

	count_hits();
	print_hits("loop1");

	N2 = N / N2div;
	for (i = 0; i < N2; i++) {
		j = X % N;
		X = H(X ^ V[j]);

		hits[j]++;
		at_cost2 += N; /* 1 time * N area */
	}

	count_hits();

	at_cost1 /= 2; /* extreme TMTO, probably impossible */
	at_cost2 /= 2; /* extreme TMTO, probably impossible */

	print_costs(X);
	print_hits("total");
	puts("");
}
コード例 #3
0
ファイル: sim-at.c プロジェクト: altoplano/PHC
static void smix_loop1_wrap(uint32_t N2div)
{
	uint64_t X = B;
	uint32_t i, j, N2;

	printf("loop1_wrap(N2 = N/%u)\n", N2div);

	t_cost = 0;
	at_cost1 = at_cost2 = 0;

	for (i = 0; i < N; i++) {
		V[i] = X;

		hits[i] = 0;
		if (i > 1) {
			j = wrap(X, i);
			if (j >= i)
				fprintf(stderr, "Bad j = %08x\n", j);
			hits[j]++;

			X ^= V[j];
		}

		X = H(X);

		at_cost1 += i; /* 1 time * i area (although not all j's in [0,i-1] are possible for a given i) */
	}

	count_hits();
	print_hits("loop1");

	N2 = N / N2div;
	for (i = 0; i < N2; i++) {
		j = X % N;
		X = H(X ^ V[j]);

		hits[j]++;
		at_cost2 += N; /* 1 time * N area */
	}

	count_hits();

	at_cost1 /= 2; /* extreme TMTO, probably impossible */
	at_cost2 /= 2; /* extreme TMTO, probably impossible */

	print_costs(X);
	print_hits("total");
	puts("");
}
コード例 #4
0
ファイル: zoo.c プロジェクト: hannenz/zoomania
void __fastcall__ joker_hit(char pl){
	char i,j;

	stop = 1;
	kill_joker();
	matrix[joker_y][joker_x] = joker_tmp;
	sc = level*10;
	for (i=0;i<8;++i){
		for(j=0;j<8;++j){
			if (matrix[i][j] == joker_tmp){
				print3x3(matrix[i][j]+8,j,i);
			}
		}
	}
	delay(20);
	for (i=0;i<8;++i){
		for(j=0;j<8;++j){
			if (matrix[i][j] == joker_tmp){
				if (hits[joker_tmp]){
					--hits[joker_tmp];
					print_hits();
				}
				print3x3(matrix[i][j]=EMPTY_SYMB,j,i);
				plot_score(sc,XOFFS+3*j,3*i+1);
				print_num(score[pl]+=sc,6,28,22-(players<<1)+(pl<<1));
				}
			}
	}
	move_matrix();
	check_matrix(1);
	stop = 0;
}
コード例 #5
0
ファイル: sim-at.c プロジェクト: altoplano/PHC
static void smix_classic(void)
{
	uint64_t X = B;
	uint32_t i, j;

	puts("classic");

	t_cost = 0;

	for (i = 0; i < N; i++) {
		hits[i] = 0;

		V[i] = X;
		X = H(X);
	}

	at_cost1 = N * sqrt(N); /* sqrt(N) parallel cores attack with extreme recursion */
	at_cost2 = 0;

	for (i = 0; i < N; i++) {
		j = X % N;
		X = H(X ^ V[j]);

		hits[j]++;
		at_cost2 += N; /* 1 time * N area */
	}

	count_hits();

	at_cost2 /= 2; /* extreme TMTO */

	print_costs(X);
	print_hits("total");
	puts("");
}
コード例 #6
0
ファイル: zoo.c プロジェクト: hannenz/zoomania
//print the matrix
void print_matrix(void){
	char p,l;
	
	fill();
	cursor_off();
	print_hits();

	l = 20-(players<<1);
	print_num(level,2,36,l);
	for (p=0;p<players+1;++p){
		l += 2;
		print_num(score[p],6,28,l);
	}
	stop = 1;	
	display_time();
	appear();
	cursor_on();
	delay(230);
}
コード例 #7
0
ファイル: ghkit.c プロジェクト: rbdrum2midi/rbdrum2midi
//callback for guitar hero kit
void cb_irq_gh(struct libusb_transfer *transfer)
{
    MIDIDRUM* MIDI_DRUM = (MIDIDRUM*)transfer->user_data; 
    if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
        fprintf(stderr, "irq transfer status %d? %d\n", transfer->status, LIBUSB_TRANSFER_ERROR);
        do_exit = 2;
        libusb_free_transfer(transfer);
        transfer = NULL;
        return;
    }

    //Guitar Hero Drumkit
    get_state(MIDI_DRUM,RED);
    get_state(MIDI_DRUM,YELLOW_CYMBAL);
    get_state(MIDI_DRUM,GREEN);
    get_state(MIDI_DRUM,BLUE);
    get_state(MIDI_DRUM,ORANGE_CYMBAL);
    get_state(MIDI_DRUM,ORANGE_BASS);

    handle_drum(MIDI_DRUM,RED);
    handle_drum(MIDI_DRUM,YELLOW_CYMBAL);
    handle_drum(MIDI_DRUM,GREEN);
    handle_drum(MIDI_DRUM,BLUE);
    handle_drum(MIDI_DRUM,ORANGE_CYMBAL); 
    handle_bass(MIDI_DRUM,ORANGE_BASS);
        
    //now that the time-critical stuff is done, lets do the assignments 
    memcpy(MIDI_DRUM->prev_state,MIDI_DRUM->drum_state,NUM_DRUMS);
                             
    if (MIDI_DRUM->verbose)
    {
        print_hits(MIDI_DRUM);
	print_buf(MIDI_DRUM);
    }
    if (libusb_submit_transfer(transfer) < 0)
        do_exit = 2;
}
コード例 #8
0
ファイル: zoo.c プロジェクト: hannenz/zoomania
void __fastcall__ check_matrix(unsigned char fo){
	unsigned char i,j,x1,x2,n,s;
	unsigned char ck = 0;

	stop = 1;

	memset(backup,EMPTY_SYMB,64);
	s = 0;
	
	for (i=0;i<8;++i){
		for (x1=0;x1<6;++x1){
			x2 = x1 + 1;
			while (matrix[i][x1] == matrix[i][x2] && x2 < 8) ++x2;
			if (x2 - x1 > 2){
				for (j=x1;j<x2;++j){
					backup[i][j] = matrix[i][j];
				}
				n = x2 - x1 - 3;
				if ((sc = 10*level << n << (fo-1)) >= 999) sc = 999;
				print_num(score[pl]+=sc,6,28,22 - (players<<1) + (pl<<1));
				
				scores[s].num = sc;
				scores[s].x = XOFFS+x1*3 + x_offsets[n];
				scores[s].y = i*3+1;
				++s;
			}
			if ((x1 = x2-1) >= 6)
				break;
		}
	}
	for (j=0;j<8;++j){
		for (x1=0;x1<6;++x1){
			x2 = x1 + 1;
			while (matrix[x1][j] == matrix[x2][j] && x2 < 8) ++x2;
			if (x2 - x1 > 2){
				for (i=x1;i<x2;++i){
					backup[i][j] = matrix[i][j];
				}
				n = x2 -x1 - 3;
				if ((sc = 10*level << n << (fo-1)) >= 999) sc= 999;
				print_num(score[pl]+=sc,6,28,22 - (players<<1) + (pl<<1));
				scores[s].num = sc;
				scores[s].x = XOFFS + j*3;
				scores[s].y = x1*3 + y_offsets[n];
				++s;
			}
			if ((x1 = x2-1) >= 6)
				break;
		}
	}

	for (i=0;i<8;++i){
		for (j=0;j<8;++j){
			if (backup[i][j] != EMPTY_SYMB){
				ck = chk_flg = 1;
				print3x3(backup[i][j]+8,j,i);
			}
		}
	}
	
	if (ck)
		delay(40);
	
	for (i=0;i<8;++i){
		for(j=0;j<8;++j){
			if (backup[i][j] != EMPTY_SYMB){
				print3x3(EMPTY_SYMB,j,i);
				matrix[i][j] = EMPTY_SYMB;
				if ((time1 += time_bonus[level-1]*fo*TIME_BONUS) > 319) 
					time1 = 319;
				if (hits[backup[i][j]])
					--hits[backup[i][j]];
				display_time();
			}
		}
	}
	for (n=0;n<s;++n){
		plot_score(scores[n].num,scores[n].x,scores[n].y);
	}
	if (team != 0 && fo == 1){
		tt ^=1;
		*(char*)0xd02e ^= 3;
	}
	
	if (ck){
		print_hits();
		delay(18);
		move_matrix();
		check_matrix(++fo);
	}
	stop = 0;
}