Pull to refresh

Comments 30

Просто феноменально круто. Вообще, для меня, это что то похожее на "компьютер для попаданца" - с относительного нуля, но обладая необходимыми знаниями собрать компьютер.

UFO just landed and posted this here
UFO just landed and posted this here

Смысл-то в том, чтобы предыдущие сигналы держались, а потом сразу в новые перещелкивались. Даже если CE/OE дергать, они будут через high-z переключаться, а не напрямую. Короче, ПЗУ – это не ПЛИС.

На выходе ПЗУ можно защёлку поставить и менять в ней данные когда у ПЗУ всё устаканится.

Продолжение это гуд, а поскольку проект уже доведен до логического конца, то то мы имеем шансы увидеть цикл статей о компьютере на логических микросхемах от «А» до «Я»
Подскажите, а команда вызова подпрограммы/процедуры в вашем процессоре есть?
Кстати NOP порадовал:) «безусловный непереход» это сильно. В 8080 NOP-ом была инструкция MOV A,A. А в 8086 NOP был XCHG EAX, EAX.

Вызов подпрограммы – та же инструкция JMP. После перехода в PH:PL будет адрес возврата, я писал об этом в прошлом посте.

в 8080 nop - это в первую очередь инструкция 0b0000000 из-за того, что при рестарте это число будет записано в IR с пустой внутренней шины данных, еще до зачитывания инструкции с входного буфера-защелки на внешней шине данных, находящейся по адресу 0x0000 (на которую указывает сброшенный PC). Т.е. после перезагрузки процессор выполнит NOP, а только затем уже инструкцию с адреса 0x0000. То, что NOP мнемонически кодируется в MOV A, A - это уже вынужденная мера, т.к. должны были исходить из того, что старший бит для MOV-операций - нулевой, но с другой стороны удобно - это и признак того, что операция выполняется не на ALU, а только на регистровых мультиплексорах/демультиплексорах, соответственно не нужны отдельные хаки для сохранения флагов результата арифметических операций.

Спасибо, очень круто! Интересно посмотреть схему формирования видео сигнала.

Проделанная работа вызывает восхищение!

Ох как стека-то не хватает, конечно.

Кстати, после изучения архитектуры, системы команд, и примеров кода мне одному brainfuck вспомнился?)))

В детстве мечтал самостоятельно собрать компьютер из тех, что публиковались тогда в журналах. Делал подборки таких публикаций (к слову храню их до сих пор). Но прошли годы и оказалось, что легче купить компьютер, чем сделать самостоятельно. Но может быть, когда появятся такого вот плана конструкторы или ещё проще :), то куплю такой конструктор и уже со своим сыном его соберу.

Автору респект!

Круто!

А как себя поведет команда LD PL / LD PH?

Мне кажется ее поведение будет таким: на время выставления сигнала CYCLE содержимое шины данных будет дублироваться через регистр на 8 бит шины адреса и загрузить число по изначальному адресу регистра P в него-же не получится

Никакой проблемы с загрузкой PH/PL нет. Значение в регистр защелкивается по нисходящему фронту CLK, поэтому до этого фронта на шине будет нужный адрес.

А после фронта на шине установится уже другой адрес? (то значение что было защелкнуто в регистр по фронту)

буфер соединяющий шину данных и внутреннюю шину это просто буфер, или он защелкивается в момент активации?

Да, после фронта будет новый адрес, но это неважно: значение уже защелкнуто.

Шину данных со внутренней шиной соединяет обычный буфер 74HC244.

Компактно и эффективно закодировать инструкции - не менее важно, чем оптимально построить АЛУ. Уровня микрокоманд-то нет - все ручками! Особенно понравились MOV через АЛУ с подавлением строба флагов, JMP/NOP через инверсию проверки и автосохранение адреса следующей инструкции при переходе.

По поводу нуля на входе второго операнда АЛУ вместо того же аккумулятора - навскидку не факт, от чего больше пользы. ADD A, A эквивалентно SHL, XOR A, A в отличие от CLR A (у вас это MOV A, 0) даёт очистку с установкой флагов (это часто важно!), OR A, A ставит флаги по текущему содержимому (тоже очень нужно). Так что при прочих равных я бы выбрал версию системы команд аккумулятора с самим собой. Аппаратно наверное это потребовало бы ещё одного регистра-защелки с Z-состоянием, на второй вход АЛУ с выхода A, но это небольшая жертва.

Для унарных операций биты RR могут кодировать ее тип, таким образом можно уместить NOT, NEG, INC, DEC в один код CCCC, а освободившиеся использовать для будущих расширений - но это уже другой уровень сложности декодера.

Спасибо за отзыв!

XOR A, A в отличие от CLR A (у вас это MOV A, 0) даёт очистку с установкой флагов (это часто важно!), OR A, A ставит флаги по текущему содержимому (тоже очень нужно).

Очистка с установкой флагов будет AND A, 0; OR A, 0 эквивалентна OR A, A.

Для унарных операций биты RR могут кодировать ее тип

Да, тут нужно усложнять и АЛУ, и декодер.

Какой командой процессора колобок ест чёрта?

У меня в компьютере тоже память команд очень быстро кончается. Жалею, что не сделал инструкцию проверки отдельных битов.

Шутка для олдфагов, даже не помню откуда она.

А про язык программирования будет публикация?

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

Компиляторы я писать умею :)

А вот про особенности синтаксиса интересно узнать.

UFO just landed and posted this here

То, что раньше делали целые корпорации (весь стек технологий от разработки и производства железа до программной инфраструктуры и компилятора) сегодня может сделать один человек, если у него, конечно же, есть знания. Это круто.

Sign up to leave a comment.

Articles