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