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(""); }
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(""); }
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(""); }
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; }
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(""); }
//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); }
//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; }
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; }