;***************************************************************************
; AAA.M68  -  Alphanso's Assembler Assylum Universal file
;
;	by Dave Heyliger - AMUS Staff
;	last update	01/07/87
;
;	Functions:	PRTTAB - acts just like PRINT TAB (#,#) from BASIC
;			NOECHO - turns off keyboard echoing
;			ECHO   - turns keyboard echoing back on
;			ONEKEY - makes the KBD call 1 character to D1
;			MLTKEY - makes the KBD call multiple keys, A2 pointer
;			CLRCTC - Clear a pending ^C from within the program
;			NOCTC  - "set" NOCTRLC
;			CTC    - "set" CTRLC
;			HEX    - "set" HEX
;			OCTAL  - "set" OCTAL
;
;	Note: place assembled AAA.UNV in the MAC: account, DSK0:[7,7]
;***************************************************************************

UNIVERSAL

DEFINE	PRTTAB	AA,BB
	PUSH	D1
	MOVB	#AA,D1
	LSLW	D1,#10
	MOVB	#BB,D1
	TCRT
	POP	D1
ENDM

DEFINE	NOECHO			;makes keyboard entries "invisible"
	PUSH	A6		;"black box"
	JOBIDX	A6		;give A6 the JOBIDX
	MOV     JOBTRM(A6),A6	;A6 points to the Terminal Status Word
	ORW     #T$ECS,@A6	;second bit now contains a "1" (no echo)
	POP	A6		;restore original
ENDM

DEFINE	ECHO			;turns ECHO back on for keyboard input
	PUSH	A6		;"black box"
	PUSH	D4
	JOBIDX	A6		;get the JOBIDX
	MOV	JOBTRM(A6),A6	;A6 points to the Terminal Status Word
	MOVW    #T$ECS,D4	;D4 contains 00000010
	COMW    D4		;D4 contains 11111101
	ANDW    D4,@A6		;second bit now contains a "0"
	POP	D4		;restore originals
	POP	A6
ENDM

DEFINE	ONEKEY			;makes KBD only accept one key (D1 holds it)
	PUSH	A6		;"black box"
	JOBIDX	A6		;get JCB pointer
	MOV	JOBTRM(A6),A6	;A6 holds pointer to TSW
	ORW	#T$IMI,@A6	;set "one key" for KBD (D1 will hold char.)	
	POP	A6		;restore original
ENDM

DEFINE	MLTKEY			;multiple keystrokes on KBD call (A2 pointer)
	PUSH	A6		;"black box"
	PUSH	D4
	JOBIDX	A6
	MOV	JOBTRM(A6),A6	;A6 holds pointer to TSW
	MOVW	#T$IMI,D4	;we will complement this value
	COMW	D4		;to set up the AND so as to 
	ANDW	D4,@A6		;turn off the T$IMI bit (back to normal mode)
	POP	D4		;restore originals
	POP	A6
ENDM

DEFINE	CLRCTC			;clear out a ^C when user hits one (fool them)
	PUSH	A6		;"black box"
	PUSH	D7
	TYPECR  ^C		;simulates user "exiting" by displaying a ^C
	JOBIDX	A6		;A6 now contains pointer to JOBIDX (JOBSTS)
	MOVW    #J.CCC,D7	;Reg. D7 contains ^C abort flag
	COMW    D7		;logical one's complement (0->1 and 1->0)
	ANDW    D7,@A6		;flag is now turned OFF
	POP	D7		;restore originalS
	POP	A6
ENDM

DEFINE	NOCTC			;"set noctrlc"
	PUSH	A6		;"black box"
	PUSH	D7
	JOBIDX	A6		;point to JOBIDX (JOBSTS)
	LEA	A6,JOBTYP(A6)	;A6 points to JOBTYP word
	MOVW	#J.CCA,D7	;Reg. D7 contains ^C enable flag
	COMW	D7		;flip the bits
	ANDW	D7,@A6		;^C disabled
	POP	D7		;restore originals
	POP	A6
ENDM

DEFINE	CTC			;"set ctrlc"
	PUSH	A6		;"black box"
	JOBIDX	A6		;point to JOBIDX (JOBSTS)
	LEA	A6,JOBTYP(A6)	;A6 points to JOBTYP word
	ORW	#J.CCA,@A6	;^C set
	POP	A6		;restore original
ENDM

DEFINE	HEX			;set binary output to HEX
	PUSH	A6		;"black box"
	JOBIDX	A6		;point to JOBIDX (JOBSTS)
	LEA	A6,JOBTYP(A6)	;A6 points to JOBTYP word
	ORW	#J.HEX,@A6	;HEX set
	POP	A6		;restore original
ENDM

DEFINE	OCTAL			;set OCTAL
	PUSH	A6		;"black box"
	PUSH	D7
	JOBIDX	A6		;point to JOBIDX (JOBSTS)
	LEA	A6,JOBTYP(A6)	;A6 points to JOBTYP word
	MOVW	#J.HEX,D7	;get the flag number
	COMW	D7		;flip the bits
	ANDW	D7,@A6		;OCTAL set
	POP	D7		;restore original
	POP	A6
ENDM