(* ************************************************************ *
 *								*	
 *	      	  Program M (Find the maximum)			*
 *								*
 *	rA = m; rI1 = n; rI2 = j; rI3 = k; X[i] = cell(X+i) 	*
 *								*
 * ************************************************************ *)


		MIXAL

	1000 	EQU	X

		FWD 	changem
		FWD	exit


\ Set rI1 and update the data at X before calling this subroutine.

		ORIG 	3000

| maximum	STJ	exit		\ Subroutine linkage.
| init		ENT3	0,1		\ _M1. Initialize._ k <- n
		JMP 	changem		\ j <- n, m <- X[n], k <- n-1
| loop		CMPA	X,3		\ _M3. Compare._ J <- J+1
		JGE	* 3 +
| changem	ENT2	0,3		\ _M4. Change m_ j <- k
		LDA 	X,3		\ m <- X[k]
		DEC3	1		\ _M5. Decrease k._
		J3P 	loop		\ _M2. All tested?_
| exit		JMP	*		\ Return to main program


\ make sure there is at least one record of data on unit0
\ To run: OPEN-UNITS  start go
\ To stop: CLOSE-UNITS

| start		IN 	X 1+		\ read 100 words from tape 0
		JBUS	*(0)	
		ENT1	100		\ load rI1 with block size
| 1H		JMP	maximum
		LDX	X,1
		STA	X,1
		STX	X,2
		DEC1	1
		J1P	1B		\ sort the block
		OUT	X 1+ (1)	\ write it to tape 1
		HLT
		END	start		\ wrap up assembly

			        (* End of File *)