ZX-Ревю 1996 №7-8 1995 г.

Читатель - читателю - программа печати крупноформатных изображений.


           ПРОГРАММА ПЕЧАТИ КРУПНОФОРМАТНЫХ ИЗОБРАЖЕНИЙ

   (С) Харлов Александр,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



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Coding - Обработка ошибок TR-DOS при работе через #3D13.
Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.
Приветы - И напoслeдoк нeмнoгo oб автoрах.
newspaper - лучшая газета на спектруме
Новинки - MICROEDITOR v.3.09, PCX - VIEW, Spectrofon to ZX-Word coder, FAST READER, The Fast Packet v1.0x, RETURN TO HOME 4, STRIP REVERSI, MORTAL KOMBAT,

В этот день...   29 марта