ZX-News #07
06 октября 1996

Программистам - О глюках в Shadow Service Monitor'e (Скорпион)


            ┌───────────────┐
            │ Программистам │▒
            └───────────────┘▒
             ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

        © Александр Майоров, 1996.
        ──────────────────────────

    О ГЛЮКАХ В SHADOW SERVICE MONITOR

  Вот уже сколько раз, влзамывая с помощью
Scorpion'а  всяческие  защиты, я натыкался
на "глючок", но всё как-то было лень с ним
разобраться.  И  вот  однажды, отложив все
дела, я "поймал" этот глюк.

Дело всё в том, что работа с регистром <R>
в  скорпионовском  мониторе реализована не
совсем правильно!

Благодаря  этому всякие "ксорки" с регист-
ром  <R>  нужно проходить полностью либо в
режиме трассировки, либо в реальном време-
ни.  И нельзя часть оттрассировать в мони-
торе,  а  остальное продолжить выполнять в
реальном времени.

Сразу хочу сказать, что этот глюк присутс-
твует  на  всех версиях скорпоина, какие я
смог найти. А версии такие:

        Обычное ПЗУ: v2.7b, v2.95
          ПрофПЗУ  : v3.42, v3.92

       А теперь конкретнее о глюке:
     "глючат" команды LD R,A и LD A,R.

      Пишем ма-аленькую программку:
      -----------------------------

           DI
           LD A,#00
           LD R,A

      и получаем такие результаты:

 - при выполнении этой программки
   в режиме трассировки в <R> будет:

   в STS - R=#00, как и должно быть

   в MONITOR - R=#01 - глюк!

 -в режиме реального времени:
 (т.е. ставим breakpoint после LD R,A)

   в STS - R=#00, что и следовало ожидать

   в MONITOR - R=#02, лучше некуда!

        А теперь, команда LD A,R:
        -------------------------

 STS: После выполнения команды в аккумуля-
торе,  а  также в регистре <R> будет нахо-
дится  значение регистра регенерации перед
командой   плюс  два.  (Что  соответствует
справочным данным)

 MONITOR: После команды содержимое регист-
ра <R> увеличится на два, но в аккумулято-
ре  будет  значение регистра <R> перед ко-
мандой ПЛЮС ОДИН! (Т.е. на ЕДЕНИЦУ МЕНЬШЕ,
чем должно быть)

   Если кто-то не понял вышесказаного,
  то смотрим ниже нарисованую табличку:

 ┌─────────────────────────────────────┐
 │      выполнение команды LD A,R      │
 ├────────────┬──────────┬─────────────┤
 │            │регистр R │ Аккумулятор │
 ├────────────┼──────────┼─────────────┤
 │до команды  │   #00    │ без разницы │
 ├────────────┼──────────┼─────────────┤
 │в STS-е     │   #02    │    #02      │
 ├────────────┼──────────┼─────────────┤
 │в MONITOR-е │   #02    │    #01      │
 └────────────┴──────────┴─────────────┘

         По-моему тут всё ясно...

  Я надеюсь, что вы уже догадались, почему
"ксорки"  нормально  проходятся  в  режиме
трассировки, несмотря на эти ошибки, но на
всяких случай попробую объяснить:

  Вначале в регистр  <R>  посылается некое
число.  Благодаря  ошибке, там (в регистре
<R>)  оказывается  число ПЛЮС ОДИН. Затем,
когда  число из <R> посылается в Аккумуля-
тор,  оно попадает туда МЕНЬШЕ НА ЕДЕНИЦУ,
а  поскольку (-1)+(+1)=0 , то всё вроде-бы
и  в порядке. Но если посреди "ксорки" вам
надоело нажимать на "True Video" или надо-
ело ждать (SLOW ...) и вы, поставив break-
point, запустите программу в режиме реаль-
ного времени, то...

       Ещё одно ценное замечание:

  Если при входе в теневик по Magik-у  или
по breakpoint-у вы увидете  в регистре <R>
некое  число  (например  #25), то НЕ ВЕРЬ-
ТЕ ГЛАЗАМ СВОИМ!  Там должно быть число НА
ДВА МЕНЬШЕ!!  И для того, чтобы в <R> было
то,  что  надо, скажите  теневику "r=r-2".
Но не забудьте  о том, что 7-й бит не дол-
жен изменяться.

"Что же с этим нам делать?" - спросите вы.

   На это имеется несколько ответов :

1) Не взламывать программы с помощью тене-
вика.

2) Ждать, а вдруг эту ошибку исправят...

3) При взломе программ корректировать зна-
чение регистра <R>. Т.е. при входе в тене-
вик уменьшить <R> на еденицу и можно зани-
маться  трассировкой.  А  перед выходом из
теневика  надо снова уменьшить <R> на еде-
ницу.

Вот такие дела...

P.S.  Возможно, я где-то ошибся! Проверьте
всё сами!

P.P.S.  Как видите, не только в ZxNews бы-
вают глюки... :)

  С уважением, *MAS* from Omega group.

        __________________________
           ────────────────────



Другие статьи номера:

BBS на ZX - О развитии BBS'ок на Speccy.

Железо - Проект "General Vision" - расширение графических возможностей Speccy.

Конкурс - Конкурс на быстрое прохождение игры UFO-2 продлен.

Неприятности - Повременная оплата за телефонные разговоры внутри города Санкт-Петербурга.

От авторов - ZX-News - журнал или газета ?.. Редакция ищет музыканта.

Программистам - О глюках в Shadow Service Monitor'e (Скорпион)

Производители - О новых разработках на рынке аппаратного обеспечения ZX'a: Новая модель ZX-совместимого компьютера "Peters".

Реклама - Реклама и объявления ...

Список BBS - Список ныне действующих BBS в городе С.-Петербурге.

Фидо-разговорчики - История "псевдонимов" или кто как и почему называется ...

Хит-парад - 10 лучших программ,по итогам продаж фирмы Welcome.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Demoparty - Официальное приглашение версия 0.1 на Cafe'2000.
Проходилка - Crime Santa Clause 2 (demo).
Мысли - о журнале.

В этот день...   20 сентября