CALL and RET instructions.
Changed PSHP and POPP into CALL and RET, streamlining their use for subroutine calls. Updated Assembler and Emulator. New demonstration programs.
This commit is contained in:
@@ -36,6 +36,8 @@ Hex Code | Mnemonic | Description
|
||||
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 | CALL | Push the Program Counter to the Stack, loads the immediate next two bytes of Program Memory into the Program Counter.
|
||||
15 | RET | Restores the Program Counter from the Stack, used to return from subroutines.
|
||||
|
||||
### Register Operations: 6 Instructions
|
||||
| Hex Code | Mnemonic | Description |
|
||||
@@ -57,12 +59,10 @@ 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 | PSHP | Stores the Program Counter to the next two bytes in the stack, decrements the Stack Pointer by two.
|
||||
34 | PSHD | Stores the Data Pointer to the next two bytes in the stack, decrements the Stack Pointer by two.
|
||||
35 | POPA | Reads the location referenced by the Stack Pointer from Data Memory into A then increments the Stack Pointer.
|
||||
36 | POPB | Reads the location referenced by the Stack Pointer from Data Memory into B then increments the Stack Pointer.
|
||||
37 | POPP | Restores the Program Counter from the top two bytes in the stack, increments the Stack Pointer by two.
|
||||
38 | POPD | Restores the Program Counter from the top two bytes in the stack, increments the Stack Pointer by two.
|
||||
33 | PSHD | Stores the Data Pointer to the next two bytes in the stack, decrements 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 Program Counter from the top two bytes in the stack, increments the Stack Pointer by two.
|
||||
|
||||
### Data Operations: 7 Instructions
|
||||
Hex Code | Mnemonic | Description
|
||||
@@ -103,26 +103,38 @@ The current implementation has Input 0 and Output 0 hooked to stdout and stdin r
|
||||
|
||||
### Example Program: Hello World
|
||||
```
|
||||
; This is a basic hello world program for the SplitBit CPU.
|
||||
; We'll create a loop that outputs each byte of our string to Output 0, the text console.
|
||||
; Hello World for SplitBit CPU
|
||||
; First, we define the string in Data Memory.
|
||||
Data:
|
||||
0000 0x48 ; 'H'
|
||||
0001 0x65 ; 'e'
|
||||
0002 0x6C ; 'l'
|
||||
0003 0x6C ; 'l'
|
||||
0004 0x6F ; 'o'
|
||||
0005 0x2C ; ','
|
||||
0006 0x20 ; ' '
|
||||
0007 0x57 ; 'W'
|
||||
0008 0x6F ; 'o'
|
||||
0009 0x72 ; 'r'
|
||||
000A 0x6C ; 'l'
|
||||
000B 0x64 ; 'd'
|
||||
000C 0x32 ; '!'
|
||||
000D 0x0A ; This is a linefeed, it's equivalent to putting '\n' in a string in C.
|
||||
000E 0x00 ; Zero terminates the string.
|
||||
|
||||
#Program
|
||||
|
||||
Start:
|
||||
LDA ; Load a byte of the string into A.
|
||||
BRA End ; If A is zero, branch out of the loop.
|
||||
OUTA 0x00 ; Output the value in A to Port 0, the text console.
|
||||
INCD ; Increment the Data Pointer to the next byte of the string.
|
||||
BRI Start ; Branch immediately to the start of the loop.
|
||||
|
||||
End:
|
||||
INIA 0x0A ; We'll load a linefeed into A and output it to make it look nice.
|
||||
OUTA 0x00 ; Output it to the text console.
|
||||
HALT ; Terminate the program.
|
||||
|
||||
#Data
|
||||
|
||||
"Hello, World!"
|
||||
; Next, we'll create a loop that outputs each byte of our string to Output 0, the text console.
|
||||
Program:
|
||||
0000 LDA 0x42 ; Load the first byte of the string into A.
|
||||
0001 BRA 0x12 ; If A is zero, branch out of the loop.
|
||||
0002 0x00 0x00 ; The high byte of the branch.
|
||||
0003 0x0A 0x0A ; The low byte of the branch.
|
||||
0004 OUTA 0xD1 ; Output the value in A.
|
||||
0005 0x01 0x00 ; The Output Port to use.
|
||||
0006 INCD 0x40 ; Increment the Data Pointer to the next byte of the string.
|
||||
0007 BRI 0x10 ; Branch immediately to the start of the loop.
|
||||
0008 0x00 0x00 ; The high byte of the branch address.
|
||||
0009 0x00 0x00 ; The low byte of the branch address.
|
||||
000A HALT 0xFF ; The end of the program.
|
||||
```
|
||||
|
||||
### Structure of a SplitBit Binary File:
|
||||
@@ -131,5 +143,5 @@ The Program and Data values are both stored in a single file for loading into th
|
||||
Here's an example hex dump of the hello world program stored in the proper format:
|
||||
|
||||
```
|
||||
50 52 47 00 0F 26 12 00 0A D1 00 40 10 00 00 28 0A D1 00 FF 44 41 54 00 0E 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 00
|
||||
50 52 47 00 0A 42 12 00 0A D1 00 40 10 00 00 FF 44 41 54 00 0E 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A 00
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user