User Tag List

Страница 8 из 12 ПерваяПервая ... 456789101112 ПоследняяПоследняя
Показано с 71 по 80 из 180

Тема: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Lethargeek, до меня дошло как командами "условного" pdp32 выполнять код для "условного" pdp16. Делается три блока:
    1) "pdp16" в котором лежит код и данные эмулируемой системы.
    2) "pdp32" из которого осуществляется выборка кода pdp32
    3) "emu32" в котором будет жить "переводчик"
    Каждому слову(16бит) в блоке pdp16(или байту если команды могут начинаться с нечётных адресов) будет соответствовать слово(32бита) в блоке pdp32. Изначально слова в блоке pdp32 обнулены и попытка их выполнения вызывает исключение, по которому будет вызван переводчик из блока emu32. Переводчик смотрит какая команда pdp16 должна была быть выполнена, помещает её эквивалент в блок pdp32 и возвращается из исключения. Далее будет выполнен эквивалент требуемой команды, после чего будет предпринята попытка выполнения следующей.
    Для поддержки самомодифицирующегося кода при записи байта/слова в блок pdp16 соответствующее слово из блока pdp32 будет обнуляться, и если исполнение дойдёт до такой команды, то снова будет вызван переводчик. Или можно прицепить ко всем связанным ячейкам(слово pdp16 - слово pdp32) признак "был доступ"(еще одна область памяти), устанавливающийся при записи слова в блок pdp16 и сбрасываются при записи соответствующего слова в блок pdp32(переводчиком), ну а при выполнении исключение будет вызываться в зависимости от даннного признака.
    Если некоторые команды pdp16 не имеют простых эквивалентов среди команд pdp32, то на её место просто ставится вызов подпрограммы. Если ситуация совсем запущенная и мы хотим эмулировать что-то сильно непохожее на pdp32, то либо везде ставим вызовы подпрограмм или на каждый байт/слово просто выделяем больше(2,4,8) слов в блоке pdp32, чтобы в такой блок влезал эквивалент большинства эмулируемых команд.
    При наличии нормального механизма виртуальной памяти для блока pdp32 нужно будет зарезервировать адреса, а выделять память только для тех страниц, код из которых реально исполняется. Ну а когда памяти становится маловато, страницы блока pdp16 можно выгружать, а перевод из блока pdp32 просто грохнуть, поскольку потом мы его легко восстановим.

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

  3. #2

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    до меня дошло как командами "условного" pdp32 выполнять код для "условного" pdp16.
    Но 16-разрядный код может быть вызван из 32-разрядного для каких-то действий в интересах 32-разрядного кода. Когда взаимодействие 32-разрядного и 16-разрядного кода идёт только через регистры - всё достаточно просто. А как должен выглядеть (например) вызов 16-разрядной функции STRLEN, получающей в R0 адрес строки и возвращающий её длину, если строка расположена в произвольном месте 32-разрядного адресного пространства.

    В случае виртуализации - перед вызовом 16-разрядного кода создаётся таблица виртуализации, через которую осуществляется мапинг 16-разрядных обращений в 32-разрядное адресное пространство и где помимо основного 16-разрядного сегмента, содержащего код 16-разрядной функции - можно также задать окна для внешнего чтения и внешней записи. В таком случае, если виртуализованный код осуществляет чтение за пределами диапазона адресов основного сегмента - проверяется попадание чтения в окно внешнего чтения и если попадание есть - обращение транслируется в основное 32-разрядное пространство через базу из таблицы виртуализации и смещение в окне обращения. За счёт такого подхода 16-разрядная функция STRLEN может определить длину строки, находящейся в любом месте 32-разрядного адресного пространства.

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

  4. #3

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Когда по условию задачи заранее известно, что код обращается к данным ( например - к строке байтов ) и известен размер обращения ( из кода команды ) - возможность обращения к тем же данным с тем же размером гарантирована.
    и ОТКУДА же это может без прокомментированного исходника быть известно?
    где ГАРАНТИЯ, что к одной и той же структуре в памяти нет обращений И по байтам, И по словам?
    где ГАРАНТИЯ, что содержимое структуры - 16-битные числа, а не опкоды (и не опкоды с числами вперемешку)?

    Цитата Сообщение от Patron Посмотреть сообщение
    Точно так же - значит с таким же размером. Если 16-разрядный код обращается к байту, то и 32-разрядный обращается к байту, если 16-разрядный код обращается к 16-разрядному слову, то и 32-разрядный код обращается к 16-разрядному слову.
    а если 16-битным код обращался к 16-битным старым ОПКОДАМ (которые стали 32-битными) и как об этом компоновщик должен догадываться?
    а если хуже - один код из разных мест вызывается для обращения И к опкодам, И к 16-битным данным (см. мой пример с пересылкой)?

    Цитата Сообщение от Patron Посмотреть сообщение
    Модифицируемый код точно не поломается, если его не использовать. Приведите пример библиотечного модуля с самомодифицируемым кодом - вряд ли такие вообще есть.
    "вряд ли" не считается за ГАРАНТИЮ, а контрпримера и гипотетического достаточно

    Цитата Сообщение от Patron Посмотреть сообщение
    Под модифицируемым кодом имеется в виду код, изменяющий первое слово команды, а не второе или третье. Если запись идёт во второе или третье слово команды - такой "модифицируемый код" без проблем автоматически превращается в 32-разрядный.
    нет, имеется в виду перезапись произвольного куска в памяти, в который после может выполнение перейти

    Цитата Сообщение от Patron Посмотреть сообщение
    Байтовые обращения к данным не могут поломаться, потому что и 16-разрядная, и 32-разрядная архитектуры обращаются к 8-разрядным и 16-разрядным данным одинаково. Разница только в обращении к коду. У 16-разрядного кода обращение к коду 16-разрядное, а у 32-разрядного кода обращение к коду 32-разрядное.
    еще раз: КАК понять, что обращение было к коду? еще раз: где ГАРАНТИЯ, что команда обращается ТОЛЬКО к коду?

    - - - Добавлено - - -

    blackmirror, а вот это может и заработать, но не проще ли тогда уж выполнять pdp16 блок напрямую

    - - - Добавлено - - -

    пора тему переименовывать в "эмуляцию pdp-11 на каком-нибудь 32-битном процессоре"
    Прихожу без разрешения, сею смерть и разрушение...

  5. #4

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а если 16-битным код обращался к 16-битным старым ОПКОДАМ (которые стали 32-битными) и как об этом компоновщик должен догадываться?
    а если хуже - один код из разных мест вызывается для обращения И к опкодам, И к 16-битным данным?
    Просмотрите исходники всех библиотек и найдите хотя бы один реальный пример кода, который не может быть автоматически перекомпилирован из 16-разрядного в 32-разрядный. В теории такая ситуация возможна, но в возможность встретить её в реальной подпрограмме из реальной библиотеки поверить трудно.

  6. #5

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    373
    Поблагодарили
    310 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Patron, похоже, что вы говорите о реальном и существующем ПО, а

    Lethargeek, о абстрактном )

    Таким образом один из вас не видит возможности сбоя, а второй настаивает на абстрактной вероятности сбоя выполнения. Нужен универсальный описанный и разъяснённый метод который гарантирует защиту от сбоя,
    ведь будет обидно если аппаратура будет иметь дырку(?) на уровне процессора - это не допустимо в любом случае.
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  7. #6

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    пора тему переименовывать в "эмуляцию pdp-11 на каком-нибудь 32-битном процессоре"
    Вот фрагмент исходного кода реализации команд RTI / RTT в микропрограммном эмуляторе, известном как "процессор J11":

    Код:
    	.BIN
    	RTI-RTT:	; Break out RTI and RTT.
    	=10********0
    	PLA0	[^0 111 111, ^0 000 000 000 000 X10]
    		ARI.W	[SP],			; Relocate SP in current mode and increment by two.
    			ODD TRAP,		; Must be a word address.
    			LD MMR1			; Record change in MMR1.
    
    		RD.W	[PC]			; Load PC.  MMR2 still has PC if abort.
    	
    		JKM	[RTx_KERNEL]		; Jump around special processing
    	=0*1*****				; Force abort to ROM[040].
    		ARI.W	[SP],			; Relocate SP again and pop.
    			LD MMR1			; Again record the change for MMU.
    
    		RD.W	[RF] 			; Read new PS data
    	 	LBIC.B	[340,RF]		; Priority is cleared out
    	=0*1*****				; Force abort to ROM[040].
    		LLSW.B	[370,RE]		; Setup mask to save old modes <15:11>
    
    		LLD.B	[340,RE]		; Also save old priority information
    		AND.W	[RE,PS]			; Clear out all but <15:11> and <7:5>
    		BIS.W	[RF,PS],		; Build new PS information
    			NAF/RTx_CONVERGE	; Go and update control chip PS
    	RTx_KERNEL:
    		RD.W	[PS]			; Kernel mode directly copys input
    	RTx_CONVERGE:
    		OUTS	[PSW, PS],		; Update Control chip PS<7:4>, interrupt
    						;  priority and T-bit.

    Если J11, написанный на уродском ассемблере J11 - это процессор с архитектурой PDP-11, то эмулятор ДВК, написанный на C++ - ничем не хуже.

    Настоящие процессоры, не являющиеся внутри себя программными эмуляторами - встречались только в ранние годы PDP-11. Даже один из старых и известных процессоров PDP-11 -- LSI-11 - это программный эмулятор, в который можно (методом перетыкания ПЗУ) загрузить программу, реализующую любую систему команд.


    Если переписать исходный код J11 с ассемблера J11 на ассемблер Intel, но сохранить все сигналы и тайминги внешней шины Q-Bus неизменными - такой вариант процессора J11 останется "процессором с архитектурой PDP-11" или нет?

    Если ДА, то учитывая, что подключение Q-Bus к 32-разрядному процессору возможно только через адаптер - какая разница, что находится с другой стороны адаптера, если со стороны Q-Bus оно является "процессором с архитектурой PDP-11".

  8. #7

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    712
    Поблагодарили
    594 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    на уродском ассемблере J11
    Добро пожаловать в микропрограммирование. Примерно тоже самое, что делается в FPGA

    Цитата Сообщение от Patron Посмотреть сообщение
    Если переписать исходный код J11 с ассемблера J11 на ассемблер Intel, но сохранить все сигналы и тайминги внешней шины Q-Bus неизменными
    Удачи

  9. #8

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Добро пожаловать в микропрограммирование.
    Микропрограмма - это обычная программа, команды которой выполняются одна за другой.


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

    - - - Добавлено - - -

    Цитата Сообщение от Hunta Посмотреть сообщение
    Удачи
    Уже сделано.

    По ссылке - две потактово идентичных модели процессора 1801ВМ1, одна из которых сделана из HDL-исходника процессора, путём конвертации его в C++, а другая написана, как обычная эмулирующая программа.

    Можно запустить обе модели и убедиться в полной идентичности их работы с шиной Q-Bus с точностью до полутакта.

    Какая же из этих моделей имеет большее право называться "настоящим процессором с архитектурой PDP-11"..
    Последний раз редактировалось Patron; 19.09.2017 в 19:05.

  10. #9

    Регистрация
    18.02.2016
    Адрес
    г. Москва
    Сообщений
    632
    Спасибо Благодарностей отдано 
    36
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    43 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Даже один из старых и известных процессоров PDP-11 -- LSI-11 - это программный эмулятор, в который можно (методом перетыкания ПЗУ) загрузить программу, реализующую любую систему команд.
    LSI-11 программно-аппаратный эмулятор. Декодер команд там зашит в микросхему. Максимум что сможете - слегка "перемешать" систему команд

  11. #10

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    712
    Поблагодарили
    594 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уж скоро год как,
    А процессора всё нет...

    Ария Германна.

Страница 8 из 12 ПерваяПервая ... 456789101112 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Собрал комп полностью своими руками
    от scooby-do в разделе Зарубежные компьютеры
    Ответов: 15
    Последнее: 15.03.2025, 00:11
  2. Fuzebox - полностью открытая 8-битная игровая приставка
    от CityAceE в разделе Зарубежные компьютеры
    Ответов: 22
    Последнее: 09.03.2017, 15:35
  3. MSX и EPSON-совместимый принтер
    от ipkin в разделе MSX
    Ответов: 3
    Последнее: 01.12.2011, 19:23
  4. Ответов: 5
    Последнее: 20.06.2011, 03:18
  5. Куплю ZX совместимый компьютер.
    от billgilbert81 в разделе Барахолка (архив)
    Ответов: 19
    Последнее: 05.12.2008, 20:33

Ваши права

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