;**************************************************************************;
; ;
; HAZEL TERMINAL UNIT ROUTINE - for AMOS/L ;
; ;
;**************************************************************************;
; 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:
;
; Modified from AMS's SOROC driver on 11/22/82 by Gary S. DeCamp
; for WESTERN COMPUTER SYSTEMS, INC.
; Modified by Tim Beckner on 3/27/83 to add arrows.
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
OBJNAM HAZELE.TDV
;********************
;* HAZEL *
;********************
;TERMINAL DRIVER COMMUNICATIONS AREA
HAZEL: WORD 2000 ;TERMINAL ATTRIBUTES
BR INPUT ;INPUT ROUTINE
RTN ;OUTPUT ROUTINE
BR ECHO ;ECHO ROUTINE
BR JMPCRT ;CRT CONTROL
RTN ;no initialize routine yet
WORD 0 ; (size) no impure area yet
BYTE 24. ;number of rows
BYTE 80. ;number of columns
LWORD 101400 ;terminal has:
; insert/delete line
; erase to end of screen
; erase to end of line
;INPUT Routine
;Translate ^P to ^L, ^] to ^P, ^L to ^K, ^K to ^J
;
INPUT:
PUSH A2 ; PUSH A2 onto Stack
AND #177,D1 ; Strip Hi-Order Bit
LEA A2,XTBL ; Get Table Address
INPUTC:
CMPB D1,(A2)+ ; Is this the One?
BEQ INPUTT ; YES - Translate
INC A2 ; NO - Move to Next Char
TSTB @A2 ; End of Table?
BEQ INPUTR ; YES - No Change
BR INPUTC ; Go Back to Next Char
INPUTT:
MOVB @A2,D1 ; Translate Character!
INPUTR:
POP A2 ; POP A2 off of Stack
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 126.,17.,0,0
SUBW #401,D1 ;ADD POSITION OFFSETS
OR #100200,D1
TTY ;Send Column First
RORW D1,#8. ;SEND ROW SECOND
TTY
RTN
;SPECIAL COMMANDS - D1 CONTAINS THE COMMAND CODE IN THE LOW BYTE
CRTS: AND #377,D1 ;STRIP THE HIGH BYTE
;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 ;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
CRTX: POP A2 ;RESTORE A2
RTN
EVEN
;XTBL Translation Table
;Translate ^P to ^L, ^] to ^P, ^L to ^K, ^K to ^J
;
XTBL: BYTE 176,0 ; Leadin - Discard
BYTE 20,14 ; ^P to ^K
BYTE 35,20 ; ^] to ^P
BYTE 14,13 ; ^L to ^K
BYTE 13,12 ; ^K to ^J
BYTE 0
EVEN
;BYTE OFFSET AND DATA TABLES FOLLOW FOR ALL COMMANDS
CRCA: BYTE C0-.,C1-.,C2-.,C3-.,C4-.,C5-.,C6-.,C7-.,C8-.
BYTE C9-.,C10-.,C11-.,C12-.,C13-.,C14-.
BYTE C15-.,C16-.,C17-.,C18-.,C19-.,C20-.,C21-.
BYTE C22-.,C23-.,C24-.,C25-.,C26-.,C27-.
CRCB:
C0: BYTE 126.,28.,0 ;Clear screen and set normal intensity
C1: BYTE 126.,18.,0 ;CURSOR HOME
C2: BYTE 215,0 ;CURSOR RETURN
C3: BYTE 126.,12.,0 ;CURSOR UP
C4: BYTE 126.,11.,0 ;CURSOR DOWN
C5: BYTE 8.,0 ;CURSOR LEFT
C6: BYTE 16.,0 ;CURSOR RIGHT
C7: BYTE 126.,21.,0 ;LOCK KEYBOARD
C8: BYTE 126.,6.,0 ;UNLOCK KEYBOARD
C9: BYTE 126.,15.,0 ;ERASE TO END OF LINE
C10: BYTE 126.,24.,0 ;ERASE TO END OF SCREEN
C11: BYTE 126.,25.,0 ;Background display (low intensity)
C12: BYTE 126.,31.,0 ;Foreground display (high intensity)
C13: BYTE 0 ;ENABLE PROTECTED FIELDS
C14: BYTE 0 ;DISABLE PROTECTED FIELDS
C15: BYTE 126.,19.,0 ;Delete line
C16: BYTE 126.,26.,0 ;Insert line
C17: BYTE 0 ;Delete character
C18: BYTE 0 ;Insert character
C19: BYTE 126.,5,0 ;Read cursor address
C20: BYTE 0 ;Read character at cursor address
C21: BYTE 0 ;Start blinking field
C22: BYTE 0 ;End blinking field
C23: BYTE 0 ;Start line drawing mode
C24: BYTE 0 ;End line drawing mode
C25: BYTE 0 ;Set horizontal position
C26: BYTE 0 ;Set vertical position
C27: BYTE 126.,36.,0 ;Return to Switches