ZX Review #7-8-9-10
08 ноября 1997

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

(c) В.Давыдов, с.Запрудное,
    Нижегородская обл.

     ПРОЦЕДУРА ПЕЧАТИ МЕТОК
         АССЕМБЛЕРА XAS
 ДЛЯ МОНИТОРА-ОТЛАДЧИКА STS 4.3

  Предлагаю в раздел "Читатель -
читателю" доработку монитора STS
4.3.

    В июле  1996 г. у  меня  по-
явился  редактор-ассемблер   XAS
((c) Max Petrov), ознакомление с
которым поставило точку в  поис-
ках достойной замены  для  ZEUS,
который в составе  оболочки  PHT
v3.6 до сих пор остается  наибо-
лее удобным для 48К. Далее  речь
пойдет о довольно старой  версии
XAS, распространяемой в  составе
электронного журнала  "ZX-FORMAT
N4", которая при начале работы с
новым текстом  выдает  коммента-
рий "XAS  by  Max  Petrov  (HPM)
3.091".

    Ассемблер XAS имеет, на  мой
взгляд,  ряд  преимушеств  перед
другими ассемблерами:
   - удобочитаемый шрифт  форма-
та 6х8 пикселов. Пытался в  свое
время освоить TASM, MASM и  т.п.
Некоторые  символы   различаются
двумя - тремя точками, и  прихо-
дится постоянно  напрягать  зре-
ние при чтении листинга.
   - удобный дисковый интерфейс.
Сразу захотелось написать что-то
подобное для себя, а желание ис-
пользовать   другие   ассемблеры
128К окончательно пропало.
   - при вводе и  редактировании
строки автоматически ее формати-
рует и проверяет формальный син-
таксис.  Хотя  свободный  формат
текста и позволяет наглядно  вы-
делить  структуру  программы, но
набивать вручную массу  пробелов
или нажимать после каждой мнемо-
ники клавишу табуляции  не  дос-
тавляет особого удовольствия.  А
проверка  синтаксиса   позволяет
сразу заметить и устранить боль-
шинство опечаток.
   - макросы расширения  клавиа-
туры заметно сокращают время на-
бивания программы.
   - прилагаемый  перекодировщик
переводит результат дизассембли-
рования  STS  v.4  ((c)  Дмитрий
Парцырный)  в  формат  XAS,  что
позволяет  создать   полноценный
пакет из ассемблера и  монитора-
отладчика.
   - и  еще  множество  приятных
мелочей.

    Из недостатков могу отметить
три, которые  легко  могут  быть
устранены автором программы  XAS
в следующих версиях:
   - при  удалении  строки   при
случайном нажатии SS/W ее невоз-
можно восстановить.
   - отсутствуют команды  помет-
ки группы строк для блочных опе-
раций. При составлении  програм-
мы из готовых процедур  довольно
скучно удерживать SS/E от начала 
до конца текста.
   - затруднительно писать руси-
фицированные программы с исполь-
зованием верхней половины табли-
цы кодов. Учитывая способ  руси-
фикации XAS, можно в  дополнение
к  DEFM  ввести  мнемонику  типа
DEFR, при  компилировании  кото-
рой  производится  перекодировка
символов, записанных в  стандар-
те KOI-7, по подгружаемой табли-
це. Длина таблицы #60 байт.  При
этом на символы с  кодами  #20..
#3F можно подвесить псевдографи-
ку. Сохранится  читаемость  лис-
тинга и пользователь будет  сво-
боден в выборе способа русифика-
ции разрабатываемых программ.

    О XAS все. Теперь о доработ-
ке под него STS 4.3, лучшего мо-
нитора-отладчика для SPECTRUM.
    Ниже приведен  листинг  под-
программы печати меток XAS.
140.
         ORG     #8000
         WORK    #FE68

         JR      PR_NUM
PR_NUM   JP      #F867 ; печать численного
;                        значения метки
         PUSH    HL
         PUSH    BC
         LD      (LABEL),BC
         LD      HL,SEARCH
         CALL    #DEB2 ;перенос подпрог-
;                       раммы в Резидент
         EXX
         LD      HL,(#DEEC) ; Banks
         LD      A,L
         AND     #18 ; установка
         OR      #56 ; 6-й страницы ОЗУ
         LD      BC,#7FFD
         CALL    #E3CC ; выполнение
;                 подпрограммы в Резиденте
         EXX
         EX      AF,AF
         PUSH    HL
         CALL    #DEA6 ; восстановление
;                        Резидента
         POP     DE
         POP     BC
         POP     HL
         EX      AF,AF
         JR      C,PR_NUM
         LD      A,(#FAE4)
         AND     A
         CALL    Z,#FB23 ; координаты
         LD      HL,#DEEC  ; Banks
         LD      A,(HL)
         LD      C,A
         AND     #18
         OR      #56
         LD      (HL),A
         LD      HL,#FFF7 ; -9
         ADD     HL,DE
         LD      B,#07 ; длина метки
         EX      DE,HL
PR_LOOP  CALL    #DEBC; A<-(DE) из 6 стр.
         CP      #21
         JR      C,PR_END
         CP      #80
         JR      NC,PR_END
         CALL    #FB50 ; печать рег. A
         INC     DE
         DJNZ    PR_LOOP
PR_END   LD      A,C
         LD      (#DEEC),A
         RET

SEARCH   OUT     (C),A ;поиск метки
         EXX
         LD      HL,#CB16 ; начало таблицы
;                           меток XAS
S_LOOP   LD      A,(HL)
         SUB     #01
         JP      M,S_END
         LD      DE,#0007 ; длина метки
         ADD     HL,DE
         LD      C,(HL)
         INC     HL
         LD      B,(HL)
         INC     HL
         EX      DE,HL
         LD      HL,#0000
LABEL    EQU     $-2
         SBC     HL,BC
         EX      DE,HL ; в HL адрес имени
         JR      NZ,S_LOOP ; следующей
;                            метки
S_END    EXX
         OUT     (C),H
         RET
2
   Поскольку печать меток ассем-
блера имеет смысл только при на-
личии в  памяти  таблицы  меток,
приведу один  из  возможных  ва-
риантов совместного  использова-
ния ассемблера  XAS  и  монитора
STS 4.3.
    Использован с небольшими из-
менениями   BASIC-загрузчик   от
программы  XAS,  предназначенной
для работы с STS 3.  Два кодовых
блока исходного загрузчика объе-
динены в один и  добавлена  заг-
рузка файла sts4.3b.

 1 CLEAR VAL "25000":
   RANDOMIZE USR VAL "23893":
   REM

 2 OUT VAL "32765",VAL "81":
   RANDOMIZE USR VAL "49152"

 3 OUT VAL "32765",VAL "87":
   RANDOMIZE USR VAL "56064":
   GO TO VAL "3"

    В строке 1 после REM  должно
быть 103 любых символа, на  мес-
то которых нужно поместить кодо-
вый блок, листинг которого  при-
веден ниже.140.

       ORG     #8000
       WORK    #5D55

       LD      A,#51
       LD      HL,#C000 ; загрузка XAS
       LD      B,#2E
       CALL    LOAD

       LD      HL,#DB00 ; загрузка sts4.3a
       LD      B,#25
       LD      A,#57
       CALL    LOAD

       LD      HL,#FB00 ; загрузка sts4.3b
       LD      B,#05
       LD      A,#54
       CALL    LOAD

       LD      SP,#5FFF
       LD      HL,#1303 ; адрес программы
       PUSH    HL       ; обработки
       LD      (#5C3D),SP ; ошибок
       LD      HL,#1B76
       PUSH    HL
       LD      HL,(NEXT) ; адрес следующей
;                          строки BASIC
       LD      A,H
       LD      H,L
       LD      L,A
       LD      (#5C42),HL;номер следующей
;                         строки
       XOR     A
       LD      (#5C44),A; номер следующего
;                         оператора


       LD      HL,(#5C4F) ; текущий канал
       LD      DE,#000F
       ADD     HL,DE
       LD      DE,#15BE
       EX      DE,HL
       LD      BC,#0004
       LDIR

       RES     4,(IY+#01) ; включение
;                           ПЗУ-348
       LD      DE,#5D3B
       LD      HL,NEXT
       JP      #19E5  ; удаление первой
; строки и запуск BASIC-интерпретатора
; с нулевого оператора следующей строки


LOAD   PUSH    BC
       LD      BC,#7FFD
       OUT     (C),A
       POP     BC
       LD      C,#05
       LD      DE,(#5CF4)
       JP      #3D13

NEXT   EQU     $+1 ; начало следующей
;                строки BASIC-программы
2
    Для  обеспечения  совместной
работы с XAS потребуется  внести
некоторые изменения в STS 4.3.
    Так  как  XAS  использует  4
страницы  ОЗУ  (1-я - ассемблер,
3-я - первый текст, 4-я - второй
текст, 6-я -  макрос  и  таблица
меток),  придется  одну  из  них
совместить для XAS и STS. Я  это
сделал в  4-й странице, в  кото-
рой находится второй текст  XAS.
В ней же нужно разместить допол-
нительный банк STS 4.3.
    Чтобы случайно не  испортить
STS,  лучше  переписать  его  на
чистый диск, на котором и прово-
дить все изменения.
    Вначале нужно  установить  в
"SETUP"  STS  Extend  Bank   #1C
(четвертая  страница  ОЗУ).  Так
как XAS  использует  собственный
резидент, располагающийся по ад-
ресу  #5B90, во  избежание  кон-
фликтов установить резидент  STS
по адресу  #5BB0.  Сохранить SE-
TUP, при этом будут  модифициро-
ваны файлы sts4.3a и sts4.3b.
    Загрузить  файл  sts4.3a   в
Bank #18 и загрузить  по  адресу
#FE68 блок кодов, обеспечивающий
печать меток XAS.
    После этого можно будет  од-
новременно  использовать  XAS  и
STS, пользуясь выходом в  BASIC.
Для того, чтобы по  команде  STS
Quit To ASM осуществлялся  пере-
ход в XAS, нужно по адресу #DF53
записать значение #51 (банк  па-
мяти,  который   устанавливается
перед  переходом    по    адресу
#C000). Поскольку полученный ва-
риант STS предназначен для  сов-
местной работы с XAS, будет  оп-
равданным  изменение  девятибай-
тного заголовка титульного экра-
на STS. По  адресу  #FF8C  запи-
сать STS4.3XAS.  Так  как  может
возникнуть  ситуация, при  кото-
рой  понадобится  подгрузка  до-
полнительного  банка  STS, имеет
смысл изменить имя  файла, кото-
рое печатается при первом выпол-
нении команды LOAD. Для этого по
адресу  #E6EB  записать  sts4.3b
или имя файла, в который Вы  его
переименуете. А его лучше переи-
меновать во избежании путаницы.
    Модифицированный sts4.3a го-
тов. Запишите его на диск и рас-
положите файлы на диске  в  сле-
дующем порядке: BASIC-загрузчик,
кодовый  блок  XAS, sts4.3a, sts
4.3b.  Их  можно  объединить   в
MONO-LOADER  при  помощи   любой
дисковой   утилиты,  выполняющей
"склеивание"  файлов.  При  этом
нужно оставить на  диске  еще  и
копию sts4.3b для возможной под-
грузки.
    Область  памяти,  занимаемая
файлом sts4.3b, может  быть  ис-
порчена при большой длине второ-
го текста XAS. На отладке  прог-
рамм это не скажется, но  нельзя
будет пользоваться SETUP  и  ди-
зассемблированием на диск.  Если
Вам  это  понадобится, предвари-
тельно проверяйте  4-ю  страницу
ОЗУ и при необходимости  подгру-
жайте sts4.3b.
    Переход из STS в XAS по  ко-
манде Quit To ASM  будет  выпол-
няться всегда, а переход из  XAS
в STS будет  гарантированно  вы-
полняться, только если вы не из-
мените память по адресам  #5C00-
#6000.
    Для использования XAS с дру-
гими версиями STS4.X в  процеду-
ре печати меток  нужно  изменить
все абсолютные  адреса  подпрог-
рамм и переменных STS. Узнать их
можно, просмотрев процедуру  пе-
чати меток STS4.X. Алгоритм оди-
наков для меток любого ассембле-
ра: перенос подпрограммы  поиска
в резидент, поиск метки, восста-
новление  резидента, печать мет-
ки.

           *   *   *




Другие статьи номера:

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

Программы, которые мы выбираем - Предложение ко всем авторам программ, печатающих дамп памяти. Программистам, использующим защиту дисков от копирования.

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Эмулятор SIM-карты - Как сделать маленький и автономный эмулятор SIM-карточки?
Четыре килобайта - Смена главного редактора газеты.
Demo Party - результаты Doxycon'99.

В этот день...   19 июля