Page 1 of 1

В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 16:21:21
by EARL
В анрыле в основном цикле при начале нового фрейма первым делом стоит проверка сигнала INT и запуск ISR, т.е. сигнал INT приходит даже раньше чем выполнится какая либо инструкция. Однако в пошаговом выполнении команд из дебагера все в точности и наоборот, сперва выполняется команда, а потом идет проверка на возможность запуска ISR, если пришел сигнал INT и выполнены все прочие условия. Баг это или фича, кто может объяснить?


В дезсофтовском анрыле такая же ерунда.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 17:50:55
by TS-Labs
Баг, конечно. В трекер.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 18:39:28
by introspec
Уточню: баг в эмуляторе, а не в дебагере.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:04:44
by EARL
Я так и понял что баг в эмуляторе. Меня другое интересует. Если я сейчас все поправлю, то чем потом потестить лучше, ибо до этого данный код "подгонялся" под тесты?

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:17:09
by introspec
Любые тесты до такта должны бы пойти. Я если честно не припомню, чтобы я на этом ловился, если честно. Т.е. код до такта писал, но различий с анрилом вроде не было. Кажется.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:22:50
by EARL
Какие тесты с точностью до такта вообще есть?

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:38:47
by introspec
Бордерные эффекты с вертикальными кромками для пентагона любые. Rage, мои MGDMA и In Memoriam VNN. Есть ещё просмотрщики бордерной графики, один, что приходит с zxstealth (про него я меньше знаю) и другой - мой. Вообще, я видел небольшие различия между эмуляторами, как раз 1-2 такта, но тесты на реалах, насколько я помню, не давали очевидных противоречий. Наверное, нужно пофиксить эмулятор и посмотреть, как это скажется на любых из этих софтин.

Есть ещё тесты эмуляторов, но многие из них заточены под классику и на пентагоне работать нормально не будут. Отечественные тесты такого рода я знаю хуже. Самый лучший человек расспросить по этому поводу - автор ZXMAK2.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:40:55
by introspec
Вообще же, состояние флага прерываний должно проверяться во время последнего такта команды. Чем это отличается от проверки перед первым тактом команды следущей? Скажем, как это скажется на выполнении команды halt?

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 20:44:59
by TS-Labs
Вот, удобный.

Re: В Unreal неправильно приходит сигнал INT?

PostPosted: Tue, 04.03.2014 21:19:39
by EARL
introspec wrote:Вообще же, состояние флага прерываний должно проверяться во время последнего такта команды. Чем это отличается от проверки перед первым тактом команды следущей? Скажем, как это скажется на выполнении команды halt?

Хм. Ну по идее разницы не должно быть, кроме случая когда эмулятор только включается и происходит проверка возможности входа в прерывание еще не выполнив ни одной команды.

...
Нашел этой "фиче" в анрыле только одно объяснение. При выход в дебагер, мы оказываемся в самом начале ISR. Больше пользы не вижу.

...
Длина INT на 1 меньше задаваемых, т.е. вместо 32 будет 31. Говнокод:
Code: Select all
      // INT loop
      if (cpu.intnew && ((cpu.t - comp.intpos + 1) < conf.intlen))
      {
         // Обработка INT
         ...
      }