Chip8Suite/Notes.org
2025-02-10 19:41:12 -05:00

3.4 KiB

Chip8 Emulator

Reference here.

The memory Layout

The Chip8 has 4095 bytes of memory:

  +-----------------------+
  |                       | 0xFFF - End of Memory
  +-----------------------+
  |                       |
  |                       |
  |                       |
  |     0x200/0xFFF       |
  |     ProgramData       |
  |                       |
  |                       |
  +-----------------------+ 0x200 - Start of Chip8 programs
  |                       |
  |      0x00/0x1FF       |
  |   Reserved for Chip8  |
  |                       |
  +-----------------------+ 0x00 - Start of Chip8 RAM

Chip-8 has a stack that is an array of 16 16-bit values, used to store the addresses that the Chip8 should return to when returning from a subroutine, meaning there can be 16 levels of nested subroutines.

The Character Set

The Chip8 contains some sprites, called character set which are a group of sprites representing the hexadecimal digits from 0 to F. They are 5 bytes long (8x5 pixels). They are stored in the area reserved for Chip8 (0x00-0x1FF).

The following are some examples:

  +----+--------+----+  +----+--------+----+
  |"0" |Binary  |Hex |  |"1" |Binary  |Hex |
  +----+--------+----|  +----+--------+----+ 
  |****|11110000|0xF0|  |  1 |00100000|0x20|
  |*  *|10010000|0x90|  | 11 |01100000|0x60|
  |*  *|10010000|0x90|  |  1 |00100000|0x20|
  |*  *|10010000|0x90|  |  1 |00100000|0x20|
  |****|11110000|0xF0|  | 111|01110000|0x70|
  +----+--------+----+  +----+--------+----+

Registers

Chip8 has 16 8-bit data registers, each can hold 1 byte of information.

Data Registers
V0
V1
V2
V3
V4
V5
V6
V7
V8
V9
VA
VB
VC
VD
VE
VF

That means that the registers should be implemented as an array with a size of 16:

V0 V1 V2 V3 V4 V5 V6 V7 V8

The Chip 8 also has some extra registers:

  • I - used to store memory addresses.
  • PC - points to the address oft he current instruction being executed. All the instructions are 2 bytes in size, so this should be incremented by 2 per instruction executed.
  • SP - 8-bit stack pointer, points to a location in the stack.
  • Sound Timer:

    • Chip8 plays a beep when the sound timer is not zero
    • Decrements at a rate of 70hz
    • When zero no sound is played
  • Delay Timer:

    • Chip8 stops executing instructions when the delay timer is greater than zero.
    • This is also decremented at a rate of 60hz.
    • When the delay timer is zero, the program execution resumes.

The Display

The size of the display is 64x32 pixels, and it's monocrome. Drawing to the display is done with sprites, not pixels. If a sprite overflows the screen, it wraps it back to the other side. The sprites can be a maximum of 8 bits of width, and up to 15 bytes in length.

The Keyboard

The Chip-8 keyboard has 16 keys: from 0 to F.

This is how the keyboard looks:

1 2 3 C
4 5 6 D
7 8 9 E
A 0 B F

Instruction Set

The Chip-8 instruction set has 36 different insturctions. These instructions can be for mathematical operations, drawing and more.