(define SpecialInstructions
  (local ((define bad (lambda (sign digits)
			(machine-error "bad machine instruction"))))
    (vector
      (lambda (sign digits) (abort (shell)))
      (lambda (sign digits) (display (get-reg (vector-ref digits 3))))
      (lambda (sign digits) (newline))
      ;; --------------------------------------------------
      ;; move4
      (lambda (sign digits)
	(local ((define Rx (get-reg (vector-ref digits 3)))
		(define Ry (get-reg (vector-ref digits 4)))
		(define w0 (get-mem (+ Rx 0)))
		(define w1 (get-mem (+ Rx 1)))
		(define w2 (get-mem (+ Rx 2)))
		(define w3 (get-mem (+ Rx 3))))
	  (begin 
	    (set-mem! (+ Ry 0) w0)
	    (set-mem! (+ Ry 1) w1)
	    (set-mem! (+ Ry 2) w2)
	    (set-mem! (+ Ry 3) w3))))
      ;; -------------------------------------------------
      ;; (ldm i SIM): meaning Ri <- mem[SIM]
      (lambda (sign digits)
	(set-reg! (vector-ref digits 3)
	  (get-mem (collapse MAX-DIGITS-INDEX 4 digits))))
      ;; --------------------------------------------------      
      ;; (stm i SIM): meaning mem[SIM] <- Ri
      (lambda (sign digits)
	(set-mem! (collapse MAX-DIGITS-INDEX 4 digits)
	  (get-reg (vector-ref digits 3))))
      ;; --------------------------------------------------      
      bad ; 5 
      bad ; 6 
      bad ; 7 
      bad ; 8 
      bad ; 9 
      )))
