anchor.diff:              (top (logand (ash attr-byte -2) #x03))
               (left (logand (ash attr-byte -4) #x03))
               (t (logand (ash attr-byte -6) #x03))))))
  -
  -(defun get-visible-sprites (ppu)
  -  (loop with count = 0 with result = (make-list 8 :initial-element nil)
  -     for i from 0 to 63 for sprite = (get-sprite ppu i)
  -     when (on-scanline sprite ppu)
  -     do (if (< count 8)
  -            (setf (nth count result) i
  -                  count (1+ count))
  -            (progn
  -              (set-sprite-overflow ppu 1)
  -              (return result)))
  -     finally (return result)))
   
   (defun get-bg-pixel (ppu x)
     (let* ((x (+ (getf (ppu-meta ppu) :x) x))
  
positive.code:                      (t #x2000))))
      (list base (mod x 32) (mod y 30))))
  
  (defun get-sprite (ppu index)
    (let ((base (* index 4)))
      (make-sprite :y          (1+ (read-oam ppu (+ 0 base)))
                   :tile-index (read-oam ppu (+ 1 base))
                   :attribute  (read-oam ppu (+ 2 base))
                   :x          (read-oam ppu (+ 3 base)))))
  
  (defun get-attrib (ppu base x y)
    (flet ((magic (x y) ; TODO: Why? Rename after enlightenment.
  
negative.code: 
  ;;;; Sprite RAM/Object Attribute Memory (OAM)
  
  (declaim (inline read-oam))
  (defmethod read-oam ((ppu ppu) addr)
    (aref (ppu-oam ppu) addr))
  
  