;THIS IS A TEST PROGRAM TO SEE IF I CAN PRINT TO MY
;EPSON PRINTER VIA THE PARALLEL PORT
;EPSON.ASM 2/20/2021
;THE PROGRAM FIRST SET UP THE PPI THIS CAUSES THE OUTPUT TO HIZ
;THIS CAUSES THE EPSON TO BE NOT READY AND OFFLINE
;pORT c2 IS THEM PULSED TO RESET THE EPSON THIS PUTS IT READY
;AND ONLINE THE SELECT C0 IS SET LOW
;NEXT LOOP WAITS FOR NOT BUSY (LOW) AND ACK HIGH
;WHEN THE PRINTER IS READY FOR DATA ASCII LETTERS Z-A SHOULD BE
;PRINTED THE Z IS PREPARED AND OUTPUTED NEXT STROBE C1 IS PULSED
;LOW/HIGH THE DATA LETTER IS CHANGED TO Y AND JUMPED TO LOOP
006C = PORTA EQU 06CH ;PORTA DATA OUT
006D = PORTB EQU 06DH ;PORTB STATUS IN
006E = PORTC EQU 06EH ;PORTC CTRL OUT
006F = PORTCR EQU 06FH ;MODE=0
;INPUT TO CPU
;BO = BUSY LOW = NOT BUSY
;B1 = ASKNLG HIGH = READY FOR TRANSFER
;OUTPUT TO CPU
;C0 = PLACE ON LINE, ALLOW PRINTING
;C1 = STROBE LOW = TRANSFER DATA 7 SET BUSY
;C2 = RESET LOW = RESET
0100 ORG 0100H
0100 310020 LXI SP,02000H ;SET STACK
;SET PPI FPR PORTA AS OUTPUT (DATA)
;PORTB AS INPUT (STATUS)
;PORTC AS OUTPUT (CONTROL)
START:
0103 3E82 MVI A,082H ;1000 0010
0105 D36F OUT PORTCR ;PROGRAM PPI
;PULSE PORT C2 TO RESET PRINTER TO READY & ONLINE
0107 3E03 MVI A,03H ;RESET
0109 D36E OUT PORTC
010B 3E07 MVI A,07H ;PULSE C2
010D D36E OUT PORTC
;TEST DATA WILL BE 26 CHARACTERS Z TO A
;START WITH Z AND SUBTRACT ONE UNTIL REG B IS ZERO
010F 0E41 MVI C,'A' ;TEST CHARACTER
0111 0619 MVI B,019H ;ADD 019H TO MAKE Z
;DEC REG B TO MAKE ONE LESS LETTER
;WAIT HERE FOR PRINTER TO BE NOT BUSY AND ACK HIGH
LOOP:
0113 DB6D IN PORTB ;B0 = BUSY = HIGH, NOT BUSY = LOW
0115 E603 ANI 03H ;B1 = ACK = HIGH FOR TRANSFER
0117 FE02 CPI 02H
0119 C21301 JNZ LOOP
;SET PRINTER SELECTIN LOW
011C 3E07 MVI A,07H ;SET C0 SELECT LOW
011E D36E OUT PORTC
;OUTPUT CHARACTER TO PRINT
0120 79 MOV A,C ;MOVE DATA
0121 80 ADD B
0122 D36C OUT PORTA
;PULSE PRINTER STROBE HIGH/LOW/HIGH
0124 3E05 MVI A,05H ;STROBE LOW
0126 D36E OUT PORTC
0128 00 NOP
0129 00 NOP
012A 3E07 MVI A,07H
012C D36E OUT PORTC ;STROBE HIGH
;PREPARE NEXT CHARACTER
012E 05 DCR B
012F C21301 JNZ LOOP
;QUIT
0132 C30000 JMP 00H
0135 END