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

User Tag List

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

Тема: Полосы в ZX Spectrum без ПЗУ как образуются?

  1. #1
    Master
    Регистрация
    19.11.2012
    Адрес
    г. Луганск
    Сообщений
    698
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Полосы в ZX Spectrum без ПЗУ как образуются?

    Смутно помню когда налаживал ZX Spectrum'ы одним из последних этапов был запуск Speccy без ПЗУ. При этом на экране отображались повторяющиеся полосы, которые ни с чем не спутаешь (изображение не нашел в Инете). И еще важный момент эти полосы могли в случайном порядке меняться местами при сбросе, но были только двух видов.

    Еще тогда задумывался: "Как же они образовываются"?, и не находил ответа. Пробую сейчас разобраться: все равно что-то другое получается явно ошибочное. Вот смотрите:
    - Нажимаем мы сброс, Z80 обнуляет все регистры и считывает с 0 адреса регистра команд команду #FF которая "висит" на пустой шине данных;
    - Это команда RST #38 (RST это сокращенное RESTART) аналогична CALL #38 только однобайтовая;
    - По ней мы обращаемся к адресу #0038 и считываем команду оттуда, там опять #FF, таким образом входим в вечный цикл, при этом стек будет сохраняться вплоть до 0 и потом "все опять повторится сначала...";
    - Таким образом у нас в оперативке, в том числе и в видео области будет повторяющееся число #0038.
    Рассуждения правильные или нет?
    Но откуда взяться случайному переходу в два вида?

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

  3. #2
    Master
    Регистрация
    18.01.2005
    Адрес
    Ростов-на-Дону
    Сообщений
    577
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Знаменитый "матрас".
    Могу придумать только одно объяснение - это зависит от состояния SP в момент Reset'а. Четный-нечетный. Соответственно полосы могут смещаться на байт в сторону.

    По этой версии не все регистры Z80 обнуляются при сбросе.

    Хотя у Шин Янга написано, что SP всегда устанавливается в FFFF. Но возможны это отличается для разных производителей, либо из-за дребезга линии Reset, сброс выполняется не до конца. Ведь не зря есть требование удерживать Reset в течении определенного количества тактов.
    Последний раз редактировалось Lion17; 27.04.2013 в 10:59.

  4. #3
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PATHNK Посмотреть сообщение
    #0038
    #0039, в стек кладется адрес возврата
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  5. #4
    ZEK
    Гость

    По умолчанию

    Цитата Сообщение от Lion17 Посмотреть сообщение
    Хотя у Шин Янга написано, что SP всегда устанавливается в FFFF.
    когда было подключена DE1 к KAY, смотрел на шину, так вот SP там отфоноря

  6. #5
    Master
    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Z80 User Manual, стр.9:
    RESET initializes the CPU as follows: it resets the interrupt enable flip-flop, clears the PC and registers I and R, and sets the interrupt status to Mode 0.

  7. #6
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот такая картинка получается без пзу:


    Кстати, я помню что вне зависимости от наличия пзу, в момент включения на экране спектрума появлялась систематическая картинка из прямоугольных областей залитых разным цветом. Картинка напоминала шахматную доску. После сброса эта картинка не появлялась, только в момент включения. При чем на разных клонах спектрума картинка заметно отличалась. Т.е. зависела от схемы.
    За счет чего формировалась эта картинка? Предполагаю что состояние памяти в момент включения зависело от схемы регенерации памяти.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  8. #7
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander Makeev Посмотреть сообщение
    Кстати, я помню что вне зависимости от наличия пзу, в момент включения на экране спектрума появлялась систематическая картинка из прямоугольных областей залитых разным цветом. Картинка напоминала шахматную доску. После сброса эта картинка не появлялась, только в момент включения.
    такая картинка получается без процессора.

  9. #8
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    такая картинка получается без процессора.
    Да, так вот интересно - за счет чего?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #9
    Master
    Регистрация
    19.11.2012
    Адрес
    г. Луганск
    Сообщений
    698
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander Makeev Посмотреть сообщение
    Да, так вот интересно - за счет чего?
    А ведь действительно были (!) я и забыл, и разных размеров, на Пентагоне более крупные, на Краснодаре более мелкие кажется.
    Теоретически должен быть хаос: при включении питания ячейки памяти содержат случайную информацию.

    Кстати с "матрасом" все сходится: число #0039 - это %00000000 00111001 синие полосы на белом фоне - 2 белых, 3 синих, 2 белых, 1 синяя; потом 8 черных. Действительно при нажатии кнопки Reset в регистр SP (Stack pointer) заносится случайное число и в зависимости от младшего бита картинка может смещаться на 8 пикселей.
    Можно даже рассчитать за сколько процессор "пробежит" через все адресное пространство:
    (1 / 3500000) * 65536 * 11 (тактов на выполнение #RST 38) = ~0.2 секунды

  11. #10
    Master
    Регистрация
    18.01.2005
    Адрес
    Ростов-на-Дону
    Сообщений
    577
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PATHNK Посмотреть сообщение
    Действительно при нажатии кнопки Reset в регистр SP (Stack pointer) заносится случайное число и в зависимости от младшего бита картинка может смещаться на 8 пикселей.
    Можно даже рассчитать за сколько процессор "пробежит" через все адресное пространство:
    (1 / 3500000) * 65536 * 11 (тактов на выполнение #RST 38) = ~0.2 секунды
    Думаю, число все же не случайное, а сохраняется текущее. Если Reset произошел посреди выполнения операции, то SP уменьшится только на единицу и произойдет смещение матраса.

    А насчет подсчета, ты не учел, что на стек помещается сразу два байта, так что надо умножать на 32768.

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

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

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

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

Похожие темы

  1. Ответов: 7
    Последнее: 06.04.2012, 21:37
  2. Межзнакоместные вертикальные полосы
    от Kakos_nonos в разделе Изображение
    Ответов: 2
    Последнее: 27.03.2012, 20:50
  3. Владельцам ZX Spectrum+128 и ZX Spectrum+2(grey)
    от Black_Cat в разделе Зарубежные модели
    Ответов: 3
    Последнее: 11.03.2012, 17:24
  4. Полосы на бордюре - принцип эмуляции
    от Виктор в разделе Эмуляторы
    Ответов: 14
    Последнее: 20.04.2009, 04:38

Ваши права

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