ZX Review #3-4
22 июля 1997

Этюды - Е.Мороз. Бегущая строчка.

<b>Этюды</b> - Е.Мороз. Бегущая строчка.
(c) Евгений Мороз,
Красноярский край, с. Бражное.

   Предлагаю программу типа "бе-
гущая строчка по таблице в  пре-
рываниях".  Текст программы  дан
адаптированным  к   прерываниям,
т.к. я полагаю, что легче убрать
"прерывательные"  навороты,  чем
их поставить. Вот ее листинг:
147.
       ORG  50000
TABLE  EQU  60000
SIZE   EQU  8
IMOFF  DI
       LD   A,63
       LD   I,A
       IM   1
       EI
       RET
       ENT
IMON   DI
       LD   A,9
       LD   I,A
       IM   2
       LD   A,#C3
       LD   (65129),A
       LD   HL,SCROLL
       LD   (65130),HL
       EI
       RET
SCROLL PUSH AF
       PUSH HL
       PUSH DE
       PUSH BC
       CALL LINE
       POP  BC
       POP  DE
       POP  HL
       POP  AF
       JP   56
NEXT   LD   HL,(TXTM)
       INC  HL
       LD   (TXTM),HL
       LD   A,(HL)
       CP   255
       JR   NZ,NEXT1
       LD   HL,TXT
       LD   (TXTM),HL
       LD   A,(HL)
NEXT1  AND  127
       CP   32
       JR   C,NEXT3
       LD   L,A
       LD   H,0
       ADD  HL,HL
       ADD  HL,HL
       ADD  HL,HL
       LD   DE,(23606)
       ADD  HL,DE
       LD   DE,BUF+SIZE
       LD   B,8
NEXT2  LD   A,(HL)
       LD   (DE),A
       INC  HL
       INC  D
       DJNZ NEXT2
NEXT3  LD   A,7
       JR   LINE2
LINE   LD   A,(LINEM)
       DEC  A
       JR   Z,NEXT
LINE2  LD   (LINEM),A
       CALL SCR
       RET
SCR    LD   DE,TABLE
       LD   HL,BUF+SIZE
       LD   C,8
SCR1   PUSH HL
       AND  A
       RL   (HL)
       DEC  HL
       LD   B,SIZE
SCR2   PUSH BC
       RL   (HL)
       PUSH AF
       CALL DEG
       DEC  HL
       POP  AF
       POP  BC
       DJNZ SCR2
       POP  HL
       INC  H
       DEC  C
       JR   NZ,SCR1
       RET
DEG    LD   B,8
DEG1   PUSH BC
       LD   A,(HL)
DEG2   RLA
       DJNZ DEG2
       CALL PLOT
       POP  BC
       DJNZ DEG1
       RET
PLOT   PUSH HL
       EX   DE,HL
       LD   C,(HL)
       JR   NC,PL2
PL1    LD   B,C
PL2    INC  HL
       LD   E,(HL)
       INC  HL
       LD   D,(HL)
       INC  HL
       EX   DE,HL
       LD   A,(HL)
       OR   C
       XOR  C
       OR   B
       LD   (HL),A
       POP  HL
       RET
LINEM  DEFB 1
TXTM   DEFW TXT-1
BUF    DEFS 2048
TXT    DEFM "HELLO ALL HA"
       DEFM "CKERS ALL OV"
       DEFM "ER THE WORLD"
       DEFM " !!! "
       DEFS SIZE
       DEFB 255
2
   Также приводим ее дамп:

C350: F3 3E 3F ED 47 ED 56 FB:F5
C358: C9 F3 3E 09 ED 47 ED 5E:9D
C360: 3E C3 32 69 FE 21 6D C3:0E
C368: 22 6A FE FB C9 F5 E5 D5:28
C370: C5 CD AE C3 C1 D1 E1 F1:9A
C378: C3 38 00 2A FE C3 23 22:66
C380: FE C3 7E FE FF 20 07 21:C7
C388: 00 CC 22 FE C3 7E E6 7F:DD
C390: FE 20 38 16 6F 26 00 29:7D
C398: 29 29 ED 5B 36 5C 19 11:B1
C3A0: 08 C4 06 08 7E 12 23 14:04
C3A8: 10 FA 3E 07 18 06 3A FD:0F
C3B0: C3 3D 28 C7 32 FD C3 CD:21
C3B8: BB C3 C9 11 60 EA 21 08:46
C3C0: C4 0E 08 E5 A7 CB 16 2B:F5
C3C8: 06 08 C5 CB 16 F5 CD DC:DD
C3D0: C3 2B F1 C1 10 F4 E1 24:3C
C3D8: 0D 20 E8 C9 06 08 C5 7E:CA
C3E0: 17 10 FD CD EA C3 C1 10:12
C3E8: F5 C9 E5 EB 4E 30 01 41:F9
C3F0: 23 5E 23 56 23 EB 7E B1:EA
C3F8: A9 B0 77 E1 C9 01 FF CB:00

