Varvara: Difference between revisions

From Fantasy Console Wiki
Jump to navigation Jump to search
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 22: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