CHIP-8
# CHIP-8

CHIP-8 beschreibt sowohl eine interpretierte Programmiersprache, die an Assembler angelehnt ist, als auch die virtuelle Maschine, innerhalb der die Anwendungen ausgeführt werden. CHIP-8 ist plattformunabhängig und kann daher als ein Vorgänger moderner VM wie Java VM oder der .NET CLR angesehen werden.

## Geschichte

CHIP-8 wurde von Joseph Weisbecker Mitte der 70er-Jahre entwickelt. Ursprünglich wurde die Sprache für Heimcomputer wie den COSMAC VIP oder den TELMAC konzipiert. Das Ziel war eine einfache Sprache zur plattformunabhängigen Entwicklung von Videospielen bereitzustellen.
Im Jahr 1991 entwickelte Erik Bryntse einen Nachfolger zu CHIP-8, den sogenannten SCHIP (Super CHIP). Dieser erweiterte CHIP-8 um einige zusätzliche Befehle und bietet beispielsweise eine höhere Auflösung. Der von Bryntse entwickelte CHIP48-Interpreter lief auf dem grafischen Taschenrechner HP-48.
Heute finden sich CHIP-8-Interpreter für eine Vielzahl moderner System, wie beispielsweise Mobiltelefone oder Spielkonsolen. Grund für die hohe Verbreitung ist die vergleichsweise einfache Umsetzung der Sprache, was sie zu einem beliebten Einstiegsprojekt für Entwickler von Emulatoren macht.

## Anwendungen

Trotz der hohen Anzahl an Interpretern existieren vergleichsweise wenige Anwendungen. Den Großteil machen einfache Arcade-Umsetzungen von Spielen wie Pong, Space Invaders oder Tetris aus. Komplexere Anwendungen sind auf Grund des geringen Speichers und der limitierten Grafik nicht möglich. Viele Spiele sind als Public-Domain frei im Internet verfügbar.

## Eigenschaften

Die Programmiersprache ist an die Assemblersprache angelehnt. Anwendungen werden mittels Opcodes programmiert. Ein Opcode ist dabei ein 16-Bit Wert, der einen Befehl sowie gegebenenfalls dessen Argumente repräsentiert. Die Opcodes werden vom Interpreter innerhalb einer Virtuellen Maschine ausgeführt. Oft werden CHIP-8-Interpreter auch als Emulatoren bezeichnet. Dies ist jedoch streng genommen falsch, da es sich bei CHIP-8-Programmen nicht um lauffähigen Maschinencode handelt, sondern um Bytecode.

### Speicher

Der Adressbereich von CHIP-8 geht von 200h bis FFFh. Insgesamt stehen damit 3584 Bytes an Arbeitsspeicher zur Verfügung. Der Anfang des Adressraumes ist für den Interpreter selbst reserviert.

### Register

CHIP-8 bietet 16 8-Bit Register für Daten, sowie ein 16-Bit-Adressregister.

### Grafik und Sound

Die Auflösung beträgt 64×32 Pixel bei 2 Farben (monochrom). SCHIP bietet eine verbesserte Auflösung von 128×64 Pixel. Die einzige Möglichkeit zur Soundausgabe ist ein einfacher Signalton (Beep).

### Eingabe

Die Benutzereingabe erfolgt über eine Tastatur mit 16 Tasten, die ähnlich dem Ziffernblock aufgebaut ist. Die Tasten sind hexadezimal von 0 bis F nummeriert.