;:::::::::::: ; COEX-SET.ASM ;:::::::::::: ; ;This program is used to facilitate the selection of options ; that are available on the COEX 80F/T Printer. ; ; Written by: Chuck Hanson, Box 4202, Torrance, CA 90510 ; 5/30/85 ; ;**************************************************************** ; ; CP/M EQUATES ; BOOT EQU 0 CONOUT EQU 2 ;CONSOLE OUTPUT FUNCTION BDOS EQU 5 LSTOUT EQU 5 ;LST DEVICE OUTPUT FUNCTION CONDIR EQU 6 ;DIRECT CONSOLE INPUT FUNCTION PRTSTR EQU 9 ;PRINT STRING FUNCTION ; BEL EQU 07H ;ASCII BELL BS EQU 08H ;BACK SPACE TAB EQU 09H ;HORIZONTAL TAB LF EQU 0AH ;LINE FEED FF EQU 0CH ;FORM FEED CR EQU 0DH ;CARRIAGE RETURN ESC EQU 1BH ;ESCAPE CODE ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ORG 100H ;CP/M TPA LXI SP,STKTOP ;SET UP LOCAL STACK ; DISMEN: MVI C,PRTSTR ;DISPLAY MENU LXI D,MENU CALL BDOS ; CHARIN: MVI C,CONDIR ;DIRECT CONSOLE INPUT MVI E,0FFH CALL BDOS CPI 0 ;TEST FOR CHARACTER JZ CHARIN ;NO CHARACTER, GO LOOP CALL LCTOUC ;Convert lower case to UC STA CHAR ;SAVE CHARACTER MVI C,CONOUT ;ECHO CHARACTER TO CONSOLE MOV E,A CALL BDOS MVI C,CONOUT ;PRINT COMMA AFTER SELECTION MVI E,',' CALL BDOS ; LDA CHAR ;START OPTION TESTS SETA: CPI 'A' JNZ SETB LXI H,CSTD ;Standard Char. Set JMP SETLP SETB: CPI 'B' JNZ SETC LXI H,CGER ;German JMP SETLP SETC: CPI 'C' JNZ SETD LXI H,CENG ;English JMP SETLP SETD: CPI 'D' JNZ SETE LXI H,CFR ;French JMP SETLP SETE: CPI 'E' JNZ SETF LXI H,CJAP ;Japanese JMP SETLP SETF: CPI 'F' JNZ SETG LXI H,P10CPI ;10 CPI JMP SETLP SETG: CPI 'G' JNZ SETH LXI H,P12CPI ;12 CPI JMP SETLP SETH: CPI 'H' JNZ SETI LXI H,P17CPI ;17 CPI JMP SETLP SETI: CPI 'I' JNZ SETJ LXI H,ENLARG ;Enlarged Print Mode JMP SETLP SETJ: CPI 'J' JNZ SETK LXI H,LSPC45 ;4.5 LPI JMP SETLP SETK: CPI 'K' JNZ SETL LXI H,LSPC16 ;6 Lines per Inch JMP SETLP SETL: CPI 'L' JNZ SETM LXI H,LSPC18 ;8 Lines per Inch JMP SETLP SETM: CPI 'M' JNZ SETN LXI H,LSPC772 ;7/72 Inches per Line JMP SETLP SETN: CPI 'N' JNZ SETO LXI H,FFEED ;Form Feed JMP SETLP SETO: CPI 'O' JNZ SETR LXI H,BUFFON ;Use print buffer JMP SETLP SETR: CPI 'P' JNZ TEST LXI H,BUFFOFF ;Print contents of buffer JMP SETLP TEST: CPI 'T' JNZ EXIT LXI H,TSTR ;PRINT TEST CHARACTER STRING JMP SETLP EXIT: CPI 'X' JNZ PRTERR JMP EXRTN ; SETLP: SHLD INDEX ;SAVE THE CHARACTER POINTER MOV E,M ;PUT CHARACTER TO PRINT IN 'E' MOV A,E ;..INTO 'A' ALSO CPI '$' ;CHECK FOR END OF STRING JZ CHARIN ;..IF SO, GO GET ANOTHER OPTION MVI C,LSTOUT ;SEND CHARACTER TO PRINTER CALL BDOS LHLD INDEX ;GET POINTER INX H ;..INCREMENT TO NEXT CHAR. JMP SETLP ;LOOP UNTIL ALL CHARACTERS SENT ; ; PRTERR: MVI C,PRTSTR ;PRINT ERROR MESSAGE LXI D,ERRMSG CALL BDOS JMP CHARIN ;RETURN TO MENU ; ;*************** SUBROUTINES ********************** ; LCTOUC: ;Convert lower to upper case CPI 61H ;Carry flag set if < a JNC LC1 RET LC1 CPI 7BH ;Carry flag set if < { JNC LC2 SUI 20H ;Convert to upper case LC2 RET ; ; ; EXRTN - Print message and exit to CP/M EXRTN LXI D,CLS ;Clear Screen MVI C,PRTSTR CALL BDOS LXI D,EXMSG ;Exit message MVI C,PRTSTR CALL BDOS JMP BOOT ; ;*************** MESSAGES ************************* ; MENU DB CR,LF,LF,LF DB TAB,TAB,' COEX 80F/T PRINTER OPTIONS MENU' DB CR,LF,LF,LF DB ' CHARACTER SET',TAB,TAB DB ' SPECIAL PRINT MODES',CR,LF DB TAB,'A) Standard',TAB,TAB,TAB DB 'J) 4.5 Lines per inch',CR,LF DB TAB,'B) German',TAB,TAB,TAB DB 'K) 6 Lines per inch',CR,LF DB TAB,'C) English',TAB,TAB,TAB DB 'L) 8 Lines per inch',CR,LF DB TAB,'D) French',TAB,TAB,TAB DB 'M) 14/144 Inches per Line',CR,LF DB TAB,'E) Japanese',TAB,TAB,TAB DB 'N) Form Feed',CR,LF,LF DB ' PRINT SIZE',TAB,TAB,TAB DB ' MISCELLANEOUS',CR,LF DB TAB,'F) Pica - 10 cpi',TAB,TAB DB 'O) Use 2K Buffer',CR,LF DB TAB,'G) Elite - 12 cpi',TAB,TAB DB 'P) Print 2K Buffer',CR,LF DB TAB,'H) Condensed - 17 cpi',TAB,TAB DB 'T) TEST printer mode',CR,LF DB TAB,'I) Enlarged - 5,6, or 8.5 cpi',TAB DB 'X) EXIT from this program' DB CR,LF,LF DB TAB,TAB,TAB,'Enter Option: $' ; ERRMSG: DB BEL,' Invalid Character',LF,CR DB BEL,TAB,TAB,TAB,'Enter Option: $' ; CLS: DB CR,LF,'$' ;NO CLEAR SCREEN CODE IN THIS VERSION ; ; TSTR - Output to printer for Set-Up Test TSTR: DB CR,LF,TAB,'Set Up Test for COEX Printer' DB CR,LF,'abcdefghijklmnopqrstuvwxyz' DB '1234567890-=`[];\,./',CR,LF DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' DB '!@#%^&*()_+~{}:"|<>?',CR,LF,LF,'$' ; EXMSG DB 'Exiting to CP/M. . .',CR,LF,LF,'$' ; ; COEX Control Codes ; LSPC18 DB ESC,49,CR,'$' ;1/8" LINE SPACING LSPC772 DB ESC,41H,14,CR,'$' ;7/72" LINE SPACING LSPC16 DB ESC,32H,CR,'$' ;1/6" LINE SPACING LSPC45 DB ESC,65,32,CR,'$' ;16/72" Lines (4.5 lpi) ENLARG DB 14,'$' ;DOUBLE WIDE ON ; Note: a CR will cancel the enlarged mode P10CPI DB 18,CR,'$' ;PICA TYPE - 10 CPI P12CPI DB ESC,77,CR,'$' ;Elite Type - 12 CPI P17CPI DB 15,CR,'$' ;COMPRESSED (17 CPI) ON FFEED DB FF,'$' ; Form Feed CSTD DB ESC,'U',CR,'$' CGER DB ESC,'D',CR,'$' CENG DB ESC,'E',CR,'$' CFR DB ESC,'F',CR,'$' CJAP DB ESC,'J',CR,'$' BUFFON DB ESC,'X','$' BUFFOFF DB ESC,'Y','$' ; CHAR: DS 1 ;STORAGE FOR CHAR. OUTPUT INDEX: DS 2 ;CHAR. POINTER FOR SETLP ; DS 32 ;16 LEVEL LOCAL STACK ; STKTOP: END