ZX Format #02: IS-DOS: Рестарт Монитора и Строкового Редактора

Упомянутые программы

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

В. Елисеев
Монитор командной строки IS-DOS и рестарт строкового редактора #6E smbgt

Здравствуйте, уважаемые читатели ZX Format! Надеюсь, что тем из вас, кто решил попробовать свои силы в программировании в среде IS-DOS, было интересно прочитать о внутреннем устройстве системной утилиты gmen.com, о которой шла речь в первом номере журнала. Сегодня мы с вами продолжим изучение рестартов IS-DOS, так сказать, на живых примерах и рассмотрим в общих чертах использование рестарта строкового редактора #6E smbgt на примере утилиты mon.com. Утилита mon.com хорошо известна каждому пользователю IS-DOS, ведь с ее помощью организуется диалог пользователя с системой и вводятся все основные команды. Она позволяет принимать с клавиатуры и редактировать текст вводимой команды и по нажатию ENTER передает его системе, вызывая на исполнение команду, указанную в тексте. Для ввода и редактирования текста команды в мониторе используется рестарт #6E smbgt, представляющий собой функционально законченный модуль строкового редактора с максимальным объемом строки 256 байт. Рассмотрим текст программы:

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

;Пример использования строкового редактора IS-DOS #6E smbgt

;Монитор командной строки mon.com
;исходный текст с комментариями

ORG #5D64

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

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

START LD C,#45 ;определение адреса
RST #10 ;буфера командной
EXX ;строки (в HL)
PUSH HL ;адрес - в стек

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

;инициализация программы, подготовка рабочего окна, буфера и т. д.

;подпрограмма очистки буфера

CLBUF LD B,#7F ;длина буфера

CLBUF1 LD (HL),#20 ;инициализация
INC HL ;буфера
DJNZ CLBUF1 ;командной строки

;открываем окно для редактора
;предварительно определяем по содержимому системных переменных текущие цвета, чтобы окно не выделялось на общем фоне и помещаем их в вектор окна.

LD IX,WIND ;адрес вектора окна
;редактора

LD C,#72 ;определить адрес
RST #10 ;вектора экрана
EXX ; (в HL)

LD A,(HL) ;считать цвета
;текущего экрана
LD (IX+4),A ;ввести текущие
;цвета в вектор
;окна редактора

;рисуем окно

LD C,#61 ;инициализация окна
RST #10

;инициализируем курсор

CURINI SBC HL,HL ;обнуление HL
LD C,#6B ;установка
RST #10 ;координат курсора

POP HL ;в HL - адрес
;буфера командной
;строки

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

;ввод и редактирование команды

;задаем параметры для редактора - ширину
;окна и байт регистра состояния - и вызываем редактор

LD A,#2A ;ширина окна ред.
LD DE,#0B00 ;регистр состояния

;байт регистра состояния определяет установки редактора по умолчанию:

; байт 0=0 - строчные буквы
; 1 - прописные буквы
; байт 1=0 - латинский регистр
; 1 - русский регистр
; байт 2=0 - режим текста
; 1 - режим псевдографики
; байт 3 должен быть равен 1

LD BC,#036E ;вызов smbgt #6E
RST #10

;рестарт smbgt принимает с клавиатуры любые символы, а также самостоятельно отрабатывает управляющие клавиши перемещения курсора и Delete, по нажатию ENTER происходит завершение редактирования и выход, при этом в регистре A содержится длина введенной строки. Выход возможен также и по клавишам CS+9, CS+SS, SS+A, SS+SPACE, SS+ENTER, при этом в регистре A возвращается код клавиши, вызвавшей выход из редактора

RET C ;выход по ошибке
;ввода-вывода

;если нажаты CS+9, CS+SS, SS+A,
;SS+SPACE, SS+ENTER, то

JR NZ,EXIT ;выход по отказу

;проверка - не пустой ли буфер?

AND A ;проверка флага
;ZERO
JR Z,START ;переход на начало
;при пустом буфере

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

;обработка содержимого буфера

PUSH HL ;запомнить адрес
;буфера ком. строки
LD D,E ;обнулить D
LD E,A ;в E - длина строки
ADD HL,DE ;определить адрес
;первой свободной
;ячейки буфера
LD (HL),#0D ;добавить ENTER

EX (SP),HL ;поместить в стек
;адрес конца буфера
;командной строки,
;а в HL - начала
PUSH HL ;поместить адрес
;начала командной
;строки в стек над
;адресом конца

LD B,(HL) ;сохранить первый
PUSH BC ;символ ком. строки

PUSH IX ;сохранить адрес
;вектора окна

;передача имени и параметров введенной
;команды интерпретатору IS-DOS
XOR A ;установить A=0
LD C,#44 ;вызов exebat #44
RST #10

;восстановление содержимого регистров

POP IX ;вектор окна
POP BC ;первый символ к.с.
POP HL ;адрес начала к.с.
POP DE ;адрес конца к.с.

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

;обработка результата выполнения команды
;и восстановление содержимого буфера для
;редактирования в случае ошибки

RET C ;выход по серьезной
;ошибке exebat

LD A,#20 ;в A - код пробела
LD (DE),A ;"забить" ENTER в
;буфере ком. строки
LD (HL),B ;восстановить
;первый символ в
;буфере ком. строки
PUSH HL ;запомнить в стеке
;адрес буфера к.с.

JR NZ,CURINI ;при ошибке в к.с.
;возврат с сохранением текста строки
;для исправления

JR CLBUF ;корректный возврат
;с очисткой буфера
;от выполненной
;строки

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

;выход по отказу

EXIT LD (HL),#0D ;поместить ENTER в
;начало буфера к.с.
XOR A ;установить флаги
;на выходе:
;Z=1, C=0
LD A,#F4 ;установить код
;внутренней команды
;оболочки (аналог
;shel1 #81 с сохранением позиций
;курсора на обеих
;панелях)
RET

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

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

;вектор окна:

WIND DEFB #00 ;X-координата окна
DEFB #00 ;Y-координата окна
DEFB #03 ;высота окна
DEFB #20 ;ширина окна
DEFB %00101000 ;цвета окна
DEFB %11111111 ;цвет тени #FF ;тень не выводится
DEFB #00 ;X-позиция печати
DEFB #00 ;Y-позиция печати

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

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

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

  • IS-DOS
    Анонс готового к использованию в школах аппаратно-программного комплекса от Iskra Soft и Петерс, оснащенного сетевым компьютерным классом на базе ZX Spectrum и IS-DOS.
  • IS-DOS - Владимир Елисеев
    Объяснение работы командного монитора и рестарта текстового редактора в IS-DOS на примере утилиты mon.com.
  • IS-DOS
    Введение в системные утилиты IS-DOS, охватывающее функции помощи, пользовательского меню, просмотра файлов, редактирования и операций с файлами.
  • IS-DOS
    Подробное описание программы eliminat.com для освобождения памяти от резидентных задач и драйверов с интерактивным режимом и ключами командной строки. Специфические номера каналов выделены для типов задач и драйверов. Включает варианты использования и настройку цветов.
  • Оконная система IS-DOS - Владимир Елисеев
    Изучение перезапусков оконной системы IS-DOS для печати текста в окнах и абсолютных координатах экрана. Примеры реализации перезапусков, таких как lwt, adrwt, lenwt, prstr, str и lnstr. Продолжение о вспомогательных перезапусках в следующем номере.
  • Ассемблер
    Введение в основы языка ассемблера с акцентом на флаги, арифметические операции и манипуляцию регистрами. Обсуждаются операции сложения, вычитания и сложные операции, такие как умножение и деление, через примеры. Подчеркивается использование специфических команд ассемблера и их функций для ZX Spectrum.
  • Железо
    Обсуждение модификаций железа для Scorpion ZS-256-Turbo, включая установку переключателя Turbo/Normal. Плюсы и минусы программных методов переключения. Советы по пайке и настройке схем.
  • Железо
    Обсуждение новой музыкальной приставки для ZX Spectrum от X-TRADE и HACKER STINGER под названием 'ZX GENERAL SOUND', предлагающей высокое качество звука и минимальное использование процессора.
  • Железо
    Обсуждение инноваций в железе и маркетинговых стратегий, с акцентом на интерфейсы мыши и клавиатуры для ZX Spectrum. Критика вводящей в заблуждение рекламы конкурентов и анализ технологий serial и пассивной мыши. Автор ставит под сомнение необходимость и стоимость продвинутых функций.
  • Железо
    Обсуждение методов аппаратного ускорения для ZX Spectrum, с акцентом на турбо-режимы и их влияние на производительность и совместимость.
  • Игрушки
    Фэнтезийный рассказ о магических существах, борющихся с вторжением людей. Главный герой набирает союзников для восстановления былого величия страны. Испытания включают поиск инструментов, преодоление препятствий и оживление компаньонов.
  • Игрушки
    Обзор игры 'Carrier Command', с акцентом на стратегические и симуляционные аспекты. Включает детали игровых механик, управления и целей. Подчеркивает стратегии для успеха и уникальные особенности, такие как управление ресурсами и автономными системами.
  • Интервью
    Интервью с Сергеем Зоновым и Андреем Ларченко об их опыте с микропроцессорами и разработке ZX Spectrum, включая создание компьютера Scorpion ZS 256.
  • Информация
    Контактная информация и список сотрудников ZX-Format №2 (1995), включая редактора, кодеров и дизайнеров.
  • Информация
    Обращение редактора к читателям ZX Format, обсуждение положительных отзывов, прошлых ошибок и поисков карикатуриста, планы на будущее для журнала.
  • Информация
    Обсуждение новой интерпретации системы оконного меню 'PULLDOWN' для ZX Spectrum с акцентом на обновления интерфейса и улучшение взаимодействия с пользователем.
  • Информация
    Обсуждение компаний, незаконно распространяющих ZX Format, с акцентом на преимущества покупки официальных копий.
  • Конкурс
    Обсуждается отсутствие участия в конкурсе ZX Format, приводятся правила и призы, и поощряются читатели к предложению новых идей.
  • Отдохнём
    Юмористический рассказ о трудностях продавца софта при общении с несведущими покупателями, демонстрирующий нервозность его работы.
  • Почтовый ящик
    Обзор комплектующих и цен для энтузиастов ZX Spectrum с деталями заказа.
  • Почтовый ящик
    Раздел писем читателей в ZX Format #02 обсуждает отзывы читателей, затрагивает вопросы с функциями ZX Format и предлагает будущие улучшения.
  • Премьера
    Инструкция к музыкальному редактору Digital Studio v1.12 для ZX Spectrum, включая функции, навигацию по меню и использование Digital Studio Compiler.
  • Программистам
    Изучение инструментов, расширяющих стандартный Basic 48, включая Renumber для Basic 128, Trace & Speed, Blast Toolkit и ZXeditor, с акцентом на их функции и полезности.
  • Разное
    История моделей компьютеров Amiga и их эволюция от A1000 до A4000/60T с характеристиками и уникальными особенностями. Объяснение технических терминов и различий между chip и fast памятью. Упоминание о новых разработках, таких как AGA чипсет и модели для разных нужд.
  • Разное
    Статья представляет предстоящие релизы программного обеспечения для ZX Spectrum и рассматривает новшества игр, таких как 'Приключения Винни Пуха' и 'НЛО 2: Дьяволы Бездны'. Она выделяет особенности, создателей и технические требования. Включает анонсы от SOFTLAND и Cracked Masters Group.
  • Системы
    Обсуждение создания музыки с Instrument 3.01, акцент на оцифрованный звук. Анализ возможностей программы и конвертация из ASC Sound Master. Инструкции по созданию композиции и конвертации.
  • Что новенького
    Обзор новых игр для ZX Spectrum на петербургском рынке в конце 1995 года. Подробные описания игр, требования к памяти, управление и оценки музыки/графики. Включает Night Hunter, Extreme, Grell & Falla и другие.