П.И. Захаров (г. Москва)
ПРОГРАММА ПЕЧАТИ ТЕКСТОВ 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 |
|
|
|
|
|