Skip to content

Commit

Permalink
move bankwindowsize to arch
Browse files Browse the repository at this point in the history
  • Loading branch information
cornelk committed Dec 25, 2024
1 parent b8d79d0 commit d4b9489
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 9 deletions.
4 changes: 4 additions & 0 deletions internal/arch/arch.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@
// It acts as a bridge between the disassembler and the architecture specific code.
package arch

import "github.com/retroenv/retrogolib/arch/nes/cartridge"

// Architecture contains architecture specific information.
type Architecture interface {
// BankWindowSize returns the bank window size.
BankWindowSize(cart *cartridge.Cartridge) int
// Constants returns the constants translation map.
Constants() (map[uint16]Constant, error)
// GetAddressingParam returns the address of the param if it references an address.
Expand Down
6 changes: 6 additions & 0 deletions internal/arch/m6502/m6502.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/retroenv/nesgodisasm/internal/arch"
"github.com/retroenv/retrogolib/arch/cpu/m6502"
"github.com/retroenv/retrogolib/arch/nes/cartridge"
"github.com/retroenv/retrogolib/arch/nes/parameter"
)

Expand Down Expand Up @@ -73,3 +74,8 @@ func (ar *Arch6502) ProcessOffset(dis arch.Disasm, address uint16, offsetInfo *a

return true, nil
}

// BankWindowSize returns the bank window size.
func (ar *Arch6502) BankWindowSize(_ *cartridge.Cartridge) int {
return 0x2000 // TODO calculate dynamically
}
2 changes: 1 addition & 1 deletion internal/disasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func New(ar arch.Architecture, logger *log.Logger, cart *cartridge.Cartridge,
return nil, fmt.Errorf("creating constants: %w", err)
}

dis.mapper, err = mapper.New(dis, cart.PRG)
dis.mapper, err = mapper.New(ar, dis, cart)
if err != nil {
return nil, fmt.Errorf("creating mapper: %w", err)
}
Expand Down
16 changes: 8 additions & 8 deletions internal/mapper/mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/retroenv/nesgodisasm/internal/arch"
"github.com/retroenv/nesgodisasm/internal/program"
"github.com/retroenv/retrogolib/arch/nes/cartridge"
"github.com/retroenv/retrogolib/arch/nes/codedatalog"
)

Expand All @@ -20,11 +21,10 @@ type Mapper struct {
mapped []mappedBank
}

const bankWindowSize = 0x2000 // TODO use as parameter

// New creates a new mapper manager.
func New(dis arch.Disasm, prg []byte) (*Mapper, error) {
prgSize := len(prg)
func New(ar arch.Architecture, dis arch.Disasm, cart *cartridge.Cartridge) (*Mapper, error) {
bankWindowSize := ar.BankWindowSize(cart)
prgSize := len(cart.PRG)
mappedBanks := prgSize / bankWindowSize
mappedWindows := 0x10000 / bankWindowSize

Expand All @@ -36,7 +36,7 @@ func New(dis arch.Disasm, prg []byte) (*Mapper, error) {
mapped: make([]mappedBank, mappedWindows),
}

m.initializeBanks(dis, prg)
m.initializeBanks(dis, cart.PRG)

bankNumber := 0
for bankIndex, bnk := range m.banks {
Expand Down Expand Up @@ -80,14 +80,14 @@ func (m *Mapper) GetMappedBank(address uint16) arch.MappedBank {
}

func (m *Mapper) GetMappedBankIndex(address uint16) uint16 {
index := int(address) % bankWindowSize
index := int(address) % m.bankWindowSize
return uint16(index)
}

func (m *Mapper) ReadMemory(address uint16) byte {
bankWindow := address >> m.addressShifts
bnk := m.mapped[bankWindow]
index := int(address) % bankWindowSize
index := int(address) % m.bankWindowSize
pointer := bnk.dataStart + index
b := bnk.bank.prg[pointer]
return b
Expand All @@ -100,7 +100,7 @@ func (m *Mapper) OffsetInfo(address uint16) *arch.Offset {
return nil
}

index := int(address) % bankWindowSize
index := int(address) % m.bankWindowSize
pointer := bnk.dataStart + index
offsetInfo := bnk.bank.offsets[pointer]
return offsetInfo
Expand Down

0 comments on commit d4b9489

Please sign in to comment.