Из дистрибутива ALASM v5.05 by Alem, Stall, AlCo Представляем теневой монитор-отладчик STS7.2! v7.2: +адрес точки входа из ALASM (без порчи регистровой модели) зафиксирован - отныне всегда #db06. *дисководы переключаются кнопками 1..4 в режиме каталога, но каталог не перечитывается! v7.1: *новые способы сэкономить память: Bank можно перенести в столбец регистров (это неудобно в режиме дампа, потому в этой сборке оставлено по-старому); фикс Рощина можно выключить +определяется, запоминается и показывается режим прерываний (IM) - и можно редактировать. Определяется при входе в STS после трассировки и т.п. (но не при пошаговом исполнении!) - I=0 или 63 даёт IM1, иначе IM2 +дисковые операции всегда производятся при IM1, а опрос клавиш - при IM2 (теперь не портит сис.переменные) +в русском режиме ввод идёт без максировки 7 бита v7.0i: *теперь страницы при трассировке переключает только порт #fd со сброшенным A15 (для отладки прог под винт) -вис при обращении с диску в режиме IM 2 (Elph) Теперь при дисковых операциях принудительно включается IM 1. Напоминаю, используется стек трассируемой программы! -при первом входе из аласма включал DI Отличия STS7.x от STS6.x: + возврат в вызвавшую программу через RET; + полный #3d13. Не требуется вводить #5cf4 при трассировке загрузчиков. Невозможно запороть диск. Сработает любой способ подключения HDD или рамдиска, поддержанный в TR-DOS; / поскольку STS7.x основан на STS5.x, то в нём нет поддержки расширеной памяти компьютеров Scorpion, Profi, ATM и др.; + зато есть дизассемблирование! Выходной текст короче, чем он был в v5.x, но его всё равно можно, не отходя от кассы, импортировать в ALASM (версия ALASM должна быть не ниже 4.47fff); + разрешено использовать 1M по пентагоновскому стандарту; + резидент сокращён на 3 байта (теперь 31) и не будет портить RAMTOP при размещении по адресу 23698 (резидент STS6.2 вообще не помещается в системных переменных - в нём 46 байт); + для ALASM есть специальная (плавающая - с каждой версией меняется) точка входа, которая не портит регистровую модель отлаживаемой программы; - исправлены ошибки с меткой верхней строки, с определением состояния прерываний, с инициализацией дисковода и, возможно, ещё какие-то, о которых я уже забыл; + есть русский шрифт (CP866) и его поддержку можно включать и выключать кнопкой Y; / подсчёта тактов нет - я им и не пользовался; + версия 7.x занимает только одну страницу памяти, не считая память ниже #DB00 (обычно буфер каталога ALASM'а - ALASM затирал кусок STS6.2, если ассемблирование проводилось до первого выхода в STS), и не требует дискету с оверлеями; + опрос клавиатуры синхронизирован с прерываниями - не требуются нелепые настройки, и даже курсор движется быстрее; + в режиме Caps Lock можно вводить маленькие буквы (с Caps'ом); + автоматически выключает кэш - не повиснет при отладке кэшевых программ; - не забывает положение курсора после гуляния по каталогу диска (Extend); - не забывает номер банка после выхода в ALASM и входа обратно; + правильно ставит параметры бейсик-файлов при сохранении с расширением .B; + все регистры видны на одном экране, не нужно переключать наборы регистров; / области пользователя нет, используется память #ff00, которая уничтожается при работе с диском; / нет кнопки SETUP - переключение дисководов теперь по ss1, а переключение ПЗУ (Basic/DOS) по кнопке E; + зато есть исходник с настройками, в котором вы можете включить какие-нибудь из выброшенных функций (например, подсказки, память пользователя или звук) и перекрасить окошки по своему вкусу. Управление курсором: CURSOR ([CS+5/6/7/8/9]) [cs3] - Page Up - страница вверх [cs4] - Page Down - страница вниз [ss8] - скроллинг текста вверх [ss9] - скроллинг текста ввниз Режим редактирования CURSOR ([cs5]-влево, [cs8]-вправо) [cs6] - курсор вниз на строку [cs2] - CAPS LOCK - режим больших букв [cs0] - BACKSPACE - забой [Break] - CANCEL - отмена [ENTER] - ввод Управление панелями [cs1] - переключить экраны [ss3] - перекл. Dec/Hex [ss4] - перекл. Disasm/List(дамп) [ss5] - вкл/выкл показ меток. Анализируется содержимое первой страницы меток ALASM (при входе из ALASM в STS записывается номер страницы и адрес начала меток ALASM). Если меток больше 16k, то ничего не получится :( [cs+ss] - режим каталога диска. Вызываются все дисковые команды (смена дисковода, запись/чтение файла, запись/чтение сектора), при этом имя файла автоматически копируется с позиции курсора. Чтение файла возможно также по клавише . Команды-окна с параметрами [Q] - Quit. Перед выходом восстанавливается SP (какой был при запуске STS), IY=#5C3A, об остальном см.историю изменений: v5.7. Quit To BASIC выходит в бейсик через JP #0058. Из TR-DOS можно вернуться по команде RETURN. [I] - Fill block. Заполнение участка памяти блоком кодов длиной 1..8 байт, символ "#" используется для определения конца блока, передвигается с помощью ввода новых символов и DELETE ([cs0]). Резидент восстанавливается, его можно затирать. [O] - Copy block. Резидент не восстанавливается! [L] - Load file. После ввода имени файла STS читает каталог диска, определяет наличие файла, и если таковой имеется, выдает в строках Start и Len информацию о файле (старт и длина) из каталога. [S] - Save file. Для перезаписи файла на старое место после ввода расширения файла нажмите не [ENTER], а [ssENTER] и удерживайте [ss] примерно 1 секунду. Файл перезапишется на старое место из памяти - с адреса и с длиной согласно каталогу. [ssL] - Load sectors, [ssS] - Save sectors. STS может правильно прочитать/записать не только TR-DOS сектора, но и 1 сектор MS-DOS, IS-DOS и других систем, у которых длина сектора не равна 256 байтам. #3d13 этому не мешает. Резидент восстанавливается, его можно затирать, но нельзя затирать переменные TR-DOS. Также нельзя нажимать Break. Если хотите старый лоадер, его можно включить через исходник... [R] - Set Resident address. По умолчанию=23698. [B] - Set Bank. Значение для порта 32765=#7FFD. Для тех, кто не знает, даю описание битов порта #7FFD: 0,1,2 - переключение страницы ОЗУ в фирменном ZX Spectrum 128 3 - номер активного экрана 4 - номер ПЗУ: 0=Basic128, 1=Basic48 5 - защелка порта, 1=48k компьютер. Для Pentagon 1M - ещё один бит номера банка. 6,7 - дополнительные биты номера страницы ОЗУ для расширений 512k/256k(Pentagon), в фирменном 128-ом не используются. 7-й бит также поддерживается компьютером KAY1024, за счёт этого KAY1024 тоже может полноценно работать с STS7.x, лежащим вне основных страниц ОЗУ. Расширенную память других компьютеров (кроме ATM2) понимает STS6.x. [ss1] - Выбрать дисковод. От A до D. [M] - Set MemAdr. Установка адреса, с которого будет выводиться информация в панели. [F] - Find. Поиск блока байтов, текста или команды Z80 по 'AND' маске: байты из памяти маскируются, т.е. биты с маской 1 остаются, с маской 0 - выключаются и сравниваются с маскированным значением в "bytes". (Inverse - поиск до первого НЕсоответствующего байта.) Если последовательность не найдена во всех 64K памяти с текущим Bank, то BORDER будет красным. Команды без параметров [N] - find Next. Продолжение поиска с позиции курсора. Если панель находится в режиме List, то строка будет найдена точно в позиции курсора. В режимах Disasm такой точный поиск сработает только верхней строке панели (из-за различной длины команд Z80). [ssM] - MemAdr=PC. Переходим туда, где в данный момент "застыл" виртуальный процессор Z80. [P] - MemAdr=адрес, упоминаемый в тексте, где стоит курсор. Примеры: 1) курсор стоит на регистре HL #E234; жмем [P]=> перейдем на #Е234; 2) курсор на команде LD IX,#8456; жмем [P]=> перейдем на #8456. [ssP] - Return to old MemAdr. Вернуться назад после перехода по кнопке [P]. STS помнит 32 последних перехода. [A,1/2/3/4/5] - запомнить MemAdr. Нажать [A], отпустить, нажать номер ячейки: от 1 до 5 (по умолчанию в этих ячейках адреса #6000, #8000, #c000, #5d3b и #5cf4 соответственно). [1/2/3/4/5] - MemAdr=запомненный Adr. Тот самый. [ssN] - DumpAdr(адрес ячеек, светящихся вверху экрана)=SP [V] - DumpAdr=cursor [Z] - PC=cursor [E] - переключение ПЗУ (BASIC/DOS). В ПЗУ TR-DOS команды OUT/IN, а также команды, читающие само ПЗУ TR-DOS, не эмулируются! Команды отладки [W] - Write break point. Поставить точку останова (3 байта). Когда отлаживаемая программа дойдёт до этой точки, она возвратится через Резидент в STS и восстановит эти 3 байта как было. Не использует Stack. Одновременно можно поставить только одну точку! После Quit в Монитор можно вернутся не только через #db00, но и через Break Point. [ssK] - Jump to PC with Screen 1 [ssJ] - Jump to PC with Screen 0 [ssZ] - Step command. Выполнение текущей команды Z80. [ssX] - Step command with Run CALL. То же самое, но команды CALL запускаются из Resident'а. Эту команду, в отличие от следующей, можно выполнять в ПЗУ. [ssT] - Run+Break. После текущей команды ставится Breakpoint, после чего STS смело прыгает в эту команду. Так можно делать только в ОЗУ. [U] - Перейти к памяти User'а в банке STS. Изначально там RET'ы. [ssU] - Call User subroutine. Вызов того, что вы там написали. [J] - Jump Adr. При запуске устанавливается 0-й экран. Возврат в STS - через точки останова. [C] - Call Adr. То же, но возврат - через RET. Отлаживаемая программа не должна использовать область памяти Резидента. [Т] - Trace. Окно трассировки в пошаговом режиме: GO - начало трассировки; Indicate - с индикацией/без нее (без индикации включается 0-й экран); ReDisasm - с перерисовкой панели после каждой команды или без; Stop if Dos - останов при переходе к TR-DOS. При входе автоматически включается просмотр TR-DOS; при выходе - отключается; Stop if Find - останов по заданной в Find команде, Inverse не работает; Stop if User - при отладке каждой команды запускается подпрограмма пользователя из области User'а (см.про [U]). Если она возвращает NZ (или ничего не меняет), то продолжается трассировка, иначе останов. Примеры использования этой навороченной функции: 1) Необходимо остановиться, когда в ячейке (#7345) будет #34: [U], вводим подпрограмму: LD A,(#7345) CP #34 RET 2) Необходимо остановиться, когда в HL=#1243: [U], вводим подпрограмму: LD HL,(#FEEC) ;(см.ниже про адреса регистров) LD DE,#1243 AND A SBC HL,DE RET Stop on Adr - остановка на адресе; Trace Bank - вкл./выкл. обработки команд вывода в порт #7ffd (проверяются 1-й и 15-й разряды адреса). При выкл. они не будут переключать память, при вкл. - будут; Trace Call - вкл./выкл. трассировки команд CALL. При вкл. отладчик заходит 'внутрь' процедуры ([ssZ]), при выкл. - запускает ([ssX]) [D] - Disasm To Disk. Дизассемблирование на Диск. В первом окошке указываете: Start - адрес начала дизассемблируемой области памяти. End - адрес её конца (включительно! в Copy и Fill - тоже). End не должен быть равен #FFFF=65535. Во втором окошке: Start - начало локального блока, вычисляется автоматически. End - адрес конца локального блока. Disasm/DEFB N - дизассемблер/дамп памяти (по N байт в строке). Дизассемблирование происходит в два прохода. На первом создается таблица меток (используется буфер #c000-#daff в странице STS'а), на втором собственно и происходит дизассемблирование с выгрузкой на диск (буфер организуется по адресу #4000). О том, о сём При запуске STS из 7-й страницы используется 1-й экран, иначе 0-й. Некоторые ошибочные ситуации индицируются изменением цвета BORDER'а: красный - последовательность не найдена в 64К памяти (команда Find) или Disk Error (не для #3d13 версии!); фиолетовый - неправильно введены мнемоники ассемблера. Расстояние между командой и ее операндами (данными) должно равняться 1 пробелу; число цифр в HEX числе должно быть строго 2 или 4, смотря по команде; команды типа RES 5,A,(IY+1) не ассемблируются; голубой - нет места на диске; Резидент - блок кодов переменного содержания, но с постоянной длиной в 31=#1F байт (для STS7.0), размещается в области #4000..#BFFF (для 48k - в любой области). Резидент используется монитором для доступа к любой странице памяти (Bank). Резидент динамически изменяется и восстанавливается (не всегда, см. примечания к командам). При перемещении Резидента восстанавливается память, бывшая "под ним". Перед дисковыми функциями восстанавливается память "под Резидентом",а после - заново запоминается. При запуске STS память под Резидентом запоминается, при QUIT она не восстанавливается. Расположение значений регистров Z80 в STS: +0 +2 +4 +8 #FEE4 : PC SP IX IY #FEEC : HL DE BC AF #FEF4 : R #FEF5 : I #FEF6 : HL'DE'BC'AF' #FEFE : MemAdr Подпрограмма вывода числа/метки в режиме показа меток лежит тут: Адрес входа: #FE6C Вход: bc=число для печати hl=позиция для печати(не всегда) Необходимо сохранять: bc,de',ix Что хранится в #ff00 (BUFFER) не во время дисковых операций: #FF00 - user область при userarea=0; от #FF80 вниз - P_BUFFER для кн."P" (P_BUF_ADR); #FFBE - адреса строк, показанных на экране; #FFFF - портим для HALT при IM2. STS6.2 написан Дмитрием Парцырным (STALKER) в сентябре 1997. Его адрес на тот момент: 310002, г.Харьков, ул.маршала Бажанова, д.12, кв.52 (0572)452569 Исходники были переданы автором Faster'у из TNL, тот отдал их Capry из Stall, а Capry отдал мне (Alone Coder'у). Я передал авторские диски исходников Crank'у из Techno Lab в свободное распространение и выпускал версии: STS 5.3lite (aug'02): /Шрифт взят из ПЗУ. Упрощён дизайн и убраны тени от окошек. (сейчас больше некого удивлять тенями у окошек!) -Исправлена ошибка при редактировании дампа памяти (несимвольные байты уничтожались, теперь они не изменяются, см. Sinclair Club#5 ). *Адрес резидента по умолчанию - 23698. Область памяти под резидентом теперь запоминается. *По умолчанию трассировка настроена на обход CALL и выключенную индикацию. Для того, чтобы проигрывать музыку из STS двумя командами :) /Убраны "две кнопки сброса на клавиатуре" ;) Теперь нет сетапа. Единственное, что от него осталось - кнопка E как выбор ПЗУ: TR-DOS/Basic. /Убраны редко используемые кнопки SS/K,SS/J,SS/8,SS/9, а также Sinclair-джойстик. *Дизассемблер оставлен. Но имя файла фиксировано: "Z5H3PNCn", где n - порядковый номер файла. Размер каждого из генерируемых файлов не более 96 секторов (было 97 ). Дизассемблирование на диск в отладчике,- в принципе, ненужная функция, поскольку есть гораздо более мощный дизассемблер Иноземцева (см. ZX-Power#2 ). Формат возвращаемого текста полностью соответствует входным файлам импорта ALASM4.4x, так что легко поддаётся импортированию непосредственно в ассемблер.Пришлось заменить на , EQU на "=", а убрать (по причинам нехватки памяти). В качестве буфера меток при дизассемблировании используется неактивный в данный момент 0-й экран (#4000) или, если он активен, то область #C000 в странице монитора. +Функция Anti-Caps, стандартная для всех системных программ: при Caps Lock=on можно с Caps'ом вводить строчные буквы. Она была выброшена после STS 4.x. STS 5.3lbf: *При дизассемблировании на диск вместо табуляции между командой и операндом ставится пробел. * ex af,af' заменено на exa. *Все команды и числа показываются строчными буквами (сделано специально из-за ПЗУшного шрифта). +Выбор дисководов. +Возвращены кнопки ssK,ssJ. -fixed баг v5.3 lite: ввод десятичных чисел. -fixed авторский глюк: при контекстном переходе верхняя строка дизассемблировалась без меток вне зависимости от режима. Источник ошибки: адрес контекстного перехода STS выясняет с помощью вызова процедуры дизассемблирования с перехватом во время печати 16-разядного числа. Перед этим дизассемблированием отключается показ меток, иначе невозможно поймать эту печать. Режим показа меток восстанавливался только в конце печати очередной строки (т.е. уже после печати первой строки экрана). Исправлено: режим показа меток восстанавливается в начале печати строки. STS 5+3lbf: -Дизассемблирование на диск работало только при STS, лежащем в 7-й банке. Источник ошибки: буфер в страничке вынуждал сохранялку менять резидент. Исправлено: используется всегда буфер #4000. -Исправлена ошибка подсчёта регистра R при трассировке. +Две версии: modern (romfont+disasm) и classic (stsfont+user). Во второй Disasm нет, но область пользователя увеличена. STS 5.4ext: +Extend вызывает файловое меню в стиле STS 6.x. !Кнопка выбора дисковода теперь ss1(!) (было Extend). :Убран полуэкранный режим. +Реализован стек ссылок по кнопке P, как в STS 6.x. +Временно возвращены инверсные заголовки и тени у окошек. STS 5+4ext: - sts5.4 портил себя, будучи загруженным не в pg7 (атрибуты, неправильное поведение кнопки down в редакторе строк...). -В менюшках sts5.4 вместо клавиш up, down действовали клавиши left, right. -В дисковом меню sts5.4 (small) символ "_", если он был последним символом имени файла, оставлял за собой след. -В дисковом меню STS5.4 (BIG) неправильно показывал непечатные символы. +48k обратно поддерживается (резидент в этом режиме может быть выше #c000 ). Между прочим, Disasm тоже работает :) STS 5.5: +rus version (font by AlCo & John). -кнопка X не работала в режиме ASM. *вместо кнопки X (она удалена) реализовано отображение ВСЕХ регистров (Himik's ZxZ: по мотивам анимированных бегемотов ;) -ввод имени диска перемещён в угол, раньше от него оставался след. -после выбора дисковода происходит позиционирование на 0-ю дорожку. +во всех 3 компиляциях ЕСТЬ область пользователя! 8) STS 5+5: -при выходе в ассемблер забывалась текущая банка памяти (ошибка ВСЕХ версий). -в STS 5.5 после ssZ (ssX) забывались границы текущей панели. !для настройки глобального цвета исправляйте байт: STS55:#f3db; sts55:#f711; sts55rus:#f3d7. STS 5.6: -при позиционировании делается задержка. Возможно, sts станет записывать всегда правильно и на тех дисководах, где раньше не записывал правильно никогда. * DEFB заменено на db -при дизассемблировании блока, состоящего только из DEFB, не очищалась таблица меток! +поддержка pentagon 1M +при сохранении Basic'ов в каталог пишется Start=Len. В менюшке больше не предлагают Len=oldStart :) -при выходе из каталога устанавливался текущий адрес = 0 !color(rus)=#f3ea, color(dis)=#f718, color(BIG)=#f3ee !если вы уже исправляли ALASM под STS5.5, то вместо #dff6 пишите #dffa, потому что для интеграции с ALASM требуется найти (STSом) в файле "al??_4??.C" (все эти числа там есть только один раз): LD (#FE63),HL ;адрес области меток (заменить на #FE7C) LD (#FE69),A ;страница с метками (заменить на #FE88) LD (#DF17),A ;страница ассемблера (заменить на #DFFA) Это для старых аласмов. Наоборот поступайте, если хотите подру- жить новый ALASM со старым sts6.x (не забудьте про адрес запуска #db00 вместо #dc07!). STS 5.7: -sts иногда грузил неверно спозиционировавшись (из-за сброса контроллера, если в порту (ff) был 0) +адрес в каталоге независимо от адреса в памяти. +если после Jump войти в STS из аласма, адрес ставился не аласмовый, а 0 или breakpoint. Причем STS восстанавливал память под брякпойнтом. Теперь против этого сделана спец.точка входа в STS=#dc07. Точка, кроме того, не портит трассировочную регистровую модель (портил SP, но см.5+7), т.е. можно выходить в аласм, чтобы что-нибудь посчитать во время трассировки. Точка #db00 работает как раньше, хотя думаю тоже прибить в ней работу с брякпойнтами (это сложнее). Учтите, что: при CALL DOS происходит (IY+1),#cc, в регистровой модели делается EI, IY=23610, I=0; при EXIT to BASIC тоже (IY+1),#cc, EI, IY=23610, но HL'=10072. +во избежание самоубийства STS всегда выключает кэш *color 7 *убран splash STS 5+7: -при первом запуске из alasm был неверный SP -SP из регистровой модели больше не портится при выходе в alasm! *все ненужные регистры при запуске обнулены *exd вместо ex de,hl STS 7.0 demo (feb'05): *выход в ассемблер заменён на RET с IY=23610. Работает везде. Можно выходить в ACE :) -стеком STS запарывался его собственный шрифт. Добавлено 2 байта на стеке *в исходнике можно выключить сохранение резидента и подписи на окошках +3d13 (используется стек отлаживаемой программы), с порчей перем.трдос. Т.е. загрузка секторов через STS эквивалентна вызову #3d13 из отлаживаемой программы. И наоборот +наконец-то полная версия rus+disasm!!! убраны только лишние рамочки в шрифте - они в дампе ни к чему +наконец-то клавиатура синхронизирована с прерываниями! в STS вектор прерываний I=59, при IM2 не портится ничего, при IM1 портится #5c00-08 и 24672/3 -бордер не восстанавливался при выключенном звуке STS 7.0 (mar'05): -не декомпилировал -мог запороть свою регистровую модель -не хватало ещё 8 байт на стеке для IM 1 -не сохранял последний сектор файла (некруглого) *сплошная нумерация ВСЕХ декомпилируемых текстов. Пригодилось, когда декомпилил изменения в DOS6.05... Полезная штука оказалась декомпиляция в STS: ищем несовпадения FileComparer'ом, записываем на бумажку, в STS'е сравниваем и не отходя от кассы декомпилируем фрагменты... /убраны проверки на корректность вводимых адресов при декомпиляции - думайте своей головой +"Y" переключает отображение/неотображение русских букв! -резидент был 34 байта, а я думал, что 32. Теперь 31, так что не затирает RAMTOP -применён фикс Ивана Рощина по поводу определения состояния прерываний. К сожалению, он в несколько раз увеличивает вероятность запарывания области перед резидентом. Есть идея, как исправить: не переустанавливать SP и сохранять A и BC через LD alco?mail.ru alone_coder?mail.ru 2:5029/77.48 (4912)751390 390026 Рязань, Высоковольтная, 37к1 кв.12, Быстрову Дмитрию Мих.