tinygba icon indicating copy to clipboard operation
tinygba copied to clipboard

Tools and helpers for developing GBA programs using TinyGo.

tinygba

gopher

Tools and helpers for developing GBA programs using TinyGo.

snake

Still highly experimental and subject to sudden changes.

How to use

package main

import (
	"machine"

	"image/color"

	"tinygo.org/x/tinygba"
)

var (
	// Colors
	black = color.RGBA{}
	white = color.RGBA{255, 255, 255, 255}
	green = color.RGBA{0, 255, 0, 255}
	red   = color.RGBA{255, 0, 0, 255}

	// Google colors
	gBlue   = color.RGBA{66, 163, 244, 255}
	gRed    = color.RGBA{219, 68, 55, 255}
	gYellow = color.RGBA{244, 160, 0, 255}
	gGreen  = color.RGBA{15, 157, 88, 255}
)

func main() {
	machine.Display.Configure()

	tinygba.FillScreen(black)

	for {
		tinygba.WaitForVBlank()

		update()
	}
}

func update() {
	key := tinygba.ReadButtons()

	switch {
	case tinygba.ButtonStart.IsPushed(key):
		tinygba.FillScreen(black)

	case tinygba.ButtonSelect.IsPushed(key):
		tinygba.FillScreen(white)

	case tinygba.ButtonRight.IsPushed(key):
		tinygba.FillScreen(green)

	case tinygba.ButtonLeft.IsPushed(key):
		tinygba.FillScreen(red)

	case tinygba.ButtonDown.IsPushed(key):
		tinygba.FillScreen(gBlue)

	case tinygba.ButtonUp.IsPushed(key):
		tinygba.FillScreen(gRed)

	case tinygba.ButtonA.IsPushed(key):
		tinygba.FillScreen(gYellow)

	case tinygba.ButtonB.IsPushed(key):
		tinygba.FillScreen(gGreen)

	}
}

Roadmap

  • [ ] Display Control (https://problemkaputt.de/gbatek.htm#lcdvramoverview)

    • [ ] BG Mode 0
    • [ ] BG Mode 1
    • [ ] BG Mode 2
    • [X] BG Mode 3
    • [ ] BG Mode 4
    • [ ] BG Mode 5
  • [ ] OBJ (https://problemkaputt.de/gbatek.htm#lcdobjoverview)

  • [ ] Pallettes (https://problemkaputt.de/gbatek.htm#lcdcolorpalettes)

  • [ ] Sound (https://problemkaputt.de/gbatek.htm#gbasoundcontroller)

  • [ ] Interrupts (https://problemkaputt.de/gbatek.htm#gbainterruptcontrol)