|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4480 (0x1180) Types: TextFile Names: »CDANSI.MAC«
└─⟦811637d18⟧ Bits:30005383 Microsoft COBOL-80 v4.01 └─ ⟦this⟧ »CDANSI.MAC«
TITLE CDANSI - CRT DRIVER FOR ANSI STANDARD TERMINAL .8080 ;********************************************************************** ;*** *** ;*** COPYRIGHT (C) 1980, MICROSOFT *** ;*** *** ;********************************************************************** ENTRY $CRWID,$CRLEN,$CURON,$CUROF,$CURBK ENTRY $SETCR,$ERASE,$ALARM ENTRY $EOL,$HILIT,$LOLIT ENTRY $CLIST,$TLIST,$FLIST EXT $OUTCH ;**************************************************** ; KEYBOARD CODE DEFINITIONS ;**************************************************** ; $CLIST: ;EDITING KEY DEFINITIONS DB 15H ;LINE DELETE (CTRL-U) DB 7FH ;CHAR DELETE (DEL,RUB) DB 06H ;FORWARD SPACE (CTRL-F) DB 08H ;BACK SPACE (CTRL-H) DB 2BH ;PLUS SIGN DB 2DH ;MINUS SIGN DB 00H ;END OF LIST $TLIST: ;TERMINATOR KEY DEFINITIONS DB 02H ;BACKTAB (CTL-B) DB 1BH ;ESCAPE KEY (ESC) DB 09H ;FORWARD TAB (CTL-I) DB 0DH ;CARRIAGE RETURN DB 0AH ;LINE FEED DB 00H ;END OF LIST $FLIST: ;FUNCTION KEY DEFINITIONS DB 01H ;CTL-A DB 03H ;CTL-C DB 18H ;CTL-X DB 00H ;**************************************************** ; TERMINAL SCREEN DIMENSIONS ;**************************************************** ; $CRLEN: DB 24D ;24 LINES $CRWID: DB 80D ;80 COLUMNS ;**************************************************** ; TERMINAL OUTPUT CODES ;**************************************************** ; ESCAPE EQU 1BH BSPACE EQU 08H BELL EQU 07H ;**************************************************** ; 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: CALL SETUP ;SEND ESC Æ MOV A,H CALL SEND2 ;SEND LINE MVI A,";" CALL $OUTCH ;SEND SEPARATOR MOV A,L CALL SEND2 ;SEND COLUMN MVI A,"f" JMP $OUTCH ;SEND END CODE AND RETURN ;**************************************************** ; BACKSPACE CURSOR ;**************************************************** ; $CURBK: MVI A,BSPACE ;BACKSPACE JMP $OUTCH ;**************************************************** ; CURSOR ON/OFF ;**************************************************** ; $CURON: MVI A,"l" ;RESET MODE JMP CURSW $CUROF: MVI A,"h" ;SET MODE CURSW: PUSH PSW CALL SETUP ;SEND ESC Æ MVI A,">" CALL $OUTCH ;SEND > MVI A,"5" ;MODE NUMBER 5 CALL $OUTCH POP PSW JMP $OUTCH ;SEND SET/RESET ;**************************************************** ; ERASE TO END OF SCREEN ; ÆHLÅ = SEQUENTIAL CURSOR POSITION ;**************************************************** ; $ERASE: MVI A,"J" ;ERASE EOS CODE ERASE: PUSH PSW CALL SETUP ;SEND ESC Æ MVI A,"0" CALL $OUTCH ;SEND 0 POP PSW JMP $OUTCH ;SEND EOS/EOL CODE AND RETURN ;**************************************************** ; ERASE TO END OF LINE ; ÆHÅ = CURRENT ROW NUMBER ; ÆLÅ = CURRENT COLUMN NUMBER ;**************************************************** ; $EOL: MVI A,"K" ;ERASE EOL CODE JMP ERASE ;**************************************************** ; SOUND AUDIBLE TONE ;**************************************************** ; $ALARM: MVI A,BELL JMP $OUTCH ;SEND BELL CODE AND RETURN ;**************************************************** ; SET/RESET HIGHLIGHTED VIDEO MODE ;**************************************************** ; $HILIT: MVI A,"7" ;REVERSE VIDEO CODE JMP LITE $LOLIT: MVI A,"0" ;STOP REVERSE CODE LITE: PUSH PSW CALL SETUP ;SEND ESC Æ POP PSW CALL $OUTCH ;SEND SET/RESET REVERSE MVI A,"m" JMP $OUTCH ;SEND END CODE AND RETURN ;**************************************************** SETUP: MVI A,ESCAPE CALL $OUTCH MVI A,"Æ" JMP $OUTCH ;**************************************************** SEND2: CALL BTOA ;CONVERT BINARY TO 2 ASCII DIGITS PUSH B ;SAVE RESULT MOV A,B CALL $OUTCH ;SEND HIGH-ORDER DIGIT POP B MOV A,C JMP $OUTCH ;SEND LOW-ORDER DIGIT ;**************************************************** BTOA: MVI B,"0" BTOA1: SUI 10 JC BTOA2 ;IF < 0 INR B ;INCREMENT HIGH DIGIT JMP BTOA1 BTOA2: ADI 10+"0" ;RESTORE & CONVERT LOW DIGIT MOV C,A RET END «eof»