gba

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Jul 9, 2026 License: MIT Imports: 8 Imported by: 3

Documentation

Index

Constants

View Source
const (
	USR uint32 = 0b10000
	FIQ uint32 = 0b10001
	IRQ uint32 = 0b10010
	SVC uint32 = 0b10011
	ABT uint32 = 0b10111
	UND uint32 = 0b11011
	SYS uint32 = 0b11111
)
View Source
const (
	SoftReset         uint32 = 0x00
	RegisterRamReset  uint32 = 0x01
	SWIHalt           uint32 = 0x02
	SWIIntrWait       uint32 = 0x04
	SWIVBlankIntrWait uint32 = 0x05
	SWIDiv            uint32 = 0x06
	SWIDivArm         uint32 = 0x07
	SWISqrt           uint32 = 0x08
	SWIArcTan         uint32 = 0x09
	SWIArcTan2        uint32 = 0x0A
	CpuSet            uint32 = 0x0B
	SWICpuFastSet     uint32 = 0x0C
	SWIBitUnPack      uint32 = 0x10
	SWILz77UnCompWram uint32 = 0x11
	SWILz77UnCompVram uint32 = 0x12
	SWIRLUnCompWram   uint32 = 0x14
	SWIRLUnCompVram   uint32 = 0x15
	SWIObjAffineSet   uint32 = 0x0F
	SWIBgAffineSet    uint32 = 0x0E
)
View Source
const (
	DMAImmediate uint16 = iota
	DMAVBlank
	DMAHBlank
	DMASpecial
)
View Source
const (
	DISPCNT     = IORegister[uint16](0x4000000)
	DISPSTAT    = IORegister[uint16](0x4000004)
	VCOUNT      = IORegister[uint16](0x4000006)
	BG0CNT      = IORegister[uint16](0x4000008)
	BG1CNT      = IORegister[uint16](0x400000A)
	BG2CNT      = IORegister[uint16](0x400000C)
	BG3CNT      = IORegister[uint16](0x400000E)
	BG0HOFS     = IORegister[uint16](0x4000010)
	BG0VOFS     = IORegister[uint16](0x4000012)
	BG1HOFS     = IORegister[uint16](0x4000014)
	BG1VOFS     = IORegister[uint16](0x4000016)
	BG2HOFS     = IORegister[uint16](0x4000018)
	BG2VOFS     = IORegister[uint16](0x400001A)
	BG3HOFS     = IORegister[uint16](0x400001C)
	BG3VOFS     = IORegister[uint16](0x400001E)
	BG2PA       = IORegister[uint16](0x4000020)
	BG2PB       = IORegister[uint16](0x4000022)
	BG2PC       = IORegister[uint16](0x4000024)
	BG2PD       = IORegister[uint16](0x4000026)
	BG2X        = IORegister[uint32](0x4000028)
	BG2Y        = IORegister[uint32](0x400002C)
	BG3PA       = IORegister[uint16](0x4000030)
	BG3PB       = IORegister[uint16](0x4000032)
	BG3PC       = IORegister[uint16](0x4000034)
	BG3PD       = IORegister[uint16](0x4000036)
	BG3X        = IORegister[uint32](0x4000038)
	BG3Y        = IORegister[uint32](0x400003C)
	WIN0H       = IORegister[uint16](0x4000040)
	WIN1H       = IORegister[uint16](0x4000042)
	WIN0V       = IORegister[uint16](0x4000044)
	WIN1V       = IORegister[uint16](0x4000046)
	WININ       = IORegister[uint16](0x4000048)
	WINOUT      = IORegister[uint16](0x400004A)
	MOSAIC      = IORegister[uint16](0x400004C)
	BLDCNT      = IORegister[uint16](0x4000050)
	BLDALPHA    = IORegister[uint16](0x4000052)
	BLDY        = IORegister[uint16](0x4000054)
	SOUND1CNT_L = IORegister[uint16](0x4000060)
	SOUND1CNT_H = IORegister[uint16](0x4000062)
	SOUND1CNT_X = IORegister[uint16](0x4000064)
	SOUND2CNT_L = IORegister[uint16](0x4000068)
	SOUND2CNT_H = IORegister[uint16](0x400006C)
	SOUND3CNT_L = IORegister[uint16](0x4000070)
	SOUND3CNT_H = IORegister[uint16](0x4000072)
	SOUND3CNT_X = IORegister[uint16](0x4000074)
	SOUND4CNT_L = IORegister[uint16](0x4000078)
	SOUND4CNT_H = IORegister[uint16](0x400007C)
	SOUNDCNT_L  = IORegister[uint16](0x4000080)
	SOUNDCNT_H  = IORegister[uint16](0x4000082)
	SOUNDCNT_X  = IORegister[uint16](0x4000084)
	SOUNDBIAS   = IORegister[uint16](0x4000088)
	WAVE_RAM0_L = IORegister[uint16](0x4000090)
	WAVE_RAM0_H = IORegister[uint16](0x4000092)
	WAVE_RAM1_L = IORegister[uint16](0x4000094)
	WAVE_RAM1_H = IORegister[uint16](0x4000096)
	WAVE_RAM2_L = IORegister[uint16](0x4000098)
	WAVE_RAM2_H = IORegister[uint16](0x400009A)
	WAVE_RAM3_L = IORegister[uint16](0x400009C)
	WAVE_RAM3_H = IORegister[uint16](0x400009E)
	FIFO_A      = IORegister[uint32](0x40000A0)
	FIFO_B      = IORegister[uint32](0x40000A4)
	DMA0SAD     = IORegister[uint32](0x40000B0)
	DMA0DAD     = IORegister[uint32](0x40000B4)
	DMA0CNT_L   = IORegister[uint16](0x40000B8)
	DMA0CNT_H   = IORegister[uint16](0x40000BA)
	DMA1SAD     = IORegister[uint32](0x40000BC)
	DMA1DAD     = IORegister[uint32](0x40000C0)
	DMA1CNT_L   = IORegister[uint16](0x40000C4)
	DMA1CNT_H   = IORegister[uint16](0x40000C6)
	DMA2SAD     = IORegister[uint32](0x40000C8)
	DMA2DAD     = IORegister[uint32](0x40000CC)
	DMA2CNT_L   = IORegister[uint16](0x40000D0)
	DMA2CNT_H   = IORegister[uint16](0x40000D2)
	DMA3SAD     = IORegister[uint32](0x40000D4)
	DMA3DAD     = IORegister[uint32](0x40000D8)
	DMA3CNT_L   = IORegister[uint16](0x40000DC)
	DMA3CNT_H   = IORegister[uint16](0x40000DE)
	TM0CNT_L    = IORegister[uint16](0x4000100)
	TM0CNT_H    = IORegister[uint16](0x4000102)
	TM1CNT_L    = IORegister[uint16](0x4000104)
	TM1CNT_H    = IORegister[uint16](0x4000106)
	TM2CNT_L    = IORegister[uint16](0x4000108)
	TM2CNT_H    = IORegister[uint16](0x400010A)
	TM3CNT_L    = IORegister[uint16](0x400010C)
	TM3CNT_H    = IORegister[uint16](0x400010E)
	SIODATA32   = IORegister[uint32](0x4000120)
	SIOMULTI0   = IORegister[uint16](0x4000120)
	SIOMULTI1   = IORegister[uint16](0x4000122)
	SIOMULTI2   = IORegister[uint16](0x4000124)
	SIOMULTI3   = IORegister[uint16](0x4000126)
	SIOCNT      = IORegister[uint16](0x4000128)
	SIOMLT_SEND = IORegister[uint16](0x400012A)
	SIODATA8    = IORegister[uint16](0x400012A)
	KEYINPUT    = IORegister[uint16](0x4000130)
	KEYCNT      = IORegister[uint16](0x4000132)
	RCNT        = IORegister[uint16](0x4000134)
	IR          = IORegister[uint16](0x4000136)
	JOYCNT      = IORegister[uint16](0x4000140)
	JOY_RECV    = IORegister[uint32](0x4000150)
	JOY_TRANS   = IORegister[uint32](0x4000154)
	JOYSTAT     = IORegister[uint16](0x4000158)
	IE          = IORegister[uint16](0x4000200)
	IF          = IORegister[uint16](0x4000202)
	WAITCNT     = IORegister[uint16](0x4000204)
	IME         = IORegister[uint16](0x4000208)
	POSTFLG     = IORegister[uint8](0x4000300)
	HALTCNT     = IORegister[uint8](0x4000301)
)
View Source
const (
	LSL uint32 = iota
	LSR
	ASR
	ROR
)

