ZX Format #01: IS-DOS: Подробности программы gmen.com

Рубрика "Как это сделано?"

Елисеев В. А.

Программа gmen.com и системный рестарт menu (#91).

Сегодня в рубрике "Как это сделано?" мы с вами познакомимся с внутренним устройством программы gmen.com. Эта небольшая, но чрезвычайно необходимая программа управляет назначением устройств в оболочке IS-DOS, она позволяет назначить любое логическое устройство (A, B, C и т. д.) системным (S), быстрым (Q) или текущим (T). Основу этой программы составляет процедура обработки меню - специального окна с курсором и текстом опций, выбор которых вызывает исполнение соответствующих команд. За обработку меню в ядре IS-DOS отвечает системный рестарт с номером #91. Надеюсь, что подробный анализ исходного текста программы gmen.com поможет Вам легко и быстро освоить эту непростую процедуру и научиться использовать ее в своих программах. Итак, Вашему вниманию предлагается исходный текст программы gmen.com в формате IS-ASSEMBLER'a с подробными комментариями к каждой строке программы.

;****************************************

;Пример использования рестарта
;menu #91

;Утилита системного меню gmen.com
;исходный текст с комментариями

ORG #5DC0

;****************************************

;основная часть программы:
;установка цветов, открытие окна,
;вызов меню

START XOR A ;обнуление рег. A
LD IX,WND ;в IX - адрес вектора окна
LD HL,(COL+5);перенести из вектора unicolor в
LD (WND+4),HL;вектор окна цвета окна и тени
LD HL,(COL+7);перенести из вектора unicolor в
LD (IX-10),L ;вектор меню цвета основного и рабочего курсора
LD (IX-12),H ;
LD C,#61 ;открыть окно
RST #10 ;рестарт wt #61
LD C,#91 ;вызвать меню

RST #10 ;рестарт menu #91

;вектор меню находится непосредственно
;перед вектором окна, смещение для IX
;отсчитывается в обратную сторону

END XOR A ;выход в SHELL по
LD A,#F2 ;окончании работы
RET ;menu #91

;#F2 - код внутренней команды оболочки
;(аналог shell2 с сохранением позиций
;курсора в обеих панелях), которая
;выполняется по RET, если установлен
;флаг Z (командой XOR A)

;****************************************

;процедура инициализации меню:
;считывает из вектора конфигурации
;системы имена системного, быстрого и
;текущего устройств и помещает их в
;текст меню

INIT LD C,#10 ;определение адреса
RST #10 ;вектора конфигурации системы (q cnfg #10)
EXX ;в HL - адрес
LD C,#41 ;в C - число для преобразования
;номера устройства (#00-#05) в
;символьную (A-F) форму
DEC HL ;в HL - адрес номера системного
;устройства
LD A,(HL) ;считать номер
;устройства в A
ADD A,C ;преобразовать
LD (TXT+8),A ;поместить в текст меню
DEC HL ;то же для быстрого
LD A,(HL) ;устройства
ADD A,C
LD (TXT+17),A
DEC HL ;то же для текущего
LD A,(HL) ;устройства
ADD A,C
LD (TXT+26),A;
EXX ;восстановить набор регистров
RET ;возврат в menu

;****************************************

;процедура назначения одного из устройств
;системным, быстрым и текущим одновременно
;использована система "горячих клавиш"
;рестарта menu #91
;на входе в B - номер устройства в символьном (A-F) виде

ALL LD C,#10 ;определение адреса
RST #10 ;вектора конфиг.
LD A,#CF ;в A - число для
;преобразования из
;символьной формы в
;число
ADD A,B ;преобразование
EXX
DEC HL ;в HL - адрес номера системного
;устройства
LD (HL),A ;записать номер
DEC HL ;то же для быстрого
LD (HL),A
DEC HL ;то же для текущего
LD (HL),A
END1 XOR A ;возврат в menu
INC A
RET

;если процедура "горячих клавиш" заканчивается
;с установленным флагом Z, то при возврате в меню
;выполняется строка с номером, который хранится в A

;****************************************

;процедура назначения устройств
;отработка опций меню по ENTER

SET LD C,#10 ;определение адреса
RST #10 ;вектора конфиг.
EXX
LD E,(IX-9) ;считать из вектора
;меню текущую позицию курсора
XOR A
LD D,A ;обнулить D
SBC HL,DE ;установить в HL адрес соответствующего устройства в
;векторе системы путем вычитания
;номера строки меню
PUSH HL ;сохранить адрес
LD A,(HL) ;
LD H,(IX-9) ;определить относительные координаты
LD L,#08 ;для курсора редактирования (H-Y, L-X)
SCF ;установить флаг C
;для вызова dvtrn #4A после q dev #8C
LD C,#8C ;вызов q dev #8C
RST #10 ;(запрос имени устройства)

;благодаря вызову dvtrn #4A полученное
;в результате работы q dev #8C имя
;устройства в символьном виде (A-F)
;преобразуется в физический номер
;(#00-#05)

POP HL ;вспомнить адрес
;устройства в
;векторе конфиг.
JR NZ,SET2 ;если устройства с таким именем нет,
;перейти на SET2
LD (HL),A ;иначе - вписать номер по адресу
SET2 LD C,#08 ;ожидание нажатия клавиши kwait #08
RST #10 ;возврат в menu

;для возврата в menu использован фрагмент
;предшествующей процедуры (см. END1)

;****************************************

;процедура выхода из меню
;отработка опции EXIT

EXIT OR #FF ;поместить в A код
;#FF для выхода из menu и сбросить
;флаг С
RET ;возврат в menu

;****************************************

;область данных программы:

;вектор unicolor - специальная таблица,
;содержащая информацию о цветах программы и
;позволяющая редактировать их при помощи
;универсальной утилиты unicolor

COL DEFM "UnCo" ;маркер программы unicolor
DEFB #04 ;число цветов
DEFB %01110000 ;цвета окна
DEFB %01000001 ;цвета тени
DEFB %00000111 ;цвета курсора
DEFB %01000111 ;цвета рабочего курсора

;вектор меню - таблица параметров для работы menu #91,
;располагается перед вектором окна, смещение для
;индексной адресации отсчитывается в обратную
;сторону от начала вектора окна

DEFB %01100000 ;цвета рабочего курсора
DEFB %00000000 ;регистр состояния
DEFB %00000110 ;цвет курсора
DEFB #01 ;позиция курсора
DEFW INIT ;адрес процедуры инициализации
DEFW #0000 ;адрес процедуры, вызываемой при
;нажатии любой клавиши (0-нет процедуры)
DEFW TABKEY ;адрес процедуры обслуживания "горячих клавиш"
DEFW TABENT ;адрес процедуры обслуживания по ENTER

;вектор окна

WND DEFW #0415 ;координаты окна
DEFW #0806 ;размеры окна
DEFB %01110000 ;цвета окна
DEFB %00000001 ;цвета тени
DEFW #091D ;координаты печати

;карта перемещения курсора 00 - строка не используется 01 - используется

DEFB #01
DEFB #01
DEFB #01
DEFB #01

;текст окна

TXT DEFM "System A"
DEFM "Quick A"
DEFM "Current A"
DEFM "Exit"
DEFB 03 ;маркер конца текста

;таблица адресов процедур, вызываемых по нажатия ENTER

TABENT DEFW SET
DEFW SET
DEFW SET
DEFW EXIT

;таблица адресов процедур обработки "горячих клавиш"

TABKEY DEFB #65 ;e - EXIT
DEFB #04 ;номер строки меню
;для режима выполнения ее по "горячей клавише"
DEFB #00 ;маркер режима выполнения строки

DEFB #20 ;SP - EXIT
DEFW EXIT

DEFB #31 ;1 - устр. "A"
DEFW ALL

DEFB #32 ;2 - устр. "B"
DEFW ALL

DEFB #33 ;3 - устр. "С"
DEFW ALL

DEFB #34 ;4 - устр. "D"
DEFW ALL

DEFB #35 ;5 - устр. "E"
DEFW ALL

DEFB #36 ;6 - устр. "F"
DEFW ALL

DEFB #FF ;маркер конца списка

;***************************************

Автор программы - А. Леонтьев
Комментарии - В. Елисеев

Оглавление издания: ZX Format #01

  • IS-DOS
    IskraSoft представляет IS-DOS Classic 4.0 с новыми функциями редактирования текста, утилитой для работы с дисками, контроллером жесткого диска для ZX Spectrum и отладчиком программ.
  • IS-DOS - Владимир Елисеев
    Обзор IS-DOS для ZX Spectrum с упором на преимущества над TR-DOS. Обсуждение установки, использования и управления файлами в IS-DOS. Введение в системные утилиты и интерфейс, похожий на Norton Commander.
  • IS-DOS - Владимир Елисеев
    Статья представляет краткий путеводитель по системному диску IS-DOS, перечисляя все основные файлы с пояснениями. Файлы отсортированы по алфавиту и сгруппированы по каталогам для удобной навигации. Путеводитель предоставляет общий обзор файлов и команд без подробных описаний.
  • IS-DOS - Владимир Елисеев
    Обсуждение стандарта UniColor для настройки цветов в программах IS-DOS, его реализации и преимуществ для настройки пользователем.
  • IS-DOS - Владимир Елисеев
    Обсуждение особенностей оконного интерфейса IS-DOS. Реализация оконной системы в IS-DOS и её преимущества. Примеры программ для создания окон и рамок.
  • IS-DOS - Владимир Елисеев
    Описание внутреннего устройства программы gmen.com для IS-DOS, сосредоточено на управлении устройствами и обработке меню с подробным исходным кодом и комментариями.
  • Железо - Vladimir Larkov
    Обсуждение модификации железа Scorpion ZS-256 для совместимости с определённым ПО. Описывается блокировка порта #1FFD для запуска несовместимых программ. Предоставляются технические детали для реализации.
  • Железо - Nemo
    Обсуждение аппаратных тормозов для ZX Spectrum. Фокус на создании и влиянии тормозов на разогнанные процессоры. Предупреждение о возможных побочных эффектах.
  • Железо
    Обсуждение непрактичности ремонта старых компьютеров и экономического смысла замены их на современное оборудование. Статья подчеркивает трудности в самостоятельном ремонте и предлагает альтернативные решения. Подчеркивает преимущества обновления на более новые и надежные компоненты.
  • Железо
    Обсуждение новых разработок периферии для Scorpion ZS 256, включая инновационный универсальный контроллер и интерфейс MIDI. Акцент на улучшении контроллеров клавиатуры и мыши и расширении возможностей встроенного ПО. Описание профессионального расширения ПЗУ и турбо-режима для повышения производительности.
  • Игрушки - Ruster
    Подробное прохождение игры Crystal Kingdom Dizzy, включая решения головоломок и советы по продвижению в сюжете.
  • Игрушки - Павел Рындин
    Описание логической игры 'Быки и коровы', ее механики и игрового процесса. Объясняются уровни сложности и цель угадать число за минимальное количество попыток.
  • Игрушки - Вячеслав Медноногов
    Обсуждение нюансов игры 'UFO: Enemy Unknown', акцент на инопланетных видах, их тактике и стратегиях игры. Подробности о механике игры и будущем продолжении 'UFO-2: Devils of the Abyss'. Включает информацию о программировании и историю разработки.
  • Игрушки - SParker
    Обзор игр и программного обеспечения на рынке Санкт-Петербурга в 1995 году.
  • Интервью
    Вячеслав Медноногов делится своим путем как программиста, начиная с сборки своего первого Spectrum-48 до разработки известных игр, таких как 'НЛО. Враг неизвестен'. Он описывает трудности и инсайты в разработке игр и подъем русской локализации игр. Его опыт подчеркивает эволюцию программирования и распространения ПО в 1990-х.
  • Информация
    Введение в ZX-Format, новый электронный журнал для энтузиастов ZX Spectrum, сосредоточенный на играх, программировании, оборудовании и взаимодействии сообщества.
  • Конкурс
    Обсуждение организации нового конкурса для журнала. Читатели приглашаются предложить свои идеи тем. Отобранные темы будут представлены в будущих номерах.
  • Конкурс
    ZX Format объявляет конкурс на лучшую миссию, созданную с помощью редактора миссий для игры Laser Squad. Принимаются работы по почте или лично. Победитель получит коробку дискет 3M и следующий номер бесплатно.
  • Отдохнём - Килат Амор
    День программиста, наполненный сновидениями, играми и непринужденными разговорами. Васечкин балансирует между амбициями и отдыхом, воплощая дух программиста. Размышления о требованиях и удовольствиях жизни программиста.
  • Почтовый ящик - Максим Романов
    Обсуждение предложений по аппаратному и программному обеспечению в Санкт-Петербурге от LOGROS и Create Soft, включая подробности о интерфейсе Kempston Mouse.
  • Почтовый ящик - SParker
    Сборник чит-кодов для игр ZX Spectrum от Сергея Павлова. Техники получения дополнительных жизней и бессмертия. Не рекомендуется любителям честной игры.
  • Почтовый ящик
    Описание правил отправки писем и статей в журнал, включая требования к форматированию и предпочтения в отправке.
  • Премьера - Алексей Щекин
    Геймплей игры Lines на ZX Spectrum, аналог Color Lines. Передвигайте шарики для составления линий одного цвета. Описаны правила и управление.
  • Программистам - Дмитрий Рудовский
    Введение в продвинутые методы программирования на BASIC для ZX Spectrum 48, подчеркивающие его преимущества перед BASIC 128. В планах будущих статей сервисные программы и расширения языка. Статья служит руководством для опытных программистов.
  • Программистам - Михаил Спицын
    Введение в язык ассемблера на ZX Spectrum. Объяснение структуры процессора Z80, регистров и основных команд. Включает примеры программ для обучения.
  • Программистам - Андрей Седов
    Редактор миссий для Laser Squad от Андрея Седова позволяет фанатам создавать новые миссии. Включает удобный интерфейс с минимальными управляющими клавишами. Предоставляет функции редактирования объектов, изменения цен и назначения спрайтов.
  • Разное
    История разработки компьютера Amiga, его создателей и ключевых особенностей. Эволюция от аркадных игр до лидирующего домашнего компьютера. Успех на рынке и технологические достижения Amiga.
  • Разное
    Обзор готовящихся к выпуску программных продуктов для ZX Spectrum с демо. Особое внимание уделено приключенческим играм, пробам RPG и стратегическим тактикам. В разработке участвуют несколько известных разработчиков.