≡ Передовица » Макулатура » ИиО » Цветная печать на АГАТе
Цветная печать на АГАТе (N5/1987)Е. ГОПЕНГАУЗ. г. Электросталь, средняя школа N 20, X класс. Группа сайта просит вас связаться с нами! (ЗАЧЕМ ЭТО?) Имея комплект «Агата» с принтером, трудно удержаться от соблазна печатать на нём рисунки. Система команд принтеров CPA-80, D-100 и EPSON FX-85, которые поставляются обычно с «Агатом», позволяет использовать так называемый растровый режим (bit image mode), в котором поступающий в буфер байт несёт информацию о состоянии всех проволочек печатающей головки. Конечно, хочется использовать этот режим, но: стандартный драйвер CPAD100 не пропускает 7-й (самый старший) бит, который необходим для передачи как графической, так и некоторой управляющей информации; удобнее, естественно, распечатывать рисунки, созданные в видеопамяти «Агата», а не задавать отдельные массивы данных. Эти трудности решает программа ALVPR, преобразующая в данные для принтера чёрно-белую картинку второй страницы в высшем графическом формате и управляющая её выводом на принтер. На этом можно было бы и успокоиться, но возникло желание печатать и цветные картинки. Естественно, передать цвета можно лишь условно, кодируя полихромные точки совокупностью монохромных (цвета ленты). Предлагаемый алгоритм преобразует 8К байт цветного изображения среднего графического режима в 8К байт высшей графики той же страницы, кодируя каждый цветной пиксел соответствующим чёрно-белым квадратом 2*2. Для начала вспомним, что одна цветная точка несёт в себе 4 бита информации, а монохромная - только 1 (таким образом, для ГСР и для ГВР нужно 4*(128*128)/(8*1024) = 1*(256*256)/(8*1024)= 8K байт ОЗУ). Задача сводится к следующему: взять одну из тетрад цветного изображения, разбить её на две части по 2 бита и перенести их «друг под другом» в соответствующие байты чёрно-белого формата. Так как области памяти ГСР-2 и ГВР-2 совпадают, то необходим небольшой буфер длиной в одну цветную строку (адреса $6000-$603F). Вот как выглядит преобразование байта с адресом $4000, если условно обозначить каждый бит цифрой: -+---------+- $4000: !7654 3210! -+---------+- -+-----------+- $4000: !76 32 ** **! -+-----------+- $4020: !54 10 ** **! -+-----------+- Таким образом, из двух точек (7654) и (3210) формата ГСР получилось восемь точек в ГВР, условно распределенных по квадратам 2*2. Детализировать алгоритм вряд ли стоит: любознательный читатель может самостоятельно в нём разобраться по предлагаемой распечатке дизассемблера программы USLPR. Как её использовать? Поместив во вторую графическую страницу полихромное изображение (созданное, например, программой GREDIT, автор - В.Г. Яблонский), включите принтер, вставьте лист бумаги и запустите USLPR на счёт. Если же вам нужно только преобразование, отделите ALVPR, входящую в её состав, командой RTS: 61B2- 60 RTS Дизассемблер текста USLPR *** Инициализация: *** 6100- A9 01 LDA #$01 6102- 85 0F STA $0F 6104- A9 FF LDA #$FF 6106- 85 09 STA $09 6108- 85 0B STA $0B 610А- A9 3F LDA #$3F 610C- 85 ОС STA $0C 610F- 85 0A STA $0A 6110- A9 FF LDA #$FF 6112- 85 07 STA $07 6114- A9 5F LDA #$5F 6116- 85 08 STA S08 6118- EA NOP *** Непосредственно текст: *** 6119- E6 0B INC $0B 611B- D0 02 BNE $611F 611D- E6 0C INC $0C 611F- A0 00 LDY #$00 6121- B1 0B LDA $0B), 6123- 85 00 STA $00 6125- 29 C0 AND #$C0 6127- 85 01 STA $01 6129- A5 00 LDA $00 612B- 29 0C AND #$0C 612D- 2A ROL 612E- 2A ROL 612F- 05 01 ORA $01 6131- 85 03 STA $03 6133- A5 00 LDA $00 6135- 29 30 AND #$30 6137- 6A ROR 6138- 6A ROR 6139- 85 02 STA S02 613B- A5 00 LDA $00 613D- 29 03 AND #$03 613F- 05 02 ORA $02 6141- R5 04 STA $04 6143- A5 OF LDA $0F 6145- F0 14 BEQ $615B 6147- A5 03 LDA $03 6149- 85 05 STA $05 614B- A5 04 LDA $04 614D- 2A ROL 614E- 2A ROL 614F- 2A ROL 6150- 2A ROL 6151- 85 06 STA $06 6153- A9 00 LDA #$00 6155- R5 OF STA $0F 6157- 4C 19 61 JMP $6119 615A- EA NOP 615B- E6 07 INC $07 615D- D0 02 BNE $6161 615F- E6 08 INC $08 6161- A5 03 LDA $03 6163- 6A ROR 6164- 6A ROR 6165- 6A ROR 6166- 6A ROR 6167- 05 05 ORA $05 6169- A0 00 LDY #$00 616B- 91 07 STA ($07),Y 616D- A5 04 LDA $04 616F- 05 06 ORA $06 6171- A0 20 LDY #$20 6173- 91 07 STA ($07),Y 6175- A9 01 LDA #$01 6177- 85 OF STA $0F 6179- A5 07 LDA $07 617B- C9 1F CMP #$1F 617D- D0 9A BNE $6119 617F- EA NOP 6180- А9 FF LDA #$FF 6182- 85 07 STA $07 6184- А9 5F LDA #$5F 6186- 85 08 STA $08 6188- А0 41 LDY #$41 618A- 88 DEY 618B- F0 08 BEQ $6195 61RD- B1 07 LDA ($07),Y 618F- 91 09 STA ($09),Y 6191- 4C 8A 61 JMP $618A 6194- EA NOP 6195- A5 0A LDA $0A 6197- C9 5F CMP #$5F 6199- D0 07 BNE $61A2 619B- A5 09 LDA $09 619D- C9 BF CMP #$BF 619F- F0 10 BEQ $61B1 61A1- EA NOP 61A2- 18 CLC 61A3- A5 09 LDA $09 61A5- 69 40 ADC #$40 61A7- 85 09 STA $09 61A9- 90 02 BCC $61AD 61AB- E6 0A INC $0A 61AD- 4C 19 61 JMP $6119 61B0- FA NOP 61B1- FA NOP 61B2- FA NOP Дизассемблер текста ALVPR (автор - А.Голов, ЛЭМЗ) 61BЗ- А2 03 LDX #$03 61B5- BD 29 61 LDA $6129, X 61B8- 20 0A 61 JSR $610A 61BB- CA DFX 61BC- 10 E7 BPL $61B5 61BE- A9 40 LDA #$40 61СО- 85 01 STA $01 61C2- А9 20 LDA #$20 61С4- 85 02 STA $02 61С6- А0 00 LDY #$00 61C8- 84 00 STY $00 61СА- А2 05 LDX #$05 61CC- BD 2D 62 LDA $622D,X 61CF- 20 0A 62 JSR $620A 61D2- CA DEX 61D3- 10 F7 BPL $61CC 61D5- A9 00 LDA #$00 61D7- 85 03 STA $03 61D9- А0 00 LDY #$00 61DB- 84 04 STY $04 61DD- А6 03 LDX $03 61DF- B1 00 LDA ($00),Y 61E1- 0A ASL 61Е2- CA DEX 61E3- 10 FC BPL $61E1 61E5- 26 04 ROL $04 61E7- 18 CLC 61E8- 9B TYA 61E9- 69 20 ADC #$20 61ЕВ- A8 TAY 61EC- D0 EF BNE $61DD 61EE- А5 04 LDA $04 61F0- 20 0A 62 JSR $620A 61F3- F6 03 INC $03 61F5- А5 03 LDA $03 61F7- С9 08 CMP #$08 61F9- 90 DE BCC $61D9 61FB- Е6 00 INC $00 61FD- А5 00 LDA $00 61FF- С9 20 CMP #$20 6201- 90 D2 BCC $61D5 6203- Е6 01 INC $01 6205- С6 02 DEC $02 6207- D0 BD BNE $61C6 6209- 60 RTS 620A- 8D D0 C0 STA $C0D0 620D- CD D0 C0 CMP $C0D0 6210- F0 08 BEQ $621A 6212- A9 89 LDA #$89 6214- 8D D3 C0 STA $C0D3 6217- 20 20 62 JSR $6220 621A- AD D2 C0 LDA $C0D2 621D- 30 FB BMI $621A 621F- 0A ASL 6220- 8D D1 C0 STA $C0D1 6223- A9 C0 LDA #$C0 6225- 8D D1 C0 STA $C0D1 6228- 60 RTS Для программы ALVPR необходимы данные: 6229- 08 41 1В 10 01 00 4В 1В 09 0A F7 Образец работы алгоритма Примечание. В распечатку вкралась ошибка: во второй и третьей строках программы ALVPR вместо 61 должно стоять 62. * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |