User Tag List

Показано с 1 по 10 из 80

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

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

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

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

    По умолчанию

    В турборежиме может случиться так, что прерывание приходит не в любой такт, а только в такой такт, чтобы не затронуть команду LD A,R. Точно это зависит от кол-ва тактов в прерывании и от логики WAIT в турборежиме. А вообще классная тема, спасибо всем, кто высказался, открыли мне глаза на важный баг Z80!

    Правда, позанудствую немного. Мне кажется, иметь такие подпрограммы, которые проверяют, разрешены ли прерывания - это дурной тон. В любой момент исполнения программы программисту известно, запрещены прерывания или разрешены. Можно иметь две точки входа в подпрограмму, одна из которых разрешает прерывания по выходу, а другая - нет, и вызывать ту из них, которая соответствует режиму работы процессора в данный момент. Мне только в одной ситуации нужно было проверять состояние IFF2 - в обработчике NMI. Но в этот момент работа команды LD A,R не может быть нарушена, т.к. IFF1=0 и прерывания фактически запрещены.

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    В турборежиме может случиться так, что прерывание приходит не в любой такт, а только в такой такт, чтобы не затронуть команду LD A,R. Точно это зависит от кол-ва тактов в прерывании и от логики WAIT в турборежиме. .
    Там неважно, в какой такт, лишь бы прерывание вообще происходило, тогда по истечении 10 секунд программа выйдет в бейсик. А оно, похоже, не происходит вообще, по каким-то причинам, соответственно, программа повисает насовсем.

  4. #3

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

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    А оно, похоже, не происходит вообще, по каким-то причинам, соответственно, программа повисает насовсем.
    Вспомнил. У меня ещё 2012-ом году отказалась работать игра Terra Cresta. У других владельцев КАЯ она тоже не заработала. Там от ссылки и далее по топику. Я так и не понял тогда, из-за чего эта проблема: то ли из-за CMOS Z80 (Z84C0020PEC, но на Фениксе работает!), то ли из-за схемы формирования /INT'а в КАЕ на ИР16. В общем, определится бы с причиной и решить эту проблему.

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

    И вот отсюда и далее по топику тоже можно почитать (вроде, всё-таки, из-за процессора).
    Последний раз редактировалось SoftFelix; 16.01.2018 в 02:06.
    МГТФ - любимый провод!
    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

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    а так функция местами полезная
    и че за бред понаписан в http://zxpress.ru/article.php?id=8963
    непонятно
    чем не устраивает элементарное двойное чтение?
    зачем было править проц
    много железа бажит или дает ложный результат при первом чтении

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

    а так да
    тема внезапно стала еще интересней
    опять всплыли всякие кривые клоны
    и их кривые глюки
    про которые нигде особо и не написано...
    Последний раз редактировалось NEO SPECTRUMAN; 20.01.2018 в 01:17.

  6. #5

    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,486
    Спасибо Благодарностей отдано 
    321
    Спасибо Благодарностей получено 
    253
    Поблагодарили
    221 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а если тебе выделило какойто время некоторая многозадачная ОС то уже не совсем...
    Много народа на Спеке работает под многозадачными ОСями...
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  7. #6

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CodeMaster Посмотреть сообщение
    Много народа на Спеке работает под многозадачными ОСями...
    а з80 только в спеке будто....

  8. #7

    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,486
    Спасибо Благодарностей отдано 
    321
    Спасибо Благодарностей получено 
    253
    Поблагодарили
    221 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а з80 только в спеке будто....
    Даже если не учитывать, что раздел называется "ZX Spectrum Software", то существует не более 1.5 штук многозадачных ОС и то в состоянии бета-версий. Ну, да SymbOS вроде как целостный продукт, но вещь сама в себе и кроме как автором ничем не поддерживается.
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  9. #8

    Регистрация
    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) обеспечение исполнения критичного по времени кода. Снова-таки, либо ось может быть для этого по определению не предназначена, либо в ней должны быть функции, фактически запрещающие или разрешающие прерывания, но автору драйвера до этого не должно быть дела, его задача - вызвать нужные функции и полагаться на их работу.

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

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

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

Эту тему просматривают: 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

Ваши права

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