; UP.MAC ; ; A SUBROUTINE TO PICK UP THE UP OR DOWN ARROW FROM A VT-100 OR ADAM-36 ; TERMINAL. THEY CAN HIT ANY KEY THEY WANT AND THE VALUE OF ; THAT KEY IS PASSED BACK TO THE CALLING PROG. IF THE UP KEY ; IS HIT, YOU GET 33,133,101 FOR THE ADAM 36 OR VT 100 AND ; 33,101 FOR THE VT-52. THE PROGRAM WILL SEE THE 33 AND LOOK FOR ; A SECOND NO. IF IT IS 133 IT WILL LOOK FOR A THIRD NO. AND THEN ; IF IT SEES 101 IT WILL ASSUME THE UP WAS HIT AND PASS OCTAL 34 ; BACK TO THE CALLING PROGRAM. ; IF THE DOWN KEY IS HIT A 33,133,102 OR 33,102 WILL BE RECEIVED ; IT PASSES OCTAL 35 BACK TO THE CALLING PROGRAM. IF ANY OTHER KEY ; OTHER THAN THE UP, DOWN, LEFT, OR RIGHT IS HIT ; WHICH CAUSES THE ESC FOLLOWED BY ANOTHER KEY TO BE TRANSMITTED ; AN X IS PASSED BACK TO CALLING PROGRAM. ; ; FOLLOWING IS A TABLE OF THE NUMBER RETURNED TO CALLING PROG FOR WHICH KEY ; UP 34 ; DOWN 35 ; RIGHT 36 ; LEFT 37 ; .MCALL QIOW$C,ALUN$C,QIOW$S .TITLE UPDN .GLOBL UPDN UPDN:: QIOW$C IO.RAL!TF.RNE,5,1,,,, MOVB STO,R1 BIC #177600,R1 CMP R1,#33 ; IS THIS ESCAPE CHARACTER BEQ TWO ; IF IT IS EXPECT A SECOND CHAR CMP R1,#10 ; IS THIS THE BACK SPACE KEY BEQ L2 ; IF SO, TREAT LIKE LEFT KEY MOVB R1,@2(R5) ; OTHERWISE GIVE IT BACK RETURN TWO: QIOW$C IO.RAL!TF.RNE,5,1,,,, ; GET 2ND CHAR MOVB STO,R1 BIC #177600,R1 ; WAS THIS THE UP KEY? CMP R1,#133 ; IS THIS VT-100 OR ADAM 36? BEQ TWO ; IF SO, GET A THIRD LETTER CMP R1,#101 ; IS THIS THE UP KEY? BNE DTST ; NO IT WASN'T MOVB #34,@2(R5) ; WAS UP KEY, MOVE 37 FOR UP RETURN DTST: CMP R1,#102 ; WAS THIS DOWN KEY BNE RTST ; NO IT WASN'T MOVB #35,@2(R5) ; WAS DOWN KEY, MOVE 35 FOR DOWN RETURN RTST: CMP R1,#103 ; WAS THIS THE RIGHT KEY BNE LTST ; NO IT WASN'T MOVB #36,@2(R5) ; RETURN THE 36 FOR RIGHT RETURN LTST: CMP R1,#104 ; IS THIS THE LEFT KEY BNE XX L2: MOVB #37,@2(R5) ; MOVE THE 37 FOR LEFT RETURN XX: MOVB #130,@2(R5) ; DON'T KNOW WHAT THEY DID RETURN STO: .BYTE STO2: .BYTE ; ; CALL SEND(A) ; PRINT ONE CHARACTER (A), ON THE TERMINAL SEND:: MOVB @2(R5),STO QIOW$C IO.WVB,5,1,,,, RETURN ; ; CRLF ; DO A CARRIAGE RETURN, LINE FEED CRLF:: QIOW$C IO.WVB,5,1,,,, RETURN CR: .BYTE 15,12 ; ; CALL CUR(Y,X) ; PLACE CURSOR AT LINE NO. Y AND COLUMN NO. X ; CUR:: MOV #OUT,R0 ; LOCATION OF OUTPUT STRING MOV @2(R5),R1 ; GET LINE NO. CLR R2 ; SURPRESS LEADING ZEROES CALL $CBDMG ; CONVERT TO ASCII CHAR. MOVB #73,(R0)+ ; PUT SEMICOLON AFTER NO. MOV @4(R5),R1 ; GET COLUMN NO. CLR R2 ; SURPRESS LEADING ZEROES CALL $CBDMG MOVB #110,(R0)+ ; PUT LETTER H AFTER STRING SUB #OUT1,R0 ; CALCULATE NO. OF CHARACTERS QIOW$S #IO.WVB,#5,#1,,,,<#OUT1,R0> ; OUTPUT IT RETURN OUT1: .BYTE 33,133 OUT: .BLKB 10. ERASR:: QIOW$C IO.WVB,5,1,,,, ; ERASE SCREEN FROM CURSOR DOWN RETURN ERA: .BYTE 33,133,60,112 CDN:: QIOW$C IO.WVB,5,1,,,, ; MOVE CURSOR DOWN RETURN CUP:: QIOW$C IO.WVB,5,1,,,, ; MOVE CURSOR UP RETURN CU: .BYTE 33,133,101 DN: .BYTE 33,133,102 ERASA:: QIOW$C IO.WVB,5,1,,,, RETURN EA: .BYTE 33,133,62,112 ASN:: ALUN$C 4,TT,17 ; ASSIGN LUN 4 TO TERMINAL 17 RETURN RITE:: QIOW$C IO.WVB,5,1,,,, RETURN LEFT:: QIOW$C IO.WVB,5,1,,,, RETURN RT: .BYTE 33,133,103 LEF: .BYTE 10 .EVEN .END