anchor.diff:        :above
         :below))
   
  -(defmethod on-scanline ((sprite sprite) ppu y)
  -  (if (< y (sprite-y sprite))
  -      nil
  -      (ecase (sprite-size ppu)
  -        (:8 (< y (+ (sprite-y sprite) 8)))
  -        (:16 (< y (+ (sprite-y sprite) 16))))))
  -
  -(defmethod in-bounding-box ((sprite sprite) ppu x y)
  +(defmethod on-scanline ((sprite sprite) ppu)
  +  (let ((scanline (getf (ppu-meta ppu) :scanline)))
  +    (if (< scanline (sprite-y sprite))
  +        nil
  +        (ecase (sprite-size ppu)
  +          (:8 (< scanline (+ (sprite-y sprite) 8)))
  +          (:16 (< scanline (+ (sprite-y sprite) 16)))))))
  +
  +(defmethod in-bounding-box ((sprite sprite) ppu x &optional y)
     (and (>= x (sprite-x sprite))
          (< x (+ (sprite-x sprite) 8))
  -       (on-scanline sprite ppu y)))
  +       (on-scanline sprite ppu)))
   
   (defmethod tiles ((sprite sprite) ppu)
     (let ((base (pattern-table-addr ppu)))
  
positive.code:                (palette-index (logand (read-vram ppu (+ #x3f00 tile-color)) #x3f)))
            (get-color palette-index)))))
  
  (defun get-sprite-pixel (ppu sprites x opaque-p)
    ; TODO
    )
  
  (defun on-top (x y)
    y ; TODO: determine sprite priority
  
negative.code:   (with-accessors ((oam ppu-oam)) ppu
      (loop with count = 0 with result = (make-array 8 :initial-element nil)
         for i from 0 to 64 for sprite = (from-oam oam i)
         when (on-scanline sprite ppu)
         do (if (< count 8)
                (setf (aref result count) i
                      count (1+ count))
  