Внутреннее устройство МК. Сделать свой собственный МК

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
Аватара пользователя
As
Модератор
Сообщения: 45991
Зарегистрирован: Пт янв 23, 2009 19:20:05

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение As »

Наткнулся на интересную информацию... Оказывается, самые популярные процессоры для Интель разрабатывали в Израиле?! http://itbusinessweek.com/israel-67/ :shock:
Реклама
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Morroc »

А индусы пишут код для фин. системы Microsoft, которую я обслуживаю - глобализация :dont_know:
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Реклама
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

Paguo-86PK писал(а):...нашёл способ организации портов ввода-вывода без ввода специальных команд. Просто взять и все попытки доступа к ячейкам памяти за пределами 64кб обрабатывать за порты....
Дык создатели одноименного компа в этом плане ващще не парились - просто прицепляли порты в адресном пространстве памяти и все.
Paguo-86PK писал(а):...скажите: С бодуна ли в Intel коду 00 в x86 назначили ADD r/m,r8??? :beer:
Вот я "трезво" пытаюсь расставить все команды стройно по полочкам... :idea:
"Вот тут-то ми их и попгавим..."(с)
Processor not found. Loaded software emulation ......
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

a_klyuev писал(а):
Paguo-86PK писал(а):...нашёл способ организации портов ввода-вывода без ввода специальных команд. Просто взять и все попытки доступа к ячейкам памяти за пределами 64кб обрабатывать за порты....
Дык создатели одноименного компа в этом плане ващще не парились - просто прицепляли порты в адресном пространстве памяти и все.
И выделяли под всё по 8кб драгоценнейщей памяти... :(
Я пытаюсь "замаскировать" все "неприкладные" операции.
Вот, скажем, HLT - у меня, как сказал, имеет код 00. И всё тут ясно. Однако, "ядро ОС" может использовать 00 за недоступный "нулевой" префикс. Обратите внимание на слово "нулевой": Пахнет "нулевым кольцом" x86... Т.е. если тупо объявить код 00 на уровне ядра за префикс, можно повесить на него все важнейщие функции для организации ключевых моментов ОС (управление страницами памяти, переключения контекстов процессов и т.д.), так как "хорошая" ОС не может содержать команд останова (согласны?). А прикладная задача - может (вместо JMP 0F86Ch).

И прямая трансляция устройств в адресное пространство - не дело. Во-первых, как я уже сказал, лучше иметь лишние 8кб ОЗУ, чем 8кб портов, которые трогать не рекомендуется (в Windows с портами играться? вот вам и потеря кодов in/out/ins/outs). Тем самым, если указатель стека вдруг обнулился (чтобы сделать ход "конём" за границы 64кб - [sp-1]..[sp-128]), ОС может это или присечь "вылетом программы", или "подставить" свой слой API (эмулировать некоторые функции).
(именно SP, а не BP или BX. Так как ассоциативно SP - System Port. И потом, ну незачем прикладным задачам обнулять указатель стека! А lxi sp,a16 - маразм: разовая операция. Можно было обойтись sphl)
Спойлер

Код: Выделить всё

; DL = Port Index[7F:PortIn]
; AL = Data
;;; Если DL!=127, вывод из AL в порт номер DL
;;; Если DL==127, ввод из порта с номером из AL
PortIO:	PUSH	DX
	CMP	DL,128
	SBB	DH,DH
	ADD	DL,129
	JZ	.input
	XCHG	SP,DX
	JNS	.lower
	MOV	[SP+127],AL
	JS	.ready
.lower:	MOV	[SP-128],AL
	JNS	.ready
.input:	CMP	AL,128
	SBB	DH,DH
	ADD	AL,129
	MOV	DL,AL
	JZ	.ready
	XCHG	SP,DX
	JS	.higher
	MOV	AL,[SP-128]
	JNS	.ready
.higher:MOV	AL,[SP+127]
.ready:	XCHG	SP,DX
	POP	DX
	RET
Здесь также очень интересный момент...

Помните, в IBM-PC порты звуковой карточки начинались с 0220h? И к ним доступ возможен был только через in al,DX / out DX,al. Тогда как ПДП лежит в первых 256 портах (да и таймер тоже) со всеми жизненно важными устройствами. Опять таки недальновидность разработчиков архитектуры...

Вот тут то я иду соответствующе: Чем "глубже" порт, тем он важнее и трогать его не следует.
Так, порты [0ffffh+1..99] и [00000h-1..99] можно сделать популярными для задач (пусть там ВИ53 и ВВ55). Тогда как более серъёзные свистелки (ВТ57, ВН59, ВГ75) уже положить в дальнее "запорожье" - в смещение +100..127 и -100..127.
И температуру кристалла процессора должна иметь право знать любая задача. Значит, либо в ближнем "запорожье", либо, как сказал выше, нужный POP при SP=0ffffh (в цикле POP'кать хоть 100 раз - медленно, но и операция редкая же).

Помните, моей мечте уж 20 лет. Инженеры Intel и IBM имели доступ к уникальным технологиям производить кристаллы и ЭВМ. И всё в сжатые сроки (нацарапать ПК) было спланировано абы как... Стало де-факто всё (кривая карта портов, косяки с командами)... Я 20 лет никак чётко не могу сделать сам план, так как хочется поиграть в "идеальный мир" без костылей и ухабов. И лишь, буквально, на днях, додумался организовать всё так, как описал выше.
Всё аккуратно, без излишек. :wink:

В моём эмуляторе можно заметить, что таблица команд иногда меняется.
Это зависит от секунды, когда страница загружена. Секунда индексирует префикс. Если каждые 5 секунд в браузере обновлять страницу, можно увидеть все команды под все 8 префиксов.
И заметить, сколько там ещё резервных кодов...
И все - доступны прикладному ПО... Ну, чем не "домашняя" обстановка? :tea:

P.S.: Кстати, помните в Бейсике РК86 как производилось чтение кода клавиши? Через загадочное usr(-2045). Если бы автор "Монитора" при написании подумал и о Бейсике, он бы перенёс API системных jmp-вызовов из F803..F835 в сегмент FFCD..FFFF. В Бейсике было менее загадочное usr(-51)...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

Я зашёл в тупик... Может, кто-нибудь поможет мне советом, как выбраться?

Имеется
Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Если SP==0FFFFh, через относительное [SP+1..+127] можно получить доступ к портам 1..127.
Если SP==00000h, через относительное [SP-128..-1] можно получить доступ к портам 128..255.
В эмуляторе это вполне работает (пока, выдаёт код нажатой клавиши и меняет тональность звукового генератора).

Также, как говорил, доступ к служебным регистрам процессора (как CRn/DRn в x86) я организовал подобным же образом.
Если SP=0FFFFh, операции POP читают последовательно все регистры выбранной служебной страницы.
Если SP=00000h, команды PUSH выставляют значения во все регистры выбранной служебной страницы.
Если SP=00001h, команда PUSH выбирает индекс служебной страницы.
В эмуляторе это также работает (пока, выдаёт в тексте версию процессора и реальное время).

В этих случаях буфер стека ограничен до 65533 байтов.

Как я описывал, прикладному коду незачем копаться ни в портах, ни в управляющих регистрах. Поэтому, такие критические операции организованы через сбитый стек.
Однако, немного подумав, я решил переделать всё в несколько иную модель, более простую для понимания:
Когда SP=00000h..000FFh, он служит указателем на порт ввода-вывода соответсвующего индекса (некий HAL).
Когда SP=00100h..001FFh, он работает аналогично стеку известного процессора 6502.
Когда SP=0FE00h..0FEFFh, он служит окном обмена данными с операционной средой (своеобразный API).
Когда SP=0FF00h..0FFFFh, он работает со служебными регистрами процессора.
(В эмуляторе это не реализовано, т.к. идея сырая и не до конца понимаю опасность "подводных камней")

Следует пояснить, что служебные страницы (0..65535) делятся на прикладные и системные.
Прикладные могут включать в себя регистры счётчика тактов процессора, температуры ядра, точек останова в отлаживаемом коде, и т.д.
Системные могут включать в себя регистры приоритета текущего процесса, управления страницами памяти, перекрытие страниц памяти разных процессов и т.д.
Тем самым, в отличии от x86, с одной стороны как бы нету привелегированных команд и регистров. Всё почти прозрачно и "по-домашнему".

С другой стороны, указатель стека ограничивается до 64768 байтов.
Да, возможно и незначительно. Но, мало ли.
Я же, как говорил, не берусь тягаться с гигантами индустрии. Но и не хочу делать так же и гигантских просчётов в собственных крошечных проектах.
Честно говоря, я уже сомневаюсь, что в Verilog у меня получится описать текущую модель процессора...

Тупик в том, что возможностей оорганизовать всё так или иначе - достаточно. На каком варианте остановиться конкретно - не знаю.

P.S.: Как показала практика, "кривое" программирование на ассемблере часто приводит к одному - команда HLT (00). Как я и хотел в концепции...
Реклама
Аватара пользователя
ФД263 01
Сверлит текстолит когтями
Сообщения: 1239
Зарегистрирован: Пн фев 26, 2007 20:23:49
Откуда: Москва

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение ФД263 01 »

mixon46, начните с простого - микросхемы памяти, и чего-нибудь типа К556РТ4(ППЗУ 256 4-х разрядных), есть шина адреса - 8-мь проводов(разряда), есть шина данных 4 провода (разряда), есть шина управления(системная шина) 2 повода. 00 на ней - чтение, 10 - подготовка к программированию, запись разряда - 11. подобнее в справочнике, что-то мог забыть.
АЛУ - по интересней будет, на одну шину подаём данные, на другую - код операции. например:

двоичный формат шеснадцатиричный операция
0000 0 из ячейки памяти в регистр аккумулятор
0001 1 в ячейку памяти из регистра аккумулятора
0010 2 сложение ячейки памяти и содержимое регистра аккумулятора
0011 3 вычитание из ячейки памяти и содержимое регистра аккумулятора, результат в регистре аккумуляторе
0100 4 логическое И между ячейкой памяти и регистром аккумулятором результат в регистре аккумуляторе
0101 5 логическое ИЛИ между ячейкой памяти и регистром аккумулятором результат в регистреаккумуляторе
0110 6 логическое не между ячейкой памяти и регистром аккумулятором результат в регистре аккумуляторе

ну и так далее.

теесть, ресет, процессор выкиддывает на шину адресса 0000 читает первую команду, например 0000, переходит к воторой команде на пример 0100, и так далеее.

если Вам сложно понять это но начните с счетчиков, и регистров, если и с этим не разберетесь то с триггеров, ну а если и с этим не разберетесь то с логических элементов типа И, НЕ, ИЛИ ,2И-НЕ.... В общем К155ЛА3 Вам в помощь
Последний раз редактировалось ФД263 01 Вт апр 28, 2015 20:15:28, всего редактировалось 1 раз.
Друзья мои.... Режте карточки вдоль магнитной полосы!
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Как разработчик отмечу, что это выглядит диким извращением. Аргументация ущербности практики помещения всего в одно общее линейное адресное пространство не выглядит для меня убедительной...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

Paguo-86PK писал(а):Я зашёл в тупик..На каком варианте остановиться конкретно - не знаю....
Варианты в студию, и поподробней.

ЗЫ. Никого не слушай. Спаять десяток микросхем может любой дурак. Пусть попробуют тот же РК с нуля изобрести...
Processor not found. Loaded software emulation ......
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):
Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Как разработчик отмечу, что это выглядит диким извращением. Аргументация ущербности практики помещения всего в одно общее линейное адресное пространство не выглядит для меня убедительной...
vs
a_klyuev писал(а):
Paguo-86PK писал(а):Я зашёл в тупик..На каком варианте остановиться конкретно - не знаю....
Варианты в студию, и поподробней.

ЗЫ. Никого не слушай. Спаять десяток микросхем может любой дурак. Пусть попробуют тот же РК с нуля изобрести...
В 90-е у меня появилась идея собственного языка программирования из-за того, что под рукой не было ассемблера и записи в тетрадки я стал вести не в виде мнемоник, а формулами (mov a,d + ani 127 + add e => a=d&127+e), т.к. в машинный код я транслировал всё вручную и не было разницы, кодировать код мнемониками по одной на строку или сжимать до обычных формул.
Я "проболел" идеей практически безнадёжными поисками помощи в реализации до 2004, когда друг подталкнул меня самому написать транслятор с языка в ассемблер. За 9 часов справился в Паскале и кривой транслятор делал почти 75% от задуманной идеи. А через годы написал версии с приближением до 90%. Пока один человек не заметил, что я страдаю дурью и изобретаю велосипед с именем "Sphinx C--". Всё встало на места...

Вы сейчас разрываете меня пополам так же: С одной стороны я понимаю, что всё это - полнейщий идиотизм. С другой стороны, чем тупо спать или зомбироваться телевидением - меня затягивает любопытство, а какие возможности были упущены 40 лет назад и какие подводные камни таятся в таком инженеринге?

P.S.: Идея пока в "паузе", т.к. наконец-то к двум CRT-мониторам купил себе HP Pavilion 23xi, однако отзывы пугают, т.к. к соему GA-F2A85X-UP4 купил здесь брат в поездке по моей просьбе. (конкретно, модель не выбирал я. просто сказал о обязательном наличии DVI/HDMI, т.к. VGA-CRT никуда не денется. У меня сейчас три: 2 ЭЛТ + Новый ЖК, ибо так легче работать со схемами, графиками и 3D. В частности, эмулятор своего процессора редактирую на одном ЭЛТ, а Chrome эмулирует его на другом. Опыт пользования с ЖК за жизнь - уже 12 часов :))) Не верите?)
Итог дня: Глаза болят даже писать этот пост. Драйверы ставил, настраивал. И экран странный: При разрешении 1920x1080 наблюдаю на экране приличный бордюр в 1-3см. Хотя при разрешении пониже - он исчезает... Глюки драйверов? (снизил сейчас до 1776x1000 - бордюр сократился. Понизил до 1680x1050 - исчез.)
К тому же, как на зло, накрылся БП DVR-камеры через час после подключения монитора. Без отдыха пахал 2 года и тупо взял и погас индикатор питания. Сработала тревога...
Так что, пока глаза привыкнут, пока камеру отлажу - отдохну от собственного процессорного бреда.
Извиняйте... :dont_know:
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

