module Nes.PPU.Pointers ( PPUPointers (paletteTable, vram, oamData), newPPUPointers, ) where import Nes.Memory import Nes.Memory.Internal import Nes.PPU.Constants data PPUPointers = MkPPUPtr { PPUPointers -> MemoryPointer paletteTable :: {-# UNPACK #-} !MemoryPointer , PPUPointers -> MemoryPointer vram :: {-# UNPACK #-} !MemoryPointer , PPUPointers -> MemoryPointer oamData :: {-# UNPACK #-} !MemoryPointer } newPPUPointers :: IO PPUPointers newPPUPointers :: IO PPUPointers newPPUPointers = do MemoryPointer paletteTable <- Int -> IO MemoryPointer callocForeignPtr Int paletteTableSize MemoryPointer vram <- Int -> IO MemoryPointer callocForeignPtr Int vramSize MemoryPointer oamData <- Int -> IO MemoryPointer callocForeignPtr Int oamDataSize PPUPointers -> IO PPUPointers forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return MkPPUPtr{MemoryPointer paletteTable :: MemoryPointer vram :: MemoryPointer oamData :: MemoryPointer paletteTable :: MemoryPointer vram :: MemoryPointer oamData :: MemoryPointer ..}