(defvar *map* (make-array 128 :element-type '(unsigned-byte 8))) (defun init-map (slot-no remote-slot-no) ;; Clear entire map. (loop for i from 0 below 128 do (setf (aref *map* i) 0)) ;; Map our superslot space to his superslot space, except for ;; top entry. (loop for i from 0 below 7 do (setf (aref *map* (dpb slot-no (byte 4 3) i)) (dpb remote-slot-no (byte 4 4) (dpb i (byte 3 1) 1)))) ;valid bit ;; Map his slot-space at top of our local superslot space. (setf (aref *map* (dpb slot-no (byte 4 3) 7)) (dpb #xF (byte 4 4) (dpb (ldb (byte 3 1) remote-slot-no) (byte 3 1) 1)))) (defun init-bus-coupler (slot-no) (configuration-register) ;Make sure we can read local register ;; Reset the MBC, leaving it disabled as bus master and the fault light on. (setf (configuration-register) (logior config-reset config-fault)) (init-map slot-no #xF) ;Map in slot space for search ;; Frob with the remote registers. (remote-configuration-register) (setf (remote-control-register) (logior enable-as-bus-master)) (setf (remote-configuration-register) (logior enable-serial-parity enable-timeout)) ;; Turn on the bus coupler (setf (control-register) (logior reset-remote-mbc enable-remote-bus-address-space enable-try-again-later enable-serial-parity enable-timeout)) ;; Turn off the Fault LED, and optionally allow the K to read the MAC (but we'd have to set up ;; its MAP, too. (setf (configuration-register) (logior #+K-can-read-MAC enable-as-bus-master)) (let ((remote-slot-no (find-falcon))) ;Search the other slots ;; Now map in the other Falcon (init-map slot-no remote-slot-no)))