Varvara: Difference between revisions
m (fixed category again) |
(+uxntal) |
||
Line 61: | Line 61: | ||
The two reserved devices can be used for implementation specific features that do not need to be part of the specs, or other Uxn/Varvara instances. | The two reserved devices can be used for implementation specific features that do not need to be part of the specs, or other Uxn/Varvara instances. | ||
== Uxntal == | |||
According to the implentation spec, "Tal is the programming language for the Uxn virtual machine." Tal, commonly referred to as '''Uxntal''', is a unique flavor of assembly language. Uxntal source files are assembled from human-readable source files into Uxn-compatible ROM files with the .tal extension. | |||
The language itself works similarly to Forth, another stack-based language. | |||
=== Opcodes === | |||
Uxn can perform 32 different operations, and each operation has 3 possible modes. The items in the following table include the Program Counter(PC), Memory(M), Devices(D) and Return Stack(rs). | |||
{| class="wikitable" | |||
|- | |||
!colspan="2"|Stack | |||
!colspan="2"|Memory | |||
|- | |||
| '''BRK/LIT''' - Literal | |||
| a b c M[PC+1] | |||
| '''LDZ''' - Load Zeropage | |||
| a b M[c8] | |||
|- | |||
| '''INC''' - Increment | |||
| a b c+1 | |||
| '''STZ''' - Save Zeropage | |||
| a {M[c8]=b} | |||
|- | |||
| '''POP''' - Pop | |||
| a b | |||
| '''LDR''' - Load Rel | |||
| a b M[PC+c8] | |||
|- | |||
| '''NIP''' - Nip | |||
| a c | |||
| '''STR''' - Save Rel | |||
| a {M[PC+c8]=b} | |||
|- | |||
| '''SWP''' - Swap | |||
| a c b | |||
| '''LDA''' - Load Abs | |||
| a b M[c16] | |||
|- | |||
| '''ROT''' - Rotate | |||
| c b a | |||
| '''STA''' - Save Abs | |||
| a {M[c16]=b} | |||
|- | |||
| '''DUP''' - Duplicate | |||
| a b c c | |||
| '''DEI''' - Device In | |||
| a b D[c8] | |||
|- | |||
| '''OVR''' - Over | |||
| a b c b | |||
| '''DEO''' - Device Out | |||
| a {D[c8]=b} | |||
|- | |||
!colspan="2"|Logic | |||
!colspan="2"|Arithmetic | |||
|- | |||
| '''EQU''' - Equal | |||
| a b?c | |||
| '''ADD''' - Add | |||
| a b+c | |||
|- | |||
| '''NEQ''' - Not Equal | |||
| a b!c | |||
| '''SUB''' - Subtract | |||
| a b-c | |||
|- | |||
| '''GTH''' - Greater | |||
| a b>c | |||
| '''MUL''' - Multiply | |||
| a b*c | |||
|- | |||
| '''LTH''' - Lesser | |||
| a b<c | |||
| '''DIV''' - Divide | |||
| a b/c<br /> | |||
|- | |||
| '''JMP''' - Jump<br /> | |||
| a b {PC+=c} | |||
| '''AND''' - And | |||
| a b&c | |||
|- | |||
| '''JCN''' - JumpCond | |||
| a {(b8)PC+=c} | |||
| '''ORA''' - Or | |||
| <nowiki>a b|c</nowiki> | |||
|- | |||
| '''JSR''' - JumpStash | |||
| a b {rs.PC PC+=c} | |||
| '''EOR''' - ExclusiveOr | |||
| a b^c | |||
|- | |||
| '''STH''' - Stash | |||
| a b {rs.c} | |||
| '''SFT''' - Shift | |||
| a b>>c8l<<c8h | |||
|} | |||
[[Category: Fantasy computers]] | [[Category: Fantasy computers]] |
Revision as of 21:55, 27 November 2022
This article is incomplete. You can help this wiki by expanding it.
Varvara is a fantasy computer system that uses runs a stack-based virtual machine called Uxn. Its main programming language is a Forth-like language called Uxntal.
Uxn
Memory
The Uxn virtual CPU can address 64kb of memory; programs can move stacks into addressable range to allow reading and writing directly into stack memory. In this way, peripherals such as a controller, mouse, and keyboard can be addressed.
Memory | RAM | Data | 64kb |
---|---|---|---|
Stacks | Working Stack | Data | 254 bytes |
Error | 1 byte | ||
Pointer | 1 byte | ||
Return Stack | Data | 254 bytes | |
Error | 1 byte | ||
Pointer | 1 byte | ||
I/O | Devices | Data | 256 bytes |
Uxn is a single-page virtual machine with 32 opcodes. This system has no registers, and instead uses a 127-level stack.
Devices
Devices are external systems connected to the Uxn CPU, such as the screen, the mouse and the keyboard. Each device has 16 bytes, also called ports, of I/O memory. Vectors are ports holding an address in memory to evaluate when a device event is triggered, such as when the mouse is moved, or a key is pressed.
- 00 - System device
- 10 - Console device
- 20 - Screen device
- 30, 40, 50, 60 - Audio device
- 70 - MIDI device
- 80 - Controller
- 90 - Mouse
- a0, b0 - File
- c0 - Datetime
- d0 - Unused
- e0, f0 - Reserved
The two reserved devices can be used for implementation specific features that do not need to be part of the specs, or other Uxn/Varvara instances.
Uxntal
According to the implentation spec, "Tal is the programming language for the Uxn virtual machine." Tal, commonly referred to as Uxntal, is a unique flavor of assembly language. Uxntal source files are assembled from human-readable source files into Uxn-compatible ROM files with the .tal extension.
The language itself works similarly to Forth, another stack-based language.
Opcodes
Uxn can perform 32 different operations, and each operation has 3 possible modes. The items in the following table include the Program Counter(PC), Memory(M), Devices(D) and Return Stack(rs).
Stack | Memory | ||
---|---|---|---|
BRK/LIT - Literal | a b c M[PC+1] | LDZ - Load Zeropage | a b M[c8] |
INC - Increment | a b c+1 | STZ - Save Zeropage | a {M[c8]=b} |
POP - Pop | a b | LDR - Load Rel | a b M[PC+c8] |
NIP - Nip | a c | STR - Save Rel | a {M[PC+c8]=b} |
SWP - Swap | a c b | LDA - Load Abs | a b M[c16] |
ROT - Rotate | c b a | STA - Save Abs | a {M[c16]=b} |
DUP - Duplicate | a b c c | DEI - Device In | a b D[c8] |
OVR - Over | a b c b | DEO - Device Out | a {D[c8]=b} |
Logic | Arithmetic | ||
EQU - Equal | a b?c | ADD - Add | a b+c |
NEQ - Not Equal | a b!c | SUB - Subtract | a b-c |
GTH - Greater | a b>c | MUL - Multiply | a b*c |
LTH - Lesser | a b<c | DIV - Divide | a b/c |
JMP - Jump |
a b {PC+=c} | AND - And | a b&c |
JCN - JumpCond | a {(b8)PC+=c} | ORA - Or | a b|c |
JSR - JumpStash | a b {rs.PC PC+=c} | EOR - ExclusiveOr | a b^c |
STH - Stash | a b {rs.c} | SFT - Shift | a b>>c8l<<c8h |