-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.go
106 lines (94 loc) · 1.99 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"flag"
"io/ioutil"
"log"
"math/rand"
"time"
_ "github.com/veandco/go-sdl2/gfx"
_ "github.com/veandco/go-sdl2/mix"
"github.com/veandco/go-sdl2/sdl"
"github.com/wtlangford/goboy/gb"
"github.com/wtlangford/goboy/ui"
)
var (
cartridgeFile = flag.String("cartridge", "", "cartridge to play")
)
func main() {
flag.Parse()
//log.SetFlags(0)
if *cartridgeFile == "" {
log.Println("No cartridge file specified!")
return
}
fileBytes, err := ioutil.ReadFile(*cartridgeFile)
if err != nil {
log.Println("Cartridge file does not exist!")
return
}
sdlMain(fileBytes)
}
func realMain(fileBytes []byte, win ui.Window) {
_ = gb.NewBus(fileBytes, win)
go func() {
w, h := 10, 10
gscale := make([]byte, w*h, w*h)
for {
for i := 0; i < w*h; i++ {
gscale[i] = byte(rand.Intn(4))
}
win.DrawGrayscale(gscale, w, h)
time.Sleep(500 * time.Millisecond)
}
//win.Stop()
}()
win.Start()
}
func sdlMain(fileBytes []byte) {
var win ui.Window
var err error
if err = sdl.Init(sdl.INIT_AUDIO | sdl.INIT_VIDEO | sdl.INIT_EVENTS); err != nil {
log.Panicln(err)
}
defer sdl.Quit()
defer log.Println("shutting down")
sdl.Main(func() {
log.Println("in SDL main")
win, err = ui.NewSDLWindow(480, 432)
if err != nil {
return
}
w, h := 160, 144
gscale := make([]byte, w*h, w*h)
running := true
go func() {
for running {
for i := 0; i < w*h; i++ {
gscale[i] = byte(rand.Intn(4))
}
win.DrawGrayscale(gscale, w, h)
time.Sleep(17 * time.Millisecond)
}
}()
for running {
sdl.Do(func() {
switch e := sdl.PollEvent().(type) {
case *sdl.QuitEvent:
running = false
case *sdl.KeyboardEvent:
if e.Repeat != 0 {
break
}
if e.Keysym.Sym == sdl.K_RETURN && e.State == sdl.PRESSED {
win.(*ui.SDLWindow).ToggleFullscreen()
} else if e.Keysym.Sym == sdl.K_ESCAPE && e.State == sdl.PRESSED {
win.(*ui.SDLWindow).Info()
}
}
})
}
})
if err != nil {
log.Panicln(err)
}
}