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

User Tag List

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 80

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

  1. #41
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так он и должен крутиться, а в прерывании по достижении счетчиком нуля должен выходить. Возможно, Турбо режим отключает прерывания.

  2. #42
    Guru Аватар для SoftFelix
    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    2,975
    Спасибо Благодарностей отдано 
    171
    Спасибо Благодарностей получено 
    102
    Поблагодарили
    88 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    Турбо режим отключает прерывания.
    Точно не отключает.
    МГТФ - любимый провод!
    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

  3. #43
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Посмотри в теневике, меняется ли содержимое регистра BC со временем. Если не меняется - что-то с турбо режимом, почему-то, если он включен, отключены прерывания.

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

    Листинг кода, может, кто-то шарит в особенностях Турбо-режима Кая, разберется, почему виснет:

    Скрытый текст


    ; CLEAR 32255 (#7DFF)

    ORG 32700
    LD C,#FE
    OUT (C),0

    LD HL,#7E00
    LD DE,#7E01
    LD BC,256
    LD (HL),#7F
    LDIR
    LD BC,500 ; время определения ошибки z80 в 1/50 секунды
    LD A,#7E
    LD I,A
    IM 2
    EI

    L1 LD A,R
    JP PE,L1
    LD BC,1

    LEND IM 1
    LD A,#3F
    LD I,A
    EI
    RET


    ORG #7F7F
    PUSH AF
    DEC BC
    LD A,B
    OR C
    JR Z,L3
    POP AF
    L2 EI
    RET
    L3 POP AF
    POP AF
    JP LEND
    [свернуть]
    Последний раз редактировалось Spectramine; 14.01.2018 в 22:37.

  4. #44
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,057
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  5. #45
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #46
    Guru Аватар для SoftFelix
    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    2,975
    Спасибо Благодарностей отдано 
    171
    Спасибо Благодарностей получено 
    102
    Поблагодарили
    88 сообщений
    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

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

  8. #47
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    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.

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

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

  9. #48
    Guru Аватар для SoftFelix
    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    2,975
    Спасибо Благодарностей отдано 
    171
    Спасибо Благодарностей получено 
    102
    Поблагодарили
    88 сообщений
    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

  10. #49
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    По умолчанию

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

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

Эту тему просматривают: 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 в разделе События
    Ответов: 206
    Последнее: 11.08.2009, 14:26
  4. Di:Halt 2007 invitation
    от sq/skrju в разделе События
    Ответов: 12
    Последнее: 25.05.2007, 11:44

Ваши права

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