Next in the technical posts on the architecture of Batrider Chase!: the PS Vita version.
The Vita runs the same C++ game core as the PS3 version: the decompiled game rebuilt from the Ghidra project, with Chase! Mode, the menus and the extra features on top. The Vita has a quad-core ARM Cortex-A9 at 444 MHz, three cores of which are available to games, and an SGX543MP4+ GPU. So the work here was giving each core its own job and moving the drawing onto the GPU, which runs at its full 222 MHz.
Below is the Vita version diagram.
Sound:
Unlike the N64, nothing is pre-rendered. The Vita runs the original sound board: the Z80 sound program, the YM2151, and both 6295s playing the original ADPCM samples straight from the sound ROMs. To make it fit, the board is split across two cores. The main program and the sound CPU talk to each other constantly, so core 0 runs the Z80 and the chips' timing right alongside the game. It writes down every chip write with the exact sample it happened on. Core 2 has a second YM2151 and pair of 6295s that replay those writes and do the heavy part, generating the waveforms. The output is bit-identical to running the whole board on one core. A feeder thread on core 2 sends 48 kHz stereo to the audio out and keeps 100–150 ms queued, so a busy scene never breaks up the sound.
Graphics:
The tile data is the original ROM, untouched. On the first frame, every 8x8 tile is repacked into 4-bit paletted textures in video memory: 32 pages of 1024x1024, 16 MB. Each of the game's color banks becomes a 16-colour palette. Every frame, core 1 builds a draw list in the arcade's own priority order: the backdrop, the three tilemap layers and the sprites across 16 priority levels, then the text layer. That's 600 to 1,900 textured quads in 10 to 70 draw calls, which the GPU renders into a 320x240 picture. Flips and mirrors cost nothing here because the GPU just swaps texture coordinates, and neighboring tiles of a sprite go out as a single quad. A palette that changes goes into a fresh slot in a ring of 16,384, so color cycling stays exact even while the GPU is still drawing the previous frame.
The GPU then draws the whole screen: the game turned upright and scaled to full height, the Chase! gadget panels down each side, and the wallpaper behind. The gadget panels are composed in spare CPU time a few times a second, and only the rows that changed are uploaded. To keep the GPU's picture pixel-perfect, a low-priority thread redraws every 20th frame on the CPU and compares the two pixel for pixel. If they ever disagree three times, the game switches to CPU drawing for good.
So core 0 runs the main program, core 1 builds the screen, and core 2 handles the sound. The gadget panels and the picture check fill spare time on cores 0 and 1. The game never waits on the picture: if a frame isn't drawn in time it's skipped, and the game and sound keep running at the arcade's 59.6 Hz.
#CoinOpGameStudio #Batrider #Raizing #PSVita