Внутреннее устройство МК. Сделать свой собственный МК
Re: Внутреннее устройство МК. Сделать свой собственный МК
Наткнулся на интересную информацию... Оказывается, самые популярные процессоры для Интель разрабатывали в Израиле?! http://itbusinessweek.com/israel-67/ 
- Реклама
Re: Внутреннее устройство МК. Сделать свой собственный МК
А индусы пишут код для фин. системы Microsoft, которую я обслуживаю - глобализация 
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
- a_klyuev
- Друг Кота
- Сообщения: 3085
- Зарегистрирован: Вт дек 25, 2012 14:51:33
- Откуда: Санкт-Петербург
Re: Внутреннее устройство МК. Сделать свой собственный МК
Дык создатели одноименного компа в этом плане ващще не парились - просто прицепляли порты в адресном пространстве памяти и все.Paguo-86PK писал(а):...нашёл способ организации портов ввода-вывода без ввода специальных команд. Просто взять и все попытки доступа к ячейкам памяти за пределами 64кб обрабатывать за порты....
"Вот тут-то ми их и попгавим..."(с)Paguo-86PK писал(а):...скажите: С бодуна ли в Intel коду 00 в x86 назначили ADD r/m,r8???![]()
Вот я "трезво" пытаюсь расставить все команды стройно по полочкам...
Processor not found. Loaded software emulation ......
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Re: Внутреннее устройство МК. Сделать свой собственный МК
И выделяли под всё по 8кб драгоценнейщей памяти...a_klyuev писал(а):Дык создатели одноименного компа в этом плане ващще не парились - просто прицепляли порты в адресном пространстве памяти и все.Paguo-86PK писал(а):...нашёл способ организации портов ввода-вывода без ввода специальных команд. Просто взять и все попытки доступа к ячейкам памяти за пределами 64кб обрабатывать за порты....
Я пытаюсь "замаскировать" все "неприкладные" операции.
Вот, скажем, 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 лет никак чётко не могу сделать сам план, так как хочется поиграть в "идеальный мир" без костылей и ухабов. И лишь, буквально, на днях, додумался организовать всё так, как описал выше.
Всё аккуратно, без излишек.
В моём эмуляторе можно заметить, что таблица команд иногда меняется.
Это зависит от секунды, когда страница загружена. Секунда индексирует префикс. Если каждые 5 секунд в браузере обновлять страницу, можно увидеть все команды под все 8 префиксов.
И заметить, сколько там ещё резервных кодов...
И все - доступны прикладному ПО... Ну, чем не "домашняя" обстановка?
P.S.: Кстати, помните в Бейсике РК86 как производилось чтение кода клавиши? Через загадочное usr(-2045). Если бы автор "Монитора" при написании подумал и о Бейсике, он бы перенёс API системных jmp-вызовов из F803..F835 в сегмент FFCD..FFFF. В Бейсике было менее загадочное usr(-51)...
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Внутреннее устройство МК. Сделать свой собственный МК
Я зашёл в тупик... Может, кто-нибудь поможет мне советом, как выбраться?
Имеется
Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Если 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). Как я и хотел в концепции...
Имеется
Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Если 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: Внутреннее устройство МК. Сделать свой собственный МК
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 Вам в помощь
АЛУ - по интересней будет, на одну шину подаём данные, на другую - код операции. например:
двоичный формат шеснадцатиричный операция
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 раз.
Друзья мои.... Режте карточки вдоль магнитной полосы!
Re: Внутреннее устройство МК. Сделать свой собственный МК
Как разработчик отмечу, что это выглядит диким извращением. Аргументация ущербности практики помещения всего в одно общее линейное адресное пространство не выглядит для меня убедительной...Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- a_klyuev
- Друг Кота
- Сообщения: 3085
- Зарегистрирован: Вт дек 25, 2012 14:51:33
- Откуда: Санкт-Петербург
Re: Внутреннее устройство МК. Сделать свой собственный МК
Варианты в студию, и поподробней.Paguo-86PK писал(а):Я зашёл в тупик..На каком варианте остановиться конкретно - не знаю....
ЗЫ. Никого не слушай. Спаять десяток микросхем может любой дурак. Пусть попробуют тот же РК с нуля изобрести...
Processor not found. Loaded software emulation ......
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Re: Внутреннее устройство МК. Сделать свой собственный МК
vsYS писал(а):Как разработчик отмечу, что это выглядит диким извращением. Аргументация ущербности практики помещения всего в одно общее линейное адресное пространство не выглядит для меня убедительной...Как я уже говорил, следуя собственной идеологии построения архитектуры процессора, я организовал доступ к портам ввода-вывода через указатель стека.
В 90-е у меня появилась идея собственного языка программирования из-за того, что под рукой не было ассемблера и записи в тетрадки я стал вести не в виде мнемоник, а формулами (mov a,d + ani 127 + add e => a=d&127+e), т.к. в машинный код я транслировал всё вручную и не было разницы, кодировать код мнемониками по одной на строку или сжимать до обычных формул.a_klyuev писал(а):Варианты в студию, и поподробней.Paguo-86PK писал(а):Я зашёл в тупик..На каком варианте остановиться конкретно - не знаю....
ЗЫ. Никого не слушай. Спаять десяток микросхем может любой дурак. Пусть попробуют тот же РК с нуля изобрести...
Я "проболел" идеей практически безнадёжными поисками помощи в реализации до 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 года и тупо взял и погас индикатор питания. Сработала тревога...
Так что, пока глаза привыкнут, пока камеру отлажу - отдохну от собственного процессорного бреда.
Извиняйте...
Re: Внутреннее устройство МК. Сделать свой собственный МК
Не-не, поймите меня верно: разрабатывать свой процессор - это круто. Я вообще не против этого, более того, за. Если бы я знал VHDL/Verilog/etc, наверное, тоже попробовал бы.Вы сейчас разрываете меня пополам так же: С одной стороны я понимаю, что всё это - полнейщий идиотизм.
Для меня извращением выглядит конкретно это архитектурное решение. Я не понимаю, почему не сделать все в едином огромном адресном пространстве. Даже 32 бита это уже очень много адресов (для микроконтроллера), чтобы не было недостатка в них, а если это десктопный процессор - сделайте шестидесятичетырехбитную шину и забудьте про то, что адреса когда-нибудь кончатся. Но зачем такое извращение через стек?
Рискуя быть резким, на правах холивара, отмечу, что паять десяток микросхем сегодня только дурак и будет. Зачем паять десяток, когда можно поставить одну (если процессор кастомный, то FPGA)?Спаять десяток микросхем может любой дурак.
Смахивает на глюки совместной работы нескольких мониторов. Я бы советовал копать в сторону совмещения соотношений сторон, разрешений и прочих параметров.И экран странный: При разрешении 1920x1080 наблюдаю на экране приличный бордюр в 1-3см. Хотя при разрешении пониже - он исчезает... Глюки драйверов? (снизил сейчас до 1776x1000 - бордюр сократился. Понизил до 1680x1050 - исчез.)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- a_klyuev
- Друг Кота
- Сообщения: 3085
- Зарегистрирован: Вт дек 25, 2012 14:51:33
- Откуда: Санкт-Петербург
Re: Внутреннее устройство МК. Сделать свой собственный МК
Совершенно верно.YS писал(а):... Зачем паять десяток, когда можно поставить одну...
10 микросхем - я имел в виду набор 86РК.
И это правильно. В наш век высоких технологий крайне сложно изобрести что-то новое. Дык чтож теперь - водку пьянствовать?Paguo-86PK писал(а):...С другой стороны, чем тупо спать или зомбироваться телевидением - меня затягивает любопытство...
Processor not found. Loaded software emulation ......
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Re: Внутреннее устройство МК. Сделать свой собственный МК
Может не только я один так думаю. Но, мне кажется, даже инженеры имели смелость вести себя как дети в смысле непонимания сложных технологий.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кб изначально, пока приложение не "заставит" операционную среду развернуть...
Вот примерно в этом направлении я и двигаюсь. Если стек лежит на границе "мироздания", есть возможность переключить "реальность"(выбрать страницы памяти, например)
(я писал вышел про порты, где чем глубже порт, тем он важнее. ОС может установить предел важности. я описывл логику выше)
Имею опыт подключения к Pentium-I 90mHz двух ISA-шных видях. Тогда это было нечто. Указатель мыши мерцал и видео воспроизводилось с мерцанием...YS писал(а):Смахивает на глюки совместной работы нескольких мониторов. Я бы советовал копать в сторону совмещения соотношений сторон, разрешений и прочих параметров.
Что-то не верится, что сейчас такая же чепуха. Хотя, говорю же, с ЖК работаю уже 23 часа за жизнь.
Может, Вы и правы...
Последний раз редактировалось Paguo-86PK Ср апр 29, 2015 14:03:39, всего редактировалось 1 раз.
Re: Внутреннее устройство МК. Сделать свой собственный МК
Э-э-э, а что мешает сделать шестидесятичетырехбитный процессор? Наверное, я чего-то не понимаю. Вы делаете микроконтроллер или процессор для десктопа? Если микроконтроллер, так ему и 16 бит адреса подо все хватит. А если десктоп, то там 64 бита (по всем шинам) - вполне здравое решение.Во-первых, выделять 8-битному процессору 64-битный адрес - как чистить накипь унитаза управляемым ядерным взрывом.
Не, я смотрю с точки зрения разработчика. Вот например в ARM - надо мне записать что-то в порт или спецрегистр, ну я и пишуВо-вторых, разрабатывать самопальный девайс и писать драйверы под него - тоже извращение глазами бытового пользователя.
Код: Выделить всё
*((uint8_t *)PORT_ADDR)=value;
Код: Выделить всё
#define SPECIAL_REGISTER (*((uint16_t *)0x00100500))
Код: Выделить всё
...
SPECIAL_REGISTER=9000;
...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Внутреннее устройство МК. Сделать свой собственный МК
Я вообще слабо понимаю, как это в стек завернули. Не, ну можно, а пользоваться как? Если мне нужен доступ прям сейчас к тому, что в середине стека лежит, то мне его весь вглубь доставать? Это маразм. Или я не так понял..
- a_klyuev
- Друг Кота
- Сообщения: 3085
- Зарегистрирован: Вт дек 25, 2012 14:51:33
- Откуда: Санкт-Петербург
Re: Внутреннее устройство МК. Сделать свой собственный МК
Был такой недоязык программирования, Форт назывался.
Дык он весь был построен на 4-х командах(если память не изменяет) манипуляций со стеком.
Дык он весь был построен на 4-х командах(если память не изменяет) манипуляций со стеком.
Processor not found. Loaded software emulation ......
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Re: Внутреннее устройство МК. Сделать свой собственный МК
Опыта работы с 64-битами не имею. Нет, имеется и 64-битный комп, и Visual Studio. Просто, ментально охватить 64 бита я пока не могу.YS писал(а):Э-э-э, а что мешает сделать шестидесятичетырехбитный процессор? Наверное, я чего-то не понимаю. Вы делаете микроконтроллер или процессор для десктопа? Если микроконтроллер, так ему и 16 бит адреса подо все хватит. А если десктоп, то там 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 ; Восстанавливаем стек
А вот причём здесь 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: Внутреннее устройство МК. Сделать свой собственный МК
Paguo-86PК, Вы пожалуйста не обижайтесь на нас.
Мы здесь народ такой (особенно в МЯЯЯУ!), что хлебом не корми - дай обострать ближнего.
А увлечение у Вас весьма своеобразное, обычно народ лепит свои поделия на чем-то готовом.
Однако в той же области радиотехники, шагнувшей далеко вперед, если разобраться, радиолюбители так же топчутся на уровне 70-х, 80-х годов, правда на более современной элементной базе.
Так что Ваше изобретение так же имеет право на существование.
Мы здесь народ такой (особенно в МЯЯЯУ!), что хлебом не корми - дай обострать ближнего.
А увлечение у Вас весьма своеобразное, обычно народ лепит свои поделия на чем-то готовом.
Однако в той же области радиотехники, шагнувшей далеко вперед, если разобраться, радиолюбители так же топчутся на уровне 70-х, 80-х годов, правда на более современной элементной базе.
Так что Ваше изобретение так же имеет право на существование.
Processor not found. Loaded software emulation ......
Re: Внутреннее устройство МК. Сделать свой собственный МК
Э-э-э, ну это на асме. А если я на Си пишу, делать ассемблерную вставку? Или подключать процедуру, написанную на ассемблере?Объясню отрывком кода.
И до меня все равно не дошло, чем это удобнее. Кроме того, что тактов много (это относительный минус), так еще и непонятно (это хуже всего).
Как по мне, красивее всего спроектировать систему команд так, чтобы запись в регистры, ОЗУ и спецрегистры не отличалась (как у MSP430/PDP-11, например). Это позволяет не усложнять компилятор и способствует портируемости программ.
Поймите меня правильно, я смотрю с позиций разработчика, человека, который, может быть, будет под Вашу платформу писать программы. Вот представьте - мне понравился Ваш процессор, я склоняюсь к тому, чтобы выбрать его для своей разработки. Начинаю читать документацию на тему того, как бы мне настроить периферию, и вижу такое. Охреневаю и беру чип конкурентов. Грустно же. Ну либо Вам надо делать слой HAL на том же Си, что-то типа CMSIS.
Технически оно может и элементарно, но интуитивно совершенно непонятно. Кстати, прежде чем сбивать указатель стека, его, наверное, нехудо бы сохранить.Технически - всё элементарно. Не так ли?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Paguo-86PK
- Опытный кот
- Сообщения: 811
- Зарегистрирован: Чт авг 19, 2010 23:49:19
- Откуда: Ташкент
- Контактная информация:
Re: Внутреннее устройство МК. Сделать свой собственный МК
Обижаться? Шутите?a_klyuev писал(а):Paguo-86PК, Вы пожалуйста не обижайтесь на нас.
Мы здесь народ такой (особенно в МЯЯЯУ!), что хлебом не корми - дай обострать ближнего.
А увлечение у Вас весьма своеобразное, обычно народ лепит свои поделия на чем-то готовом.
Однако в той же области радиотехники, шагнувшей далеко вперед, если разобраться, радиолюбители так же топчутся на уровне 70-х, 80-х годов, правда на более современной элементной базе.
Так что Ваше изобретение так же имеет право на существование.
За 12 лет онлайн всего навидался и натерпелся.
Ну, все вы в частности правы.
Во-первых, занимаюсь бесполезным делом.
Во-вторых, копаюсь в костях давно "усопших" технологий.
В-третьих, решения мои слишком эзотерические.
Ну, а в своё оправдание: Повторю, мой проц - RISC, где R - не reduced, а rebused. Ребусный проц.
Ребусы не все же понимают с ходу.... От того и куча критики. (почему порты с "запятыми" и стек "выглядывает из-под ковра"...
1. Кто говорил про удобство? Я об удобстве программирования портов не заикался. Напротив, порты - не трогай (если пишешь Тетрис или Ксоникс).YS писал(а):Э-э-э, ну это на асме. А если я на Си пишу, делать ассемблерную вставку? Или подключать процедуру, написанную на ассемблере?
И до меня все равно не дошло, чем это удобнее. Кроме того, что тактов много (это относительный минус), так еще и непонятно (это хуже всего).
Как по мне, красивее всего спроектировать систему команд так, чтобы запись в регистры, ОЗУ и спецрегистры не отличалась (как у MSP430/PDP-11, например). Это позволяет не усложнять компилятор и способствует портируемости программ.
Поймите меня правильно, я смотрю с позиций разработчика, человека, который, может быть, будет под Вашу платформу писать программы. Вот представьте - мне понравился Ваш процессор, я склоняюсь к тому, чтобы выбрать его для своей разработки. Начинаю читать документацию на тему того, как бы мне настроить периферию, и вижу такое. Охреневаю и беру чип конкурентов. Грустно же. Ну либо Вам надо делать слой HAL на том же Си, что-то типа CMSIS.
2. Если берётесь писать драйверы, начинайте с драйверов под данный проц (доступ к портам или системным регистрам)
3. В "Специалисте" при чтении с дискет использовался вывод HOLD(WAIT) при чтении порта головки. Удобно - да. Извращение - да. Но, работало.
4. На Ваш возможный вопрос, сколько привелегированных команд имеет проц, отвечу - НОЛЬ. Все команды - используйте где хотите и как хотите. Пока не покидаете рамок прикладного уровня.
Вы шутите? 44 55 - XCHG SP,BX --> обмен между bx и sp == стек сохраняется в bx до следующего xchg.YS писал(а):Технически оно может и элементарно, но интуитивно совершенно непонятно. Кстати, прежде чем сбивать указатель стека, его, наверное, нехудо бы сохранить.
На счёт интуитивности - огорчили. Ведь я разрабатывал какрас проц с интуитивно ясной системой команд (хотя, на прикладном уровне, быть может, интуиция в помощь. а на системном - кыргыра и точка)



