;**************************************************************************; ; ; ; ADDS40 TERMINAL UNIT ROUTINE ; ; ; ;**************************************************************************; ; ASL-02011-00 ; NOTICE ; ;All rights reserved. This software is the property of Alpha Microsystems ;and the material contained herein is the proprietary property and trade ;secrets of Alpha Microsystems, embodying substantial creative efforts and ;confidential information, ideas and expressions, no part of which may be ;reproduced or transmitted in any form or by any means, electronic, ;mechanical, or otherwise, including photocopying or input into any ;information storage or retrieval system without the express written ;permission of Alpha Microsystems. ; ;CAUTION: Unauthorized distribution or reproduction of this material may ;subject you to legal action. ; ;Copyright (C) 1982 - Alpha Microsystems ; ;Edit History: ; ;[100] 3 May 1982 ; Move cursor TCRT calls to correspond to new standard. /RBC ; SEARCH SYS SEARCH SYSSYM SEARCH TRM OBJNAM ,,[TDV] ;******************** ;* ADDS40 * ;******************** ;TERMINAL DRIVER COMMUNICATIONS AREA ADDS40: WORD 2000 ; terminal attributes BR INPUT ; input routine RTN ; output routine BR ECHO ; echo routine BR JMPCRT ; crt control RTN ; no INIT routine yet WORD 0 ; no impure area yet BYTE 24. ; number of rows BYTE 80. ; number of columns LWORD 303777 ; terminal has: ; insert/delete line ; erase to end of screen ; erase to end of line JMPCRT: JMP CRT ; go handle TCRT codes ;******************** ;* INPUT * ;******************** ;SPECIAL INPUT PROCESSING IS PERFORMED HERE ;RUBOUTS and UNDERSCORES are reversed INPUT: CMPB D1,#137 ;UNDERSCORE BEQ INRV CMPB D1,#177 ;RUBOUT BNE INPX INRV: XOR #40,D1 INPX: LCC #0 ;NORMAL INPUT RTN ;******************** ;* ECHO * ;******************** ;SPECIAL ECHO PROCESSING IS PERFORMED HERE ;RUBOUTS WILL BACKSPACE AND ERASE THE PREVIOUS CHARACTER ;CONTROL-U WILL ERASE THE ENTIRE LINE BY BACKSPACING AND ERASING ECHO: CMPB D1,#25 ;CONTROL-U BEQ CTRLU CMPB D1,#177 ;RUBOUT BNE ECHX ;RUBOUTS ARE HANDLED BY THE OLD BACKSPACE-AND-ERASE GAME ;SPECIAL HANDLING MUST BE PERFORMED IF WE ARE RUBBING OUT A TAB ;D6 CONTAINS THE CHARACTER BEING RUBBED OUT RUBOUT: CMPB D6,#11 ;WAS IT A TAB? BEQ RBTB ; YES ;RUBOUT WAS OF A PRINTABLE CHARACTER - QUEUE UP THE BACKSPACE SEQUENCE KRTG: MOV #3,D3 ;SET CHARACTER COUNT LEA A6,ERUB ;SET BUFFER ADDRESS MOV A6,D1 ; INTO D1 TRMBFQ ;QUEUE THE BACKSPACE SEQUENCE RTN ERUB: BYTE 10,40,10,0 ;RUBOUT WAS OF A TAB - WE MUST CALCULATE HOW BIG THE TAB WAS AND BACKUP OVER IT RBTB: CLR D3 ;PRECLEAR D3 MOVW T.POB(A5),D3 ;SET BEGINNING POSITION COUNT MOV T.ICC(A5),D2 ;SET INPUT CHARACTER COUNT MOV T.IBF(A5),A6 ;SET INPUT BUFFER BASE KRTS: DEC D2 ;DONE WITH SCAN? BMI KRTQ ; YES MOVB (A6)+,D1 ;SCAN FORWARD CALCULATING POSITION CMPB D1,#11 ; TAB BEQ KRTT CMPB D1,#15 ; CR BEQ KRTC CMPB D1,#33 ; ALTMODE BEQ KRTI CMPB D1,#40 ; CONTROL-CHAR BLO KRTS CMPB D1,#172 BHI KRTS KRTI: INC D3 ;INCREMENT POSITION FOR ONE CHARACTER BR KRTS KRTT: ADD #10,D3 ;ADJUST POSITION FOR TAB AND #^C7,D3 BR KRTS KRTC: CLR D3 ;CLEAR POSITION FOR CR BR KRTS KRTQ: COM D3 ;CALCULATE NECESSARY BACKSPACES AND #7,D3 INC D3 MOV #10,D1 ;SET IMMEDIATE BACKSPACE CHARACTER TRMBFQ ;QUEUE THE BACKSPACES ECHX: RTN ;ECHO A CONTROL-U BY ERASING THE ENTIRE LINE CTRLU: TST D6 ;NO ACTION IF NOTHING TO ERASE BEQ CTUX CLR D3 ;PRECLEAR D3 MOVW T.POO(A5),D3 ;CALCULATE BACKSPACE NUMBER TO ERASE THE LINE SUBW T.POB(A5),D3 BEQ ECHX CMP D3,T.ILS(A5) ;INSURE NOT GREATER THAN TERMINAL WIDTH BLOS CLUA MOV T.ILS(A5),D3 CLUA: MOV #10,D1 ;QUEUE UP BACKSPACES TRMBFQ ASL D1,#2 ;QUEUE UP SPACES TRMBFQ MOV #10,D1 ;QUEUE UP BACKSPACES TRMBFQ CTUX: RTN ;******************** ;* CRT * ;******************** ;SPECIAL CRT CONTROL PROCESSING ;D1 CONTAINS THE CONTROL CODE FOR X,T POSITIONING OR SPECIAL COMMANDS ;IF D1 IS POSITIVE WE HAVE SCREEN POSITIONING (ROW IN HI BYTE, COL IN LO BYTE) ;IF D1 IS NEGATIVE WE HAVE THE SPECIAL COMMAND IN THE LOW BYTE CRT: TSTW D1 ;IS IT CURSOR POSITION? BMI CRTS ; NO ;CURSOR POSITIONING - D1 CONTAINS X,Y COORDINATES TTYI ;SEND POSITION COMMAND BYTE 233,131,0,0 ADDW #17437,D1 ;ADD POSITION OFFSETS ROR D1,#8. ;SEND ROW FIRST TTY ROL D1,#8. ;SEND COLUMN SECOND TTY RTN ;SPECIAL COMMANDS - D1 CONTAINS THE COMMAND CODE IN THE LOW BYTE CRTS: ANDW #377,D1 ;STRIP THE HIGH BYTE ASLW D1 ; Times 2 (word offset). CMPW D1,#CRCB-CRCA ;CHECK FOR VALID CODE BHIS CRTX ; AND BYPASS IF BAD PUSH A2 ;SAVE A2 LEA A2,CRCA ;INDEX THE TABLE ADDW D1,A2 ;ADD COMMAND CODE MOVW @A2,D1 ;PICK UP DATA FIELD OFFSET ADDW D1,A2 ;MAKE ABSOLUTE DATA ADDRESS TTYL @A2 ;PRINT THE DATA FIELD POP A2 ;RESTORE A2 CRTX: RTN ; Byte offset and data tables follow for all commands ; CRCA: WORD C0-.,C1-.,C2-.,C3-.,C4-.,C5-.,C6-.,C7-.,C8-. WORD C9-.,C10-.,C11-.,C12-.,C13-.,C14-.,C15-.,C16-. CRCB: PAGE C0: BYTE 14,0 ; Home and Erase screen C1: BYTE 233,131,40,40,0 ; Cursor Home (move to column 1,1) C2: BYTE 215,0 ; Cursor Return (move to column 1) C3: BYTE 32,0 ; Cursor Up C4: BYTE 12,0 ; Cursor Down C5: BYTE 10,0 ; Cursor Left C6: BYTE 6,0 ; Cursor Right C7: BYTE 233,'5,0 ; Lock Keyboard C8: BYTE 233,'6,0 ; Unlock Keyboard C9: BYTE 233,313,0 ; Erase to End of Line C10: BYTE 233,353,0 ; Erase to End of Screen C11: BYTE 233,'0,'Q,0 ; Enter Backgroud Display mode (reduced intensity). C12: BYTE 233,'0,'@,0 ; Enter Foreground Display mode (normal intensity) C13: BYTE 0 ; Enable Protected fields C14: BYTE 0 ; Disable Protected Fields C15: BYTE 233,354,0 ; Delete Line C16: BYTE 233,'M,0 ; Insert Line ;C17: ; Delete character ;C18: ; Insert character ;C19: ; Read cursor address ;C20: BYTE 0 ; Read character ;C21: BYTE 233,'0,'B,0 ; Start blinking field ;C22: BYTE 233,'0,'@,0 ; End blinking field ;C23: BYTE 233,'1,0 ; Start line drawing mode ;C24: BYTE 233,'2,0 ; End line drawing mode ;C25: ; Set horizontal position ;C26: ; Set vertical position ;C27: ; Set terminal attributes ;C28: ; Cursor on ;C29: ; Cursor off ;C30: ; EVEN END .