Adventurer #08: Обмен опытом: модульная система ART STUDIO и её возможности

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

ART STUDIO и принцип открытой архитектуры

Есть такая версия графического редактора ART STUDIO (v2.01c, corrected by ROM/SM and FUX/SM), которая может проигрывать музыку во время работы. Т. е. на диске записан сам редактор и сразу же за ним - файл "artmusic", содержащий откомпилированную музыку в формате PRO TRACKER или SOUND TRACKER PRO. При запуске редактора этот файл загружается в свободный банк ОЗУ (1 или 6), и в процессе работы происходит вызов player 'а по прерываниям. (Оказалось, что имя этого файла не имеет значения, лишь бы он был записан непосредственно за редактором, т. е. файлом "ART ".) Раньше я пользовался другими версиями ART STUDIO, у которых были свои недостатки: то стрелка исчезнет непонятно куда, то на экране появятся цветные полосы и все зависнет... Так что с появлением новой версии я перешел на нее. Но и тут меня поджидали неприятные особенности (в общем-то, известные всем пользователям ART STUDIO) - включение белого border 'а в режимах Magnify, Font editor и Scrapbook. Надо было что-то с этим делать, и я решил немного изменить player в файле с музыкой. Редактор устанавливал белый border, а вызываемый по прерываниям player, помимо основной своей задачи, устанавливал нужный мне цвет.

Довольно долго я работал с такой версией ART STUDIO, пока не возникла другая проблема: нужно было нарисовать некоторое изображение по известным координатам его точек. Как, например, отметить на рисунке точку с координатами X=45, Y=83? Вот если бы на экране постоянно отображались текущие координаты курсора...

