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. Алгоритм оди- наков для меток любого ассембле- ра: перенос подпрограммы поиска в резидент, поиск метки, восста- новление резидента, печать мет- ки. * * *
Другие статьи номера:
Похожие статьи:
Внимание! - Предлагаем вам участие в создании нового Уфимского электронного издания для ZX Spectrum.
В этот день... 21 ноября