Variables

View Source
var (
	BGMODE  = Flag(DISPCNT, 0, 3)
	BGFRAME = Flag(DISPCNT, 4, 1)
)
View Source
var (
	BIOS    = mb(0x00000000, 0x00003FFF, 16*k, [3]bool{true, true, true}, [3]bool{false, false, false}, [3]uint32{1, 1, 1})
	WRAM1   = mb(0x02000000, 0x02FFFFFF, 256*k, [3]bool{true, true, true}, [3]bool{true, true, true}, [3]uint32{3, 3, 6})
	WRAM2   = mb(0x03000000, 0x03FFFFFF, 32*k, [3]bool{true, true, true}, [3]bool{true, true, true}, [3]uint32{1, 1, 1})
	IOR     = mb(0x04000000, 0x040003FF, 0x400, [3]bool{true, true, true}, [3]bool{true, true, true}, [3]uint32{1, 1, 1})
	Palette = mb(0x05000000, 0x05FFFFFF, 1*k, [3]bool{true, true, true}, [3]bool{false, true, true}, [3]uint32{1, 1, 2})
	VRAM    = mb(0x06000000, 0x06017FFF, 96*k, [3]bool{true, true, true}, [3]bool{false, true, true}, [3]uint32{1, 1, 1})
	OAM     = mb(0x07000000, 0x07FFFFFF, 1*k, [3]bool{true, true, true}, [3]bool{false, true, true}, [3]uint32{1, 1, 1})
	GPRom1  = mb(0x08000000, 0x09FFFFFF, 32*m, [3]bool{true, true, true}, [3]bool{false, false, false}, [3]uint32{5, 5, 8})
	GPRom2  = mb(0x0A000000, 0x0BFFFFFF, 32*m, [3]bool{true, true, true}, [3]bool{false, false, false}, [3]uint32{5, 5, 8})
	GPRom3  = mb(0x0C000000, 0x0DFFFFFF, 32*m, [3]bool{true, true, true}, [3]bool{false, false, false}, [3]uint32{5, 5, 8})
	GPSRAM  = mb(0x0E000000, 0xFFFFFFFF, 64*k, [3]bool{true, false, false}, [3]bool{true, false, false}, [3]uint32{5, 5, 5})
)

