AMVBAS Syntax

Information

AMVBAS is pseudo code used in RCA Tiny BASIC running on the VIP, the same syntax is used (AM4KBAS) when running RCA Tiny BASIC on the Studio IV.

This info is also available online on the Emma 02 site.

Definitions

aaaa 16 bit address
aa lower 8 bit of 16 bit address
kk 8 bit constant
n 4 bit constant
Vx,Vy,Vz 8 bit register (x, y or z = 0 to F)
Rx,Ry,Rz 16 bit register (x, y or z = 0 to 7), see Note 1.
[aa],[bb],[cc] memory value of address 11aa, see Note 2.
[Ry],[Rz] Memory value (8 bit) pointed to by 16 bit register (x, y or z = 0 to 7)

Note 1: V0 to VF are located on 1100-110F. R0-R7 are located on the same memory locations and as such: R0 is build up of V0 as high byte and V1 as low, R1=V2-V3 etc. Register value 'z' specified in the pseudo code is actually z*2, so R1 is indicated by cc02kk.

Note 2: [aa] indicate 2 bytes in memory when using commands with R registers so memory location 11aa as well as 11aa+1 will be used.

Syntax

120zkk ARD Rz, kk Rz = Rz + kk
[1110] = carry
12aakk ARD [aa], kk
aa, kk
[11aa/11aa+1] = [11aa/11aa+1] + kk
[1110] = carry
20yz ARG Ry, Rz Ry = Ry + Rz
[1110] = carry
Cxkk ARI Rx, kk Rx = Rx + kk
21yz ARX Ry, [Rz]
Ry, Rz
Ry = Ry + [Rz]
[1110] = carry
22yz AV Vy, Vz Vy = Vy + Vz
[1110] = carry
Exkk AVI Vx, kk Vx = Vx + kk
390z CHGS Rz Rz = 0 - Rz
(change sign)
39aa CHGS [aa]
aa
[11aa/11aa+1] = 0 - [11aa/11aa+1]
(change sign)
0C CLRTV Clear TV screen
2Fyz COLOR Ry, Vz Color Vz on location Ry
((Ry.1 = x, Ry.0 = y)
01aaaa DO aaaa Execute pseudo code at address aaaa, return with RET
010700 DO CBDOUT Convert binary to decimal and output
01073D DO COLDOT Color dot
01078F DO DIGIT Get digit
0101D7 DO GOEZ Goto address bb in the current page if [1Caa] = 0
010143 DO IADD [1Caa/1Caa+1] = [1Caa/1Caa+1] + [1Cbb/1Cbb+1]
01017F DO IFLOAT [11aa/11aa+1] = [11bb/11bb+1]
010763 DO INTEG Get integer
0104ED DO ISIGN Set carry flag [1C10] if [1Caa/1Caa+1] is negative
010152 DO ISUB [1Caa/1Caa+1] = [1Caa/1Caa+1] - [1Cbb/1Cbb+1]
010550 DO KEYOUT Output keyword
010520 DO LOOKUP Lookup keyword
010737 DO SETCOL Set Color map to one colour
010752 DO SKSP Vy = next character from [Rz]
If space is found take next character
Rz will point to next character
0101FD DO SYNC Wait for sync, CPU in IDLE state
0E EML Execute following Machine Language
00aaaa EXEC aaaa Execute machine code at address aaaa, return with SEP R4
00002C EXEC INIT Initialisation routine
3B0zaa FIX Rz, [aa]
Rz, aa
Rz = [11aa/11aa+1]
3Baabb FIX [aa], [bb]
aa, bb
[11aa/11aa+1] = [11bb/11bb+1]
3Caabb FADD [aa], [bb]
aa, bb
[11aa/11aa+1] = [11aa/11aa+1] + [11bb/11bb+1]
3Faabb FDIV [aa], [bb]
aa, bb
[11aa/11aa+1] = [11aa/11aa+1] / [11bb/11bb+1]
3Aaa0z FLOAT [aa], Rz
aa, Rz
[11aa/11aa+1] = Rz
3Aaabb FLOAT [aa], [bb]
aa, bb
[11aa/11aa+1] = [11bb/11bb+1]
38aabb FMOV [aa], [bb]
aa, bb
[11aa/11aa+1] = [11bb/11bb+1]
3Eaabb FMPY [aa], [bb]
aa, bb
[11aa/11aa+1] = [11aa/11aa+1] * [11bb/11bb+1]
3Daabb FSUB [aa], [bb]
aa, bb
[11aa/11aa+1] = [11aa/11aa+1] - [11bb/11bb+1]
04aa GO aa Goto address aa in the current page
05aa GOCR aa Goto address aa in the current page if ...
170zaa GOEZ Rz, aa Goto address aa in the current page if Rz = 0
17aabb GOEZ [aa], bb
aa, bb
Goto address bb in the current page if [11aa] = 0
35aabb GOEZ [aa], bb Goto address bb in the current page if [11aa] = 0
Dxkkaa GOEQ Vx, kk, aa Goto address aa in the current page if Vx = kk
140ykkaa GOGE Vy, kk, aa Goto address aa in the current page if Vy >= kk
14kaakkbb GOGE [aa], kk, bb
aa, kk, bb
Goto address bb in the current page if [11aa] >= kk
150ykkaa GOLT Vy, kk, aa Goto address aa in the current page if Vy < kk
15aavvbb GOLT [aa], kk, bb
aa, kk, bb
Goto address bb in the current page if [11aa] < kk
06aa GONC aa Goto address aa in the current page if no carry
Fxkkaa GONE Vx, kk, aa Goto address aa in the current page if Vx != kk
5xaa GONZ Vx, aa Goto address aa in the current page if Vx != 0
03aaaa GOTO aaaa Goto address aaaa
4xaa GOZR Vx, aa Goto address aa in the current page if Vx = 0
070z GOX Rz Goto address in Rz
07aa GOX [aa]
aa
Goto address [11aa/11aa+1]
0B0yaa KEY Vy, aa Goto address aa in the current page if no key pressed, otherwise return key in Vy
0Baabb KEY [aa], bb
aa, bb
Goto address bb in the current page if no key pressed, otherwise return key in [11aa]
09 KEYT Key tone - not implemented, simple sound board key tone is done in the WKEY routine
7xaa LRD Rx, [aa]
Rx, aa
Rx = [11aa/11aa+1]
26yz LRG Ry, Rz Ry = Rz
6xaaaa LRGI Rx, aaaa Rx = aaaa
27yz LRX Ry, [Rz]
Ry, Rz
Ry = [Rz/Rz+1]
28yz LV Vy, Vz Vy = Vz
9xaa LVD Vx, [aa]
Vx, aa
Vx = [11aa]
8xkk LVI Vx, kk Vx = kk
29yz LVX Vy, [Rz]
Vy, Rz
vy = [Rz]
160z OUTS Vz Output character in Vz
16kk OUTS [aa]
aa
Output character on [11aa]
0F OUTSI Output characters following command until character with b7=1 is detected
1B0zkk POPM Rz, kk Pop registers from stack starting with Rz and kk bytes
1Baakk POPM [aa], kk
aa, kk
Pop memory values from stack starting with [aa] and kk bytes
1A0zvv PUSHM Rz, kk Push registers to stack starting with Rz and kk bytes
1Akkvv PUSHM [aa], kk
aa, kk
Push memory values to stack starting with [aa] and kk bytes
190z RAND Vz Vz = random value
19aa RAND [aa]
aa
[aa] = random value
11 RCR Reset carry
02 RETURN Return from DO
1Fyz RT [Ry], Vz
Ry, Vz
Read Vz blocks from tape to [Ry]
10 SCR Set carry
180zaabb SHOW Rz, [aa], [bb]
Rz, aa, bb
Show pattern on [Rz, 5 bytes] on position x = [aa] and y = [bb]
1Cyl SHL Ry, l Shift left Ry l times
1Dyl SHR Ry, l Shift right Ry l times
37aa SIGN [aa]
aa
Set carry flag [1110] if [11aa/11aa+1] is negative
33yz SKSP Vy, Rz
Vy, Rz
Vy = next character from [Rz]
If space is found take next character
Rz will point to next character
130zkk SRI Rz, kk Rz = Rz - kk
13aabb SRI [aa], kk
aa, kk
[1Caa/1Caa+1] = [1Caa/1Caa+1] - kk
23yz SRG Ry, Rz Ry = Ry - Rz
[1110] = carry
24yz SRX Ry, [Rz]
Ry, Rz
Ry = Ry - [Rz]
[1110] = carry
Axaa STRD [aa], Rx
aa, Rx
[11aa] = Rx.1, [11aa+1] = Rx.0
2Axy STRX [Ry], Rx
Ry, Rx
[Ry] = Rx.1, [Ry+1] = Rx.0
Bxaa STVD [aa], Vx
aa, Vx
[11aa] = Vx
2Byz STVX Vy, [Rz]
Vy, Rz
Vy = [Rz]
25yz SV Vy, Vz Vy = Vy - Vz
[1110] = carry
34 SYNC Wait for sync, CPU in IDLE state
0Akk TAPE kk Tape I/O, kk=0: stop, kk=1: load, kk=2: save
0D0z TV Vz Vz to TV output
0Daa TV [aa]
aa
[11aa] to TV output
2Cyz VAND Vy, Vz Vy = Vy AND Vz
2Dyz VOR Vy, Vz Vy = Vy OR Vz
2Eyz VXOR Vy, Vz Vy = Vy XOR Vz
08 WKEY Wait until NO key is pressed and key beep sound when using simple sound card
1Eyz WT [Ry], Rz
Ry, Rz
Write Vz blocks from tape from [Ry]