PDP-11による機械語入門 問2-2
問2-2
(defun mov-n-r0 (mem) (setf *r0* (read16 mem (+ *pc* 2))) (incf *pc* 4)) (defun sys-exit (mem) (setf *pc* -1)) (defun sys-write (mem) (let* ((s (read16 mem (+ *pc* 2))) (len (read16 mem (+ *pc* 4))) (str (map 'string #'character (subseq mem s (+ s len))))) (case *r0* (1 (format t str)) ) (incf *pc* 6) )) (defun run1 (mem tsize) (let ((*pc* 0) (*r0* 0)) (while (and (< *pc* tsize) (> *pc* -1)) (case (read16 mem *pc*) (#x15c0 (mov-n-r0 mem)) (#x8901 (sys-exit mem)) (#x8904 (sys-write mem)) (t (format t "~4,'0x: ~4,'0x ???~%" *pc* (read16 mem *pc*)) (setf *pc* -1)) ) ))) (defun run (path) (let* ((mem (load-memory path)) (tsize (read16 mem 2)) (dsize (read16 mem 4))) (run1 (subseq mem 16) tsize)))