Skip to content

Notes and Limitations

MenTaLguY edited this page Jun 1, 2014 · 3 revisions
Clone this wiki locally
  • 256×244 pixel display
  • 16k VRAM
  • 64 colors total
  • max 31 simultaneous colors (16 background, 15 sprite)
  • 40×25 and 32×28 text modes
  • 32×32 tile background, 8×8 pixel tiles
  • 64 8×8 sprites, max 8 per scanline

Nothing is displayed by default. To be shown, the
background layer (and the sprite, in graphical modes) must
be explicitly enabled by setting bit 2 (bit 3 for sprites)
of register $7FF8.

Patterns and name tables may overlap in memory (which is
in fact unavoidable in graphics modes); typically you
cannot have simultaneously valid pattern and name data at
the same location, so in such cases you will need to
sacrifice particular name or pattern entries.

In text modes, you will need to load your own font into the
pattern table; the VDU does not provide one by default.

Sprites patterns are always 4bpp, even in the 2bpp mode.
In Graphics A, one half of VRAM is occupied by 512 2bpp
patterns (for the background), and the other half by 256
4bpp patterns for sprites. In Graphics B, the entirety
of VRAM is occupied by just 512 4bpp patterns, with the
upper half of those available to sprites.

When scrolling horizontally, the leftmost background
column will not be displayed if it is partway offscreen,
a (mis)feature shared with the Sega Master System.

Unlike most authentic 8-bit systems, any register or memory
location may be changed in between scanlines, including the
vertical scroll register and even the video mode. This
permits fairly powerful split-screen effects.

Also unlike most authentic 8-bit systems, Retrograph uses a
packed rather than a planar representation for pattern

Lastly, unlike a real 8-bit system, there is no deadline
imposed on code running in between scanlines or in between
frames. On real hardware, if you have code running
in between scanlines (that is, during horizontal retrace)
you will only have a short period of time available before
the next scanline will begin rendering, whether or not you
are finished what you are doing. However, such a
limitation would be very difficult to recreate in Ruby.

Something went wrong with that request. Please try again.