Deja Vu #09
13 ноября 1999

Coding - быстрай печать 64 символов в строке.

(C) Морозов Илья/Death Moroz
__________________________________________


             Всем привет  !!!

   Сегодня  "поговорим" о  быстром  выводе
строки  с 64 символами. Весь секрет  ниже-
приведенного метода в паре  таблиц, допол-
нительном фонте  и  нестандартной  печати:
символы выводятся  сразу по 2 (в одно зна-
коместо), что вместе со стековым скроллин-
гом дает потрясяющие результаты.

;(C) All work in Xas by D.M0R0Zz


font2         EQU    #6000 ;адрес 2-ого фонта(создается ниже)
t2            EQU    font2+2048 ;адреса таблиц
t1            EQU    t2+512 ;с адресами символов

              ORG    t1+512 ;грузим базовый фонт(должен быть
font1         EQU    $ ;сдвинут вверх(выводятся только 6 байт)
              LCODE  "F4.1"
              ORG    font1+2048 ;начало программы
              ENT
              CALL   creat ;создаем все, что надо...
              LD     de,text ;в DE адрес текста
              CALL   print ;печать...
oprs          CALL   8020; при нажатии "ЗАБОЙ" - выход...
              JR     c,oprs
              RET


print         LD     hl,#4000 ;откуда начинаем печать
              LD     (t_poz+1),hl
              LD     a,0 ;номер этой линии
              LD     (n_lin+1),a
              DI
              LD     (sp_+1),sp ;сохранились
              LD     hl,p1 ;начальные установки
              LD     bc,#2120


p1            LD     a,(DE) ;взяли код символа
              INC    de ;увеличили
              CP     b ;если этот код > 32 (пробел),
              JP     nc,p1_1 ;то переходим на печать
              CP     c ;если это НЕ пробел,
              JP     nz,p1_3 ;то идем на p1_3
              EXX
              LD     de,32*8+font1 ;в DE' адрес пробела
              EXX
              JP     p2 ;переход на 2-ую половинку знакоместа

p1_3          CP     #0d ;признак конца линии ?
              JP     z,n_lin ;если да, то ползем на след.
              CP     3 ;конец текста ?
              JP     z,sp_ ;если да, то на выход

p1_1          EXX    ;берем адрес символа из таблицы
              LD     l,A ;и запоминаем его в DE'
              LD     h,t1'&h ;взят старший байт
              LD     e,(HL)
              INC    h
              LD     d,(HL)
              EXX


p2            LD     a,(DE) ;взяли следующго символа
              INC    de
              CP     b ;если > 32, то печать
              JP     nc,p2_2
              CP     c
              JP     nz,p2_3
              EXX    ;в SP адрес пробела во 2-ом фонте
              LD     sp,32*8+font2
              JP     t_poz
p2_3          CP     #0d ;если конец строки, то переход на
              JP     z,n_lin_ ;печать 1-ой половинки
              CP     3
              JP     z,sp_


p2_2          EXX    ;берем адрес в фонте
              LD     l,A
              LD     h,t2'&h
              LD     a,(HL)
              INC    h
              LD     h,(HL)
              LD     l,A
              LD     sp,HL ;пихаем в SP

t_poz         LD     bc,ш4000 ;адрес в экране
              !ASSM  2 ;повторяем кусок до !cont 2 раза
;(заменить на 3, если нужно выводить символы полностью)
              POP    hl ;взяли 2 байта из 2-ого фонта
              LD     a,(DE) ;и один из первого...
              OR     l ;слили
              LD     (bc),A ;напечатали
              INC    е ;перешли ко 2-ому байту 1-ого фонта
              INC    b ;и на линию вниз
              LD     a,(DE)
              OR     h
              LD     (bc),A
              INC    b
              INC    e
              !CONT
              POP    hl ;допечатали остатки
              LD     a,(DE)
              OR     l
              LD     (bc),A
              INC    b
              INC    e
              LD     a,(DE)
              OR     h
              LD     (bc),A


              LD     hl,t_poz+1 ;увеличили позицию
              INC    (hl)
              EXX
              JP     (hl) ;повторяем
n_lin_        EXX    ;вывод только 1-ой половинки знакоместа
              LD     l,E
              LD     h,D
              LD     sp,HL
              LD     hl,(t_poz+1)
              !ASSM  2
              POP    de
              LD     (hl),E
              INC    h
              LD     (hl),D
              INC    h
              !CONT
              POP    de
              LD     (hl),E
              INC    h
              LD     (hl),D
              EXX


n_lin         LD     a,0 ;переход на след.линию
              CP     23 ;или выход, если конец экрана
              JP     z,sp_
n_lin1        EXX
              LD     l,A
              INC    a
              LD     (n_lin+1),a
              LD     b,A
              AND    #18
              ADD    a,#40
              LD     h,A
              LD     a,B
              AND    7
              RRCA
              RRCA
              RRCA
              LD     l,A
              LD     (t_poz+1),hl
              LD     bc,t1
              EXX
              JP     (hl)
sp_           LD     sp,0 ;выход
              EI
              RET


creat
              LD     bc,2048 ;создание 2-ого, заранее
              LD     de,font1 ;сдвинутого фонта
              LD     hl,font2
cr2           LD     a,(DE)
              RRCA
              RRCA
              RRCA
              RRCA
              LD     (hl),A
              INC    de
              INC    hl
              DEC    bc
              LD     a,B
              OR     c
              JR     nz,cr2


              LD     b,0 ;создание таблиц
              LD     de,8
              LD     hl,font1
              LD     ix,t1
              LD     iy,t2
              EXX
              LD     hl,font2
              LD     de,8
              EXX
cr1           LD     (ix),l ;для быстрого доступа, 1-ая часть
              INC    hx ;хранит младюий, а 2-ая часть таблицы
              LD     (ix),h ;старший байт адреса
              DEC    hx
              INC    ix
              ADD    hl,DE
              EXX
              LD     (iy),l
              INC    hy
              LD     (iy),h
              DEC    hy
              INC    iy
              ADD    hl,DE
              EXX
              DJNZ   cr1
              RET
              ORG    $
text          EQU    $ ;грузим текст
              LCODE  "TEXT"




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

Апперативчик - вступление от авторов.

Апперативчик - Об управлении в Deja Vu.

Апперативчик - Халява №2: о пиратах и взломанных версиях журнала.

Апперативчик - Dejavu Info: Как приобрести журнал Deja Vu.

Тема - Swap: "От письма до бандероли" как найти в своем городе Спектрумистов.

Тема - Тусовка: CSP'99 - интервью со Slack Den.

Тема - Тусовка: CSP'99 - интервью с main coder'ом молодой Новосибирской группы AREASoft

Тема - Тусовка: CSP'99 - интервью с одним из издателей электронного журнала Deja Vu' Daniel/Playgear Co./Binary Dimension.

Тема - Тусовка: CSP'99 - интервью с одним из участников Рыбинской группы Cav/Auryn.

Тема - Тусовка: CSP'99 - интервью с отцом группы Playgear классным дядькой Ze Pagan.

Тема - Тусовка: CSP'99 - интервью с main coder'ом Flash и по совместительству одним из основателей группы - Alex Rider.

Тема - Тусовка: CSP'99 - опрос, как прошла party в двух словах, общие впечатления.

Тема - Тусовка: Сказание о том, как проходило Crazy Siberian Party 1999.

Капля припоя - HD диски: Доработка контроллера дисковода для работы с HD-дисками.

Капля припоя - Решение пpоблемы 1.2Мб дисковода.

Капля припоя - увеличение объема ОЗУ до 1024к на SPECCY варианта Таганрог 128К!

Капля припоя - схема программатора для микросхем постоянных запоминающих устройств (ПЗУ).

Капля припоя - о матричных принтерах.

Капля припоя - ISA-Spectrum: плата вставляемая в ISA слот IBM, являющееся частью или полным компьютером ZX-Spectrum.

Software - Демосцена: Обзор'инг демозов: 63 bit III, Jam, Anamnesis, 7 Up, 63 bit IV, DemoDyin, Napalm, Crapmo 2, Bunch of Arce, Devotion, WorkStop, Energy, Yes.

Software - Обзор Игр: MIST: Monstrland Part Two, Bomb Lakes, Marbles, KluXer, 4x4 Puzzle, Солдатики, Кораблики.

Software - Gun Commander: руководство пользователя.

Coding - coding для чайников: цивилизованный выход в TR-DOS.

Coding - coding для чайников: Подробно об одном из способов опроса клавиатуры.

Coding - coding для чайников: как устроен "Boot" изнутри.

Coding - coding для чайников: доработка MINI BOOT V3.0.

Coding - процедура печати 42 символа в строке (с трабутами), процедура быстрой печать спрайта с точностью до пикселя.

Coding - быстрай печать 64 символов в строке.

Coding - Конверсия числа со стека калькулятора в символьную строку.

Coding - быстрая печать спрайта 2х2 знакоместа, с точностью до знакоместа.

Coding - Hrust Library свободноpаспpостpаняемая библиотека пpоцедуp, с помощью котоpых можно упаковывать и pаспаковывать pазличные данные.

Coding - Обработка ошибок TR-DOS при работе через #3D13.

Coding - набор процедур для построения пользовательского интерфейса.

Coding - пишим вирус невидимку для TR-DOS.

Another world - Иллюзия безопасности: Страшные сказки о безопасности Windows и Internet (часть первая).

Доска почета - 3 метода отличить pеальный ZX Spectrum от эмулятоpов.

Доска почета - устав национального Фонда Спектрума (HФСП).

Доска почета - Резервы: попытка представить совершенный ZX Spectrum.

Доска почета - Накипело: "А жив ли еще Speccy, курилка?" Размышления в слух.

Доска почета - Ща скажу №1: оптимизация процедур, анонс журнала и новой аркадной игрушки.

Доска почета - Ща скажу №1: разборки Serg'a и Playgear, Взлом телефонных карт, анонс Crazy Siberian Party '2000.

Доска почета - Краткая история кемеровской группы Digital Life Group.

Семь и 1/2 - Студенческая мифология.

Семь и 1/2 - День дурака 2 (окончание).

Семь и 1/2 - Сказочки для детей.

Семь и 1/2 - Особенности национального рулеза или чисто Сибирский проект (повесть о Crazy Siberian Party 1999).

Пробы пера - воспоминания: новелла по игре "Черный Ворон".

Пробы пера - рассказ "Элексир Зверя".

Пробы пера - "Last Warrior".

Реклама - текстовая реклама и обьявления.

Реклама - графическая реклама и обьявления.


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

Похожие статьи:
Оглавление - содержимое газеты.
График - "гродненская сетка кажется начала развиватся на полной скорости!"
IMPORTANT!

В этот день...   14 декабря