PDA

Просмотр полной версии : Как работает /RESET?



Gutten
28.03.2014, 10:37
Задумался о результатах выполнения демки http://zx.pk.ru/showthread.php?t=21039.
Запускал на Скорпионе. После нажатия на RESET сброс не всегда выполняется. Может пойти по экрану мешанина из атрибутов, может вообще всё зависнуть, но визуально не измениться. Очевидно, что-то портится в тех страницах ОЗУ, где расположен монитор. Помогает только отключение-включение питания. Всегда думал, что подача сигнала RESET на спектруме равна отключению-включению питания, при этом из ПЗУ нужные данные записываются в ОЗУ, но выходит это не так? Как же работает /RESET вообще и особенно на Скорпионе? В чём отличие от отключения питания?

Lion17
28.03.2014, 10:52
В чём отличие от отключения питания?
Память компьютера при Reset не изменяется. Если работа ПЗУ как-то зависит от содержания памяти (например, при наличии определенного значения в особой ячейки памяти выполнение идет по другой ветви), то могут быть отличия от поведения при включении питания.

А еще может быть проблема в механизме переключения страниц ПЗУ. Может быть при сбросе выбирается (или, наоборот, не выбирается) не та страница, что нужно.

im2
28.03.2014, 10:56
При reset происходит сброс счетчика команд на PC=0000H;
сброс триггера разрешения прерываний;
очистка регистров I и R;
установка режима прерываний IM0;
А далее начинает работать подпрограмма ПЗУ, которая чистит память.

SAM style
28.03.2014, 11:51
Задумался о результатах выполнения демки http://zx.pk.ru/showthread.php?t=21039.
Запускал на Скорпионе. После нажатия на RESET сброс не всегда выполняется. Может пойти по экрану мешанина из атрибутов, может вообще всё зависнуть, но визуально не измениться. Очевидно, что-то портится в тех страницах ОЗУ, где расположен монитор. Помогает только отключение-включение питания. Всегда думал, что подача сигнала RESET на спектруме равна отключению-включению питания, при этом из ПЗУ нужные данные записываются в ОЗУ, но выходит это не так? Как же работает /RESET вообще и особенно на Скорпионе? В чём отличие от отключения питания?
В Скорпионе в 8 странице хранятся данные и подпрограммы. Целостность проверяется по 256-байтовому паттерну - если он испорчен, страница инициализируется заново, иначе - нет. Если запортить код в этой странице и не трогать контрольный блок, инициализации не произойдёт, ПЗУ будет выполнять испорченный код, что и приводит к глюкам.
Если память не изменяет, если во время сброса держать стрелку влево, инициализация произойдёт принудительно. Если держать CS+Space - покажется настроечная таблица.

Gutten
28.03.2014, 11:53
В данном случаем, стрелка влево не срабатывает. Только выключение помогает. Кстати, вспоминаю, что на Унриле такое же поведение встречал в некоторых программах - проще было эмуль перезапустить, чем в меню ресетом добраться.

goodboy
28.03.2014, 11:58
вспоминаю, что на Унриле такое же поведение встречал в некоторых программах - проще было эмуль перезапустить, чем в меню ресетом добраться.
в таком случае проще поставить BreakPoint на запись в порт и разбираться