Functions

func ADC

func ADC(left, right, carry uint32) (value uint64)

func ADD

func ADD(left, right, carry uint32) (value uint64)

func AND

func AND(left, right, carry uint32) (value uint64)

func BIC

func BIC(left, right, carry uint32) (value uint64)

func CMN

func CMN(left, right, carry uint32) (value uint64)

func CMP

func CMP(left, right, carry uint32) (value uint64)

func EOR

func EOR(left, right, carry uint32) (value uint64)

func FlagArithAdd

func FlagArithAdd(left, right uint32, value uint64) (N, Z, C, V bool)

func FlagArithReSub

func FlagArithReSub(left, right uint32, value uint64) (N, Z, C, V bool)

func FlagArithSub

func FlagArithSub(left, right uint32, value uint64) (N, Z, C, V bool)

func FlagLogic

func FlagLogic(left, right uint32, value uint64) (N, Z, C, V bool)

func MOV

func MOV(left, right, carry uint32) (value uint64)

func MUL

func MUL(left, right, carry uint32) (value uint64)

func MVN

func MVN(left, right, carry uint32) (value uint64)

func ORR

func ORR(left, right, carry uint32) (value uint64)

func RSB

func RSB(left, right, carry uint32) (value uint64)

func RSC

func RSC(left, right, carry uint32) (value uint64)

func ReadBits

func ReadBits[S Size](v S, bit uint8, size uint8) S

func ReadFlag

func ReadFlag[S Size](m *Memory, flag IOFlag[S]) S

func ReadIORegister

func ReadIORegister[S Size](m *Memory, r IORegister[S]) S

func ReadIORegister16

func ReadIORegister16(m *Memory, r IORegister[uint16]) uint16

func SBCArm

func SBCArm(left, right, carry uint32) (value uint64)

func SBCThumb

