The Dreamcast Legacy

The Dreamcast is a bit of an odd beast. Coming on the heels of the unpopular Sega Saturn, the Dreamcast was meant to be a simple console built with off-the-shelf parts and released in late 1998. The Nintendo 64 was already tough competition (1996). Ultimately, the Dreamcast fell out of the public eye in the early 2000s as the Playstation 2, Xbox, and Gamecube were all released with incredible fanfare just a few years later. In some sense, Sega’s last console is a footnote in gaming history.

But despite not achieving the success that Sega hoped for, the Dreamcast has formed a small cult following, because as we know, nothing builds a cult-like following like an untimely demise. Since its release, it has gained a reputation for being ahead of its time. It was the first console to include a modem for network play and an easy storage solution for transferring game data between consoles via the VMUs that docked in the controllers. It had innovative and classic games such as Crazy TaxiJet Set RadioPhantasy Star Online, and Shenmue. Microsoft even released a version of Windows CE with DirectX allowing developers to port PC games to the console quickly.

We see our fair share of console hacks here on Hackaday, but what is the ultimate legacy of the Dreamcast? How did it come to be? What happened to it, and why did so much of Sega’s hopes ride on it? Continue reading “The Dreamcast Legacy”

Exploring Early ’90s Video Game Architecture With Another World

Curious about past computer architectures? Software engineer [Fabien Sanglard] has been experimenting with porting Another World, an action-adventure platformer, to different machines and comparing the results in his “Polygons of Another World” project.

The results are pretty interesting. Due to the game’s polygon-based graphics, optimizations vary widely across different architectures, with tricks allowing the software to run on hardware released five years before the game’s publication. The consoles explored are primarily from the early ’90s, ranging from the Amiga 500, Atari ST, IBM PC, and Super Nintendo to the Sega Genesis.

The actual game contains very little code, with the original version at 6000 lines of assembly and the PC DOS executable only containing 20 KiB. The executable simply exists as a virtual machine host that reads and executes uint8_t opcodes, with most of the business logic implemented with bytecode. The graphics use 16 palette-based colors, despite the Amiga 500 supporting up to 32 colors. However, the aesthetics still fit the game nicely, with some very pleasant pixel art.

There’s a plethora of cool tricks that emerge in each of the ports, starting with the original Amiga 500 execution. Prior to the existence of the CPU/GPU architecture, microprocessors had blitters – logic blocks that rapidly modified data within the memory, capable of copying large swathes of data in parallel with the CPU, freeing up the CPU for other operations.

To display the visuals, a framebuffer containing a bitmap drives the display. There are three framebuffers used, two for double buffering and one for saving the background composition to avoid redrawing static polygons. Within the framebuffer, several tricks are used to improve the graphical experience. For scenes with translucent hues, special values are interpreted from the framebuffer index by “reading the framebuffer index, adding 0x8 and writing back”.

Challenges also come when manipulating pixels given each machine’s CPU and bus bandwidth limitations. For filling in bits, the blitter uses a feature called “Area Fill Mode” that scans left to right to find edges, rendering the bit arrays with spaces between lines filled in. Since the framebuffer is stored in five separate areas of memory – or bitplanes – this requires drawing the lines and filling in areas four times, multiplying by the hundreds of polygons rendered by the engine. The solution was to set up a temporary “scratchpad” buffer and rendering a polygon into the clean space. The polygon can then get copied to the screen area with a masked blit operation since the blitter can render anywhere in memory.

Intrigued? The series continues with deep dives into Atari ST, IBM PC, and upcoming writeups on SEGA Genesis/MegaDrive.