(c) Иван Рощин, г.Москва, 1997.
Совместное использование
ZX ASM 3.0 и STS 5.1.
Наверняка каждому программис-
ту известен монитор - отладчик
STS. Особенно удобно применять
этот монитор вместе с ассембле-
ром: набираешь текст программы,
ассемблируешь ее, а затем с по-
мощью STS проверяешь ее работу.
Начиная с версии 4.1 в этом мо-
ниторе появилась поистине бес-
ценная возможность интерактив-
ной отладки программы с выводом
меток по соответствующим им ад-
ресам. Проблема в том, что не
каждый может ей воспользоваться.
Действительно, в версии 4.1
процедура вывода меток рассчита-
на только на ассемблер "MASM
1.1" и ни с каким другим ассем-
блером работать не будет. Анало-
гично, следующие версии поддер-
живают лишь ассемблер "ALASM". А
как же быть пользователям дру-
гих ассемблеров?
Постараюсь дать решение этой
проблемы для пользователей "ZX
ASM 3.0".
WARNING! Все нижесказанное
относится ТОЛЬКО к STS 5.1!
Для преобразования STS 5.1
необходимо выполнить следующее:
1) Убедиться, что на диске при-
сутствуют файлы "STS5.1"
(этот файл также может назы-
ваться "STS5.1AL", "STS5.1XX"
и т.п.), "sts5.1a","sts5.1b".
2) Запустить файл "STS5.1".
3) Нажать клавишу "U". Адрес в
верхней части экрана должен
стать равным #FE2A.
4) С адреса #FE30 ввести прог-
рамму:140.
#FE30: PUSH HL
PUSH DE
PUSH BC
LD HL,#FE46
LD DE,#57E0
LD BC,#001C
LDIR
POP BC
POP DE
POP HL
AND #18
OR #06
RET
CALL #57EF
EX DE,HL
LD BC,#FFF9
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
INC HL
INC HL
LD A,H
RET
DEC DE
DEC DE
DEC DE
LD A,(DE)
RLCA
JR C,#FE5F
AND A
JR NZ,#FE57
INC DE
XOR A
RET
Для контроля привожу содер-
жимое этой области памяти:
#FE30: #E5,#D5,#C5,#21,#46,#FE,#11,#E0
#FE38: #57,#01,#1C,#00,#ED,#B0,#C1,#D1
#FE40: #E1,#E6,#18,#F6,#06,#C9,#CD,#EF
#FE48: #57,#EB,#01,#F9,#FF,#09,#7E,#23
#FE50: #B6,#23,#23,#7C,#C9,#1B,#1B,#1B
#FE58: #1A,#07,#38,#03,#A7,#20,#F8,#13
#FE60: #AF,#C9
2
5) С адреса #FE71 ввести прог-
рамму:
140.
#FE71: PUSH HL
PUSH BC
LD (#FECC),BC
LD HL,#FEC4
CALL #E354
LD HL,#FFFC
EXX
PUSH DE
LD HL,(#E33B)
LD A,L
CALL #FE30
LD L,A
LD BC,#7FFD
CALL #E33D
EX AF,AF'
CALL #E348
POP DE
EXX
POP BC
POP HL
EX AF,AF'
JR NZ,#FE6E
LD A,(#FADD)
AND A
CALL Z,#FB1C
LD B,#0A
LD A,(#E33B)
LD C,A
AND #18
OR #06
LD (#E33B),A
CALL #E590
NOP
AND #7F
CP #21
JR C,#FEBF
CALL #FB49
DJNZ #FEAF
NOP
LD A,C
LD (#E33B),A
RET
OUT (C),L
EXX
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD HL,#8015
AND A
SBC HL,BC
CALL Z,#57EF
JR Z,#FEE0
CALL #57E0
JR Z,#FEDF
CP #BF
JR NZ,#FEC7
AND A
EXX
OUT (C),H
RET
Для контроля привожу содер-
жимое этой области памяти:
#FE71: #E5,#C5,#ED,#43,#CC,#FE,#21,#C4
#FE79: #FE,#CD,#54,#E3,#21,#FC,#FF,#D9
#FE81: #D5,#2A,#3B,#E3,#7D,#CD,#30,#FE
#FE89: #6F,#01,#FD,#7F,#CD,#3D,#E3,#08
#FE91: #CD,#48,#E3,#D1,#D9,#C1,#E1,#08
#FE99: #20,#D3,#3A,#DD,#FA,#A7,#CC,#1C
#FEA1: #FB,#06,#0A,#3A,#3B,#E3,#4F,#E6
#FEA9: #18,#F6,#06,#32,#3B,#E3,#CD,#90
#FEB1: #E5,#00,#E6,#7F,#FE,#21,#38,#06
#FEB9: #CD,#49,#FB,#10,#F1,#00,#79,#32
#FEC1: #3B,#E3,#C9,#ED,#69,#D9,#4E,#23
#FEC9: #46,#EB,#21,#15,#80,#A7,#ED,#42
#FED1: #CC,#EF,#57,#28,#0A,#CD,#E0,#57
#FED9: #28,#04,#FE,#BF,#20,#E8,#A7,#D9
#FEE1: #ED,#61,#C9
2
6) С помощью клавиши "B" устано-
вите Bank=#18.
7) Нажмите клавишу "E". Появится
меню "Setup".
8) Выбрав пункт меню "Config Sa-
ve", запишите измененный STS на
диск.
Для проверки правильности
внесенных изменений запустите ZX
ASM 3.0, в меню Setup выберите
пункт "Load sts" и укажите имя
файла "sts5.1a". Далее наберите
какую-нибудь программу и отас-
семблируйте ее. Затем временно
выйдите в STS и включите режим
дизассемблирования с метками (с
помощью комбинации клавиш "SS+
5"). Вместо чисел Вы увидите со-
ответствующие метки.
3
Немного системной информации
о ZX ASM: текст и метки находят-
ся в одной странице памяти
(Bank=#1E), таблица меток орга-
низуется по принципу стека и на-
чинается с конца буфера. Каждая
определенная в программе метка
занимает в этой таблице 5 +
<число букв имени> байт. STS при
дизассемблировании анализирует
эту область, и если значение
метки и адреса или числа в ко-
манде совпадают, то печатает
метку, иначе - число. Если в об-
ласти находится какая-то ерунда,
ничего страшного не произойдет,
и компьютер не зависнет и не
сбросится.
Дизассемблирование с метками
работает медленнее, чем обычное.
Если в Вашей программе использу-
ется не очень много меток, Вы
почти не почувствуете разницу в
быстродействии. Но если меток
много, вывод дизассемблированно-
го текста может замедлиться в 4-
5 раз.
Процедура дизассемблирования
с метками для ZX ASM 3.0 получи-
лась более длинной по сравнению
с процедурами для MASM 1.1 и
ALASM, и в результате этого она
заняла большую часть буфера фун-
кции пользователя. Для этой фун-
кции осталось лишь 6 байтов с
#FE2A по #FE2F включительно.
Если Ваша функция не умещается в
эту область, Вы можете сделать
одно из двух:
1) Пожертвовать режимом дизас-
семблирования с метками, за-
писав по адресу #FE71 коман-
ду JP #F86A. В этом случае
можете использовать для фун-
кции пользователя память с
#FE2A до #FE5B и с #FE74 по
#FEE3 включительно (а это 162
байта).
2) Поместить по адресу #FE2A ко-
манду JP XXXX, а уже с адреса
XXXX разместить вашу функцию.
Нужно отметить, что при рабо-
те режима дизассемблирования с
метками портится 28 байт в эк-
ранной области, начиная с адре-
са #57E0 (причем Вы сами можете
изменять эти 28 байт как хотите
- это не помешает нормальной ра-
боте STS).
При загрузке ZX ASM'а STS бу-
дет загружен автоматически, но
не весь, а только его главная
часть (файл sts5.1a). Поэтому во
время работы будут недоступны
функции "Disasm to Disk" и
"Setup", т.е. при попытке их вы-
зова STS сбросится. Так что луч-
ше не нажимать клавиши "D" и
"E". Для экономии дискового
пространства можно стереть фай-
лы "STS5.1<B>" и "sts5.1b<C>",
если Вы не будете запускать STS
отдельно от ZX ASMа.
Не забывайте, что недокумен-
тированные команды для работы с
половинками индексных регистров
по-разному обозначаются в тек-
сте программы на ассемблере ZX
ASM (XL,XH,YL,YH) и при прос-
мотре дизассемблированной прог-
раммы в STS (LX,HX,LY,HY).