Add documentation
This commit is contained in:
parent
d661391132
commit
680e6eaf23
262
README.md
Normal file
262
README.md
Normal file
@ -0,0 +1,262 @@
|
||||
# LMIA advanced development kit
|
||||
|
||||
This project was developed as a simple development kit for programming and
|
||||
microprogramming the LMIA system.
|
||||
|
||||
|
||||
## μASM instruction set
|
||||
|
||||
### NOP [reg]
|
||||
No-operation. This wastes one clock cycle
|
||||
|
||||
|
||||
### MOV [regA] \[regB\]
|
||||
Move value in *regA* to *regB*
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If regB is LC, no other LC operation can be specified in the same cycle*
|
||||
|
||||
|
||||
### MVN {[reg] | [const]}
|
||||
Move the inverse of a value (from register or constant) into register **AR**.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
|
||||
### MVZ [reg]
|
||||
Set **AR** to zero. *reg* is ignored and only prevalent due to a microcompiler
|
||||
quirk; expect it to be removed in future releases.
|
||||
|
||||
*Sets flags: Z, N*
|
||||
|
||||
|
||||
### ADD {[reg] | [const]}
|
||||
Add value (from register or constant) to register **AR**.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, O, C*
|
||||
|
||||
|
||||
### SUB {[reg] | [const]}
|
||||
Subtract value (from register or constant) from register **AR**.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, O, C*
|
||||
|
||||
|
||||
### AND {[reg] | [const]}
|
||||
Perform bitwise AND with given value (from register or constant) and register
|
||||
**AR**. *reg* is ignored and only prevalent due to a microcompiler quirk;
|
||||
expect it to be removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N*
|
||||
|
||||
|
||||
### ORR {[reg] | [const]}
|
||||
Perform bitwise Or with given value (from register or constant) and register
|
||||
**AR**.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N*
|
||||
|
||||
|
||||
|
||||
### ADN {[reg] | [const]}
|
||||
Add value (from register or constant) to register **AR** without updating
|
||||
flags.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
|
||||
### LSL [reg]
|
||||
Performs a logical shift left of **AR**. *reg* is ignored and only prevalent
|
||||
due to a microcompiler quirk; expect it to be removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### BSL [reg]
|
||||
Performs a logical shift left of **AR** and **HR** as if they were one 32-bit
|
||||
register where **AR** corresponds to the most-significant bits. *reg* is
|
||||
ignored and only prevalent due to a microcompiler quirk; expect it to be
|
||||
removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### ASR [reg]
|
||||
Performs an arithmetic shift right on **AR**. *reg* is ignored and only
|
||||
prevalent due to a microcompiler quirk; expect it to be removed in future
|
||||
releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### BSR [reg]
|
||||
Performs an arithmetic shift right of **AR** and **HR** as if they were one
|
||||
32-bit register where **AR** corresponds to the most-significant bits. *reg* is
|
||||
ignored and only prevalent due to a microcompiler quirk; expect it to be
|
||||
removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### LSR [reg]
|
||||
Performs a logical shift right of **AR**. *reg* is ignored and only prevalent
|
||||
due to a microcompiler quirk; expect it to be removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### ROL [reg]
|
||||
Performs an arithmetic rotate right on **AR**. *reg* is ignored and only
|
||||
prevalent due to a microcompiler quirk; expect it to be removed in future
|
||||
releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### BRL [reg]
|
||||
Performs an arithmetic shift left of **AR** and **HR** as if they were one
|
||||
32-bit register where **AR** corresponds to the most-significant bits. *reg* is
|
||||
ignored and only prevalent due to a microcompiler quirk; expect it to be
|
||||
removed in future releases.
|
||||
|
||||
*This operation uses the bus*
|
||||
|
||||
*If a constant is passed, this operation cannot be parallellized*
|
||||
|
||||
*Sets flags: Z, N, C*
|
||||
|
||||
|
||||
### LCSET [const]
|
||||
Set **LC** to value of constant.
|
||||
|
||||
|
||||
### CONST [const]
|
||||
Set **AR** to value of cosntant.
|
||||
|
||||
*This operation cannot be parallelized*
|
||||
|
||||
|
||||
### INCPC
|
||||
Increment value in **PC** by one.
|
||||
|
||||
|
||||
### DECLC
|
||||
Decrement value in **LC** by one.
|
||||
|
||||
|
||||
### CALL [label]
|
||||
Move value in **uPC** to **uSP** (**MySPC**) and set value in **uPC** to point
|
||||
to the address of the given label.
|
||||
|
||||
|
||||
### RET
|
||||
Move value in **uSP** (**MySPC**) into **uPC**.
|
||||
|
||||
|
||||
### HALT
|
||||
Stop execution and set value int **uPC** to 0.
|
||||
|
||||
|
||||
### BRA [label]
|
||||
Perform an unconditional branch to the address of the given label.
|
||||
|
||||
|
||||
### BNZ [label]
|
||||
Branch to address of label if **Z-flag** is 0.
|
||||
|
||||
|
||||
### BRZ [label]
|
||||
Branch to address of label if **Z-flag** is 1.
|
||||
|
||||
|
||||
### BRN [label]
|
||||
Branch to address of label if **N-flag** is 1.
|
||||
|
||||
|
||||
### BRC [label]
|
||||
Branch to address of label if **C-flag** is 1.
|
||||
|
||||
|
||||
### BRO [label]
|
||||
Branch to address of label if **O-flag** is 1.
|
||||
|
||||
|
||||
### BLS [label]
|
||||
Branch to address of label if **L-flag** is 1.
|
||||
|
||||
|
||||
### BNC [label]
|
||||
Branch to address of label if **C-flag** is 0.
|
||||
|
||||
|
||||
### BNO [label]
|
||||
Branch to address of label if **O-flag** is 0.
|
||||
|
||||
|
||||
|
||||
## Flags
|
||||
Flags - *aside from L* - are set based on ALU operations, so they depend on **AR** and the
|
||||
**BUS**. Unless otherwise implied or stated, **AR** refers to the state/value
|
||||
of **AR** *after* an ALU operation.
|
||||
|
||||
### Z
|
||||
Set if **AR** == **BUS**
|
||||
|
||||
### N
|
||||
Set if sign bit in **AR** is set.
|
||||
|
||||
### O
|
||||
Set if sign of **AR** differs from signs of both **AR** and **BUS** *before*
|
||||
the arithmetic operation.
|
||||
|
||||
### C
|
||||
Set if **AR** is less than or equal to **AR** *before* the arithmetic
|
||||
operation.
|
||||
|
||||
### L
|
||||
Set if **LC** == 0.
|
Loading…
x
Reference in New Issue
Block a user