Сб янв 14, 2017 01:38:18
Сб янв 14, 2017 15:28:28
Paguo-86PK писал(а):Вaш процессор напоминает мой, который многие критикуют. Суть которого в том, что АЛУ в нём отсутствует, но он просто работает как маршрутизатор потоков данных между всеми внешними устройствами, как умный ПДП. Подключив к нему внешние FPU/ALU - получаем полноценное процессорное устройство.
Сб янв 14, 2017 18:18:59
DX168B писал(а):Ну так на сколько я знаю, АЛУ - это не весь процессор, а всего лишь один из исполнителей. Имеет, грубо говоря, две входные шины, одну выходную, шину номера операции и линии вывода некоторых флагов. Например, zero флага и carrier флага (флага переноса) Отвечает он за такие операции, как сложение, вычитание, умножение, деление, сравнение и логические операции (И, ИЛИ, НЕ, И-НЕ, LSL, LSR и т.д.) От того у него и такое название "Арифметико-логическое устройство", ибо его основная задача в процессоре - быть всего лишь управляемым по команде калькулятором.
В моем примере АЛУ является всего лишь одним из узлов.
SF|PF|CF|ZF
+--+--+--+--+
| 0| 1| ?| 1| Паритетный ноль: (SKIP N) Исполнительный узел проигнорирует N инструкций дешифратора
| 1| 0| ?| 1| Отрицательный ноль: (LOOP N) Запрещает инкрементацию счётчика команд и одна инструкция выполняется N раз
| 1| 1| 1| 1| Отрицательный паритетный ноль: (WAIT N) То же самое, что LOOP, но с проверкой флага CF (здесь - Continue Flag)
+--+--+--+--+
Сб янв 14, 2017 23:19:59
Ну вот это совершенно прямое и честное утверждение.Paguo-86PK писал(а):.. мои "прихоти" .. системы команд с её "красивостью" - ... просто незначительные доработки именно i8080 ...
Вс янв 15, 2017 02:03:58
Вс янв 15, 2017 10:51:00
Абсолютныe адреса CALL/JMP i8080 - два байта и выходят за рамки 8-битового процессора. Их я выбросил сразу и все команды работают только с байтами. Извращение i8080 - LXI SP,a16, так как стековый регистр загружается крайне-крайне редко. Этих инструкций у меня вообще нет с самого начала. Как и EI/DI/PCHL/IN/OUT, которые достигаются более длинными комбинациями нескольких команд.petrenko писал(а):Ну вот это совершенно прямое и честное утверждение.
Но зачем тогда было писать слово "архитектура" в названии темы ?
Чтоб форумчане обратили внимание ?
Мож попросите модераторов поправить на что-нибудь вроде "Косметическое "причёсывание" систем команд" ?
Ну или что-нибудь в таком стиле.
В любом случае плохого в Вашем досуговом занятии ничего нет, так что удачно Вам продолжать сие.
И - что то я видимо недостаточно внимательно читал все Ваши сообщения - Вы уж выкинули из системы команд вызовы CALL по абсолютным адресам или пока ещё нет ?
"Если чё" - выкидывайте смело, разрешаю !
.. 00 --:HLT ;MOV [BX],[BX] - в i8080 mov m,m означает hlt
.. 06 --:MOV CL,[BX] - аналогично mov c,m
.. 70 --:MOV [BX],DL - аналогично mov m,d
.. 76 --:MOV CL,DL - аналогично mov c,d
66 ++ ??:PREFIX CL ;MOV CL,CL - аналогично mov c,c - пустая трата тактов
77 ++ ??:PREFIX DL ;MOV DL,DL - аналогично mov d,d - пустая трата тактов
.. 85 nn:PUSH 0500h+nn - аналогично push data в i8086
.. AA nn:ADD AL,nn - аналогично adi nn
.. AF nn:CMP AL,nn - аналогично cpi nn
.. B8 nn:JMP ±nn - безусловный относительный переход ±128
.. B9 nn:CALL ±nn - условный относительный вызов ±128
.. BC nn:JC ±nn - условный относительный переход ±128
.. CD --:INC DX - аналогично inx d
.. FE --:NOP - холостая операция
.. FF --:RET - безусловный возврат из подпрограммы
77 85 nn:PUSH 7500h+nn - расширяется диапазон
66 AA nn:ADD CL,nn - префикс 66 - подменяет аккумулятор на CL
77 AA nn:ADD DL,nn - префикс 77 - подменяет аккумулятор на DL
11 B8 nn:JMP ±nn - префикс расширяет адрес до ±2048
66 CD --:ADD DX,CX - префикс расширяет inx d до аналогичной dad
66 FE --:NOP 6 - префикс 66 для холостой операции - число тактов
77 FE --:NOP 7 - префикс 77 для холостой операции - число тактов
.. B8 FE:JMP $ ;WAIT - зацикливание на себя невозможно принципиально - префикс WAIT (SF=1,PF=1,ZF=1)
.. BC FF:JC $+1 ;RC - при переходе на байт назад - встречается FF-RET, достигается возврат по условию
┌─►RET Example:
Bx FF:Jcond $+1─┐ 1.BE FF - RZ
┌──┘┌►Rcond │ 2.BC FF - RC
└───┴───────────┘ 3.BD FF - RNC
Вс янв 15, 2017 11:41:22
Вс янв 15, 2017 11:44:33
LastHopeMan писал(а):Также не вижу перспектив в наращивании последовательных шин. В связи с тем, что все упирается в частоты, будущее наверное за архитектурой параллельного включения процессоров, возможно даже в одну широкую шину.
Вс янв 15, 2017 13:17:33
В поисках стабильности и защиты от сбоев, коду 00
Вс янв 15, 2017 14:18:22
"школьный процессор" - говорю же, что со школы начал делать наброски.pyzhman писал(а):Чем 00 отличается от АА, от 45 или, скажем, от E6. Да, прямо скажем, ничем. Другое дело, как уже было указано, - дешифровка КОП. Отсюда и надо было скакать в своё время. И помнить о дуализме. А эмуляторы писать - пусть пишут другие под ваш …
Вс янв 15, 2017 17:18:08
Вс янв 15, 2017 20:14:53
Зpя вы так…pyzhman писал(а):Боюсь напомнить про исключения.
ORG 0xFEFB
BIOS:
.app: ; Передача управления приложению
MOV [0],AL ; Выбор контекста - операция занимает 5 байтов
; Стартовый адрес процессора 0FF00h
; После сброса процессора включается режим SKIP 7 - пропустить 7 JMP'ов
; Прерванное приложение возвращает управление с режимом SKIP 1-6:
JMP .overhead ; No Skip:Запрос к стандартному API
JMP .acclaim ; SKIP 1: Обращение к программным прерываниям INT 0-79
JMP .buffer ; SKIP 2: Буферная зона - прослойка диспетчера памяти
JMP .context ; SKIP 3: Диспетчер переключения контекста процессов
JMP .device ; SKIP 4: Запрос ко внешнему устройству ввода/вывода
JMP .error ; SKIP 5: Обработчик программных/аппаратных ошибок
JMP .force ; SKIP 6: Внешние форсированные события/прерывания
.garret: ; Здесь начало работы BIOS при старте
; Иницируется стек, регистровые файлы приложений,
... ; настраивается периферия
MOV [6],CL ; Системные регистры №6 и №7 - соответственно младший байт
MOV [7],CH ; и старший счётчика тактов, обратный отсчёт которого ведётся
; в контексте прикладной задачи. Его обнуление - генерирует
; запрос к диспетчеру контекстов (см. SKIP 3 выше с JMP .context)
JMP BIOS.app ; Передадим управление конкретной прикладной задаче
;;;;;;;;;
.acclaim: ; Здесь расположен код обработки программного прерывания INT 0-79,
; предоставляющий доступ к базовому API
;;;;;;;;;
.buffer: ; Здесь расположение кода менеджера памяти
;;;;;;;;;
.context: ; Менеджер переключения контекста получает управление после истечения
; работы конкретной задачи или её пошаговой отладки
;;;;;;;;;
.device: ; Симулятор внешних устройств получает управление когда конкретное
; устройство системы запрашивается приложением. Нечто похожее
; на HAL/HEL-прослойку Windows.
;;;;;;;;;
.error: ; Здесь расположен код обработки аппаратных и программных ошибок,
; исключений и ситуаций, которые не были предусмотрены
;;;;;;;;;
.force: ; Наконец, тут находится код для обработки разных внешних сигналов,
; форсирующих выполнение системных функций.
; Например, нажатие клавиши клавиатуры и нажатие кнопки сброса -
; - прежде всего форсирующее событие, а потом уже - прерывание.
; Таймер реального времени, сигнал нестабильности источника питания,
; подключение USB-устройства - тоже форсаж, а не прерывание.
; Короче, весь маловажный "хлам" - здесь
44 00:HLT AL
B8 FE:WAIT (JMP $)
00 :HLT
Чт янв 26, 2017 22:43:53
Сб янв 28, 2017 08:24:55
Сб янв 28, 2017 10:30:06
Сб янв 28, 2017 10:44:38
LastHopeMan писал(а):Многозадачность на физическом уровне в разы лучше.
Сб янв 28, 2017 12:12:40
Хoчу подчеркнуть, что собственную задумку двигаю в духе ещё прошлой эпохи. Будучи школьником, прочитал, что Z80 имеет двойной набор регистров для быстрого переключения во время прерывания. Тем самым, как бы псевдо-мультизадачностьКРАМ писал(а):Я бы еще раз предложил Вам ознакомиться с современными архитектурами ядер.
Прямой доступ в память уже давно делается внутрицикловым, то есть для транзакций используются те такты цикла, где нет обращения к шине данных/адреса, и/или для DMA использована отдельная шина.
Многозадачность при единственном ядре (псевдомногозадачность) в состоянии разделять ресурсы программными методами, что и реализовано в любой ОСРВ. Аппаратное жесткое разделение - совершенно беспонтовая вещь, патамушта в реальных задачах ресурсы используют ОДНОВРЕМЕННО несколько задач (поскольку этого требует алгоритм) и передача ресурса/данных из одной задачи в другую станет дополнительной тратой времени и самих этих ресурсов.
Сб янв 28, 2017 13:38:47
КРАМ писал(а):Во первых, смена контекста современными архитектурами так же поддерживается на аппаратном уровне, а получить что то более рациональное гораздо проще увеличением ядер. Тем более, что ядра не слишком увеличивают площадь кристалла. ОЗУ, флеш и шины занимают больше места.
Сб янв 28, 2017 16:21:40
Сб янв 28, 2017 16:35:02
Знaчит, к сожалению, ввёл всех в заблуждение я…КРАМ писал(а):Причем тут ПК?
Насколько я понял, автор рассматривает RISC-архитектуру....