func SBCThumb(left, right, carry uint32) (value uint64)

func SUB

func SUB(left, right, carry uint32) (value uint64)

func SetBits

func SetBits[S Size](v S, bit uint8, size uint8, value S) S

func SetFlag

func SetFlag[S Size](m *Memory, flag IOFlag[S], value S)

func SetIORegister

func SetIORegister[S Size](m *Memory, r IORegister[S], value S)

func SetIORegister16

func SetIORegister16(m *Memory, r IORegister[uint16], value uint16)

func Shift

func Shift(shiftType uint32, value, amount uint32) (uint32, bool)

func ShiftASR

func ShiftASR(value, amount uint32) (uint32, bool)

func ShiftLSL

func ShiftLSL(value, amount uint32) (uint32, bool)

func ShiftLSR

func ShiftLSR(value, amount uint32) (uint32, bool)

func ShiftROR

func ShiftROR(value, amount uint32) (uint32, bool)

func TEQ

func TEQ(left, right, carry uint32) (value uint64)

func TST

func TST(left, right, carry uint32) (value uint64)

Types

type APU

type APU struct {
	*Motherboard
	// contains filtered or unexported fields
}

func NewAPU

func NewAPU(m *Motherboard) *APU

func (*APU) OnFIFOWrite

func (a *APU) OnFIFOWrite(address uint32, value uint32, size uint32)

func (*APU) OnSOUND1CNT_H

func (a *APU) OnSOUND1CNT_H(v uint16)

func (*APU) OnSOUND1CNT_L

func (a *APU) OnSOUND1CNT_L(v uint16)

func (*APU) OnSOUND1CNT_X

func (a *APU) OnSOUND1CNT_X(v uint16)

func (*APU) OnSOUND2CNT_H

func (a *APU) OnSOUND2CNT_H(v uint16)

func (*APU) OnSOUND2CNT_L

func (a *APU) OnSOUND2CNT_L(v uint16)

func (*APU) OnSOUND3CNT_H

func (a *APU) OnSOUND3CNT_H(v uint16)

func (*APU) OnSOUND3CNT_L

func (a *APU) OnSOUND3CNT_L(v uint16)

func (*APU) OnSOUND3CNT_X

func (a *APU) OnSOUND3CNT_X(v uint16)

func (*APU) OnSOUND4CNT_H

func (a *APU) OnSOUND4CNT_H(v uint16)

func (*APU) OnSOUND4CNT_L

func (a *APU) OnSOUND4CNT_L(v uint16)

func (*APU) OnSOUNDCNT_H

func (a *APU) OnSOUNDCNT_H(value uint16)

func (*APU) OnTimerOverflow

func (a *APU) OnTimerOverflow(idx int)

func (*APU) SampleRate

func (a *APU) SampleRate() int

func (*APU) SetOutput

func (a *APU) SetOutput(cb func([]int16))

func (*APU) Tick

func (a *APU) Tick(cycles uint32)

type BlockData

type BlockData struct {
	MemoryBlock MemoryBlock
	Data        []byte
}

type CPU

type CPU struct {
	*Motherboard
	CPURegisters
	// contains filtered or unexported fields
}

func NewCPU

func NewCPU(m *Motherboard) *CPU

func (*CPU) Arm

func (c *CPU) Arm(instruction uint32)

func (*CPU) ArmALU

func (c *CPU) ArmALU(instruction uint32)

func (*CPU) ArmBranch

func (c *CPU) ArmBranch(instruction uint32)

func (*CPU) ArmBranchX

func (c *CPU) ArmBranchX(instruction uint32)

func (*CPU) ArmMRS

func (c *CPU) ArmMRS(instruction uint32)

func (*CPU) ArmMSR

func (c *CPU) ArmMSR(instruction uint32)

func (*CPU) ArmMemory

func (c *CPU) ArmMemory(instruction uint32)

func (*CPU) ArmMemoryBlock

func (c *CPU) ArmMemoryBlock(instruction uint32)

func (*CPU) ArmMultiply

func (c *CPU) ArmMultiply(instruction uint32)

func (*CPU) ArmMultiplyLong

func (c *CPU) ArmMultiplyLong(instruction uint32)

func (*CPU) ArmSWI

func (c *CPU) ArmSWI(instruction uint32)

