Skip to content

cclp94/chip-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chip-GO

A Chip-8 emulator written in go. Thank you to Tobias Langhoff for the awesome guide

Features

  • 📄 Paginated home selection screen
  • 🕹️ Original COSMAC VIP interpreter (I didn't code any of the quirks, maybe later)
  • 🔊 Beeping sounds using faiface/beep
  • 🖵 OpenGL rendering using gopxl/pixel

Demo

Architecture

The goal for the architecture of the system was to make external dependencies as decoupled from the main interpreter logic as possible.

I leveraged Go's channels and mutexes to achieve this while benefiting from Go's concurrency model to run the different components at different speeds:

  • Interpreter loop: 4Mhz
  • Timers: 60Hz
  • Display: 60Hz or 60fps

Architecture overview:

---
title: Chip-GO
---
erDiagram
    CHIP-8 {
        uint16 fetchOpcode()
        void decodeOpcode()
    }
    DELAY_TIMER {
        atomicInt timer
    }
    SOUND_TIMER {
        atomicInt timer
    }
    KEYBOARD {
        uint16[] keysPressed
    }
    DISPLAY {
        void selectionScene
        void gameScene
    }
    CHIP-8 ||--|| SOUND_TIMER : contains
    CHIP-8 ||--|| DELAY_TIMER : contains
    CHIP-8 ||--o{  KEYBOARD: getKeysPressed
    CHIP-8 ||--|| DISPLAY : display
    KEYBOARD }o--||  DISPLAY: registerKeyPress
Loading

Quick start

This project uses the gopxl/pixel lib, which uses OpenGL and GLFW. The requirements for building and executing the project depend on the underlying system. For ubuntu and WSL (I'm guessing linux in general) simply install the following packages libgl1-mesa-dev xorg-dev libasound2-dev Check here for setup in different systems

Once the requirements are installed:

go build

An executable will be generated. All that's left is to execute it!

./chip-go

About

A CHIP-8 emulator written in go

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages