Odyssey Magazine #02
14 июля 1997

Почта - Процедура пропорциональной печати.

<b>Почта</b> - Процедура пропорциональной печати.
   Итак,последняя рассматриваемая проблема
- пропорциональная печать.
Она  была  сделана очень давно и не совсем
быстрая,  точнее,  совсем  не  быстрая, но
все-таки  обгоняет  печать в ZX-Ревю.(хотя
это  уже  совсем  менее удачное сравнение.
Там она эмулирует RST#10)
 Печать  ведется  с  точностью до пиксела,
поэтому  если ее привязать к строкам по Y,
то печать должна значительно оживится. Еще
один вариант: использование стека.

Первый байт знакогенератора пропорциональ-
ной  печати содержит ширину символа. Кроме
того,  символ  в  знакогенераторе прижат к
правой  границе для минимизации количества
ротаций при печати. Фонт взят из процедуры
пропорциональной  печати, опубликованной в
ZX-Ревю, может быть 1994, не помню точно.

; Процедура пропорциональной печати
;         версия 5.13
;   RELEASE DATE 21.09.1996
;

        ORG 35000
        CALL INIT    ;генерация таблицы
        CALL PROBE   ;тест печати
        RET


INIT    PUSH IX
        LD IX,TABST  ;начало таблицы
        LD B,192     ;192 линии в экране
INID    LD E,B
        LD A,192     ;расчет адреса (0,Y)
        SUB E        ;по пикселам
        LD E,A
        AND A
        RRA
        SCF
        RRA
        AND A
        RRA
        XOR E
        AND #F8
        XOR E
        LD H,A
        LD A,0
        RLCA
        RLCA
        RLCA
        XOR E
        AND #C7
        XOR E
        RLCA
        RLCA
        LD L,A
        LD (IX),L    ;адрес-в HL
        INC IX       ;заносим в таблицу
        LD (IX),H
        INC IX
        DJNZ INID
        POP IX
        RET


PROBE   EXX          ;тестовая печать
        PUSH HL
        EXX
        LD A,32
POWTOR  PUSH AF
        CALL PROC
        POP AF
        INC A
        CP 128
        JR C,POWTOR
        EXX
        POP HL
        EXX
        RET


;------поиск адрес в наборе по коду------
PROC    LD L,A
        XOR A
        LD H,A
        LD DE, FONTST-256
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        ADD HL,DE
        LD B,(HL)    ;ширина
        INC HL       ;hl-указатель в фонт
        LD C,7       ;высота символа


;------контроль выхода за границы--------

        LD A,(XPOS)
ADDIT   LD E,A       ;Е-текущая поз. печ.
        ADD A,B      ;не выйдет ли за пре
        JR NC,DAL1   ;делы при печати?
        LD A,(YPOS)  ;переводим строку
        ADD A,C
        LD (YPOS),A
        XOR A
        JR ADDIT
DAL1    LD (XPOS),A  ;коорд.X-для след.
        LD A,(YPOS)  ;печати
        CP 192-6     ;есть ли выход за
        JR C,DAL2    ;низ?
        XOR A        ;есть! принять меры!
        LD (YPOS),A  ;Напр:Печатать с 0,0


;------Расчет указателя таблицы---------
DAL2    EXX
        LD DE,TABST
        LD L,A       ;L-координата Y
        XOR A
        LD H,A       ;почистили H
        ADD HL,HL    ;умножили коорд.
        ADD HL,DE    ;на 2
        EX DE,HL     ;DE-указатель на
        EXX          ;адреса печати в таб


;расчет адреса знакоместа и позиции в нем
        LD A,E       ;восст А-тек.коорд
        SRL A        ;делить на 8 с остат
        SRL A
        SRL A
        EXX
        LD C,A       ;число знаком. в C'
        EXX
        LD A,E
        AND C        ;позиция в знаком.
        LD E,A       ;в регистрах E и A
        LD D,8


;----------как печатать будем?-----------
        ADD A,B      ;сумма с шириной
        CP D         ;D=8
        JR C,BYT1    ;> -печ.в 1-ом знак.
        JR Z,NENADO  ;ничего крутить не
                     ;надо
;---------печать в 2-х байтах------------
BYT2    LD A,D
        SUB E        ;8-позиция
        LD D,A
        LD A,B       ;загр. ширину
        SUB D        ;A:=шир.-(8-поз.)
        LD D,A       ;сколько крутить
                     ;в C-счетчик байтов
CUC     LD A,D
        LD B,A
        XOR A
        LD E,(HL)
        INC HL
RROT    RR E         ;вращаем с переносом
        RRA          ;из E в A
        DJNZ RROT
        EXX
        LD B,A       ;2-ю полов. сохр. B'
        EXX
        LD A,E       ;1-ю на печать
        EXX
        EX AF,AF'    ;байт пока не нужен
        LD A,(DE)    ;МБ адр знаком (Y,0)
        ADD A,C      ;приб. знакоместо
        LD L,A       ;МБ адр для печати
        INC DE
        LD A,(DE)
        LD H,A       ;адрес в экране
        INC DE
        EX AF,AF'    ;печатаемый байт
        OR (HL)
        LD (HL),A    ;печатаь по 'OR'
        INC HL       ;следом и 2-ю полов
        LD A,B       ;инку символа на
        OR (HL)      ;экран
        LD (HL),A
        EXX          ;1 линия символа
        DEC C        ;готова
        JR NZ,CUC    ;повторим?
        RET          ;печать завершена


;-----печать в пределах одного байта--
BYT1    LD A,D       ;А=8
        SUB E
        SUB B        ;в A-кол-во вращ
        LD B,A       ;в В--//-//-//--
                     ;в C-счетчик
PRINT   LD D,B       ;сохранить
        LD A,(HL)    ;читать Байт печ
        INC HL       ;знака
ROTOR   SLA A
        DJNZ ROTOR   ;крутим
        LD B,D
        EXX          ;A-байт в печать
        EX AF,AF'    ;далее процесс
        LD A,(DE)    ;аналогичен печати
        ADD A,C      ;в 2-х байтах
        LD L,A
        INC DE
        LD A,(DE)
        LD H,A
        INC DE
        EX AF,AF'
        OR (HL)
        LD (HL),A
        EXX
        DEC C
        JR NZ,PRINT
        RET          ;печать завершена


;------------печать без ротации--------
NENADO  LD A,C
        LD B,A
ROT1    LD A,(HL)    ;читаем байт
        INC HL
        EXX          ;и печатаем его
        EX AF,AF'
        LD A,(DE)
        ADD A,C
        LD L,A
        INC DE
        LD A,(DE)
        LD H,A
        INC DE
        EX AF,AF'
        OR (HL)
        LD (HL),A
        EXX
        DJNZ ROT1
        RET         ;печать завершена


XPOS DEFB 0
YPOS DEFB 0
FONTST  INCBIN NEWFONT
TABST   NOP         ;Здесь будет таблица.


      На этом позвольте завершить.
   Text written in ZxIbm Editor v.1.5
       Formatted in IS-Dos Editor.
            E2 Soft 26.04.1997
  
__________________________________________
 



Другие статьи номера:

Вступление - Что будет в третьем номере ?

Вступление - об оболочке

Ассемблер - Возможно ли перекинуть экран (6144 байта) за один тик.

Ассемблер - Плавный скрол текста вверх в окне 15x24 знакоместа.

Дискуссия - AMIGA VS PC мнение читателей (VVG).

Презентация - VIRTUAL VISION GROUP из Воронежа .

Отдохнем - Рок энциклопедия: MEGADEATH...

IS-DOS - Проблемы и решения: макросы.

IS-DOS - Практическое применение макросов.

Почта - Скроллинг по строке вверх и вниз.

Почта - Печать строки 32-х символьным шрифтом.

Почта - Процедура пропорциональной печати.

Отдохнем - Рассказ "Чебурашка".

Система - Описание формата PСX.

Система - Описание программ: Y-COMMANDER & MS COMPILER v1.08.

Обзор - Системных программ: XAS 7.1

Обзор - Системных программ: PRO TRACKER 2,1, PRO TRACKER 3,0d

Обзор - Системных программ: ZASM

Разборка - Обзор игр на тему "футболный менеджмент" : Обзор на тему "футболный менеджмент" : THE DOUBLE , MSMANAGER, MANCHESTER UNITED, KENNY, SOCCER RIVALS , 1-ST DIVISION MANA- GER, SUPER LEAGUE, SOCCER BOSS, PROFFESIONAL SOCCER FOOTBALL, MANAGER 2, ADVANCED SOCCER SIMULATOR.

Интервью - Интервью с FIKUS/Flash Inc.

Отдохнем - Однажды на лекции.

История - Хакеры - статья "ОНО" - об истории появления хакерства. ч.2

Система - Перспективы группы Assept Corp: APS v2.0.

Система - Multicolor Studio Compiler

Разборка - Описание игр: SOCCER RIVALS.

Реклама - Реклама и объявления.

Новости - Колесо обозрения.

Почта - о письмах

Почта - Конкурс на лучшую головолмку (первые 2 головоломки).

Обзор - Новые игры: TIME COP, UFO III, MORTAL COMBAT, MINELAYER , SEX REVERSY, THE MAGIC OF LOGIC, FEUDAL WARS, КУБОК АВИЛЛИАДЫ , CHOPPER DUEL, BACK TO SCHOLL, LCP, 750 CC GRANDPRX, INTERNA- TIONAL KIKBOXING, TAG TEAM WRESTLING, CAPTAIN PLANET,DOC THE DESTRUE DUX, OLE,TORO!.

Презентация - История группы AURYN.

Подарок - О приложении к журналу.

Деморынок - Хит парад музыкальных дем.

Система - Описание программ: КРАТКОЕ ОПИСАНИЕ КОМАНД Y-COMMANDER.

авторы - авторы журнала


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

Похожие статьи:
От авторов - Свеpшилось чудо! Пpоспавшись после буpной ночи, пpоведенной за писюком, я, хоpоший/умный/добpый/пушистый и вообще самый pулез, подпаял к спектpуму ц-дос м0дем!
Acid Zone - Мир, в котором ты живешь...
Rest In Pain - О глюках, портящих жизнь.
Demo party - оффициальные результаты Chaos Construction 999 для PC.
Project: Describe Your Disk Interface

В этот день...   21 ноября