CUSP: Carleton's Utterly Simple Processor

A simulated CISC machine written in PASCAL for the purpose of teaching the basics of assembly language. The assembler for the CUSP assembly language is called CHASM. Instead of creating byte code it returns a human readable file containing the hexadecimal equivalent of the instructions in your source file, which can then be loaded into CUSP and run altogether, or single stepped through to see the effect of each instruction on all the registers and memory locations.
CUSP uses 24 bit memory words, and 12 bit memory addresses, a 24 bit accumulator and instruction register, a 12 bit program counter, index register, stack pointer, and frame pointer.
CUSP instructions consist of an 8 bit opcode, a 4 bit addressing mode, and a 12 bit operand.
Example: $042001 is the instruction to store the contents of the accumulator in memory location $001.

Here's some sample code in assembler mnemonics :
LDA      $E00
ADA#     1
STA       $E00

That code snippet loads the accumulator with the value stored at memory location $E00, adds 1 to it, then stores it back in the same place.