Releases: calc84maniac/tiboyce
TI-Boy CE Alpha v0.3.0
After a long year of work, TI-Boy CE finally supports Game Boy Color!
This involved an extensive rewrite of the memory system to support both GB and GBC memory maps, also allowing improved compatibility and performance. The color correction feature was also greatly improved from what was used in colorization for previous releases. The full change log is below.
Note that this release does not work in CEmu at the time of this writing. To create a build partially compatible with CEmu, add -DCEMU
when following the build instructions, and disable fullscreen mode in TI-Boy settings.
Update (12/6/2022): Replaced this release with a hotfix that fixes a couple of crashes in specific scenarios (discovered via the homebrew game Sqrxz). Please redownload the release if you downloaded before this date.
Changelog
Added
- Game Boy Color support.
- GBA backwards-compatibility to unlock features in some GBC games.
- Color correction to approximate the color spectrum of a GBC or GBA screen, leveraging native gamma settings.
- Game Boy Color skin for no-scaling mode.
- Brightness change hotkeys usable in menus.
Changed
- Confirmation setting for Load State now also applies to Restart Game.
- Various improvements to the menu, courtesy of runer112:
- Mark per-game options instead of global options with an asterisk.
- Improved menu item alignment and font.
- Majorly rewrite the CPU emulation to improve performance and flexibility of memory access emulation.
- Rearrange the JIT's static register allocation and the ABI of routines called from it.
- Remove dynamically-generated per-opcode memory routines, reducing overhead of memory region selection.
- For special memory accesses (I/O reads or non-RAM writes), dynamically generate minimal trampolines instead.
- For writes to MBC registers, directly use a routine for the specific register to remove range-checking overhead.
- Always pass valid timing info to memory accesses which may require it, removing the need for validity checks.
- Enable complex memory instructions to directly read/write RAM, such as bitwise operations and INC/DEC (HL).
- Allow absolute reads/writes to have variable-length implementations, for better performance with banked memory.
- Change stack bounds-checking to speed up close SP modifications (INC/DEC/ADD SP) and free up a register.
- Use inclusive bounds for the stack to avoid thrashing when touching the high edge of a memory region.
- Improve performance of return prediction by ignoring the stack offset unless the prediction misses.
- Improve performance of self-modifying code checks by using 24-bit comparisons.
- Improve performance of self-modifying JP instructions by using dynamic dispatch instead of recompiling.
- Expand the list of supported instructions in waitloop detection to reduce false negatives.
- Optimize ROM bank switching routine at ROM load time based on the ROM size, to eliminate redundant masking.
- Simplify MBC3 RTC bank switching by handling RTC updates immediately before register writes.
- Refactor the PPU scheduler to speed up writes to STAT and LYC registers.
- Predict future writes to the LYC register based on previous frames, to avoid excessive rescheduling.
- Remove post-vblank event cache to simplify all reschedules, and determine the event only when vblank is reached.
Fixed
- Reduce SPI transfer clock to fix glitchy display on some calculator revisions.
- Increase Flash wait states for increased stability on some calculator revisions.
- Fix game screen corruption in the main menu when showing a confirmation dialog.
- Fix garbled character display when internal ROM title contains invalid characters.
- Fix corruption of a couple of pixels when restoring the home screen.
- Implement more accurate open-bus read behavior for disabled cartridge RAM.
- Implement correct mirroring behavior for MBC2 cartridge RAM.
- Fix reads past the end of ROM banks trimmed by the ROM converter.
- Fix conditions for the window trigger to include writes to LCDC or WY during hblank.
- Fix display of mid-frame sprite changes resulting from direct OAM writes.
- Allow NR30 writes to disable audio channel 3.
- Fix a scheduler edge case which could cause crashes in some games. Fixes Space Invaders (Japan).
TI-Boy CE Alpha v0.2.1
This is a minor release which uses newly discovered LCD documentation to eliminate diagonal screen tearing in fullscreen display mode.
Additionally, it lays groundwork for future Game Boy Color rendering by allowing 8 bits per pixel without doubling the framebuffer RAM usage.
In this release, I also leverage the 8-bit framebuffers to greatly improve performance when sprite palettes are changed mid-frame.
Note that this release does not work in CEmu at the time of this writing. If you want to run the emulator in CEmu, for now you should use the previous release.
Changelog
Changed
- Now using 8 bits per pixel in all display modes, eliminating code for special-casing 4-bit pixels.
- Emulator overlays are horizontally stretched in fullscreen mode, as required by the tearing fix.
Fixed
- Fixed diagonal screen tearing in fullscreen display modes by using VSYNC interface and interlaced scan.
- Greatly improved performance of frame rendering when sprite palettes are changed mid-frame.
TI-Boy CE Alpha v0.2.0b
This is a minor bugfix update to v0.2.0a, which fixes occasional freezes in some games like Donkey Kong Land as well as some potential runtime errors.
Changelog
Fixed
- Fix a game freeze occuring in certain conditions after a delayed EI is followed by a HALT. Fixes Donkey Kong Land.
- Fix a likely runtime error when a memory access instruction reads an I/O register and later reads other memory.
TI-Boy CE Alpha v0.2.0a
This is a minor bugfix update to v0.2.0 which fixes occasional runtime errors when loading auto save states for RTC cartridges.
Changelog
Fixed
- Fix an intermittent code corruption when loading RTC save states.
TI-Boy CE Alpha v0.2.0
As a culmination of the last two years of work, finally a new TI-Boy CE release is available!
The primary focus has been performance and accuracy improvements, fixing all reported game issues and improving playability of many games such as Pokémon Gen 2. There are also some user experience improvements, such as per-game configuration support and improved colorization.
Upcoming development will be focusing on Game Boy Color support.
Update (12/8/2021): Fixed a recent change which was undertested and broke cartridge RAM access on some games. Please redownload if you already downloaded.
Changelog
Added
- Per-game configuration settings.
- Backlight adjustment hotkeys.
- Classic Game Boy palette option.
- Color adjustment option to more closely match a GBC screen when colorizing.
- Configurable confirmation dialog for loading and/or overwriting save states.
- Ability to delete save states and ROM files through the emulator menu.
- Ability to unmap most emulator hotkeys.
Changed
- Darkened menu background color to improve text contrast.
- Load State option is no longer shown for state slots that do not exist.
Fixed
- Majorly improve performance in many games. Notably, Pokémon Gold and Silver now run at playable speeds.
- Refactor cycle counting and event scheduling to speed up branches and avoid speculative event schedules.
- Bind cycle offsets to memory access instructions dynamically, rather than using a fixed-size cache.
- Make address mapping cache use bucket-based linear lookup instead of binary search.
- Speed up callstack caching by tracking aggregated memory bank deltas using the bank switches themselves.
- Create a dynamic PPU state machine that caches LY and STAT register values with expiration times.
- Use tables of overlapped pixel data to speed up Game Boy VRAM writes and native palette generation.
- Speed up VRAM caching up to 2x by deferring pixel generation until the second byte is written.
- Queue BGP writes to handle at end of frame, allowing the maximum number of scanlines to use native palettes.
- Potentially fix white screen issue on Python models by reinitializing hardware on emulator start.
- Improve double-buffering logic, fixing occasional display of incomplete frames when frameskip is disabled.
- Implement bounds checking and full memory side effects on stack accesses. Fixes emulator glitches and crashes in many games.
- Implement MBC RAM protection. May help prevent cartridge save corruption in the case of game bugs or crashes.
- Prevent the emulator from freezing if a game turns the LCD on and off repeatedly.
- Add simple support for APU enable/disable and channel length counters.
- Implement delayed update of IME flag when an EI instruction is executed.
- Implement emulation of the CPU's HALT bug. Fixes a game crash in The Smurfs.
- Support changing interrupt target during dispatch. Fixes a game crash in Pinball Deluxe.
- Implement STAT interrupt blocking behavior. Fixes a game crash in Joust.
- Support executing instructions overlapping memory regions. Fixes emulator crashes in FIFA 2000 and Hyper Lode Runner.
- Skip rendering the first frame after the LCD turns on to avoid glitch frames. Fixes a graphical glitch in Tetris Blast.
- Use correct window triggering behavior (window is active after LY==WY). Fixes a graphical glitch in Tetris Blast.
- Catch up rendering on VRAM writes. Fixes a graphical glitch in V-Rally Championship Edition.
- Support mid-frame sprite palette changes. Fixes a graphical glitch in V-Rally Championship Edition.
- Fix mid-frame sprite size changes. Fixes a graphical glitch in the dmg-acid2 test ROM.
- Improve accuracy when fast-forwarding LY-based waitloops, and add support for STAT-based waitloops.
- Emulate differing flag outputs of RLA/RRA/RLCA/RRCA/CCF. Fully passes Blargg's cpu_instrs test ROM.
- Implement many timing and accuracy improvements for MBC, PPU, timer, serial, DMA, and RTC to pass test ROMs.
TI-Boy CE Alpha v0.1.3
WARNING: TI has removed assembly program support as of OS version 5.5 and up. Do NOT upgrade your OS for now if you want to use TI-Boy CE. I cannot provide support for this problem if you upgrade.
This is a minor bugfix release to support the changed hardware in new calculator models (Revision M).
If you have a new calculator and have been experiencing a hang when loading ROMs, please update to this version.
Update (8/24/2019): Fixed an issue occurring on Python Edition after using Python app, redownload if encountering this issue
Changelog
Fixed
- Updated hardware accesses to support new (Revision M) calculators, including the TI-83 Premium CE Edition Python.
TI-Boy CE Alpha v0.1.2a
This is a minor release to update the converter executables; the emulator itself is the same as Alpha v0.1.2.
If you're running a version of Windows prior to 10 without recommended updates, you may need to install the Universal C Runtime to use these converters. (If you only use the web converters, you don't need to worry about this.)
Changelog
Fixed
- Updated ROM converter to respect a new AppVar size limitation on OS 5.3.5 (at this time, only on TI-83 Premium CE).
- Dynamically linked the converter EXEs against the Universal C Runtime, avoiding false positives on many antivirus engines.
TI-Boy CE Alpha v0.1.2
Here's another release of TI-Boy CE, which mainly has UI improvements and bug fixes. In addition to a restructured ROM list and save state hotkeys, there are various compatibility and performance improvements.
Update (2/17/2019): Added a small change fixing a missing Back button in the Graphics Options, and recompiled the save converter with static runtime to avoid missing DLL errors. Please redownload the release if you're experiencing these issues.
Update 2 (4/2/2019): Some antivirus programs (and by extension Firefox) seem to have flagged this release as malware (specifically due to the save converter). I'm certain that's a false positive; however, for the more cautious of you, I've uploaded another zip file without the converters, and you can use the web-based converters instead.
Changelog
Added
- Save file converter between binary and AppVar formats.
- A launcher icon and description for shells such as Cesium.
- Overlay messages for state saving and loading (can be disabled).
- Hotkeys for quickly selecting the current state slot and saving or loading states.
Changed
- Updated ROM list, now integrated into the emulator menu system and sorted alphabetically by title.
- Refactored LCD mode switching and error handling, for smoother transitions between screens.
- Cleaned up the skin image, thanks ndye!
Fixed
- Fix some cycle counting glitches related to serial port hardware.
- Only trigger a STAT interrupt on LYC write if the value changes. Fixed a graphical glitch in Kid Icarus: Of Myths and Monsters.
- For RETI, count cycles before attempting to schedule an interrupt. Fixed a graphical glitch in Kid Icarus: Of Myths and Monsters.
- Load the ROM again from the beginning after archiving a file. Fixed a game title display glitch if a Garbage Collect occurred.
- Use an asm_data_ptr to track the ROM title. Fixed a game title display glitch if the metadata file is unarchived.
- Refactor JIT flushing logic; force a flush after two cache flushes. Fixed a continuous performance drop in certain scenarios.
- Schedule the initial event one cycle after the loaded state. Prevents state save/load from triggering the same event twice.
TI-Boy CE Alpha v0.1.1
Here's a new release of TI-Boy CE, which mainly has bug fixes. It's recommended to update ASAP because it fixes a crash that could potentially affect any game.
Changelog
Added
- Support for loading ROMs up to 4MB, increased from 2MB.
- Key names for TI-83 Premium CE in the control options.
Changed
- Display the paletted white-equivalent color when the Game Boy screen is off, rather than pure white.
- Rearrange the emulator menu and reset the main menu option after (re)starting a game.
- Output ROM converter errors to the standard error stream.
Fixed
- Fix sprites not displaying when an OAM DMA transfer is initiated mid-frame.
- Check for the RET instruction returning to a different ROM bank than its corresponding CALL.
Fixes some crashes in specific games (e.g. Street Fighter II). - Prevent a JIT overflow from overwriting the code path to the flush handler when decoding a banked CALL.
Fixes some erratic crashes.
TI-Boy CE Alpha v0.1.0
This is the first preview release of TI-Boy CE. This emulator is currently in the alpha state, so while it is intended to be stable, it is possible that it could crash and cause data loss. It is advised to put any important files in Archive memory before running the emulator.
Currently only the original Game Boy is supported, no Game Boy Color (and never Game Boy Advance).
In addition to the included Windows executable, the online ROM converter may be used to convert ROM files into TI AppVars.