The Computer programming language CHIP-8 was originally developed by a Design Engineer by the name of Joe Weisbecker at RCA Labs, USA (1975-76). It’s reason for being was simply to allow users of low cost Microcomputers to write there own Video Games without the complication of having to deal with lower level Machine code.
The programmer used a Hexadecimal Keypad to input data. The keypad typically produces Row and Column signal lines that are capable of being scanned by the Computer to determine which Keys were pressed. This method of programming was a significant step up from Binary coding which was very tedious to enter, and required a deep understanding of the Microprocessors internal architecture.
The first computer to have CHIP-8 resident was RCA’s COSMAC VIP.
CHIP-8 is an Interpreter based language, and is usually found in ROM (Read Only Memory), within the Processors Memory Map. Because of this it can be termed – the Computers Operating System (CHIPOS).
The Vintage limitations of its use are – a graphics screen of only 64×32 pixel resolution, with a small program addressing space of only 4K bytes. This is due to the 12 bit width of the Memory Pointer – Register I.
Monochrome Graphic display. Color was not initially supported.
The Users program resides in RAM (Random Access Memory) starting at address 0200 Hex.
Each programming Statement is two bytes in length (4 Hex digits).
The Instruction Set Consists of 33 Instructions.
There are 16 one byte variables – V0 to VF which can be modified using a variety of arithmetic/logic, and conditional branch instructions.
Worth repeating – The Memory Pointer (Register I) is 12 bits in length, thus giving an addressing range of 4K bytes. A big limitation by today’s standards.
Machine code programs can be called within CHIP-8 programs.
The CHIP-8 Computer Screen is organized in X,Y format. X co-ordinates range from 0 to 63, and Y co-ordinates range from 0 to 31. Co-ordinate 0,0 is at the top left side of the Screen.
Here is an example of CHIP-8 code that amplifies the simplicity of how a character can be written to the Screen: