bbbbbr

bbbbbr

@bbbbbr.bsky.social

Scrapper. Napper. Occasional bit pusher - Game Boy games & Carts: (Wordyl, Petris, QR-Paint, etc) - GBDK dev team member - MegaDuck shill

879 followers455 following971 posts

@kasami.bsky.social Before I try and grind through writing one of my own, do you know of any hand-written midi to loopy converters? I guess preferably for the bios format and translating the instruments, though not yet sure if I'll end up rolling my own playback (as happened with vsync).

A month+ of work later and Petris for the #casioloopy has reached a reasonably playable state. Plenty of work remains (sfx, music, high scores, etc), but it seems solid and playable enough now to share a preview build. I've put the ROM up on itch: bbbbbr.itch.io/petris-casio...

bbbbbr.itch.ioPetris for the Casio Loopy console by bbbbbrA Game Boy Color puzzle game of shapely pets for the Casio Loopy console
bbbbbr@bbbbbr.bsky.social

The #Petris port to #CasioLoopy console becoming very playable. Feels good to cross that threshold. Still lots of jank and polish needed. The (incomplete) frog border evolved out of re-using shrub tiles & need to fill extra screen space compared to Game Boy Color. Might try for various pet borders.

With support for fades in place I brought over the Petris "Seasonal colors schemes" it fades between once every 5 levels. In this case I'm triggering the fades manually with a button. Had to re-add an outline around the font so that it remained readable across all the color variations. #casioloopy

bbbbbr@bbbbbr.bsky.social

Now have smooth palette fades working in Petris for the #casioloopy. (video tearing is emu + linux 馃槄) Instead of using Bresenham's algorithm as in the GBC version, decided to try 5.5 fixed point per R/G/B. Can pack all the bits for a color into a single u32, which is the cpu's register size.

Now have smooth palette fades working in Petris for the #casioloopy. (video tearing is emu + linux 馃槄) Instead of using Bresenham's algorithm as in the GBC version, decided to try 5.5 fixed point per R/G/B. Can pack all the bits for a color into a single u32, which is the cpu's register size.

The fixed point version is packed like this: RRRRRrrrrrxGGGGGgggggxBBBBBbbbbb A cool thing is the fade steps for R,G,B are done all at once in a single add: palette_cached[c] += palette_increments[c]; // Mask bits that rolled over between the channels palette_cached_[c] &= PALETTE_INCREMENT_MASK;

Finally had time to do some dev work and implement this. Just the timer part to track safe vram access in vblank did the trick for now. No vram snow and fast enough. In the screenshot safe-ish vram timing is colored Green (vs yellow) in the backdrop area outside the image.

bbbbbr@bbbbbr.bsky.social

Thought about it today on a ride and realized a better solution might be setting a timer for near the end of vblank and use that to signal the end of safe vram access. And maybe following the lead of the bios and having a dma queue (but putting it in the vblank interrupt).

The one aspect of #CasioLoopy dev that's a pain is CPU takes priority over VDP for VRAM access. Which seems to mean VDP can't update scanline counter if you try to busyloop read it for safe VRAM access. Annoying to work around and more so trying to avoid vram snow. A step down coming from Game Boy.

Thought about it today on a ride and realized a better solution might be setting a timer for near the end of vblank and use that to signal the end of safe vram access. And maybe following the lead of the bios and having a dma queue (but putting it in the vblank interrupt).

The emu interrupt situation did improve, so now I can bring over the classic petris skullcat intro scanline effect.

bbbbbr@bbbbbr.bsky.social

In the quest (hopefully not futile) to use a single vblank interrupt source across most #casioloopy emus (can't right now), I wrote a test ROM for it. Not sure emu maintainers, who have their own things to do, will use it. I've done some emu work but am not good at it. github.com/bbbbbr/loopy...

The one aspect of #CasioLoopy dev that's a pain is CPU takes priority over VDP for VRAM access. Which seems to mean VDP can't update scanline counter if you try to busyloop read it for safe VRAM access. Annoying to work around and more so trying to avoid vram snow. A step down coming from Game Boy.

Ofc could be wrong in my understanding of how these things all interact, but that's what appears to be happening. This doesn't apply to bitmap vram, but I love tiles and sprites.

In the quest (hopefully not futile) to use a single vblank interrupt source across most #casioloopy emus (can't right now), I wrote a test ROM for it. Not sure emu maintainers, who have their own things to do, will use it. I've done some emu work but am not good at it. github.com/bbbbbr/loopy...

Was trying to get nmi and irq0 interrupts working (for vblank shadow oam copy) and dabbled with hblank some. Stumbled across this nice twisty bar effect. Camera footage since emus I can run don't support the interrupts 馃ゲ. New loopy MiSTer core handles it reasonably well (little jitter aside)

