CPU Simulations written in Ada
This is spun off of the Pi-Mainframe repository. Moving simulation into a separate repository will allow simulators to be developed more independently as well as used in other applications.
[] (https://alire.ada.dev/crates/bbs_simcpu.html)
[] (https://alire.ada.dev/crates/simcpucli.html)
[] (https://alire.ada.dev/crates/loadcpm.html)
The root of the simulators is the abstract object "simulator" defined in the BBS.Sim_CPU package. It defined the external interface that all simulators must implement. It is expected to evolve as some actual CPU simulators get implemented.
The following simulators are implemented.
This is not really a CPU simulator. Its main purpose is to blink the lights in the Pi-Mainframe in interesting patterns.
All 8080 and 8085 instructions have been implemented. Z80 instructions are being implemented, but are not ready for use yet.
All the 68000 CPU instructions have been implemented.
A command line interface is provided for development of both the simulators and software that runs on the simulator.
The following commands are currently provided:
- BREAK
- Set a breakpoint (currently only one can be active at a time)
- CONTINUE
- Continue execution
- DEP
- Deposit value to a memory location
- DUMP
- Display a region of memory
- EXIT or QUIT
- EXIT the program
- GO
- Start execution at a specified address
- LISP
- Enter Lisp interpreter
- LOAD
- Load data from a file into memory
- REG
- Display register values
- RUN
- Execute instructions until halt or breakpoint
- STEP
- Execute one instruction
- TRACE
- Print information for each instruction executed
- UNBREAK
- Remove a breakpoint
For more information on the embedded tiny-Lisp interpreter.
The following additional Lisp words are implemented for controlling the simulation. With use, more words may be added.
- Execute one instruction
- (sim-step)
- Get/set memory (byte/word/long)
- (memb addr value)
- (memb addr)
- (memw addr value)
- (memw addr)
- (meml addr value)
- (meml addr)
- Set execution address
- (go address)
- Read register value (index is simulator dependent)
- (reg-val index)
- Return number of registers
- (num-reg)
- Return or set simulator halted state
- (halted state)
- (halted)