DataMuseum.dk

Presents historical artifacts from the history of:

Zilog MCZ Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦240a08272⟧ TextFile

    Length: 13428 (0x3474)
    Types: TextFile
    Names: »LP.S«

Derivation

└─⟦efdad4bc9⟧ Bits:30006812 8" ZilogMCZ floppy NThun_0014 (OPERATIVSYSTEM DRIVE.0)
    └─ ⟦this⟧ »LP.S« 

TextFile

*H CENTRONICS PRINTER DRIVER
 
 
; PROGRAM NAME
 
;	LP
 
;	COPYRIGHT ZILOG (UK) LTD. 1978
;	ALL RIGHTS RESERVED. NO PART OF THIS
;	PROGRAMME MAY BE COPIED OR USED WITHOUT THE
;	EXPRESS WRITTEN CONSENT OF ZILOG (UK) LTD.
 
 
; AUTHORS
 
;	PETER BECKETT, DOMINIC DUNLOP
 
;	ZILOG (UK) LTD.
;	NICHOLSON HOUSE,
;	MAIDENHEAD,
;	BERKSHIRE SL6 1LD
;	ENGLAND
 
;	TELEPHONE (0628) 36131
;	TELEX	  848609
 
 
; DATE, REVISION LEVEL
;
;	SEE CODE ENTRY POINT
;
;
; FUNCTION
;
;	THIS PROGRAMME IS A DRIVER FOR THE CENTRONICS MODEL 306C
;	DOT MATRIX IMPACT PRINTER. IT IS INTENDED FOR USE WITH
;	THE RIO EXECUTIVE, REVISION F OR HIGHER, AND OFFERS 
;	COMPREHENSIVE CONTROL OF PRINTING FORMAT.
 
;	THE FILE PRINTER_MANUAL ACCOMPANYING THIS
;	PROGRAMME CONTAINS FULL DETAILS OF THE
;	CHARACTERISTICS AND USE OF THE DRIVER.
*H ENTRY POINT: CHECK REQUEST
 
	GLOBAL LP
 
	EXTERNAL PRTCNT PRTDAT SYSTEM ERCODE
 
 
	JR	LP
	DEFM	'LP 780806 COPYRIGHT, ZILOG (UK) LTD. 1978'
 
LP:	LD A,(LINCNT)		; GET LAST LINE COUNT
	LD D,A			; INTO D
 
	LD A,(COLCNT)		; GET LAST COLUMN COUNT
	LD E,A			; INTO E
 
	LD B,(IY+OFDTLH)	; GET HIGH ORDER BYTE OF DATA LENGTH
	LD C,(IY+OFDTLL)	; GET LOW ORDER BYTE OF DATA LENGTH
 
	LD H,(IY+OFDTAH)	; GET HIGH ORDER BYTE OF DATA ADDRESS
	LD L,(IY+OFDTAL)	; GET LOW ORDER BYTE OF DATA ADDRESS
 
	LD A,(IY+OFRQCD)	; GET REQUEST CODE
	CP INITRQ		; IS IT INITIALISATION REQUEST
	JP Z,LPINIT
 
	CP ASSNRQ		; IS IT AN ASSIGN REQUEST ?
	JP Z,OPEN		; SELECT THE PRINTER
 
	CP OPENRQ		; IS IT AN OPEN REQUEST
	JP Z,OPEN		; IF SO, SELECT THE PRINTER
 
	CP CLOSRQ		; IS IT A CLOSE REQUEST
	JP Z,CLOSE		; DESELECT THE PRINTER.
 
	CP WRTBRQ		; IT IT A WRITE BINARY REQUEST
	JR Z,MLOOP		; IF SO PRINT
 
	CP WRTLRQ		; IS IT A WRITE LINE REQUEST
	JR Z,MLOOP		; IF SO PRINT
 
	CP DEACRQ		; IS IT A DEACTIVATE REQUEST ?
	JP Z,CLOSE		; JUST DESELECT THE PRINTER
 
	CP RDSTRQ		; IS IT A READ STATUS REQUEST ?
	JP Z,MOVSTA		; GO MOVE BUFFER CONTENTS.
 
	CP WRSTRQ		; IS IT A WRITE STATUS REQUEST ?
	JP Z,MOVSTA		; GO FILL THE BUFFER.
 
	LD (IY+OFCCOD),INVLRQ	; CODE FOR INVALID REQUEST
	JR RETURN
*H PRINTING LOOP
 
MLOOP:	LD A,B			; IF THERE'S NOTHING TO PRINT,
	OR C			; EXIT AT ONCE.
	JR Z,OKEXIT
 
	PUSH HL			; SAVE DATA ADDRESS FOR NOW.
 
	LD HL,LCONSTA		; GET THE ENTIRE CONSOLE STATUS
	LD (CONVEC+OFDTLL),HL	; TO ESTABLISH TAB STOPS.
	CALL GETCON
	JR NZ,RETURN		; EXIT IF ANY ERROR.
 
	LD HL,1			; SUBSEQUENT CONSOLE STATUS CALLS
	LD (CONVEC+OFDTLH),HL	; FETCH ONLY THE FIRST BYTE.
 
	POP HL			; RESTORE DATA ADDRESS.
 
LOOP:	LD A,(HL)		; GET BYTE FOR OUTPUT
	CP ASCTAB		; IS IT A TAB CODE
	JP Z,TAB
 
	CP ASCILF		; IS IT A LINEFEED
	JR Z,LINFD
 
	CP ASCICR		; IS IT A C.RETURN
	JR Z,ENDLIN
 
	CP ASCIFF		; IS IT A FORM FEED
	JR Z,FMFD
 
	CP EXPCOD		; EXPANDED TYPEFACE CODE ?
	JP Z,XPAND
 
	CP EOF			; END OF FILE MARK ?
	JP Z,FILEND
 
SENDIT:	CALL SEND		; ISSUE THE CHARACTER UNCHANGED
 
NEXT?:	CPI			; INCREMENT HL, AND USE BC AS LOOP COUNTER
	PUSH AF
 
	LD A,(LPSTA+OFPGLN)	; GET MAXIMUM LINE COUNT
	AND A			; IS IT ZERO ?
	JR Z,NOFF		; IF SO, AUTO FORM FEED INHIBITED.
	DEC A			; HAVE WE REACHED IT YET?
	CP D
	CALL C,SENDFF		; IF SO AUTO FORMFEED
NOFF:	POP AF
 
	JP PE,LOOP
 
; CONTROL FALLS FROM HERE TO RETURN ROUTINE
*H RETURN SEQUENCE
 
; RETURN: SAVE CURRENT LINE AND COLUMN THEN
; CALCULATE NUMBER OF BYTES TRANSFERRED. RETURN TO CALLER
; OR ERROR ADDRESS DEPENDING ON COMPLETION CODE AND
; VECTOR CONTENTS.
 
OKEXIT:	LD (IY+OFCCOD),OPCOMP	; COMPLETION CODE FOR OK
 
RETURN:	LD A,E			; GET COLUMN COUNT
	LD (COLCNT),A		; AND STORE IT FOR NEXT TIME
 
	LD A,D			; GET LINE COUNT
	LD (LINCNT),A		; AND STORE IT FOR NEXT TIME
 
 
	LD L,(IY+OFDTLL)	; CALCULATE HOW MANY
	LD H,(IY+OFDTLH)	; BYTES HAVE BEEN OUTPUT
	AND A			; FROM BUFFER.
	SBC HL,BC
	LD (IY+OFDTLL),L	; LOAD INTO VECTOR
	LD (IY+OFDTLH),H
 
	LD A,OPCOMP		; SUCCESSFUL COMPLETION ?
	CP (IY+OFCCOD)
	RET Z			; EXIT IF SO
 
	LD L,(IY+OFEADL)	; IF NOT GET ERROR
	LD H,(IY+OFEADH)	; RETURN ADDRESS
 
	LD A,H			; IF RETURN ADDRESS IS ZERO
	OR L			; MAKE NORMAL RETURN
	RET Z
 
	JP (HL)			; OTHERWISE JUMP TO IT.
*H LINE FEED, FORM FEED
 
;LINFD
;MUST CHECK IF COLUMN COUNT IS ZERO, IF SO, SEND ASCII LF,
;OTHERWISE IGNORE IT
 
LINFD:	XOR A
	CP E			; E CONTAINS THE COLUMN COUNT
	JR NZ,NEXT?		; GO IF WANT TO IGNORE IT
 
	LD A,ASCILF
	CALL SEND1		; ISSUE WITHOUT INCREMENTING COLUMN COUNT
 
	INC D			; INCREMENT LINE COUNTER
 
	JR NEXT?		; GET NEXT CHARACTER
 
 
; FMFD: OUTPUT FORM FEED THEN ZERO LINE & COLUMN COUNTS
 
FMFD:	CALL SENDFF
	JR NEXT?
 
 
; SENDFF: OUTPUT A FORM FEED, ZERO LINE AND COLUMN COUNTS.
 
SENDFF:	LD A,ASCIFF
	CALL SEND1
	LD DE,0			; ZERO LINE AND COLUMN COUNTS
	RET
*H LINE END (CARRIAGE RETURN)
 
;ENDLIN
;LINE TERMINATION
;IF COLUMN COUNT = 0, MUST SEND ASCILF IN PLACE OF THE ASCICR
;ALSO MUST SET COLUMN COUNTER TO ZERO
 
ENDLIN:	XOR A
	CP E			; IS COLUMN POSITION ZERO
	LD E,A			; CLEAR COLUMN COUNTER
 
	LD A,ASCICR		; SEND CR IF COLUMN
	JR NZ,END1		; COUNT WAS NON-ZERO,
	LD A,ASCILF		; OTHERWISE SEND LF.
END1:	CALL SEND1		; SEND IT WITHOUT INCREMENTING POC CNTR
 
	INC D			; INCREMENT LINE COUNTER
 
	LD A,WRTLRQ		; IF THIS IS A WRITE LINE REQUEST
	CP (IY+OFRQCD)		; THE CARRIAGE RETURN TERMINATES IT.
	JR Z,OKEXIT
 
	LD A,(LPSTA+OFFLAG)	; WRITE BINARY. IS THE ABORT
	BIT NOABRT,A		; OPTION ENABLED ?
	JP NZ,NEXT?		; IF NOT,DO NOTHING
 
	XOR A			; IF FINAL CHAR. IN WRITE BINARY
	CP B			; DONT BOTHER TO CHECK FOR ESC.
	JR NZ,CHKESC
	INC A
	CP C
	JP Z,NEXT?
 
CHKESC:	CALL GETCON		; WRITE BINARY. GET CONSOLE STATUS.
	JP NZ,RETURN		; EXIT IF ERROR OCCURS.
 
	LD A,(CONSTA)		; HAS AN ESC BEEN INPUT ON THE CONSOLE ?
	BIT ESCPND,A
	JP NZ,NEXT?		; NO. GO GET NEXT CHARACTER.
 
	LD A,ABORT		; YES. ABORT CURRENT REQUEST.
	LD (IY+OFCCOD),A
	LD (ERCODE),A
	JP RETURN
*H CHARACTER OUTPUT
 
; ENTRY AT SEND CAUSES CHECKS ON MARGIN LIMITS AND
; PRINT SIZE TO BE MADE BEFORE THE CHARACTER IN A
; IS OUTPUT WHILE ENTRY AT SEND1 OUTPUTS THE CHARACTER
; UNCONDITIONALLY.
 
SEND:	EX AF,AF'		; MAKE CHECKS ON CURRENT COLUMN:
 
DUNMAR:	PUSH BC
	DEC E			; HAS THE LEFT MARGIN BEEN SET ?
	JP P,MARDUN		; YES: GO SEE IF RIGHT MARGIN REACHED.
 
	LD A,(LPSTA+OFFLAG)	; TEST THE NORMAL/EXPANDED
	BIT EXPAND,A		; TYPEFACE FLAG.
	LD A,EXPCOD		; IF EXPANDED, TELL PRINTER.
	CALL NZ,SEND1
 
	LD A,(LPSTA+OFLMAR)	; LOAD LEFT MARGIN SIZE
	AND A			; IF MARGIN IS ZERO, DO NOTHING
	JR Z,MARDUN
 
	LD B,A			; OTHERWISE OUTPUT THE CORRECT
	LD A,ASCISP		; NUMBER OF SPACES.
MAKMAR:	CALL SEND1
	DJNZ MAKMAR
 
MARDUN: INC E			; INCREMENT COLUMN COUNTER
	INC E
 
	LD A,(LPSTA+OFLMAR)	; LOAD LEFT MARGIN SIZE
	ADD A,E			; ARE WE BEYOND RIGHT MARGIN ?
	LD B,A			; ADD LEFT MARGIN WIDTH TO CURRENT
	LD A,(LPSTA+OFRMAR)	; POSITION ON LINE TO FIND OUT.
	CP B
	POP BC
	JR NC,PRINT		; THERE'S ROOM LEFT: PRINT IT.
 
	LD A,(LPSTA+OFFLAG)	; BEYOND RIGHT MARGIN:
	BIT WRPRND,A		; WANT TO WRAP AROUND ?
	RET Z			; NO.
 
	LD A,ASCICR		; YES. SEND CARRIAGE RETURN
	CALL SEND1
	INC D			; BUMP LINE COUNT
	LD E,0			; RESET THE COLUMN COUNT
	JR DUNMAR		; START AT BEGINNING AGAIN
 
PRINT:	EX AF,AF'		; RETRIEVE AND PRINT THE CHARACTER.
 
SEND1:	PUSH BC			; SAVE
	PUSH AF			;SAVE
	CALL WAITB		; ENSURE NOT ALREADY BUSY
	POP AF			; RESTORE
   
	LD  BC,PRTDAT		;SELECT PORT
	OUT (C),A		; SEND THE CHARACTER
	CALL STROBE
   
	POP  BC			;RESTORE
	RET
*H TABULATION CONTROL
 
;TAB CONTROL SEGMENT
 
TAB:	LD A,ASCISP
	CALL SEND		; ENSURE AT LEAST ONE SPACE SENT
 
	LD IX,TABS		; CALCULATE ADDRESS OF BYTE
	PUSH DE			; FOR CURRENT COLUMN IN
	LD D,0			; TAB DRUM TABLE.
	ADD IX,DE
	POP DE
 
STOP?:	XOR A
	OR (IX)			; ARE WE AT TAB STOP ?
	JP NZ,NEXT?		; YES. GET NEXT CHARACTER.
	
	LD A,ASCISP		; NOT A STOP. SEND ANOTHER SPACE.
	CALL SEND
 
	INC IX			; NEXT COLUMN
	JR STOP?
*H	CONSOLE/PRINTER STATUS
 
; GETCON: GET CONSOLE STATUS
 
GETCON:	PUSH IY			; GET CONSOLE STATUS
	EXX
	LD IY,CONVEC
	CALL SYSTEM
	LD A,(IY+OFCCOD)	; COMPLETED OK ?
	EXX
	POP IY
	CP OPCOMP
	RET Z			; YES. RETURN AT ONCE
 
	LD (ERCODE),A		; NO. SET SYSTEM ERROR
	LD (IY+OFCCOD),A	; & INPUT RETURN CODE
	RET			; THEN EXIT.
 
; MOVSTA: READ OR WRITE STATUS
 
 
MOVSTA:	LD DE,LPSTA		; READ OR WRITE STATUS.
	CP RDSTRQ		; WHICH WAS IT ? IF READ,
	JR NZ,CHECKL		; STATUS BUFFER IS SOURCE,
	EX DE,HL		; OTHERWISE DESTINATION.
CHECKL:	XOR A			;!IF (DATA LENGTH) > 4
	LD B,A			; TRANSFER JUST 4 BYTES.
 
	OR C			; IF NOTHING TO TRANSFER
	JR Z,STADUN		; EXIT AT ONCE
 
	LD A,LLPSTA
	CP C
	JR NC,MOVIT
 
	LD C,A
 
MOVIT:	LDIR
 
STADUN:	JP OKEXIT
*H INITIALISE PIO & PRINTER
 
;LPINIT
;INITIALISES THE PIO AND SETS COLUMN POSITION TO ZERO
 
LPINIT:	LD A,0FH		; SET CHANNEL B TO DATA OUTPUT
	LD BC,PRTDAT+2		;SELECT PORT
	OUT (C),A
 
	LD A,07H		; NO INTERRUPTS
	OUT  (C),A
 
	LD BC,PRTCNT+2		:SELECT CONTROL PORT
	OUT (C),A
 
	LD A,0CFH		; SET CHANNEL A TO CONTROL MODE
	OUT (C),A
 
	LD A,3CH		; SET DIRECTION OF LINES
	OUT (C),A
 
	LD A,1
	LD BC,PRTCNT
	OUT (C),A		; SET STROBE LINE HIGH
 
	SET 1,A			; SET PRIME LINE
	OUT (C),A
 
	CALL SELECT
  
	XOR A			; ZERO
	LD (COLCNT),A		; INTO COLUMN COUNT
	LD (LINCNT),A		; AND INTO LINE COUNT
 
	CALL SENDFF		; SLEW TO TOP OF FORM
 
	JP OKEXIT
*H	MISCELLANEOUS ROUTINES
 
; OPEN: JUST SELECT THE PRINTER
 
OPEN:	CALL SELECT
	JP OKEXIT
 
; CLOSE: PAPER THROW FOLLOWED BY DESELECT
 
CLOSE:	CALL SELECT		; ENTRY POINT FOR DESELECT
	LD A,13H		; DESELECT CODE
	CALL SEND1		; SEND IT
 
	JP OKEXIT
 
; EXPANDED TYPEFACE: ZERO LENGTH IF FIRST CHARACTER ON LINE
 
XPAND:	XOR A			; IS COLUMN ZERO ?
	CP E
	LD A,EXPCOD
 
	PUSH AF
	CALL Z,SEND1		; IF SO, DON'T DISTURB IT.
 
	POP AF			; OTHERWISE TREAT AS
	CALL NZ,SEND		; ANY OTHER CHARACTER.
	JP NEXT?
 
; FILEND: PROCESS END OF FILE MARK
 
FILEND:	LD A,WRTBRQ		; END OF FILE MARK. ARE WE
	CP (IY+OFRQCD)		; DOING WRITE BINARY ?
	JP Z,OKEXIT		; YES. EOF TERMINATES REQUEST.
 
	LD (IY+OFCCOD),UNXEOF	; WRITE LINE: SHOULDN'T FIND
	JP RETURN		; EOF. FLAG ERROR AND EXIT.
 
; SELECT: SEND SELECT CODE TO PRINTER
 
SELECT:	LD A,11H		; SELECT CODE
	LD	BC,PRTDAT	
	OUT (C),A		; SEND IT 
	CALL STROBE
	RET
 
; WAITB: ROUTINE TO WAIT UNTIL PRINTER READY
 
WAITB:	LD BC,PRTCNT
	IN A,(C)
	BIT BUSY,A
	JR NZ,WAITB
	RET
 
; STROBE: PULSE PRINTER STROBE LINE
 
STROBE:	PUSH AF
	LD BC,PRTCNT
	LD A,2			; DROP STROBE LINE
	OUT (C),A
	LD A,3
	OUT (C),A		; RAISE IT AGAIN
	POP AF
	RET
*H WORKING STORAGE
 
; BUFFER IN WHICH CONSOLE STATUS IS DELIVERED.
 
CONSTA:	DEFS 1		; BIT 0 - LOCAL FLAG
			; BIT 1 - AUTO LINEFEED ON/OFF
			; BIT 2 - ECHO ON/OFF
			; BIT 3 - T.I.B. FULL/EMPTY
			; BIT 4 - ECHO CR OFF/ON
			; BIT 5 - ESC PENDING '1' NO
			;		      '0' YES
			; BIT 6 - LOCAL FLAG
			; BIT 7 - FULL/HALF DUPLEX
			;		'1' HALF
			;		'0' FULL
	DEFS 1		; RESERVED
TIB:	DEFS 1		; LAST CHARACTER ENTERED BUT
			; NOT YET READ BY READ REQUEST
CURLOC:	DEFS 2		; RESERVED FOR CURSOR LOCATION
TABS:	DEFS 134	; TAB STOPS. BIT 0 IS SET
LCONSTA	EQU $-CONSTA	; FOR A TAB. (TABS) CORRESPONDS
			; TO LEFTMOST COLUMN.
 
; EQUATES FOR THE FLAGS IN THE FIRST BYTE
 
AUTOLF	EQU 1
ECHO	EQU 2
TIBFE	EQU 3
ECHOCR	EQU 4
ESCPND	EQU 5
FHDUP	EQU 7
 
 
CONVEC:	DEFB CONIN	; LOGICAL UNIT
	DEFB RDSTRQ	; REQUEST CODE
	DEFW CONSTA	; DTA -> CONSTA
	DEFW 0		; DTL=#BYTES REQUIRED
	DEFW 0		; COMPLETION: RETURN TO CALL
	DEFW 0		; ERROR: RETURN TO CALL
	DEFB 0		; COMPLETION CODE
	DEFW 0		; NO SUPPLEMENTARY PARAMETERS
 
 
; LINEPRINTER STATUS BUFFER
 
LPSTA:
OFFLAG	EQU $-LPSTA	; OPTION FLAGS - DEFAULT IS
	DEFB 0		; NORMAL TYPE, ABORT ENABLED, TRUNCATE.
OFLMAR	EQU $-LPSTA	; LEFT MARGIN WIDTH
	DEFB 0		; DEFAULT IS ZERO
OFRMAR	EQU $-LPSTA	; RIGHT MARGIN POSITION (TOTAL PAPER WIDTH)
	DEFB 132	; DEFAULT IS 132
OFPGLN	EQU $-LPSTA	; PAGE LENGTH IN LINES
	DEFB 63		; DEFAULT IS 63
LLPSTA	EQU $-LPSTA
;
; OPTION FLAGS FOR FIRST BYTE
;
EXPAND	EQU 0		; EXPANDED TYPEFACE IF SET
NOABRT	EQU 1		; ABORT OPTION DISABLED IF SET
WRPRND	EQU 2		; WRAP-AROUND ENABLED IF SET
 
COLCNT	DEFS 1		; STORAGE FOR FINAL COLUMN COUNT
LINCNT	DEFS 1		; STOR«soh»AGE FOR FINAL LINE COUNT
*H EQUATES ETC
OFLUN	EQU 0		; LOGICAL UNIT OFFSET
OFRQCD	EQU 1		; REQUEST CODE OFFSET
 
OFDTAL	EQU 2		; DATA TRANSFER ADDRESS, LOW, OFFSET
OFDTAH	EQU 3		; DATA TRANSFER ADDRESS, HIGH, OFFSET
 
OFDTLL	EQU 4		; DATA LENGTH, LOW, OFFSET
OFDTLH	EQU 5		; DATA LENGTH, HIGH, OFFSET
 
OFCADL	EQU 6		; COMPLETION ADDRESS, LOW, OFFSET
OFCADH	EQU 7		; COMPLETION ADDRESS. HIGH, OFFSET
 
OFEADL	EQU 8		; ERROR RETURN ADDRESS, LOW, OFFSET
OFEADH	EQU 9		; ERROR RETURN ADDRESS, HIGH, OFFSET
 
OFCCOD	EQU 10		; COMPLETION CODE OFFSET
 
OFSPVL	EQU 11		; SUPPLEMENTARY PARAM. VECTOR ADDRESS, LOW, OFFSET
OFSPVH	EQU 12		; SUPPLEMENTARY PARAM. VECTOR ADDRESS, HIGH, OFFSET
 
INITRQ	EQU 0		; INITIALISATION REQUEST
ASSNRQ	EQU 2		; ASSIGN REQUEST
OPENRQ	EQU 4		; OPEN REQUEST
CLOSRQ	EQU 6		; CLOSE REQUEST
WRTBRQ	EQU 0EH		; WRITE BINARY REQUEST
WRTLRQ	EQU 10H		; WRITE ASCII REQUEST
RDSTRQ	EQU 40H		; READ STATUS REQUEST
WRSTRQ	EQU 42H		; WRITE STATUS REQUEST
DEACRQ	EQU 44H		; DEACTIVATE REQUEST
 
BUSY	EQU 4           ; PRINTER BUSY LINE
 
ASCTAB	EQU 09H		; ASCII TAB CODE
ASCILF	EQU 0AH		; ASCII LINEFEED CODE
ASCIFF	EQU 0CH		; ASCII FORM FEED CODE
ASCICR	EQU 0DH		; ASCII CARRIAGE RETURN CODE
EXPCOD	EQU 0EH		; SET EXPANDED TYPEFACE CONTROL CHAR.
ASCISP	EQU 20H		; ASCII SPACE CODE
EOF	EQU 0FFH	; END OF FILE MARK
 
ABORT	EQU 49H		; RETURN CODE: PROGRAM ABORT
OPCOMP	EQU 080H	; RETURN CODE: OPERATION COMPLETE
INVLRQ	EQU 0C1H	; RETURN CODE: INVALID REQUEST
UNXEOF	EQU 0C9H	; RETURN CODE: END OF FILE
 
CONIN	EQU 1		; LOGICAL UNIT FOR CONSOLE INPUT
	END