anchor.diff:        (#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
  +
  +(defmacro setf-enhanced (fn place value)
  +  `(setf ,place (,fn ,place ,value)))
  +
  +(defmacro logandf (place value)
  +  `(setf-enhanced logand ,place ,value))
  +
   ;;; Instruction loader
   
   (defun load-instructions-into-ram (instrs)
  
positive.code: 
  ;; Binary-coded decimal
  
  (defun ascii-adjust-after-addition ()
    (disasm-instr '("aaa")
      (let ((adjusted (or (> (logand (byte-register :al) #x0f) 9) (flag-p :af))))
        (if adjusted
  	  (incf (register :ax) #x106))
        (setf (flag-p :af) adjusted)
        (setf (flag-p :cf) adjusted))))
  
  (defun decimal-adjust-after-addition ()
    (disasm-instr '("daa")
      (if (or (> (logand (byte-register :al) #x0f) 9) (flag-p :af))
  	(progn
  	  (setf (byte-register :al) (wrap-carry (+ (byte-register :al) 6) nil))
  	  (setf (flag-p :cf) (or (flag-p :cf) *has-carried*))
  	  (set-flag :af))
  	(clear-flag :af))
      (when (or (> (byte-register :al) #x9f) (flag-p :cf))
        (setf (byte-register :al) (wrap-carry (+ (byte-register :al) #x60) nil))
        (set-flag :cf))
      (set-zf-on-op (set-sf-on-op (set-pf-on-op (byte-register :al)) nil))))
  
  ;;; Opcode parsing
  
  
negative.code:     ((= opcode #x9d) (pop-flags))
      ((= opcode #x9e) (store-flags-to-ah))
      ((= opcode #x9f) (load-flags-from-ah))
      ((= opcode #x27) (decimal-adjust-after-add-or-sub t))
      ((= opcode #x2f) (decimal-adjust-after-add-or-sub nil))
      ((= opcode #x37) (ascii-adjust-after-add-or-sub t))
      ((= opcode #x3f) (ascii-adjust-after-add-or-sub nil))))
  
  ;;; Main functions
  
  