You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

159 lines
4.3 KiB

TITLE CDZEPH - CRT DRIVER FOR ZENTEC ZEPHR TERMINAL
;**********************************************************************
;*** ***
;*** COPYRIGHT (C) 1980, MICROSOFT ***
;*** ***
;**********************************************************************
ENTRY $CRWID,$CRLEN,$CURON,$CUROF,$CURBK
ENTRY $SETCR,$ERASE,$ALARM
ENTRY $CLIST,$TLIST,$FLIST
ENTRY $EOL,$HILIT,$LOLIT
ENTRY $INCRT,$OUCRT
EXT $OUTCH,$INKEY
;****************************************************
; KEYBOARD CODE DEFINITIONS
;****************************************************
;
$CLIST: ;EDITING KEY DEFINITIONS
DB X'15' ;LINE DELETE (CTL-U)
DB X'7F' ;CHAR DELETE (DEL)
DB X'06' ;FORWARD SPACE (CTL-F)
DB X'08' ;BACK SPACE (CTL-H)
DB X'2B' ;PLUS SIGN
DB X'2D' ;MINUS SIGN
DB 0 ;END OF LIST
$TLIST: ;TERMINATOR KEY DEFINITIONS
DB X'02' ;BACKTAB (CTL-B)
DB X'1B' ;ESCAPE (ESC)
DB X'0D' ;CARRIAGE RETURN
DB X'09' ;TAB (CTL-I)
DB X'0A' ;LINE FEED
DB 0 ;END OF LIST
$FLIST: ;FUNCTION KEY DEFINITIONS
DB X'01' ;CTL-A
DB X'03' ;CTL-C
DB X'18' ;CTL-X
DB 0 ;END OF LIST
;****************************************************
; TERMINAL SCREEN DIMENSIONS
;****************************************************
;
$CRLEN: DB 24D ;24 LINES
$CRWID: DB 80D ;80 COLUMNS
;****************************************************
; TERMINAL OUTPUT CODES
;****************************************************
;
ESCAPE EQU X'1B'
BSPACE EQU X'08'
BELL EQU X'07'
;****************************************************
; O U T P U T F U N C T I O N S
;****************************************************
; SET CURSOR POSITION
; [H] = ROW NUMBER
; [L] = COLUMN NUMBER
;****************************************************
;
$SETCR:
MVI A,ESCAPE
CALL $OUTCH ;SEND ESCAPE
MVI A,"0"
CALL $OUTCH ;SEND "0"
MOV A,H
ADI 31D ;ADJUST ROW NUMBER
CALL $OUTCH ;SEND ROW
MOV A,L
ADI 31D ;ADJUST COLUMN NUMBER
JMP $OUTCH ;SEND COLUMN AND RETURN
;****************************************************
; BACKSPACE CURSOR
;****************************************************
;
$CURBK: MVI A,BSPACE
JMP $OUTCH ;SEND BACKSPACE AND RETURN
;****************************************************
; CURSOR ON/OFF - NOT AVAILABLE ON ZENTEC ZEPHR
;****************************************************
;
$CURON: ;NOT AVAILABLE ON ZENTEC ZEPHR
$CUROF: RET ;NOT AVAILABLE ON ZENTEC ZEPHR
;****************************************************
; ERASE TO END OF SCREEN
; [HL] = SEQUENTIAL CURSOR POSITION
;****************************************************
;
$ERASE: MVI A,ESCAPE
CALL $OUTCH ;SEND ESCAPE
MVI A,"Y"
CALL $OUTCH ;SEND "Y"
MVI D,10
XRA A ;NULL CHARACTER
ERNULL: CALL $OUTCH ;SEND NULL
DCR D ;COUNT 10 OF THEM
JNZ ERNULL
RET
;****************************************************
; SOUND AUDIBLE TONE
;****************************************************
;
$ALARM: MVI A,BELL
JMP $OUTCH ;SEND BELL CODE AND RETURN
;****************************************************
; ERASE TO END OF LINE
; [H] = CURRENT ROW NUMBER
; [L] = CURRENT COLUMN NUMBER
;****************************************************
;
$EOL: MVI A,ESCAPE
CALL $OUTCH ;SEND ESCAPE
MVI A,"T"
JMP $OUTCH ;SEND EOL CODE AND RETURN
;****************************************************
; SET/RESET REVERSE VIDEO MODE
;****************************************************
;
$HILIT:
MVI A,"4" ;REVERSE VIDEO CODE
JMP LITE
$LOLIT:
MVI A,"0" ;NORMAL VIDEO CODE
LITE: PUSH PSW
MVI A,ESCAPE
CALL $OUTCH ;SEND ESCAPE
MVI A,"G"
CALL $OUTCH ;SEND "G"
POP PSW ;VIDEO CODE
JMP $OUTCH ;SEND AND RETURN
;****************************************************
; INPUT CHARACTER FROM TERMINAL
;****************************************************
;
$INCRT: JMP $INKEY ;GET KEY AND RETURN
;****************************************************
; OUTPUT CHARACTER TO TERMINAL
;****************************************************
;
$OUCRT: JMP $OUTCH ;PUT CHARACTER AND RETURN
END