polish docs
and a bit of code style
This commit is contained in:
@ -1,5 +1,4 @@
|
||||
Risc Machine
|
||||
================
|
||||
# Risc Machine
|
||||
|
||||
The RiscMachine, is an abstract machine with registers. Think of it as an arm machine with
|
||||
normal instruction names. It is not however an abstraction of existing hardware, but only
|
||||
@ -17,31 +16,29 @@ All data is in objects.
|
||||
The register machine is aware of Parfait objects, and specifically uses Message and Frame to
|
||||
express call semantics.
|
||||
|
||||
Calls and syscalls
|
||||
------------------
|
||||
## Calls and syscalls
|
||||
|
||||
The RiscMachine only uses 1 fixed register, the currently worked on Message.
|
||||
The RiscMachine only uses 1 fixed register, the currently worked on Message. (and assumes a
|
||||
program counter and flags, neither of which are directly manipulated)
|
||||
|
||||
There is no stack, rather messages form a linked list, and preparing to call, the data is pre-filled
|
||||
into the next message. Calling then means moving the new message to the current one and jumping
|
||||
to the address of the method. Returning is the somewhat reverse process.
|
||||
There is no stack, rather messages form a linked list, and preparing to call, the data is
|
||||
pre-filled into the next message. Calling then means moving the new message to the current
|
||||
one and jumping to the address of the method. Returning is the somewhat reverse process.
|
||||
|
||||
Syscalls are implemented by *one* Syscall instruction. The Risc machine does not specify/limit
|
||||
the meaning or number of syscalls. This is implemented by the level below, eg the arm/interpreter.
|
||||
|
||||
Interpreter
|
||||
===========
|
||||
## Interpreter
|
||||
|
||||
There is an interpreter that can interpret compiled register machine programs.
|
||||
This is very handy for debugging (an nothing else).
|
||||
This is very handy for debugging (and nothing else).
|
||||
|
||||
Even more handy is the graphical interface for the interpreter, which is in it's own repository:
|
||||
rubyx-debugger.
|
||||
|
||||
Arm / Elf
|
||||
=========
|
||||
## Arm / Elf
|
||||
|
||||
There is also a (very strightforward) transformation to arm instructions.
|
||||
There is also a (very straightforward) transformation to arm instructions.
|
||||
Together with the also quite minimal elf module, arm binaries can be produced.
|
||||
|
||||
These binaries have no external dependencies and in fact can not even call c at the moment
|
||||
|
Reference in New Issue
Block a user