mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-02-24 15:12:23 +01:00
byuu says: Changelog: - importing a game won't show message box on success - importing a game will select the game that was imported in the list - caveat: GTK+ port doesn't seem to be removing focus from item 0 even though the selection is on item 2 - Game Boy audio reduced in volume by 50% - Game Boy Advance audio reduced in volume by 50% - Game Boy internally mixes audio at 2MHz now - Game Boy Advance's Game Boy audio hardware internally mixes audio at 2MHz now - Game Boy Color doesn't sort sprites by X-coordinate - Game Boy Color allows transparency on BGpriority pixels - caveat: this seems to allow sprites to appear on top of windows - Game Boy Color VRAM DMA transfers 16 bytes in 8 clocks (or 16 clocks in double speed mode) - Game Boy Color VRAM DMA masks low 4-bits of source and destination address - Game Boy Color VRAM DMA only allows reads from ROM or RAM - Game Boy Color VRAM DMA only allows writes to VRAM - fixed a bug in dereferencing a nullptr from pObject::find(), should fix crash when pressing enter key on blank windows - fixed Windows RadioItem selection - Game Boy Advance color emulation code added
62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
uint8 APU::Square2::read(unsigned addr) const {
|
|
switch(addr) {
|
|
case 1: return (length << 0) | (duty << 6);
|
|
case 2: return (envelope.frequency << 0) | (envelope.direction << 3) | (envelope.volume << 4);
|
|
case 3: return (frequency >> 0);
|
|
case 4: return (frequency >> 8) | (counter << 6) | (initialize << 7);
|
|
}
|
|
}
|
|
|
|
void APU::Square2::write(unsigned addr, uint8 byte) {
|
|
switch(addr) {
|
|
case 1: //NR21
|
|
length = byte >> 0;
|
|
duty = byte >> 6;
|
|
break;
|
|
|
|
case 2: //NR22
|
|
envelope.frequency = byte >> 0;
|
|
envelope.direction = byte >> 3;
|
|
envelope.volume = byte >> 4;
|
|
if(envelope.dacenable() == false) enable = false;
|
|
break;
|
|
|
|
case 3: //NR23
|
|
frequency = (frequency & 0xff00) | (byte << 0);
|
|
break;
|
|
|
|
case 4: //NR24
|
|
frequency = (frequency & 0x00ff) | (byte << 8);
|
|
counter = byte >> 6;
|
|
initialize = byte >> 7;
|
|
|
|
if(initialize) {
|
|
enable = envelope.dacenable();
|
|
period = 2 * (2048 - frequency);
|
|
envelope.period = envelope.frequency;
|
|
volume = envelope.volume;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
void APU::Square2::power() {
|
|
envelope.frequency = 0;
|
|
envelope.direction = 0;
|
|
envelope.direction = 0;
|
|
envelope.period = 0;
|
|
enable = 0;
|
|
length = 0;
|
|
duty = 0;
|
|
frequency = 0;
|
|
counter = 0;
|
|
initialize = 0;
|
|
shadowfrequency = 0;
|
|
signal = 0;
|
|
output = 0;
|
|
period = 0;
|
|
phase = 0;
|
|
volume = 0;
|
|
}
|