|
Читатель - читателю - программа печати крупноформатных изображений.
|
ПРОГРАММА ПЕЧАТИ КРУПНОФОРМАТНЫХ ИЗОБРАЖЕНИЙ
(С) Харлов Александр,1996г. Дмитровград
В одном из номеров ZX-РЕВЮ была напечатана статья "Печать крупноформатных
изображений". Я предлагаю аналогичную программу. Ее отличие в том, что печать
происходит без поворота изображения. Так же возможна печать до шести экранов в
ряд, можно изменять плотность печати.
Перед печатью экранные файлы должны быть переименованы. Первые шесть символов
имен файлов должны быть одинаковыми. Последние два символа - координаты экрана
при печати X и Y. Программа на бейсике автоматически загружает необходимые
файлы. Во время процесса печати в дисководе всегда должен быть диск с
печатаемыми файлами.
Программа в машинных кодах рассчитана на интерфейс принтера на основе порта
ВВ55. Для ZX LPRINT III надо изменить строки 900 - 930 и 1120 - 1230, как в
предыдущей статье. Программа отслеживает пустые строки и пропускает их. Если
Ваш принтер не поддерживает режим изменения плотности (27,*,x), то надо
изменить бейсик-программу и 150 - 180 строки в программе в машинных кодах.
Автоматическая загрузка файлов позволяет печатать в каждом ряду разное
количество экранов.
00010 ; BIGPRINT
00020 ; Kharlov A. 1996
00030 ENT
00040 ORG 26500
00050 DI
00060 LD HL,(graph)
00070 LD B,3 ; количество третей экрана.
00080 loop1 LD C,8 ; количество строк в 1 трети.
00090 loop2 PUSH BC
00100 PUSH HL
00110 LD DE,(bufer) ; инициализация
00120 LD (buf),DE ; буфера.
00130 LD A,27 ; установка графического режима.
00140 CALL wbuf
00150 LD A,42
00160 CALL wbuf
00170 LD A,(dens)
00180 CALL wbuf
00190 XOR A
00200 CALL wbuf
00210 LD A,(kx)
00220 LD E,A
00230 CALL wbuf
00240 XOR A ; обнуление контрольного байта.
00250 LD (opt),A
00260 lp1 LD D,32 ; количество байт в строке.
00270 lp2 LD B,8 ; "перевертывание" восьми байт
00280 lp3 LD A,1 ; блока экрана с занесением
00290 lp4 RLC (HL) ; в буфер.
00300 INC H
00310 RLA
00320 JR NC,lp4
00330 CALL wbuf
00340 LD A,H
00350 SUB 8
00360 LD H,A
00370 DJNZ lp3
00380 INC HL
00390 DEC D
00400 JR NZ,lp2
00410 LD BC,6112 ; переход на следующий экран.
00420 ADD HL,BC
00430 DEC E
00440 JR NZ,lp1
00450 LD A,(opt) ; проверка на пустую строку.
00460 OR A
00470 JR NZ,op
00480 LD HL,(bufer) ; инициализация буфера.
00490 LD (buf),HL
00500 op LD A,13 ; возврат каретки и перевод строки.
00510 CALL wbuf
00520 LD A,10
00530 CALL wbuf
00540 CALL prbuf ; печать буфера.
00550 POP HL
00560 LD DE,32 ; переход на следующую строку экрана.
00570 ADD HL,DE
00580 POP BC
00590 DEC C
00600 JR NZ,loop2
00610 LD DE,1792 ; переход на следующую треть экрана.
00620 ADD HL,DE
00630 DEC B
00640 JR NZ,loop1
00650 EI
00660 RET
00670 wbuf PUSH HL ; запись в буфер.
00680 LD HL,(buf)
00690 LD (HL),A
00700 LD A,(opt) ; получение байта для проверки
00710 OR (HL) ; на пустую строку.
00720 LD (opt),A
00730 INC HL
00740 LD (buf),HL
00750 POP HL
00760 RET
00770 prbuf LD DE,(buf) ; печать буфера.
00780 LD HL,(bufer) ; начало буфера.
00790 next LD A,(HL)
00800 CALL print ; вывод байта на принтер.
00810 INC HL
00820 LD A,L ; сравнение HL и DE, если не равны,
00830 XOR E ; то продолжать.
00840 JR NZ,next
00850 LD A,H
00860 XOR D
00870 JR NZ,next
00880 RET
00890 init DI ; инициализация принтера.
00900 LD A,#98 ; управляющее слово для ВВ55.
00910 OUT (#7F),A
00920 LD A,1 ; STROBE = 1.
00930 OUT (#5F),A
00940 LD A,27 ; установка интервала 24/216.
00950 CALL print
00960 LD A,51
00970 CALL print
00980 LD A,(inter)
00990 CALL print
01000 LD A,13 ; перевод строки.
01010 CALL print
01020 LD A,10
01030 CALL print
01040 LD A,27 ; возврат назад на одну строку.
01050 CALL print
01060 LD A,106
01070 CALL print
01080 LD A,(inter)
01090 CALL print
01100 EI
01110 RET
01120 print OUT (#3F),A ; байт данных.
01130 wait LD A,127 ; проверка "пробела".
01140 IN A,(254)
01150 RRA
01160 RET NC
01170 IN A,(#5F) ; контроль BUSY.
01180 RLA
01190 JR C,wait
01200 XOR A
01210 OUT (#5F),A ; STROBE = 0.
01220 LD A,1
01230 OUT (#5F),A ; STROBE = 1.
01240 RET
01250 graph DEFW 27000 ; адрес данных.
01260 bufer DEFW 63900 ; адрес буфера.
01270 buf DEFW 0 ; текущий адрес буфера.
01280 kx DEFB 1 ; количество экранов по X.
01290 inter DEFB 24 ; интервал между строками.
01300 dens DEFB 0 ; плотность.
01310 opt DEFB 0
Машинокодовая процедура работает под управлением бейсик программы.
10 BORDER 1: PAPER 1: INK 7: CLEAR 26499
20 RANDOMIZE USR 15619: REM: LOAD "bigprint" CODE
30 LET n$="screen": LET x=1: LET y=1: LET d=0
50 CLS: PRINT AT 5,5;"1. Cat"'" 2. File:";n$;"**"'" 3
. Density:";d;'" 0-60 1-120"'" 2-120' 3-240"'"
4-80 5-72"'" 6-90"'" 4. Print"
60 LET k$=INKEY$: IF k$="" THEN GO TO 60
100 IF k$="2" THEN GO TO 200
110 IF k$="3" THEN GO TO 250
120 IF k$="4" THEN GO TO 300
130 IF k$<>"1" THEN GO TO 60
140 RANDOMIZE USR 15619: REM: CAT
150 PAUSE 0: GO TO 50
200 INPUT " Name:";n$: IF LEN n$>6 THEN GO TO 200
210 IF LEN n$<6 THEN LET n$=n$+" ": GO TO 210
220 GO TO 50
250 INPUT " Density:";d: IF d>6 OR d<0 THEN GO TO 250
260 GO TO 50
300 INPUT " Print (y/n)? ";k$: IF k$<>"y" AND k$<>"Y" THEN GO TO 50
310 POKE 26745,d: RANDOMIZE USR 26663
350 LET y=1
370 LET a=27000: LET x=1
380 LET f$=n$+CHR$ (y+48)+CHR$ (x+48): LET er=USR 15619: REM: LOAD
f$CODE a,6144
390 IF er<>0 AND x<>1 THEN GO TO 430
400 IF er<>0 AND x=1 THEN GO TO 50
410 LET a=a+6144: LET x=x+1
420 IF x<7 THEN GO TO 380
430 POKE 26743,(x-1): RANDOMIZE USR 26500
440 LET y=y+1: GO TO 370
9999 RANDOMIZE USR 15619: REM: SAVE "BIGPRINT" LINE 10
СОДЕРЖАНИЕ:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Форум-Игры - В разделе рассмотрены: Burry, McGuian World Champion, Sword&Sorcery, Marsport, Master of Magic, Colony, Firelord, Tai-Pan, The Spectre, Rebel Star, Dr.What, Rescue, Vatman, Iron Man, Seymour at the Movies, Wild West Seymour Adventures, Venturama, Livingstone 2, Total Eclipse 2, Dizzy 6, Elite, Street Hassle.
-
Перекресток - В разделе рассмотрены: Mysterious Adventure N11, Temple of Terror, Witch Cauldron, Smok Wawelski, ID, Eric the Viking, Golden Apple, Famous Five, Emerald Island,Magnetic Moon 1, Shadows of Mordor, Quest Adventure, Sam Spoon, Snowball, Slain the King, Lancelot, MindFighter, The Legend of Apache Gold, Звёздное Наследие, Return to Eden.
-
-
-
-
-
-
-
-
|
|