Advertisement
Guest User

Untitled

a guest
Feb 17th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.23 KB | None | 0 0
  1. (defun build-symbol (&rest things)
  2.   "Return a symbol in current package with a name assembled from things"
  3.   (intern
  4.    (format nil "~@:(~{~A~}~)" things)))
  5.  
  6. (defmacro declare-register-name (register-number)
  7.   `(defparameter ,(build-symbol "r" register-number) 0))
  8.  
  9. (defmacro declare-register-type (register-number)
  10.   `(declaim (type (unsigned-byte 8) ,(build-symbol "r" register-number))))
  11.  
  12. (defmacro declare-registers()
  13.   `(progn ,@(loop for i from 0 to 31 collect
  14.                   `(progn (defparameter ,(build-symbol "r" i) 0)
  15.                           (declaim (type (unsigned-byte 8) ,(build-symbol "r" i)))))))
  16.  
  17. (defmacro register+1 (register)
  18.   "Return symbol of register one number higher"
  19.   (let* ((register-string (symbol-name register))
  20.          (register-number (parse-integer (remove #\r register-string))))
  21.     (build-symbol "r" (+ 1 register-number))))
  22.  
  23. ;Declare 32 8bit registers
  24. (declare-registers)
  25.  
  26. (defparameter carry-flag nil)
  27.  
  28. (defmacro add (target source)
  29.   "Add without carry"
  30.   `(setf ,target (mod (+ ,target ,source) 255)))
  31.  
  32. (defmacro addc (target source)
  33.   "Add with carry"
  34.   `(progn (setf ,target (mod (+ ,target ,source) 255))
  35.   (if (< (+ ,target ,source) 255)
  36.       (setf carry-flag t))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement