Compare commits
	
		
			No commits in common. "70c0b4aee5831322195edd310037f76cc58ee572" and "b3da2287225d70e1c6f74e8ca47c9ccf3e6f507a" have entirely different histories.
		
	
	
		
			70c0b4aee5
			...
			b3da228722
		
	
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,2 +1,2 @@
 | 
				
			|||||||
rom.gb
 | 
					rom.gb
 | 
				
			||||||
imgui.ini
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
package gb
 | 
					package gb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
					 | 
				
			||||||
	"encoding/binary"
 | 
						"encoding/binary"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
@ -245,7 +244,7 @@ type Cartridge struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Insert(filename string) Cartridge {
 | 
					func Insert(filename string) Cartridge {
 | 
				
			||||||
	file, err := os.Open(filename)
 | 
						file, err := os.Open("rom.gb")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(err)
 | 
							log.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -271,7 +270,7 @@ func Insert(filename string) Cartridge {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Convert some header values
 | 
						// Convert some header values
 | 
				
			||||||
	cartridge.Title = string(bytes.Trim(header.Title[:], "\x00"))
 | 
						cartridge.Title = string(header.Title[:])
 | 
				
			||||||
	cartridge.Mapper = cartridgeTypes[header.CartridgeType]
 | 
						cartridge.Mapper = cartridgeTypes[header.CartridgeType]
 | 
				
			||||||
	if header.OldLicenseeCode == 0x33 {
 | 
						if header.OldLicenseeCode == 0x33 {
 | 
				
			||||||
		// FIXME(m): Support new licensee codes
 | 
							// FIXME(m): Support new licensee codes
 | 
				
			||||||
 | 
				
			|||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
package gb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"testing"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestInsertCartridge(t *testing.T) {
 | 
					 | 
				
			||||||
	cartridge := Insert("../rom.gb")
 | 
					 | 
				
			||||||
	assert := assert.New(t)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.Title, "SEIKEN DENSETSU")
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.Mapper, "MBC2+BATTERY")
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.Licensee, "Square")
 | 
					 | 
				
			||||||
	assert.False(cartridge.SGBSupport, "SGB support should be false")
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.ROMSize, 256)
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.RAMSize, "0 - No RAM")
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.Destination, "Overseas only")
 | 
					 | 
				
			||||||
	assert.Equal(cartridge.Version, 0)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										21
									
								
								gb/cpu.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								gb/cpu.go
									
									
									
									
									
								
							@ -1,21 +0,0 @@
 | 
				
			|||||||