Вы сейчас разрываете меня пополам так же: С одной стороны я понимаю, что всё это - полнейщий идиотизм.
Не-не, поймите меня верно: разрабатывать свой процессор - это круто. Я вообще не против этого, более того, за. Если бы я знал VHDL/Verilog/etc, наверное, тоже попробовал бы.

Для меня извращением выглядит конкретно это архитектурное решение. Я не понимаю, почему не сделать все в едином огромном адресном пространстве. Даже 32 бита это уже очень много адресов (для микроконтроллера), чтобы не было недостатка в них, а если это десктопный процессор - сделайте шестидесятичетырехбитную шину и забудьте про то, что адреса когда-нибудь кончатся. Но зачем такое извращение через стек?
Спаять десяток микросхем может любой дурак.
Рискуя быть резким, на правах холивара, отмечу, что паять десяток микросхем сегодня только дурак и будет. Зачем паять десяток, когда можно поставить одну (если процессор кастомный, то FPGA)? :)))
И экран странный: При разрешении 1920x1080 наблюдаю на экране приличный бордюр в 1-3см. Хотя при разрешении пониже - он исчезает... Глюки драйверов? (снизил сейчас до 1776x1000 - бордюр сократился. Понизил до 1680x1050 - исчез.)
Смахивает на глюки совместной работы нескольких мониторов. Я бы советовал копать в сторону совмещения соотношений сторон, разрешений и прочих параметров.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

