Swiftpack.co - ryanggrey/Chip8EmulatorPackage as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ryanggrey.
ryanggrey/Chip8EmulatorPackage 0.0.13
A Chip-8 emulator Swift package. For use in macOS, iOS, watchOS and tvOS projects.
⭐️ 5
🕓 2 years ago
macOS watchOS tvOS
.package(url: "https://github.com/ryanggrey/Chip8EmulatorPackage.git", from: "0.0.13")

Chip 8 Emulator Swift Package

A Chip-8 emulator Swift package. For use in macOS, iOS, watchOS and tvOS projects.

This package implements the core functionality of a Chip-8 emulator in Swift. It contains no platform UI elements and this is left to a consumer projects to implement.

Design

The emulator package contains a Chip8Engine which drives the Chip-8 run loop.

Start the engine

chip8Engine.start()

Stop the engine

chip8Engine.stop()

Feed inputs into the engine

chip-8 keys (Chip8InputCode)

  • chip8Engine.handleKeyDown(key: key)
  • chip8Engine.handleKeyUp(key: key)

Receive callbacks from the engine

The callbacks are handled through the delegate pattern. Set the delegate of the engine:

override func viewDidLoad() {
  super.viewDidLoad()
  chip8Engine.delegate = self
}

Rendering

The engine will call the delegate render method when the engine determines that a render of the pixels is necessary.

This will only be called when the pixels have changed. The engine assumes that pixels have been rendered on a call to the delegate and will not re-call with the same pixels.

Implement the rendering method:

extension YourViewController: Chip8EngineDelegate {
  func render(screen: Chip8Screen) {
    // ...
  }
}

Beeping

The engine will call the delegate beep method when the engine determines that a sound effect needs to be played.

Implement the beep method using the provided BeepPlayer (or through a custom implementation):

extension YourViewController: Chip8EngineDelegate {
  func beep() {
    beepPlayer.play()
    // haptics etc.
  }
}

Consumer Projects

Assets

ROMs

The ROMs bundled into this project are from https://github.com/dmatlack/chip8

Sounds

beep.wav file in Assets is from Mixkit, originally titled mixkit-player-jumping-in-a-video-game-2043.wav. See here for Mixkit license.

References

I made heavy use of the following resources when working on this project:

GitHub

link
Stars: 5
Last commit: 2 years ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics