Formatting updates.
This commit is contained in:
@@ -4,6 +4,7 @@ SplitBit is a small 8 bit CPU.
|
||||
It is a Harvard Architecture machine with a separate 64k memory space for its Program and another for its Data.
|
||||
|
||||
It has seven registers:
|
||||
|
||||
- The A and B Registers are each a general purpose 8 bit register.
|
||||
- A and B are the operand registers for the ALU.
|
||||
- A and B together form a 16-bit circular shift register, AB, in the context of the bit shift instructions, SHL and SHR.
|
||||
@@ -35,91 +36,91 @@ It has seven registers:
|
||||
## List of Instructions:
|
||||
|
||||
### Arithmetic and Logic Operations: 9 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
00 | ADD | Adds A, B, and the Carry Flag, the result is stored in Q.
|
||||
01 | SUB | Subtracts B and the Carry Flag from A, the result is stored in Q.
|
||||
02 | AND | Bitwise and of A and B, the result is stored in Q.
|
||||
03 | OR | Bitwise or of A and B, the result is stored in Q.
|
||||
04 | XOR | Bitwise xor of A and B, the result is stored in Q.
|
||||
05 | NOTA | Bitwise inversion of A, the result is stored in Q.
|
||||
06 | NOTB | Bitwise inversion of B, the result is stored in Q.
|
||||
07 | SHL | A and B form a circular shift register. Rotate this register left.
|
||||
08 | SHR | A and B form a circular shift register. Rotate this register right.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| 00 | ADD | Adds A, B, and the Carry Flag, the result is stored in Q. |
|
||||
| 01 | SUB | Subtracts B and the Carry Flag from A, the result is stored in Q. |
|
||||
| 02 | AND | Bitwise and of A and B, the result is stored in Q. |
|
||||
| 03 | OR | Bitwise or of A and B, the result is stored in Q. |
|
||||
| 04 | XOR | Bitwise xor of A and B, the result is stored in Q. |
|
||||
| 05 | NOTA | Bitwise inversion of A, the result is stored in Q. |
|
||||
| 06 | NOTB | Bitwise inversion of B, the result is stored in Q. |
|
||||
| 07 | SHL | A and B form a circular shift register. Rotate this register left. |
|
||||
| 08 | SHR | A and B form a circular shift register. Rotate this register right. |
|
||||
|
||||
### Branch and Subroutine Operations: 7 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
10 | BRI | Branch Immediately. Loads the immediate next two bytes of Program Memory into the Program Counter, first the most significant byte, then the least.
|
||||
11 | BRQ | Branch on Q. If Q is zero, loads the immediate next two bytes of Program Memory into the Program Counter.
|
||||
12 | BRA | Branch on A. If A is zero, loads the immediate next two bytes of Program Memory into the Program Counter.
|
||||
13 | BRB | Branch on B. If B is zero, loads the immediate next two bytes of Program Memory into the Program Counter.
|
||||
14 | BRC | Branch if Carry is set.
|
||||
17 | CALL | Call subroutine. Stores all the registers to the Stack, A, B, and the Program Counter, then performs an immediate branch.
|
||||
1F | RET | Restores the saved registers from the Stack, then immediately branches to the Return Address by setting the Program Counter to the next instruction after the last CALL.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| 10 | BRI | Branch Immediately. Loads the immediate next two bytes of Program Memory into the Program Counter, first the most significant byte, then the least. |
|
||||
| 11 | BRQ | Branch on Q. If Q is zero, loads the immediate next two bytes of Program Memory into the Program Counter. |
|
||||
| 12 | BRA | Branch on A. If A is zero, loads the immediate next two bytes of Program Memory into the Program Counter. |
|
||||
| 13 | BRB | Branch on B. If B is zero, loads the immediate next two bytes of Program Memory into the Program Counter. |
|
||||
| 14 | BRC | Branch if Carry is set. |
|
||||
| 17 | CALL | Call subroutine. Stores all the registers to the Stack, A, B, and the Program Counter, then performs an immediate branch. |
|
||||
| 1F | RET | Restores the saved registers from the Stack, then immediately branches to the Return Address by setting the Program Counter to the next instruction after the last CALL. |
|
||||
|
||||
|
||||
### Register Operations: 9 Instructions
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -------- | -------- | ------------------- |
|
||||
| 20 | RSTA | Resets A to 0. |
|
||||
| 21 | RSTB | Resets B to 0. |
|
||||
| 22 | INCA | Adds 1 to A. |
|
||||
| 23 | INCB | Adds 1 to B. |
|
||||
| 24 | DECA | Subtracts 1 from A. |
|
||||
| 25 | DECB | Subtracts 1 from B. |
|
||||
| 26 | INIA | Loads the next byte of Program Memory to A. |
|
||||
| 27 | INIB | Loads the next byte of Program Memory to B. |
|
||||
| 28 | CCF | Clears the Carry Flag. |
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| 20 | RSTA | Resets A to 0. |
|
||||
| 21 | RSTB | Resets B to 0. |
|
||||
| 22 | INCA | Adds 1 to A. |
|
||||
| 23 | INCB | Adds 1 to B. |
|
||||
| 24 | DECA | Subtracts 1 from A. |
|
||||
| 25 | DECB | Subtracts 1 from B. |
|
||||
| 26 | INIA | Loads the next byte of Program Memory to A. |
|
||||
| 27 | INIB | Loads the next byte of Program Memory to B. |
|
||||
| 28 | CCF | Clears the Carry Flag. |
|
||||
|
||||
### Stack Operations: 7 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
30 | PSHQ | Stores Q into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer.
|
||||
31 | PSHA | Stores A into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer.
|
||||
32 | PSHB | Stores B into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer.
|
||||
33 | PSHD | Stores the Data Pointer to the stack, with the low byte on top. Increments the Stack Pointer by two.
|
||||
34 | POPA | Reads the location referenced by the Stack Pointer from Data Memory into A then increments the Stack Pointer.
|
||||
35 | POPB | Reads the location referenced by the Stack Pointer from Data Memory into B then increments the Stack Pointer.
|
||||
36 | POPD | Restores the Data Pointer from the stack, increments the Stack Pointer by two.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| 30 | PSHQ | Stores Q into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer. |
|
||||
| 31 | PSHA | Stores A into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer. |
|
||||
| 32 | PSHB | Stores B into Data Memory at the location referenced by the Stack Pointer then decrements the Stack Pointer. |
|
||||
| 33 | PSHD | Stores the Data Pointer to the stack, with the low byte on top. Increments the Stack Pointer by two. |
|
||||
| 34 | POPA | Reads the location referenced by the Stack Pointer from Data Memory into A then increments the Stack Pointer. |
|
||||
| 35 | POPB | Reads the location referenced by the Stack Pointer from Data Memory into B then increments the Stack Pointer. |
|
||||
| 36 | POPD | Restores the Data Pointer from the stack, increments the Stack Pointer by two. |
|
||||
|
||||
### Data Operations: 10 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
40 | INCD | Increments the Data Pointer.
|
||||
41 | DECD | Decrements the Data Pointer.
|
||||
42 | LDA | Loads the byte referenced from Data Memory by the Data Pointer into A.
|
||||
43 | LDB | Loads the byte referenced from Data Memory by the Data Pointer into B.
|
||||
44 | STQ | Stores Q into the byte referenced by the Data Pointer in Data Memory.
|
||||
45 | STA | Stores A into the byte referenced by the Data Pointer in Data Memory.
|
||||
46 | STB | Stores B into the byte referenced by the Data Pointer in Data Memory.
|
||||
47 | SETD | Loads the next two bytes of Program Memory into the Data Pointer.
|
||||
48 | DPUP | Offset Data Pointer up by the value of the immediate next byte of Program Memory.
|
||||
49 | DPDN | Offset Data Pointer down by the value of the immediate next byte of Program Memory.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| 40 | INCD | Increments the Data Pointer. |
|
||||
| 41 | DECD | Decrements the Data Pointer. |
|
||||
| 42 | LDA | Loads the byte referenced from Data Memory by the Data Pointer into A. |
|
||||
| 43 | LDB | Loads the byte referenced from Data Memory by the Data Pointer into B. |
|
||||
| 44 | STQ | Stores Q into the byte referenced by the Data Pointer in Data Memory. |
|
||||
| 45 | STA | Stores A into the byte referenced by the Data Pointer in Data Memory. |
|
||||
| 46 | STB | Stores B into the byte referenced by the Data Pointer in Data Memory. |
|
||||
| 47 | SETD | Loads the next two bytes of Program Memory into the Data Pointer. |
|
||||
| 48 | DPUP | Offset Data Pointer up by the value of the immediate next byte of Program Memory. |
|
||||
| 49 | DPDN | Offset Data Pointer down by the value of the immediate next byte of Program Memory. |
|
||||
|
||||
|
||||
### Output Operations: 3 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
D0 | OUTQ | Writes the value of Q to an Output specified by the next byte of Program Memory.
|
||||
D1 | OUTA | Writes the value of A to an Output specified by the next byte of Program Memory.
|
||||
D2 | OUTB | Writes the value of B to an Output specified by the next byte of Program Memory.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| D0 | OUTQ | Writes the value of Q to an Output specified by the next byte of Program Memory. |
|
||||
| D1 | OUTA | Writes the value of A to an Output specified by the next byte of Program Memory. |
|
||||
| D2 | OUTB | Writes the value of B to an Output specified by the next byte of Program Memory. |
|
||||
|
||||
### Input Operations: 2 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
E0 | INA | Writes the value of an Input to A. The input port is specified the next byte of Program Memory.
|
||||
E1 | INB | Writes the value of an Input to B. The input port is specified the next byte of Program Memory.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| E0 | INA | Writes the value of an Input to A. The input port is specified the next byte of Program Memory. |
|
||||
| E1 | INB | Writes the value of an Input to B. The input port is specified the next byte of Program Memory. |
|
||||
|
||||
### Special Operations: 2 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
-- | -- | --
|
||||
F0 | NOP | Perform no Operation, increment the Program Counter.
|
||||
FF | HALT | Stops CPU Execution.
|
||||
| Hex Code | Mnemonic | Description |
|
||||
| -- | ---- | -- |
|
||||
| F0 | NOP | Perform no Operation, increment the Program Counter. |
|
||||
| FF | HALT | Stops CPU Execution. |
|
||||
|
||||
## Input and Output In the Emulator:
|
||||
|
||||
The current implementation has Input 0 and Output 0 hooked to stdout and stdin respectively, allowing programs to read to and from the console.
|
||||
The current implementation has Input 0 and Output 0 hooked to stdin and stdout respectively, allowing programs to read to and from the console.
|
||||
|
||||
### Example Program: Hello World
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user