/tsemu

TypeScript Game Boy emulator

Primary LanguageTypeScript

TSEmu

An experiment writing a Game Boy emulator in TypeScript

Try the latest build here: https://atomicjon.github.io/tsemu/

Getting Started

Dev

Parcel is used for building, in development simply run:

yarn start

This will start the dev server at http://localhost:1234

Build

To build a production build run:

yarn build

TODO

  • Basic instruction processing
  • Basic rendering
  • OAM DMA transfers
  • Interrupt handling
  • Joypad input
  • Timer clock
  • Divider clock
  • Basic Tone Audio channels (1 & 2) - frequency only
  • Sprite flags
    • Proper palette implementation
    • Sprite flip
    • Sprite rendering priority
  • Sound
    • Channel 1 - Tone & Sweep
    • Channel 2 - Tone
    • Channel 3 - Wave Output
    • Channel 4 - Noise Output
  • Configurable input for joypad
  • Clock adjustment based on FPS (clock is tied to framerate)
  • Handle STOP/HALT
  • Cartridge type parsing (0x0147)
  • ROM bank switching
  • Scanline based rendering
  • VRAM DMA transfers

Reference Material

The following are the main reference material used during development: