File DIR.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/DIR.SB		RETURN DIRECTORY INFO
/	
/	CALL DIR(IUNIT,DEVNAM)
/
/	SETS UP TO READ 'DEVNAM' DIRECTORY ON UNIT 'IUNIT'.
/
/--------------------------------------------------------------
/	
/	CALL CAT(INFO)
/
/		RETURNS IN 'INFO'
/	1-4		FILE NAME (8 CHARS)
/	5		MONTH (1-12)
/	6		DAY   (1-31)
/	7		YEAR  (70-78)
/	8		FILE LENGTH (IN BLOCKS)
/	9		FILE STARTING BLOCK
/	
/	IF INFO (1-7)=0 THEN <EMPTY FILE>
/	INFO(8) RETURNS LENGTH OF THE EMPTY FILE
/	
/	IF INFO(1)=-1 THEN END OF DIRECTORY
/	
/---------------------------------------------------------

	ENTRY	CAT
	ENTRY	DIR

	LAP
OPDEF	TADI	1400
OPDEF	DCAI	3400
ABSYM	X0	10
ABSYM	X1	11
ABSYM	TMP	7

OPDEF	CDF0	6201
OPDEF	CIF0	6202

ABSYM	UNITNO	115
ABSYM	UBASE	116

ABSYM	XUSR	74
ABSYM	XREADU	75
ABSYM	XWRITU	76
ABSYM	UTABLE	77

BUF,		/DIRECTORY BUFFER
ENTRI,	0	/-# OF ENTRIES
SBLK,	0	/STARTING BLOCK
BLK,	0	/NEXT DIRECTORY BLOCK
TENT,	0	/TENTATIVE FILE POINTER
INFOW,	0	/-# OF INFO WORDS
BEGIN,	0
	PAGE
	PAGE

BUFPTR,	BUF
ENTPTR,	BEGIN
PUTADR,	0
POINT,	0
CTR,	0

CAT,	BLOCK	2
	TAD	CAT
	DCA	F
