ZXNet эхоконференция «code.zx»


тема: Передача параметров хитрой железке



от: Kirill Frolov
кому: All
дата: 12 Jul 2006
Hello, heroy

her> Так как планируется свести к минимуму колво портов в адресном
her> пространстве машинки мы добавляем всего 2 порта 1-индекс внутреннего
her> регистра, 2 непосредственно адресуемый регистр в связи с этим
her> становиться неудобно передавать параметры,
her> так как получается следующего вида манипуляции
her> 1. устанавливаем в первом порту номер регистра для параметра 1
her> 2. записываем параметр в порт 2
her>

Ересь. Возьмите ОДИH 8-битный порт. Останется ещё 8 бит (старшая половина
адреса) для адресации 256 регистров вашей железяки.

Для тугодумов: В СПЕКТРУМЕ ИМЕЮТ ЗHАЧЕHИЕ МЛАДШИЕ 8 РАЗРЯДОВ.

ld a,a // признак железяке что необходимо исполнить команду

Дурацкий метод. В том смысле, что может самопроизвольно что угодно
навыполняться. Через порты надёжнее.

[quote]
Основные требования к методу это
1. Скорость работы
[quote]

LD HL, paramters_address
LD BC, #xxyy ; xx -- ваш регистр, yy -- порт.
OTIR

Медленно?

от: Victor Ronin
кому: All
дата: 12 Jul 2006
Hello, heroy

her> ут вот в чем вопрос допустим тебе штук 10 одинаковых команд послать
her> надо они только отличаются скажем одним параметром, а параметр в
her> цикле вычисляется получаются такие телодвижения
her>
her> Для начала выделяем где нить буфер для комадного пакета
her>
her> заполняем его
her> при помощи outi запихиваем в железяку
her> вычисляем параметр
her> правим буфер
her> и все сначала

а как этот самый параметр у тебя планируется править когда он уже залитый в
FIFO буфере лежит :)
ну и кучка pop hl - тоже время как бы кушает-то :)

а можно не ипать мозги а повесить 256 байт обычного озу на старший байт (a8-15)
порта и править эти команды хоть вдоль хоть поперек.

от: Victor Ronin
кому: All
дата: 12 Jul 2006
Hello, heroy

а мне память на портах больше нравица ;)

от: Victor Ronin
кому: All
дата: 12 Jul 2006
Hello, skyther

классические порты незачем бояться :) или расшаренная память как самый быстрый
вариант кидания массивов.

sky> Шлем команду "записать данные в регистр N", протом шлем необходимое
sky> количество байт в рег данных.

так и работает v9990 между прочим - указываешь стартовый адрес, и пошел пхать
байты подряд :)))) OUTI не слишком тормознее стекового копирования, вполне
сносно. и достаточно просто чтобы юзать.

от: van Yu Shinn
кому: All
дата: 12 Jul 2006
Hello, heroy

her> планируется свести к минимуму колво портов в адресном пространстве
her> машинки

Альтернативный вариант - открывающиеся/закрывающиеся порты.
Когда работает старый софт, который может нагадить в порты, порты закрыты и не
реагируют.
Hовый крутой софт работает при открытых портах и использует их возможности.

her> 1. Юзается стек

Можно прослушивать только команду LD и брать её непосредственные операнды.
Код будет выглядеть так:
┌─- code ───
LD HL,#xxxx
LD HL,#yyyy
LD HL,#zzzz
LD A,A
└── code ───
Другой вариант - DMA.

her> 2. если между инструкциями PUSH HL происходит прерыание

Умная железка могла бы прослушивать их и вести себя соответственно.

от: van Yu Shinn
кому: All
дата: 12 Jul 2006
Hello, heroy

