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

ZX Review #7-8-9-10
(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. Алгоритм оди-
наков для меток любого ассембле-
ра: перенос подпрограммы  поиска
в резидент, поиск метки, восста-
новление  резидента, печать мет-
ки.

           *   *   *