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.
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.
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] |