Download Table of Contents Print this page

Chip-8 Language Programming; Branch Instructions; How To Change And Use The Variables - RCA CDP18S711 Instruction Manual

Rca cosmac vip


Table of Contents
III. CHIP-8 Language Programming
CHIP-8 is an easy-to-learn programming language
that lets you write your own programs. To use the
CHIP-8 language, you must first store the 512-byte
CHIP-8 language program at memory locations 0000 to
01FF. The CHIP-8 language program is shown in
Appendix C in hex form so you can enter it directly in
memory using the hex keyboard. You can then record it
on a memory cassette for future use. Each CHIP-8
instruction is a two-byte (4-hex-digit) code. There are
31, easy-to-use CHIP-8 instructions as shown in Table L
When using CHIP-8 instructions your program must
always begin at location 0200. There are 16 one-
byte variables labeled 0-F. VX or VY refers to the value
of one of these variables. A 63FF instruction sets
variable 3 to the value FF (V3=FF). I is a memory
pointer that can be used to specify any location in RAM.
An A232 instruction would set I= 0232. 1 would then
address memory location 0232.

Branch Instructions

There are several types of jump or branch instructions
in the CHIP-8 language. Instruction 1242 would cause
an unconditional branch to the instruction at memory
location 0242. Instruction BMMM lets you index the
branch address by adding the value of variable 0 to it
before branching. Eight conditional skip instructions let
you test the values of the 16 one-byte variables or
determine if a specific hex key is being pressed. This
latter capability is useful in video game programs. (Only
the least significant hex digit of VX is used to specify
the key.)
A 2570 instruction would branch to a subroutine
starting at location 0570. 00EE at the end of this
subroutine will return program execution to the
instruction following the 2570. The subroutine itself
could use another 2MMM instruction to branch to (or
call) another subroutine. This technique is known as
subroutine nesting. Note that all subroutines called (or
branched to) by 2MMM instructions must end with
00EE. Ignoring this rule will cause hard-to-find
program bugs.
How to Change and
Use the Variables
The CXKK instruction sets a random byte value into
VX. This random byte would have any bits matching 0
bit positions in KK set to 0. For example, a C407
instruction would set V4 equal to a random byte value
between 00 and 07.
A timer (or real-time clock) can be set to any value
between 00 and FF by a FX15 instruction. This timer is
automatically decremented by one, 60 times per second
until it reaches 00. Setting it to FF would require about 4
seconds for it to reach 00. This timer can be examined
with a FX07 instruction. A FX18 instruction causes a
tone to be sounded for the time specified by the value of
VX. A value of FF would result in a 4-second tone. The
minimum time that the speaker will respond to is that
corresponding to the variable value 02.
A FX33 instruction converts the value of VX to
decimal form. Suppose 1=0422 and V9=A7. A F933
instruction would cause the following bytes to be stored
in memory:
Since A7 in hex equals 167 in decimal, we see that the


Table of Contents

Table of Contents