Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: Недокументированные особенности КР1818ВГ93

  1. #1
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Недокументированные особенности КР1818ВГ93

    После операции чтения/записи сектора возникает необходимость чтения порта #1F, на предмет проверки возникновения ошибки на предыдущей операции. В TR-DOS мне попался следующий кусок (по адресу #3EF3):
    Код:
             IN H,(C)
    .wait:
             IN A,(#FF)
             AND #C0
             JR Z,.wait
             EI
             RET M
             DI
             IN A,(#7F)
             JR .wait
    Понятно, что напрямую эту часть для чтения произвольного порта не получится, т.к. после завершения команда чтения/записи сектора это приведет к зацикливанию. Но этого можно избежать. После завершения какой-либо операции мы посылаем в регистр #1F код #E0 (команда "сырого" чтения дорожки). Эта команда не изменяет содержимое регистра состояния до своего завершения, а значит считываемое значение состояние контроллера остается от предыдущей операции. Посылка же команды "сырого" чтения дорожки контроллеру позволяла всего лишь избежать зацикливания.

    Ну вот, всю идею я вроде описал, а теперь мне интересно, чтобы кто-нибудь проверил это на реальных машинах, потому что в эмуляторах это, кажется, не учитывается. Можно ли использовать данный трюк при программировании контроллера ВГ93? Будет ли он работать на всех машинах?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    16.11.2005
    Адрес
    Санкт-Петербург
    Сообщений
    2,893
    Спасибо Благодарностей отдано 
    1,124
    Спасибо Благодарностей получено 
    343
    Поблагодарили
    190 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если не ошибаюсь, то как раз этот момент в ПЗУ все и используют для вышеописанной надобности чтения любого порта TR-DOS (например если посмотреть 35 номер ZXNews - статья про CMOS часы).

  4. #3
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,149
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Evgeny Muchkin
    Если не ошибаюсь, то как раз этот момент в ПЗУ все и используют для вышеописанной надобности чтения любого порта TR-DOS (например если посмотреть 35 номер ZXNews - статья про CMOS часы).
    нет, в прошивках трдос профпзу (всех версий) по одним и тем же адресам адресам #3ffx прошиты
    out (c),a
    ret
    и
    in a,(c)
    ret
    но ориентироваться на это само собой нельзя

  5. #4
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Evgeny Muchkin
    Если не ошибаюсь, то как раз этот момент в ПЗУ все и используют для вышеописанной надобности чтения любого порта TR-DOS (например если посмотреть 35 номер ZXNews - статья про CMOS часы).
    Во как оказывается! А я и не знал. Похоже я слишком отстал от жизни и прогресса в мире спектрума

  6. #5
    Guru
    Регистрация
    16.11.2005
    Адрес
    Санкт-Петербург
    Сообщений
    2,893
    Спасибо Благодарностей отдано 
    1,124
    Спасибо Благодарностей получено 
    343
    Поблагодарили
    190 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    The Exploited, я про профпзу (вернее, про пзу скорпиона) ничего и не говорил.
    Последний раз редактировалось Evgeny Muchkin; 22.12.2006 в 09:57.

  7. #6
    Member Аватар для Jack Ketch
    Регистрация
    17.07.2005
    Адрес
    Асбест
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Такое было сделано на Черном Вороне медноногова !!!!! Есть такаяя поганая цифра помойму 247 при записи в порт ВГ-шка все стоит !!!!
    ДЛЯ защиты от копирования т.к. там был такой НОМЕР сектора или чето такое непомню

  8. #7
    Member Аватар для Faster
    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    После операции чтения/записи сектора возникает необходимость чтения порта #1F, на предмет проверки возникновения ошибки на предыдущей операции. В TR-DOS мне попался следующий кусок (по адресу #3EF3):
    Код:
             IN H,(C)
    .wait:
             IN A,(#FF)
             AND #C0
             JR Z,.wait
             EI
             RET M
             DI
             IN A,(#7F)
             JR .wait
    Понятно, что напрямую эту часть для чтения произвольного порта не получится, т.к. после завершения команда чтения/записи сектора это приведет к зацикливанию. Но этого можно избежать. После завершения какой-либо операции мы посылаем в регистр #1F код #E0 (команда "сырого" чтения дорожки). Эта команда не изменяет содержимое регистра состояния до своего завершения, а значит считываемое значение состояние контроллера остается от предыдущей операции. Посылка же команды "сырого" чтения дорожки контроллеру позволяла всего лишь избежать зацикливания.

    Ну вот, всю идею я вроде описал, а теперь мне интересно, чтобы кто-нибудь проверил это на реальных машинах, потому что в эмуляторах это, кажется, не учитывается. Можно ли использовать данный трюк при программировании контроллера ВГ93? Будет ли он работать на всех машинах?
    Насколько я помню, ни к какому зацикливанию это не приведет, а произойдет выход по RET M

    Код:
    #3ef3 in h,(c)
    #3ef5 in a,(#ff)    ; ожидание intrq или drq
          and %11000000 ; bit7 - intrq/bit6 - drq
          jr z,#3ef5
          ei
          ret m         ; выход по intrq
    ибо команда чтения/записи сектора также была завершена тем же самым intrq-сигналом окончания команды:

    Код:
    #3fe5 in a,(#ff)    ; ожидание intrq или drq
          and %11000000 ; bit7 - intrq/bit6 - drq
          jr z,#3fe5
          ret m         ; выход по intrq
    #3fec ini           ; чтение байта
          jr #3fe5
    просто мы получим значение регистра состояния контроллера #1f и с разрешенными прерываниями выйдем из процедуры. Ниче недокументированного я здесь не вижу, просто весь трабл данного метода состоит именно в команде EI...

    p.s. см. источник: Абзац №15, Рубрика: В помощь разработчику, "Укрощение TR-DOS".
    Последний раз редактировалось Faster; 19.10.2009 в 23:19.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Недокументированные команды
    от MadCat! в разделе Программирование
    Ответов: 46
    Последнее: 02.02.2011, 13:49
  2. Особенности фирменного Спектрума
    от dwt в разделе Программирование
    Ответов: 45
    Последнее: 08.01.2009, 14:34
  3. КР1818ВГ93
    от lvd в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 22.05.2005, 01:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •