static struct spacing_count * tro_spacing_init(const struct tr_object *objs, int i) { struct spacing_count *spc = spc_new(equal_i); for (int j = i; j >= 0; j--) { if (objs[j].ps == MISS) continue; double influ = tro_spacing_influence(&objs[j], &objs[i]); if (influ == 0) break; /* j-- influence won't increase */ spc_add(spc, objs[j].rest, influ); } return spc; }
int main() { int i; /* Data to upload */ static unsigned char const data [4] = "\xFA\xDE\xD1"; unsigned const data_addr = 0xF5; /* second I/O port */ snes_spc = spc_new(); if ( !snes_spc ) error( "Out of memory" ); spc_init_rom( snes_spc, spc_rom ); spc_reset( snes_spc ); /* Simulate reads and writes that SNES code would do */ /* Wait for SPC to be ready */ while ( pread( 0 ) != 0xAA || pread( 1 ) != 0xBB ) { } /* Start address */ pwrite( 2, data_addr & 0xFF ); pwrite( 3, data_addr >> 8 ); /* Tell SPC to start transfer and wait for acknowledgement */ pwrite( 0, 0xCC ); pwrite( 1, 0x01 ); while ( pread( 0 ) != 0xCC ) { } /* Send each byte and wait for acknowledgement */ for ( i = 0; i < 4; i++ ) { printf( "%02X ", data [i] ); pwrite( 1, data [i] ); pwrite( 0, i ); while ( pread( 0 ) != i ) { } } printf( "\n" ); /* Verify that data was transferred properly */ for ( i = 0; i < 3; i++ ) printf( "%02X ", pread( i + 1 ) ); printf( "\n" ); printf( "Cycles: %ld\n", (long) stime ); spc_delete( snes_spc ); return 0; }
int main( int argc, char** argv ) { snes_spc = spc_new(); if ( !snes_spc ) error( "Out of memory" ); /* Make new state if it doesn't exist, otherwise load it and record to wave file */ if ( !file_exists( "state.bin" ) ) make_save_state( (argc > 1) ? argv [1] : "test.spc" ); else use_save_state(); spc_delete( snes_spc ); return 0; }
int main( int argc, char** argv ) { /* Create emulator and filter */ SNES_SPC* snes_spc = spc_new(); SPC_Filter* filter = spc_filter_new(); if ( !snes_spc || !filter ) error( "Out of memory" ); /* Load SPC */ { /* Load file into memory */ long spc_size; void* spc = load_file( (argc > 1) ? argv [1] : "test.spc", &spc_size ); /* Load SPC data into emulator */ error( spc_load_spc( snes_spc, spc, spc_size ) ); free( spc ); /* emulator makes copy of data */ /* Most SPC files have garbage data in the echo buffer, so clear that */ spc_clear_echo( snes_spc ); /* Clear filter before playing */ spc_filter_clear( filter ); } /* Record 20 seconds to wave file */ wave_open( spc_sample_rate, "out.wav" ); wave_enable_stereo(); while ( wave_sample_count() < 60 * spc_sample_rate * 2 ) { /* Play into buffer */ #define BUF_SIZE 2048 short buf [BUF_SIZE]; error( spc_play( snes_spc, BUF_SIZE, buf ) ); /* Filter samples */ spc_filter_run( filter, buf, BUF_SIZE ); wave_write( buf, BUF_SIZE ); } /* Cleanup */ spc_filter_delete( filter ); spc_delete( snes_spc ); wave_close(); return 0; }
/** * @brief Creates an SPC decoder. */ SpcDecoder::SpcDecoder() { // initialize the SPC library snes_spc_manager = spc_new(); snes_spc_filter = spc_filter_new(); }
/** * \brief Creates an SPC decoder. */ SpcDecoder::SpcDecoder(): snes_spc_manager(spc_new()), snes_spc_filter(spc_filter_new()) { }