;**************************************************************************; ; ; ; FALCO TERMINAL UNIT ROUTINE ; ; ; ;**************************************************************************; ; MODIFIED BY A.DOWEN OF AGS Inc. on 8/19/82 ASL-02012-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: ; SEARCH SYS SEARCH TRM OBJNAM FAL.TDV ;******************** ;* FALCO TS1 * ;******************** ;TERMINAL DRIVER COMMUNICATIONS AREA SOROC: WORD 0 ;TERMINAL ATTRIBUTES RTN ;INPUT ROUTINE RTN ;OUTPUT ROUTINE BR ECHO ;ECHO ROUTINE JMP CRT ;CRT CONTROL ;******************** ;* 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,75,0,0 ADD #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: AND #377,D1 ;STRIP THE HIGH BYTE BNE CRTU ; AND BRANCH UNLESS CLEAR SCREEN TTYI ;SPECIAL CASE FOR CLEAR SCREEN BYTE 233,52,0 EVEN CRTZ: TTYL CRTNUL ; OUTPUT SOME NULLS RTN ;COMMAND PROCESSING PER DIRECTOR TABLES CRTU: PUSH A2 ;SAVE A2 CMP D1,#CRCB-CRCA ;CHECK FOR VALID CODE BHI CRTX ; AND BYPASS IF BAD LEA A2,CRCA-1 ;INDEX THE TABLE ADD D1,A2 ;ADD COMMAND CODE MOVB @A2,D1 ;PICK UP DATA FIELD OFFSET ADD D1,A2 ;MAKE ABSOLUTE DATA ADDRESS TTYL @A2 ;PRINT THE DATA FIELD CMPB @A2,#36 ;SLEEP IF HOME COMMAND BEQ CRTXZ CMPB 1(A2),#100 ;SLEEP IF ERASE COMMAND BHI CRTXZ CRTX: POP A2 ;RESTORE A2 RTN CRTXZ: POP A2 ;RESTORE A2 BR CRTZ ; AND GO OUTPUT NULLS ;Null characters for long commands CRTNUL: BYTE 200,200,200,200,200,200,200,200,200,200,200,0 EVEN ;BYTE OFFSET AND DATA TABLES FOLLOW FOR ALL COMMANDS CRCA: BYTE C1-.,C2-.,C3-.,C4-.,C5-.,C6-.,C7-.,C8-. BYTE C9-.,C10-.,C11-.,C12-.,C13-.,C14-.,C15-. BYTE C16-.,C17-.,C18-.,C19-.,C20-.,C21-.,C22-. BYTE C23-.,C24-.,C25-.,C26-.,C27-.,C28-.,C29-. BYTE C30-.,C31-.,C32-.,C33-.,C34-.,C35-.,C36-. BYTE C37-.,C38-.,C39-.,C40-.,C41-.,C42-.,C43-. BYTE C44-.,C45-.,C46-.,C47-.,C48-.,C49-.,C50-. BYTE C51-.,C52-.,C53-.,C54-.,C55-.,C56-.,C57-. BYTE C58-.,C59-.,C60-.,C61-.,C62-.,C63-.,C64-. BYTE C65-.,C66-.,C67-.,C68-.,C69-.,C70-. CRCB: C1: BYTE 36,0 ;CURSOR HOME C2: BYTE 215,0 ;CURSOR RETURN C3: BYTE 13,0 ;CURSOR UP C4: BYTE 12,0 ;CURSOR DOWN C5: BYTE 10,0 ;CURSOR LEFT C6: BYTE 14,0 ;CURSOR RIGHT C7: BYTE 233,43,0 ;LOCK KEYBOARD C8: BYTE 233,42,0 ;UNLOCK KEYBOARD C9: BYTE 233,124,0 ;ERASE TO END OF LINE C10: BYTE 233,131,0 ;ERASE TO END OF SCREEN C11: BYTE 233,51,0 ;PROTECT FIELD C12: BYTE 233,50,0 ;UNPROTECT FIELD C13: BYTE 233,46,0 ;ENABLE PROTECTED FIELDS C14: BYTE 233,47,0 ;DISABLE PROTECTED FIELDS C15: BYTE 0 C16: BYTE 0 C17: BYTE 0 C18: BYTE 0 C19: BYTE 0 C20: BYTE 0 C21: BYTE 0 C22: BYTE 0 C23: BYTE 0 C24: BYTE 0 C25: BYTE 0 C26: BYTE 0 C27: BYTE 0 C28: BYTE 0 C29: BYTE 0 C30: BYTE 0 C31: BYTE 0 C32: BYTE 0 C33: BYTE 0 C34: BYTE 0 C35: BYTE 0 C36: BYTE 0 C37: BYTE 0 C38: BYTE 0 C39: BYTE 0 C40: BYTE 0 C41: BYTE 0 C42: BYTE 0 C43: BYTE 0 C44: BYTE 0 C45: BYTE 0 C46: BYTE 233,'g,'4,0 ; REVERSE VIDEO C47: BYTE 233,'g,'0,0 C48: BYTE 0 C49: BYTE 0 C50: BYTE 0 C51: BYTE 0 C52: BYTE 0 C53: BYTE 0 C54: BYTE 0 C55: BYTE 0 C56: BYTE 0 C57: BYTE 0 C58: BYTE 0 C59: BYTE 0 C60: BYTE 0 C61: BYTE 0 C62: BYTE 0 C63: BYTE 0 C64: BYTE 0 C65: BYTE 0 C66: BYTE 0 C67: BYTE 0 C68: BYTE 0 C69: BYTE 233,'F,'3,0 ; DOUBLE SIZE C70: BYTE 233,'F,'0,0 EVEN WORD 0 END .