cartridge

package
v0.14.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 30, 2021 License: GPL-3.0, GPL-3.0 Imports: 16 Imported by: 0

Documentation

Overview

Package cartridge fully implements loading of mapping of cartridge memory. Cartridge memory is memory that is peripheral to the VCS and can grow quite complex.

There are many different types of mapping scheme supported by the package.

Some cartridge types contain additional RAM but the main difference is how they map additional ROM into the relatively small address space available for cartridges in the VCS. This is called bank-switching. All of these differences are handled transparently by the package.

Currently supported cartridge types are listed in the cartridgeloader package.

Index

Constants

View Source
const (
	Ejected = "cartridge ejected"
)

Sentinal error returned if operation is on the ejected cartridge type.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cartridge

type Cartridge struct {
	bus.DebugBus
	bus.CPUBus

	// filename/hash taken from cartridgeloader. choosing not to keep a
	// reference to the cartridge loader itself.
	Filename  string
	ShortName string
	Hash      string
	// contains filtered or unexported fields
}

Cartridge defines the information and operations for a VCS cartridge.

func NewCartridge

func NewCartridge(prefs *preferences.Preferences) *Cartridge

NewCartridge is the preferred method of initialisation for the cartridge type.

func (*Cartridge) Attach

func (cart *Cartridge) Attach(cartload cartridgeloader.Loader) error

Attach the cartridge loader to the VCS and make available the data to the CPU bus

How cartridges are mapped into the VCS's 4k space can differs dramatically. Much of the implementation details have been cribbed from Kevin Horton's "Cart Information" document [sizes.txt]. Other sources of information noted as appropriate.

func (*Cartridge) CopyBanks added in v0.7.1

func (cart *Cartridge) CopyBanks() ([]mapper.BankContent, error)

CopyBanks returns the sequence of banks in a cartridge. To return the next bank in the sequence, call the function with the instance of mapper.BankContent returned from the previous call. The end of the sequence is indicated by the nil value. Start a new iteration with the nil argument.

func (*Cartridge) Eject

func (cart *Cartridge) Eject()

Eject removes memory from cartridge space and unlike the real hardware, attaches a bank of empty memory - for convenience of the debugger.

func (*Cartridge) GetBank

func (cart *Cartridge) GetBank(addr uint16) mapper.BankInfo

GetBank returns the current bank information for the specified address. See documentation for memorymap.Bank for more information.

func (*Cartridge) GetCartHotspots added in v0.7.1

func (cart *Cartridge) GetCartHotspots() mapper.CartHotspotsBus

GetCartHotspots returns interface to hotspots bus or nil if cartridge has no hotspots it wants to report.

func (*Cartridge) GetCoProcBus added in v0.8.0

func (cart *Cartridge) GetCoProcBus() mapper.CartCoProcBus

GetCoProcBus returns interface to coprocessor bus.

func (*Cartridge) GetContainer added in v0.7.1

func (cart *Cartridge) GetContainer() mapper.CartContainer

GetContainer returns interface to cartridge container or nil if cartridge is not in a container.

func (*Cartridge) GetRAMbus added in v0.2.1

func (cart *Cartridge) GetRAMbus() mapper.CartRAMbus

GetRAMbus returns interface to ram busor nil if catridge contains no RAM.

func (*Cartridge) GetRegistersBus added in v0.3.1

func (cart *Cartridge) GetRegistersBus() mapper.CartRegistersBus

GetRegistersBus returns interface to the registers of the cartridge or nil if cartridge has no registers.

func (*Cartridge) GetStaticBus added in v0.3.1

func (cart *Cartridge) GetStaticBus() mapper.CartStaticBus

GetStaticBus returns interface to the static area of the cartridge or nil if cartridge has no static area.

func (*Cartridge) GetTapeBus added in v0.7.1

func (cart *Cartridge) GetTapeBus() mapper.CartTapeBus

GetTapeBus returns interface to a tape bus or nil if catridge has no tape.

func (*Cartridge) HotLoad added in v0.12.1

func (cart *Cartridge) HotLoad(cartload cartridgeloader.Loader) error

Hotload cartridge ROM into emulation. Not changing any other state of the emulation.

func (*Cartridge) ID added in v0.2.1

func (cart *Cartridge) ID() string

ID returns the cartridge mapping ID.

func (*Cartridge) IsEjected

func (cart *Cartridge) IsEjected() bool

IsEjected returns true if no cartridge is attached.

func (*Cartridge) Listen

func (cart *Cartridge) Listen(addr uint16, data uint8)

Listen for data at the specified address.

The VCS cartridge port is wired up to all 13 address lines of the 6507. Under normal operation, the chip-select line is used by the cartridge to know when to put data on the data bus. If it's not "on" then the cartridge does nothing.

