mirror of
https://github.com/JetSetIlly/Gopher2600.git
synced 2024-06-02 20:18:20 -04:00
chip registers window now has bit selection
updated drawListSequence to support frame alignment updated imgui-go to support new Style.Color() function changed colors of some GUI elements corrected labelling of SWACHA to SWCHA, removed SWBCNT and reorderd widgets
This commit is contained in:
parent
66175a257a
commit
a463f1db27
6
go.mod
6
go.mod
|
@ -2,16 +2,16 @@ module github.com/jetsetilly/gopher2600
|
|||
|
||||
go 1.15
|
||||
|
||||
//replace github.com/inkyblackness/imgui-go/v2 v2.2.0 => github.com/JetSetIlly/imgui-go/v2 v2.2.1-0.20200317095507-51a6e45b93a9
|
||||
//replace github.com/inkyblackness/imgui-go/v2 v2.5.0 => github.com/JetSetIlly/imgui-go/v2 v2.5.1-0.20200908214833-6825511d393c
|
||||
|
||||
//replace github.com/inkyblackness/imgui-go/v2 v2.2.0 => ../imgui-go
|
||||
//replace github.com/inkyblackness/imgui-go/v2 v2.5.0 => /home/steve/Go/steve_forks/imgui-go
|
||||
|
||||
require (
|
||||
github.com/go-audio/audio v1.0.0
|
||||
github.com/go-audio/wav v1.0.0
|
||||
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7
|
||||
github.com/hajimehoshi/go-mp3 v0.3.1
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.0
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.1-0.20200909052151-c2b62c6be2a7
|
||||
github.com/pkg/term v0.0.0-20190109203006-aa71e9d9e942
|
||||
github.com/veandco/go-sdl2 v0.4.4
|
||||
)
|
||||
|
|
6
go.sum
6
go.sum
|
@ -1,5 +1,9 @@
|
|||
github.com/JetSetIlly/imgui-go/v2 v2.2.1-0.20200317095507-51a6e45b93a9 h1:HlgZD7Z+nJwx+HMtHvMNcG6SipWsSXMTA03h1sH3ixg=
|
||||
github.com/JetSetIlly/imgui-go/v2 v2.2.1-0.20200317095507-51a6e45b93a9/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/JetSetIlly/imgui-go/v2 v2.5.1-0.20200908212545-256edfd69d7e h1:FTmFTQpdIeKW3+AagXPtbP9e3c8VSVX5hAHOksItomo=
|
||||
github.com/JetSetIlly/imgui-go/v2 v2.5.1-0.20200908212545-256edfd69d7e/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/JetSetIlly/imgui-go/v2 v2.5.1-0.20200908214833-6825511d393c h1:WW9VyAIlvaO4/EkmjzJZu0KPt7s+fmLPaSWP5K5AVDA=
|
||||
github.com/JetSetIlly/imgui-go/v2 v2.5.1-0.20200908214833-6825511d393c/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4=
|
||||
github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs=
|
||||
|
@ -20,6 +24,8 @@ github.com/inkyblackness/imgui-go/v2 v2.4.1 h1:yD6m1xqTNl/HF0M4ceN1HNhUKRrk+SU7n
|
|||
github.com/inkyblackness/imgui-go/v2 v2.4.1/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.0 h1:kz7oO/di/TmxHKgh5So+RyOgWMtK4jLfGKrpRKi/JQM=
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.0/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.1-0.20200909052151-c2b62c6be2a7 h1:rYHbANjC8SF9JP7n85+f9tgUm8Akvdc7wUhLDA0Whj4=
|
||||
github.com/inkyblackness/imgui-go/v2 v2.5.1-0.20200909052151-c2b62c6be2a7/go.mod h1:cwQKd6U2onyuT5qwSC3DKCRsUE1SQ58TSVVpLoW/pDs=
|
||||
github.com/pkg/term v0.0.0-20190109203006-aa71e9d9e942 h1:A7GG7zcGjl3jqAqGPmcNjd/D9hzL95SuoOQAaFNdLU0=
|
||||
github.com/pkg/term v0.0.0-20190109203006-aa71e9d9e942/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
|
|
|
@ -84,7 +84,10 @@ type imguiColors struct {
|
|||
IdxPointer imgui.Vec4
|
||||
|
||||
// collision window
|
||||
CollisionIndicator imgui.Vec4
|
||||
CollisionBit imgui.Vec4
|
||||
|
||||
// chip registers window
|
||||
RegisterBit imgui.Vec4
|
||||
|
||||
// terminal
|
||||
TermBackground imgui.Vec4
|
||||
|
@ -156,8 +159,9 @@ func newColors() *imguiColors {
|
|||
// tia
|
||||
IdxPointer: imgui.Vec4{0.8, 0.8, 0.8, 1.0},
|
||||
|
||||
// collision window
|
||||
CollisionIndicator: imgui.Vec4{0.7, 0.2, 0.2, 1.0},
|
||||
// deffering collision window CollisionBit
|
||||
|
||||
// deferring chip registers window RegisterBit
|
||||
|
||||
// terminal
|
||||
TermBackground: imgui.Vec4{0.1, 0.1, 0.2, 0.9},
|
||||
|
@ -171,12 +175,6 @@ func newColors() *imguiColors {
|
|||
TermStyleLog: imgui.Vec4{0.8, 0.7, 0.3, 1.0},
|
||||
}
|
||||
|
||||
// we deferred setting of some colours. set them now.
|
||||
cols.CapturedScreenTitle = cols.TitleBgActive
|
||||
cols.CapturedScreenBorder = cols.TitleBgActive
|
||||
cols.DisasmBreakAddress = cols.DisasmAddress
|
||||
cols.DisasmBreakOther = cols.DisasmMnemonic
|
||||
|
||||
// set default colors
|
||||
style := imgui.CurrentStyle()
|
||||
style.SetColor(imgui.StyleColorMenuBarBg, cols.MenuBarBg)
|
||||
|
@ -185,6 +183,14 @@ func newColors() *imguiColors {
|
|||
style.SetColor(imgui.StyleColorTitleBgActive, cols.TitleBgActive)
|
||||
style.SetColor(imgui.StyleColorBorder, cols.Border)
|
||||
|
||||
// we deferred setting of some colours. set them now.
|
||||
cols.CapturedScreenTitle = cols.TitleBgActive
|
||||
cols.CapturedScreenBorder = cols.TitleBgActive
|
||||
cols.DisasmBreakAddress = cols.DisasmAddress
|
||||
cols.DisasmBreakOther = cols.DisasmMnemonic
|
||||
cols.CollisionBit = imgui.CurrentStyle().Color(imgui.StyleColorButton)
|
||||
cols.RegisterBit = imgui.CurrentStyle().Color(imgui.StyleColorButton)
|
||||
|
||||
// convert 2600 colours to format usable by imgui
|
||||
|
||||
// convert to imgiu.Vec4 first...
|
||||
|
|
|
@ -15,7 +15,9 @@
|
|||
|
||||
package sdlimgui
|
||||
|
||||
import "github.com/inkyblackness/imgui-go/v2"
|
||||
import (
|
||||
"github.com/inkyblackness/imgui-go/v2"
|
||||
)
|
||||
|
||||
// drawlistSequence provides a neat way of drawlist elements of a uniform size in
|
||||
// sequence
|
||||
|
@ -32,16 +34,20 @@ type drawlistSequence struct {
|
|||
|
||||
nextItemSameLine bool
|
||||
nextItemDepressed bool
|
||||
|
||||
// allign drawlist sequence in the same way as imgui.AlignFramePadding()
|
||||
alignFramePadding bool
|
||||
}
|
||||
|
||||
// create and start a new sequence. spacing is expressed as fraction of the
|
||||
// current FontSize()
|
||||
func newDrawlistSequence(img *SdlImgui, size imgui.Vec2, spacing float32) *drawlistSequence {
|
||||
func newDrawlistSequence(img *SdlImgui, size imgui.Vec2, spacing float32, alignFramePadding bool) *drawlistSequence {
|
||||
seq := &drawlistSequence{
|
||||
img: img,
|
||||
size: size,
|
||||
spacing: imgui.Vec2{X: imgui.FontSize() * spacing, Y: imgui.FontSize() * spacing},
|
||||
depressionAmount: 2.0,
|
||||
img: img,
|
||||
size: size,
|
||||
spacing: imgui.Vec2{X: imgui.FontSize() * spacing, Y: imgui.FontSize() * spacing},
|
||||
depressionAmount: 2.0,
|
||||
alignFramePadding: alignFramePadding,
|
||||
}
|
||||
_, seq.palette = img.imguiTVPalette()
|
||||
seq.start()
|
||||
|
@ -54,7 +60,12 @@ func newDrawlistSequence(img *SdlImgui, size imgui.Vec2, spacing float32) *drawl
|
|||
// should be coupled with a call to end()
|
||||
func (seq *drawlistSequence) start() float32 {
|
||||
seq.prevX = imgui.CursorScreenPos().X
|
||||
seq.prevY = imgui.CursorScreenPos().Y - seq.size.Y - seq.spacing.Y
|
||||
seq.prevY = imgui.CursorScreenPos().Y - seq.size.Y
|
||||
if seq.alignFramePadding {
|
||||
seq.prevY += imgui.CurrentStyle().FramePadding().Y / 2
|
||||
} else {
|
||||
seq.prevY -= seq.spacing.Y
|
||||
}
|
||||
seq.startX = seq.prevX
|
||||
seq.nextItemSameLine = false
|
||||
seq.nextItemDepressed = false
|
||||
|
|
|
@ -25,20 +25,18 @@ import (
|
|||
type LazyChipRegisters struct {
|
||||
val *Lazy
|
||||
|
||||
atomicSWACHA atomic.Value // uint8
|
||||
atomicSWACHB atomic.Value // uint8
|
||||
atomicSWCHA atomic.Value // uint8
|
||||
atomicSWCHB atomic.Value // uint8
|
||||
atomicSWACNT atomic.Value // uint8
|
||||
atomicSWBCNT atomic.Value // uint8
|
||||
atomicINPT0 atomic.Value // uint8
|
||||
atomicINPT1 atomic.Value // uint8
|
||||
atomicINPT2 atomic.Value // uint8
|
||||
atomicINPT3 atomic.Value // uint8
|
||||
atomicINPT4 atomic.Value // uint8
|
||||
atomicINPT5 atomic.Value // uint8
|
||||
SWACHA uint8
|
||||
SWCHA uint8
|
||||
SWACNT uint8
|
||||
SWACHB uint8
|
||||
SWBCNT uint8
|
||||
SWCHB uint8
|
||||
INPT0 uint8
|
||||
INPT1 uint8
|
||||
INPT2 uint8
|
||||
|
@ -54,14 +52,12 @@ func newLazyChipRegisters(val *Lazy) *LazyChipRegisters {
|
|||
func (lz *LazyChipRegisters) update() {
|
||||
lz.val.Dbg.PushRawEvent(func() {
|
||||
v, _ := lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["SWCHA"])
|
||||
lz.atomicSWACHA.Store(v)
|
||||
lz.atomicSWCHA.Store(v)
|
||||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["SWACNT"])
|
||||
lz.atomicSWACNT.Store(v)
|
||||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["SWCHB"])
|
||||
lz.atomicSWACHB.Store(v)
|
||||
lz.atomicSWCHB.Store(v)
|
||||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["SWBCNT"])
|
||||
lz.atomicSWBCNT.Store(v)
|
||||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["INPT0"])
|
||||
lz.atomicINPT0.Store(v)
|
||||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["INPT1"])
|
||||
lz.atomicINPT1.Store(v)
|
||||
|
@ -74,10 +70,9 @@ func (lz *LazyChipRegisters) update() {
|
|||
v, _ = lz.val.Dbg.VCS.Mem.Peek(addresses.ReadAddress["INPT5"])
|
||||
lz.atomicINPT5.Store(v)
|
||||
})
|
||||
lz.SWACHA, _ = lz.atomicSWACHA.Load().(uint8)
|
||||
lz.SWCHA, _ = lz.atomicSWCHA.Load().(uint8)
|
||||
lz.SWACNT, _ = lz.atomicSWACNT.Load().(uint8)
|
||||
lz.SWACHB, _ = lz.atomicSWACHB.Load().(uint8)
|
||||
lz.SWBCNT, _ = lz.atomicSWBCNT.Load().(uint8)
|
||||
lz.SWCHB, _ = lz.atomicSWCHB.Load().(uint8)
|
||||
lz.INPT0, _ = lz.atomicINPT0.Load().(uint8)
|
||||
lz.INPT1, _ = lz.atomicINPT1.Load().(uint8)
|
||||
lz.INPT2, _ = lz.atomicINPT2.Load().(uint8)
|
||||
|
|
|
@ -30,6 +30,9 @@ type winChipRegisters struct {
|
|||
widgetDimensions
|
||||
|
||||
img *SdlImgui
|
||||
|
||||
// ready flag colors
|
||||
regBit imgui.PackedColor
|
||||
}
|
||||
|
||||
func newWinChipRegisters(img *SdlImgui) (managedWindow, error) {
|
||||
|
@ -42,6 +45,7 @@ func newWinChipRegisters(img *SdlImgui) (managedWindow, error) {
|
|||
|
||||
func (win *winChipRegisters) init() {
|
||||
win.widgetDimensions.init()
|
||||
win.regBit = imgui.PackedColorFromVec4(win.img.cols.RegisterBit)
|
||||
}
|
||||
|
||||
func (win *winChipRegisters) destroy() {
|
||||
|
@ -59,13 +63,17 @@ func (win *winChipRegisters) draw() {
|
|||
imgui.SetNextWindowPosV(imgui.Vec2{653, 400}, imgui.ConditionFirstUseEver, imgui.Vec2{0, 0})
|
||||
imgui.BeginV(winChipRegistersTitle, &win.open, imgui.WindowFlagsAlwaysAutoResize)
|
||||
|
||||
win.drawChipRegister("SWACHA", win.img.lz.ChipRegisters.SWACHA)
|
||||
imgui.SameLine()
|
||||
win.drawChipRegister("SWACNT", win.img.lz.ChipRegisters.SWACNT)
|
||||
|
||||
win.drawChipRegister("SWACHB", win.img.lz.ChipRegisters.SWACHB)
|
||||
imgui.SameLine()
|
||||
win.drawChipRegister("SWBCNT", win.img.lz.ChipRegisters.SWBCNT)
|
||||
win.drawChipRegisterBits(win.img.lz.ChipRegisters.SWACNT, "SWACNT")
|
||||
|
||||
win.drawChipRegister(" SWCHA", win.img.lz.ChipRegisters.SWCHA)
|
||||
imgui.SameLine()
|
||||
win.drawChipRegisterBits(win.img.lz.ChipRegisters.SWCHA, "SWCHA")
|
||||
|
||||
win.drawChipRegister(" SWCHB", win.img.lz.ChipRegisters.SWCHB)
|
||||
imgui.SameLine()
|
||||
win.drawChipRegisterBits(win.img.lz.ChipRegisters.SWCHB, "SWCHB")
|
||||
|
||||
imgui.Spacing()
|
||||
imgui.Separator()
|
||||
|
@ -108,3 +116,23 @@ func (win *winChipRegisters) drawChipRegister(label string, val uint8) {
|
|||
}
|
||||
imgui.PopItemWidth()
|
||||
}
|
||||
|
||||
func (win *winChipRegisters) drawChipRegisterBits(read uint8, reg string) {
|
||||
seq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight() * 0.75, Y: imgui.FrameHeight() * 0.75}, 0.1, true)
|
||||
for i := 0; i < 8; i++ {
|
||||
if (read<<i)&0x80 != 0x80 {
|
||||
seq.nextItemDepressed = true
|
||||
}
|
||||
if seq.rectFill(win.regBit) {
|
||||
b := read ^ (0x80 >> i)
|
||||
win.img.lz.Dbg.PushRawEvent(func() {
|
||||
err := win.img.lz.Dbg.VCS.Mem.Poke(addresses.ReadAddress[reg], uint8(b))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
seq.sameLine()
|
||||
}
|
||||
seq.end()
|
||||
}
|
||||
|
|
|
@ -28,8 +28,7 @@ type winCollisions struct {
|
|||
|
||||
img *SdlImgui
|
||||
|
||||
// ready flag colors
|
||||
colIndicator imgui.PackedColor
|
||||
collisionBit imgui.PackedColor
|
||||
}
|
||||
|
||||
func newWinCollisions(img *SdlImgui) (managedWindow, error) {
|
||||
|
@ -42,7 +41,7 @@ func newWinCollisions(img *SdlImgui) (managedWindow, error) {
|
|||
|
||||
func (win *winCollisions) init() {
|
||||
win.widgetDimensions.init()
|
||||
win.colIndicator = imgui.PackedColorFromVec4(win.img.cols.CollisionIndicator)
|
||||
win.collisionBit = imgui.PackedColorFromVec4(win.img.cols.CollisionBit)
|
||||
}
|
||||
|
||||
func (win *winCollisions) destroy() {
|
||||
|
@ -92,6 +91,8 @@ func (win *winCollisions) draw() {
|
|||
imgui.SameLine()
|
||||
win.drawCollision(win.img.lz.Collisions.CXPPMM, &win.img.lz.Dbg.VCS.TIA.Video.Collisions.CXPPMM, video.CollisionMask)
|
||||
|
||||
imgui.Spacing()
|
||||
|
||||
if imgui.Button("Clear Collisions") {
|
||||
win.img.lz.Dbg.PushRawEvent(func() {
|
||||
win.img.lz.Dbg.VCS.TIA.Video.Collisions.Clear()
|
||||
|
@ -102,13 +103,13 @@ func (win *winCollisions) draw() {
|
|||
}
|
||||
|
||||
func (win *winCollisions) drawCollision(read uint8, write *uint8, mask uint8) {
|
||||
seq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight() * 0.75, Y: imgui.FrameHeight() * 0.75}, 0.1)
|
||||
seq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight() * 0.75, Y: imgui.FrameHeight() * 0.75}, 0.1, false)
|
||||
for i := 0; i < 8; i++ {
|
||||
if mask<<i&0x80 == 0x80 {
|
||||
if (read<<i)&0x80 != 0x80 {
|
||||
seq.nextItemDepressed = true
|
||||
}
|
||||
if seq.rectFill(win.colIndicator) {
|
||||
if seq.rectFill(win.collisionBit) {
|
||||
b := read ^ (0x80 >> i)
|
||||
win.img.lz.Dbg.PushRawEvent(func() {
|
||||
*write = b
|
||||
|
@ -116,7 +117,7 @@ func (win *winCollisions) drawCollision(read uint8, write *uint8, mask uint8) {
|
|||
}
|
||||
} else {
|
||||
seq.nextItemDepressed = true
|
||||
seq.rectEmpty(win.colIndicator)
|
||||
seq.rectEmpty(win.collisionBit)
|
||||
}
|
||||
seq.sameLine()
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ func (win *winTIA) drawPlayer(num int) {
|
|||
|
||||
// graphics data - new
|
||||
imguiText("New Gfx")
|
||||
ngfxSeq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1)
|
||||
ngfxSeq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1, false)
|
||||
od := lz.GfxDataNew
|
||||
for i := 0; i < 8; i++ {
|
||||
var col uint8
|
||||
|
@ -122,7 +122,7 @@ func (win *winTIA) drawPlayer(num int) {
|
|||
// graphics data - old
|
||||
imgui.SameLine()
|
||||
imguiText("Old Gfx")
|
||||
ogfxSeq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1)
|
||||
ogfxSeq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1, false)
|
||||
nd := lz.GfxDataOld
|
||||
for i := 0; i < 8; i++ {
|
||||
var col uint8
|
||||
|
|
|
@ -112,7 +112,7 @@ func (win *winTIA) drawPlayfield() {
|
|||
imgui.BeginGroup()
|
||||
imguiText("PF0")
|
||||
imgui.SameLine()
|
||||
seq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1)
|
||||
seq := newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight(), Y: imgui.FrameHeight()}, 0.1, false)
|
||||
pf0d := lz.PF0
|
||||
for i := 0; i < 4; i++ {
|
||||
var col uint8
|
||||
|
@ -179,7 +179,7 @@ func (win *winTIA) drawPlayfield() {
|
|||
// playfield data as a sequence
|
||||
imgui.BeginGroup()
|
||||
imguiText("Sequence")
|
||||
seq = newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight() * 0.5, Y: imgui.FrameHeight()}, 0.1)
|
||||
seq = newDrawlistSequence(win.img, imgui.Vec2{X: imgui.FrameHeight() * 0.5, Y: imgui.FrameHeight()}, 0.1, false)
|
||||
|
||||
// first half of the playfield
|
||||
for _, v := range lz.LeftData {
|
||||
|
|
Loading…
Reference in a new issue