2.7 KiB


Apple-I core for the MiST FPGA.

What's implemented

  • 512 bytes ROM (Woz monitor and ACI), remaing space is RAM
  • full working audio cassette interface (see below how to operate it)
  • CPU clock is accurate and RAM refresh lost cycles are implemented
  • NTSC output (with crosstalk pixel artifacts!)
  • Keyboard: ASCII keyboard with clear screen and reset keys

How to use it

F5 resets the machine, F1 clears the screen.

You can load .PRG files from the SD card via the F12 MiST menu. .PRG files are plain binary files with an header of two bytes containing the load address of the program.

If you have a binary file (usually they come with a .bin extension, or no extension at all) you need to convert it to .PRG before you can load with it with the F12 menu option. Check my other repo apple1-videocard-lib where I have some tools for converting from and to various Apple-I formats (prg, bin, wav, woz).

After you load a file, you can run it from the monitor, for example if you have a program that starts at address $0280 type:

280R (return)

Using the ACI Audio Cassette Interface

To be able to use the ACI you need to connect your audio input source (tape, mp3 player, PC, ect...) to the UART_RX pin of the MiST (Mistica units have a dedicated "audio input" jack plug).

Audio output (for saving programs on tape) is simply taken for the speakers output.

The F12 menu option "Audio monitor" allows you to choose from:

  • "tape in": audio coming from the tape is also played on the speaker as feedback
  • "tape out": the speakers play the tape out signal (for recording on a real tape or sampling it on a PC).

The ACI is commanded from its own monitor program. Enter it with:

C100R (return)

(a * will be shown as prompt).

How to load a file

On the ACI monitor type the start and end address of the program you are going to read, followed by a "R", e.g.:

280.2CAR (enter)

Note: make sure the tape (or WAV) is already playing before pressing (enter).

How to save a file

On the ACI monitor type the start and end address of the program you are going to write, followed by a "W", e.g.:

280.2CAW (enter)

Note: press record & play on tape before pressing (enter) on the ACI.


This FPGA core is based on the previous projects:

Thanks also to P-L4B and UncleBernie, for all the techincal details and explanations that allowed me to write a more accurate implementation.