func (*CPU) ArmShift

func (c *CPU) ArmShift(shiftType uint32, value, amount uint32, S uint32, I uint32) uint32

func (*CPU) ArmSwap

func (c *CPU) ArmSwap(instruction uint32)

func (*CPU) Arm_B

func (c *CPU) Arm_B(instruction uint32)

func (*CPU) Arm_BL

func (c *CPU) Arm_BL(instruction uint32)

func (*CPU) Arm_BLX

func (c *CPU) Arm_BLX(instruction uint32)

func (*CPU) Arm_BX

func (c *CPU) Arm_BX(instruction uint32)

func (*CPU) Arm_LDM

func (c *CPU) Arm_LDM(instruction uint32)

func (*CPU) Arm_MemoryHalf

func (c *CPU) Arm_MemoryHalf(instruction uint32)

func (*CPU) Arm_Op2

func (c *CPU) Arm_Op2(instruction uint32) uint32

func (*CPU) Arm_Rm

func (c *CPU) Arm_Rm(instruction uint32) uint32

func (*CPU) Arm_Rn

func (c *CPU) Arm_Rn(instruction uint32) uint32

func (*CPU) Arm_Rx

func (c *CPU) Arm_Rx(instruction uint32, Rx uint32) uint32

func (*CPU) Arm_STM

func (c *CPU) Arm_STM(instruction uint32)

func (*CPU) SWI

func (c *CPU) SWI(comment uint32)

func (*CPU) Step

func (c *CPU) Step()

func (*CPU) Thumb

func (c *CPU) Thumb(instruction uint32)

func (*CPU) ThumbALU

func (c *CPU) ThumbALU(instruction uint32)

func (*CPU) ThumbAddSP

func (c *CPU) ThumbAddSP(instruction uint32)

func (*CPU) ThumbAddSub

func (c *CPU) ThumbAddSub(instruction uint32)

func (*CPU) ThumbBranchCond

func (c *CPU) ThumbBranchCond(instruction uint32)

func (*CPU) ThumbBranchHi

func (c *CPU) ThumbBranchHi(instruction uint32)

func (*CPU) ThumbBranchLink1

func (c *CPU) ThumbBranchLink1(instruction uint32)

func (*CPU) ThumbBranchLink2

func (c *CPU) ThumbBranchLink2(instruction uint32)

func (*CPU) ThumbBranchUncond

func (c *CPU) ThumbBranchUncond(instruction uint32)

func (*CPU) ThumbHiReg

func (c *CPU) ThumbHiReg(instruction uint32)

func (*CPU) ThumbImm

func (c *CPU) ThumbImm(instruction uint32)

func (*CPU) ThumbMemoryBlock

func (c *CPU) ThumbMemoryBlock(instruction uint32)

func (*CPU) ThumbMemoryHalf

func (c *CPU) ThumbMemoryHalf(instruction uint32)

func (*CPU) ThumbMemoryHalfSign

func (c *CPU) ThumbMemoryHalfSign(instruction uint32)

func (*CPU) ThumbMemoryImm

func (c *CPU) ThumbMemoryImm(instruction uint32)

func (*CPU) ThumbMemoryPCRel

func (c *CPU) ThumbMemoryPCRel(instruction uint32)

func (*CPU) ThumbMemoryPCSP

func (c *CPU) ThumbMemoryPCSP(instruction uint32)

func (*CPU) ThumbMemoryReg

func (c *CPU) ThumbMemoryReg(instruction uint32)

func (*CPU) ThumbMemorySPRel

func (c *CPU) ThumbMemorySPRel(instruction uint32)

func (*CPU) ThumbMemorySign

func (c *CPU) ThumbMemorySign(instruction uint32)

func (*CPU) ThumbPop

func (c *CPU) ThumbPop(instruction uint32)

func (*CPU) ThumbPush

func (c *CPU) ThumbPush(instruction uint32)

func (*CPU) ThumbPushPop

func (c *CPU) ThumbPushPop(instruction uint32)

func (*CPU) ThumbSWI

func (c *CPU) ThumbSWI(instruction uint32)

func (*CPU) ThumbShift

func (c *CPU) ThumbShift(instruction uint32)

func (*CPU) Thumb_ADD