However, the option is there to "listen" on the address bus. Notably the tigervision (3F) mapping listens for address 0x003f, which is in the TIA address space. When this address is triggered, the tigervision cartridge will use whatever is on the data bus to switch banks.

func (*Cartridge) Mapping added in v0.10.1

func (cart *Cartridge) Mapping() string

Mapping returns a string summary of the mapping. ie. what banks are mapped in.

func (*Cartridge) NumBanks

func (cart *Cartridge) NumBanks() int

NumBanks returns the number of banks in the catridge.

func (*Cartridge) Patch

func (cart *Cartridge) Patch(offset int, data uint8) error

Patch writes to cartridge memory. Offset is measured from the start of cartridge memory. It differs from Poke in that respect.

func (*Cartridge) Peek

func (cart *Cartridge) Peek(addr uint16) (uint8, error)

Peek is an implementation of memory.DebugBus. Address must be normalised.

func (*Cartridge) Plumb added in v0.7.1

func (cart *Cartridge) Plumb()

func (*Cartridge) Poke

func (cart *Cartridge) Poke(addr uint16, data uint8) error

Poke is an implementation of memory.DebugBus. Address must be normalised.

func (*Cartridge) Read

func (cart *Cartridge) Read(addr uint16) (uint8, error)

Read is an implementation of memory.CPUBus. Address should not be normalised.

func (*Cartridge) Reset added in v0.7.1

func (cart *Cartridge) Reset()

Reset volative contents of Cartridge.

func (*Cartridge) RewindBoundary added in v0.7.1

func (cart *Cartridge) RewindBoundary() bool

RewindBoundary returns true if the cartridge indicates that something has happened that should not be part of the rewind history. Returns false if cartridge mapper does not care about the rewind sub-system.

func (*Cartridge) Snapshot added in v0.7.1

func (cart *Cartridge) Snapshot() *Cartridge

func (*Cartridge) Step added in v0.2.1

func (cart *Cartridge) Step(clock float32)

Step should be called every CPU cycle. The attached cartridge may or may not change its state as a result. In fact, very few cartridges care about this.

func (*Cartridge) String

func (cart *Cartridge) String() string

func (*Cartridge) Write

func (cart *Cartridge) Write(addr uint16, data uint8) error

Write is an implementation of memory.CPUBus. Address should not be normalised.

type DPCdataFetcher added in v0.2.1

type DPCdataFetcher struct {
	Low    byte
	Hi     byte
	Top    byte
	Bottom byte

	// is the Low byte in the window between top and bottom
	Flag bool

	// music mode only used by data fetchers 4-7
	MusicMode bool
	OSCclock  bool
}

DPCdataFetcher represents a single DPC data fetcher.

type DPCregisters added in v0.2.1

type DPCregisters struct {
	Fetcher [8]DPCdataFetcher

	// the current random number value
	RNG uint8
}

DPCregisters implements the mapper.CartRegisters interface.

func (DPCregisters) String added in v0.2.1

func (r DPCregisters) String() string

Directories

Path Synopsis
Package harmony implements the Harmony cartridge.
Package harmony implements the Harmony cartridge.
arm7tdmi
Package arm7tdmi imlplements the ARM7TDMI instruction set as defined in the ARM7TDMI Instruction Set Reference: http://www.ecs.csun.edu/~smirzaei/docs/ece425/arm7tdmi_instruction_set_reference.pdf For this project we only need to emulte the Thumb architecture.
Package arm7tdmi imlplements the ARM7TDMI instruction set as defined in the ARM7TDMI Instruction Set Reference: http://www.ecs.csun.edu/~smirzaei/docs/ece425/arm7tdmi_instruction_set_reference.pdf For this project we only need to emulte the Thumb architecture.
callfn
Package Callfn facilitates the ARM CALLFN process common to both DPC+ and CDF* cartridge mappers.
Package Callfn facilitates the ARM CALLFN process common to both DPC+ and CDF* cartridge mappers.
cdf
Package cdf implemnents the various CDF type cartridge mappers including CDFJ.
Package cdf implemnents the various CDF type cartridge mappers including CDFJ.
dpcplus
Package dpcplus implements the DPC+ cartridge mapper.
Package dpcplus implements the DPC+ cartridge mapper.
Package mapper contains the CartMapper interface.
Package mapper contains the CartMapper interface.
Package moviecart implements the Movie Cart special cartridge type.
Package moviecart implements the Movie Cart special cartridge type.
Package plusrom implements the PlusROM cartridge as developed by Wolfgang Stubig.
Package plusrom implements the PlusROM cartridge as developed by Wolfgang Stubig.
Package supercharger implements the tape based cartridge format.
Package supercharger implements the tape based cartridge format.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL