Adventurer #08: Обмен опытом - Доработка ассемблера ZX ASM 3.0

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

Доработка ZX ASM 3.0

Этому очень хорошему ассемблеру не хватает некоторых возможностей, необходимых при отладке программ. Так, после запуска отлаживаемой программы и окончания ее работы управление сразу же передается ассемблеру, и иногда просто невозможно разглядеть, что же вывела на экран программа. Тут не помешала бы задержка до нажатия любой клавиши. Естественно, такая задержка должна быть отключаемой по желанию пользователя. Неплохо было бы иметь возможность увидеть экран отлаживаемой программы в любой момент работы в ассемблере. При отладке программ на PC, например, с помощью Turbo Debugger, можно поступить наиболее естественно: подключаем к компьютеру два монитора и на одном видим отладчик, а на другом - экран отлаживаемой программы. Спектруму, конечно, до этого далеко, но кое-что можно сделать и на нем. Например, переключать экран ассемблера и экран программы, просто нажав некоторую комбинацию клавиш. Иногда сразу после окончания работы запущенной из ассемблера программы бывает необходимо запустить отладчик. Если действовать обычным путем (т. е. вызывать отладчик из ассемблера), от окончания работы программы до запуска отладчика пройдет довольно заметный промежуток времени (около двух секунд). Это связано с тем, что и при возврате в ассемблер, и при вызове отладчика происходит обмен областей памяти. Поэтому полезной была бы возможность запуска отладчика сразу после окончания работы программы, при нажатии определенной комбинации клавиш. Оказывается, все эти возможности можно реализовать, и притом довольно просто. Как это сделать, будет показано ниже, а сейчас рассмотрим, как будет выглядеть работа с таким ассемблером. Включать и отключать режим ожидания нажатия клавиши после окончания работы запущенной из ассемблера программы можно с помощью изменения цвета бордюра (меню Setup/Colors). Если установить цвет 0, режим выключен, 1 - включен. Можно установить и другие цвета, роль играет только младший бит задаваемого числа. Когда режим включен, после окончания работы запущенной из ассемблера программы или подпрограммы (пункты меню Run и Call) бордюр станет зеленым (это сигнал, что вам нужно нажать клавишу). При нажатии клавиши "D" сразу же запустится отладчик, а при нажатии любой другой клавиши управление будет передано ассемблеру. Такой же эффект (пауза до нажатия клавиши) возникнет и в том случае, когда вы просто запускаете ассемблер (например, вышли из него в Бейсик, а потом снова запустили командой RUN; или когда вышли из ASM'а в отладчик, а оттуда - опять в ассемблер). В этом случае просто дольше удерживайте нажатой клавишу ENTER. Теперь о том, как в любой момент работы с ассемблером посмотреть экран отлаживаемой программы. Когда программа, запущенная из ассемблера, заканчивает свою работу (или когда вы просто запускаете ассемблер), содержимое дисплейного файла (#4000-#5AFF) перебрасывается в 7-й банк ОЗУ, на альтернативный экран. Чтобы посмотреть его содержимое, достаточно нажать комбинацию клавиш SS+I в любое время, когда ассемблер ждет от вас нажатия клавиши. Эта возможность не зависит от того, включен ли режим ожидания нажатия клавиши. Ну а теперь - действия по доработке ассемблера. Запустите ZX ASM, потом с помощью меню Run/Debugger запустите отладчик. Установите Bank=#1C (в этом банке памяти находится ассемблер). По адресу #C000 (точка входа для запуска ассемблера) поместите команду JP #D562. Таким образом, при каждом запуске ассемблера (в том числе и после выполнения пунктов меню Run/Run и Run/Call ...) управление будет передаваться по адресу #D562. По адресам #D55F, #D560, #D561 поместите коды #FF. Это нужно, чтобы отключить обработку меню Print/Format, Print/fonT, Print/Driver. Они все равно не нужны, т. к. соответствующие функции в этой версии ZX ASM не поддерживаются. А на освободившемся месте разместим собственную подпрограмму:

#D562: LD A,(#5C48) ;BORDCR -
;переменная
;Бейсика
BIT 3,A ;Значение 3-го
;бита определ.
;необходимость
;ожидания
;нажатия клав.
JR Z,#D589 ;Если 0 - сразу
;на запуск ASM

;Задержка до нажатия клавиши:

LD A,#04 ;Зеленый BORDER
OUT (#FE),A

#D56D: XOR A ;Ждем...
IN A,(#FE)
CPL
AND #1F
JR Z,#D56D

LD A,#FD ;Нажата "D"?
IN A,(#FE)
BIT 2,A
JR NZ,#D589 ;Нет - запуск
;ASM

;Если нажата клавиша "D", запускаем
;отладчик (т.е. передаем управление
;на адрес #DB00 в 7-м банке памяти):

LD HL,#DB00 ;Адрес
PUSH HL ;В стек его...
LD BC,#7FFD ;Порт
LD A,#1F ;Туда выдаем
JP #1E7D ;Там команды
;OUT (C),A: RET

#D589: LD HL,#D5EF ;Перебрасываем
LD DE,#5B58 ;подпрограмму
LD BC,#0019 ;сохранени
LDIR ;экрана
CALL #5B58 ;и выполняем ее

LD HL,#D5CC ;Перебрасываем
LD DE,#5B58 ;п/п обработки
LD BC,#0023 ;нажатия клавиш
LDIR

;Теперь везде, где в ассемблере стоит
;команда LD A,(#5C08), т.е. проверка,
;нажата клавиша или нет, поместим
;команду вызова нашей п/п, которая
;будет отслеживать нажатие пользователем
;комбинации клавиш SS+I:

LD HL,#5B58 ;адрес п/п
LD A,#CD ;код CALL
LD (#E2C3),A
LD (#E2C4),HL ;вместо
LD (#E868),A ;LD A,(#5C08)
LD (#E869),HL ;помещаем
LD (#EAD0),A ;CALL #5B58
LD (#EAD1),HL
LD (#EF9F),A
LD (#EFA0),HL
LD (#F22A),A
LD (#F22B),HL

;Запуск ASM'а: в исходном варианте по
;адресу #C000 были команды CALL #C006:
;JP #6000. Но их нельзя здесь писать,
;т.к. при работе подпрограммы #C006
;происходит обмен участков памяти, и
;при возврате из нее окажется, что
;вместо команды JP #6000 будет что-то
;постороннее. Поэтому приходится писать
;так:

LD HL,#6000
PUSH HL
JP #C006

;Подпрограмма обработки нажатия клавиш.
;При своей работе находится в буфере
;принтера с адреса #5B58.

#D5CC: LD A,(#5C08) ;код клавиши
CP #AC ;это SS+I ?
JR NZ,#D5EE ;нет->выходим

XOR A
LD (#5C08),A
PUSH BC
LD BC,#7FFD ;устанавливаем
LD A,#1C ;альтернативн.
OUT (C),A ;экран
#D5DF: LD A,(#5C08) ;и ждем
AND A ;нажатия
JR Z,#D5DF ;клавиши
LD A,#14
OUT (C),A ;осн. экран
XOR A
LD (#5C08),A
POP BC
#D5EE: RET ;выход из п/п

;Подпрограмма сохранения экрана.
;Вызывается при каждом запуске ассемблера
;в том числе и после окончания работы
;запущенной из него программы.

#D5EF: LD BC,#7FFD
LD A,#17 ;установили
OUT (C),A ;7-й банк
EXX
LD HL,#4000 ;сохраняем
LD DE,#C000 ;экран
LD BC,#1B00
LDIR
EXX
LD A,#14 ;восстановили
OUT (C),A ;банк ASM'а
RET

После того, как вы набрали эту программу, запишите ее в файл "STOPKEY" с параметрами: Start=#D55F, Length=#A9. Для контроля привожу дамп этой области памяти: #D55F: #FF,#FF,#FF,#3A,#48,#5C,#CB,#5F #D567: #28,#20,#3E,#04,#D3,#FE,#AF,#DB #D56F: #FE,#2F,#E6,#1F,#28,#F8,#3E,#FD #D577: #DB,#FE,#CB,#57,#20,#0C,#21,#00 #D57F: #DB,#E5,#01,#FD,#7F,#3E,#1F,#C3 #D587: #7D,#1E,#21,#EF,#D5,#11,#58,#5B #D58F: #01,#19,#00,#ED,#B0,#CD,#58,#5B #D597: #21,#CC,#D5,#11,#58,#5B,#01,#23 #D59F: #00,#ED,#B0,#21,#58,#5B,#3E,#CD #D5A7: #32,#C3,#E2,#22,#C4,#E2,#32,#68 #D5AF: #E8,#22,#69,#E8,#32,#D0,#EA,#22 #D5B7: #D1,#EA,#32,#9F,#EF,#22,#A0,#EF #D5BF: #32,#2A,#F2,#22,#2B,#F2,#21,#00 #D5C7: #60,#E5,#C3,#06,#C0,#3A,#08,#5C #D5CF: #FE,#AC,#20,#1B,#AF,#32,#08,#5C #D5D7: #C5,#01,#FD,#7F,#3E,#1C,#ED,#79 #D5DF: #3A,#08,#5C,#A7,#28,#FA,#3E,#14 #D5E7: #ED,#79,#AF,#32,#08,#5C,#C1,#C9 #D5EF: #01,#FD,#7F,#3E,#17,#ED,#79,#D9 #D5F7: #21,#00,#40,#11,#00,#C0,#01,#00 #D5FF: #1B,#ED,#B0,#D9,#3E,#14,#ED,#79 #D607: #C9

Затем выйдите из отладчика в ZX ASM. Сразу же можно опробовать работу комбинации клавиш SS+I. Правда, ничего интересного вы на альтернативном экране пока не увидите - там будет всего-навсего то, что было на основном экране в момент выхода в ZX ASM. Установите Border = 1, чтобы включить режим ожидания нажатия клавиши. При этом бордюр станет синим. Наберите какую-нибудь программу, ассемблируйте и запустите ее. После окончания ее работы бордюр должен стать зеленым. Нажмите любую клавишу. Теперь при работе в ассемблере вы можете в любой момент увидеть результаты работы вашей программы, нажав SS+I. Чтобы при каждой загрузке ассемблера вам не приходилось загружать в 4-й банк ОЗУ файл "STOPKEY" и ставить команду #C000: JP #D562, попробуйте сами написать новый загрузчик для ZX ASM, который выполнял бы эти действия автоматически. Простейший способ - воспользоваться кнопкой MAGIC (если получится, конечно).

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