package gb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Cpu struct {
 | 
					 | 
				
			||||||
	A     uint8
 | 
					 | 
				
			||||||
	Flags uint8
 | 
					 | 
				
			||||||
	BC    uint16
 | 
					 | 
				
			||||||
	DE    uint16
 | 
					 | 
				
			||||||
	HL    uint16
 | 
					 | 
				
			||||||
	SP    uint16
 | 
					 | 
				
			||||||
	PC    uint16
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Reset() Cpu {
 | 
					 | 
				
			||||||
	cpu := Cpu{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return cpu
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Tick(cpu *Cpu) {
 | 
					 | 
				
			||||||
	cpu.PC++
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										11
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								go.mod
									
									
									
									
									
								
							@ -1,14 +1,3 @@
 | 
				
			|||||||
module gb-player
 | 
					module gb-player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.24.5
 | 
					go 1.24.5
 | 
				
			||||||
 | 
					 | 
				
			||||||
require (
 | 
					 | 
				
			||||||
	github.com/AllenDang/cimgui-go v1.3.1
 | 
					 | 
				
			||||||
	github.com/stretchr/testify v1.10.0
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require (
 | 
					 | 
				
			||||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
					 | 
				
			||||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
					 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								go.sum
									
									
									
									
									
								
							@ -1,12 +0,0 @@
 | 
				
			|||||||
github.com/AllenDang/cimgui-go v1.3.1 h1:2f33a7GHJwRofH0CRQbUTXywazfph/K5LQLKyOBv24k=
 | 
					 | 
				
			||||||
github.com/AllenDang/cimgui-go v1.3.1/go.mod h1:Fuj3G2E3zd2bMQxmhuSPSFFl41MwS+MhyZ6DHgYq/YM=
 | 
					 | 
				
			||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
					 | 
				
			||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
					 | 
				
			||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
					 | 
				
			||||||
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=
 | 
					 | 
				
			||||||
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=
 | 
					 | 
				
			||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
					 | 
				
			||||||
							
								
								
									
										80
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								main.go
									
									
									
									
									
								
							@ -2,81 +2,17 @@ package main
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
					 | 
				
			||||||
	"runtime"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"gb-player/gb"
 | 
						"gb-player/gb"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/AllenDang/cimgui-go/backend"
 | 
					 | 
				
			||||||
	"github.com/AllenDang/cimgui-go/backend/sdlbackend"
 | 
					 | 
				
			||||||
	"github.com/AllenDang/cimgui-go/imgui"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var currentBackend backend.Backend[sdlbackend.SDLWindowFlags]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func init() {
 | 
					 | 
				
			||||||
	runtime.LockOSThread()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func showDebugWindow() {
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("Framerate: %.1f FPS", imgui.CurrentIO().Framerate()))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func showROMWindow(cartridge *gb.Cartridge) {
 | 
					 | 
				
			||||||
	imgui.Begin("ROM")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("Title: %s", cartridge.Title))
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("Mapper: %s", cartridge.Mapper))
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("Licensee: %s", cartridge.Licensee))
 | 
					 | 
				
			||||||
	if cartridge.SGBSupport {
 | 
					 | 
				
			||||||
		imgui.Text("Super Game Boy support?: Yes")
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		imgui.Text("Super Game Boy support?: No")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("ROM size: %d bytes", cartridge.ROMSize))
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("RAM size: %s", cartridge.RAMSize))
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("Publication: %s", cartridge.Destination))
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("ROM version: %d", cartridge.Version))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	imgui.End()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func showCPUWindow(cpu *gb.Cpu) {
 | 
					 | 
				
			||||||
	imgui.Begin("CPU")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	imgui.Text(fmt.Sprintf("PC: %d", cpu.PC))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	imgui.End()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	currentBackend, err := backend.CreateBackend(sdlbackend.NewSDLBackend())
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		log.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	currentBackend.SetBgColor(imgui.NewVec4(0.45, 0.55, 0.6, 1.0))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	currentBackend.CreateWindow("GB Player", 1200, 900)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	currentBackend.SetDropCallback(func(p []string) {
 | 
					 | 
				
			||||||
		fmt.Printf("drop triggered: %v", p)
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	currentBackend.SetCloseCallback(func() {
 | 
					 | 
				
			||||||
		fmt.Println("window is closing")
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cartridge := gb.Insert("rom.gb")
 | 
						cartridge := gb.Insert("rom.gb")
 | 
				
			||||||
	cpu := gb.Reset()
 | 
						fmt.Println("Title:", cartridge.Title)
 | 
				
			||||||
 | 
						fmt.Println("Mapper:", cartridge.Mapper)
 | 
				
			||||||
	currentBackend.Run(func() {
 | 
						fmt.Println("Licensee:", cartridge.Licensee)
 | 
				
			||||||
		imgui.ClearSizeCallbackPool()
 | 
						fmt.Println("Super Game Boy support?", cartridge.SGBSupport)
 | 
				
			||||||
 | 
						fmt.Println("ROM size:", cartridge.ROMSize, "bytes")
 | 
				
			||||||
		gb.Tick(&cpu)
 | 
						fmt.Println("RAM size:", cartridge.RAMSize)
 | 
				
			||||||
 | 
						fmt.Println("Publication destination:", cartridge.Destination)
 | 
				
			||||||
		showDebugWindow()
 | 
						fmt.Println("ROM version:", cartridge.Version)
 | 
				
			||||||
		showROMWindow(&cartridge)
 | 
					 | 
				
			||||||
		showCPUWindow(&cpu)
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user