;;; -*- Mode:LISP; Package:TRANSPORTER-RAM; Base:10; Readtable:CL -*-

(defun load-transporter-ram (data-vector-origin)
  ;this is actually called during initialization.
  ;it loads the whole thing from a vector in memory.
  "  (on the K side:) LOAD-TRANSPORTER-RAM is called by EVENT-HORIZON which is called by COLD-BOOT-FUNCTION.
     (on the  side:) MEGA-BOOT calls K-BOOT calls PSEUDO-BOOT which tells the K to HW:JUMP to COLD-BOOT-FUNCTION.

     LOAD-TRANSPORTER-RAM reads the transporter ram data which was built by LOAD-BOOT-TRANSPORTER-RAM-DATA.
     (MAKE-COLD-LOAD calls COLD-LOAD-DATA calls COLD-TRANSPORTER-RAM-DATA calls LOAD-BOOT-TRANSPORTER-RAM-DATA)"

 (trap::without-traps
    #'(lambda ()
	(dotimes (trans-mode *number-of-transporter-modes*)
	  (dotimes (trans-type *number-of-transport-types*)
	    (dotimes (md-byte *number-of-transporter-md-byte-values*)
	      (let ((transporter-data
		      (read-transporter-ram-data-from-memory md-byte trans-type trans-mode data-vector-origin)))
		(dotimes (vma-boxed 2.)
		  (dotimes (md-boxed 2.)
		    (write-transporter-ram vma-boxed md-boxed trans-type trans-mode md-byte
		      (hw:ldb transporter-data (byte 4. (vinc::dpb-multiple-unboxed
							  vma-boxed (byte 1. 2.)
							  md-boxed  (byte 1. 3.)
							  0))
			      0))
		    (li:break)))))))
	;;; Clear out any traps.
	(hw:vma-start-read-no-transport-vma-unboxed-md-unboxed 0.)
	(hw:read-md)
	nil)))