YS писал(а):... Зачем паять десяток, когда можно поставить одну...
Совершенно верно.
10 микросхем - я имел в виду набор 86РК.
Paguo-86PK писал(а):...С другой стороны, чем тупо спать или зомбироваться телевидением - меня затягивает любопытство...
И это правильно. В наш век высоких технологий крайне сложно изобрести что-то новое. Дык чтож теперь - водку пьянствовать?
Processor not found. Loaded software emulation ......
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение m.ix »

Изображение
Лечу лечить WWWашу покалеченную технику.
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):Не-не, поймите меня верно: разрабатывать свой процессор - это круто. Я вообще не против этого, более того, за. Если бы я знал VHDL/Verilog/etc, наверное, тоже попробовал бы.

Для меня извращением выглядит конкретно это архитектурное решение. Я не понимаю, почему не сделать все в едином огромном адресном пространстве. Даже 32 бита это уже очень много адресов (для микроконтроллера), чтобы не было недостатка в них, а если это десктопный процессор - сделайте шестидесятичетырехбитную шину и забудьте про то, что адреса когда-нибудь кончатся. Но зачем такое извращение через стек?
Может не только я один так думаю. Но, мне кажется, даже инженеры имели смелость вести себя как дети в смысле непонимания сложных технологий.
В журнале Радио за 90-й год я читал статью про перспективность RISC-технологий. Там была цитата, где автор направления высказавылся, что если у процессора слишком сложная система команд, то он её просто не понимает...