func (c *CPU) Thumb_ADD(instruction uint32)

func (*CPU) Thumb_BLXHi

func (c *CPU) Thumb_BLXHi(instruction uint32)

func (*CPU) Thumb_BXHi

func (c *CPU) Thumb_BXHi(instruction uint32)

func (*CPU) Thumb_LDR

func (c *CPU) Thumb_LDR(instruction uint32)

func (*CPU) Thumb_LDRB

func (c *CPU) Thumb_LDRB(instruction uint32)

func (*CPU) Thumb_STR

func (c *CPU) Thumb_STR(instruction uint32)

func (*CPU) Thumb_STRB

func (c *CPU) Thumb_STRB(instruction uint32)

func (*CPU) Thumb_SUB

func (c *CPU) Thumb_SUB(instruction uint32)

func (*CPU) Thumb_SetCPSRLogic

func (c *CPU) Thumb_SetCPSRLogic(value uint32)

type CPURegisters

type CPURegisters struct {
	R    [16]uint32
	CPSR uint32

	R0       uint32
	R1       uint32
	R2       uint32
	R3       uint32
	R4       uint32
	R5       uint32
	R6       uint32
	R7       uint32
	R8       uint32
	R9       uint32
	R10      uint32
	R11      uint32
	R12      uint32
	R13      uint32
	R14      uint32
	R15      uint32
	R8_fiq   uint32
	R9_fiq   uint32
	R10_fiq  uint32
	R11_fiq  uint32
	R12_fiq  uint32
	R13_fiq  uint32
	R13_svc  uint32
	R13_abt  uint32
	R13_irq  uint32
	R13_und  uint32
	R14_fiq  uint32
	R14_svc  uint32
	R14_abt  uint32
	R14_irq  uint32
	R14_und  uint32
	SPSR_fiq uint32
	SPSR_svc uint32
	SPSR_abt uint32
	SPSR_irq uint32
	SPSR_und uint32
}

type DMAController

type DMAController struct {
	*Motherboard
	// contains filtered or unexported fields
}

func NewDMA

func NewDMA(m *Motherboard) *DMAController

func (*DMAController) LatchAddresses

func (d *DMAController) LatchAddresses(ch int)

type Emulator

type Emulator struct {
	*Motherboard
	FastForward bool
	// contains filtered or unexported fields
}

func NewEmu

func NewEmu(gamepak, bios []byte) *Emulator

func (*Emulator) Boot

func (e *Emulator) Boot()

func (*Emulator) PreBoot

func (e *Emulator) PreBoot()

func (*Emulator) Run

func (e *Emulator) Run()

type Flash

type Flash struct {
	*Motherboard

	Data [128 * 1024]byte
	// contains filtered or unexported fields
}

func NewFlash

func NewFlash(m *Motherboard, gamepak []byte) *Flash

func (*Flash) Flush

func (f *Flash) Flush()

func (*Flash) LoadData

func (f *Flash) LoadData(data []byte)

func (*Flash) OnSave

func (f *Flash) OnSave(fn func(data []byte))

func (*Flash) Read

func (f *Flash) Read(address uint32) uint8

func (*Flash) Write

func (f *Flash) Write(address uint32, value uint8)

type GPIO

type GPIO struct {
	Data      uint8
	Direction uint8
	Readable  bool
	RTC       *RTC
}

func NewGPIO

func NewGPIO() *GPIO

func (*GPIO) Read

func (g *GPIO) Read(addr uint32) uint8

func (*GPIO) Write

func (g *GPIO) Write(addr uint32, data uint8)

type IOFlag

type IOFlag[S Size] struct {
	Register IORegister[S]
	Bit      uint8
	Size     uint8
}

func Flag

func Flag[S Size](r IORegister[S], bit uint8, size uint8) IOFlag[S]

type IORegister

type IORegister[S Size] uint32

type LCD

type LCD struct {
	*Motherboard

	ShowFPS bool
	// contains filtered or unexported fields
}

func NewLCD

func NewLCD(m *Motherboard) *LCD

func (*LCD) BGMode0Write

func (l *LCD) BGMode0Write(line uint16)

func (*LCD) BGMode1Write

func (l *LCD) BGMode1Write(line uint16)

func (*LCD) BGMode2Write

