;/////////////////////////////////////////////////////////////////////// ; Функция #5F. Вывод символа на принтер без ожидания. ; ; Интерпретация байта состояния принтера: ; 0..2 - не используются, обычно уст. в "1" ; 3 - ошибка принтера - есть/нет (1/0) ; 4 - принтер подключен/не подключен (1/0) ; 5 - бумаги нет/есть (1/0) ; 6 - принтер готов/выводит очередной символ (1/0) ; 7 - принтер свободен/занят (1/0) ; ; вход: A - символ ; выход: B - символ ; CF - ошибка, A=байт состояния (биты 7..3) ;/////////////////////////////////////////////////////////////////////// Z84_SP: .LPT_A EQU Z84.SIO.Ch_B.Ctrl .LPT_B EQU Z84.PIO.Port_A.Data .LPT1_C EQU Z84.PIO.Port_A.Command .LPT2_D EQU Z84.PIO.Port_B.Data .LPT2_C EQU Z84.PIO.Port_B.Command ; PRINT: AND A LD B,A ; сохраняем символ ; LD A,R DI PUSH AF ; reg 0 XOR A OUT (Z84_SP.LPT_A),A LD A,%0001'0000 ; Reset EXT/STATUS interrupts OUT (Z84_SP.LPT_A),A XOR A OUT (Z84_SP.LPT_A),A IN A,(Z84_SP.LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack LD C,A BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select JR NZ,.LPTBUSY AND %11011000 JR Z,.LPTBUSY LD A,B ; восстанавливаем символ OUT (Z84_SP.LPT_B),A POP AF RET PO EI RET ; .LPTBUSY: POP AF LD A,C SCF RET PO EI RET ; ; ; ; B - SYMBOL ; CF = 1 - PRINTER BUSY PRINT_INIT: DI LD A,#CF ; port #1F только чеpез LD BC,1F : Out (BC),reg (в альтере идёт перехват этого порта проца, если он в команде явно указан) LD BC,Z84_SP.LPT2_C OUT (C),A ;[x] 29/9/23 ;LD A,#63 LD A,63 ; OUT (C),A LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) OUT (Z84_SP.LPT2_D),A LD A,#0F ; Init printer port for Out OUT (Z84_SP.LPT1_C),A RET ;///////////////////////////////////////////////////////////////////////