; QTO-ZB10.ASM - QTERM Overlay for Telcon Zorba Computer ; ; 04/12/89 - Created this overlay - Mike Freeman ; ; See QTERM.PAT for documentation of QTERM's patch area ; ; This overlay is a full implementation of QTERM for the Telcon Industries Inc. ; Zorba computer except that (a) 38.4 KBaud is not supporte and ; (b) the terminal capabilities of Character Insertion and Character ; Deletion are absent. This does not, however, affect either VT100- ; emulation or the W Window mode of operation. ; Communication is accomplished through Port A (the Communications Port). ; ; This overlay may be assembled by ASM, LASM or equivalent: ; A>ASM QTO-ZB10.AAZ ; and may be loaded over QTERM.COM with MLOAD: ; A>MLOAD QTERM.COM,QTO-ZB10.HEX ; to produce QTERM.COM adapted for the Zorba. ; ;**NOTE** as written, this overlay initializes the Zorba to start in 8N1 mode ; at 1200 Baud. Change the parameters at INIT: to set a different ; initialization configuration. ; ; The program QTERM is Copyright 1989 by DPG (David Goodenough). ; It may be found in the latest release of QTERMxxx.lbr (where xxx = version) ; ; I make no claim of copyright to this overlay. As a road-sign in Oklahoma ; used to say, "No Speed Limit -- Do Your Damnedest" ; -- Mike Freeman; 301 N.E. 107th Street; Vancouver, Wa 98685; ; (206)574-8221 ; ; Parameters ; HAYES EQU 000H ;Nonzero means use "+++ATH0" to hang up modem ; ; Symbols ; BOOT EQU 00H ;CP/M Warm-boot vector BDOS EQU 05H ;BDOS entry ; ;Port addresses ; BRPORT EQU 00H ;8254-2 Baud Rate Generator Timer for Port A COMMND EQU 03H ;8254-2 Timer Control Port MDDATP EQU 20H ;Modem Data Port (A) MDCTL1 EQU 21H ;Modem Status (Port A) ; ;Modem status bits ; MDSND EQU 1 ;Output Send Ready bit MDRCV EQU 2 ;Receive (Input) Ready bit ; ;Port commands ; MDMODE EQU 82H ; Insures 8251 is out of mode with DTR high MDRSET EQU 42H ; Resets USART for additional commands MDSET1 EQU 4EH ; 1 stop bit, no parity, 8 bits, 16x MDSET2 EQU 0CEH ; 2 stop bits, no parity, 8 bits, 16x MDCOM EQU 17H ; Reset error flags, RCV, DTR, TX ready ;; ;Values for 8254-2 baud rate timer generator ; BD300 EQU 1667 ; 300 bps BD600 EQU 833 ;600 bps BD1200 EQU 417 ; 1200 bps BD2400 EQU 208 ; 2400 bps BD4800 EQU 104 ;4800 bps BD9600 EQU 52 ; 9600 bps BD19200 EQU 26 ;19200 bps ; ;Routine addresses ; CONOUT EQU 109H ;Output character in C to Console DECOUT EQU 10CH ;Output number in HL in decimal to Console ; ORG 110H ;Overlay starts here - Get Port input status ; IN MDCTL1 ;Check port status ANI MDRCV ;Check for receive-ready RET ;and return DS 120H-$ AND 0FFH ; ;Get character from port ; IN MDDATP ;Get character from port RET ;and return DS 130H-$ AND 0FFH ; ;Check output ready status ; IN MDCTL1 ;Get port status ANI MDSND ;Check for output-ready RET ;and return DS 140H-$ AND 0FFH ; ;Send character to output ; OUT MDDATP ;Send character in A to port RET ;and return DS 150H-$ AND 0FFH ; ;Start Break ; MVI A,3FH ;DTR-normal, break on OUT MDCTL1 ;... RET ;Return DS 160H-$ AND 0FFH ; ;Clear Break ; MVI A,37H ;DTR-normal, send-receive normal OUT MDCTL1 ;... RET ;Return DS 170H-$ AND 0FFH ; ;Drop DTR ; IF NOT HAYES ; MVI A,3DH ;Drop DTR OUT MDCTL1 ;Drop DTR RET ;Return DS 180H-$ AND 0FFH ; ;Raise DTR ; MVI A,37H ;DTR, send, receive normal OUT MDCTL1 ;... RET ;Return DS 190H-$ AND 0FFH ; ENDIF ;NOT HAYES ; IF HAYES ; RET ;Use hangup string DB 10,0FEH,'+++',0FEH,'ATH0',0DH;Hang up string DS 190H-$ AND 0FFH ; ENDIF ;HAYES ; ;Set baud rate ; JMP LOADBD ;Load baud rate DS 1A0H-$ AND 0FFH ; ;Baud rate index table ; BDTABL: DB 0,0 ;38 KBaud (not implemented) DB 1,0FFH ;19.2 KBaud DB 2,0FFH ;9600 Baud DB 3,0FFH ;4800 baud DB 4,0ffh ;2400 baud DB 5,0FFH ;1200 Baud DB 6,0ffh ;600 baud DB 7,0FFH ;300 Baud ; JMP STUART ;1B0H - Set word-width, parity, stop-bits, x16 DS 1C0H-$ AND 0FFH ; ;Table of parity/bits/stopbits ; DB 4AH ;7N1 DB 4EH ;8N1 DB 0CAH ;7N2 DB 0CEH ;8N2 DB 7AH ;7E1 DB 7EH ;8E1 DB 0FAH ;7E2 DB 0FEH ;8E2 DB 5AH ;7O1 DB 5EH ;8O1 DB 0DAH ;7O2 DB 0DEH ;8O2 ; DS 1 ;1CCH - Reserved ; DS 1 ;1CDH - Transfer buffer size ; DB 4 ;1CEH - Clock speed ; DB ']'-40H ;1CFH - Escape character ; ;1D0H - Signon message DB 'Telcon Zorba',0 ;... DS 1F0H-$ AND 0FFH ; ;Clear screen ; DB 1BH,'H',1BH,'E',0 DS 200H-$ AND 0FFH ; ;MOVETO - Cursor positioning ; MOVETO: PUSH H ;Save coordinates MVI C,1BH ;Transmit CALL CONOUT ;... MVI C,'Y' ;Cursor follows CALL CONOUT ;... POP H ;Get row/column PUSH H ;Save again MOV A,H ;Get row CALL CUROUT ;Type it POP H ;Get row/column again MOV A,L ;Get row CUROUT: ADI 20H ;Make ASCII character MOV C,A ;Put in C JMP CONOUT ;and Output to Console DS 22FH-$ AND 0FFH ; ;Terminal capability mask ; DB 0CFH ;Everything except char deletion/insertion ; DB 1BH,71H,0,0,0,0,0,0;Alternate video off DB 1BH,70H,0,0,0,0,0,0;Alternate video on DB 1BH,'M',0,0,0,0,0,0;Delete line DB 1BH,'L',0,0,0,0,0,0;Insert line DB 0,0,0,0,0,0,0,0 ;No delete character DB 0,0,0,0,0,0,0,0 ;or insert character DB 1BH,'K',0,0,0,0,0,0;Clear to end-of-line DB 1BH,'J',0,0,0,0,0,0;Clear to end-of-screen ; ; JMP INIT ;Jump to initialization code RET ;No termination is needed NOP ;... NOP ;... ; ;INIT - Initialization routine ; INIT: MVI A,MDSET1 ;Set 1 stop-bit, no parity, 8-bit, x16 CALL STUART ;... MVI A,5 ;Set initial speed to 1200 Baud ;and fall into load baud-rate routine ; ;LOADBD - Load Baud rate ; LOADBD: DCR A ;Make index zero-offset RLC ;times 2 LXI H,BDTBL1 ;Point to real Baud-rate table MOV E,A ;Put offset into DE MVI D,0 ;... DAD D ;Compute address of correct Baud rate LOADB0: MVI A,36H ;Set square wave OUT COMMND ;... MOV A,M ;Get LSB of Baud rate OUT BRPORT ;Send to generator INX H ;Point to MSB MOV A,M ;Get it OUT BRPORT ;Send to Baud rate generator RET ;and return ; BDTBL1: ;Zorba Baud-rate table DW BD19200,BD9600,BD4800,BD2400,BD1200,BD600,BD300 ; ;STUART - Set UART (Word-width, Stop-bits, Parity, x16) - Parameter in A ; STUART: PUSH PSW ;Save settings MVI A,MDMODE ; Insure 8251 is out of mode OUT MDCTL1 XTHL ; Small delay to complete command XTHL MVI A,MDRSET ; Reset the 8251A for new command OUT MDCTL1 XTHL ; Small delay to complete command XTHL POP PSW ;Get parameters OUT MDCTL1 ;Set stop-bits, parity, word-width, x16 XTHL ; Small delay to complete command XTHL MVI A,MDCOM ; Error reset, RCV, DTR, TX ready OUT MDCTL1 XTHL ; Small delay to complete command XTHL RET ;Return ; END ;End of overlay