public BackgroundHandler( IPPUMemoryMap ppuMemoryMap, PPURegisters registers, PPUInternalRegisters internalRegisters, ScrollHandler scrollHandler, PaletteHandler paletteHandler) { this.registers = registers; this.ppuMemoryMap = ppuMemoryMap; this.scrollHandler = scrollHandler; this.paletteHandler = paletteHandler; this.internalRegisters = internalRegisters; foreach (var patternTable in this.ppuMemoryMap.GetMemorySegments <PatternTable>()) { if (patternTable.Range.Min == 0x0000) { this.patternTable0 = patternTable; } else if (patternTable.Range.Min == 0x1000) { this.patternTable1 = patternTable; } } foreach (var nameTable in this.ppuMemoryMap.GetMemorySegments <Nametable>()) { if (nameTable.Range.Min == 0x2000) { this.nameTable0 = nameTable; } else if (nameTable.Range.Min == 0x2400) { this.nameTable1 = nameTable; } else if (nameTable.Range.Min == 0x2800) { this.nameTable2 = nameTable; } else if (nameTable.Range.Min == 0x2C00) { this.nameTable3 = nameTable; } } }
public static Tile GetTileFromPixel(int x, int y, ScrollHandler scrollHandler, Tile workingTile, int bgOffset, PPUInternalRegisters registers) { var scrolledX = scrollHandler.vCoarseXScroll - 1; var scrolledY = scrollHandler.vCoarseYScroll; var tile = workingTile; tile.PPUAddress = (ushort)(0x2000 + x + (y * Constants.NumberOfColumns)); tile.Location = (x, y); var colorIndex = GetColorIndex(tile, scrollHandler); byte paletteId = 0; if (colorIndex != 0) { paletteId = (byte)((tile.AttributeData >> 0) & 3); } tile.PaletteAddress = (ushort)(0x3f00 + 4 * paletteId + colorIndex); return(tile); }
public ScrollHandler(PPURegisters registers, PPUInternalRegisters internalRegisters) { this.registers = registers; this.internalRegisters = internalRegisters; }