anchor.diff:                 (hsync-a (reg +hsync-a+))
                  (vtotal-a (reg +vtotal-a+))
                  (vblank-a (reg +vblank-a+))
  -               (vsync-a (reg +vsync-a+))
  -               (pipeasrc (reg +pipeasrc+))
  -               (dspacntr (reg +dspacntr+)))
  -          (make-mode-parameters
  -           :width (1+ (ldb +pipesrc-horz+ pipeasrc))
  -           :height (1+ (ldb +pipesrc-vert+ pipeasrc))
  -           :format (case (ldb +dspcntr-format+ dspacntr)
  -                     (#b0110 :x8r8g8b8)
  -                     (t (ldb +dspcntr-format+ dspacntr)))
  -           :n (ldb +pll-n-divisor+ fpa0)
  -           :m1 (ldb +pll-m1-divisor+ fpa0)
  -           :m2 (ldb +pll-m2-divisor+ fpa0)
  -           :p1 (ldb +dpll-ctrl-p1+ dplla-ctrl)
  -           :p2 (ldb +dpll-ctrl-p2+ dplla-ctrl)
  -           :htotal-active (ldb +htotal-active+ htotal-a)
  -           :htotal-total (ldb +htotal-total+ htotal-a)
  -           :hblank-start (ldb +hblank-start+ hblank-a)
  -           :hblank-end (ldb +hblank-end+ hblank-a)
  -           :hsync-start (ldb +hsync-start+ hsync-a)
  -           :hsync-end (ldb +hsync-end+ hsync-a)
  -           :vtotal-active (ldb +vtotal-active+ vtotal-a)
  -           :vtotal-total (ldb +vtotal-total+ vtotal-a)
  -           :vblank-start (ldb +vblank-start+ vblank-a)
  -           :vblank-end (ldb +vblank-end+ vblank-a)
  -           :vsync-start (ldb +vsync-start+ vsync-a)
  -           :vsync-end (ldb +vsync-end+ vsync-a)))))))
  -
  -(defun framebuffer-address (device)
  -  (logand (pci:pci-io-region (i945-device device) 2) (lognot #xF)))
  +               (vsync-a (reg +vsync-a+)))
  +          (make-timing
  +           :pixel-clock (pll-parameters-to-dot-clock
  +                         (ldb +pll-n-divisor+ fpa0)
  +                         (ldb +pll-m1-divisor+ fpa0)
  +                         (ldb +pll-m2-divisor+ fpa0)
  +                         (ldb +dpll-ctrl-p1+ dplla-ctrl)
  +                         (ldb +dpll-ctrl-p2+ dplla-ctrl))
  +           :horz-left-border (- (1+ (ldb +htotal-total+ htotal-a))
  +                                (1+ (ldb +hblank-end+ hblank-a)))
  +           :horz-active (1+ (ldb +htotal-active+ htotal-a))
  +           :horz-right-border (- (1+ (ldb +htotal-active+ htotal-a))
  +                                 (1+ (ldb +hblank-start+ hblank-a)))
  +           :horz-front-porch (- (1+ (ldb +hsync-start+ hsync-a))
  +                                (1+ (ldb +hblank-start+ hblank-a)))
  +           :horz-sync (- (1+ (ldb +hsync-end+ hsync-a))
  +                         (1+ (ldb +hsync-start+ hsync-a)))
  +           :horz-back-porch (- (1+ (ldb +hblank-end+ hblank-a))
  +                               (1+ (ldb +hsync-end+ hsync-a)))
  +           :horz-image-size (truncate (* (/ (1+ (ldb +htotal-active+ htotal-a)) 72) 25.4)) ; Assume 72dpi
  +           :vert-top-border (- (1+ (ldb +vtotal-total+ vtotal-a))
  +                               (1+ (ldb +vblank-end+ vblank-a)))
  +           :vert-active (1+ (ldb +vtotal-active+ vtotal-a))
  +           :vert-bottom-border (- (1+ (ldb +vtotal-active+ vtotal-a))
  +                                  (1+ (ldb +vblank-start+ vblank-a)))
  +           :vert-front-porch (- (1+ (ldb +vsync-start+ vsync-a))
  +                                (1+ (ldb +vblank-start+ vblank-a)))
  +           :vert-sync (- (1+ (ldb +vsync-end+ vsync-a))
  +                         (1+ (ldb +vsync-start+ vsync-a)))
  +           :vert-back-porch (- (1+ (ldb +vblank-end+ vblank-a))
  +                               (1+ (ldb +vsync-end+ vsync-a)))
  +           :vert-image-size (truncate (* (/ (1+ (ldb +vtotal-active+ vtotal-a)) 72) 25.4)) ; Assume 72dpi
  +           ;; TODO: Pick up interlaced modes
  +           :interlaced nil
  +           ;; TODO: Pick up stereo modes
  +           :stereo nil
  +           ;; TODO: Sync...
  +           :sync-config 15)))))) ; Digital, serrated +vsync, +hsync.
   
   (defun mode-switch (device mode)
  -  (when (not (eql (mode-parameters-format mode) :x8r8g8b8))
  -    (error "Mode ~S has unsupported format." mode))
     (with-i945-access (device)
       ;; Update the video framebuffer.
       ;; Do this first so that the compositor updates display before
       ;; the new mode is set and nothing is displayed with the wrong stride.
       (sup::video-set-framebuffer
        (framebuffer-address device)
  -     (mode-parameters-width mode)
  -     (mode-parameters-height mode)
  -     (* (mode-parameters-width mode) 4)
  +     (timing-horz-active mode)
  +     (timing-vert-active mode)
  +     (* (timing-horz-active mode) 4)
        :x8r8g8b8
        :device device)
       (mezzano.gui.compositor:force-redisplay t)
  
positive.code:       (let ((mode (save-current-mode-parameters card))
              (framebuffer (framebuffer-address card)))
          ;; Take ownership of the compositor framebuffer.
          (when (and (eql (mode-parameters-format mode) :x8r8g8b8)
                     (eql (framebuffer-address card)
                          (sup::framebuffer-base-address (sup:current-framebuffer))))
            (sup::video-set-framebuffer
             framebuffer
             (mode-parameters-width mode)
             (mode-parameters-height mode)
             (* (mode-parameters-width mode) 4)
             :x8r8g8b8
             :device card)
            (mezzano.gui.compositor:force-redisplay t)))
  
negative.code:      :vert-sync vsync
       :vert-front-porch vfporch
       :vert-image-size vsize
       :interlaced (logbitp 7 flags)
       :stereo (if (zerop (ldb (byte 2 5) flags))
                   nil
                   (ecase (logior (ash (ldb (byte 2 5) flags) 1)
  