Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun build-symbol (&rest things)
- "Return a symbol in current package with a name assembled from things"
- (intern
- (format nil "~@:(~{~A~}~)" things)))
- (defmacro declare-register-name (register-number)
- `(defparameter ,(build-symbol "r" register-number) 0))
- (defmacro declare-register-type (register-number)
- `(declaim (type (unsigned-byte 8) ,(build-symbol "r" register-number))))
- (defmacro declare-registers()
- `(progn ,@(loop for i from 0 to 31 collect
- `(progn (defparameter ,(build-symbol "r" i) 0)
- (declaim (type (unsigned-byte 8) ,(build-symbol "r" i)))))))
- (defmacro register+1 (register)
- "Return symbol of register one number higher"
- (let* ((register-string (symbol-name register))
- (register-number (parse-integer (remove #\r register-string))))
- (build-symbol "r" (+ 1 register-number))))
- ;Declare 32 8bit registers
- (declare-registers)
- (defparameter carry-flag nil)
- (defmacro add (target source)
- "Add without carry"
- `(setf ,target (mod (+ ,target ,source) 255)))
- (defmacro addc (target source)
- "Add with carry"
- `(progn (setf ,target (mod (+ ,target ,source) 255))
- (if (< (+ ,target ,source) 255)
- (setf carry-flag t))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement