Documentation ¶
Index ¶
- Constants
- Variables
- type AddrSpace
- type CPU
- type CPUAddrSpace
- type Controller
- type Mapper
- type Mapper0
- type Mapper3
- type Mapper4
- type Memory
- type OAMEntry
- type PPU
- func (ppu *PPU) EvalSpritePriority(x int, spritePixel uint8, backgroundPixel uint8, oamEntry *OAMEntry) uint8
- func (ppu *PPU) EvalSprites()
- func (ppu *PPU) GetBgPixel() uint8
- func (ppu *PPU) GetCurrentOAMEntry() *OAMEntry
- func (ppu *PPU) GetSpritePixel(entry *OAMEntry) uint8
- func (ppu *PPU) HighBGTileAddr() uint16
- func (ppu *PPU) LowBGTileAddr() uint16
- func (ppu *PPU) Read(address uint16) byte
- func (ppu *PPU) ReadData() uint8
- func (ppu *PPU) RenderSinglePixel()
- func (ppu *PPU) Reset()
- func (ppu *PPU) TickScanline()
- func (ppu *PPU) Write(address uint16, value byte)
- func (ppu *PPU) WriteData(v uint8)
- type PPUADDR
- func (addr *PPUADDR) AttrTableAddr() uint16
- func (addr *PPUADDR) FineY() uint16
- func (addr *PPUADDR) IncrementCoarseX()
- func (addr *PPUADDR) IncrementFineY()
- func (addr *PPUADDR) NameTableAddr() uint16
- func (addr *PPUADDR) SetOnCTRLWrite(v uint8)
- func (addr *PPUADDR) SetOnSCROLLWrite(v uint8)
- func (addr *PPUADDR) SetOnSTATUSRead()
- func (addr *PPUADDR) TransferX()
- func (addr *PPUADDR) TransferY()
- func (addr *PPUADDR) Write(v uint8)
- type PPUCTRL
- type PPUMASK
- type PPUSTATUS
- type Rom
- type RomHeader
- type TV
Constants ¶
View Source
const ( CONTROLLER_BUTTONS_A = iota CONTROLLER_BUTTONS_B CONTROLLER_BUTTONS_SELECT CONTROLLER_BUTTONS_START CONTROLLER_BUTTONS_UP CONTROLLER_BUTTONS_DOWN CONTROLLER_BUTTONS_LEFT CONTROLLER_BUTTONS_RIGHT )
View Source
const ( StatusFlagC = iota StatusFlagZ StatusFlagI StatusFlagD StatusFlagB StatusFlagU StatusFlagV StatusFlagN )
View Source
const ( MEM_STACK_BASE = 0x100 CPU_FREQ = 1789773 )
View Source
const ( AddrModeAbs addressingMode = iota AddrModeAbsX AddrModeAbsY AddrModeAccumulator AddrModeImmediate AddrModeImplied AddrModeIndirect AddrModeXIndirect AddrModeIndirectY AddrModeRelative AddrModeZeroPage AddrModeZeroX AddrModeZeroY )
View Source
const ( // 1kB MAPPER4_CHRROM_BANK_SIZE = 0x0400 // 8kB MAPPER4_PRGROM_BANK_SIZE = 0x2000 )
View Source
const ( MS_READ_EXT = false MS_WRITE_EXT = true )
View Source
const ( SCANLINE_TYPE_PRE = 0x1 SCANLINE_TYPE_VISIBLE = 0x2 SCANLINE_TYPE_POST = 0x3 SCANLINE_TYPE_VBLANK = 0x4 SCANLINE_NMI = 241 DOT_TYPE_VISIBLE = 0x1 DOT_TYPE_PREFETCH = 0x2 DOT_TYPE_INVISIBLE = 0x3 )
View Source
const ( SCREEN_WIDTH = 256 SCREEN_HEIGHT = 240 )
Variables ¶
View Source
var Palette = [64]uint32{
0x7C7C7C, 0x0000FC, 0x0000BC, 0x4428BC, 0x940084, 0xA80020, 0xA81000, 0x881400,
0x503000, 0x007800, 0x006800, 0x005800, 0x004058, 0x000000, 0x000000, 0x000000,
0xBCBCBC, 0x0078F8, 0x0058F8, 0x6844FC, 0xD800CC, 0xE40058, 0xF83800, 0xE45C10,
0xAC7C00, 0x00B800, 0x00A800, 0x00A844, 0x008888, 0x000000, 0x000000, 0x000000,
0xF8F8F8, 0x3CBCFC, 0x6888FC, 0x9878F8, 0xF878F8, 0xF85898, 0xF87858, 0xFCA044,
0xF8B800, 0xB8F818, 0x58D854, 0x58F898, 0x00E8D8, 0x787878, 0x000000, 0x000000,
0xFCFCFC, 0xA4E4FC, 0xB8B8F8, 0xD8B8F8, 0xF8B8F8, 0xF8A4C0, 0xF0D0B0, 0xFCE0A8,
0xF8D878, 0xD8F878, 0xB8F8B8, 0xB8F8D8, 0x00FCFC, 0xF8D8F8, 0x000000, 0x000000,
}
From http://www.thealmightyguru.com/Games/Hacking/Wiki/index.php?title=NES_Palette
Functions ¶
This section is empty.
Types ¶
type CPUAddrSpace ¶
type CPUAddrSpace struct { RAM Memory ROM *Rom PPU *PPU Mapper Mapper // contains filtered or unexported fields }
func MakeCPUAddrSpace ¶
func MakeCPUAddrSpace(rom *Rom, ppu *PPU, ctrlr *Controller, mapper Mapper) *CPUAddrSpace
func (*CPUAddrSpace) Read16 ¶
func (as *CPUAddrSpace) Read16(addr uint16) uint16
Little-endian mem layout
func (*CPUAddrSpace) Read8 ¶
func (as *CPUAddrSpace) Read8(addr uint16) uint8
http://wiki.nesdev.com/w/index.php/CPU_memory_map https://wiki.nesdev.com/w/index.php/NROM (Hard coded mapper 0 for now)
func (*CPUAddrSpace) Write16 ¶
func (as *CPUAddrSpace) Write16(addr uint16, v uint16)
func (*CPUAddrSpace) Write8 ¶
func (as *CPUAddrSpace) Write8(addr uint16, v uint8)
type Controller ¶
type Controller struct {
// contains filtered or unexported fields
}
func MakeController ¶
func MakeController() *Controller
func (*Controller) PushButton ¶
func (ctrl *Controller) PushButton(btn uint8)
func (*Controller) ReadState ¶
func (ctrl *Controller) ReadState() uint8
func (*Controller) ReleaseButton ¶
func (ctrl *Controller) ReleaseButton(btn uint8)
func (*Controller) Write ¶
func (ctrl *Controller) Write(v uint8)
type Mapper ¶
func MakeMapper ¶
type Mapper4 ¶
type Mapper4 struct { ROM *Rom // Written at 0x8000 - 0xa0000 (on even addrs) Register uint8 // R0 - R7 internal registers BankRegisters [8]uint8 // 8 1kB regions CHRMappings [8]uint8 // 4 8kB regions PRGMappings [4]uint8 }
func MakeMapper4 ¶
type PPU ¶
type PPU struct { CTRL *PPUCTRL ADDR *PPUADDR MASK *PPUMASK STATUS *PPUSTATUS CPU *CPU TV *TV Mapper Mapper Pixels []byte ReadDataBuffer uint8 Scanline int Dot int NameTableLatch uint8 AttrTableLatch uint8 // Background latches & shift registers BgLatchLow uint8 BgLatchHigh uint8 BgTileShiftLow uint16 BgTileShiftHigh uint16 // Attribute latches & shift registers AttrLatchLow uint8 AttrLatchHigh uint8 AttrShiftLow uint8 AttrShiftHigh uint8 Frame uint64 // frame counter // contains filtered or unexported fields }
func (*PPU) EvalSpritePriority ¶
func (*PPU) EvalSprites ¶
func (ppu *PPU) EvalSprites()
func (*PPU) GetBgPixel ¶
func (*PPU) GetCurrentOAMEntry ¶
func (*PPU) GetSpritePixel ¶
func (*PPU) HighBGTileAddr ¶
func (*PPU) LowBGTileAddr ¶
func (*PPU) ReadData ¶
VRAM 0x0000 - 0x3eff reads are buffered! https://wiki.nesdev.com/w/index.php/PPU_registers#The_PPUDATA_read_buffer_.28post-fetch.29
func (*PPU) RenderSinglePixel ¶
func (ppu *PPU) RenderSinglePixel()
func (*PPU) TickScanline ¶
func (ppu *PPU) TickScanline()
type PPUADDR ¶
type PPUADDR struct { // Internal PPU registers v, t, w, x VAddr uint16 TAddr uint16 WriteHi bool FineXScroll uint8 }
func (*PPUADDR) AttrTableAddr ¶
func (*PPUADDR) IncrementCoarseX ¶
func (addr *PPUADDR) IncrementCoarseX()
http://wiki.nesdev.com/w/index.php/PPU_scrolling#X_increment
func (*PPUADDR) IncrementFineY ¶
func (addr *PPUADDR) IncrementFineY()
http://wiki.nesdev.com/w/index.php/PPU_scrolling#Y_increment
func (*PPUADDR) NameTableAddr ¶
func (*PPUADDR) SetOnCTRLWrite ¶
func (*PPUADDR) SetOnSCROLLWrite ¶
func (*PPUADDR) SetOnSTATUSRead ¶
func (addr *PPUADDR) SetOnSTATUSRead()
type PPUCTRL ¶
type PPUSTATUS ¶
type TV ¶
type TV struct {
// contains filtered or unexported fields
}
func (*TV) ShowPixels ¶
func (tv *TV) ShowPixels()
func (*TV) UpdateInputState ¶
func (tv *TV) UpdateInputState(ctrlr *Controller)
Click to show internal directories.
Click to hide internal directories.