TITLE '92A OKIDATA PRINTER UTILITY 27 APRIL 83' ; ; USE ASM OR MAC TO ASSEMBLE ; FROM SETOK HAVE SOME FUN ; COMMAND CHARACTERS FOR THE OKIDATA PRINTER: ; ; GENERAL EQU'S ; BDOS EQU 5 ;SYSTEM CALL ENTRY POINT CONIN EQU 1 ;GET KEYBOARD CHARACTER CR EQU 0DH ;CONTROL-M FOR CARRIAGE RETURN CONOUT EQU 2 ;CRT OUTPUT ROUTINE CTLC EQU 3 ;CONTROL-C TO TERMINATE ESC EQU 1BH ;ESCAPE CHARACTER LF EQU 0AH ;CONTROL-J FOR LINE FEED LIST EQU 5 ;LIST DEVICE OUTPUT STRING EQU 9 ;PRINT STRING ON CONSOLE TAB EQU 09H ;CONTROL-I FOR HORIZONTAOL TAB CLEAR EQU 1AH ;CLEAR SCREEN COMMAND ; ORG 100H ; JMP START ;JUMP INTO PROGRAM ; ; DATA STRINGS TO CONTROL OKIDATA 92A PRINTER ; CPI5: DB 30,31,0 ;5 CPI DOUBLE PRINT CPI6: DB 28,31,ESC,'6',0 ;6 CPI DOUBLE PRINT CPI8: DB 29,31,ESC,'6',0 ;8.5 CPI DOUBLE PRINT PRTSEL: DB 17,ESC,'0' ;SELECT PRINTER CPI10: DB 30,ESC,'6',0 ;10 CPI, NORMAL CPI12: DB 28,ESC,'6',0 ;12 CPI, NORMAL CPI17: DB 29,ESC,'6',0 ;17 CPI, NORMAL CORA: DB ESC,'1',0 ;CORESPONDENCE PRINT DATAP: DB ESC,'0',0 ;DATA PROCESSING PRINT LPI6: DB ESC,'6',0 ;6 LINES PER INCH LPI8: DB ESC,'8',0 ;8 LINES PER INCH TURNUP: DB CR,LF,'$' ; ; ; SIGN-ON MESSAGE ; SOM: DB 1AH,LF,LF,LF,LF,LF,LF DB TAB,'OKIDATA 92A Printer options ' DB TAB,'27 April 83 HT',LF,LF DB CR,TAB,'STRING AS MANY NUMBERS AS YOU LIKE',LF DB CR,TAB,TAB,'BEFORE YOU HIT A C/R',LF DB CR,LF,TAB,TAB,'0 = DEFALT TO 10 CPI' DB CR,LF,TAB,TAB,'1 = 5 CPI Double Size ' DB CR,LF,TAB,TAB,'2 = 6 CPI Double Size ' DB CR,LF,TAB,TAB,'3 = 8.5 CPI Double Size ' DB CR,LF,TAB,TAB,'4 = 10 CPI, Normal' DB CR,LF,TAB,TAB,'5 = 12 CPI, Normal' DB CR,LF,TAB,TAB,'6 = 17 CPI, Normal' DB CR,LF,TAB,TAB,'7 = Correspondence Print' DB CR,LF,TAB,TAB,'8 = Data Processing Print' DB CR,LF,TAB,TAB,'9 = 6 Vertical lines per inch' DB CR,LF,TAB,TAB,'A = 8 Vertical lines per inch' DB CR,LF,LF,LF,LF,TAB,'Select: ' DB '$' ; START: LXI SP,STACK ;SET UP STACK LXI D,SOM ;SIGNON MESSAGE CALL DSTRNG ;SHOW ON THE CRT LXI H,PRTSEL ;SET THE PRINTER TO NORMAL CONDITIONS JMP PSTRNG ; SELECT: CALL INPUT ;GET A CHAR. ; CPI '0' ;RESET TO DEFAULT PARAMETERS LXI H,PRTSEL ;TURN PRINTER ON and 10 CPI JZ PSTRNG ; CPI '1' LXI H,CPI5 ; 5 CPI DOUBLE PRINT JZ PSTRNG ; CPI '2' LXI H,CPI6 ; 6 CPI DOUBLE PRINT JZ PSTRNG ; CPI '3' LXI H,CPI8 ; 8.5 CPDOUBLE PRINT JZ PSTRNG ; CPI '4' LXI H,CPI10 ; 10 CPI, NORMAL JZ PSTRNG ; CPI '5' LXI H,CPI12 ; 12 CPI, NORMAL JZ PSTRNG ; CPI '6' LXI H,CPI17 ; 17 CPI, NORMAL JZ PSTRNG ; CPI '7' LXI H,CORA ; CORRESPONDENCE PRINT JZ PSTRNG ; CPI '8' LXI H,DATAP ; DATA PROCESSING PRINT JZ PSTRNG ; CPI '9' LXI H,LPI6 ; 6 VERTICAL LINES PER INCH JZ PSTRNG ; CPI 'A' LXI H,LPI8 ; 8 VERTICAL LINES PER INCH JZ PSTRNG ; JMP SELECT ;IF NONE OF THESE, ASK AGAIN ; ; ; ROUTINES START HERE ; ; EXIT: LXI D,TURNUP ;TURN UP SOME EXTRA LINES CALL DSTRNG ;DISPLAY ON THE CRT ; EXIT1: JMP 0 ;FILLED BY 'START' FOR RETURN TO 'CCP' ; ; GET A KEYBOARD CHARACTER ; INPUT: MVI C,CONIN ;KEYBOARD ROUTINE CALL BDOS ANI 7FH ;STRIP AWAY ANY PARITY CPI CTLC ;CONTROL-C? JZ EXIT ;IF YES, ALL FINISHED CPI CR ;CONTROL-M FOR RETURN? JZ EXIT ;IF YES, ALL FINISHED RET ; ; DISPLAY A STRING ON THE CRT ; DSTRNG: MVI C,STRING ;CONSOLE STRING ROUTINE JMP BDOS ;SEND TO THE CRT ; ; PRINT A STRING OF CHARS. ON THE OKIDATA 92A ; PSTRNG: MOV A,M ;GET THE CHARACTER IN THE STRING ORA A ;SEE IF FINISHED YET JZ SELECT ;GET NEW ANSWER IF ZERO ; PUSH H ;SAVE THE ADDRESS IN THE STRING MVI C,LIST ;PRINTER ROUTINE MOV E,A ;PUT THE CHAR. INTO 'E' REG. CALL BDOS ;SEND TO THE PRINTER POP H ;BACK TO THE STRING ADDRESS INX H ;NEXT LOCATION JMP PSTRNG ;DO THE NEXT ONE ; ; ; STACK AREA ; DS 20H ;ALLOW ROOM FOR STACK ; STACK DS 0 ; END