func (l *LCD) BGMode2Write(line uint16)

func (*LCD) BGMode3Write

func (l *LCD) BGMode3Write(line uint16)

func (*LCD) BGMode4Write

func (l *LCD) BGMode4Write(line uint16)

func (*LCD) BGMode5Write

func (l *LCD) BGMode5Write(line uint16)

func (*LCD) Blank

func (l *LCD) Blank(line uint16)

func (*LCD) Color

func (l *LCD) Color(r, g, b, a uint32) uint16

func (*LCD) CountFrame

func (l *LCD) CountFrame()

func (*LCD) DrawFrame

func (l *LCD) DrawFrame()

func (*LCD) DrawLine

func (l *LCD) DrawLine(line uint16, blank uint16)

func (*LCD) Front

func (l *LCD) Front() *image.RGBA

func (*LCD) IncrementAffineRefs

func (l *LCD) IncrementAffineRefs()

func (*LCD) LatchAffineRefs

func (l *LCD) LatchAffineRefs()

func (*LCD) OnAffineRefWrite

func (l *LCD) OnAffineRefWrite(addr uint32)

func (*LCD) PaletteRGBA

func (l *LCD) PaletteRGBA(n uint8) (r, g, b, a uint32)

func (*LCD) RGBA

func (l *LCD) RGBA(d uint16) (r, g, b, a uint32)

func (*LCD) SetDraw

func (l *LCD) SetDraw(draw func())

type Memory

type Memory struct {
	*Motherboard

	Blocks []BlockData
	// contains filtered or unexported fields
}

func NewMemory

func NewMemory(mm *Motherboard) *Memory

func (*Memory) ClearBlock

func (m *Memory) ClearBlock(mb MemoryBlock)

func (*Memory) Read8

func (m *Memory) Read8(address uint32, cycle bool, forceAddr bool) (value uint8)

func (*Memory) Read16

func (m *Memory) Read16(address uint32, cycle bool, forceAddr bool) (value uint16)

func (*Memory) Read32

func (m *Memory) Read32(address uint32, cycle bool, forceAddr bool) (value uint32)

func (*Memory) ReadMemoryBlock

func (m *Memory) ReadMemoryBlock(mb MemoryBlock) []byte

func (*Memory) Set8

func (m *Memory) Set8(address uint32, value uint8, cycle bool, forceAddr bool)

func (*Memory) Set16

func (m *Memory) Set16(address uint32, value uint16, cycle bool, forceAddr bool)

func (*Memory) Set32

func (m *Memory) Set32(address uint32, value uint32, cycle bool, forceAddr bool)

func (*Memory) SetMemoryBlock

func (m *Memory) SetMemoryBlock(mb MemoryBlock, value []byte)

type MemoryBlock

type MemoryBlock struct {
	Start, End uint32
	Size       uint32
	Mask       uint32
	Reads      [3]bool
	Writes     [3]bool
	Cycles     [3]uint32
}

type Motherboard

type Motherboard struct {
	CPU    *CPU
	Memory *Memory
	LCD    *LCD
	DMA    *DMAController
	Timer  *Timer
	Flash  *Flash
	GPIO   *GPIO
	APU    *APU
}

func NewMotherboard

func NewMotherboard(gamepak, bios []byte) *Motherboard

type RTC

type RTC struct {
	*Motherboard
	// contains filtered or unexported fields
}

func NewRTC

func NewRTC(m *Motherboard) *RTC

func (*RTC) Read

func (r *RTC) Read() uint8

func (*RTC) Write

func (r *RTC) Write(data uint8, mask uint8)

type Size

type Size interface {
	uint8 | uint16 | uint32
}

type Timer

type Timer struct {
	*Motherboard
	// contains filtered or unexported fields
}

func NewTimer

func NewTimer(m *Motherboard) *Timer

func (*Timer) OnControlWrite

func (t *Timer) OnControlWrite(address uint32, value uint16)

func (*Timer) Reload

func (t *Timer) Reload(address uint32)

func (*Timer) Set

func (t *Timer) Set(address uint32, value uint16)

func (*Timer) SyncToMemory

func (t *Timer) SyncToMemory()

func (*Timer) Tick

func (t *Timer) Tick(cycles uint32)

Jump to

Keyboard shortcuts

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