Представляем теневой монитор-отладчик STS7.3!

v7.3:

-не умел печатать на втором экране, сидя в pg7 (LVD)

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] - режим каталога диска. Вызываются все дисковые команды

(смена дисковода, запись/чтение файла, запись/чтение сектора),

при этом имя файла автоматически копируется с позиции курсора.

Чтение файла возможно также по клавише <ENTER>.

                   Команды-окна с параметрами

[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, так что легко поддаётся импортированию

непосредственно в ассемблер.Пришлось заменить <CRLF> на <CR>,

EQU на "=", а <EOF> убрать (по причинам нехватки памяти). В

качестве буфера меток при дизассемблировании используется

неактивный в данный момент 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

alone_coder?mail.ru 2:5029/77.48 (4912)751390

8(960)5718620

390026 Рязань, Высоковольтная, 37к1 кв.12, Быстрову Дмитрию Мих.