Nara mono dithered video demo


Display a video of my wife at Nara in Japan, being accosted by deer who bow and expect "deer biscuits" in return.

This code demonstrates fetching of 20x16x8 = 2560 bytes of data per frame, and being able to update that much VDP screen in the vertical blank, and shortly thereafter (before the electron gun catches up). In short, it proves video playback of a limited sort is possible.

The picture above looks a bit rough, but its a bit easier to make out whats happening when the picture is moving.

How it works

There are routines to do block level I/O to Silicon Disc, SD Card and CF Disc devices. As these bypass CP/M, they can access data beyond where the CP/M partitions sit (and break the 8MB or 8x8MB barrier). They can also read multiple blocks/sectors in a single read (avoiding the setup time between blocks). In addition, because we read complete 512 byte SD Card and CF Disc blocks, we avoid the "de-blocking" memory copy.

It has optimised assembler for copying to the screen, relying on the fact that no-delay between VDP data writes is required whilst in the vertical blank.

The main program is written in C, and compiled using SDCC.


There are 3 executables, one for each disk type.

You can run the Sidisc variant in MEMU, using make run.

To run the SD Card or CF Disc variants, use the makefile to make a CP/M disc parition image and write it and the video data to an SD Card or CF Disc device. You'll need to adjust the target device name for you system. Then run the NARASD.COM or NARACF.COM executable.


NARA can be downloaded from

Copying of this program is encouraged, as it is fully public domain. Even the source code is included in the package. It was created on the authors time and equipment. Caveat Emptor.

The author of NARA and this documentation is Andy Key (email

{{{ Andy