F,	HLT
	TADI	CAT#
	DCA	PFLD	/WHERE TO RETURN INFO
	INC	CAT#
	TADI	CAT#
	DCA	PUTADR
	INC	CAT#

	TAD	ENTRI	/MORE ENTRIES?
	SPA CLA
	JMP	NORD	/YES

	TAD	BLK	/MORE BLOCKS?
	SPA SNA CLA
	JMP	NOMORE	/NO

	TAD	PARAU
	DCA	UNITNO
	TAD	(-200
	DCA	CTR
	TAD	BUFPTR
	DCA	POINT
CAT10,
	JMS	READ
	DCA I	POINT
	INC	POINT
	JMS	READ
	DCA I	POINT
	INC	POINT
	JMS	READ	/THROW AWAY THIRD 'BYTE'
	CLA
	ISZ	CTR
	JMP	CAT10

	TAD	ENTPTR
	DCA	POINT
	TAD	INFOW
	CIA
	DCA	INFOW	/POSITIZE INFO COUNT

NORD,	TAD I	POINT	/FILE?
	SNA CLA
	JMP	EMPTY	/NO, JUST AN EMPTY

	JMS	MOV	/YES, MOVE FILE NAME
	JMS	MOV
	JMS	MOV
	JMS	MOV	/ALL 4 WORDS

	TAD I	POINT
	CLL RAL
	RTL
	RTL
	AND	(17
	JMS	PUT	/RETURN MONTH
	TADI	POINT
	RAR
	RTR
	AND	(37
	JMS	PUT	/RETURN DAY
	TADI	POINT
	AND	(7
	TAD	(D70
	JMS	PUT	/RETURN YEAR

	TAD	POINT
	TAD	INFOW
	DCA	POINT	/SKIP EXTRA INFO WORDS
	TADI	POINT
	CIA
	DCA	TMP
	TAD	TMP
	JMS	PUT	/RETURN LENGTH

RT,	TAD	SBLK
	JMS	PUT	/RETURN STARTING BLOCK
	TAD	SBLK
	TAD	TMP	/ADD FILE LENGTH
	DCA	SBLK
	INC	POINT
	ISZ	ENTRI
	NOP
RTN,	RETRN	CAT

EMPTY,	TAD	(-7
	DCA	TMP

ZER,	JMS	PUT	/RETURN ZERO FN
	ISZ	TMP
	JMP	ZER
	INC	POINT
	TADI	POINT
	CIA
	JMS	PUT	/RETURN LENGTH
	JMP	RT	/RETURN

NOMORE,	STA		/NO MORE DIRECTORY ENTRIES
	JMS	PUT
	JMP	RTN

PUT,	0
PFLD,	HLT		/INFO FIELD
	DCAI	PUTADR
	ISZ	PUTADR
	NOP
	JMP I	PUT

MOV,	0	/MOVE A WORD
	TAD I	POINT
	INC	POINT
	JMS	CONV
	JMS	PUT
	JMP I	MOV

	PAGE

PARAU,	BLOCK	1
PARAD,	BLOCK	2

DIRMSG,	TEXT	"IUER"	/UNDEFINED INPUT UNIT ERROR
DIR,	BLOCK	2
	JMS	DIRP	/SET UP FIRST PARA (UNIT #)
	JMS	DIRV	
	DCA	PARAU
	JMS	DIRP	/SET UP SECOND PARA (DEVICE NAME)
	JMS	DIRV
	JMS	CONV
	DCA	PARAD
	JMS	DIRV
	JMS	CONV
	DCA	PARAD#

	STA
	TAD	PARAU
	AND	(7770
	SZA CLA
	JMP	DIRABT	/UNIT # NOT 1-8!
	TAD	PARAU
	TAD	UTABLE
	DCA	UBASE
	CDF0
	TADI	UBASE
	SNA
	JMP	DIRABT	/UNDEFINED UNIT!
	DCA	UBASE
	STA
	TAD	UBASE
	DCA	X0
/
/		SET UP UNIT PARAMETER PACKET (UPP)
/		SEE LOADER.PA SOURCE FOR MORE INFO.
/
	DCAI	X0	/UFLAG
	DCAI	X0	/UPTG
	DCAI	X0	/UFBA
	DCAI	X0	/UBLKS
	DCAI	X0	/UBLREM
	INC	X0	/UHETRY
	INC	X0	/UFWA
	INC	X0	/UWRDS
	DCAI	X0	/UWDREM
	INC	X0	/UHPARM
	TAD	PARAD
	DCAI	X0	/UDNAME
	TAD	PARAD#
	DCAI	X0
	DCAI	X0	/UFNAME
	DCAI	X0
	DCAI	X0
	DCAI	X0	/UEXTEN
/
/		CALL USR TO FETCH HANDLER AND PREPARE
/		FOR READING UNIT DURING CAT CALLS
/
	TAD	PARAU
	DCA	UNITNO
	CIF0
FOOL1,	JMS I	XUSR
	JMP	DIRERR	/SOFT ERR
	JMP	DIRERR	/HARD ERR

	STA
	TAD	UBASE
	DCA	X0
	CDF0
	STL RAR		/AC = 4000 = READ-ONLY
	DCAI	X0	/UFLAG
	IAC		/PTG 1 = READ FIRST BLOCK
	DCAI	X0	/UPTG
	IAC		/START BLOCK = 1
	DCAI	X0	/UFBA
	TAD	(6	/DIRECTORY IS 6 BLOCKS LONG
	DCAI	X0
	TAD	(-6	/DO THE WHOLE DIRECTORY
	DCAI	X0

	CLA CLL IAC	/FIRST BLOCK IS #1
DIRERR,	DCA	BLK
	DCA	ENTRI	/CLEAR ENTRI #
	RETRN	DIR

DIRABT,	CALL	1,ERROR
	ARG	DIRMSG

DIRP,	0		/SET UP DIR PARA
	TAD	DIR
	DCA	DIRP10
DIRP10,	HLT
	TADI	DIR#
	DCA	DIRV10
	INC	DIR#
	TADI	DIR#
	DCA	DIRP10
	INC	DIR#
	JMP I	DIRP

DIRV,	0		/FETCH NEXT PARA WORD
DIRV10,	HLT
	TADI	DIRP10
	INC	DIRP10
	JMP I	DIRV

READ,	0		/READ A WORD FROM DIRECTORY
	CIF0
	JMS I	XREADU
	JMP	NOMORE	/SOFT ERR
	JMP	NOMORE	/HARD ERR
	JMP I	READ

CONV,	0		/CONVERT BLANKS TO ZEROES
	DCA	TMP
	TAD	TMP
	AND	(3737
	TAD	(3737
	AND	(4040
	TAD	(3737
	AND	TMP
	JMP I	CONV

	END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search