Skip to content

Releases: Staacks/gbinterceptor

v1.2.0: MJPEG, 60fps and Apple compatibility

05 Aug 18:53
Compare
Choose a tag to compare

Thanks to @Ikadzuchi's brilliant suggestion for a simplified method to encode MJPEG (see #17) and @kkitayam's implementation of bulk transfer mode for the USB Video Class in Tiny USB this release implements lossless MJPEG video instead of the original raw NV12 encoding. This in particular introduces two major features:

  • True 60fps (well, the exact frame rate that the Game Boy delivers, so something like 59.7Hz)
  • Full Apple compatibility (Intel-based Macs have been working before, but now M1/M2-based ones seem to be happy as well)
  • Overall better compatibility with software, in particular with many more Android apps than before.

The GB Interceptor now supports 30fps and 60fps, which can be set in the source settings of most host software. Note that 30fps offers a standard MJPEG stream that should work in every software, while the 60fps mode sends a stream of grayscale JPEGs, which technically is not part of the USB Video Class standard and might not be supported everywhere.

To OBS users: The current version 29.1.3 of OBS only supports the 30fps version, but I have submitted a patch to support the Interceptors's 60fps which has been accepted and should be part of the next OBS release.

All this comes with some drawbacks, which I think are a minor inconvenience at best and which should be fixable in post or the streaming software (i.e. OBS):

  • Green mode is only available in 30fps mode.
  • Because of Ikadzuchi's trick, the host device sees an image that is scaled up by a factor of 8, i.e. 1280x1152. (Since this is still less than typical FullHD, most host devices should handle this without a problem and be able to scale it back down if required.)
  • Frame blending is now limited to blending two subsequent frames in equal parts (which looks better in most flicker-transparancy situations anyway - as before you can disable it with the button next to the LEDs).
  • Contrast is slightly reduced (easily fixed in post or OBS).

Changelog regarding game compatibility:

  • Fix STAT interrupt synchronization freezes screen if triggered when jumping back to LY = 0. (Fixes freeze in cutscenes of Trip World and probably many others.)
  • Fix STAT interrupt triggered by the STAT interrupt bug that occurs on monochrome Game Boys, but not on GBC or GBA. Fixes Game Boy Camera (and possibly others) on monochrome Game Boys.

To update press and hold the [Flash] button (usually inside your case) while connecting the Interceptor via USB and drag the uf2 file below into its file system.

gbinterceptor_case.zip: I do no longer include the original 3d print designs in the release, in order to point you to improved versions from the community. If you prefer the original, you can download the STLs from the repository.

v1.2.0-beta3: The best of two worlds...

08 Jul 21:27
Compare
Choose a tag to compare
Pre-release

If you followed the previous beta releases (see v1.2.0-beta2 for details) you know that the current dilemma is that 60fps can be achieved by sending a monochrome MJPEG stream, which is not compatible with every software (i.e. OBS), but including color channels has too much overhead to reach 60fps.

So this version gives you a choice:
It defaults to 30fps, which should be compatible with almost any software and in fact only sends every second frame from the Game Boy. If you however select 60fps instead in your host software, it will send every frame without a chroma channel.
The standby screen always uses a color channel (no 60fps here), warning the user if 60fps is selected.

Other changes since 1.2.0-beta2:

  • Fix STAT interrupt synchronization freezes screen if triggered when jumping back to LY = 0. (Fixes freeze in cutscenes of Trip World and probably many others.)
  • Fix STAT interrupt triggered by the STAT interrupt bug that occurs on monochrome Game Boys, but not on GBC or GBA. Fixes Game Boy Camera (and possibly others) on monochrome Game Boys.

v1.2.0-beta2: OBS and Windows fix

04 Jul 22:02
Compare
Choose a tag to compare
Pre-release

(This is a fix for the previous beta1 for OBS and Windows compatibility. Unfortunately, it has to sacrifice some bandwidth and no longer reaches 60fps. But it brings back green mode.)

Thanks to @Ikadzuchi's brilliant suggestion for a simplified method to encode MJPEG (see #17) and @kkitayam's implementation of bulk transfer mode for the USB Video Class in Tiny USB this release implements lossless MJPEG video instead of the original raw NV12 encoding. This in particular introduces two major features:

  • Almost 60fps (something around 56fps, not quite there)
  • Full Apple compatibility (Intel-based Macs have been working before, but now M1/M2-based ones seem to be happy as well)
  • Overall better compatibility with software, in particular with many more Android apps than before.

However, this comes with some drawbacks, which I think are a minor inconvenience at best and which should be fixable in post or the streaming software (i.e. OBS):

  • Because of Ikadzuchi's trick, the host device sees an image that is scaled up by a factor of 8, i.e. 1280x1152. (Since this is still less than typical FullHD, most host devices should handle this without a problem and be able to scale it back down if required.)
  • Frame blending is now limited to blending two subsequent frames in equal parts (which looks better in most flicker-transparancy situations anyway - as before you can disable it with the button next to the LEDs).
  • Contrast is slightly reduced (easily fixed in post or OBS).
  • Serial interface has been dropped (as far as I know only I use it for debugging and it interfered with bulk transfer speed).

Please be aware that this here is a test version that I would not recommend for a new build when you are not yet sure if your Interceptor is working correctly. However, if you already have a working Interceptor, please test this version and report back if it works for you! Changing to MJPEG and bulk transfer are major changes from a technical point of view and I cannot test all combinations before placing this in the official release.

In particular I would like to get feedback on:

  • Mac compatibility
  • Compatibility with your workflow and the software you use
  • Super Game Boy compatibility (since it runs a bit faster than 60fps and I do not have one to try it)

Game compatibility should be the same as before.

v1.2.0-beta1: 60fps and Apple compatibility

02 Jul 17:40
Compare
Choose a tag to compare

This version has severe compatibility issues (the irony) on Windows and OBS.
Please use the newer beta2 instead

Original release notes Thanks to @Ikadzuchi's brilliant suggestion for a simplified method to encode MJPEG (see #17) and @kkitayam's implementation of [bulk transfer mode for the USB Video Class in Tiny USB](https://github.com/hathach/tinyusb/pull/1985) this release implements lossless **MJPEG** video instead of the original raw NV12 encoding. This in particular introduces two major features:
  • True 60fps (well, the exact frame rate that the Game Boy delivers, so something like 59.7Hz)
  • Full Apple compatibility (Intel-based Macs have been working before, but now M1/M2-based ones seem to be happy as well)
  • Overall better compatibility with software, in particular with many more Android apps than before.

However, this comes with some drawbacks, which I think are a minor inconvenience at best and which should be fixable in post or the streaming software (i.e. OBS):

  • Green mode is no longer available (might technically be possible, but would be a bit of a headache and filters in post should give better results anyway)
  • Because of Ikadzuchi's trick, the host device sees an image that is scaled up by a factor of 8, i.e. 1280x1152. (Since this is still less than typical FullHD, most host devices should handle this without a problem and be able to scale it back down if required.)
  • Frame blending is now limited to blending two subsequent frames in equal parts (which looks better in most flicker-transparancy situations anyway - as before you can disable it with the button next to the LEDs).
  • Contrast is slightly reduced (easily fixed in post or OBS).

Please be aware that this here is a test version that I would not recommend for a new build when you are not yet sure if your Interceptor is working correctly. However, if you already have a working Interceptor, please test this version and report back if it works for you! Changing to MJPEG and bulk transfer are major changes from a technical point of view and I cannot test all combinations before placing this in the official release.

In particular I would like to get feedback on:

  • Mac compatibility
  • Windows compatibility (being a Linux guy I have not tested it)
  • Compatibility with your workflow and the software you use
  • Super Game Boy compatibility (since it runs a bit faster than 60fps and I do not have one to try it)

Game compatibility should be the same as before.

v1.1.0: Game detection and game-specific fixes

04 Feb 23:45
Compare
Choose a tag to compare

This release introduces game detection allowing for game-specific fixes. It also introduces generic fixes that will certainly improve and fix games that are not even listed here.

  • Game-detection including a (mostly automatically generated) database of 1400 hashes.
  • Game-specific fixes for
    • Alien vs. Predator
    • Batman the Animated Series
    • Battletoads
    • Battletoads in Ragnarok's World
    • Battletoads Double Dragon
    • Bonk's Adventure
    • Fighting Simulator
    • Kirby's Dreamland 2
    • Mole Mania
    • Samurai Shodown
    • Tetris 2
    • Teenage Mutant Ninja Turtles - Fall of the Foot Clan
  • Fix for carry flag for SBC instruction (fixes big mess in Battletoads but might fix other games, too)
  • Limit stat register to report mode 0 and 1 only due to limited PPU emulation precision. This fixes Chase H.Q. and possibly others.
  • Fix half-carry bit for several opcodes. (Fixing Killer Instinct and possibly others.)
  • Fix rendering of window if it is enabled mid-frame. Fixes text banners in Samurai Shodown and quite certainly window effects in other games.
  • Slightly change interrupt detection to not require a PC jump. This fixes the crash at the end of level 1 in Tiny Toons - Babs' Big Break and hopefully does not introduce problems in other games.
  • Wait longer for return instruction after DMA before giving up. Fixes Dr. Franken.
  • Add a lower frame blending option and use this as default as a compromise between ghosting effects and broken transparency effects.
  • USB descriptor gets a unique serial number from the flash chip. This will lead to multiple Interceptors becoming distinguishable by the host system. This might also mean that you need to add and configure it again in your host software.

To update press and hold the [Flash] button (usually inside your case) while connecting the Interceptor via USB and drag the uf2 file below into its file system.

gbinterceptor_case.zip: I do no longer include the original 3d print designs in the release, in order to point you to improved versions from the community. If you prefer the original, you can download the STLs from the repository.

v1.0.4: Fix Game Boy Pocket and seemingly deficient Interceptors

15 Jan 23:02
Compare
Choose a tag to compare

This release fixes many problems with the Game Boy Pocket and problems with PCBs that seem to not work with previous versions. If you had an Interceptor that seemed to be faulty compared to others, please read on.

  • Fix: Erratic clock timing measurement on Game Boy Pocket, causing problems in many games
  • Fix: Interceptor does not start after power cycle on some boards. If you have a board that seems to work after uploading the firmware, but stops working after you unplugged and reconnected it, this will quite certainly fix it. This occurs on boards on which the crystal oscillator takes a bit longer to settle. This can simply be the consequence of manufacturing tolerances and seems to occur in roughly 1 out of 20 Interceptors. This fix simply waits a few milliseconds longer, which should have no negative side effect whatsoever.

To update press and hold the [Flash] button (usually inside your case) while connecting the Interceptor via USB and drag the uf2 file below into its file system.

v1.0.3: On-screen-display and more game fixes

11 Jan 22:44
Compare
Choose a tag to compare

This release introduces an on screen display that will also come in handy for upcoming futures. Of course, there are also a few fixes.

  • Add on screen display to indicate if frame blending is on or off and default to off on start
  • Fix: Only check consistency of stack pointer against addresses on the bus if it is not pointing at VRAM because these adresses are not trustworthy on the DMG (fixes Pokemon red/blue on the DMG and probably many other games on the DMG).
  • Fix: Duplicate detection after immediate return from halt fails in some cases (Fixing Pokemon yellow and maybe few other games).
  • Limit allowed allowed framerate steps to fix issues with apps that freeze otherwise.
  • Show version on standby screen.

To update press and hold the [Flash] button (usually inside your case) while connecting the Interceptor via USB and drag the uf2 file below into its file system.

v1.0.2: Fix for several games

09 Jan 22:22
Compare
Choose a tag to compare

Usually I would collect a few fixes or features before a release, but the following fix probably affects multiple games:

  • Fix crash for games that reset the div register. (see #7 for an example)

To update press and hold the [Flash] button (usually inside your case) while connecting the Interceptor via USB and drag the uf2 file below into its file system.

v1.0.1: MacOS support, DMG fixes, Everdrive, ...

30 Dec 14:33
Compare
Choose a tag to compare

This release improves MacOS compatibility and fixes several issues on the original Game Boy (DMG). Note that while it now works perfectly on Intel CPU on MacOS, the video seems to be broken on Apple CPUs (probably M1 and M2), but this is only a guess from trying it on one MacBook each (see #1).

  • Improved MacOS support (see #1)
  • Fix several glitches on the original Game Boy (DMG) as it shows a different address on the cartridge bus while it accesses VRAM. (Glitches include garbage tiles in Zelda, unreadable score during pause in Tetris and probably many more.)
  • Allow restart without waiting for the Game Boy to be turned off. (Fixing Everdrive support.)
  • Fix USB frame transmission being initiated outside hblank/vblank (should fix occasionally dropped frames and some minor graphics glitches)
  • More robust detection to resync after a DMA to OAM transfer in cases when the idle loop is not visible on the bus (fixing Donkey Kong Land on DMG)
  • Allow setting arbitrary framerates below 29fps
  • Add PPU sync for tight loops using the STAT register to wait for vblank.
  • Added support for DMA from cartridge. (untested)
  • Output version string when connecting via serial
  • Improved USB descriptors: Device name and calculation of bitrate limits.
  • Due to some additional checks when reading from memory (see DMA VRAM issue above) the rp2040 clock had to be increased further to 250MHz. I hope that I can dial this back when I have some time for optimizations.

Note that in order to build this version from code, you will have to use my TinyUSB branch instead of the Pico SDK version until my fix for MacOS has been merged there.

GB Interceptor first release

16 Dec 15:57
Compare
Choose a tag to compare

This is the initial release. The very first version. Expect bugs and help catching them by reporting them.

Notable known issues:

  • Not working on MacOS (see #1)