Graphics Rendering (Neo Geo AES)
When you get issues with the Neo Geo not rendering correctly it is good to know how the screen generally renders.
The Neo Geo has various layers and graphics overlays.
A great site for much more technical details is https://wiki.neogeodev.org/īģŋ
The fix layer is a tile-based layer, which supports transparency and always overlaps sprites.
The fix layer is non-scrollable. It is often used for text, HUDs, scores and health bars.
The tiles are 8x8 pixels. They can be grouped into meta-tiles of 16x16 and 32x32.
The tiles are stored in the S ROM (Static ROM).
In some MVS systems, there is a DIP32 IC labelled SFIX (System FIX) ROM. It is a 64KiB or 128KiB ROM containing the default fix layer tileset loaded into S ROM and used to display menus and text when no cartridge is inserted.
As well as the LSPC handling the fix layer, the NEO-B1 handles the fix layer and reads in the FIXDC pins from the cartridge slot directly.
The sprites are all drawn below the fix layer. This is for everything else including backgrounds, characters, objects, bullets, effects and anything else that is not on the fix layer.
Sprites are stored in the C ROMs.
Sprites are made of tiles (called characters) from the C ROMs on the cartridge.
Tiles are always 16x16 pixels in size and can contain 15 colors (the color index 0 is used for transparency).
When combined (Fix + Sprite Layers) you end up with the final image.
The L0 ROM is a 64KiB (or 128KiB with A16 tied to ground) ROM chip.
It is either a DIP28 TC531000, a SOP32 TC531001 or integrated into the NEO-GRC2 (on M1VS and CDZ for example).
The L0 ROM stores byte values used by LSPC to shrink sprites vertically.
Faults in the L0 ROM lead to vertical stretching or shrinking issues.
It is useful to understand where some of the data, address and control pins go to from the cartrige and how they relate to the graphics.
The P Bus (labelled PCx on schematic nets) is the C ROM (Sprites) and S ROM (Fix Layer) addresses going between the cartridge slot and LSPC, as well as several other places.
The P Bus is a multiplexed address lane that has the C ROM And S ROM addresses and goes to the LSPC Px pins.
The address and data pins for the cartridge (labelled ACx and DCx on the schematic nets) go to the 68k as well as the LSPC Ax and Dx pins.
The fix layer data pins from the cartrigde (labelled FIXDCx on the schematic nets) go to the NEO-B1 which is the graphics processor for the fix layer.
The LSPC / LSPC2 is the Line SPrite Controller. It is responsible for generating S ROM, C ROM and L0 ROM addresses based on current display line and VRAM content.
As well as this is also generates Sync output, talks to the NEO-B1, generates 68k IRQs and handles 68k VRAM access arbitration.
The P Bus, 68k Data/Address pins and many other pins from the cartridges all go to the LSPC.
Here are a few more examples of the fix layer and sprite layers separated, and then the final image.
This is from Metal Slug X on the MVS.
And another one in game.
īģŋ