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

User Tag List

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

Тема: Как в Z80 использовать регистр I в качестве порта вывода

  1. #1
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как в Z80 использовать регистр I в качестве порта вывода

    У Z80 есть одно, практически неиспользуемое свойство, используя которое, можно без существенных затрат деталей (что важно для простейших контроллеров, где число корпусов менее 10), получить 8-ми разрядный порт на вывод.

    Мало кто знает, что в тактах RFSH процессор Z80 выдаёт на старшую половину шины адреса содержимое регистра прерываний I. Так что, если сигналы шины адреса A8...A15 "защёлкивать" по стробу /MREQ в тактах регенерации, то получается 8-ми разрядный выходной порт. Это эквивалентно тому, как бы в процессор добавили 8 дополнительных выходных линий, адресуемых непосредственной адресацией, причём шина данных даже не нагружается входами доп.порта.

    Аппаратно это выливается в один вентиль из 1533 ЛЛ1 и, естественно, регистр-защёлку типа 1533 ИР23 или ИР27 (или ИМС с меньшей разрядностью, например ТМ2, срабатывающие по прямому фронту). Программно, всё, что процессор запишет в регистр I, после ближайшего такта регенерации (а он будет уже в этой же или в следующей команде Z80) появится на выходе регистра ИР23. Для простого контроллера это то, что надо. Выигрыш тройной: по деталям, скорости прогона и расходу байтов на программу. Недостаток - потеря прерываний в MODE 2.

    В простом контроллере это можно использовать для вывода звука или вывода в линию. Можно этим портом управлять режимом (например экрана) в компьютере. Но гораздо полезнее задействовать этот дополнительный порт, как бы встроенный в процессор, для управления диспетчером памяти (в простейшем случае, просто для переключения банок).

    Я не встречал в литературе подобного использования регистра I. Может быть кто-нибудь знает почему это плохо или вообще невозможно.
    Последний раз редактировалось barsik; 20.08.2017 в 21:26.

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

  3. #2
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Я не встречал в литературе подобного использования регистра I. Может быть кто-нибудь знает почему это плохо или вообще невозможно.
    Наверное оттого, что не наблюдается существенного выигрыша: внешний регистр же все равно нужен для хранения выведенного, т.е. в сущности никакой разницы в сравнении с выводом по OUT (n),a. А прерывания при этом теряются (и самый удобный режим).
    Выигрышь был у 8080 и его вывода EI/DI - там хоть и однобитный, но внутренний триггер процессора с готовой ножкой.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

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

    По умолчанию

    плисоводы однозначно не восторге от этой затеи )

  5. #4
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от error404
    не наблюдается существенного выигрыша
    Вы не учитываете того, что регистр I внутренний и потому доступен для чтения, что очень важно для диспетчера памяти (да и регистра режима экрана тоже). Если регистр диспетчера памяти сделан традиционно, то надо добавлять и порт ввода для считывания. С невозможностью считывать порт F9, все сталкивались в ОРИОНЕ, отчего п/п-ммы ПЗУ для вывода на экран можно вызывать только из банки 0. Прерывание в MODE 2 не важно, если в ЭВМ с адреса 0 стоИт ОЗУ, а не ПЗУ.

    Цитата Сообщение от error404
    вывод по EI/DI в КР580 хоть и однобитный, но это внутренний триггер процессора с готовой ножкой на корпусе
    ЛЛ1 можно заменить двумя диодами, а один триггер на звук - это немного. В простейшем контроллере в качестве чип-селектов ради экономии (дешифратора ИД7 для ОЗУ, ПЗУ и портов) используются сами адреса CPU. Отчего деталей - минимум, кроме БИС всего 2 корпуса логики. Если же использовать "electrically erasable and programmable ROM", что имеют программный интерфейс как обычное ОЗУ, но заменяют одновременно ОЗУ и ПЗУ, число деталей сокращается до - Z80, ОЗУ&ПЗУ, порт ввода и порт вывода (или ВВ55) и 2 корпуса логики для формирования упр.сигналов.

  6. #5
    Activist
    Регистрация
    19.01.2009
    Адрес
    Белгород
    Сообщений
    347
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #6
    Banned
    Регистрация
    05.07.2010
    Адрес
    Москва
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Мало кто знает, что в тактах RFSH процессор Z80 выдаёт на старшую половину шины адреса содержимое регистра прерываний I.
    Ага, мало кто - какая-то жалкая пара сотен тысяч спектрумистов...

  8. #7
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У Барсика, обострение. I регистр для IM2.

    Так к слову. Я лично мечтаю, чтобы этот рефреш убрать в Z80 (Z180 - отключаемо).
    Это какой прирост скорости на простых инструкциях сходу.
    Последний раз редактировалось OrionExt; 20.08.2017 в 23:57.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  9. #8
    Activist
    Регистрация
    19.01.2009
    Адрес
    Белгород
    Сообщений
    347
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от OrionExt Посмотреть сообщение
    Так к слову. Я лично мечтаю, чтобы этот рефреш убрать в Z80 (Z180 - отключаемо).
    Это какой прирост скорости на простых инструкциях сходу.
    А что тут мечтать - берём софт-ядро Т80 и пилим, пилим...

  10. #9
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну что тут сказать. Пилить софт ядро, этот как пилить гирю. Кому это нужно на реальном железе

    Да и софт ядро Т80 хорошо для софт железок, в жизнь такое идеальное чудо не запустить. Хотя тцц!!! Есть попытки. Но разработчик ту не афиширует работу.
    Последний раз редактировалось OrionExt; 21.08.2017 в 00:15.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  11. #10
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MacBuster
    Цитата Сообщение от barsik
    Мало кто знает, что в тактах RFSH процессор Z80 выдаёт на старшую половину шины адреса содержимое регистра прерываний I.
    Ага, мало кто, - какая-то жалкая пара сотен тысяч спектрумистов...
    Докажите.

    Кстати, не уверен, что сейчас спектрумистов наберётся даже одна тысяча. А среди них тех, кто не игроман, а сам разбирается в программировании на порядок меньше.

    Цитата Сообщение от OrionExt
    У Барсика, обострение
    Пожалуйста отвечайте в первом лице и вежливо. Я пишу серъёзно, зачем Вы хотите превратить тему в балаган?

    Цитата Сообщение от OrionExt
    I регистр для IM2
    На что Вы отвечаете? Здесь все знают для чего служит регистр I.
    Последний раз редактировалось barsik; 21.08.2017 в 00:40.

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

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

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

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

Похожие темы

  1. Ответов: 2
    Последнее: 15.07.2018, 23:17
  2. Ответов: 31
    Последнее: 08.08.2014, 23:47
  3. Как использовать BZither?
    от goblinish в разделе Софт
    Ответов: 4
    Последнее: 11.03.2012, 17:48
  4. Что используете в качестве CORE при впихивании Z80 в FPGA
    от Vladimir Kladov в разделе Несортированное железо
    Ответов: 5
    Последнее: 16.01.2007, 01:52

Ваши права

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