diff --git a/cmd/gones/icons_test.go b/cmd/gones/icons_test.go index d05634b4..87ea4bc1 100644 --- a/cmd/gones/icons_test.go +++ b/cmd/gones/icons_test.go @@ -6,16 +6,16 @@ import ( "os" "testing" - "github.com/gabe565/gones/internal/config" + "github.com/gabe565/gones/internal/log" "github.com/stretchr/testify/assert" ) //nolint:paralleltest func Test_getWindowIcons(t *testing.T) { var buf bytes.Buffer - config.InitLog(&buf) + log.Init(&buf) t.Cleanup(func() { - config.InitLog(os.Stderr) + log.Init(os.Stderr) }) icons := getWindowIcons() diff --git a/cmd/gonesutil/ls/cmd.go b/cmd/gonesutil/ls/cmd.go index bb68b2c5..435dd928 100644 --- a/cmd/gonesutil/ls/cmd.go +++ b/cmd/gonesutil/ls/cmd.go @@ -13,7 +13,7 @@ import ( "sync" "github.com/gabe565/gones/internal/cartridge" - "github.com/gabe565/gones/internal/config" + "github.com/gabe565/gones/internal/log" "github.com/spf13/cobra" ) @@ -62,7 +62,7 @@ func New() *cobra.Command { cmd.Flags().BoolP("reverse", "r", false, "Reverse the output") - config.InitLog(os.Stderr) + log.Init(os.Stderr) return cmd } diff --git a/internal/apu/apu.go b/internal/apu/apu.go index ef3e688a..c1aba5e5 100644 --- a/internal/apu/apu.go +++ b/internal/apu/apu.go @@ -9,8 +9,8 @@ import ( "github.com/gabe565/gones/internal/config" "github.com/gabe565/gones/internal/consts" "github.com/gabe565/gones/internal/interrupt" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/memory" - "github.com/gabe565/gones/internal/util" ) type CPU interface { @@ -119,7 +119,7 @@ func (a *APU) WriteMem(addr uint16, data byte) { a.stepLength() } default: - slog.Error("Invalid APU write", "addr", util.HexAddr(addr)) + slog.Error("Invalid APU write", "addr", log.HexAddr(addr)) } } diff --git a/internal/bus/bus.go b/internal/bus/bus.go index 3e1f0d84..4d733cbc 100644 --- a/internal/bus/bus.go +++ b/internal/bus/bus.go @@ -7,8 +7,8 @@ import ( "github.com/gabe565/gones/internal/cartridge" "github.com/gabe565/gones/internal/config" "github.com/gabe565/gones/internal/controller" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/ppu" - "github.com/gabe565/gones/internal/util" ) func New(conf *config.Config, mapper cartridge.Mapper, ppu *ppu.PPU, apu *apu.APU) *Bus { @@ -55,7 +55,7 @@ func (b *Bus) ReadMem(addr uint16) byte { case 0x4020 <= addr: b.OpenBus = b.mapper.ReadMem(addr) default: - slog.Error("Invalid Bus read", "addr", util.HexAddr(addr)) + slog.Error("Invalid Bus read", "addr", log.HexAddr(addr)) return 0 } return b.OpenBus @@ -96,7 +96,7 @@ func (b *Bus) WriteMem(addr uint16, data byte) { case 0x4020 <= addr: b.mapper.WriteMem(addr, data) default: - slog.Error("Invalid Bus write", "addr", util.HexAddr(addr)) + slog.Error("Invalid Bus write", "addr", log.HexAddr(addr)) } b.OpenBus = data } diff --git a/internal/cartridge/mapper_1.go b/internal/cartridge/mapper_1.go index 86903489..b888649b 100644 --- a/internal/cartridge/mapper_1.go +++ b/internal/cartridge/mapper_1.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/gabe565/gones/internal/consts" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper1(cartridge *Cartridge) *Mapper1 { @@ -48,7 +48,7 @@ func (m *Mapper1) ReadMem(addr uint16) byte { offset := int(addr % consts.PRGChunkSize) return m.cartridge.prg[m.PRGOffsets[bank]+offset] default: - slog.Error("Invalid mapper 1 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 1 read", "addr", log.HexAddr(addr)) return 0 } } @@ -89,7 +89,7 @@ func (m *Mapper1) WriteMem(addr uint16, data byte) { } } default: - slog.Error("Invalid mapper 1 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 1 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_2.go b/internal/cartridge/mapper_2.go index 2df6ea35..5d9c9bd9 100644 --- a/internal/cartridge/mapper_2.go +++ b/internal/cartridge/mapper_2.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/gabe565/gones/internal/consts" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper2(cartridge *Cartridge) *Mapper2 { @@ -46,7 +46,7 @@ func (m *Mapper2) ReadMem(addr uint16) byte { addr += m.PRGBank2 * consts.PRGChunkSize return m.cartridge.prg[addr] default: - slog.Error("Invalid mapper 2 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 2 read", "addr", log.HexAddr(addr)) return 0 } } @@ -63,6 +63,6 @@ func (m *Mapper2) WriteMem(addr uint16, data byte) { data %= m.PRGBanks m.PRGBank1 = data default: - slog.Error("Invalid mapper 2 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 2 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_3.go b/internal/cartridge/mapper_3.go index f80e9bed..5fc4e9f5 100644 --- a/internal/cartridge/mapper_3.go +++ b/internal/cartridge/mapper_3.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/gabe565/gones/internal/consts" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper3(cartridge *Cartridge) *Mapper3 { @@ -47,7 +47,7 @@ func (m *Mapper3) ReadMem(addr uint16) byte { addr += m.PRGBank2 * consts.PRGChunkSize return m.cartridge.prg[addr] default: - slog.Error("Invalid mapper 3 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 3 read", "addr", log.HexAddr(addr)) return 0 } } @@ -64,6 +64,6 @@ func (m *Mapper3) WriteMem(addr uint16, data byte) { case 0x8000 <= addr: m.CHRBank = uint(data & 3) default: - slog.Error("Invalid mapper 3 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 3 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_4.go b/internal/cartridge/mapper_4.go index 9eebee99..2e13e321 100644 --- a/internal/cartridge/mapper_4.go +++ b/internal/cartridge/mapper_4.go @@ -3,8 +3,8 @@ package cartridge import ( "log/slog" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/ppu/registers" - "github.com/gabe565/gones/internal/util" ) func NewMapper4(cartridge *Cartridge) *Mapper4 { @@ -78,7 +78,7 @@ func (m *Mapper4) ReadMem(addr uint16) byte { offset := int(addr % 0x2000) return m.cartridge.prg[m.PRGOffsets[bank]+offset] default: - slog.Error("Invalid mapper 4 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 4 read", "addr", log.HexAddr(addr)) return 0 } } @@ -128,7 +128,7 @@ func (m *Mapper4) WriteMem(addr uint16, data byte) { m.IRQPending = false } default: - slog.Error("Invalid mapper 4 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 4 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_69.go b/internal/cartridge/mapper_69.go index a8ea35c8..9435cc63 100644 --- a/internal/cartridge/mapper_69.go +++ b/internal/cartridge/mapper_69.go @@ -3,7 +3,7 @@ package cartridge import ( "log/slog" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper69(cartridge *Cartridge) *Mapper69 { @@ -74,7 +74,7 @@ func (m *Mapper69) ReadMem(addr uint16) byte { addr := m.PRGBanks[bank]*0x2000 + offset return m.cartridge.prg[addr%len(m.cartridge.prg)] default: - slog.Error("Invalid mapper 69 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 69 read", "addr", log.HexAddr(addr)) return 0 } } @@ -93,7 +93,7 @@ func (m *Mapper69) WriteMem(addr uint16, data byte) { // Parameter register m.runCommand(data) default: - slog.Error("Invalid mapper 69 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 69 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_7.go b/internal/cartridge/mapper_7.go index ef5cf38f..ecb8f0b6 100644 --- a/internal/cartridge/mapper_7.go +++ b/internal/cartridge/mapper_7.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/gabe565/gones/internal/consts" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper7(cartridge *Cartridge) *Mapper7 { @@ -36,7 +36,7 @@ func (m *Mapper7) ReadMem(addr uint16) byte { addr %= uint(len(m.cartridge.prg)) return m.cartridge.prg[addr] default: - slog.Error("Invalid mapper 7 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 7 read", "addr", log.HexAddr(addr)) return 0 } } @@ -58,6 +58,6 @@ func (m *Mapper7) WriteMem(addr uint16, data byte) { } m.PRGBank = uint(data & 7) default: - slog.Error("Invalid mapper 7 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 7 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/cartridge/mapper_71.go b/internal/cartridge/mapper_71.go index 718d6eaa..8850d46a 100644 --- a/internal/cartridge/mapper_71.go +++ b/internal/cartridge/mapper_71.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/gabe565/gones/internal/consts" - "github.com/gabe565/gones/internal/util" + "github.com/gabe565/gones/internal/log" ) func NewMapper71(cartridge *Cartridge) *Mapper71 { @@ -43,7 +43,7 @@ func (m *Mapper71) ReadMem(addr uint16) byte { addr += m.PRGLast * consts.PRGChunkSize return m.cartridge.prg[addr] default: - slog.Error("Invalid mapper 71 read", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 71 read", "addr", log.HexAddr(addr)) return 0 } } @@ -62,6 +62,6 @@ func (m *Mapper71) WriteMem(addr uint16, data byte) { data %= m.PRGCount m.PRGActive = data default: - slog.Error("Invalid mapper 71 write", "addr", util.HexAddr(addr)) + slog.Error("Invalid mapper 71 write", "addr", log.HexAddr(addr)) } } diff --git a/internal/config/generate_example/main.go b/internal/config/generate_example/main.go index 9b46b938..5b760d61 100644 --- a/internal/config/generate_example/main.go +++ b/internal/config/generate_example/main.go @@ -5,11 +5,12 @@ import ( "os" "github.com/gabe565/gones/internal/config" + "github.com/gabe565/gones/internal/log" "github.com/pelletier/go-toml/v2" ) func main() { - config.InitLog(os.Stderr) + log.Init(os.Stderr) f, err := os.Create("config_example.toml") if err != nil { diff --git a/internal/config/load.go b/internal/config/load.go index 9987d7ae..76040991 100644 --- a/internal/config/load.go +++ b/internal/config/load.go @@ -5,25 +5,23 @@ package config import ( "bytes" "errors" - "io" "log/slog" "os" "path/filepath" "time" "github.com/gabe565/gones/internal/consts" + "github.com/gabe565/gones/internal/log" "github.com/knadh/koanf/providers/posflag" "github.com/knadh/koanf/providers/rawbytes" "github.com/knadh/koanf/providers/structs" "github.com/knadh/koanf/v2" - "github.com/lmittmann/tint" - "github.com/mattn/go-isatty" "github.com/pelletier/go-toml/v2" "github.com/spf13/cobra" ) func Load(cmd *cobra.Command) (*Config, error) { - InitLog(cmd.ErrOrStderr()) + log.Init(cmd.ErrOrStderr()) k := koanf.New(".") conf := NewDefault() @@ -192,18 +190,3 @@ func fixConfig(k *koanf.Koanf) error { return nil } - -func InitLog(out io.Writer) { - var color bool - if f, ok := out.(*os.File); ok { - color = isatty.IsTerminal(f.Fd()) || isatty.IsCygwinTerminal(f.Fd()) - } - - slog.SetDefault(slog.New( - tint.NewHandler(out, &tint.Options{ - Level: slog.LevelInfo, - TimeFormat: time.Kitchen, - NoColor: !color, - }), - )) -} diff --git a/internal/cpu/cpu.go b/internal/cpu/cpu.go index 56807bff..19ede6a6 100644 --- a/internal/cpu/cpu.go +++ b/internal/cpu/cpu.go @@ -6,8 +6,8 @@ import ( "log/slog" "github.com/gabe565/gones/internal/interrupt" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/memory" - "github.com/gabe565/gones/internal/util" ) func New(b memory.ReadSafeWrite) *CPU { @@ -114,7 +114,7 @@ func (c *CPU) Step() uint { op := opcodes[code] if op == nil { c.StepErr = fmt.Errorf("%w: $%02X", ErrUnsupportedOpcode, code) - slog.Error("Failed to step CPU", "error", ErrUnsupportedOpcode, "code", util.HexVal(code)) + slog.Error("Failed to step CPU", "error", ErrUnsupportedOpcode, "code", log.HexVal(code)) return 1 } diff --git a/internal/cpu/trace.go b/internal/cpu/trace.go index 22303586..2d0dd50a 100644 --- a/internal/cpu/trace.go +++ b/internal/cpu/trace.go @@ -6,8 +6,8 @@ import ( "runtime" "strings" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/memory" - "github.com/gabe565/gones/internal/util" ) func (c *CPU) Trace() string { @@ -64,7 +64,7 @@ func (c *CPU) Trace() string { default: slog.Error("Invalid addressing mode has len 2", "mode", op.Mode, - "code", util.HexVal(code), + "code", log.HexVal(code), ) } case 3: @@ -89,7 +89,7 @@ func (c *CPU) Trace() string { default: slog.Error("Invalid addressing mode has len 3", "mode", op.Mode, - "code", util.HexVal(code), + "code", log.HexVal(code), ) } } diff --git a/internal/database/generate/download/main.go b/internal/database/generate/download/main.go index 373a05c5..dafd235c 100644 --- a/internal/database/generate/download/main.go +++ b/internal/database/generate/download/main.go @@ -6,11 +6,11 @@ import ( "os" "time" - "github.com/gabe565/gones/internal/config" + "github.com/gabe565/gones/internal/log" ) func main() { - config.InitLog(os.Stderr) + log.Init(os.Stderr) action, err := NewDownloader("Nintendo - Nintendo Entertainment System") if err != nil { diff --git a/internal/database/generate/to_csv/main.go b/internal/database/generate/to_csv/main.go index 65bbafba..ca3def7a 100644 --- a/internal/database/generate/to_csv/main.go +++ b/internal/database/generate/to_csv/main.go @@ -9,12 +9,12 @@ import ( "log/slog" "os" - "github.com/gabe565/gones/internal/config" "github.com/gabe565/gones/internal/database/nointro" + "github.com/gabe565/gones/internal/log" ) func main() { - config.InitLog(os.Stderr) + log.Init(os.Stderr) const path = "internal/database/database.csv" diff --git a/internal/generate/docs/main.go b/internal/generate/docs/main.go index 114e4cc8..ffb4578e 100644 --- a/internal/generate/docs/main.go +++ b/internal/generate/docs/main.go @@ -6,13 +6,13 @@ import ( "github.com/gabe565/gones/cmd/gones" gonesutil "github.com/gabe565/gones/cmd/gonesutil/root" - "github.com/gabe565/gones/internal/config" + "github.com/gabe565/gones/internal/log" "github.com/spf13/cobra" "github.com/spf13/cobra/doc" ) func main() { - config.InitLog(os.Stderr) + log.Init(os.Stderr) output := "./docs" commands := []*cobra.Command{ diff --git a/internal/util/log.go b/internal/log/hex.go similarity index 94% rename from internal/util/log.go rename to internal/log/hex.go index 110895d9..bdbdf37f 100644 --- a/internal/util/log.go +++ b/internal/log/hex.go @@ -1,4 +1,4 @@ -package util +package log import ( "fmt" diff --git a/internal/util/log_test.go b/internal/log/hex_test.go similarity index 98% rename from internal/util/log_test.go rename to internal/log/hex_test.go index f33ebbc5..46b31e2b 100644 --- a/internal/util/log_test.go +++ b/internal/log/hex_test.go @@ -1,4 +1,4 @@ -package util +package log import ( "testing" diff --git a/internal/log/log.go b/internal/log/log.go new file mode 100644 index 00000000..4e8d68be --- /dev/null +++ b/internal/log/log.go @@ -0,0 +1,26 @@ +package log + +import ( + "io" + "log/slog" + "os" + "time" + + "github.com/lmittmann/tint" + "github.com/mattn/go-isatty" +) + +func Init(out io.Writer) { + var color bool + if f, ok := out.(*os.File); ok { + color = isatty.IsTerminal(f.Fd()) || isatty.IsCygwinTerminal(f.Fd()) + } + + slog.SetDefault(slog.New( + tint.NewHandler(out, &tint.Options{ + Level: slog.LevelInfo, + TimeFormat: time.Kitchen, + NoColor: !color, + }), + )) +} diff --git a/internal/ppu/ppu.go b/internal/ppu/ppu.go index 65cf1693..b6cf42ec 100644 --- a/internal/ppu/ppu.go +++ b/internal/ppu/ppu.go @@ -7,10 +7,10 @@ import ( "github.com/gabe565/gones/internal/cartridge" "github.com/gabe565/gones/internal/config" "github.com/gabe565/gones/internal/interrupt" + "github.com/gabe565/gones/internal/log" "github.com/gabe565/gones/internal/memory" "github.com/gabe565/gones/internal/ppu/palette" "github.com/gabe565/gones/internal/ppu/registers" - "github.com/gabe565/gones/internal/util" ) type CPU interface { @@ -170,7 +170,7 @@ func (p *PPU) WriteData(data byte) { case 0x3F00 <= addr && addr < 0x4000: p.writePalette(addr%32, data) default: - slog.Error("Invalid write to mirrored space", "addr", util.HexAddr(addr)) + slog.Error("Invalid write to mirrored space", "addr", log.HexAddr(addr)) } p.Addr.Increment(p.Ctrl.VRAMAddr()) if mapper, ok := p.mapper.(cartridge.MapperOnVRAMAddr); ok { @@ -215,7 +215,7 @@ func (p *PPU) ReadDataAddr(addr uint16) byte { case 0x3F00 <= addr && addr < 0x4000: return p.readPalette(addr % 32) default: - slog.Error("Invalid access from mirrored space", "addr", util.HexAddr(addr)) + slog.Error("Invalid access from mirrored space", "addr", log.HexAddr(addr)) return 0 } } @@ -232,7 +232,7 @@ func (p *PPU) ReadMem(addr uint16) byte { case 0x2007: p.OpenBus = p.ReadData() default: - slog.Error("Invalid PPU read", "addr", util.HexAddr(addr)) + slog.Error("Invalid PPU read", "addr", log.HexAddr(addr)) } return p.OpenBus } @@ -266,7 +266,7 @@ func (p *PPU) WriteMem(addr uint16, data byte) { p.cpu.AddStall(513) } default: - slog.Error("Invalid PPU write", "addr", util.HexAddr(addr)) + slog.Error("Invalid PPU write", "addr", log.HexAddr(addr)) } p.OpenBus = data }