anchor.diff:        (logior (ash 1 bit-1) bit-0))))
   
   (defun nametable-addr (x y)
  -  ; TODO
  -  )
  -
  -(defun pixel-opaque-p (ppu x)
  +  (let* ((x (mod x 64))
  +         (y (mod y 60))
  +         (x-index (>= x 32))
  +         (y-index (>= y 30))
  +         (base (cond ((and x-index y-index) #x2c00)
  +                     (x-index #x2400)
  +                     (y-index #x2800)
  +                     (t #x2000))))
  +    (list (mod y 30) (mod x 32) base)))
  +
  +(defun get-bg-pixel (ppu x)
     (let* ((x (+ (getf (ppu-meta ppu) :x) x))
            (y (+ (getf (ppu-meta ppu) :y) (getf (ppu-meta ppu) :scanline)))
            (base (nametable-addr (round x 8) (round y 8))) ; TODO: Use floor instead?
  
positive.code:       (7 (store-vram ppu (getf (ppu-addr ppu) :val) new-val)))))
  
  (defgeneric render-scanline (ppu)
    (:method ((ppu ppu))
      ; TODO
      ))
  
  (defgeneric start-vblank (ppu)
    (:method ((ppu ppu))
  
negative.code:   ; TODO
    )
  
  (defun on-top (x y)
    ; TODO: determine sprite priority
    )
  
  (defun get-visible-sprites (ppu)
    (let ((count 0)
          (result (make-array 8 :initial-element nil)))
  