GPL-4
Information
I expect GPL-4 stands for Game Programming Language, version 4.
GPL-4 is used in the game 'Coin Bowling' running on the RCA Video Coin Arcade machine.
V0-F are stored on memory locations 0880-088F.
Note: E... is not defined.
Definitions
| aaa | 12 bit address |
| kk | 8 bit constant |
| d | 4 bit constant |
| n | 4 bit constant |
| x | Register number Vx (x = 0 to F) |
| y | Register number Vy (y = 0 to F) |
| z | Register number Vz (y = 0 to F) |
| [8aa] | Memory value of address aa within page 8 (RAM) |
| [Vy] | Memory value of address in register Vy within in page 8 (RAM) |
| F= | Tone frequency |
| . | Not used, value doesn't matter |
| 1..9, A..F | Hexadecimal digits |
Syntax
| Opcode | Mnemonic | Parameter | Definition |
|---|---|---|---|
| 5xkk | ADD | Vx, kk | Vx = Vx + kk |
| 8xy4 | ADD | Vx, Vy | Vx = Vx + Vy, V0 is carry / not borrow |
| 8xy2 | AND | Vx, Vy | Vx = Vx AND Vy |
| Ddkk | BEEP | F=kk, d kk, d |
Beep with a frequency kk and duration d |
| 1aaa | CALL | aaa | Call subroutine at aaa. The subroutine must end in 0100 (which is the 'GPL-4' equivalent of RETURN) |
| C.54 | DECB | RB = RB - 1 | |
| 9xln | DRW | Vx, l, n | Draw pattern, [RA] = pattern address in page 3, Vx = tv cell address, l = number of lines, n = number of graphics |
| C.50 | INCA | RA = RA + 1 | |
| C.51 | INCB | RB = RB + 1 | |
| Faaa | JP | aaa | Jump to address aaa |
| Cx05 | LD | BP, RA, Vx | Store BCD Pattern value of Vx in RA, RA+1 and RA+2 |
| Aaaa | LD | RA, aaa A, aaa |
RA = aaa |
| Baaa | LD | RB, aaa B, aaa |
RB = aaa |
| Cx4D | LD | RA.0, Vx A.0, Vx |
RA.0 = Vx |
| Cx41 | LD | RB.0, Vx B.0, Vx |
RB.0 = Vx |
| Cx44 | LD | RB.1, Vx B.1, Vx |
RB.1 = Vx |
| 6x5D | LD | Vx, COIN | Load status coin detector to Vx, no coin Vx = 1, coin Vx = 0 |
| 6x63 | LD | Vx, FIREA | Load status fire key player A to Vx, no fire pressed Vx = 1, fire pressed Vx = 0 |
| 6x67 | LD | Vx, FIREB | Load status fire key player B to Vx, no fire pressed Vx = 1, fire pressed Vx = 0 |
| 6x6B | LD | Vx, JOYA | Load status joystick keys player A to Vx |
| 6x74 | LD | Vx, JOYB | Load status joystick keys player B to Vx |
| 2xkk | LD | Vk, kk | Vx = kk |
| 6x7B | LD | Vx, PAR | Load input parameter switch to Vx |
| Cx56 | LD | Vx, RA.0 Vx, A.0 |
Vx = RA.0 |
| Cx47 | LD | Vx, RB.0 Vx, B.0 |
Vx = RB.0 |
| Cx4A | LD | Vx, RB.1 Vx, B.1 |
Vx = RB.1 |
| Cx35 | LD | Vx, [RA] Vx, [A] |
Vx = [RA], RA = RA + 1 |
| Cx38 | LD | Vx, [RB] Vx, [B] |
Vx = [RB], RB = RB + 1 |
| 4xy1 | LD | Vy, Vx | Vy = Vx |
| Cx3B | LD | [RA], Vx [A], Vx |
[RA] = Vx, RA = RA + 1 |
| Cx3E | LD | [RB], Vx [B], Vx |
[RB] = Vx, RB = RB + 1 |
| 8xy1 | OR | Vx, Vy | Vx = Vx OR Vy |
| 0100 | RETURN | Return from subroutine | |
| 7xkk | RND | Vx, kk | Vx = random AND kk |
| 8xy6 | SHR | Vx, Vy | Vx = Vy SHR, V0 is carry / not borrow |
| 3xkk | SNE | Vx, kk | Skip next instruction if Vx != kk |
| 4xy0 | SNE | Vx, Vy | Skip next instruction if Vx != Vy |
| 8xy5 | SUB | Vx, Vy | Vx = Vx - Vy, V0 is carry / not borrow |
| 8xy7 | SUBN | Vx, Vy | Vx = Vy - Vx, V0 is carry / not borrow |
| 0aaa | SYS | aaa | Call CDP1801 code at aaa. The subroutine must end in a RET (D4) |
| 8xy3 | XOR | Vx, Vy | Vx = Vx XOR Vy |