П.И. Захаров (г. Москва)

ПРОГРАММА ПЕЧАТИ ТЕКСТОВ PRINTPZ

Купив принтер МС-6312, я столкнулся с тем, что ни одна из имеющихся у меня программ с выводом информации на печать почему-то не работает с этим принтером. Поэтому я вынужден был написать свою программу.

Я написал небольшую программу для печати текстов, подготовленных в редакторе EDASP10, а затем расширил её возможности для печати тестов, написанных на всех известных мне редакторах.

РАБОТА С ПРОГРАММОЙ

Текст программы на ассемблере набирается в редакторе типа МИКРО10, затем компилируется и компонуется с адреса 1000 в соответствии с инструкцией к редактору.

Текст в машинных кодах можно записать в память машины с адреса 1000, используя отладчик типа ОТЛ12 или непосредственно, через блок МСТД, в соответствии с ’’Руководством системного программиста" для машины БК0010.

После успешного ввода в память машины программу надо записать на магнитофон с адреса 1000 длиной 1466 байт.

Запуск программы обычный: из монитора командой S или с блоком МСТД командой 1000G.

Машина БК0010-01 соединяется с принтером МС-6312 (разъём 25-контактный) в соответствии со следующей таблицей:

БК0010

РАЗЪЁМ УП

МС-6312

ВД08

А28

1 СТР-ПИ

ВД00

А16

2 ДО

ВД01

А13

3 Д1

ВД02

BI2

4 Д2

ВД03

В10

5 ДЗ

ВД04

В5

6 Д4

ВД05

В7

7 Д5

ВД06

В6

8 Д6

ВД07

А7

9 Д7

BB08

В31

11 ЗП-ПИ

-

-

18 ТИП

BB07

А23

24,25 ОБЩИЙ

ОБЩИЙ

А18,В18

24,25 ОБЩИЙ

ГИ

А18,В18

 

Программа PRINTPZ позволяет выводить на принтер МС-6312 тексты, подготовленные в редакторах (форматах) EDASP10, МИКРО11, READER.2, DOKUM, редакторе, управляемом стрелками ВВЕРХ-ВНИЗ (. .), ФОРМАТ и МОНСТР, а также во всех разновидностях этих редакторов.

Тексты, написанные во всех редакторах, кроме EDASP10, содержат текстовую часть и служебную часть, позволяющую самостоятельно просматривать тексты на экране. Максимальная длина текстовой части файла для печати 35000 байт. Если длина текстовой части файла превышает максимальную, то излишек окажется ненапечатанным.

После загрузки и запуска программы PRINTPZ на экране появляется меню, а слева - курсор. Курсор управляется клавишами ВВЕРХ-ВНИЗ (. .). В меню перечислены форматы файлов. которые можно печатать с помощью программы PRINTPZ. Курсор следует установить против того формата, который соответствует печатаемому файлу, и нажать клавишу ВВОД. На экране появится приглашение для чтения с магнитофона файла для печати. Набрав имя файла, надо нажать ВВОД и запустить магнитофон на воспроизведение, после чего происходит считывание файла. После считывания, если принтер включён, появится сообщение:

ПЕЧАТАЕТСЯ ФАЙЛ: <ИМЯ>. Если принтер не включён, то программа находится в режиме ожидания. Если бумага заправлена, надо включить принтер. После печати программа возвращается в меню, и можно печатать следующий файл или очередную копию. Количество копий не ограничено.

ОПИСАНИЕ ПРОГРАММЫ

Программа PRINTPZ написана на ассемблере МИКРО10 для машины БК0010-01.

Блок программы, помеченный меткой MEN, содержит операторы для вывода меню и служебной строки на экран телевизора (монитора). Сами тексты записаны в конце программы в строках Т00...T12.

Блок ZAG организует загрузку текстового файла, который требуется печатать, с магнитофона в память машины.

Далее идёт блок, который копирует текстовую часть загруженного файла и отсекает его служебную часть. Параметры, определяющие текстовые части различных файлов, содержатся в Строке DAN.

Блок PRN совместно с блоком СНТ анализирует и подготавливает каждый байт печатаемого текста и передаёт его в ячейку 256.