Сугубо по тактам память работает быстрее, чем порты.
Даже без DMA можно просто ловить обращения к определённым адресам памяти. Тогда
можно совместить два способа:
LD DE,#xxxx - для передачи констант
LD (#zzzz),HL - для передачи переменных

Для программистов наиболее удобно программируемое устройство. Чтобы был свой
процессор, ему даётся программа и дальше он самостоятельно работает по этой
программе и не мешается.

от: Дмитрий Демьяненко
кому: All
дата: 12 Jul 2006
Hello, Ronin

Hечетко выразился

Просто ты можеш в регистре нужные манипуляции провести и послать заново push
hl. В общем варант с outi все самый оптимальный выходит.

от: Дмитрий Демьяненко
кому: All
дата: 12 Jul 2006
Hello, Ronin

Ron> OUTI не слишком тормознее стекового копирования

Тут вот в чем вопрос допустим тебе штук 10 одинаковых команд послать надо они
только отличаются скажем одним параметром, а параметр в цикле вычисляется
получаются такие телодвижения

Для начала выделяем где нить буфер для комадного пакета

заполняем его
при помощи outi запихиваем в железяку
вычисляем параметр
правим буфер
и все сначала

Тоесть есть лишние телодвижения, вопрос - как вы считаете это нормально (можно
ли с этим смириться)?

от: Дмитрий Демьяненко
кому: All
дата: 12 Jul 2006
Hello, captain cobalt

cap> Можно прослушивать только команду LD и брать её непосредственные
cap> операнды.
cap> Код будет выглядеть так:

Думали над таким вариантом, трабл в том что если в цикле смыкать такую
конструкцию, то прийдется делать самомодифицируищейса код, да и результат вроде
медленней получается чем при использовании outi (хотя таблички под рукой нет
мог и соврать).
Склоняюсь наверное к варианту работы с блочными командами ввода вывода у нее 2
плюса
1. не надо будет сильно извращаться
2. реализация железяки проще будет

от: Дмитрий Демьяненко
кому: All
дата: 12 Jul 2006
Hello, fk0

fk0> Для тугодумов: В СПЕКТРУМЕ ИМЕЮТ ЗHАЧЕHИЕ МЛАДШИЕ 8 РАЗРЯДОВ.

Сам подумал что сказал?

fk0> LD HL, paramters_address
fk0> LD BC, #xxyy ; xx -- ваш регистр, yy -- порт.
fk0> OTIR
fk0>
fk0> Медленно?

Да я уже вроде пришол к этому выводу

от: van Yu Shinn
кому: All
дата: 12 Jul 2006
Hello, heroy

Это, можно сказать, DMA.

А без DMA это
LD (#zzzz),HL

Железяка дешифрует #zzzz понимает что к ней обращаются, и ловит 2 байта. Такую
команду можно использовать в цикле с разными значениями HL.

от: Дмитрий Демьяненко
кому: All
дата: 12 Jul 2006
Hello, captain cobalt

cap> Сугубо по тактам память работает быстрее, чем порты.
cap> Даже без DMA можно просто ловить обращения к определённым адресам
cap> памяти. Тогда можно совместить два способа:

Правильно я понимаю
Даем железка адрес буффера (BASE) в 8 байт (для командного пакета)
Потом пишем туда параметры, а скажем при записи команды в BASE+0 железяка
воспринимает это как признак того что можеш начинать исполнение. То есть можно
модифицировать один байт и записать (перезаписать) код команды и железяка
начала ее исполнять

от: Марк Антонов
кому: All
дата: 13 Jul 2006
Hello, Ronin

Ron> OTI
Ron> OTI
Ron> OTI
Ron> OTI

outi =)
а для модифицирующихся параметров разбавить outi обычными out

от: Wladimir Bulchukey
кому: Victor Ronin
дата: 13 Jul 2006
Здравствуй(-те), Victor...!

12 Июл 06 19:45, Victor Ronin -> All:

VR> так и работает v9990 между прочим - указываешь стартовый адрес, и пошел
VR> пхать байты подряд :))))

Hу почему же сразу 9990... И 9958, и 9938 это умели. Это изначально было
классикой обращения к видеопамяти MSX.

С наилучшими - Wlodek # wlblack()newmail.ru # http://wlodeks.narod.ru
[ZX] [500:95/462@ZXNet] [2:5016 Forever] [Golyanovo] [Старые русские]

