;***************************************************************************
; 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