Блок РСН передаст коды из ячейки 256 в выходной регистр ПОРТА и далее на принтер. Основу этого блока составляет программка, заимствованная из статьи Л. Радченко в журнале "Наука и жизнь" (1988. - №12.- С.90).

Подпрограмма PRВ определяет количество пробелов в текстах редакторов типа МИКРО10 и выводит их на печать.

Подпрограмма KUR задаёт управление курсором при работе в меню.

Подпрограмма PRА определяет необходимый параметр текстового файла в зависимости от положения курсора в меню.

Подпрограмма ТХТ используется для вывода строк Т0...Т12 на экран.

Строки, отмеченные метками A...DF, образуют буфер памяти для обработки адресов файла, предназначенного для вывода на печать.

Строка TAB задаёт таблицу адресов текстовых строк, выводимых в меню и служебную строку.

Более подробные пояснения приведены в комментариях в тексте программы.

 

; #######################################################
; # ПРОГРАММА PRINTPZ. РАЗРАБОТАЛ 16.12.90 ПЗ           #
; # ДЛЯ ПЕЧАТИ ТЕКСТОВЫХ ФАЙЛОВ НА ПРИНТЕРЕ МС-6312     #
; # РЕДАКТОР МИКРО10.                                   #
; #######################################################
MEN:    MOV     C214,R0         ;ОЧИСКА ЭКРАНА
        EMT     16
        EMT     16
        MOV     #232,R0         ;ОТКЛЮЧИТЬ КУРСОР
        EMT     16
        MOV     #40000,@#160    ;АДРЕС ЭКРАНА В ЯЧЕЙКУ 160.
        ADD     #14,@#160
        MOV     #T00,R4
        JSR     PC,@#163270     ;ЗАПИСЬ В СЛУЖЕБН. СТРОКУ
        MOV     #232,R0         ;ВКЛЮЧИТЬ КУРСОР
        EMT     16
        MOV     #22,R1          ;ЗАГОЛОВОК МЕНЮ
        MOV     #5,R2           ;КООРД ВЫВОДА НА ЭКРАН Т0
        EMT     24
        MOV     #T0,R1          ;АДРЕС ТЕКСТА Т0
        JSR     PC,TXT          ;ВЫВОД НА ЭКРАН ТЕКСТА Т0
        MOV     #10,R3          ;ТЕКСТ МЕНЮ: КОЛИЧ ТЕКСТОВ
        MOV     #7,R4           ;КООРД Y ТЕКСТА Т1
        MOV     #TAB,R5         ;АДРЕС ТАБЛИЦЫ АДРЕСОВ ТЕКСТОВ
1:      MOV     #26,R1          ;КООРД X ТЕКСТОВ Т1...Т10
        MOV     R4,R2           ;КООРД Y ОЧЕРЕДНОГО ТЕКСТА
        EMT     24              ;УСТАНОВКА КУРСОРА
        MOV     (R5)+,R1        ;АДРЕС ТЕКСТА
        JSR     PC,TXT          ;ВЫВОД НА ЭКРАН ОЧЕРЕДНОГО ТЕКСТА
        INC     R4              ;КООРД Y ОЧЕРЕДНОГО ТЕКСТА
        SOB     R3,1            ;ЦИКЛ ПО КОЛИЧ ТЕКСТОВ

        JSR     PC,KUR          ;ПП УПРАВЛЕНИЕ КУРСОРОМ
        JSR     PC,PRA          ;ПП ПРИРАЩЕНИЕ АДРЕСА DA
        CMP     #120,DA         ;Р=120 - ПЕЧАТЬ КОПИИ
        BEQ     PRN
        CMP     #113,DA         ;К=113 - КОНЕЦ РАБОТЫ
        BNE     ZAG
        MOV     #214,R0
        EMT     16
        EMT     16
        JMP     @#100274        ;ВЫХОД ИЗ ПРОГРАММЫ

ZAG:    MOV     #T11,R1         ;ЗАГРУЗКА ФАЙЛА: АДРЕС ТЕКСТА Т11
        JSR     PC,TXT          ;ВЫВОД НА ЭКРАН ТЕКСТА Т11
        MOV     AE,R5           ;АДРЕС ЗАГРУЗКИ
        JSR     PC,@#100536     ;ПП ЗАГРУЗЧИКА MONIT
        TSTB    @#321           ;ПРОВЕРКА ОШИБКИ СЧИТЫВАНИЯ.
        BNE     ZAG

;КОПИРОВАНИЕ ФАЙЛА В РАБОЧУЮ ОБЛАСТЬ ПАМЯТИ

        MOV     AE,AK           ;ВЫЧИСЛЕНИЕ АДРЕСА
        ADD     @#350,AK        ;КОНЦА ФАЙЛА.
        MOV     AE,AN           ;ВЫЧИСЛЕНИЕ АДРЕСА
        ADD     DA,AN           ;НАЧАЛА ФАЙЛА.
        MOV     AK,DF           ;ВЫЧИСЛЕНИЕ ДЛИНЫ
        SUB     AN,DF           ;ФАЙЛА.
        MOV     A,R1            ;КОПИРОВАТЬ
        MOV     AN,R2           ;ФАЙЛ
        MOV     DF,R0           ;С ЭКРАНА
1:      MOVB    (R2)+,(R1)+     ;НА
        SOB     R0,1            ;АДРЕС A.
        MOV     R1,AK           ;АДР КОНЦА ФАЙЛА
        DEC     AK              ;ДЛЯ ПЕЧАТИ.

PRN:    MOV     #214,R0         ;ОЧИСТКА ЭКРАНА
        EMT     16
        EMT     16
        MOV     #16,R1          ;ПЕЧАТЬ ФАЙЛА: КООРД
        MOV     #12,R2          ;ТЕКСТА Т12.
        EMT     24
        MOV     #23,@#256       ;ПЕРЕДАЧА НА ПРИНТЕР УПРАВЛЯЮЩЕГО
        JSR     PC,@#PCH        ;КОДА ДЛЯ НАСТРОЙКИ НА КОИ-8.
        MOV     #T12,R1         ;АДРЕС ТЕКСТА Т12
        JSR     PC,TXT          ;ВВОД НА ЭКРАН ТЕКСТА Т12
        MOV     #352,R1         ;ИМЯ ФАЙЛА
        JSR     PC,TXT          ;ВЫВОД НА ЭКРАН ИМЕНИ ФАЙЛА
CHT:    MOV     A,R0            ;АДРЕС НАЧАЛА ФАИЛА ДЛЯ ПЕЧАТИ
M12:    MOVB    (R0)+,@#256     ;ПЕРЕДАЧА КОДА НА ПРИНТЕР.
        TSTB    @#256           ;ПРОВЕРКА КОНЦА СТРОКИ.
        BEQ     1
        CMP     @#256,#10
        BLE     2
        CMP     @#256,#40
        BLT     1
2:      JSR     PC,PRB          ;ПЕЧАТЬ ПРОБЕЛОВ
        TSTB    R1              ;ПРОВЕРКА ПЕЧАТИ
        BEQ     M12             ;ПРОБЕЛОВ.
        CLR     DA              ;ОЧИСТКА ПАМЯТИ ПРОБЕЛОВ
        JSR     PC,@#PCH        ;ПЕЧАТЬ СИМВОЛА НА ПРИНТЕРЕ.
        CMP     R0,AK           ;ЦИКЛ ДО
        BLT     M12             ;КОНЦА ФАЙЛА.
        MOV     #14,@#256       ;ПЕРЕВОД .
        JSR     PC,@#PCH        ;ФОРМАТА.
        JMP     MEN             ;ВОЗВРАТ В МЕНЮ
1:      MOV     #12,@#256       ;ЕСЛИ КОНЕЦ СТРОКИ.
        JSR     PC,@#PCH        ;ТО ПЕРЕВОД CTPCK.M.
        MOV     #15,@#256       ;ТАБУЛЯЦИЯ СТРОКИ
        JSR     PC,@#PCH
        BR      M12

;ПП ПЕРЕДАЧА КОДОВ ИЗ БК К ПРИНТЕРУ.

PCH:    MOV     @#256,@#177714  ;ПЕ-ЧА КОДА СИМ-ЛА В ВЫХОД РЕГ ПОРТА
1:      CMP     #600,@#177714   ;ПРОВЕРКА ГОТОВНОСТИ ПРИНТЕРА.
        BNE     1
        ADD     #400,@#256      ;ЕСЛИ ДА. ТО ДОБАВИТЬ СТРОБ-И. А
        MOV     @#256,@#177714  ;ПОЛУЧЕННЫЙ КОД ПЕРЕДАТЬ В ВЫХ РЕГ.
2:      BIT     #400,@#177714   ;ПРОВЕРКА ИСЧЕЗНОВЕНИЯ СИГНАЛА
        BNE     2               ;ЗП-П ЗАПРОС ПРИЕМНИКА.
        CLR     @#256           ;ЕСЛИ ДА. ТО ОЧИСТИТЬ ЯЧЕЙКУ 256.
        RTS     PC
        HALT
PRB:    MOVB    @#256,21        ;ПП ВЫЯВЛЕНИЕ ПРОБЕЛОВ
        MOVB    #10,R2
1:      CMPB    R1,R2           ;ПРОВЕРКА НАЛИЧИЯ ПРОБЕЛОВ.
        BEQ     3
        SOB     R2,1
        BR      6
3:      CMPB    #1,DA           ;ПРОВЕРКА ПОВТОРЕНИЯ ПРОБЕЛОВ.
        BEQ     2
        MOVB    #1,DA
        BR      4
2:      ASL     R1
        ASL     R1
        ASL     R1
4:      BIC     #177400,21      ;ОЧИСТКА СТ. БАЙТА R1
5:      MOV     #40,@#256       ;ПЕЧАТЬ
        JSR     PC,@#PCH        ;ПРОБЕЛОВ.
        SOB     R1,5
6:      RTS     PC

; ПП УПРАВЛЕНИЕ КУРСОРОМ

KUR:    MOV     #25,R1          ;КООРДИНАТА  X
        MOV     #7,R2           ;КООРДИНАТА  Y
        EMT     24
5L:     EMT     6               ;ПЕРЕМЕЩЕНИЕ КУГСОРА
        CMP     #32,R0          ;ВВЕРХ
        BEQ     2L
        CMP     #33,R0          ;ВНИЗ
        BEQ     3L
        CMP     #12,R0          ;ВВОД: ВЫХОД ИЗ ПП
        BEQ     1L              ;ВЫХОД ИЗ ПЛ
        BR      5L
2L:     CMP     #7,R2           ;ОГРАНИЧЕНИЕ ВЫШЕ СТРОКИ 7
        BHIS    5L
        SUB     #1,R2
        EMT     24
3L:     CMP     #16,R2          ;ОГРАНИЧЕНИЕ НИЖЕ СТРОКИ 16
        BLOS    5L
        ADD     #1,R2
        EMT     24
        BR      5L
1L:     RTS PC

;ПП ПРИРАЩЕНИЕ АДРЕСА DA

PRA:    MOV     #7,R3           ;КООРД Y ДАННЫХ
        MOV     #DAN,R4         ;АДРЕС ДАННЫХ
2:      MOV     (R4)+,DA        ;ПРИРАЩЕНИЕ АДРЕСА DA
        CMP     R3,R2           ;СРАВНЕНИЕ КООРДИНАТ
        BEQ     3
        INC     R3              ;УВЕЛИЧЕНИЕ КООРДИНАТЫ Y
        BR      2
3:      RTS     PC

TXT:    CLR     R2              ;ПП ЧТЕНИЕ ТЕКСТА
        EMT     20
        RTS     PC              ;ВЫХОД ИЗ ПП ТЕКСТ

DAN:    .#0 .#376 .#250 .#166 .#2452 .#2124 .#120 .#113 .E
TAB:    .#T1 .#T2 .#T3 .#T4 .#T5 .#T6 .#T7 .#T10 .E .E

A:      .#3000                  ;РАБОЧИЙ АДРЕС ФАЙЛА
AE:     .#40000                 ;АДРЕС ЗАГРУЗКИ ФАЙЛА
AN:     .+2
AK:     .+2
DA:     .+2
DF:     .+2 .E .E
T00:    .A: PRINTPZ $ П.И.ЗАХАРОВ $ МОСКВА $ 1991.
        .B:0
T0:     .A: ФОРМАТ ФАЙЛА ДЛЯ ПЕЧАТИ:
        .B:0
T1:     .A: EDASP10, МИКРО11
        .B:0
T2:     .A: READER.2
        .B:0
T3:     .A: DOCUM
        .B:0
T4:     .A: СТРЕЛКИ ВВЕРХ-ВНИЗ
        .B:0
T5:     .A: "ФОРМАТ"
        .B:0
T6:     .A: МОНСТР
 .      .B:0
T7:     .A: -$- ПЕЧАТЬ СЛЕДУЮЩЕЙ КОПИИ
        .B:0
T10:    .A: -$- КОНЕЦ РАБОТЫ
        .B:0
T11:    .B:14 .B:12 .A: ЧТЕНИЕ ФАЙЛА С МАГНИТОФОНА :
        .B:40 .B:0
T12:    .A: ПЕЧАТАЕТСЯ ФАЙЛ :
        .B:40 .B:0 .E .E
EN:      END

Скачать исходник, как текстовый файл

012700

000214

104016

104016

012700

000232

104016

012737

040000

000160

062737

000014

000160

012704

002104

004737

163270

012700

000232

104016

012701

000022

012702

000005

104024

012701

002154

004767

000716

012703

000010

012704

000007

012705

002040

012701

000026

010402

104024

012501

004767

000664

005204

077311

004767

000530

004767

000622

022767

000120

000726

001463

022767

000113

000716

001006

012700

000214

104016

104016

000137

100274

012701

002375

004767

000604

016705

000656

004737

100536

105737

000321

001365

016767

000640

000642

063767

060350

000634

016767

000624

000624

066767

000624

000616

016767

000614

000616

166767

000604

000610

016701

000572

016702

000572

016700

000574

112221

077002

010167

000560

005367

000554

012700

000214

104016

104016

012701

000016

012702

000012

104024

012737

000023

000256

004737

001522

012701

002436

004767

000426

012701

000352

004767

000416

016700

000466

112037

000256

105737

000256

001432

023727

000256

000010

003404

023727

000256

000040

002422

004767

000140

105701

001757

005067

000430

004737

001522

020067

000416

002750

012737

000014

000256

004737

001522

000167

177304

012737

000012

000256

004737

001522

012737

000015

000256

004737

001522

000726

013737

000256

177714

022737

000600

177714

001374

062737

000400

000256

013737

000256

177714

032737

000400

177714

001374

005037

000256

000207

000000

113701

000256

112702

000010

120102

001402

077203

000423

122767

000001

000252

001404

112767

000001

000242

000403

006301

006301

006301

042701

177400

012737

000040

000256

004737

001522

077106

000207

012701

000025

012702

000007

104024

104006

022700

000032

001407

022700

000033

001413

022700

000012

001417

000765

022702

000007

103362

162702

000001

104024

000756

022702

000016

101753

062702

000001

104024

000747

000207

012703

000007

012704

002016

012467

000076

020302

001402

005203

000772

000207

005002

104020

000207

000000

000376

000250

000166

002452

002124

000120

000113

000000

002206

002230

002242

002251

002275

002307

002317

002353

000000

000000

003000

040000

000000

000000

000000

000000

000000

000000

050040

044522

052116

055120

022040

170040

164456

175056

054101

050101

041117

022040

046440

041517

041113

020101

020044

034461

030471

000056

163040

050117

040515

020124

040746

166352

020101

166344

020361

042760

040776

164524

000072

042440

040504

050123

030061

020054

164515

050113

030517

000061

051040

040505

042504

027122

000062

042040

041517

046525

020000

052103

042520

045754

020351

041102

050105

026530

044102

175351

020000

163042

050117

040515

021124

020000

047515

041510

050124

020000

022055

020055

042760

040776

174124

041440

042754

172744

176740

165105

045440

170117

164751

020000

022055

020055

047513

042510

020343

040520

047742

174524

006000

020012

052376

044105

042751

163040

165101

040754

041440

046440

163501

164510

047524

047746

040510

035040

000040

170040

177105

052101

042501

041524

020361

040746

166352

035040

000040

000000

000000

 

 

 

 

 

 

Performed by © gid, 2012-2022.