Во-первых, выделять 8-битному процессору 64-битный адрес - как чистить накипь унитаза управляемым ядерным взрывом.
Во-вторых, разрабатывать самопальный девайс и писать драйверы под него - тоже извращение глазами бытового пользователя. У меня идеология проста: 99,9% всех команд - прикладные (подсчитайте пожалуйста соотношение привелегированных команд к прикладным у x86). В РК соотношении память/устройства примерно 50% (32кб ОЗУ и 32кб УВВ+ПДП). Т.н. "извращение через стек" - 3 к объёму 65533 (0002h..FFFEh) = 0.00458%. Как сказал, идею подкинул "костыль" из x86: В режиме виртуализации 8086-режима память расширена на 64кб (000000h..10FFFFh). Я и решил ввести "запорожье", реализовал это.
В-третьих, сторонники RISC говорят, лучше одну сложную инструкцию разбить на кучку простейщих. Я так и поступил: разбил команд in/out на десяток обыкновенных. В этом смысле, Вы меня не переубедите, что мол я ничего не понял, не так всё понял, криво реализовал. В x86 операции in/out занимают по десятку тактов (до 14, если не ошибаюсь). У меня порты через стек затрачивают тоже уйму команд и тактов. Просто, незачем приложению копаться в портах. А если "приспичило", то никаких привелегированных команд не предусмотренно. Просто трюк с обнулением указателя стека. Включена аппаратная защита от обнуления стека? Тогда и никаких портов.

