From a831c937c6d6d8484dffea9fec30e4e010835fcf Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Tue, 5 Aug 2025 12:49:08 +0200 Subject: [PATCH] SDL2 version --- go.mod | 5 +++- go.sum | 2 ++ main.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index adda519..016e076 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,10 @@ module gb-player go 1.24.5 -require github.com/stretchr/testify v1.10.0 +require ( + github.com/stretchr/testify v1.10.0 + github.com/veandco/go-sdl2 v0.4.40 +) require ( github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 713a0b4..85469e5 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/veandco/go-sdl2 v0.4.40 h1:fZv6wC3zz1Xt167P09gazawnpa0KY5LM7JAvKpX9d/U= +github.com/veandco/go-sdl2 v0.4.40/go.mod h1:OROqMhHD43nT4/i9crJukyVecjPNYYuCofep6SNiAjY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/main.go b/main.go index e56f3c1..1b22521 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,18 @@ package main import ( "fmt" + "log" + "runtime" + "gb-player/gb" + + "github.com/veandco/go-sdl2/sdl" ) +func init() { + runtime.LockOSThread() +} + func main() { cartridge := gb.Insert("rom.gb") fmt.Println("Title:", cartridge.Title) @@ -15,4 +24,68 @@ func main() { fmt.Println("RAM size:", cartridge.RAMSize) fmt.Println("Publication destination:", cartridge.Destination) fmt.Println("ROM version:", cartridge.Version) + fmt.Println() + + cpu := gb.Reset() + fmt.Println("Program counter:", cpu.PC) + gb.Tick(&cpu) + fmt.Println("Program counter:", cpu.PC) + + if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { + log.Fatal(err) + } + defer sdl.Quit() + + window, err := sdl.CreateWindow( + "GB Player", + sdl.WINDOWPOS_UNDEFINED, + sdl.WINDOWPOS_UNDEFINED, + 800, 600, + sdl.WINDOW_SHOWN) + if err != nil { + panic(err) + } + defer window.Destroy() + + renderer, err := sdl.CreateRenderer(window, -1, 0) + if err != nil { + panic(err) + } + defer renderer.Destroy() + + renderer.RenderSetVSync(true) + renderer.SetDrawColor(0x63, 0x94, 0xED, 0xff) + + var frameCount uint32 = 0 + var startTicks = sdl.GetTicks() + + running := true + for running { + // frameStartTime := sdl.GetTicks() + + for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { + switch event.(type) { + case *sdl.QuitEvent: + println("Quit") + running = false + break + } + } + + renderer.Clear() + renderer.Present() + + // Calculate framerate + frameCount++ + currentTicks := sdl.GetTicks() + elapsed := currentTicks - startTicks + if elapsed >= 1000 { + fps := float32(frameCount) / (float32(elapsed) / 1000.0) + fmt.Printf("FPS: %.2f\n", fps) + + // Reset counters + frameCount = 0 + startTicks = currentTicks + } + } }