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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: тестик для реалов и эмулей

  1. #1
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,086
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию тестик для реалов и эмулей

    Вот, скажите, пожалуйста, будет ли мигать бордюр:

    Код:
            DI
            LD A,#80
            LD I,A
    
            LD HL,#8000,DE,#8001,BC,257
            LD (HL),#81:LDIR
    
            LD A,#C3,HL,INT
            LD (#8181),A,(#8182),HL
    
            IM 2
    
    LOOP    EI
            JP LOOP
    
    INT     PUSH AF
            LD A,R:OUT (254),A
            POP AF
    
            RET
    и, есть ли разница мужду тем (^^^) и следующим:

    Код:
            DI
            LD A,#80
            LD I,A
    
            LD HL,#8000,DE,#8001,BC,257
            LD (HL),#81:LDIR
    
            LD A,#C3,HL,INT
            LD (#8181),A,(#8182),HL
    
            IM 2
    
    LOOP    EI
            JP LOOP
    
    INT     PUSH AF
            LD A,R:OUT (254),A
            POP AF
            EI
            RET
    дело в том, что в UnrealSpeccy 1й кусок не мигает, и я слабо верю, что так и должно быть

    поправьте меня, если я не прав )

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

  3. #2
    CraZZZy CodEr Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    1,553
    Благодарностей: 740
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ei + jp loop ест 14 тактов (2 команды, r=r+2) и вопрос в том, сколько их влезет в одно прерывание за вычетом тех тактов, которые уйдут на выполнение проги INT (лишний ei там добавляет 4 такта и 1 команду), да и то не везде будет одинаково, если вспомнить о тормозилке на scorpion (напр. push af без нее делается 11.5 тактов, с ней - 12). В итоге:

    пусть INTtick - число тактов на прогу INT (непостоянно)
    FRAMEtick - тактов в прерывании (зависит от компа)

    count=(FRAMEtick-INTtick)/14 - скока раз сделается ei:jp loop
    delta=count*2 - команд
    total1=delta+5 - команд между ld a,r и ld a,r в следующем прерывании
    total2=delta+6 - то же с лишней ei

    если (total1 and 7)=0, то в натуре ничего мигать не будет

    Тут еще оговорка - я без понятия, сколько тактов ест и меняет ли R сам приход прерывания (переход на прогу INT)
    Все любят гипножабу

  4. #3

    По умолчанию

    Цитата Сообщение от psb
    Код:
            DI
            LD A,#80
            LD I,A
    
            LD HL,#8000,DE,#8001,BC,257
            LD (HL),#81:LDIR
    
            LD A,#C3,HL,INT
            LD (#8181),A,(#8182),HL
    
            IM 2
    
    LOOP    EI
            JP LOOP
    
    INT     PUSH AF
            LD A,R:OUT (254),A
            POP AF
    
            RET
    дело в том, что в UnrealSpeccy 1й кусок не мигает, и я слабо верю, что так и должно быть

    поправьте меня, если я не прав )
    Оно может не мигать по очень банальной причине - после EI в течение одной команды прерывания запрещены, если до этого были запрещены. Вообще это задумывалось для того, при выходе из прерываний ( ei:ret ) стек не переполнялся, а как оно в унреале эмулируется - х его з. У тебя вообще в первом куске кода прерывания ловятся? Убери push-pop af, а ld a,r замени на inc a - что получается?

  5. #4
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    lvd: в эмуляторе не должно мигать, int специально запрещён после EI (кажись, такой тест на "реальность" спектрума был в игре колобок-зуум)

    psb: а что, действительно, второй кусок мигает?

  6. #5
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,086
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет ))

    и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать

  7. #6
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,481
    Благодарностей: 776
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb
    че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет ))

    и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать
    На реале все работает. Об этой проблеме я писал еще в багах для Unreal v0.21b5 (псевдо баг 10).
    Достаточно изменить в INI файле Frame на один такт (вместо 71680 сделать 71681) и все заработает.

  8. #7
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    caro: работает - значит мигает, или не мигает? случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...

  9. #8
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,481
    Благодарностей: 776
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SMT
    caro: работает - значит мигает, или не мигает?
    Честно говоря вчера написал, что работают оба варианта не проверяя.
    Для обьективности откомпилировал оба теста и запустил на своем Кворуме.
    Как я и ожидал работают оба теста абсолютно одинаково.
    Цитата Сообщение от SMT
    случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...
    Да нет после EI идет JP, а вот после него до выполнения слудующего EI и выполняется прерывание.

  10. #9
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Благодарностей: 30
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    caro: тогда согласен, природа явления та же самая.. значит, этот пример будет прекрасно работать на эмуляторах с длинным int'ом, например RealSpectrum или Z80Stealth

  11. #10
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,086
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а на машинах, с интом меньше 4-6 тактов тоже работать не будет?

    я неспроста решил эти тесты выложить... видел в одной деме такое, и эта дема висла в эмуле.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Ваши права

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