This commit is contained in:
parent
97a4855bea
commit
edac661d26
@ -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
|
||||||
|
@ -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,10 +45,10 @@ 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,
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyEventHandle(event js.Value) {
|
func keyEventHandle(event js.Value) {
|
||||||
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user