The following is intended as an overview of how the JoeyLib programming environment works. Additional details can be found elsewhere in the wiki.
JoeyLib is a common, consistent, and easily understood target for writing cross-platform 16 bit games and applications. While JoeyLib does not expose all the features of each individual platform, it provides enough of a subset to allow the creation of high-quality and easily understood software. Throughout development, the Apple IIgs has been the primary target for JoeyLib based applications for a number of reasons: Mainly, it is the slowest of all the target systems. The IIgs also has no concept of "coppers", sprites, or hardware blitting. JoeyLib fills in these gaps with it's own unique graphics and system features.
JoeyLib provides a single visible graphics page of 320x200 pixels with 16 colors. While this sounds tremendously limiting, there is a non-visible back-buffer for drawing operations. Once the application has finished drawing a new frame, this back-buffer can be rapidly copied to the display for smooth animation. This is slightly different from true double-buffering in that JoeyLib is not exchanging one buffer for another. Upon "presenting" the back-buffer to the display, the visible image is updated and the back-buffer contents remain as they were, ready to be modified for the next frame.
In addition to the usual concept of "graphics pages", JoeyLib has "surfaces". A surface is a block of memory large enough to hold the pixel data of a full display (32k). In addition to the back-buffer, drawing operations are supported on any available surface. The easiest way to create and manage multiple off-screen drawing surfaces as well as copy them to the display is through the Static Image functions.
The fastest way to get content onto the display is using "tiles". A tile is an 8x8 pixel block that can be rapidly copied from one surface into another. Tiles can optionally support a one-bit transparency mask for seamlessly overlaying them on other content. While a tile's source position is confined to an 8x8 grid, the target can be almost anywhere on the target surface. Due to the way pixel data is stored in memory, drawing tiles to odd-numbered columns is not supported as it would be painfully slow. Attempting to draw to an odd column will result in the tile being drawn in the previous even column. To draw objects at any location requires a second set of tiles with their contents shifted one pixel horizontally.
JoeyLib supports a limited format of MOD tracked music. One limitation is that you can only use up to four channels at a time. The biggest limitation, however, is that the sample data cannot be larger than 64k.
JoeyLib provides analog controller input on targets that support it. Platforms using digital joysticks such as the Amiga and ST return "full throw" values. Two buttons per controller are supported. On targets with more buttons, the rest are ignored. On targets with a single button, a long-press will trigger the secondary button.