Я не спорю с Вами. Может быть да, сплошное извращение.
В 1997 у меня родилась идея операционной системы (хотя я пересел за DOS 3.11 в 1998), которую можно было бы реализовать сейчас в Linux и я нашёл однодумцев, кто меня с ходу понял. В такой OS нету никаких исключительных ситуаций. Приложению даётся 8192 страницы по 4Гб каждая. Но, все 4Гб свёрнуты зеркально в 4кб изначально, пока приложение не "заставит" операционную среду развернуть...
Вот примерно в этом направлении я и двигаюсь. Если стек лежит на границе "мироздания", есть возможность переключить "реальность"(выбрать страницы памяти, например)
(я писал вышел про порты, где чем глубже порт, тем он важнее. ОС может установить предел важности. я описывл логику выше)
YS писал(а):Смахивает на глюки совместной работы нескольких мониторов. Я бы советовал копать в сторону совмещения соотношений сторон, разрешений и прочих параметров.
Имею опыт подключения к Pentium-I 90mHz двух ISA-шных видях. Тогда это было нечто. Указатель мыши мерцал и видео воспроизводилось с мерцанием...
Что-то не верится, что сейчас такая же чепуха. Хотя, говорю же, с ЖК работаю уже 23 часа за жизнь.
Может, Вы и правы...
Последний раз редактировалось Paguo-86PK Ср апр 29, 2015 14:03:39, всего редактировалось 1 раз.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

