The logo is compressed using PB8, a form of RLE with unary-coded
run lengths. Each block representing 8 bytes consists of a control
byte, where each bit (MSB to LSB) is 0 for literal or 1 for repeat
previous, followed by the literals in that block.
PB8 compression is also used in a few NES games. A variant called
PB16, where 1 means repeat 2 bytes back, is used in the Game Boy
port of 240p Test Suite and in Libbet and the Magic Floor.
Switching from logo-compress RLE to PB8 decreases the compressed
logo data size from 287 bytes to 253 bytes, saving 34 bytes.
The decompression code is also about 10 bytes smaller.
byuu says:
- bsnes: reset all thread clocks on power cycle
- bsnes: use uint64 instead of uint128 for scheduler clocks
- bsnes: use float instead of double for audio resampling
- bsnes: begin work of integrating SameBoy (incomplete; needs
additional features)
byuu says:
- converted (u)int(8,16,32,64) from Natural/Integer<T> to
(u)int(8,16,32,64)_t types
- SFC: mostly rewritten WDC65816 CPU core
- removed 487KiB of code! (unused CPU cores from other higan cores)
byuu says:
- bsnes: allow video filtering even when the emulator is paused
- bsnes: improve overscan masking, especially with HD mode 7
- bsnes: improve snow support, especially with HD mode 7
- bsnes: replace real-time cheat code replace with per-frame replace
(ala Pro Action Replay, Snes9X)
- bsnes: treat the latter step() half of CPU::read() calls as idle
cycles
- bsnes: templatize step() where possible (not always practical)
- bsnes: removed Natural<T> templates from key portions of the fast
PPU renderer
- bsnes: dethreaded peripherals (controllers and expansion port
devices)
- bsnes: above optimizations result in a ~20-25% speedup over v107.4
with no accuracy loss
Note that light guns aren't going to work for now, I'll have to fix them
before we can release v108.
byuu says:
- bsnes: added video filters from bsnes v082
- bsnes: added ZSNES snow effect option when games paused or unloaded
(no, I'm not joking)
- bsnes: added 7-zip support (LZMA 19.00 SDK)
[Recent higan WIPs have also mentioned bsnes changes, although the higan code
no longer includes the bsnes code. These changes include:
- higan, bsnes: added EXLOROM, EXLOROM-RAM, EXHIROM mappings
- higan, bsnes: focus the viewport after leaving fullscreen exclusive
mode
- bsnes: re-added mightymo's cheat code database
- bsnes: improved make install rules for the game and cheat code
databases
- bsnes: delayed construction of hiro::Window objects to properly show
bsnes window icons
- Ed.]
byuu says:
- ruby: fullscreen support for Windows OpenGL 3.2, DirectDraw 7.0, GDI drivers
- ruby: output(width, height) support for all drivers on all platforms
- hiro: improve focus capture for Canvas and Viewport widgets
- hiro: added two hotfixes for the macOS Cocoa target [Sintendo]
- higan, bsnes: focus the viewport after leaving fullscreen exclusive mode
- freebsd: moved from GCC 8.2.0 to Clang 6.0.1
- higan: added video display emulation option to Famicom and Mega Drive cores
The reason I moved to Clang was because GCC keeps deadlocking my FreeBSD system.
I don't know if it's GCC's fault, or suddenly running 32 copies of any high-CPU
usage program, heh. But at any rate, it's worth a try. The performance is the
same, but compilation takes a tiny bit longer with Clang.
byuu says:
I finally pass blargg's dmg-sound and cgb-sound tests, but at quite a cost.
Reads and writes can't happen on an exact T-cycle (clock cycle) point within an
M-cycle (opcode cycle) for the DMG. Writes to trigger take effect two clocks
after writes to wave RAM, for instance. Probably going to be a lot more of this
in low-level PPU emulation, so I'm biting the bullet and slowly converting the
Game Boy bus handler to this new format, which I'll use as a test bench for
doing this later to other systems with, since Game Boy performance isn't as
critical (it's a drop from 220fps to 200fps to have to poll the bus four times
per memory access and synchronize the CPU four times as often, so a lot less bad
than I'd feared at least.)