BEEP
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Sid 2020-10-13 21:15:49 +01:00
parent 97a4855bea
commit edac661d26
2 changed files with 29 additions and 6 deletions

View File

@ -10,6 +10,7 @@ const graphicsBufferSize = 64 * 32
type Chip8 struct { type Chip8 struct {
addressRegister uint16 addressRegister uint16
beepTimer byte beepTimer byte
beepRequired bool
drawRequired bool drawRequired bool
delayTimer byte delayTimer byte
graphics [graphicsBufferSize]byte graphics [graphicsBufferSize]byte
@ -70,11 +71,22 @@ func (cpu *Chip8) TickTimers() {
if cpu.delayTimer > 0 { if cpu.delayTimer > 0 {
cpu.delayTimer-- cpu.delayTimer--
} }
if cpu.beepTimer > 0 { if cpu.beepTimer == 1 {
cpu.beepRequired = true
cpu.beepTimer--
} else if cpu.beepTimer > 1 {
cpu.beepTimer-- cpu.beepTimer--
} }
} }
func (cpu *Chip8) BeepNeeded() bool {
if cpu.beepRequired == true {
cpu.beepRequired = false
return true
}
return false
}
func (cpu *Chip8) zeroIndexOpcodes() { func (cpu *Chip8) zeroIndexOpcodes() {
if cpu.opcode == 0x00E0 { if cpu.opcode == 0x00E0 {
// fuck it the gc can do the hard work for us // fuck it the gc can do the hard work for us

View File

@ -22,7 +22,7 @@ var drawBuf = [64 * 32]byte{}
var drawNeeded = false var drawNeeded = false
var graphicsLock sync.Mutex var graphicsLock sync.Mutex
var keysLock sync.Mutex var keysLock sync.Mutex
var window js.Value var window, beep js.Value
var keys [16]byte var keys [16]byte
var gameRunning = true var gameRunning = true
@ -45,7 +45,7 @@ var keyMap = map[int]int{
86: 15, // v 86: 15, // v
} }
var gameMap = map[string]func() []byte { var gameMap = map[string]func() []byte{
"pong": getPong, "pong": getPong,
"spaceinv": getSpaceInvaders, "spaceinv": getSpaceInvaders,
"tetris": getTetris, "tetris": getTetris,
@ -81,6 +81,10 @@ func cpuCycle(cpu *chip8.Chip8, c chan int, i int) {
cpu.TickTimers() cpu.TickTimers()
//println("here!") //println("here!")
} }
if cpu.BeepNeeded() {
go playSound()
}
c <- 1 c <- 1
} }
@ -95,7 +99,7 @@ func runGame(game []byte) {
for gameRunning { for gameRunning {
c := make(chan int) c := make(chan int)
go timeCycle(c) go timeCycle(c)
i ++ i++
go cpuCycle(cpu, c, i) go cpuCycle(cpu, c, i)
if i > 7 { if i > 7 {
i = 0 i = 0
@ -125,10 +129,17 @@ func changeGame(event js.Value) {
} }
} }
func playSound() {
beep.Call("play")
//window.Get("navigator").Call("vibrate", 300)
}
func main() { func main() {
println("CHIP8 IS HERE!") println("CHIP8 IS HERE!")
window = js.Global() window = js.Global()
beep = window.Get("Audio").New("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjI1LjEwMQAAAAAAAAAAAAAA/+NAwAAAAAAAAAAAAFhpbmcAAAAPAAAAAwAAA3YAlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaW8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw////////////////////////////////////////////AAAAAExhdmYAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAN2UrY2LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jYMQAEvgiwl9DAAAAO1ALSi19XgYG7wIAAAJOD5R0HygIAmD5+sEHLB94gBAEP8vKAgGP/BwMf+D4Pgh/DAPg+D5//y4f///8QBhMQBgEAfB8HwfAgIAgAHAGCFAj1fYUCZyIbThYFExkefOCo8Y7JxiQ0mGVaHKwwGCtGCUkY9OCugoFQwDKqmHQiUCxRAKOh4MjJFAnTkq6QqFGavRpYUCmMxpZnGXJa0xiJcTGZb1gJjwOJDJgoUJG5QQuDAsypiumkp5TUjrOobR2liwoGBf/X1nChmipnKVtSmMNQDGitG1fT/JhR+gYdCvy36lTrxCVV8Paaz1otLndT2fZuOMp3VpatmVR3LePP/8bSQpmhQZECqWsFeJxoepX9dbfHS13/////aysppUblm//8t7p2Ez7xKD/42DE4E5z9pr/nNkRw6bhdiCAZVVSktxunhxhH//4xF+bn4//6//3jEvylMM2K9XmWSn3ah1L2MqVIjmNlJtpQux1n3ajA0ZnFSu5EpX////uGatn///////1r/pYabq0mKT//TRyTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq/+MQxNIAAANIAcAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==")
window.Call("addEventListener", "keydown", js.FuncOf(func(this js.Value, args []js.Value) interface{} { window.Call("addEventListener", "keydown", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
keyEventHandle(args[0]) keyEventHandle(args[0])
return nil return nil