Во-первых, выделять 8-битному процессору 64-битный адрес - как чистить накипь унитаза управляемым ядерным взрывом.
Э-э-э, а что мешает сделать шестидесятичетырехбитный процессор? Наверное, я чего-то не понимаю. Вы делаете микроконтроллер или процессор для десктопа? Если микроконтроллер, так ему и 16 бит адреса подо все хватит. А если десктоп, то там 64 бита (по всем шинам) - вполне здравое решение.
Во-вторых, разрабатывать самопальный девайс и писать драйверы под него - тоже извращение глазами бытового пользователя.
Не, я смотрю с точки зрения разработчика. Вот например в ARM - надо мне записать что-то в порт или спецрегистр, ну я и пишу

Код: Выделить всё

*((uint8_t *)PORT_ADDR)=value;
а в случае стековых забав придется прибегать к помощи встроенных функций компилятора, что не есть удобно. Я вообще не понял, как в вашем случае мне удобно и быстро настроить, например, таймер. Если в обычном случае достаточно хедера с определениями типа

Код: Выделить всё

#define SPECIAL_REGISTER       (*((uint16_t *)0x00100500))
и далее

Код: Выделить всё

...
SPECIAL_REGISTER=9000;
...
то для Вашего чипа придется, наверное, писать спецфункцию и макросы.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение hybroid »

Я вообще слабо понимаю, как это в стек завернули. Не, ну можно, а пользоваться как? Если мне нужен доступ прям сейчас к тому, что в середине стека лежит, то мне его весь вглубь доставать? Это маразм. Или я не так понял..
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

Был такой недоязык программирования, Форт назывался.
Дык он весь был построен на 4-х командах(если память не изменяет) манипуляций со стеком.
Processor not found. Loaded software emulation ......
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):Э-э-э, а что мешает сделать шестидесятичетырехбитный процессор? Наверное, я чего-то не понимаю. Вы делаете микроконтроллер или процессор для десктопа? Если микроконтроллер, так ему и 16 бит адреса подо все хватит. А если десктоп, то там 64 бита (по всем шинам) - вполне здравое решение.
Опыта работы с 64-битами не имею. Нет, имеется и 64-битный комп, и Visual Studio. Просто, ментально охватить 64 бита я пока не могу.
Как справиться с RAX'анами и т.д. Всё равно, что посадить меня за руль Боинга, чтобы слетать в булочную...
Тем более, x80 - мой намёк на линейку семейства процессоров (180, 280, 380, 480), и изначально - 8 бит (в 280 - 16 бит, в 380 - 32 бита, а 480 - 64 бита).
Тем самым, у интел i8080 и i8086 получились совсем несовместимыми. Я же пытаюсь с нуля "изобрести" 80-ый с перспективой роста... (как 32-битный Z80, но там куча "костылей" и рудиментов)
YS писал(а): а в случае стековых забав придется прибегать к помощи встроенных функций компилятора, что не есть удобно. Я вообще не понял, как в вашем случае мне удобно и быстро настроить, например, таймер. Если в обычном случае достаточно хедера с определениями типа

#define SPECIAL_REGISTER (*((uint16_t *)0x00100500))

и далее

SPECIAL_REGISTER=9000;

то для Вашего чипа придется, наверное, писать спецфункцию и макросы.
hybroid писал(а):Я вообще слабо понимаю, как это в стек завернули. Не, ну можно, а пользоваться как? Если мне нужен доступ прям сейчас к тому, что в середине стека лежит, то мне его весь вглубь доставать? Это маразм. Или я не так понял..
Объясню отрывком кода.
Если надо настроить таймер (величину 9000 сократим до 90 и у вас он в ячейке 0x00100500 - запишу за идентификатор 0x15. Ok?), поступаем примерно так:

