The go-getting Game Boy emulator - This is a mirror
1package debug
2
3import (
4 "fmt"
5
6 "github.com/maxfierke/gogo-gb/cart"
7 "github.com/maxfierke/gogo-gb/cpu"
8 "github.com/maxfierke/gogo-gb/mem"
9)
10
11type Debugger interface {
12 Setup(cpu *cpu.CPU, mmu *mem.MMU, cart *cart.Cartridge)
13 OnDecode(cpu *cpu.CPU, mmu *mem.MMU)
14 OnExecute(cpu *cpu.CPU, mmu *mem.MMU)
15 OnInterrupt(cpu *cpu.CPU, mmu *mem.MMU)
16 OnRead(mmu *mem.MMU, addr uint16) mem.MemRead
17 OnWrite(mmu *mem.MMU, addr uint16, value byte) mem.MemWrite
18}
19
20func NewDebugger(name string) (Debugger, error) {
21 switch name {
22 case "gameboy-doctor":
23 return NewGBDoctorDebugger(), nil
24 case "interactive":
25 return NewInteractiveDebugger()
26 case "", "none":
27 return NewNullDebugger(), nil
28 default:
29 return nil, fmt.Errorf("unrecognized debugger: %v", name)
30 }
31}
32
33type NullDebugger struct{}
34
35func NewNullDebugger() *NullDebugger {
36 return &NullDebugger{}
37}
38
39func (nd *NullDebugger) Setup(cpu *cpu.CPU, mmu *mem.MMU, cart *cart.Cartridge) {}
40func (nd *NullDebugger) OnDecode(cpu *cpu.CPU, mmu *mem.MMU) {}
41func (nd *NullDebugger) OnExecute(cpu *cpu.CPU, mmu *mem.MMU) {}
42func (nd *NullDebugger) OnInterrupt(cpu *cpu.CPU, mmu *mem.MMU) {}
43
44func (nd *NullDebugger) OnRead(mmu *mem.MMU, addr uint16) mem.MemRead {
45 return mem.ReadPassthrough()
46}
47
48func (nd *NullDebugger) OnWrite(mmu *mem.MMU, addr uint16, value byte) mem.MemWrite {
49 return mem.WritePassthrough()
50}