I’d like to wish everyone a belated Merry Christmas! I hope you all had a wonderful holiday. Today marks the release of Snow Bros. - Nick & Tom for the Analogue Pocket and MiSTer FPGA platforms, a beloved arcade cult classic developed by Toaplan during its golden era.
Now you can take this arcade favorite home or enjoy it on the go as you control snowman twins Nick and Tom through 50 action-packed stages, throwing snowballs at monsters, avoiding hazards, and rescuing the princesses Puripuri and Puchipuchi.
Next, we’ll provide a hardware overview and discuss some of the key development challenges that were overcome along the way.
Hardware Information:
Snow Bros. uses a simplistic hardware design, though it had its challenges. The board centers around a Motorola 68000 running at 8 MHz for game logic, inputs, sprite control, and palette management, with sound handled by a Zilog z80 at 6 MHz paired with a YM3812 (OPL2) clocked at 3 MHz.Video is driven entirely by Kaneko’s Pandora sprite renderer, which composes frames from sprites into a framebuffer. The game outputs a 256×224 visible resolution using a 6 MHz pixel clock, producing a 15.625 kHz horizontal scan rate and an approximate 57.445 Hz vertical refresh, with palette-based color and hardware page flipping used for final display.
Development Challenges:
The main challenge had always been interrupt handling and 68000 auto-vector behavior. Multiple interrupt levels are generated from video timing, with IRQs asserted on specific scanlines during horizontal blanking and driven onto the 68K’s IPL lines.Proper sequencing of interrupts, DTACK, and VPA handling, along with clearing them on interrupt acknowledge, was critical to stable execution and ultimately allowed the program to execute and show the post check screens.
After I confirmed that the program was executing and producing video output, I went through the HDL to determine what was causing it to hang during the POST checks, comparing the boot sequence against real hardware since I own the PCB.Toaplan systems typically use color frames to verify the program, sound, and object ROM and RAM. From this comparison, I was able to determine that the hang on the green screen was related to the sound subsystem.Communication between the 68K and z80 relies on a bidirectional sound latch, with the 68K writing commands and triggering an NMI on the z80, and the z80 responding through a return latch. Once the sound latch was implemented correctly, the game was able to progress past the POST sequence.
The next major focus was fixing the graphics pipeline. Initially, sprites were rendered directly into a single framebuffer while also being read for display, which caused visual corruption and stale data to appear. Framebuffer reads were not paged and were vertically unaligned, making it easy to sample incorrect regions of object memory.
I resolved this by implementing double buffering and framebuffer management as required by the original hardware. A page bit was added and toggled once per frame, allowing the Pandora sprite engine to draw into one buffer while the display logic reads from the other.
Each frame now begins with a full buffer clear before sprites are rendered, and framebuffer addressing was corrected to include page selection and vertical offset alignment. With these changes in place, sprite rendering became stable and visually correct, matching expected hardware behavior.
Correcting the Y-flip calculation in the Pandora sprite ROM addressing was the final step needed for a pixel-perfect display, ensuring sprites are fetched and rendered exactly as the original hardware intended.With this fix in place, all sprite orientations display correctly and the remaining visual artifacts are gone. The only feature still missing is screen flip, which will be implemented in a future release alongside high score saving and audio filtering.
Core Options:
For the MiSTerFPGA platform, we have the standard k3-framework options and integrated cheats shown in the video below. Things to note, secret bonus and items persist will not let Nick or Tom advance to the next floor when enabled.Invulnerability is a dip switch and located in the dip switch menu. Do not enable screen flip, it is not implemented. If you do, there will be sprite clipping on the edges.
For the Analogue Pocket platform, relevant dip switches and cheats are displayed. Things to note, secret bonus and items persist will not let Nick or Tom advance to the next floor when enabled. Invulnerability is a dip switch and located in the dip switch section of the menu.
Files are available via update_all for MiSTerFPGA and via pupdate for the Analogue Pocket. Give the updaters time to sync as this was just published. I've also attached todays release and you can download them from our GitHub anytime.Thank you all for your support this year! I plan to close 2025 out with a bang and start 2026 off with some new additions and other revamped cores!We'll see the remaining entries to the revamped Toaplan V1 (Truxton, Hellfire, Outzone, Fire Shark, and Vimina) in the next few days, a new addition with Flying Shark (Twin Cobra Platform), and close out the year with a new core KiKi KaiKai.I have other surprises and announcements in-store, but we'll save them for tomorrow's release!Disclaimer: All product names, trademarks, and registered trademarks mentioned are the property of their respective owners. "Analogue", "Analogue Pocket", "OpenFPGA", "MiSTer", "MiSTerFPGA", "Taito", "Toaplan" and all derivative works are trademarks, registered trademarks, or copyrighted materials of their respective holders. Use of these names does not imply endorsement or association with this post. All rights reserved to their respective owners. This post is for educational and research purposes only.