|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
nedoPC-580 (SMP на 5 процессорах КР580ВМ80А)
Author |
Message |
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 873
|
DAD SP портит флаг переноса. Надо после сохранения HL делать PUSH PSW / POP H / SHLD Будет, правда, испорчена пара байт в стеке, но будем надеяться никто DCX SP / DCX SP не делает
P.S. А вообще, идеальный вариант - использовать команду JC перед DAD SP, и там, в зависимости от флага переноса, устанавливать его или не устанавливать (DAD SP с нулём будет всегда сбрасывать).
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
27 Aug 2012 22:40 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Если используется пара PUSH/POP то можно и не заморачиваться об "испорченности" байтов стека.
Last edited by HardWareMan on 05 Jan 2014 06:58, edited 1 time in total.
|
27 Aug 2012 22:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
хм, точно - я это как-то упустил из виду - вот поправленный вариант:
во вчерашнем сообщении тоже поправил...
|
28 Aug 2012 06:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
Вы можете спросить меня - а к чему такая путанная нарезка памяти? А я отвечу - это всё ради ShaOS, которую я мечтаю реанимировать
|
28 Aug 2012 17:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да нет - я заподозрил неладное ( уж больно ты рьяно взялся! ), но промолчал...
В конце-концов, все больные - о своих язвах: я - всё время про " Специалист" и
RAMFOS... И прототип у меня из него вырисовывается + " Орионные" приблуды...
Ну - у тебя свои любимые предпочтения...
Мне только категорически не нравится текстовый экран...
Я и в молдости - не польстился на РК-ку...
_________________ iLavr
|
28 Aug 2012 17:15 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
Ну всему своё время - до быстрой графики поди тоже дорастём (ключевое слово "быстрой" ; )
|
28 Aug 2012 17:34 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
А некоторым категорически достаточно CLI или Rogue-подобия...
|
29 Aug 2012 02:22 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
| | | | Shaos wrote: | | | | Shaos wrote: Я тут подумал, что чисто программно мьютексы не сделать - всё равно будет вероятность того, что к ячейке с состоянием мьютекса процессы обратятся одновременно и одновременно же попробуют его залочить. Поэтому в системе должен быть как минимум один аппаратный мьютекс, который будет закрывать доступ к программным мьютексам, причём закрывать серъёзно - т.е. останавливая все процессоры кроме одного (даже если обращается больше одного должен быть выбран один). Например путём вывода в некий порт программа будет говорить железяке, что она хочет поработать с одним из мьютексов (захватить или освободить), в этот момент железяка остановит все процессоры кроме просящего (либо первого из просящих), далее программа устанавливает (и идёт дальше либо запоминает что она должна локнуться) либо сбрасывает мьютекс и пишет в другой порт чтобы сигнализировать о том, что работа с мьютексами закончена - далее железяка отпускает все процессы, а просящий процесс либо висит на программном локе (ожидая когда программный мьютекс отпустят при этом ос может отдавать управление другим тредам на этом же процессоре), либо идёт дальше - в зависимости от результата лочки-анлочки программного мьютекса. Вобщем как-то так... | | | | |
Вобщем информация обо всех глобальных мьютексах будет храниться в общей непереключаемой памяти (#C800...#CFFF). Любой процесс может в любой момент прочитать состояние любого мьютекса, однако чтобы локнуть или анлокнуть мьютекс, надо будет уведомить супервизора, что процесс хочет зайти в критическую секцию - для этого можно обратиться к какому-то специальному адресу (упрощаем железо - портов нету), предварительно запретив прерывания: DI MVI A,1 STA #FFFF Это вызывает прерывание процессора-супервайзера. Далее процесс ожидает подтверждения - читает оттуда байт и ждёт когда младший бит станет равен нулю: LOOP: LDA #FFFF RAR JC LOOP В момент подтверждения ожидающий процессор либо останавливается супервизором (если эта критическая секция уже локнута другим процессором либо процессор с более низким номером также хочет обратиться к критической секции), либо идёт дальше - локать или анлокать программный мьютекс. Если интересующий нас мьютекс свободен (бит мьютекса сброшен) и процесс хочет его локнуть, то бит мьютекса взводится, а супервайзер уведомляется, что критическая секция покидается: XRA A STA #FFFF EI После этого супервайзер отпускает все остановленные процессоры, если таковые были. Если интересующий нас мьютекс свободен, но процесс хочет его анлокнуть, то это ошибка, теоретически приводящая к трапу. Если интересующий нас мьютекс локнут (бит мьютекса взведён) и процесс хочет его локнуть, то нужно ожидать анлока - для этого мы уведомляем супервизора что покидаем критическую секцию: XRA A STA #FFFF EI и висим в цикле ожидая сброса бита мьютекса, чтобы попытаться его локнуть когда он освободится (опять же зайдя в критическую секцию). При этом текущий процессор может переключить контекст, отдав вычислительные ресурсы другому процессу, ожидающему своего кванта времени. Если интересующий нас мьютекс локнут и процесс хочет его отпустить (надо ли проверять то, что мьютекс отпускается именно тем процессом, который его локал?), то бит мьютекса сбрасывается и супервизор уведомляется о том, что критическая секция покинута: XRA A STA #FFFF EI | | | | |
С другой стороны такой подход нарушает нашу первоначальную установку, что все процессоры работают параллельно не мешая друг-другу и никогда не тормозятся. Буду думать, может есть решение без торможения процов...
P.S. Хотя можно смириться с временным торможением, но тормозиловку сделать аппаратную - чтобы проц без кручения в цикле гасился сразу же следом за STA #FFFF. Есть идеи того как это лучше сделать?...
P.P.S. Первую версию на самом деле можно сделать программную (с пятым 8080), а потом - если всё получится - можно задумываться об аппаратном ускорении...
|
30 Aug 2012 21:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
Напомню схему от Хардваремана, которую он придумал в сентябре прошлого года:
| | | | HardWareMan wrote: Первые наброски по подключению 4х КР580ВМ80А к одной шинке. Все ресурсы могут быть расшарены, если всю шину адреса замультиплексировать. Итак, схема: Входящая тактовая частота - 10МГц. Это позволяет формировать F2 на частоте 2,5МГц - проверенная хорошая частота для ВМ80. Таймслот получается равен одному периоду частоты 10МГц, или 100нс, что не так и мало и можно использовать достаточно медленные ОЗУ (не забываем задержки на установку адреса в мультиплексорах и т.д.). 2 триггера образуют счетчик на 4 положения. Результирующие сигналы 5М и 2М являются одновременно и сигналом номера активного процессора (0..3), который следует подавать на мультиплексор адреса. Сам мультиплексор можно собрать из 8 микросхем 555КП2 (в одном корпусе 2 мультиплексора, а надо коммутировать 16 линий). Сигнал F1 каждого процессора можно (и даже нужно) использовать как гейт для сигналов RD/WR этого же процессора. Или так же тупо поставить еще один корпус 555КП2. Всего получилось 4 корпуса следующего комплекта: 555ТМ2, 555ЛП5, 555ЛН1 и 555ЛИ1. Если высоковольные буферы имеют инверсию (ЛА8, к примеру), тогда 555ЛИ1 меняется на 555ЛА3, а в наборе сигналов F2 нужно просто сменить местами F2_1 с F2_3 и F2_2 с F2_4. А теперь эпюры: | | | | |
Сигнал F1 узкий, а на всех диаграммах рисуют DBIN сильно шире - 8080 точно успеет из памяти прочитать данные, если мы RD и WR будем гейтовать сигналом F1?...
И потом WR на диаграмме 8080 выглядит как будто он тянется от одного пика F1 до другого F1, а прямо посередине идёт положительная полуволна F2, т.е. если мы будем гейтать WR тем же F1, то похоже оно сгенерит два сигнала WR из одного - второй будет узким, но тем не менее (хотя на более детальной диаграмме видно что первый будет узким, а второй пошире).
|
30 Aug 2012 22:57 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Сигнал записи гейтится F2. И только F2. В фазе нуля: --__--
Last edited by HardWareMan on 05 Jan 2014 06:58, edited 1 time in total.
|
30 Aug 2012 23:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
Ну ты же сам писал год назад:
Получается что если WR надо гейтить по F2, а не по F1, то мы получаем пересечение и процессоры будут наступать друг-другу на пятки - придётся тормозить процы через READY в циклах записи?...
P.S. Кстати на фирменных диаграммах сигналы F1 и F2 соотносятся так:
а у тебя так:
Я подозреваю, что так тоже будет работать т..к. в твоём спеце точно также идёт и оно работает
P.P.S. Вот блин - в книжке на картинке нарисовано одно, а в таблице по цифрам стоит tD1=0 ns (минимальное время от спада Ф1 до фронта Ф2) что значит, что твоя диаграмма правильная
Last edited by Shaos on 31 Aug 2012 00:01, edited 3 times in total.
|
30 Aug 2012 23:46 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
А, да, тут же многопроцессорный арбитр. Ну да, Данные процессору нужны от фронта F1 и до фронта F2:
И гейтить только родным F1. Ну а короткая запись не страшна - адреса то все стоят стабильно. Хотя ее не будет, так показал осциллограф когда я спеца мучал. Гейт по F2 работал четко, а он шире, чем F1.
Last edited by HardWareMan on 05 Jan 2014 06:58, edited 1 time in total.
|
30 Aug 2012 23:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22827 Location: Silicon Valley
|
Не совсем понял кого её не будет и что показал осциллограф...
P.S. Я смотрю что слово статуса хватать с шины данных совсем не сложно - так что наверное будут у нас нормальные порты с командами IN и OUT
По большому счёту нам только 2 бита нужны из этого слова состояния - INP и OUT
|
31 Aug 2012 00:10 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Короткой записи же.
Латчить по SYNC AND F1 в одну ТМ2. Все верно.
Last edited by HardWareMan on 05 Jan 2014 06:58, edited 1 time in total.
|
31 Aug 2012 01:37 |
|
|
BarsMonster
Senior
Joined: 21 Jul 2012 15:56 Posts: 126 Location: Zürich, Switzerland
|
Очень интересные детали, я правильно понимаю, что срез ни на что не влияет ни у F1 ни у F2?
|
31 Aug 2012 06:42 |
|
|
Who is online |
Users browsing this forum: No registered users and 4 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|