ZX Review
#3-4
22 июля 1997 |
|
Форум - И.Рощин. Совместное использование ZX ASM 3.0 и STS 5.1.
(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).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября