	.TITLE	TRLOA
	.MCALL	.GTLIN	.EXIT
	.MCALL	.DBLK	.LOOKU	.READW
	.DSABL	GBL
	.GLOBL	.ALLOC	.FREE	.PUT	.GO
	.GLOBL	LO$BEG	LO$END
	.GLOBL	DRIVE	TRACK	SECTOR

USERRB	=	53
ERROR$	=	10

.MACRO	$PRINT	LAB
	MOV	LAB,R0
	EMT	351
.ENDM

E.LOOK:	MOV	#T.LOOK,R0
	BR	E.
E.READ:	MOV	#T.READ,R0
E.:	EMT	351
	BISB	#ERROR$,@#USERRB
	.EXIT

START:
ENTRY:	MOV	#BUFF,R1
	.GTLIN	R1,#T.PRMT
	MOVB	(R1)+,R0
	BEQ	START
	BR	CNT

E.INP:	$PRINT	#T.INVD
	BR	ENTRY

CNT:	SUB	#'0,R0
	BMI	E.INP
	CMP	R0,#3
	BHI	E.INP
	TSTB	@R1
	BNE	E.INP
	MOVB	R0,DRIVE

	.LOOKU	#AREA,#0,#DBLK
	BCS	E.LOOK

	.READW	#AREA,#0,#BUFF,#203,#0
	BCS	E.READ

	BISB	BUFF+400,DRIVE
	MOVB	BUFF+402,TRACK
	MOV	BUFF+404,SECTOR

	MOV	#<LO$END-LO$BEG>/2,R1
	MOV	#LO$BEG,R2

	MOV	R1,-(SP)
	CALL	.ALLOC

	CMP	R0,R1
	BHI	1$
	$PRINT	#NOROOM
	.EXIT

1$:	MOV	R0,-(SP)
	MOV	R2,-(SP)
	MOV	R0,-(SP)
	MOV	R1,-(SP)

	SUB	R2,R0
	MOV	#RELTAB,R1
2$:	ADD	R0,@(R1)+
	TST	@R1
	BNE	2$

	CALL	.PUT
	CALL	.GO

	.EXIT

RELTAB:
...	=	0
.IRP N <00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17>
;,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34>
...	=	... + 1
	.GLOBL	$300'N
	.WORD	$300'N
.ENDR
	.WORD

AREA:	.BLKW	5
DBLK:	.DBLK	SY,CUT,

NOROOM:	.ASCIZ	"There is not enough memory in PP RAM. Aborting..."

T.PRMT:	.ASCII	"Drive #"<200>
T.INVD:	.ASCII	"Invalid drive # "

T.LOOK:	.ASCIZ	"LOOKUP"
T.READ:	.ASCIZ	"READW"
	.EVEN

	.PRINT	...

BUFF:	.END	START
                                                        