И тут я подумал: а что если написать модуль с таким же стартовым адресом (#C000), такими же точками входа (INIT = #C000, PLAY = #C006), как и у откомпилированной музыки, а потом "подсунуть" его редактору, записав вместо файла "artmusic". А этот модуль, в свою очередь, каждый раз, когда к нему производится обращение, будет выводить на экран координаты курсора.

Модуль (известный под именем art_xy) был написан и успешно выводил координаты (а кроме того, следил за border 'ом и устанавливал нужные мне начальные значения атрибутов). В конце этой статьи приведен исходный текст его главной части, который пригодится вам при разработке собственных модулей.

Что же мы видим? Оказывается, любую отсутствующую в ART STUDIO возможность нетрудно реализовать самому, написав для этого специальный модуль. А если написано несколько модулей, то можно загружать их по очереди, не выходя из редактора (для этого, естественно, в каждом модуле должна быть предусмотрена команда - загрузить другой модуль и передать ему управление).

╔════════════════╗ ╔════════════════╗
─╢ ОЗУ ╟─ ║ ▒▒▒▒▒▒ ДИСК ═ ║
─╢┌──────────────┐╟─ ║ ▒▒▒▒▒▒ ══════ ╔╝
─╢│ │╟─ ║ ┌────────┐ ╚╗
─╢│ ART STUDIO │╟─ ║ │модуль 1│ ║
─╢│ │╟─ ║ └────────┘ ║
─╢│ ┌──────────┐ │╟─ ║ ... ║
─╢│ │┌────────┐│ │╟─ ║ ┌────────┐ ║
─╢│ ││модуль 1││ │╟─ ║ │модуль n│ ║
─╢└─┘└────────┘└─┘╟─ ║ └────────┘ ║
╚════════════════╝ ╚════════════════╝

Создать свой модуль, без сомнения, намного легче, чем написать новый графический редактор "с нуля". Различные модули могут быть написаны разными людьми, независимо друг от друга. А в этом и заключается принцип ОТКРЫТОЙ АРХИТЕКТУРЫ. Наверняка James Hutchby, автор ART STUDIO, и не предполагал о таких возможностях своего редактора.

Какие функции могут содержаться в дополнительном модуле? Например, быстрый просмотр записанных на диске картинок без загрузки их в редактор, сохранение и восстановление конфигурации, использование дополнительной памяти (>128K) в качестве RAM-диска, выполнение различных преобразований над отмеченным окном, ну и конечно, музыка и screen saver. Все это вполне уместится в 16 килобайт.

В "ZX-FORMAT #7" можно прочесть о проекте "STATE OF THE ART" группы "AVALON". Как там написано, это новый графический редактор с необыкновенными возможностями, сочетающий достоинства лучших редакторов на SPECTRUM, PC и AMIGA. Хотелось бы, чтобы и там использовался модульный принцип построения, с подробным описанием интерфейса между модулем и редактором, чтобы каждый пользователь мог сам реализовать нужную ему функцию. Это дает практически неограниченное расширение возможностей редактора.

──────────────
Теперь я более подробно расскажу о том, как написать собственный модуль для ART STUDIO. Начну с известных мне адресов, по которым находятся переменные редактора:

INK - 52186 (0-7, 8-transp.)
PAPER - 52187 (0-7, 8-transp.)
BORDER - 52188 (0-7)
BRIGHT - 52189 (0-off, 1-on, 2-transp.)
FLASH - 52190 (0-off, 1-on, 2-transp.)

Абсолютные координаты курсора (X - 56035, Y - 56036) дублируются по адресам 64977 и 64978 соответственно. Начало координат расположено в левом верхнем углу экрана.

Так как эти переменные находятся в 0 банке памяти, а модуль загружается в 1 или 6 банк, доступ к ним осуществляется с помощью специальных функций - см. листинг.

Во время первых 50 обращений к модулю (т. е. 1 секунда реального времени после запуска редактора) происходит распаковка редактора и инициализация переменных. Если в модуле предусмотрено изменение задаваемых по умолчанию атрибутов (INK, PAPER, BORDER) на другие - эти атрибуты нужно устанавливать заново при каждом из первых 50 обращений. Объяснение тут такое: очевидно, при запуске редактора выполняются команды следующего вида:

LD A,0
LD (52186),A ;INK
LD A,7
LD (52187),A ;PAPER
LD A,7
LD (52188),A ;BORDER

... ;происходит прерывание, вызывает-
;с модуль, который устанавливает
;нужные INK, PAPER, BORDER

CALL CLS ;очистка экрана
;в соотв. с атрибутами

Видно, что установка нужных атрибутов должна произойти после того, как редактор установит их значения, но до того, как редактор выполнит очистку экрана. А так как неизвестно, какое по счету прерывание будет соответствовать этому моменту, приходится выполнять установку атрибутов 50 раз.

Кстати, если при запуске редактора нужно изменить заданные по умолчанию значения атрибутов на "transparent", это лучше сделать после первых 50 вызовов модуля - иначе во время очистки экрана атрибуты знакомест установятся случайным образом.

Исходный текст
главной части модуля "art_xy"
─────────────────────────────

ORG #C000

JP INIT ;#C000 - INIT
DS 3
JP PLAY ;#C006 - PLAY
RET ;#C009 - STOP

;Значения INK,PAPER,BORDER:

COLORS DB 7,0,0

;---------------------------------------
;Процедура INIT - выполняется перед
;началом работы редактора.

INIT DI

;Сохраняем память под резидентом:

CALL SAVE_M

;Переносим резидент N3 и запускаем его.
;В ячейке BANK получаем номер банка,
;куда загружен art_xy:

LD HL,RES3_B
CALL LOAD_R
CALL #6000

;Восстанавливаем ранее сохраненный
;участок памяти под резидентом:

CALL LOAD_M

;Вывод сообщения "загружен модуль... "
;и ожидание нажатия клавиши:

CALL #D000
INIT1 XOR A
IN A,(254)
CPL
AND 31
JR Z,INIT1
EI
RET

;---------------------------------------
;Процедура PLAY - выполняется каждые
;1/50 секунды.

PLAY DI
CALL SAVE_M
...
CALL LOAD_M
EI
RET

;---------------------------------------
;Процедура LOAD_M сохраняет в буфере
;участок памяти под резидентом
;(адрес начала - #6000, длина участка -
;длина самого длинного резидента, в
;данном модуле это резидент N3).

LOAD_M LD HL,RES_BUF
LOAD_R LD DE,#6000
LD BC,RES3_E-RES3_B
LDIR
RET

;---------------------------------------
;Процедура SAVE_M восстанавливает ранее
;запомненный (с помощью LOAD_M) участок
;памяти.

SAVE_M LD HL,#6000
LD DE,RES_BUF
LD BC,RES3_E-RES3_B
LDIR
RET

;---------------------------------------
;Процедура GET_MEM - аналог команды
;LD A,(DE). Нужна для доступа к 0 банку
;памяти.

GET_MEM PUSH HL
PUSH BC
PUSH DE
LD HL,RES1_B
CALL LOAD_R
POP DE
CALL #6000
POP BC
POP HL
RET

;---------------------------------------
;Процедура TO_MEM - аналог команды
;LD (DE),A. Нужна для доступа к 0 банку
;памяти.

TO_MEM PUSH HL
PUSH BC
PUSH DE
LD HL,RES2_B
CALL LOAD_R
POP DE
CALL #6000
POP BC
POP HL
RET

;---------------------------------------
;Резидент N1 - LD A,(DE):

RES1_B LD BC,#7FFD
LD HL,(BANK)
OUT (C),H
LD A,(DE)
OUT (C),L
RET
RES1_E

;---------------------------------------
;Резидент N2 - LD (DE),A:

RES2_B LD BC,#7FFD
LD HL,(BANK)
OUT (C),H
LD (DE),A
OUT (C),L
RET
RES2_E

;--------------------------------------
;Резидент N3 определяет, в какой банк
;(1 или 6) загружен модуль art_xy.
;Запоминает это значение в переменной
;BANK.

RES3_B LD BC,#7FFD
LD A,#11
OUT (C),A
LD A,(PRIZN)
CP "+"
LD A,#11
JR Z,RES3_1
LD A,#16
RES3_1 OUT (C),A
LD (BANK),A
RET
RES3_E

;---------------------------------------
;Буфер дл запоминания участка памяти
;под резидентом:

RES_BUF DS RES3_E-RES3_B

PRIZN DB "+"
BANK DW #1000

Оглавление издания: 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, приглашая к сотрудничеству программистов, художников и музыкантов, а также подробно описывая, как получить журнал и программное обеспечение.