Adventurer #08: Обмен опытом: перенос эффекта 'iris.ss'

    (C) Иван Рощин, Москва, 1998

Этот красивый эффект я впервые увидел на PC, в программе Dos Navigator (screen saver 'iris.ss'), и перенес его на Спектрум. Вот полный текст программы с подробными комментариями:

M_X EQU 7 ;Масштаб по X
M_Y EQU 7 ;Масштаб по Y

ORG #6000

;Устанавливаем атрибуты:

HALT
LD HL,#5800
LD DE,#5801
LD BC,#2FF
LD (HL),L
LDIR

;Рисуем сетку:

LD HL,#4000
LP1 LD A,%01010101
BIT 0,H
JR NZ,NE_FF
CPL
NE_FF LD (HL),A
INC HL
LD A,H
CP #58
JR NZ,LP1

;Главный цикл:

MAIN_LP LD IX,BUFER+#2FF

;Буфер заполняется "от конца к началу",
;и в таком же порядке будет выводиться
;на экран в процедуре TO_SCR.

LD H,TAB/#100
LD DE,(M_3)
LD A,24

LOOP_V EX AF,AF'
LD BC,(M_1)
EXX
LD B,32

LOOP_H EXX
LD A,(MEM_BP)
LD L,C
ADD A,(HL)
LD L,B
ADD A,(HL)
LD L,E
ADD A,(HL)
LD L,D
ADD A,(HL)
AND #7F

;Старший бит аккумулятора обнулен, и
;буфер заполняется значениями #00-#7F.
;Это пригодится в процедуре TO_SCR.

LD (IX),A
DEC IX

INC C ;!
ADR_MX LD A,M_X
ADD A,B
LD B,A

EXX
DJNZ LOOP_H

EXX

ADR_MY LD A,M_Y
ADD A,E
LD E,A
INC D ;!

EX AF,AF'
DEC A
JP NZ,LOOP_V

LD HL,(MEM_BP)
DEC HL ;!!
LD (MEM_BP),HL

LD A,L
XOR H
LD HL,BUFER+#2FF
XOR (HL)
XOR E
XOR C
ADD A,D
ADD A,B
LD B,A

LD HL,NAPR
AND 3
LD D,0
LD E,A
ADD HL,DE
LD A,(HL)

BIT 3,B
JR NZ,TO_DEC

CP 3
JP P,TO_END
INC (HL)
JR TO_END

TO_DEC CP #FD
JP M,TO_END
DEC (HL)

TO_END LD A,(NAPR)
LD HL,M_1
ADD A,(HL)
LD (HL),A

LD A,(M_2)
LD HL,NAPR+1
SBC A,(HL)
LD (M_2),A

LD A,(NAPR+2)
LD HL,M_3
ADD A,(HL)
LD (HL),A

LD A,(M_4)
LD HL,NAPR+3
SBC A,(HL)
LD (M_4),A

CALL TO_SCR ;Вывод на экран

XOR A ;Что-то
IN A,(254) ;нажато?
CPL
AND 31
JR NZ,OBR_Z

;Если не нажато, восстанавливаем
;масштаб по X и Y:

CALL INC_M
JP MAIN_LP

;Нажата клавиша Z (Zoom)?

OBR_Z LD A,#FE
IN A,(254)
BIT 1,A
RET NZ ;Если нет - выходим

;Если нажата - изменяем масштаб:

CALL DEC_M
JP MAIN_LP

MEM_BP DW 0
M_1 DB 0
M_2 DB 0
M_3 DB 0
M_4 DB 0
NAPR DB 2,1,3,4

;-----------------------------------
;Процедуры INC_M и DEC_M увеличивают
;и уменьшают масштаб:

INC_M LD HL,ADR_MX+1
LD A,(HL)
CP M_X
JR NC,INC_Y
INC (HL)
INC_Y LD HL,ADR_MY+1
LD A,(HL)
CP M_Y
RET NC
INC (HL)
RET

DEC_M LD HL,ADR_MX+1
LD A,(HL)
AND A
JR Z,DEC_Y
DEC (HL)
DEC_Y LD HL,ADR_MY+1
LD A,(HL)
AND A
RET Z
DEC (HL)
RET

;-----------------------------------
;Процедура TO_SCR перекодирует байты
;из буфера с помощью палитры и
;выводит результат в файл атрибутов:

TO_SCR LD HL,PALETTE ;палитра
LD DE,#5800 ;экран
LD BC,BUFER+#2FF;конец буфера

HALT
LP_S LD A,(BC)
LD L,A
LDI

;Т.е. берем байт из буфера и помещаем
;в регистр L. Это будет смещение в
;палитре (вот почему она должна начинаться
;с адреса, кратного #100). Команда LDI
;возьмет байт из палитры (HL) и поместит
;на экран по адресу (DE), который
;увеличится на 1. Положение в буфере (BC)
;уменьшится на 1. То, что HL также
;увеличивается на 1, никакой роли не
;играет, т.к. H не изменяется (потому
;что в буфере находятся значения 0..#7F),
;а L все равно изменится на следующем
;шаге.

LD A,(BC)
LD L,A
LDI
LD A,(BC)
LD L,A
LDI
LD A,(BC)
LD L,A
LDI
LD A,(BC)
LD L,A
LDI
LD A,(BC)
LD L,A
LDI
LD A,(BC)
LD L,A
LDI
LD A,D
CP #5B
JP NZ,LP_S

RET

;---------------------------------
;Вспомогательные буферы и таблицы:

ORG #C000

;Вспомогательная таблица, начинается
;с адреса, кратного #100:

TAB
DB #40,#40,#40,#40,#40,#40,#40,#40
DB #3F,#3F,#3F,#3F,#3F,#3E,#3E,#3E
DB #3E,#3D,#3D,#3D,#3C,#3C,#3B,#3B
DB #3B,#3A,#3A,#39,#39,#38,#38,#37
DB #37,#36,#35,#35,#34,#34,#33,#32
DB #32,#31,#30,#30,#2F,#2E,#2E,#2D
DB #2C,#2C,#2B,#2A,#29,#29,#28,#27
DB #26,#25,#25,#24,#23,#22,#22,#21
DB #20,#1F,#1E,#1E,#1D,#1C,#1B,#1B
DB #1A,#19,#18,#17,#17,#16,#15,#14
DB #14,#13,#12,#12,#11,#10,#10,#0F
DB #0E,#0E,#0D,#0C,#0C,#0B,#0B,#0A
DB #09,#09,#08,#08,#07,#07,#06,#06
DB #05,#05,#05,#04,#04,#03,#03,#03
DB #02,#02,#02,#02,#01,#01,#01,#01
DB #01,#00,#00,#00,#00,#00,#00,#00
DB #00,#00,#00,#00,#00,#00,#00,#00
DB #01,#01,#01,#01,#01,#02,#02,#02
DB #02,#03,#03,#03,#04,#04,#05,#05
DB #05,#06,#06,#07,#07,#08,#08,#09
DB #09,#0A,#0B,#0B,#0C,#0C,#0D,#0E
DB #0E,#0F,#10,#10,#11,#12,#12,#13
DB #14,#14,#15,#16,#17,#17,#18,#19
DB #1A,#1B,#1B,#1C,#1D,#1E,#1E,#1F
DB #20,#21,#22,#22,#23,#24,#25,#25
DB #26,#27,#28,#29,#29,#2A,#2B,#2C
DB #2C,#2D,#2E,#2E,#2F,#30,#30,#31
DB #32,#32,#33,#34,#34,#35,#35,#36
DB #37,#37,#38,#38,#39,#39,#3A,#3A
DB #3B,#3B,#3B,#3C,#3C,#3D,#3D,#3D
DB #3E,#3E,#3E,#3E,#3F,#3F,#3F,#3F
DB #3F,#40,#40,#40,#40,#40,#40,#40

;Палитра, определяющая цвет эффекта,
;начинается с адреса, кратного #100:

PALETTE
DB #09,#09,#09,#09,#09,#09,#09,#09
DB #09,#09,#09,#0B,#0B,#0B,#0B,#0B
DB #0B,#0B,#0B,#0B,#0B,#0B,#1B,#1B
DB #1B,#1B,#1B,#1B,#1B,#1B,#1B,#1B
DB #1A,#1A,#1A,#1A,#1A,#1A,#1A,#1A
DB #1A,#1A,#1A,#12,#12,#12,#12,#12
DB #12,#12,#12,#12,#12,#12,#16,#16
DB #16,#16,#16,#16,#16,#16,#16,#16
DB #36,#36,#36,#36,#36,#36,#36,#36
DB #36,#36,#36,#34,#34,#34,#34,#34
DB #34,#34,#34,#34,#34,#34,#24,#24
DB #24,#24,#24,#24,#24,#24,#24,#24
DB #25,#25,#25,#25,#25,#25,#25,#25
DB #25,#25,#25,#2D,#2D,#2D,#2D,#2D
DB #2D,#2D,#2D,#2D,#2D,#2D,#29,#29
DB #29,#29,#29,#29,#29,#29,#29,#29

;Промежуточный буфер, может начинаться
;с любого адреса:

BUFER DS #300

─────────────────────

Как можно экспериментировать с этой программой:
- изменить масштаб (константы M_X и M_Y). Это можно сделать и непосредственно во время работы программы, нажав клавишу 'Z'.
- вместо команд INC C и INC D, помеченных "!", можно поставить команды, увеличивающие (или уменьшающие) регистры C и D не на 1, а на любое другое число.
- команду DEC HL, помеченную "!!", можно заменить на несколько таких команд (или, например, команд INC HL).
- изменить содержимое таблицы TAB.
- изменить набор цветов с помощью палитры (массив PALETTE).
Можно изменять все указанные выше параметры и непосредственно во время работы программы, если сделать ее самомодифицирующейся.

* * *

Оглавление издания: Adventurer #08

  • От автора - Shaitan
    Технические детали нового интерфейса программы для ZX Spectrum. Обсуждаются улучшения и функции, такие как прокрутка и изменение цвета. Предоставлены инструкции по навигации с помощью клавиатуры и кнопок.
  • От автора
    Введение от автора и информация о редакционной команде.
  • Презентация
    Статья представляет программный установщик для создания автозапускаемых дисков и знакомит с новой адвентюрной игрой, созданной с помощью QUILL доктором Лазером.
  • Презентация программного обеспечения TRICK
    Статья представляет TRICK, новое программное обеспечение для защиты программ, разработанное Eternity Industry, и обсуждает его бета- и коммерческие версии. Автор, Александр Калинин (aka Paracels/EI), обращает внимание на предыдущие недостатки программного обеспечения и подчеркивает его улучшенный интерфейс. В статье также содержатся детали приобретения программы и приглашение читателям заказать её.
  • Презентация
    Статья содержит подробное руководство пользователя для HELP_Z80, бесплатной утилиты для ZX Spectrum, которая служит электронным справочником по командам микропроцессора Z80. В ней описывается, как загрузить и использовать программное обеспечение, включая объяснения команд, функции поиска и интеграцию с ассемблерами. Кроме того, включены распределение памяти, функциональные особенности и ссылки для дальнейшего чтения.
  • Интерфейс
    Статья обсуждает отзывы читателей о интерфейсе журнала, касаясь вопросов цен и тенденций программного обеспечения в сообществе ZX Spectrum. В ней представлено письмо от читателя, который высказывает мысли о ценах на игры и уменьшении числа пользователей платформы. Также обсуждаются разработки программного обеспечения и вовлеченность пользователей.
  • Интерфейс
    Статья делится опытом автора после покупки Амиги, сравнивая ее с ПК и обсуждая ее использование для игр, графики и музыки, отмечая при этом некоторые ограничения программного обеспечения.
  • Интерфейс
    Статья обсуждает проблемы поддержки пользователей со стороны производителей 'железа' SCORPION и NEMO для устройств ZX Spectrum. Критика SCORPION за плохое обслуживание клиентов при том, что они являются лидерами рынка, и похвала NEMO за оперативную поддержку. Автор выражает беспокойство о текущем состоянии рынка 'железа' для ZX Spectrum.
  • Интерфейс
    Статья обсуждает будущее платформы Spectrum, затрагивая демографию пользователей, проблемы производства софта и возможности эволюции аппаратного обеспечения.
  • Интерфейс
    Статья обсуждает разочарования пользователя Speccy в связи с проблемами аппаратного обеспечения, трудностями современной вычислительной техники и преданностью платформе Speccy.
  • Интерфейс
    Статья рассматривает жизнь и судьбы пользователей ZX Spectrum, включая личные воспоминания автора о друзьях и их взаимодействии с компьютерами.
  • Система
    Статья рассматривает различные программы для ZX Spectrum, включая текстовые редакторы, аудиоплееры и графические утилиты. В ней представлены независимые мнения о их характеристиках и удобстве использования, выделяя как сильные, так и слабые стороны. В статье подчеркивается эволюция и улучшение программных средств, доступных для этой классической платформы.
  • Обзор игрушек
    Обзор заметных игр для ZX Spectrum с акцентом на графику, звук и игровые механики. Каждая игра сопровождается кратким описанием и рейтингом. Рекомендуется любителям ретро-игр.
  • Обзор игрушек
    Статья рассматривает демо-версии различных игр, подчеркивая их потенциал и уникальные особенности. Акцентируется внимание на дефиците таких релизов на рынке и оцениваются качество и механика выбранных игр. Автор делится мнениями о прогрессе и ожиданиях к будущим полным версиям этих игр.
  • Гости
    Статья описывает образование и деятельность группы Eternity Industry, её участников, проекты и планы на будущие релизы и соревнования.
  • Гости - Dr. John
    Интервью с Феликсом из Virtual Brothers о его переходе от ZX Spectrum к ПК, разработке игры 'Винни-Пух' и планах на будущее.
  • Гости
    Интервью с музыкантами Маратом и Демоном из группы 'Disgust', обсуждающими свою музыкальную эволюцию, влияния и взгляды на жизнь и творчество.
  • Раскрутка
    Статья представляет собой подробный мануал к игре 'ENCYCLOPEDIA of WAR', описывающий выбор армий, типы юнитов и механики битвы.
  • Раскрутка
    Статья представляет собой руководство по игре, описывающее необходимые предметы и стратегии для преодоления различных испытаний, включая столкновения с динозаврами и навигацию по деревням.
  • Раскрутка
    Статья представляет собой обзор игры в жанре arcade adventure 'ELOPEMENT' от Omega HG, описывая ее особенности и давая советы по прохождению.
  • Раскрутка
    Статья описывает текстовую адвентюру 'Остров тьмы' на QUILL, предлагая советы для игроков. Упоминаются механики и персонажи, включая загадки и взаимодействия. В конце представлена карта острова.
  • Раскрутка 'Knightmare'
    Статья описывает игру 'Knightmare', подробно рассказывая о командах, механике игрового процесса и начальных квестах. Игрок управляет рыцарем, который должен взаимодействовать с персонажами и решать загадки для продвижения. Это руководство по навигации в игровом окружении и целям.
  • Обмен опытом
    Статья критикует адвентюрную игру 'Island of Darkness' Пауля Москоу, подчеркивая её нелогичный дизайн, отсутствие подробных описаний предметов и нехватку подсказок для игроков.
  • Обмен опытом
    Статья представляет собой мануал по доработке ассемблера ZX ASM 3.0, вводя функции отладки и управления выполнением программ на ZX Spectrum.
  • Обмен опытом
    Статья описывает феномен, наблюдаемый с видеоконтроллером ZX Spectrum, когда переключение между двумя экранами может создавать неожиданные визуальные артефакты. В ней изложена конкретная программа, которая демонстрирует этот эффект за счет быстрой смены экранов. Автор обсуждает последствия и возможные применения данного поведения.
  • Обмен опытом - Иван Рощин
    Статья представляет собой руководство по переносу эффекта заставки 'iris.ss' из Dos Navigator на ZX Spectrum, включая исходный код и советы по модификации.
  • Обмен опытом - Иван Рощин
    Описание процедуры OPEN_W для создания границ окна. Включает детали о настройке символов и размеров. Используется PRSYM для печати символов.
  • Обмен опытом - Maximum
    Введение в операции с длинными числами для разработки игр на ZX Spectrum, включая сложение, вычитание и преобразование в ASCII.
  • Обмен опытом
    Статья обсуждает кастомизацию графического редактора ART STUDIO путем создания дополнительных модулей, которые улучшают его функциональность, включая функции воспроизведения музыки и отображения координат курсора.
  • Обмен опытом
    Статья описывает программу, разработанную для улучшения визуального качества атрибутного сообщения с пиксельным движением на ZX Spectrum. Приведены детали реализации, включая использование массивов данных для задания траектории движения и рендеринга изображений. Программа снабжена комментариями для облегчения понимания и может быть изменена для создания различных эффектов.
  • Оттяг
    Статья содержит юмористические зарисовки и комментарии о различных аспектах жизни и технологий, включая анекдоты о вымышленном персонаже и его опыте с процессором Pentium.
  • Тест фармацевта
    Статья представляет собой юмористические тесты, предназначенные для определения, является ли человек настоящим фармацевтом или самозванцем, с ситуационными вопросами и оценкой знаний.
  • Странности и самооценка в 'Оттяг'
    Статья 'Оттяг' представляет собой юмористическую и критическую самооценку автора, исследующую различные жизненные опыты и причуды, подчеркивающие его необычные черты личности.
  • Юмористический Тест: Оцени Свое Чувство Юмора
    Статья представляет собой юмористический тест для оценки чувства юмора и сексуальных установок через различные ситуационные вопросы, раскрывающие абсурдные и комические перспективы.
  • Оттяг
    Статья представляет собой юмористический тест для определения, какой ты студент — от весельчака до старательного ученика. В ней есть ряд вопросов оtypичных студенческих действиях и реакциях. Результаты классифицируют студентов по набранным баллам от беззаботных до ботаников.
  • Как Правильно Мучить Windows 95 - Maximum
    Статья описывает иронический подход к установке и эксплуатации операционной системы Windows 95, включая способы ее 'мучения' и троллинга. В тексте используются гиперболизированные примеры взаимодействия с ОС для создания комичного эффекта. Это развлекательный материал с элементами юмора.
  • Оттяг
    Статья - это юмористическая нарративная история о Винни-Пухе и его друзьях, которые возвращаются в Вечнозеленый лес, где их беззаботная жизнь превращается в хаос. Описываются их шалости, включая пьянство и злоключения, когда они воссоединяются и сталкиваются с различными трудностями. История раскрывает личности персонажей и их взаимодействия в комедийном ключе.
  • Новелла
    Статья описывает юмористическую новеллу, в которой капрал Джонлан рассказывает о своем первом военном задании и общении с внуком за пивом.
  • Новелла
    Новелла описывает приключенческий побег из базы глотов на старом космическом корабле, подчеркивая столкновения и хитрые маневры главного героя.
  • Новелла
    Статья рассказывает о забавной истории о двух ежиках, Пухлом и Заразe, которые после странного события обзаводятся крыльями и должны справляться с новыми обстоятельствами. История сочетает фантазию и юмор, поскольку персонажи сталкиваются с неожиданными изменениями и трудностями. Это новелла, демонстрирующая imaginative storytelling.
  • Новости
    Статья обсуждает последние новости из Рыбинска, связанные с пати FunTop, описывая вклад различных участников и команд в журнал 'Adventurer' и конкурс демо.
  • Новости
    Статья сообщает о событиях в сообществе Спектрумистов Ярославля, включая информацию о разработчиках программного обеспечения и их текущих проектах.
  • Реклама
    Статья представляет собой сборник рекламных объявлений и анонсов, связанных с ZX Spectrum, приглашая к сотрудничеству программистов, художников и музыкантов, а также подробно описывая, как получить журнал и программное обеспечение.