anchor.diff:    "Write a word to a RAM segment."
     `(progn
        (setf (elt ,segment ,location) (logand ,value #x00ff))
  -     (setf (elt ,segment (1+ ,location)) (ash (logand ,value #xff00) -8))))
  +     (setf (elt ,segment (1+ ,location)) (ash (logand ,value #xff00) -8))
  +     ,value))
   
   (defun indirect-address (mod-bits r/m-bits is-word)
     "Read from an indirect address."
  
positive.code:       (#b00 (if ,is-word (setf (word-in-ram address-base *ram*) ,value) (setf (byte-in-ram address-base *ram*) ,value)))
        (#b01 (if ,is-word (setf (word-in-ram (+ address-base (peek-at-instruction)) *ram*) ,value) (setf (byte-in-ram (+ address-base (peek-at-instruction)) *ram*) ,value)))
        (#b10 (if ,is-word (setf (word-in-ram (+ address-base (peek-at-word)) *ram*) ,value) (setf (byte-in-ram (+ address-base (peek-at-word)) *ram*) ,value)))
        (#b11 (if ,is-word (setf (register (bits->word-reg ,r/m-bits)) ,value) (setf (byte-register (bits->byte-reg ,r/m-bits)) ,value))))))
  
  ;;; setf wrappers
  
  
negative.code: 
  (defun wrap-carry (value is-word)
    "Wrap around a carried value."
    (let* ((limit (if is-word #x10000 #x100)) (carry (>= value limit)))
      (setf *has-carried* carry)
      (if carry
  	(mod value limit))
      value))
  
  ;;; setf-able locations
  
  