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:
JetSetIlly 2020-09-08 22:12:24 +01:00
parent 66175a257a
commit a463f1db27
9 changed files with 94 additions and 47 deletions

6
go.mod
View file

@ -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
View file

@ -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=

View file

@ -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...

View file

@ -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

View file

@ -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)

View file

@ -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()
}

View file

@ -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()
}

View file

@ -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

View file

@ -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 {