loading_reduced.jpg

1.4 / 21-12-2021

NanoBoyAdvance

Accuracy

Performance

Features

competition

NanoBoyAdvance is a Game Boy Advance emulator focused on accuracy. It has been reported that its CPU and timing emulation is more accurate than other software emulators right now, as in CPU and DMA is emulated with near cycle-accuracy and ARM emulation handles nearly all known edge-cases. It also has an HQ audio mixer (for games which use Nintendo's MusicPlayer2000 sound engine) and quite a few nice post-processing options (ghosting simulation, color correction, etc.). 


Please note upon loading a ROM for the first time you will be prompted to assign the Game Boy Advance BIOS file. You can dump it from a real console (accurate) or use an unofficial BIOS (less accurate).

--

Windows: Nothing reported in particular

Mac: install brew & install Qt5 from brew: brew install qt@5

Linux: install SDL2, GLEW and Qt5

Most Recent Changes

--1.4--

  • Audio: added a high-quality software/HLE mixer for the MusicPlayer2000 sound engine

  • Platform: added a new Qt frontend with OpenGL post-processing options

  • PPU: render sprites one scanline ahead (fixes #130)

  • PPU: fix an off-by-one in the OBJ draw loop

  • PPU: apply OAM draw limit only on OAM (instead of pixel) boundaries for now

  • PPU: fix Mode4 transparency (fixes #169)

  • PPU: emulate BG enable delay (fixes #94)

  • PPU: update internal (affine) X/Y registers only if the BG is enabled (fixes #177)

  • Memory: handle 16-bit KEYCNT writes (fixes #152)

  • Memory: HALTCNT and POSTFLG should only be writable from BIOS code

  • Memory: mask top two bits of the IE register

  • DMA: each DMA channel should have its own memory data register (MDR)

  • CPU: rework IRQ signal propagation delay

  • CPU: improve IRQ exception timing

  • CPU: emulate user-mode LDM bus conflict

  • CPU: handle invalid CPU modes

  • CPU: emulate MSR user-mode restrictions

  • CPU: boot into supervisor mode instead of system mode

  • CPU: handle rD=r15 edge-case in CMP/CMN/TST and TEQ

  • CPU: Thumb ALU shifts now mask the shift amount

  • CPU: fix unsigned multiply-long timing

  • EEPROM: fix address masking



--1.3--

  • ARM: handle CMP, CMN, TST and TEQ with rD = 15

  • ARM: handle mode switches when the register bank does not change.

  • ARM: removed errorneous user-mode switch from LDRT/STRT opcodes.

  • DMA: allow DMAs to take priority over the CPU in the middle of an instruction

  • DMA: delay DMA startup by two cycles and account for 2I internal cycles

  • DMA: force ROM accesses to increment source address mode

  • DMA: respect source address mode setting for FIFO DMA

  • DMA: force FIFO DMA to use word sized accesses

  • DMA: handle manual disable (via enable flag) more gracefully

  • Timer: respect cascade flag in sample rate calculation

  • APU: emulate DAC enable bits (fixes #64)

  • PPU: match WIN0/1 trigger logic to hardware (thanks @destoer)

  • PPU: fix H-blank IRQ timing (once again)

  • PPU: better handle internal affine registers when multiple BG modes are used in a single frame.

  • PPU: handle invalid BG modes 6 and 7 (thanks @ladystarbreeze)

  • PPU: update internal affine & mosaic registers at the start of H-blank, not at the end.

  • MMIO: do not fallthrough on SOUNDBIAS writes (fixes #125)

  • Keypad: implemented keypad IRQ (thanks @destoer)

  • Serial: implemented a serial IRQ stub

  • SDL: always call glewInit() (fixes #129 )

  • SDL: use binary directory as current working directory

--1.2--

  • CPU: Optimized GamePak prefetch buffer emulation

  • CPU: Reading prefetched GamePak memory engages the GamePak prefetcher.

  • CPU: Delay all IRQs by four cycles (fixes James Pond)

  • CPU: Handle pipeline flush for halfword reads

  • CPU: Force next ARM instruction fetch to be sequential if the condition isn't met.

  • CPU: Optimized ADC and SBC flag calculations

  • DMA: Ignore repeat-flag for immediate DMAs

  • DMA: Mask source and destination addresses on write.

  • DMA: Properly disable non-repeating FIFO DMA (fixes #97)

  • Timer: Greatly optimized emulation efficiency, timers now are scheduled.

  • Memory: Fix unaligned S16 reads from out-of-bounds ROM

  • Memory: Allow read/write to POSTFLG register

  • Memory: Allow read from WAVE_RAM registers

  • Memory: Fix unaligned S8/S16 reads from SRAM

  • Memory: Handle DMA reads from open bus addresses (fixes #109)

  • Memory: Improved GPIO bus emulation

  • Memory: Force-align 16-bit expanded 8-bit VRAM and PRAM writes.

  • PPU: Raise H-blank IRQs after 960 cycles instead of 1006 (fixes #89)

  • PPU: Handle OBJ priority hijacking (fixes #99)

  • PPU: Respect per-scanline cycle limit for OBJ rendering (fixes #98)

  • PPU: Handle odd tile numbers in 256-color OBJs (fixes #106)

  • PPU: Emulate tile number limit for 256-color OBJs

  • PPU: Latch internal affine registers on mode switch (fixes #90)

  • PPU: Handle setting V-count setting to the current V-count value.

  • PPU: Make V-count IRQ edge-triggered

  • PPU: Fixed broken semi-transparency logic

  • APU: Clamp samples before converting to S16 format (fixes #100)

  • APU: Use BLEP resampler to improve quality of direct audio.

  • RTC: Fix off-by-one error in the day of month.

  • GameDB: Added save type override for Acrobat Kid (Japan)

  • GameDB: Added save type override for Baldur's Gate - Dark Alliance

  • GameDB: Added save type override for 007 - Everything or Nothing

  • GameDB: Added save type override for Super Monkey Ball Jr.

  • GameDB: Fixed save type override for Classic NES - Legend of Zelda

  • Common/DSP: Linearly interpolate CosineResampler lookup-table

  • Common/DSP: Added a BLEP resampler

  • Miscellaneous: Do not sync to audio by default

  • Miscellaneous: Experimental, optional hack to increase audio sample rate in games which use the M4A/Sappy sound engine. This will break games and is thus not turned on by default.



--1.1--

  • implemented GLSL shader support

  • fix broken Vsync on Windows and presumably macOS

  • fix crash when no keymap.toml is present



--1.0--

Initial Release