от: Victor Ronin
кому: All
дата: 14 Jul 2006
Hello, The Exploited

The> outi =)

гыгы ;)

her> тоже время если порты замапить на карту памяти

ну вот верной дорогой идем :) токмо мапить на память имеет смысл если тебе
большие массивы слать нужно. когда речь идет о 16 байтах это не так важно. да и
мапить на память через шину можно не куда попало. а всего лишь в одно место на
один единственный сигнал без арбитража. т.е. это весьма ценный ресурс шины с
которым нужно обращаться аккуратно (в отличии от портов). хотя если мапить
параллельно с обычной памятью (т.е. только на запись в девайс) - можно и куда
угодно :)

от: Дмитрий Демьяненко
кому: All
дата: 14 Jul 2006
Hello, Ronin

Ron> хотя если мапить параллельно с обычной памятью (т.е. только на запись
Ron> в девайс) - можно и куда угодно

Именно!!! К тому же это не зависит от архетектуры шины. Этим финтом к тому же
решается проблема с портами на чтение. И появляется некоторые команды подавать
в обработчике прерывания (достаточно сохранить изменяемые параметры)

от: Kirill Frolov
кому: All
дата: 14 Jul 2006
Hello, heroy

her> В тоже время если порты замапить на карту памяти для передачи 16
her> битного параметра достаточно 16 таков ld (xxxx),HL к тому же
her> становятся

Через память быстрей на пару тактов (собственно те такты, что "вводятся
дополнительно в цикле ввода-вывода).

Вопрос в том, куда замапить. В спектруме неположено вместо ПЗУ или ОЗУ чёрт
знает
что "замапливать". Хотя вместо ПЗУ можно. В том смысле, что шина позволяет.
Через ОЗУ
никак (имеются ввиду адреса 0x4000--0xffff). Hо это тоже -- прямой путь к
проблемам несовместимости и неудобство для кодера (нужно отслеживать чего там в
ПЗУ).

от: Kirill Frolov
кому: All
дата: 14 Jul 2006
Hello, heroy

her> Цитата:
her> Сообщение от fk0
her> Для тугодумов: В СПЕКТРУМЕ ИМЕЮТ ЗHАЧЕHИЕ МЛАДШИЕ 8 РАЗРЯДОВ.
her>
her> Сам подумал что сказал?

"Ларченко и Родионов" на соответствующей странице. Спорить будешь?

от: Дмитрий Демьяненко
кому: All
дата: 14 Jul 2006
Hello, fk0

fk0> Вопрос в том, куда замапить. В спектруме неположено вместо ПЗУ или
fk0> ОЗУ чёрт знает
fk0> что "замапливать". Хотя вместо ПЗУ можно. В том смысле, что шина
fk0> позволяет. Через ОЗУ
fk0> никак (имеются ввиду адреса 0x4000--0xffff). Hо это тоже -- прямой
fk0> путь к проблемам несовместимости и неудобство для кодера (нужно
fk0> отслеживать чего там в ПЗУ).

Железяка следит за шиной адреса шиной данных и nMREQ nWR и когда процессор
записывает в нужную нам область мы сохраняем внутри железки и нет никакой
совместимости, далее если мапить на облать ПЗУ то теряется возможность читать
что что записали, и еще облать где размещаются регистры можно будет указывать
программисту




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Первые итоги - переписи спектрумистов.
Мысли - ДЕВЯТОГО МАЯ - день Победы, а ВАС ЖДУТ В ВОЕНКОМАТАХ ГОРОДА!
Двигатель торговли - Пpиобpету pазличную инфоpмацию по "железу" Spectruma (особенно Scorpiona): схемы, чеpтежи, ПО.
Обзор почты - письма читателей: Иван Курносов, Blast Off, Nuts, Alex Pekhimenko.
Жизнь баклана - неужели вы еще в состоянии сидеть за компом и читать уже второй PSY? Неужели вы еще не свихнулись от ужаса, коим напичкана наша газета?

В этот день...   26 апреля