user input! sorta playable
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
ec8fb167e7
commit
b0797ff4af
@ -332,6 +332,10 @@ func (cpu *Chip8) fifteenIndexOpcodes() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cpu *Chip8) UpdateKeys(newKeys [16]byte) {
|
||||||
|
cpu.keys = newKeys
|
||||||
|
}
|
||||||
|
|
||||||
func (cpu *Chip8) PerformCycle() {
|
func (cpu *Chip8) PerformCycle() {
|
||||||
cpu.opcode = (uint16(cpu.memory[cpu.pc]) << 8) + uint16(cpu.memory[cpu.pc + 1])
|
cpu.opcode = (uint16(cpu.memory[cpu.pc]) << 8) + uint16(cpu.memory[cpu.pc + 1])
|
||||||
cpu.pc += 2
|
cpu.pc += 2
|
||||||
|
@ -3,8 +3,8 @@ package main
|
|||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
"syscall/js"
|
"syscall/js"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/llgcode/draw2d/draw2dimg"
|
"github.com/llgcode/draw2d/draw2dimg"
|
||||||
"github.com/llgcode/draw2d/draw2dkit"
|
"github.com/llgcode/draw2d/draw2dkit"
|
||||||
@ -21,19 +21,57 @@ var sizeMultiplier = 8
|
|||||||
var drawBuf = [64 * 32]byte{}
|
var drawBuf = [64 * 32]byte{}
|
||||||
var drawNeeded = false
|
var drawNeeded = false
|
||||||
var graphicsLock sync.Mutex
|
var graphicsLock sync.Mutex
|
||||||
|
var keysLock sync.Mutex
|
||||||
var window js.Value
|
var window js.Value
|
||||||
|
var keys [16]byte
|
||||||
|
|
||||||
var keyPressHandler js.Func = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
var keyMap = map[int]int{
|
||||||
println(args[0].Get("type").String())
|
88: 0, // x
|
||||||
println(args[0].Get("keyCode").Int())
|
49: 1, // 1
|
||||||
return nil
|
50: 2, // 2
|
||||||
})
|
51: 3, // 3
|
||||||
|
81: 4, // q
|
||||||
|
87: 5, // w
|
||||||
|
69: 6, // e
|
||||||
|
65: 7, // a
|
||||||
|
83: 8, // s
|
||||||
|
68: 9, // d
|
||||||
|
90: 10, // z
|
||||||
|
67: 11, // c
|
||||||
|
52: 12, // 4
|
||||||
|
82: 13, // r
|
||||||
|
70: 14, // f
|
||||||
|
86: 15, // v
|
||||||
|
}
|
||||||
|
|
||||||
|
func keyEventHandle(event js.Value) {
|
||||||
|
println(event.Get("type").String())
|
||||||
|
println(event.Get("keyCode").Int())
|
||||||
|
elem, ok := keyMap[event.Get("keyCode").Int()]
|
||||||
|
if ok {
|
||||||
|
keysLock.Lock()
|
||||||
|
defer keysLock.Unlock()
|
||||||
|
if event.Get("type").String() == "keydown" {
|
||||||
|
keys[elem] = 1
|
||||||
|
} else if event.Get("type").String() == "keyup" {
|
||||||
|
keys[elem] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
println("CHIP8 IS HERE!")
|
println("CHIP8 IS HERE!")
|
||||||
window = js.Global()
|
window = js.Global()
|
||||||
|
|
||||||
window.Call("addEventListener", "keydown", keyPressHandler)
|
window.Call("addEventListener", "keydown", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
||||||
|
keyEventHandle(args[0])
|
||||||
|
return nil
|
||||||
|
}))
|
||||||
|
|
||||||
|
window.Call("addEventListener", "keyup", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
||||||
|
keyEventHandle(args[0])
|
||||||
|
return nil
|
||||||
|
}))
|
||||||
|
|
||||||
cvs, _ = canvas.NewCanvas2d(false)
|
cvs, _ = canvas.NewCanvas2d(false)
|
||||||
cvs.Create(int(width)*sizeMultiplier, int(height)*sizeMultiplier)
|
cvs.Create(int(width)*sizeMultiplier, int(height)*sizeMultiplier)
|
||||||
@ -54,6 +92,9 @@ func main() {
|
|||||||
graphicsLock.Lock()
|
graphicsLock.Lock()
|
||||||
drawBuf = cpu.GetGraphicsBuffer()
|
drawBuf = cpu.GetGraphicsBuffer()
|
||||||
graphicsLock.Unlock()
|
graphicsLock.Unlock()
|
||||||
|
keysLock.Lock()
|
||||||
|
cpu.UpdateKeys(keys)
|
||||||
|
keysLock.Unlock()
|
||||||
}
|
}
|
||||||
i++
|
i++
|
||||||
if i > 7 {
|
if i > 7 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user