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

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

/IOLIN.SB : SPL/8 LINE I/O ROUTINES
/
/	I = INLIN(BUF) OR I = INLIN(DEV, BUF)
/
/	READS IN CHARS FROM 'DEV' OR 'TTY' INTO LINE BUFFER 'BUF'
/	PUTS AN EOS AT END OF LINE.
/	RETURNS 0 NORMALLY.
/	RETURNS 'EOF' IF EOF ENCOUNTERED WHILE READING THE LINE
/
///////////////////////////////////////////////////////////////////

ABSYM	EOS	-1
ABSYM	EOL	-2
ABSYM	EOF	-3
ABSYM	T	7

OPDEF	TADI	1400
OPDEF	DCAI	3400

	ENTRY	INLIN

INLIN,	BLOCK	2
	JMS	GET2A

PLP,	CALL	1,IN	/GET A CHAR
INLDEV,	ARG	0	/FILLED IN BY DEV #
	TAD	(2	/EOL?
	SNA
	JMP	PCKEOL	/YES
	IAC		/EOF?
	SNA
	JMP	PCKEOF	/YES

	TAD	(-3	/NO, RESTORE CHAR
	JMS	PUT	/STORE IT AWAY
	JMP	PLP	/MORE CHARS

PCKEOF,	TAD	(-3	/EOF
PCKEOL,	DCA	RTV	/RETURNED FLAG VALUE

	STA
	JMS	PUT	/PACK EOS
	TAD	RTV
	RETRN	INLIN	/RETURN

DEFARG,	0	/DEFAULT ARGUMENT
	TAD	INLIN
	DCA	DFF
	STA
	TAD	INLIN#
	DCA	T
DFF,	HLT		/CALLING FIELD
	TADI	T	/GET PARAM WORD
	AND	(400	/ONE ARG?
	SNA CLA
	JMP	RTDEF	/YES, ASSUME TTY
	TADI	INLIN#	/GET FLD
	INC	INLIN#
	DCA	INLDEV
	TADI	INLIN#
	INC	INLIN#
	DCA	INLDEV#	/MOVE ARG PLACE
	JMP I	DEFARG

RTDEF,	TAD	LIT1A
	DCA	INLDEV
	TAD	LIT1P
	DCA	INLDEV#
LIT1A,	JMP I	DEFARG	/MUST CDF!!

LIT1P,	LIT1P#;1

GET2A,	0	/GET ARGS
	JMS	DEFARG	/PROCESS IMPLIED 'TTY' ARG
	TAD	INLIN
	DCA	CFL
CFL,	HLT
	TADI	INLIN#
	INC	INLIN#
	DCA	PUTF
	TADI	INLIN#
	INC	INLIN#
	DCA	PUTA	/MOVE BUFFER ADDRESS
	TAD	PUTF
	DCA	GETF	/ALSO FOR GET
	JMP I	GET2A	/RETURN


PUT,	0	/PUT ONE WORD

PUTF,	HLT
	DCAI	PUTA
	INC	PUTA
	JMP I	PUT

PUTA,	0

GET,	0	/GET A WORD
GETF,	HLT
	TADI	PUTA
	INC	PUTA
	JMP I	GET

RTV,	0

/////////////////////////////////////////////////
/
/	OUTLI : WRITE A LINE BUFFER TO A DEVICE
/
/	PUTS OUT CHARS TO 'DEV' UNTIL 'EOS' OR 0000 WORD
/	ADDS AN EOL TO THE END OF THE OUTPUT
/
//////////////////////////////////////////////////

	ENTRY	OUTLI

OUTLI,	BLOCK	2
	TAD	OUTLI
	DCA	INLIN
	TAD	OUTLI#
	DCA	INLIN#	/MOVE CALL PLACE
	JMS	GET2A	/GET SECOND ARG
	TAD	INLDEV
	DCA	ODV
	TAD	INLDEV#
	DCA	ODV#
	TAD	ODV
	DCA	ODDV
	TAD	ODV#
	DCA	ODDV#
OLP,	TAD	GETF
	DCA	OCF
	TAD	PUTA
	DCA	OCF#
	JMS	GET	/GET THE CHAR
	SNA
	JMP	EOLO	/END OF LINE CHAR
	IAC		/EOS?
	SNA CLA
	JMP	EOLO	/YES

	CALL	2,OUT	/OUTPUT
ODV,	ARG	0
OCF,	ARG	0
	JMP	OLP	/NEXT CHAR

EOLO,	CALL	2,OUT
ODDV,	ARG	0
	ARG	(-2	/EOL
	RETRN	INLIN	/RETURN

	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