anchor.diff:       (eval-when (:compile-toplevel :load-toplevel)
          ,@(loop for (op cycles bytes mode) in modes
               collect `(setf (aref *opcodes* ,op) '(,name ,cycles ,bytes ,mode))))
  -     (defgeneric ,name (opcode &key cpu mode setf-form)
  +     (defgeneric ,name (,(intern "OPCODE") &key cpu
  +                         ,(intern "MODE") ,(intern "SETF-FORM"))
          (:documentation ,docs))
  -     ,@(loop for mode in modes for mname = (fourth mode)
  +     ,@(loop for mode in modes for mname = (fourth mode) with x = (intern "X")
             do (setf (fourth mode) (if raw
                                        `',mname
                                        `(lambda (cpu) (get-byte (,mname cpu)))))
             collect `(defins (,name ,@mode)
  -                       (:setf-form (lambda (x) (setf (,mname cpu) x))
  +                       (:setf-form (lambda (,x) (setf (,mname cpu) ,x))
                           :track-pc ,track-pc)
                        ,@body))))
  
positive.code: CPU returning an address according to BODY and a setf function to store to that
  address. If CPU-REG is non-nil, BODY will be wrapped in a get-byte for setf.
  READER should be a Perl-compatible regex that can read assembly in the mode.
  PRINTER should be the format string desired for disassembly of the mode.
  DOCS is used as the documentation for the method and setf function when provided."
    `(progn
       (defgeneric ,name (cpu)
         (:documentation ,docs)
  
negative.code: that may be funcalled with a value to set the address computed by MODE. If
  TRACK-PC is t, the default, the program counter will be incremented to just
  past the instruction's operands. Otherwise, BODY is responsible for the PC."
    `(defmethod ,name ((,(intern "OPCODE") (eql ,opcode)) &key (cpu *cpu*)
                       (,(intern "MODE") ,mode) (,(intern "SETF-FORM") ,setf-form))
       ,@body
  