;;;;;-*- Mode:LISP; Package:LAMBDA; Base:8; Readtable:ZL -*-
;;;
;;; (c) Copyright 1984,1985,1986 - Lisp Machine, Inc.
;;;


;;this file contains some simple microcode loops with which we can test the single
;;step logic

;has halt in middle of loop.
(DEFUN UINST-JUMP-HALT-LOOP  (&OPTIONAL (ONE-LOC 1000) (OTHER-LOC 100)(M-MEM-LOCN 1))
  (DISABLE-LAMBDA)
  (WIPE-M-MEM)
  (ULOAD (ONE-LOC OTHER-LOC M-MEM-LOCN)
    0	      (LAM-IR-OP LAM-OP-ALU		;zero m-mem 1
	       LAM-IR-OB LAM-OB-ALU
	       LAM-IR-M-MEM-DEST M-MEM-LOCN
	       LAM-IR-ALUF LAM-ALU-SETZ)
	      (LAM-IR-OP LAM-OP-JUMP		;jump to one-loc
	       LAM-IR-JUMP-ADDR ONE-LOC
	       LAM-IR-N 1
	       LAM-IR-JUMP-COND LAM-JUMP-COND-UNC)
	      (LAM-IR-OP LAM-OP-ALU)		;null op

    ONE-LOC   (LAM-IR-OP LAM-OP-ALU)		;null op
	      (LAM-IR-OP LAM-OP-ALU		;increment m-mem loc 
	       LAM-IR-M-SRC M-MEM-LOCN
	       LAM-IR-OB LAM-OB-ALU
	       LAM-IR-M-MEM-DEST M-MEM-LOCN
	       LAM-IR-ALUF LAM-ALU-M+1
	       LAM-IR-CARRY 1)
	      (LAM-IR-OP LAM-OP-ALU)		;null op
	      (LAM-IR-OP LAM-OP-ALU		;halt here
	       LAM-IR-HALT 1)
	      (LAM-IR-OP LAM-OP-JUMP
	       LAM-IR-JUMP-ADDR OTHER-LOC
	       LAM-IR-N 1
	       LAM-IR-JUMP-COND LAM-JUMP-COND-UNC)
	      (0)
   OTHER-LOC  (LAM-IR-OP LAM-OP-JUMP
	       LAM-IR-JUMP-ADDR ONE-LOC
	       LAM-IR-N 1
	       LAM-IR-JUMP-COND LAM-JUMP-COND-UNC)	
   	      (LAM-IR-SPARE-BIT 1))
  (SETUP-MACHINE-TO-START-AT ONE-LOC)
  '(:SINGLE-UINST-MODE T))

(DEFUN TEST-SINGLE-INST ()
  (UINST-JUMP-HALT-LOOP)
  (ENABLE-LAMBDA-SINGLE-STEPPING))

