User Tag List

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

Тема: Команды OUTI, INI и подобные и 16-битные порты

  1. #1

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,803
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Команды OUTI, INI и подобные и 16-битные порты

    Хотелось бы прояснить для себя - возможно ли использование команд блочного ввода-вывода с 16битными портами? Где-то выдел использование OUTI для передачи блока с настройками в музпроцессор. Не понятно вот что: при исполнении этой команды меняется регистр B в качестве счётчика байт, получается эта команда работает только с 8битными портами, адрес задаётся регистром С и передать можно максимум 255 байт? Как же это работало для музпроцессора?
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

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

  3. #2

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Gutten, регистр B каждый раз задавался перед командой.

  4. #3

    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Gutten, официальная дока всё прояснит.
    рег. В декрементируется ПЕРЕД выполнением отправки.
    вывод идёт в 16бит адрес

  5. #4

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,803
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так по этой доке и получается, что в В задаётся счётчик и он же (уменьшенный на 1) выставляется на старший байт адресной шины.
    Register B can be used as a byte counter, and its decremented value is placed on the top half (A8 through A15) of the address bus.

    Example
    If Register C contains 07h, Register B contains 10h, the HL register pair contains 100014
    and memory address 1000h contains 5914, then upon the execution of an OUTI instruction,
    Register B contains 0Fh, the HL register pair contains 1001h, and byte 59h is written
    to the peripheral device mapped to I/O port address 07h.
    Получается, никак не выдать в 16 битный порт (к примеру, #FDFD) массив из 12 байт командой OUTI?
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

  6. #5

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Gutten, да все правильно
    или так
    Код:
    dup 11
    outi
    inc b
    edup
    outi
    С уважением,
    Jerri / Red Triangle.

  7. #6

    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    67
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Gutten Посмотреть сообщение
    Так по этой доке и получается, что в В задаётся счётчик и он же (уменьшенный на 1) выставляется на старший байт адресной шины.


    Получается, никак не выдать в 16 битный порт (к примеру, #FDFD) массив из 12 байт командой OUTI?
    Можно:
    OUTI
    INC B
    OUTI
    INC B
    ...
    "L-256"

  8. #7

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,803
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну в принципе, да, так можно.
    Жаль, с OTIR уже так не провернуть. Можно было бы память экономить.
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

  9. #8

    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    выдаём блок парой "старший байт адреса, значение"
    рег С должен хранить нужное значение младшего байта адреса порта
    set_ports
    .m1 ld b,(hl)
    inc hl
    inc b
    ret z
    outi
    jr .m1
    постоянно юзаю эту функцию для блочного программирования железа TS Conf

  10. #9

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нужно еще учитывать, что при дешифрации портов 7FFD, FFFD и BFFD учитываются не все 8 старших бит адреса, а только (обычно) A14 и A15. Поэтому вывод в любые порты с адресами XXFD, где XX=00..7F, попадет в регистр номера страницы Spectrum-128. В некоторых случаях работает не весь диапазон x=00..7F, а только его часть, например, 40FD..7FFD. Но все равно это много. Для AY обычно работают диапазоны XX=80..BF -> BFFD, XX=C0..FF -> FFFD. Поэтому уменьшение регистра B командами OUTI и OTIR не должно помешать выводу в эти порты небольших блоков данных.

    Мне еще не встречался реальный клон ZX, у которого для дешифрации портов 128 и AY использовались бы все 8 старших бит адреса. Это просто расточительно схемотехнически, а пользы никакой.

  11. #10

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Barmaley_m, проблема программера не в том чтобы работало на том железе что у него на руках, а чтобы работало на любом совместимом железе.
    таким образом упрощенно писать можно но не желательно.
    С уважением,
    Jerri / Red Triangle.

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

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

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

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

Похожие темы

  1. Недокументированные команды
    от MadCat! в разделе Программирование
    Ответов: 46
    Последнее: 02.02.2011, 13:49
  2. Команды Z80
    от e2e4 в разделе Для начинающих
    Ответов: 11
    Последнее: 02.07.2010, 21:13
  3. Куплю/меняю на плату Радио-86РК и им подобные
    от Gryphon в разделе Барахолка (архив)
    Ответов: 4
    Последнее: 27.04.2009, 17:09
  4. Команды Z80
    от Almaz в разделе Программирование
    Ответов: 1
    Последнее: 28.10.2007, 12:50
  5. Z80 подобные CPU
    от spectrum в разделе Несортированное железо
    Ответов: 1
    Последнее: 14.05.2005, 11:50

Ваши права

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