The #Petris port to #CasioLoopy console becoming very playable. Feels good to cross that threshold. Still lots of jank and polish needed. The (incomplete) frog border evolved out of re-using shrub tiles & need to fill extra screen space compared to Game Boy Color. Might try for various pet borders.

We have pets, and they are gettin' long! Scrapped and redid half my porting changes to the #Petris gameplay logic. Way cleaner and working gameplay came together much faster. Obvs still screen cleanup and game notification porting to do, but that should be more straightforward. #casioloopy #loopy

The legendary #Workboy found a new home! I ported the ROM to work on the #MegaDuck laptop (a #GameBoy clone). Not the hardware we wanted, but...it's hardware that exists! Keyboard, Real Time Clock and all. Free #DuckDuckWorkboy #rompatch on the itch page: bbbbbr.itch.io/mega-duck-pa... #romhacking

Looking back, this project took 2 years to finish with many unmotivated interludes.馃槄 The most enjoyable part was figuring out the asm code and labeling it, an oddly relaxing and zen-like activity. Satisfying when guesses turn out true. Source btw github.com/bbbbbr/megad...

bbbbbr@bbbbbr.bsky.social

Have also been working on a disassembly of the #GameBoy #WorkBoy ROM for.... reasons 馃槃 馃槃

Petris Title and Settings screens progress on #CasioLoopy. Two layers of parallax semi-transparent clouds and sine text wiggle. Settings logic came over with minor changes. With more #gbdk api compat done porting is going faster. Turning out to be a pleasant console to dev on. #retrogaming #loopy

(From last week) ~Full RGB444 rendering on the #casio #loopy using blend mode. Hardware palette is 256 colors, but also has 2 "screen" layers that can be blended. So I put the Blue channel on one screen (1 pal) and Red X Green (15 pals) on the other. Output looks good! About 4k colors. #casioloopy

Forgot alt text 馃檭 Image1: Screenshot of a casio loopy console emulator showing a rainbow like rgb gradient image. Image2: Screenshot of a casio loopy console emulator showing a photograph of 3 colorful parrots sitting on a fence with a city street in the background.

(From last week) ~Full RGB444 rendering on the #casio #loopy using blend mode. Hardware palette is 256 colors, but also has 2 "screen" layers that can be blended. So I put the Blue channel on one screen (1 pal) and Red X Green (15 pals) on the other. Output looks good! About 4k colors. #casioloopy

Seen discussion scanline palette updates maybe possible too (like "hicolor" on GBC) plus rgb555 range. Looking forward to trying that eventually. Not yet sure how many colors could be updated and whether sprites on a line would reduce that. Tradeoff is more overhead vs none for blend once loaded.

(From last week) ~Full RGB444 rendering on the #casio #loopy using blend mode. Hardware palette is 256 colors, but also has 2 "screen" layers that can be blended. So I put the Blue channel on one screen (1 pal) and Red X Green (15 pals) on the other. Output looks good! About 4k colors. #casioloopy

Ran into glitches running port in progress on real loopy hardware. Issue was not present in the emulator. My mistake was loading tile data w/ 8 bit access, vram seems to require 16 bit access. 16 is faster anyway until I start using DMA. Made a small test ROM for that scenario. #casioloopy

A funny thing about porting from Game Boy to a console with a higher res screen is figuring out what to do with all the extra space. In this case playing around with a nicer font and more background on the options screen. Time and experience help too. Font is BoldPixels by @yukipixels.bsky.social

Seems like half the time I spend learning to write homebrew for a new console is making idiosyncratic tooling... Compact non-python ones must be out there, maybe just hard to find? Ended up writing a little console RGB color bit depth reducer for PNGs.

The legendary #Workboy found a new home! I ported the ROM to work on the #MegaDuck laptop (a #GameBoy clone). Not the hardware we wanted, but...it's hardware that exists! Keyboard, Real Time Clock and all. Free #DuckDuckWorkboy #rompatch on the itch page: bbbbbr.itch.io/mega-duck-pa... #romhacking

Thanks to: - Liam Robertson's research and documentary ( @liamrobertson.bsky.social ) - LIJI whose Same Boy emulator I based my MegaDuck research fork on, and Workboy reference code - The #MegaDuck community for motivation to finally finish this beast!

New release of #SuperJuniorSameDuck (my fork of SameBoy with #MegaDuck laptop support) - Support ".md2s" file extension (MD2 mapper + SRAM) - Preserve VRAM on "Load Cart From Slot" command, allows ROMs to detect whether they are running on Spanish vs German laptop model github.com/bbbbbr/Super...

github.comRelease SuperJuniorSameDuck v1.0.2 路 bbbbbr/SuperJuniorSameDuckSuperJuniorSameDuck v1.0.2 Changes Added support for .md2s file extension that automatically enables SRAM for MD2 mbcs without requiring --duck-sram-cart Added MBC5 detection from filename Ad...

Found a hidden treasure in #GameBoy #Workboy ROM (looking for Bank 0 free space) Menu shown when run without keyboard connected has hidden "Backup Options" entry. To reveal search for "ITCMRT" in phone app (cart sram must be init-ed). Appears to Dump/Restore cart SRAM to keyboard over link port.

No idea what the Significance of "ITCMRT" is... Maybe my above post is new info for you? @liamrobertson.bsky.social Backup screen is very minimal. Based on asm code, then connect workboy and ?maybe? press "R" (read SRAM from keyboard) or "S" (send SRAM to keyboard) to trigger the backup action.

New release: little #GameBoy and #MegaDuck on-console memory hex viewer / editor. Made it for inspecting save data on the Duck Laptop where the SRAM can be on a separate cart than the ROM. Possibly of use for casual Game Boy memory peeking and poking too. github.com/bbbbbr/gameb...

Made a source-patch #MegaDuck port of the recent #Celeste Classic #GameBoy version by Rous/joshop. Playable and fun even on blurry oem screens. bbbbbr.itch.io/megaduck-cel... Patch and binary made and shared with permission, only needed minor edits to get it running on the good duck. #retrogaming

Taking a short break from main project for a quick afternoon #MegaDuck port of someone else's new (open source) homebrew Game Boy game. Only minor changes required to get it running. Hope to be able to release it soon. Surprisingly playable on laptop model considering blurry low contrast screen.

Poll results are in! Mostly the same as 2024. (Whats MAIN way people play #GameBoy / Color games) Combined results from Mastodon, Bluesky, and barely any Twitter this year. Very un-scientific and un-rigorous! 馃槄 #gbdev #gameboycolor #retrogaming #gbdk #gbstudio #rgbds

bbbbbr@bbbbbr.bsky.social

Been few years, return of GB Screen poll! What's MAIN way you play #GameBoy /Color games? Curious since supporting OEM screen takes effort for devs. No bsky poll, choose a number! 1. GB +Unmodded OEM Screen 2. GB +IPS mod screen 3. Handheld Emulator/FPGA 4. Desktop/Phone Emulator 5. SGB/GBPlayer

bbbbbr reposted

Been few years, return of GB Screen poll! What's MAIN way you play #GameBoy /Color games? Curious since supporting OEM screen takes effort for devs. No bsky poll, choose a number! 1. GB +Unmodded OEM Screen 2. GB +IPS mod screen 3. Handheld Emulator/FPGA 4. Desktop/Phone Emulator 5. SGB/GBPlayer

Been few years, return of GB Screen poll! What's MAIN way you play #GameBoy /Color games? Curious since supporting OEM screen takes effort for devs. No bsky poll, choose a number! 1. GB +Unmodded OEM Screen 2. GB +IPS mod screen 3. Handheld Emulator/FPGA 4. Desktop/Phone Emulator 5. SGB/GBPlayer

Ported rilden's (web) image palette reducer to a command line app, easier to use in project build toolchains. Great for making images fit game console Tiles x N Palette x N Color limits github.com/bbbbbr/tilep... Original here: rilden.github.io/tiledpalette... #retrogaming #gameboy #nes #megadrive

github.comRelease tilepalquant 0.9.8 路 bbbbbr/tilepalquanttilepalquant version 0.9.8 Initial release porting rilden's JS tiledpalettequant to C++ Most features and options are carried over. The changes are: Deterministic output instead of varying each ru...

Someone mentioned qualetize, another tile based palette reducer. Has command line & GUI version. Generally good quality, though in brief testing for GBC limits there were more tile edge seams and output image quality didn't quite match rilden's. github.com/Aikku93/qual... github.com/ulalume/qual...

github.comGitHub - Aikku93/qualetize: Tile-based Image Quantization ToolTile-based Image Quantization Tool. Contribute to Aikku93/qualetize development by creating an account on GitHub.

Ported rilden's (web) image palette reducer to a command line app, easier to use in project build toolchains. Great for making images fit game console Tiles x N Palette x N Color limits github.com/bbbbbr/tilep... Original here: rilden.github.io/tiledpalette... #retrogaming #gameboy #nes #megadrive

github.comRelease tilepalquant 0.9.8 路 bbbbbr/tilepalquanttilepalquant version 0.9.8 Initial release porting rilden's JS tiledpalettequant to C++ Most features and options are carried over. The changes are: Deterministic output instead of varying each ru...