mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-10-04 07:01:32 +02:00
byuu says: (r05 and r06 were save points between large core modifications) I would really appreciate extensive regression testing (especially around SuperFX, Cx4, ST018, DSP-n, ST-01n, NES, GB) at this point. The most critical core changes should be completed now. And it was an unbelievable amount of restructuring. Changelog: - SuperFX core moved to Processor::GSU - SNES::CPU core moved to Processor::R65816 - SNES::SMP core moved to Processor::SPC700 - NES::CPU core renamed to Processor::R6502 - use filestream to load RAM files from interface - save states store SHA256 instead of CRC32 (CRC32 usage removed entirely from bsnes) - nes/ -> fc/ and NES -> FC - snes/ -> sfc/ and SNES -> SFC - SuperFamicom::MappedRAM::copy uses stream instead of data+size - Linux port uses gcc-4.7 (still using only gcc-4.6 subset, so you can make a gcc-4.6 symlink for now if you like.) - all profiles and all targets compile and work properly All eight instruction set cores have been moved to processor/ now. Consistency's a wonderful thing. The last remnants of NES/SNES are now limited to target-ui code; and the nall/(system) folder names. I'm building with gcc-4.7 on my Linux box now because the resultant binaries are up to 20% faster (seriously) than gcc-4.6.
58 lines
1.1 KiB
C++
Executable File
58 lines
1.1 KiB
C++
Executable File
void APU::Noise::clock_length() {
|
|
if(envelope.loop_mode == 0) {
|
|
if(length_counter > 0) length_counter--;
|
|
}
|
|
}
|
|
|
|
uint8 APU::Noise::clock() {
|
|
if(length_counter == 0) return 0;
|
|
|
|
uint8 result = (lfsr & 1) ? envelope.volume() : 0;
|
|
|
|
if(--period_counter == 0) {
|
|
unsigned feedback;
|
|
|
|
if(short_mode) {
|
|
feedback = ((lfsr >> 0) & 1) ^ ((lfsr >> 6) & 1);
|
|
} else {
|
|
feedback = ((lfsr >> 0) & 1) ^ ((lfsr >> 1) & 1);
|
|
}
|
|
|
|
lfsr = (lfsr >> 1) | (feedback << 14);
|
|
period_counter = apu.ntsc_noise_period_table[period];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void APU::Noise::power() {
|
|
}
|
|
|
|
void APU::Noise::reset() {
|
|
length_counter = 0;
|
|
|
|
envelope.speed = 0;
|
|
envelope.use_speed_as_volume = 0;
|
|
envelope.loop_mode = 0;
|
|
envelope.reload_decay = 0;
|
|
envelope.decay_counter = 0;
|
|
envelope.decay_volume = 0;
|
|
|
|
period = 0;
|
|
period_counter = 1;
|
|
short_mode = 0;
|
|
lfsr = 1;
|
|
}
|
|
|
|
void APU::Noise::serialize(serializer &s) {
|
|
s.integer(length_counter);
|
|
|
|
envelope.serialize(s);
|
|
|
|
s.integer(period);
|
|
s.integer(period_counter);
|
|
|
|
s.integer(short_mode);
|
|
s.integer(lfsr);
|
|
}
|