Little Man Computer
This is a simulator for a Little Man Computer.
It can be used as an educational toy.
How it works
The screen consists of 4 parts:
- Memory/code editor (the large area at the bottom)
- Accumulator (top-left corner)
- Dot display (top-middle)
- Output console (top-right)
You enter machine codes into memory and run it:
- DPAD UP/LEFT/DOWN/RIGHT: navigate the memory editor
- A/B: enter input dialog
- START: run the program from the current position
- MENU: exit
- HOME: go to cell at address 0 and reset the display, dots, LEDs etc
When the program is running:
- START: stop the program
- Other keys are regular input to the program.
When the input dialog is shown:
- DPAD LEFT/RIGHT: navigate digits
- DPAD UP/DOWN: increase current digit
- A: Save value
- B: Cancel
Instruction set
- 000 - HLT - Halt (stop) the program
- 1xx - ADD xx - Add contents of cell
xx to the accumulator
- 2xx - SUB xx - Subtract contents of the cell
xx from the accumulator
- 3xx - STA xx - Store accumulator value to the cell
xx
- 4nn - STI xx - Store value from cell
xx into a cell pointed by the accumulator
- 5xx - LDA xx - Load cell
xx contents into accumulator
- 6xx - JMP xx - Jump execution to cell
xx
- 7xx - JPP xx - Jump to cell
xx if accumulator is not negative
- 8xx - JPZ xx - Jump to cell
xx if accumulator is zero
- 901 - INP - Show input dialog and put input value into accumulator
- 902 - OUT - Display accumulator contents into the output window
- 903 - ON - For accumulator value xx - turn dot #xx on
- 904 - OFF - For accumulator value xx - turn dot #xx off
- 905 - LED - For accumulator value xy - set LED #x to color #y
- 906 - KEY - Load pressed keys into accumulator (as bits)
- 907 - PLAY - For accumulator value xy - play note #x for #0.y seconds
- 91x - SLEEP - Sleep for 0.x seconds
- 999 - LDI - For accumulator value xx - load cell #xx contents into the accumulator
Other instructions are no-ops.
Also, cell #99 on every step contains a random number.
Example programs
Add two numbers:
901 306 901 106 902
Blink a LED:
507 905 915 208 905 915 600 12 2
Move a dot:
506 903 913 904 107 601 0 1
Multiply numbers:
MUL = [901,320,901,321,522,120,322,521,223,321,804,522,220,322,902,0,0,0,0,0,0,0,0,1]
Play music from a list of notes (indirect addressing):
510 999 708 907 510 111 310 601 0 0
20 1 0 0 0 0 0 0 0 0
52 52 52 22 32 32 24 72 72
62 62 55 0