Update Specification.

Re-formatted as markdown.
Changed how flags are accessed.
Started flag documentation.
Added syscalls.
This commit is contained in:
2017-12-22 21:49:07 +00:00
parent ad50509f26
commit 7bd26502ff
3 changed files with 152 additions and 70 deletions

58
FLAGS.md Normal file
View File

@@ -0,0 +1,58 @@
# Flags
Locations shown below are relative to the start of flags, typically 0xFF00.
Bits marked N/A read as zero and writing values will not have an effect.
## Console
### Status | CONSTS | 0x00
| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| --------------- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Read/Write** | | | | | | | R/W | R |
| **Defaults** | | | | | | | 1 | X |
| **Name** | N/A | N/A | N/A | N/A | N/A | N/A | Enabled | Available |
### Cursor X | CONPOSX | 0x01
* 8-bit unsigned number
* Read/Write
### Cursor Y | CONPOSY | 0x02
* 8-bit unsigned number
* Read/Write
### Width | CONX | 0x03
* 8-bit unsigned number
* Read/Write
### Height | CONY | 0x04
* 8-bit unsigned number
* Read/Write
## ALU
Flags here for logic/math results
## Tape
Tape control and status
## Traps
Trap status and settings
<!--
### Name | ALIAS | 0x00
| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| --------------- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Read/Write** | | | | | | | | |
| **Defaults** | | | | | | | | |
| **Name** | | | | | | | | |
-->

94
SPEC.md Normal file
View File

@@ -0,0 +1,94 @@
## Features
* 4 16-bit Registers
* 254 8-bit Flag Registers
* Start at end of memory from 0xFF00
* See [FLAGS.md](FLAGS.md)
* 255 8-bit Ports
* 0x00 console in/out
* 0x01 tape in/out
* 0x02-0x20 Reserved
* Others Implementation Specific
* 255 Syscall routines
* Program Counter
* Call Stack 16 x 16-bit
* 64K x 8-bit Memory
* MSB / big-endian
## ASM Parameters
| Type | Symbol | Example/Use |
| ----------------- | ------ | ----------------- |
| Registers | R | A-D |
| Marker | : | :XYZ |
| Absolute Location | # | 0-65535 \| 0xFFFF |
## Location Parameter (@)
| Code | ASM | Type | Values |
| ---- | --- | ------------------- | -------------------------------- |
| 0x0 | P | Port | 0-255 \| 0xFF |
| 0x1 | R | Register | A-D |
| 0x2 | M | Memory | 0-65535 \| 0xFFFF |
| 0x3 | L | Immediate | 0-65535 \| 0xFFFF \| 'a' \| "a" |
| 0x4 | A | Address In Register | A-D |
## ASM Instructions
| Hex | ASM | Parameters | Notes |
| ---- | ----- | ---------------- | ----- |
| **Misc**
| 0x00 | NOP | |
| **Load/Save**
| 0x10 | LOAD | [R] [@] |
| 0x11 | SAVE | [R] [@] |
| 0x12 | LOADH | [R] [@] |
| 0x13 | LOADL | [R] [@] |
| 0x14 | SAVEH | [R] [@] |
| 0x15 | SAVEL | [R] [@] |
| **Math**
| 0x20 | CLR | [R] |
| 0x21 | ADD | [R] [@] |
| 0x22 | SUB | [R] [@] |
| 0x23 | DIV | [R] [@] |
| 0x24 | MUL | [R] [@] |
| 0x25 | INC | [R] |
| 0x26 | DEC | [R] |
| **Logic**
| 0x30 | NOT | [R] |
| 0x31 | AND | [R] [@] |
| 0x32 | OR | [R] [@] |
| 0x33 | XOR | [R] [@] |
| 0x34 | SHL | [R] [0-7] | Shift Left
| 0x35 | SHR | [R] [0-7] | Shift Right
| 0x36 | BTS | [R] [0-7] | Bit Set
| 0x37 | BTC | [R] [0-7] | Bit Clear
| **Stack**
| 0x40 | CALL | [#\|:] |
| 0x41 | RET | |
| **Program Flow**
| 0x50 | HALT | |
| 0x51 | JMP | [#\|:] |
| 0x52 | JZ | [R] [#\|:] |
| 0x53 | JNZ | [R] [#\|:] |
| 0x54 | JBS | [R] [0-7] [#\|:] |
| 0x55 | JBC | [R] [0-7] [#\|:] |
| **System**
| 0x60 | SYS | [0-255] | Syscall, parameters depend on call
### Assembler Only
| ASM | Parameters | Notes |
| ------ | ---------- | ------------ |
| ORIGIN | [#] | Sets the Memory Address for the next instruction |
## Program Format
ORIGIN 0
:MARKERA JMP :MARKERB # This is a comment
:MARKERB INC A
JMP :MARKERA
[...ASM Instrictions...]
MEMORY
0x100 "string abcd"
100 0x00 00 00

View File

@@ -1,70 +0,0 @@
Features
- 4 16-bit Registers
- 255 8-bit Flag Registers
- 255 8-bit Ports
- 0 console in/out
- 1 tape in/out
- 2-32 Reserved
- Others Implementation Specific
- Program Counter
- Call Stack 16 x 16-bit
- 64K x 8-bit Memory
- MSB / big-endian
Registers (R) A-D -> 0-3
Marker (:) :XYZ
Locations (@)
Code ASM Type Values
0x0 P Port 0-255 | 0xFF
0x1 R Register A-D
0x2 M Memory 0-65535 | 0xFFFF
0x3 # Immediate 0-65535 | 0xFFFF | 'a' | "a"
0x4 F Flag 0-255 | 0xFF
0x5 A Address In Register A-D
Instructions
Code ASM
Misc
0x00 NOP
Registers
0x10 LOAD R @
0x11 SAVE R @
0x12 LOADH R @
0x13 LOADL R @
0x14 SAVEH R @
0x15 SAVEL R @
Accumulator
0x20 CLR R
0x21 ADD R @
0x22 SUB R @
0x23 DIV R @
0x24 MUL R @
0x25 INC R
0x26 DEC R
Logic
0x30 NOT R
0x31 AND R @
0x32 OR R @
0x33 XOR R @
0x34 SHL R 0-7 Shift Left
0x35 SHR R 0-7 Shift Right
0x36 BTS R 0-7 Bit Set
0x37 BTC R 0-7 Bit Clear
Stack
0x40 CALL #|:
0x41 RET
Program Flow
0x50 HALT
0x51 JMP #|:
0x52 JZ R #|:
0x53 JNZ R #|:
0x54 JBS R 0-7 #|:
0x55 JBC R 0-7 #|:
Program Format
[...ASM...]
MEMORY
0x100 "string abcd"
100 0x00 00 00