SPU Mark II Livedemo

About

The black box below is an ANSI terminal emulator with a small SPU Mark II based computer connected to it. Just press h to see the available options in the boot rom. The BIOS implements basic Intel Hex loading and allows you to run some code there.

NOTE: This emulator does not implement the hardware features of the Ashet Home Computer, but is a playground to learn and play with the CPU without having to implement a fullly featured home computer.

 

Controls

The buttons, left to right, implement the following features:

  • loads a binary firmware file
  • resets the CPU
  • invokes the non-maskable interrupt
  • starts the emulation
  • pauses the emulation
  • executes a single instruction

Quick start

To have something happen in the emulator above, type h to view the BIOS help. It tells you that you can load a binary in ihex format with l. Type that key, then copy-paste the following code snippet into the terminal window:

:1080000008011C80900D09401680380AFE7F382137
:1080100001000840048018001800184048656C6C86
:0C8020006F2C20576F726C64210D0A0059
:00000001FF

It should display something like

>load ihex binary
Send the ihex file now. Terminate with :00000001FF or press 'q' to quit
................ OK
................ OK
............ OK
>

When that is done, you can run the application by typing r. This will jump to address 0x8000 and will execute the code loaded there.

Congratulations, you loaded your first program onto the emulated computer!

My first own firmware

Pause the emulator, and load a binary file compiled with the assember. Then press the play button to run your program.

Programs can be compiled with the assembler like this:

./zig-out/bin/assembler --format binary --output application.bin application.asm

Now you know how to load your own programs, go write one! Starting point is AN000 and AN001, as well as the ISA description.

Memory Layout

The memory layout for the emulator is:

Memory Range Function
0x00000x7FFD BIOS ROM
0x7FFE UART Port. Write to send blockingly, read nonblockingly. No value available returns 0xFFFF.
0x80000xFFFF RAM 1