Releases: jsgroth/jgb
v0.10.7
v0.10.6
- Implement the HALT bug, where executing a HALT instruction while IME=0 and (IE & IF) != 0 causes the program counter to fail to increment after the next opcode read; this fixes The Smurfs from hanging on startup as it depends on the HALT bug to change an
LDH A, ($FF00+$8C)
instruction (F0 8C) intoLDH A, ($FF00+$F0)
followed byADC H
(F0 F0 8C) - Add an About window specifying current version
v0.10.5
- Fix Resident Evil Gaiden from crashing the emulator after the title screen; this game intentionally underflows the program counter using a relative jump instruction, which previously caused the emulator to terminate with an error. It will now "gracefully" wrap around from $0000 to $FFFF (and vice versa)
v0.10.4
- Fix a bug in the Game Boy Color's VRAM DMA transfer routine that caused extreme graphical corruption in Toki Tori (and possibly some other games)
Details: When a program reads the HDMA5 I/O register, bit 7 is supposed to indicate whether a VRAM DMA transfer is running (0=running, 1=finished). On writes, this bit is used to specify the VRAM DMA transfer mode (0=copy all at once immediately, 1=copy only during HBlank).
The bug was that when a program initiated a VRAM DMA transfer in HBlank mode, bit 7 would not get cleared until the next HBlank period, when the DMA transfer routine copied its first byte. So if the program polled the bit before that, it would think that the transfer had completed when in reality it hadn't yet copied a single byte.
Toki Tori specifically did this, and it almost immediately changed the ROM bank afterwards which caused the DMA transfer to copy garbage into the VRAM tile data area.
v0.10.3
- Fix an oversight related to the KEY1 register that caused Alone in the Dark: The New Nightmare to hang forever after language selection
- KEY1 bit 7 (current speed mode) is supposed to read-only from the CPU's perspective, but it was not being masked out in CPU writes. Alone in the Dark was stuck in a loop where it toggled double speed mode, wrote to KEY1 with bit 7 clear, and then read KEY1 to check if double speed mode was on, which always came back false due to the previous write
- Fix an issue where the save file path was serialized as part of save states, which caused problems if moving files to different directories or devices
v0.10.2
v0.10.1
v0.10.0
- Add support for MBC5 rumble cartridges, using the rumble bit in the RAM bank number register to toggle gamepad rumble on and off
- Gamepad rumble status is only updated once per frametime, so there may be inaccuracies in any games that update the rumble bit more than once per frame
- Add a new UI option in Controller Settings to globally enable/disable gamepad rumble
v0.9.1
v0.9.0
- Implement support for cartridges using the MBC7 mapper, including accelerometer support; Kirby Tilt 'n' Tumble is now playable
- Accelerometer support requires a gamepad with an accelerometer
- Note that accelerometer support can be finicky with some platform/controller combinations; some controllers may require additional software for the accelerometer to be usable