Код: Выделить всё

   B4 5A|MOV  AL,90        ; Величина к настройке таймера
11 1E   |XOR  BH,BH        ; Обнуляем старщую часть BX
   15   |MOV  BL,BH        ; Обнуляется и младшая от BX
   DB   |DEC  BX           ; После декремента BX == 0FFFFh
44 55   |XCHG SP,BX        ; "Сбиваем" указатель стека
   BE 03|JE   $+5          ; Флаг ZF установился? Ошибка
44 A4 16|MOV  [SP+0x16],AL ; SP+16h -> 0FFFFh+16h -> 10015h
44 55   |XCHG SP,BX        ; Восстанавливаем стек
Поясню: Когда SP==0ffffh и к нему прибавляем ещё 16h, будет переполнение 16-разрядного адреса, где виртуальный флаг переноса станет 17-м битом адреса как вывод Memory/IO, а на шину адреса выдастся 0015h. Технически - всё элементарно. Не так ли?

А вот причём здесь XCHG и JZ? Обычно, XCHG флаги не меняет. Но, в критическом случае с SP прикладной код может не иметь прав копаться в портах. Если в x86 in/out сгенерируют исключение, то у меня всё проще: Флаг ZF - читайте, как хотите в этом контексте (Например, Zапретная Fича) и JE - Jump if Error...

Итого, 15 байтов кода. Слишком много?
(16-битный вариант)
Спойлер

Код: Выделить всё

   B4 28 23|MOV  AL,9000      ; Величина к настройке таймера
11 1E      |XOR  BH,BH        ; Обнуляем старщую часть BX
   15      |MOV  BL,BH        ; Обнуляется и младшая от BX
   DB      |DEC  BX           ; После декремента BX == 0FFFFFFFFh
44 55      |XCHG SP,BX        ; "Сбиваем" указатель стека
   BE 04 00|JE   $+6          ; Флаг ZF установился? Ошибка
44 A4 16 00|MOV  [SP+0x16],AL ; SP+16h -> 0FFFFFFFFh+16h -> 100000015h
44 55      |XCHG SP,BX        ; Восстанавливаем стек
Я понял, что Вы упрекаете меня в неопределённости. То ли мой проц - десктопный, то ли - микроконтроллер...
Сейчас и РАДИО-86РК, и ZX-Spectrum обзывают "большими калькуляторами"...
А для меня они - компьютеры! И их процессоры - десктопные (в рамках той эпохи).

Так что, что я здесь описываю, для меня - процессор под возможный десктоп.
Как у товарища.
СпойлерИзображение
А для остальных - пусть будет микроконтроллер.

ОК - спорить не хочу...
Последний раз редактировалось Paguo-86PK Ср апр 29, 2015 14:24:36, всего редактировалось 3 раза.
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

Paguo-86PК, Вы пожалуйста не обижайтесь на нас.
Мы здесь народ такой (особенно в МЯЯЯУ!), что хлебом не корми - дай обострать ближнего.
А увлечение у Вас весьма своеобразное, обычно народ лепит свои поделия на чем-то готовом.
Однако в той же области радиотехники, шагнувшей далеко вперед, если разобраться, радиолюбители так же топчутся на уровне 70-х, 80-х годов, правда на более современной элементной базе.
Так что Ваше изобретение так же имеет право на существование.
Processor not found. Loaded software emulation ......
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

Объясню отрывком кода.
Э-э-э, ну это на асме. А если я на Си пишу, делать ассемблерную вставку? Или подключать процедуру, написанную на ассемблере?

И до меня все равно не дошло, чем это удобнее. Кроме того, что тактов много (это относительный минус), так еще и непонятно (это хуже всего).

Как по мне, красивее всего спроектировать систему команд так, чтобы запись в регистры, ОЗУ и спецрегистры не отличалась (как у MSP430/PDP-11, например). Это позволяет не усложнять компилятор и способствует портируемости программ.