C400 - CBFF - область буфера

CC00: 48 45 4C 4C 4F 20 41 4C:ED
CC08: 4C 20 48 41 43 4B 45 52:EE
CC10: 53 20 41 4C 4C 20 4F 56:ED
CC18: 45 52 20 54 48 45 20 57:F3
CC20: 4F 52 4C 44 20 21 21 21:A0
CC28: 20 00 00 00 00 00 00 00:14
CC30: 00 FF 00 00 00 00 00 00:FB

   Без   каких-либо    изменений
программа  в  прерываниях  зани-
мает больше, чем  1/50  секунды,
однако  SOS  тормозит  не  очень
сильно (для работы с ним в  кон-
це обработчика поставлен JP 56 -
его можно без  опаски  убирать).
Размер таблицы  для  scroll'a  и
длина его зависит от  переменной
SIZE и равен SIZE*192.  В  пред-
ставленном виде  значение  пере-
менной  установлено равным вось-
ми, а значит, по  экрану  SPECCY
побегут восемь вполне приличного
вида букв.  Если будет необходи-
мо, его достаточно  просто изме-
нить в тексте  на ассемблере и в
тексте  на Бейсике (это редактор
таблицы - по запросу программы).
В  редакторе есть  машинокодовая
вставка - ее текст:
147.
       ORG  [PROG+7]    ; так
;написать нельзя, посчитайте
;это значение.

       LD   A,(PROG+5)
       AND  #18
       RRCA
       RRCA
       RRCA
       OR   #58
       LD   B,A
       LD   A,(PROG+6)
       AND  #07
       RRCA
       RRCA
       RRCA
       ADD  A,D
       LD   C,A
       RET
2
   Этот текст надо отассемблиро-
вать в строку REM,  оставив  два
байта под  переменные.  Величину
PROG берите  из  редактора,  она
зависит от наличия  BETA-DISK  и
INTERFACE-1. Приведенный вариант
редактора  написан  в расчете на
магнитофонный вариант компьютера
( дисководом  я  не  обременен).
Счастливые же их обладатели смо-
гут без  проблем добавить нужные
USR 15619.  Он довольно неуклюж,
но в целом справляется  со своей
работой, задавая траекторию дви-
жения  скролла, используя  "вол-
нистые"  графики  синуса  (можно
косинуса).
   Также без проблем  Вы  можете
вместо   этого    "волноводства"
вставить элементарный опрос кла-
виатуры и создавать  свою  един-
ственную и неповторимую таблицу.
Обращаю Ваше внимание  на  метку
BUF, которая резервирует в памя-
ти место, достаточное для хране-
ния 32 букв, формат хранения ко-
торых соответствует формату син-
клеровского экрана (этим и  объ-
ясняется  столь  немалый  размер
буфера), благодаря чему  при ус-
тановке BUF  в экране  Вы будете
иметь еще одну самую обычную бе-
гущую  строчку, необходимую  для
сканирования.
   Метка  TAB определяет началь-
ный адрес таблицы и должна соот-
ветствовать вводимой величине по
запросу Бейсик-редактора.

  0 REM здесь должна находиться машинокодовая процедура.
 10 PAPER 0:INK 7: BORDER 0: CLEAR 24999
 20 INPUT "TAB ";r  ;REM начальный адрес расположения таблицы.
 30 INPUT "SIZE ";d ;REM и ее размер (в буквах)
 40 LET q=PEEK 23636*256+PEEK 23635
100 FOR m=88 TO 57 STEP -32/d
110 FOR n=255 TO 0 STEP -32/d
120 LET x=n
130 LET y=INT (m+n/5*SIN (n/25))
140 PLOT x,y
150 GO SUB 300
160 NEXT n
170 NEXT m
180 STOP
300 REM *CREATING TABLE*
310 LET c=INT (x/8): LET u=INT (y/8)
320 POKE q+5,21-u: POKE q+6,c
330 LET s=USR (q+7)+ABS (7-(y-u*8))*256: PRINT #0;AT 1,0;
    "SCREEN$ "s
340 LET b=2^(ABS (x-c*8-7)): PRINT #0;AT 1,23;"BIN ";b;"  "
350 PRINT #0;AT 0,23;"TAB ";r
360 POKE r,b
370 POKE r+2,INT (s/256): POKE r+1,(s-INT (s/256)*256)
380 LET r=r+3
390 RETURN

********************************



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

TR-DOS для начинающих - Часть 1.

Авторская разработка - General Sound - мультимедиа для ZX Spectrum!

Визитная карточка - Представляем новый электронный журнал "Major Wares" (c) Codebusters & V.M.G.

Компьютерная новелла - Knight Lore "Преданья рыцарских времен".

Новые программы - И.Рощин. HELP_Z80. В.Давыдов. Catalog's Base v1.8.

Описание оболочки журнала "ZX-РЕВЮ"

Перекресток драконов - Aavlon, Castle of Dreams, Erik the Viking.

Перекресток драконов - Eureka!, Eye of Bain, Kentilla.

Перекресток - Sherlock, Apollo, Shadows of Mordor, Rigels Revenge, Temple of Terror, ID, That's the Spirit, Return to Ithaka.

Ретро - Дж.Хардман, Э.Хьюзон. 40 лучших процедур.

Советы экспертов - Castle Master.

Советы экспертов - Firelord.

Советы экспертов - Stonkers.

Форум-игры - Insult Megademo, Catch 23, Livingstone, Rock Star ate my Hampster, НЛО-2: Дьяволы Бездны, Terminator 2, Venturama, The Spririts, Nipper, Sweewo'S World, King's Bounti-2, Hacker 2, Black Magic, Satcom, Звёздное Наследие.

Форум - А.Гура. Кодекс программиста.

Форум - А.Стрельников. Перспективы развития ZX Spectrum.

Форум - В.Давыдов. По материалам, опубликованным в ZX-РЕВЮ: Некоторые вопросы, связанные с автостартом Бейсик-программ. Redefine Keys. Процедура печати 42 символов в строке. Процедура умножения HL=B*C. Доработка посекторных загрузчиков. Мини-драйвер дисковых операций.

Форум - Группа 'Light'. Музыкальный процессор для ZX-Speccy.

Форум - Д.Федоров: Печать картинки с маской с точностью до пиксела. Алгоритм расчета адреса по координатам с точностью до пиксела.

Форум - И.Рощин. Совместное использование ZX ASM 3.0 и STS 5.1.

Форум - М.Бекарев. Расчет адреса экранной области по знакоместу и наоборот.

Форум - П.Федин. Доработка Profi для бесконфликтного подключения периферии.

Форум - С.Астров. Генератор псевдослучайных чисел.

Читатель-читателю - В.Сироткин. Защита программ (взгляд на проблему).

Читатель-читателю - И.Рощин. Драйвер экрана для компьютера "Пентагон-128".

Этюды - А.Савинов: Процедура вывода на экран символов двойной высоты. Процедура "растворения" символов.

Этюды - А.Уржа. Процедура рисования окружности.

Этюды - В.Сироткин. Программа подсчета контрольной суммы.

Этюды - Е.Волчков. Улучшение подпрограммы вычисления адреса в дисплейном файле.

Этюды - Е.Мороз. Бегущая строчка.

Этюды - И.Командин. Программа проявления экрана.

Этюды - И.Рощин. Два графических эффекта.

Этюды - М.Лазутов: Программа модернизации шрифта. Программа кодирования/декодирования блока кодов. Эффект с атрибутами.

Этюды - О.Смолянкин: Процедуры очистки экрана. Вывод текстовых сообщений на экран.


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

Похожие статьи:
Хит-Парад - игры для ZX-SРЕСТRUМ.
Наши Этюды - Я давно отошел от Спектрума и все мои статьи носят скорее теоретический характер.
Проза - Bанилла.

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