User Tag List

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя
Показано с 51 по 60 из 80

Тема: Вместо HALT

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    если у тя вся машина в твоем распоряжении то да
    а если тебе выделило какойто время некоторая многозадачная ОС то уже не совсем...
    Автор исходной программы не использовал такую ось.

    А вообще в многозадачных осях пользовательскому коду строго запрещено разрешать или запрещать прерывания. В процессорах с MPU инструкции вроде DI или CLI являются привилегированными, так что этот запрет реализуется принудительно. При написании драйверов принудительного ограничения нет, но все равно надо следовать документации на ось, иначе драйвер будет глючным.

    Если автор драйвера считает необходимым нарушить запрет на изменение состояния прерываний - то лучше ему подумать еще раз, а надо ли. Зачем это может быть надо? Варианта два:
    1) блокировка многопоточного доступа к данным. Вместо запрещения прерываний следует пользоваться функциями блокировки, предоставляемыми осью, например, KeAcquireSpinLock в случае винды;
    2) обеспечение исполнения критичного по времени кода. Снова-таки, либо ось может быть для этого по определению не предназначена, либо в ней должны быть функции, фактически запрещающие или разрешающие прерывания, но автору драйвера до этого не должно быть дела, его задача - вызвать нужные функции и полагаться на их работу.

    Это общие принципы построения осей, им следуют как минимум крупные оси, а мелкие - тут все зависит от компетентности их авторов.

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

  3. #2

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, вроде, разобрались - разработчики пофиксили баг LD A,R в CMOS Z80 очень мощно - после LD A,R/LD A,I не может произойти прерывание (как после EI во всех Z80), а в Кае длительность INT - два цикла M1, как раз на одну команду LD A,R.

    - - - Добавлено - - -

    Так что и из-за процессора и из-за Кая, комплексно.

  4. #3

    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    3,000
    Спасибо Благодарностей отдано 
    201
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    после LD A,R/LD A,I не может произойти прерывание (как после EI во всех Z80), а в Кае длительность INT - два цикла M1, как раз на одну команду LD A,R.
    Это можно отловить программно для доработки теста? В Тесте INT'а Ковалевского, у меня длительность ровно на границе Мало-Норма.
    МГТФ - любимый провод!
    KAY-1024(4096)/SL-4/TURBO v2010 + Nemo-FDC + Nemo-IDE (CF 4GB) + SMUC2 Rev.B RTC (HDD 1.6GB + DVD-ROM) + PROF-ROM + ZXMC2 + GENERAL SOUND 2MB + ZX-BUS_TEE + FDD 3.5' + FDD 5.25' + VGA&PAL

  5. #4

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SoftFelix Посмотреть сообщение
    Это можно отловить программно для доработки теста? В Тесте INT'а Ковалевского, у меня длительность ровно на границе Мало-Норма.
    Так оно ж программно и отлавливается - если тест виснет, это показатель того, что INT надо фиксить, или будут и в играх проблемы.
    Тут вроде как не тест надо дорабатывать, а Кай - 2 цикла M1 на INT это явно маловато. В стандартном спеке длительность INT 32 такта, если брать по 4 такта на цикл M1 - это 8 циклов M1 надо.

    Слегка поправил тест - поставил время проверки 2 секунды, и предупреждение, что, если программа виснет, INT проблемный:CMOSz80tst.zip

  6. #5

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    В стандартном спеке длительность INT 32 такта
    а почему нигде не используется схема подтверждения прерывания по даташиту на проц z80 ? - а именно INT_ACK = /IORQ OR /M1.

  7. #6

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    а почему нигде не используется схема подтверждения прерывания по даташиту на проц z80 ? - а именно INT_ACK = /IORQ OR /M1.
    В "Орель БК-08" используется такая схема. Никаких проблем, проц никогда не "просыпает" INT, потому что во время действия сигналов M1, IORQ прерывание уже подтверждено. С другой стороны, если подтверждение прерывания не приходит в течение около 25 тактов (при запрещеных прерываниях) - то запрос снимается до следующего кадра. Возможно, в Spec256 нет автоснятия запроса, из-за этого пропущенное прерывание срабатывает сразу после EI.

    Почему в других клонах не используется - вероятно, разработчики таким образом экономят логический элемент. Они ведь были в те годы на вес золота. Ну и место на печатной плате, и сложность разводки.
    Последний раз редактировалось Barmaley_m; 19.01.2018 в 23:14.

  8. #7

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    Так оно ж программно и отлавливается - если тест виснет, это показатель того, что INT надо фиксить, или будут и в играх проблемы.
    Тут вроде как не тест надо дорабатывать, а Кай - 2 цикла M1 на INT это явно маловато. В стандартном спеке длительность INT 32 такта, если брать по 4 такта на цикл M1 - это 8 циклов M1 надо.

    Слегка поправил тест - поставил время проверки 2 секунды, и предупреждение, что, если программа виснет, INT проблемный:CMOSz80tst.zip
    @goodboy выявил несовершенство моего теста - на его сером +2 тест то выдавал ошибку процессора, то не выдавал. Не выставил начальный TStates при заходе в тестовый цикл, и при определенных условиях за 2 секунды ошибка проца ни разу не ловилась. Исправил тест, если кому интересно:Z80CMOStst2.zip

    Этот пользователь поблагодарил Spectramine за это полезное сообщение:

    goodboy(04.10.2022)

  9. #8

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,288
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    при определенных условиях
    ещё и `снег` на экране появлялся (комп подключал к телеку по ВЧ - качество было неважное),
    хотя вот он в эмуле (и в новом варианте теста тоже снежит)

    Последний раз редактировалось goodboy; 04.10.2022 в 20:59.

  10. #9

    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    3,000
    Спасибо Благодарностей отдано 
    201
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    а в Кае длительность INT - два цикла M1, как раз на одну команду LD A,R.
    Я так понимаю, что эту длительность задаёт комбинация на входах D0...D3 сдвигового регистра. D1 и D2 посажены на GND. Это и задаёт длительность INT'а в два цикла /M1? А сколько это в тактах?



    Вот что на КАЕ показывает Тест INT'а Ковалевского. В ТУРБО-неТУРБО длительность всегда одинаковая и находится ровно на границе МАЛА-НОРМА. Когда-то давно комрад Шепелёв (насколько я помню) опубликовал в журнале "Радиолюбитель" тест длительности INT'а. Там давалась норма 28...32 тактов процессора. На КАЕ сейчас данный тест во всех режимах показывает "Too short!".

    ТУРБО включено.


    ТУРБО выключено.


    Ближе.


    Я так понимаю, что если INT чуть удлинить, то проблема с подвисанием уйдёт? На вскидку 5-ую ногу регистра отцепляем от +5В и сажаем на GND. Железячники тут есть? Ход мысли правильный (с ответом можно переместится в эту тему)?
    Последний раз редактировалось SoftFelix; 20.01.2018 в 13:20.
    МГТФ - любимый провод!
    KAY-1024(4096)/SL-4/TURBO v2010 + Nemo-FDC + Nemo-IDE (CF 4GB) + SMUC2 Rev.B RTC (HDD 1.6GB + DVD-ROM) + PROF-ROM + ZXMC2 + GENERAL SOUND 2MB + ZX-BUS_TEE + FDD 3.5' + FDD 5.25' + VGA&PAL

  11. #10

    Регистрация
    04.12.2008
    Адрес
    г. Черкассы, Украина
    Сообщений
    957
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    а почему нигде не используется схема подтверждения прерывания по даташиту на проц z80 ? - а именно INT_ACK = /IORQ OR /M1.
    Потому, что так проц INT# не пропустит (если в схеме триггер используется), да и не все игры корректно работают, например в Cybernoid играть становится труднее, игра делается что-ли динамичнее. Поначалу понять не мог в Spec256 в чём дело, пока не убрал INTA# и не вернул стандартную длительность INT# и автоматом сразу добавилась проблема в турбо, нужно эту длительность ещё в разы удлинять для турбо, из-за проблем работы игр.

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя

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

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

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

Похожие темы

  1. HALT контроллер
    от zx_ в разделе БК-0010/0011
    Ответов: 9
    Последнее: 28.09.2018, 00:49
  2. Di:Halt 99
    от Vinnny в разделе События
    Ответов: 29
    Последнее: 13.07.2018, 19:59
  3. Di:HALT:2009
    от TmK в разделе События
    Ответов: 186
    Последнее: 11.08.2009, 14:26
  4. Di:Halt 2007 invitation
    от sq/skrju в разделе События
    Ответов: 12
    Последнее: 25.05.2007, 11:44

Ваши права

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