	.TITLE	PPFUNC 
	.DSABL	GBL
	.GLOBL	.PUT
	.GLOBL	PP$PACK

	.GLOBL	C.HCUR	C.SCUR	C.GCUR
	.GLOBL	C.ATTR	C.PUT	C.GET	C.RES
	.GLOBL	C.UP	C.DOWN	C.RUL	C.CLREOL
	.GLOBL	C.CLR	C.INV	C.SWAB	C.BRIT
	.GLOBL	C.DARK	C.CCLR
	.GLOBL	C.0	C.1	C.01
	.GLOBL	C.MZ	C.PAL

	.GLOBL	PACK
	.GLOBL	P0	P1	P2	P3
 	.GLOBL	STR

	.GLOBL	AUTORR

C1.CSR	=	176660
C1.DAT	=	176662

C1DAT	=	176666

WIDTH	=	80.
HEIGHT	=	24.

.MACRO	.SEND	BYTE
	MOVB	BYTE,@#C1DAT
.ENDM

.MACRO	.WAIT
	CALL	PP$WAIT
.ENDM

PP$WAIT::
1$:	TSTB	@#C1.CSR
	BPL	1$
	TSTB	@#C1.DAT
	RETURN

R.0::
	MOVB	#C.0,-(SP)
	BR	R.

R.1::
	MOVB	#C.1,-(SP)
	BR	R.

R.01::
	MOVB	#C.01,-(SP)
	BR	R.

R.RES::
	MOVB	#C.RES,-(SP)
	BR	R.

R.RUL::
	MOVB	#C.RUL,-(SP)
	BR	R.

R.CLREOL::
	MOVB	#C.CLREOL,-(SP)
	BR	R.

R.HCUR::
	MOVB	#C.HCUR,-(SP)
	BR	R.

R.SCUR::
	MOVB	#C.SCUR,-(SP)
	BR	R.

R.UP::
	MOVB	#C.UP,-(SP)
	BR	R.

R.DOWN::
	MOVB	#C.DOWN,-(SP)
	BR	R.

R.MZ::
	TST	AUTORR
	BEQ	RET
	MOVB	#C.MZ,-(SP)

R.:	.WAIT
	.SEND	(SP)+
RET:	RETURN

$BUFF	=	16
$BX	=	14
$BY	=	12
$DX	=	10

R.PUT::
	MOV	R0,-(SP)
	MOV	R1,-(SP)
	MOV	R2,-(SP)

	.WAIT

	MOV	$BX(SP),P0
	MOV	$BY(SP),P1
	MOV	$DX(SP),R0
	MOV	R0,P2

	MOV	$BUFF(SP),R1
	MOV	#STR,R2
1$:	MOVB	(R1)+,(R2)+
	SOB	R0,1$

	SUB	#PACK,R2
	INC	R2
	ASR	R2

	MOV	#PACK,-(SP)
.PACK	==	. + 2
	MOV	#PP$PACK,-(SP)
	MOV	R2,-(SP)
	CALL	.PUT

	.SEND	#C.PUT

	MOV	(SP)+,R2
	MOV	(SP)+,R1
	MOV	(SP)+,R0
	MOV	(SP),4*2(SP)
	ADD	#4*2,SP
	RETURN

R.GET::
	MOV	(SP)+,.RET

	.WAIT

	MOV	(SP)+,P3
	MOV	(SP)+,P2
	MOV	(SP)+,P1
	MOV	(SP)+,P0

	MOV	R0,-(SP)
	MOV	#PACK,-(SP)
	MOV	.PACK,-(SP)
	MOV	#4.,-(SP)
	CALL	.PUT
	MOV	(SP)+,R0

	.SEND	#C.GET

.RET	=	. + 2
	JMP	@#0

R.CLR::
	MOVB	#C.CLR,.CODE
	BR	CONT
R.INV::
	MOVB	#C.INV,.CODE
	BR	CONT
R.SWAB::
	MOVB	#C.SWAB,.CODE
	BR	CONT
R.BRIT::
	MOVB	#C.BRIT,.CODE
	BR	CONT
R.DARK::
	MOVB	#C.DARK,.CODE
	BR	CONT
R.CCLR::
	MOVB	#C.CCLR,.CODE
CONT:
	MOV	(SP)+,..RET

	.WAIT

	MOV	(SP)+,P2
	MOV	(SP)+,P1
	MOV	(SP)+,P0

	MOV	R0,-(SP)
	MOV	#PACK,-(SP)
	MOV	.PACK,-(SP)
	MOV	#3.,-(SP)
	CALL	.PUT
	MOV	(SP)+,R0

.CODE	=	. + 2
	.SEND	#0

..RET	=	. + 2
	JMP	@#0

R.ATTR::
	MOV	(SP)+,...RET

	.WAIT

ATTR	==	. + 2
	MOV	@SP,#0
	MOV	(SP)+,P0

	MOV	R0,-(SP)
	MOV	#PACK,-(SP)
	MOV	.PACK,-(SP)
	MOV	#1.,-(SP)
	CALL	.PUT
	MOV	(SP)+,R0

	.SEND	#C.ATTR

...RET	=	. + 2
	JMP	@#0

R.GCUR::
	MOV	(SP)+,....RET

	.WAIT

	MOVB	(SP)+,P0+1
	MOVB	(SP)+,P0

	MOV	R0,-(SP)
	MOV	#PACK,-(SP)
	MOV	.PACK,-(SP)
	MOV	#1.,-(SP)
	CALL	.PUT
	MOV	(SP)+,R0

	.SEND	#C.GCUR

....RET	=	. + 2
	JMP	@#0

R.PAL::
	MOV	(SP)+,.....RET

	.WAIT

	MOV	R0,-(SP)
	MOV	#PACK,-(SP)
	MOV	.PACK,-(SP)
	MOV	#2.,-(SP)
	CALL	.PUT
	MOV	(SP)+,R0

	.SEND	#C.PAL
.....RET	=	. + 2
	JMP	@#0

	.END
                                                                                                                                                                                                               