Поймите меня правильно, я смотрю с позиций разработчика, человека, который, может быть, будет под Вашу платформу писать программы. Вот представьте - мне понравился Ваш процессор, я склоняюсь к тому, чтобы выбрать его для своей разработки. Начинаю читать документацию на тему того, как бы мне настроить периферию, и вижу такое. Охреневаю и беру чип конкурентов. Грустно же. Ну либо Вам надо делать слой HAL на том же Си, что-то типа CMSIS.
Технически - всё элементарно. Не так ли?
Технически оно может и элементарно, но интуитивно совершенно непонятно. Кстати, прежде чем сбивать указатель стека, его, наверное, нехудо бы сохранить. :idea:
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

a_klyuev писал(а):Paguo-86PК, Вы пожалуйста не обижайтесь на нас.
Мы здесь народ такой (особенно в МЯЯЯУ!), что хлебом не корми - дай обострать ближнего.
А увлечение у Вас весьма своеобразное, обычно народ лепит свои поделия на чем-то готовом.
Однако в той же области радиотехники, шагнувшей далеко вперед, если разобраться, радиолюбители так же топчутся на уровне 70-х, 80-х годов, правда на более современной элементной базе.
Так что Ваше изобретение так же имеет право на существование.
Обижаться? Шутите?
За 12 лет онлайн всего навидался и натерпелся.
Ну, все вы в частности правы.

Во-первых, занимаюсь бесполезным делом.
Во-вторых, копаюсь в костях давно "усопших" технологий.
В-третьих, решения мои слишком эзотерические.

Ну, а в своё оправдание: Повторю, мой проц - RISC, где R - не reduced, а rebused. Ребусный проц.
Ребусы не все же понимают с ходу.... От того и куча критики. (почему порты с "запятыми" и стек "выглядывает из-под ковра"...
YS писал(а):Э-э-э, ну это на асме. А если я на Си пишу, делать ассемблерную вставку? Или подключать процедуру, написанную на ассемблере?

И до меня все равно не дошло, чем это удобнее. Кроме того, что тактов много (это относительный минус), так еще и непонятно (это хуже всего).

Как по мне, красивее всего спроектировать систему команд так, чтобы запись в регистры, ОЗУ и спецрегистры не отличалась (как у MSP430/PDP-11, например). Это позволяет не усложнять компилятор и способствует портируемости программ.

Поймите меня правильно, я смотрю с позиций разработчика, человека, который, может быть, будет под Вашу платформу писать программы. Вот представьте - мне понравился Ваш процессор, я склоняюсь к тому, чтобы выбрать его для своей разработки. Начинаю читать документацию на тему того, как бы мне настроить периферию, и вижу такое. Охреневаю и беру чип конкурентов. Грустно же. Ну либо Вам надо делать слой HAL на том же Си, что-то типа CMSIS.
1. Кто говорил про удобство? Я об удобстве программирования портов не заикался. Напротив, порты - не трогай (если пишешь Тетрис или Ксоникс).
2. Если берётесь писать драйверы, начинайте с драйверов под данный проц (доступ к портам или системным регистрам)
3. В "Специалисте" при чтении с дискет использовался вывод HOLD(WAIT) при чтении порта головки. Удобно - да. Извращение - да. Но, работало.
4. На Ваш возможный вопрос, сколько привелегированных команд имеет проц, отвечу - НОЛЬ. Все команды - используйте где хотите и как хотите. Пока не покидаете рамок прикладного уровня.
:)))
YS писал(а):Технически оно может и элементарно, но интуитивно совершенно непонятно. Кстати, прежде чем сбивать указатель стека, его, наверное, нехудо бы сохранить. :idea:
Вы шутите? 44 55 - XCHG SP,BX --> обмен между bx и sp == стек сохраняется в bx до следующего xchg.
На счёт интуитивности - огорчили. Ведь я разрабатывал какрас проц с интуитивно ясной системой команд (хотя, на прикладном уровне, быть может, интуиция в помощь. а на системном - кыргыра и точка)
Ответить

Вернуться в «МЯЯЯУ!»