;*; Updated on 27-Oct-92 at 10:36 AM by James A. Jarboe I V; edit time: 6:00:37 ;*************************************************************************** ;* * ;* WYSE 50/WYSE 60 TERMINAL DRIVER * ;* * ;*************************************************************************** ;Copyright (C) 1987, 1991 UltraSoft Corp. All Rights Reserved. ; ;Written by: Lee & David Pallmann ; ;Conditional Assembly: ; ; For Wyse 50 Terminal Driver: .M68 WYSE/V:50 ...creates WY50.TDV ; ; For Wyse 60 Terminal Driver: .M68 WYSE/V:60 ...creates WY60.TDV ; (in Wyse 50+ emmlation mode) ; ;Edit History: ; ;1.0(100) 01-Jun-87 created. /LVP&DFP ;1.1(101) 21-Jul-88 made lots of miscellaneous corrections. /DFP ;1.1(102) 06-Oct-88 fix TCRT 129 (end status line). /DFP ;1.1(103) 18-Oct-88 add conditional assembly for WY-50 or WY-60. /DFP ;1.1(104) 09-Jan-89 fix definition of -1,64 & -1,65. /DFP ;1.1(105) 02-Oct-92 Added AMOS compatible function key translation. /JAJ ; Added More downloaded characters and now uses unused ; control char display for downloaded characters. ; Added more features. ;1.1(106) 26-Oct-92 Added WY60 support for 24,25,42 and 43 data lines ; per screen. CAUTION - NOTE - while this driver ; does support row changes, you will loose the ; downloaded special characters when changing to ; or from a 2? to 4? row length. ;1.1(107) 27-Oct-92 Now does not auto load font bank so special chars will ; NOT change as indicated in edit 106. ;************************** ;* CONDITIONAL ASSEMBLY * ;************************** NVALU VALUE IF EQ,50-VALUE,$MODEL=50 IF EQ,60-VALUE,$MODEL=60 IF NDF,$MODEL,ASMERP "?Please specify /V:model" IF NDF,$MODEL,ASMMSG "?Model not specified" IF NDF,$MODEL,ASMMSG "? Use .M68 WYSE/V:50 for Wyse 50" IF NDF,$MODEL,ASMMSG "? Use .M68 WYSE/V:60 for Wyse 60 emulating Wyse 50+" IF EQ, $MODEL-50 ASMMSG "==== Wyse 50 Terminal Driver (WY50.TDV) ====" ASMMSG " With AMOS Function key translations " ASMMSG " " OBJNAM WY50.TDV ENDC IF EQ, $MODEL-60 ASMMSG "==== Wyse 60 Terminal Driver (WY60.TDV) ====" ASMMSG " With AMOS Function key translations " ASMMSG " " OBJNAM WY60.TDV ENDC SEARCH SYS SEARCH SYSSYM SEARCH TRM OBJNAM .TDV ;Define capability flags TDVFLG=TD$DIM!TD$EOS!TD$EOL!TD$MLT!TD$132!TD$LID!TD$CID!TD$RVA!TD$BLN TDVFLG=TDVFLG+TD$UND!TD$SMT!TD$PRT ;!TD$STS IF EQ,$MODEL-60,TDVFLG=TDVFLG+TD$SPL+TD$VRC ; WY-60 has split-screen ESC =27. ; escape COLON =58. ; colon SEMI =59. ; semi-colon GRAVE =96. ; grave accent ;******************** ;* WY50 * ;******************** ;Terminal driver communications area WY50: WORD TD$NEW!TD$TCH ; terminal attributes BR JMPINP ; input routine RTN ; output routine BR ECHO ; echo routine BR JMPCRT ; crt control BR JMPINI ; INIT routine WORD 2 ; impure area of one word. ROWCNT: BYTE 24. ; number of rows BYTE 80. ; number of columns LWORD TDVFLG ; terminal has: ; insert/delete line ; insert/delete character ; reverse video attribute ; dim video attribute ; blinking video attribute ; underlined video attribute ; erase to end of screen ; erase to end of line ; split screen ; status line ; is an AlphaTERMINAL ; line graphics BR JMPTCH JMPINP: JMP INP ; JMPCRT: JMP CRT ; go handle TCRT codes JMPINI: JMP INI ; JMPTCH: JMP TCH ; return terminal characteristics ;******************** ;* 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 ;******************** ;* INP * ;******************** ;Input character processing subroutine ;Return a negative flag to indicate possible multi-byte key codes ;Detect a negative flag which indicates the multi-byte processing return INP: BMI INMLT ; skip if multi-byte processing CMPB D1,#1 ; function code? BEQ INPM ; yes - could be multi-byte sequence CMPB D1,#33 ; escape? BEQ INPM ; yes - could be multi-byte sequence LCC #0 ; no - normal processing RTN INPM: LCC #PS.N ; possible multi-byte - return N flag RTN ;Multi-byte processing is done here ;This occurs when TRMSER has accumulated all bytes of a multi-byte keystroke ;D0 contains the character count and A0 indexes the data string ;A5 indexes the terminal definition block and must be preserved ;The translated character must be returned in D1 for storage ;This routine may destroy only A0,A3,A6,D0,D6,D7 ; INMLT: MOVB (A0)+,D1 ; get the first character DECB D0 ; no translation if single character BEQ INMX CMPB D1,#1 ; function sequences start with SOH BEQ INMF ; function sequence - ;Escape sequences are translated directly by setting bit 7 on ;This will cause them to map to 240-377. ;[105] But first we check our translation table to see if we are redefining ;any keys that will become function keys. ; MOVB (A0)+,D1 ; get the second character INMG: ORB #200,D1 ; set bit 7 on BR INMNOT ; Check our translation first [105] INMR: ; Check for function key? [105] BIT #T$XLT,T.STS(A5) ; are we doing translation? ;;;; BEQ INMNOT ; no - check for other translation [105] BEQ INMX2 ; no - set proper flags. [105] INMX: LCC #0 ; reset the flags INMX2: RTN ;Function codes require additional translation so that they become 200-237 ; INMF: MOVB (A0)+,D1 ; get the second character SUBB #'@,D1 ; offset so that F1 becomes 0 BR INMG ; and go finish up ;Come here if program is not doing translation and we must do our own ; INMNOT: LEA A6,XLTTBL ; index the translation table 10$: MOVB (A6)+,D7 ; get character ;;;; BEQ INMX2 ; end of table - ignore char [105] BEQ INMR ; End of table..check for funkey [105] CMPB D1,D7 ; is it in the table? BEQ 20$ ; yes - INC A6 ; no - bypass translation BR 10$ ; loop for more - ;Come here to translate the character ; 20$: MOVB @A6,D1 ; translate the character CMPB D1, #200 ; See if translate if funkey [105] BHI INMR ; Yes..process it [105] BR INMX ; Leave as our translation [105] ;Translation table so that Wyse?? function keys react properly, and gives ;the user the addition of an EXECUTE key and Shift-EXECUTE key equivalents. ;A Wyse 60 using the WY60.TDV does not need this translation table as ;we download the key changes to the Wyse 60 in Wyse 50 mode when terminal ;is initialized. MAKE SURE TERMINAL IS ON WHEN REBOOTING. ; XLTTBL: IF EQ, $MODEL-50 BYTE 312, 18. ; Prev-Page = ^R BYTE 313, 20. ; Next-Page = ^T BYTE 321, 6. ; Ins-Char = ^F BYTE 327, 4. ; Del-Char = ^D BYTE 361, 276 ; Ins = shift-EXECUTE BYTE 362, 274 ; Repl = EXECUTE BYTE 373, 5. ; Shift-Home = ^E ENDC BYTE 000,000 ;******************** ;* INI * ;******************** ;Handle initialization of the terminal ; INI: MOV T.IDV(A5),A6 ; index the interface driver [106] CMP -(A6),#<[PSE]_16.>+[UDO]; is it the pseudo interface driver? [106] BEQ 5$ ; yes - no initialization wanted [106] CMP QFREE,#12. ; are there at least 12 queue blocks? [106] BLO 5$ ; no - skip the initialization [106] SAVE D1,D2 ; save registers MOV #INISIZ,D3 ; get size of first command LEA A6,INISTR ; index the first init string MOV A6,D1 TRMBFQ SLEEP #7500. ; wait for reset to complete ; (105) Reprogram Function keys so that they are AMOS compatible. ; To use AMOS function key translation files work with this driver, ; Copy the AM65 function key translation file to: ; WY50.??? for /V:50 ; WY60.??? for /V:60 ; Where ??? indicates the function key file extension. ; (.AMX, .VUX, .MLX, .WRX, etc...) ; This will allow the AMOS function key translation files to work ; with this driver. TERMINAL MUST BE TURNED ON FOR THIS TO LOAD. ; MOV #INISZ1, D3 ; Get Size of second init string. LEA A6, INIST1 ; Index second init string. MOV A6, D1 TRMBFQ SLEEP #7500. ; The Wyse 60 terminal allows the redefining of keys to the remote system. ; Thus we will redefine the keys to act like an AM6?. ; IF EQ,$MODEL-60 MOV #INISZ2, D3 ; Get size of redefine key seq. LEA A6, INIST2 ; Index sequence. MOV A6, D1 ; Set it up. TRMBFQ ; Do it. SLEEP #5500. ; Sleep while it does it. MOV #INISZ3, D3 ; Get size of rest of redifine. LEA A6, INIST3 ; Index next sequence. MOV A6, D1 ; Set it up. TRMBFQ ; Do it. SLEEP #7500. ; Sleep, redefine takes some time. ENDC REST D1,D2 ; restore registers 5$: MOV T.IMP(A5),A6 ; index impure area MOVW #80.,@A6 ; preset to 80 columns MOVW #24.,2(A6) ; Preset to 24 columns [106] RTN ;Initialization string - program special characters ; INISTR: IF EQ,$MODEL-60 ; Wyse50 emulation on a Wyse60 has downloadable characters. ; BYTE ESC,'~,'" ; Ensure Wyse50 mode on a Wyse60. BYTE ESC,'e,'( ; Ensure 24 rows. [106] ; End of line character. ; BYTE '[-'@ ASCII /cA00F/ ASCII /000002060E1E3E7E3E1E0E0602000000/ BYTE 'Y-'@ ; Tab marker character. ; BYTE '[-'@ ASCII /cA00E/ ASCII /000002022232FAFEFA32220202000000/ BYTE 'Y-'@ ; Up arrow character. ; BYTE '[-'@ ASCII /cA00D/ ASCII /000010387CFE38383838383838000000/ BYTE 'Y-'@ ; Down Arrow character. ; BYTE '[-'@ ASCII /cA00C/ ASCII /000038383838383838FE7C3810000000/ BYTE 'Y-'@ ; Paragraph character. ; BYTE '[-'@ ASCII /cA00B/ ASCII /00007E92929292927E12121212000000/ BYTE 'Y-'@ ; 1/4 character. ; BYTE '[-'@ ASCII /cA00A/ ASCII /004042444810244C94247E0404000000/ BYTE 'Y-'@ ; 1/2 character. ; BYTE '[-'@ ASCII /cA007/ ASCII /004042444810204C920408101E000000/ BYTE 'Y-'@ ; Tradmark character. ; BYTE '[-'@ ASCII /cA008/ ASCII /00FE1010101010C6AA92828282000000/ BYTE 'Y-'@ ENDC BYTE 0 INISIZ=.-INISTR EVEN ; Reprogram function keys to emulate AlphaMicro AM65 function key sequence. ; This will enable the user to copy an exising AM65 function key translation ; file and have full function of the translation file. TERMINAL MUST BE ; TURNED ON FOR THE FOLLOWING TO LOAD. ; Example: ; COPY WY50.AMX=AM65.AMX ; Alphamicro line editor funkey file. ; COPY WY60.WRX=AM65.WRX ; AlphaWrite function key file. ; COPY WY60.DMX=AM65.DMX ; ESP function key file. ; INIST1: BYTE 233,'+ ; Clear all to spaces. BYTE 233,'`,': ; Set into 80 column mode. BYTE 200,200,200,200,200,200 ; Nulls... BYTE 233,'x,'0 ; Set into normal display format. BYTE 200,200,200,200,200,200 ; Nulls... BYTE 233,'z,'@,33,'5,177 ; Set up F1 (unshifted). BYTE 233,'z,'`,33,'7,177 ; Set up F1 (shifted). BYTE 233,'z,'A,33,'4,177 ; Set up F2 (unshifted). BYTE 233,'z,'a,33,'6,177 ; Set up F2 (shifted). BYTE 233,'z,'B,33,'S,177 ; Set up F3 (unshifted). BYTE 233,'z,'b,33,'s,177 ; Set up F3 (shifted). BYTE 233,'z,'C,33,'@,177 ; Set up F4 (unshifted). BYTE 233,'z,'c,33,'P,177 ; Set up F4 (shifted). BYTE 233,'z,'D,01,'@,177 ; Set up F5 (unshifted). BYTE 233,'z,'d,01,'H,177 ; Set up F5 (shifted). BYTE 233,'z,'E,01,'A,177 ; Set up F6 (unshifted). BYTE 233,'z,'e,01,'I,177 ; Set up F6 (shifted). BYTE 233,'z,'F,01,'B,177 ; Set up F7 (unshifted). BYTE 233,'z,'f,01,'J,177 ; Set up F7 (shifted). BYTE 233,'z,'G,01,'C,177 ; Set up F8 (unshifted). BYTE 233,'z,'g,01,'K,177 ; Set up F8 (shifted). BYTE 233,'z,'H,01,'D,177 ; Set up F9 (unshifted). BYTE 233,'z,'h,01,'L,177 ; Set up F9 (shifted). BYTE 233,'z,'I,01,'E,177 ; Set up F10 (unshifted). BYTE 233,'z,'i,01,'M,177 ; Set up F10 (shifted). BYTE 233,'z,'J,01,'F,177 ; Set up F11 (unshifted). BYTE 233,'z,'j,01,'N,177 ; Set up F11 (shifted). BYTE 233,'z,'K,01,'G,177 ; Set up F12 (unshifted). BYTE 233,'z,'k,01,'O,177 ; Set up F12 (shifted). BYTE 233,'z,'L,33,'E,177 ; Set up F13 (unshifted). BYTE 233,'z,'l,33,'|,177 ; Set up F13 (shifted). BYTE 233,'z,'M,33,'R,177 ; Set up F14 (unshifted). BYTE 233,'z,'m,33,'~,177 ; Set up F14 (shifted). BYTE 233,'z,'N,33,'T,177 ; Set up F15 (unshifted). BYTE 233,'z,'n,33,'t,177 ; Set up F15 (shifted). BYTE 233,'z,'O,33,'Y,177 ; Set up F16 (unshifted). BYTE 233,'z,'o,33,'y,177 ; Set up F16 (shifted). INISZ1=.-INIST1 EVEN DEFINE CHGKEY KEY, SEQ, NOESC IF NB,NOESC BYTE 233,'Z,'1, KEY, SEQ,177 IFF BYTE 233,'Z,'1, KEY, 33, SEQ,177 ENDC ENDM ; These are the redefine key, sequence codes. Redefining keys appears ; to take some time. So they are divided up so they are attacked in ; Two steps with sleep time in between to load the sequences. ; INIST2: CHGKEY 'q,'N ; Ins Char = <316> CHGKEY 'p,'h ; Ins Line = <350> CHGKEY '5,'O ; Del Char = <317> CHGKEY '6,'K ; Del Line = <313> CHGKEY 'u,'9 ; Send = <271> (Help) CHGKEY 't,'l ; Print = <354> (Print) INISZ2=.-INIST2 EVEN INIST3: CHGKEY '7,74 ; Ins = EXECUTE CHGKEY '8,'> ; Repl = Shift - EXECUTE CHGKEY 'r,24,NOESC ; Nxt page = ^T CHGKEY 'w,22,NOESC ; Pre page = ^R CHGKEY '},31,NOESC ; Clr line = ^Y CHGKEY '/,5, NOESC ; Sft Home = ^E BYTE 233,'Z,'1,'z,25,31,177 ; Clear Screen = ^U^Y BYTE 33,'e,'N ; Auto font loading off. INISZ3=.-INIST3 EVEN PAGE ;******************** ;* 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 MOV T.IMP(A5),A6 ; index impure area CMPW @A6,#80. ; in wide mode? JNE CRT132 ; yes - special cursor addressing ;CURSOR POSITIONING - D1 CONTAINS X,Y COORDINATES TTYI ;SEND POSITION COMMAND BYTE ESC,75,0,0 ADD #17437,D1 ;ADD POSITION OFFSETS ROR D1,#8. ;SEND ROW FIRST TTY ROL D1,#8. ;SEND COLUMN SECOND TTY RTN CRT132: SAVE D0 ; MOV D1,D0 ; TTYI ; BYTE ESC,'a,0 ; EVEN ; ROR D1,#8. ; AND #377,D1 ; DCVT 0,OT$TRM ; TTYI ; BYTE 'R,0 ; EVEN ; MOV D0,D1 ; AND #377,D1 ; DCVT 0,OT$TRM ; TTYI ; BYTE 'C,0 ; EVEN ; REST D0 ; RTN ; ;SPECIAL COMMANDS - D1 CONTAINS THE COMMAND CODE IN THE LOW BYTE ; CRTS: IF EQ,$MODEL-60 CMPW D1, #177400 ; Is it a -1 in the high byte? [106] JLO CRTMSC ; no - must be another command [106] ENDC CMPB D1,#80. ; set to wide format? BEQ CRTWID ; yes - special handling CMPB D1,#81. ; set to normal format? BEQ CRTNOR ; yes - special handling AND #377,D1 ;STRIP THE HIGH BYTE BNE CRTU ; AND BRANCH UNLESS CLEAR SCREEN TTYI ;SPECIAL CASE FOR CLEAR SCREEN BYTE ESC,52,0 EVEN CRTZ: RTN ;COMMAND PROCESSING PER DIRECTOR TABLES CRTU: PUSH A2 ;SAVE A2 CMP D1,#</2> ;CHECK FOR VALID CODE BHI CRTX ; AND BYPASS IF BAD LEA A2,CRCA-2 ;INDEX THE TABLE ADD D1,A2 ;ADD COMMAND CODE ADD D1,A2 ; TWICE MOVW @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 CRTXZ: POP A2 ;RESTORE A2 RTN ;Set terminal to wide format ; CRTWID: TTYI BYTE 33,'`,';,0 EVEN MOV #132.,D1 ; get new width WIDSET: MOV T.IMP(A5),A6 ; index impure area MOVW D1,@A6 ; store the new width SLEEP #5000. ; pause while command completes [108] RTN ;Set terminal to normal format ; CRTNOR: TTYI BYTE 33,'`,':,0 EVEN MOV #80.,D1 ; get the new width BR WIDSET ; go store it IF EQ,$MODEL-60 CRTMSC: CMPW D1,#-5._8. ; Is it -5 BHIS VARROW ; Yes- variable row. BR CRTZ ; No - ignore command. VARROW: CMPB D1,#24. ; Asking for 25 lines. BHI 10$ ; Yes - do 24 lines. TTYI BYTE 33,'e,'(,0 ; Set 24 lines. EVEN MOV #24., D6 BR 50$ 10$: CMPB D1,#25. BHI 20$ TTYI BYTE 33,'e,'),0 ; Set 25 lines. EVEN MOV #25., D6 BR 50$ 20$: CMPB D1, #42. BHI 30$ ; set 42 lines TTYI BYTE 33,'e,'*,0 ; Set 42 lines. EVEN MOV #42., D6 BR 50$ 30$: TTYI BYTE 33,'e,'+,0 ; Set 43 lines. EVEN MOV #43., D6 50$: MOV T.IMP(A5), A6 MOVW D6, 2(A6) RTN ENDC ;Null characters for long commands ; ;BYTE OFFSET AND DATA TABLES FOLLOW FOR ALL COMMANDS ; CRCA: WORD C1-.,C2-.,C3-.,C4-.,C5-.,C6-.,C7-.,C8-. WORD C9-.,C10-.,C11-.,C12-.,C13-.,C14-. WORD C15-.,C16-.,C17-.,C18-.,C19-.,C20-. WORD C21-.,C22-.,C23-.,C24-.,C25-.,C26-.,C27-.,C28-.,C29-.,C30-. WORD C31-.,C32-.,C33-.,C34-.,C35-. WORD C36-.,C37-.,C38-.,C39-.,C40-. WORD C41-.,C42-.,C43-.,C44-.,C45-. WORD C46-.,C47-.,C48-.,C49-.,C50-. WORD C51-.,C52-.,C53-.,C54-.,C55-.,C56-.,C57-.,C58-.,C59-.,C60-. WORD C61-.,C62-.,C63-.,C64-.,C65-.,C66-.,C67-.,C68-.,C69-.,C70-. WORD C71-.,C72-.,C73-.,C74-.,C75-.,C76-.,C77-.,C78-.,C79-.,C80-. WORD C81-.,C82-.,C83-.,C84-.,C85-.,C86-.,C87-.,C88-.,C89-.,C90-. WORD C91-.,C92-.,C93-.,C94-.,C95-.,C96-.,C97-.,C98-.,C99-.,C100-. WORD C101-.,C102-.,C103-.,C104-.,C105-.,C106-.,C107-.,C108-.,C109-.,C110-. WORD C111-.,C112-.,C113-.,C114-.,C115-.,C116-.,C117-.,C118-.,C119-.,C120-. WORD C121-.,C122-.,C123-.,C124-.,C125-.,C126-.,C127-.,C128-.,C129-.,C130-. WORD C131-.,C132-.,C133-.,C134-.,C135-.,C136-.,C137-.,C138-.,C139-.,C140-. WORD C141-.,C142-.,C143-.,C144-.,C145-.,C146-.,C147-. ; 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 ESC,43,0 ;LOCK KEYBOARD C8: BYTE ESC,42,0 ;UNLOCK KEYBOARD C9: BYTE ESC,124,0 ;ERASE TO END OF LINE C10: BYTE ESC,131,0 ;ERASE TO END OF SCREEN C11: BYTE ESC,51,0 ;PROTECT FIELD C12: BYTE ESC,50,0 ;UNPROTECT FIELD C13: BYTE ESC,46,0 ;ENABLE PROTECTED FIELDS C14: BYTE ESC,47,0 ;DISABLE PROTECTED FIELDS C15: BYTE ESC,'R,0 ;DEL LINE C16: BYTE ESC,'E,0 ;INS LINE C17: BYTE ESC,'W,0 ;DEL CHAR C18: BYTE ESC,'Q,0 ;INS CHAR C19: BYTE 233, 'b, 0 ; Read Cursor at address. C20: BYTE 233, 'M, 0 ; Read character at Current position. C21: BYTE ESC,'G,'2,0 ; Blink on C22: BYTE ESC,'G,'0,0 ; Blink off C23: BYTE ESC,'H,2,0 ; Start line Drawing. C24: BYTE ESC,'H,3,0 ; End line Drawing. C25: C26: C27: BYTE 233,'A,0 ; Set terminal attributes. C28: BYTE ESC,'`,'1,0 ; cursor on C29: BYTE ESC,'`,'0,0 ; cursor off C30: BYTE ESC,'G,'8,0 ; underscore on C31: BYTE ESC,'G,'0,0 ; underscore off C32: BYTE ESC,'G,'4,0 ; reverse video on C33: BYTE ESC,'G,'0,0 ; reverse video off C34: BYTE 233, 'G, '6, 0 ;Start rev/blink. C35: BYTE 233, 'G, '0, 0 ;End rev/blink. C36: BYTE ESC,'`,'8,0 ; screen off C37: BYTE ESC,'`,'9,0 ; screen on C38: BYTE '2,0 ; top left corner C39: BYTE '3,0 ; top right corner C40: BYTE '1,0 ; bottom left corner C41: BYTE '5,0 ; bottom right corner C42: BYTE '0,0 ; top intersection C43: BYTE '9,0 ; right intersection C44: BYTE '4,0 ; left intersection C45: BYTE '=,0 ; bottom intersection C46: BYTE ':,0 ; horizontal line C47: BYTE '6,0 ; vertical line C48: BYTE '8,0 ; center intersection C49: BYTE '7,0 ; solid block C50: BYTE ';,0 ; slant block C51: BYTE '?,0 ; cross-hatch block C52: BYTE '<,0 ; double line horizontal C53: BYTE '>,0 ; double line vertical C54: BYTE ESC,'z,'(,0 ; send message to function key line C55: BYTE ESC,'z,'),0 ; send message to shifted function key line IF EQ,$MODEL-60 ; Wyse50 emulation on a Wyse60 has split screen. ; C56: BYTE ESC,'x,'0,0 ; set normal display format (no clear) C57: BYTE ESC,'x,'A,0 ; set horiz split (follow with row) IFF ; A Wyse50 has no split screen. ; C56: BYTE 0 C57: BYTE 0 ENDC C58: BYTE 0 ; set vertical split (39 char columns) C59: BYTE 0 ; set vertical split (40 char columns) C60: BYTE 0 ; set vertical split col to next char C61: BYTE ESC,'],0,0 ; activate split segment 0 C62: BYTE ESC,'},0,0 ; activate split segment 1 C63: BYTE 27.,'F,0,0 ; send message to host message field IF EQ,$MODEL-60 ; For Wyse50 emulation on a Wyse60 we use downloaded font characters. ; C64: BYTE ESC,'H,3,ESC,'H,^H0D,ESC,'H,2,0 ; up-arrow C65: BYTE ESC,'H,3,ESC,'H,^H0C,ESC,'H,2,0 ; down-arrow C66: BYTE '_,0 ; raised dot (shaded block) C67: BYTE ESC,'H,3,ESC,'H,^H0F,ESC,'H,2,0 ; end of line marker C68: BYTE ESC,'H,3,ESC,'H,^H0E,ESC,'H,2,0 ; horizontal tab symbol C69: BYTE ESC,'H,3,ESC,'H,^H0B,ESC,'H,2,0 ; paragraph C70: BYTE ESC,'H,3,'t,ESC,'H,2,0 ; dagger C71: BYTE ESC,'H,3,'S,ESC,'H,2,0 ; section C72: BYTE ESC,'H,3,'c,ESC,'H,2,0 ; cent sign C73: BYTE ESC,'H,3,ESC,'H,^H0A,ESC,'H,2,0 ; one-quarter C74: BYTE ESC,'H,3,ESC,'H,^H07,ESC,'H,2,0 ; one-half C75: BYTE ESC,'H,3,'o,ESC,'H,2,0 ; degree C76: BYTE ESC,'H,3,ESC,'H,^H08,ESC,'H,2,0 ; trademark C77: BYTE ESC,'H,3,'@,ESC,'H,2,0 ; copyright C78: BYTE ESC,'H,3,'R,ESC,'H,2,0 ; registered IFF ; For a Wyse50 we use character representation of graphics. ; C64: BYTE ^H12, 0 ; up-arrow (graphic upleftcorner) C65: BYTE ^H11, 0 ; down-arrow (graphic lowleftcorner) C66: BYTE '_,0 ; raised dot (shaded block) C67: BYTE ^H1E, 0 ; end of line marker (double vertical) C68: BYTE ^H19, 0 ; horizontal tab symbol (left intersect) C69: BYTE ESC,'H,3,'P,ESC,'H,2,0 ; paragraph C70: BYTE ESC,'H,3,'t,ESC,'H,2,0 ; dagger C71: BYTE ESC,'H,3,'S,ESC,'H,2,0 ; section C72: BYTE ESC,'H,3,'c,ESC,'H,2,0 ; cent sign C73: BYTE ESC,'H,3,'4,ESC,'H,2,0 ; one-quarter C74: BYTE ESC,'H,3,'2,ESC,'H,2,0 ; one-half C75: BYTE ESC,'H,3,'o,ESC,'H,2,0 ; degree C76: BYTE ESC,'H,3,'T,ESC,'H,2,0 ; trademark C77: BYTE ESC,'H,3,'@,ESC,'H,2,0 ; copyright C78: BYTE ESC,'H,3,'R,ESC,'H,2,0 ; registered ENDC C79: BYTE 233,'P ; print screen C80: BYTE 33,GRAVE,SEMI,0 ; reserved for set to wide mode C81: BYTE 33,GRAVE,COLON,0 ; reserved for set to normal mode IF EQ,$MODEL-60 ; Wyse50 emulation on a Wyse60 uses following sequence for aux port. ; C82: BYTE 33,'d,'#,0 ; Wyse60 enter transparent print mode IFF ; Wyse50 uses following sequence for aux port. If using this driver on a ; Wyse60 with Wyse50 emulation, ENHANCED mode must be OFF. ; C82: BYTE 'X-'@,0 ; Wyse50 enter transparent mode. ENDC C83: BYTE 'T-'@,0 ; exit transparent print mode C84: BYTE 0 ; begin writing to alternate page C85: ; end writing to alternate page C86: BYTE ESC,'K,0,0 ; toggle page C87: ; copy to alternate page C88: ; insert column C89: ; delete column C90: ; block fill with attribute C91: ; block fill with character C92: ; draw a box C93: ; scroll box up one line C94: BYTE 0 ; scroll box down one line C95: BYTE 233,'`,'@, 0 ; select jump scroll C96: BYTE 233,'`,'?, 0 ; select fast smooth scroll C97: BYTE 233,'`,'>, 0 ; select med-fast smooth scroll C98: BYTE 233,'`,'=, 0 ; select med-slow smooth scroll C99: BYTE 233,'`,'<, 0 ; select slow smooth scroll C100: BYTE 40,33,'G,':,0,0 ; start underscore/blink C101: BYTE 33,'G,'0,40,0,0 ; end underscore/blink C102: BYTE 40,33,'G,'<,0,0 ; start underscore/reverse C103: BYTE 33,'G,'0,40,0,0 ; end underscore/reverse C104: BYTE 40,33,'G,'>,0,0 ; start underscore/reverse/blink C105: BYTE 33,'G,'0,40,0,0 ; end underscore/reverse/blink C106: BYTE 33,'G,'8,0 ; start underscore w/o space C107: BYTE 33,'G,'0,0 ; end underscore w/o space C108: BYTE 33,'G,'4,0 ; start reverse w/o space C109: BYTE 33,'G,'0,0 ; end reverse w/o space C110: BYTE 33,'G,'6,0 ; start reverse/blinking w/o space C111: BYTE 33,'G,'0,0 ; end reverse/blinking w/o space C112: BYTE 33,'G,':,0 ; start underscore/blinking w/o space C113: BYTE 33,'G,'0,0 ; end underscore/blinking w/o space C114: BYTE 33,'G,'<,0 ; start underscore/reverse w/o space C115: BYTE 33,'G,'0,0 ; end underscore/reverse w/o space C116: BYTE 33,'G,'>,0 ; start underscore/reverse/blink w/o space C117: BYTE 33,'G,'0,0 ; end underscore/reverse/blink w/o space C118: BYTE 33,'G,'2,0 ; start blink w/o space C119: BYTE 33,'G,'0,0 ; end blink w/o space C120: BYTE ESC,'`,'5,0 ; set cursor to blinking block C121: BYTE ESC,'`,'2,0 ; set cursor to steady block C122: BYTE ESC,'`,'3,0 ; set cursor to blinking underline C123: BYTE ESC,'`,'4,0 ; set cursor to steady underline C124: ; SPARE C125: ; SPARE C126: ; SPARE C127: ; SPARE C128: BYTE ESC,'F,0,0 ; select top status line w/o address C129: BYTE 215,0 ; end status line C130: BYTE ESC,'z,'(,0 ; select unshifted status line w/o addr C131: BYTE ESC,'z,'),0 ; select shifted status line w/o addr C132: ; select black text C133: ; select white text C134: ; select blue text C135: ; select magenta text C136: ; select red text C137: ; select yellow text C138: ; select green text C139: ; select cyan text C140: ; select black reverse text C141: ; select white reverse text C142: ; select blue reverse text C143: ; select magenta reverse text C144: ; select red reverse text C145: ; select yellow reverse text C146: ; select green reverse text C147: BYTE 0 ; select cyan reverse text EVEN WORD 0 ;******************** ;* TCH * ;******************** ;Handle TRMCHR call ;A1 points to argument block, A2 indexes this TDV, D2 contains flags ;Can only use A1,A2,A6,D1,D2,D6,D7 TCH: MOV TD.FLG(A2),TC.FLG(A1) ; transfer flags MOV JOBCUR,A6 ; index job MOV JOBTRM(A6),A6 ; index terminal control area MOV T.IMP(A6),A6 ; index impure area CLR D6 ; preclear register MOVW 2(A6), TC.ROW(A1) ; Get row count [106] ;;; MOVB ROWCNT(A2),D6 ; get row count [106] ;;; MOVW D6,TC.ROW(A1) ; transfer row count [106] MOVW @A6,TC.COL(A1) ; transfer column count CLRW TC.CLR(A1) ; no colors MOVW #39.,TC.TSL(A1) ; set length of top status line [104] CLRW TC.SSL(A1) ; set length of shifted status line [104] MOVW #78.,TC.USL(A1) ; set length of unshifted status line [104] MOV D2,D7 ; get TRMCHR argument flags [104] AND #TC$BMP,D7 ; does user want bitmap? [104] BEQ 20$ ; no - skip bitmap transfer code [104] ;User has requested bitmap -- return it to him [104] PUSH A1 ; save argument block index [104] ADDW #TC.BMP,A1 ; index bitmap return area [104] LEA A6,TCHBMP ; index our bitmap [104] MOV #<256./16.>-1,D7 ; get amount to transfer [104] 10$: MOVW (A6)+,(A1)+ ; transfer to user [104] DBF D7,10$ ; loop until done [104] POP A1 ; restore register [104] 20$: RTN ; return to TRMCHR monitor routine [104] ;Define feature bitmap [104] ; TCHBMP: BYTE ^B11111111 ; 0 - 7 BYTE ^B11111111 ; 8 - 15 BYTE ^B11111111 ; 16 - 23 BYTE ^B11111001 ; 24 - 31 (no horiz or vert pos) BYTE ^B11111111 ; 32 - 39 BYTE ^B11111111 ; 40 - 47 BYTE ^B00111111 ; 48 - 55 BYTE ^B01100011 ; 56 - 63 (no vertical split) BYTE ^B11111111 ; 64 - 71 BYTE ^B11111111 ; 72 - 79 BYTE ^B00001111 ; 80 - 87 (no alternate page) BYTE ^B11111111 ; 88 - 95 BYTE ^B11111111 ; 96 - 103 BYTE ^B00000011 ; 104 - 111 (no non-space attributes) BYTE ^B00000000 ; 112 - 119 (no non-space attributes) BYTE ^B00001111 ; 120 - 127 (spare) BYTE ^B00000000 ; 128 - 135 (no AM-70 style color) BYTE ^B00000000 ; 136 - 143 BYTE ^B00000000 ; 144 - 151 BYTE ^B00000000 ; 152 - 159 BYTE ^B00000000 ; 160 - 167 BYTE ^B00000000 ; 168 - 175 BYTE ^B00000000 ; 176 - 183 BYTE ^B00000000 ; 184 - 191 BYTE ^B00000000 ; 192 - 199 BYTE ^B00000000 ; 200 - 207 BYTE ^B00000000 ; 208 - 215 BYTE ^B00000000 ; 216 - 223 BYTE ^B00000000 ; 224 - 231 BYTE ^B00000000 ; 232 - 239 BYTE ^B00000000 ; 240 - 247 BYTE ^B00000000 ; 248 - 255 EVEN WORD 0 END END END .