Comments 30
Просто феноменально круто. Вообще, для меня, это что то похожее на "компьютер для попаданца" - с относительного нуля, но обладая необходимыми знаниями собрать компьютер.
Для попаданца в 1970-е :)
Очень занимательное произведение :)
Подскажите, а команда вызова подпрограммы/процедуры в вашем процессоре есть?
Кстати 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, поэтому до этого фронта на шине будет нужный адрес.
А после фронта на шине установится уже другой адрес? (то значение что было защелкнуто в регистр по фронту)
буфер соединяющий шину данных и внутреннюю шину это просто буфер, или он защелкивается в момент активации?
Компактно и эффективно закодировать инструкции - не менее важно, чем оптимально построить АЛУ. Уровня микрокоманд-то нет - все ручками! Особенно понравились 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 могут кодировать ее тип
Да, тут нужно усложнять и АЛУ, и декодер.
Какой командой процессора колобок ест чёрта?
У меня в компьютере тоже память команд очень быстро кончается. Жалею, что не сделал инструкцию проверки отдельных битов.
Не понял про колобка и черта :)
Шутка для олдфагов, даже не помню откуда она.
А про язык программирования будет публикация?
Я не знаю, что про язык программирования писать. Пока что мне не хочется, потому что гордиться особо нечем. Получился какой-то компилятор, который как-то компилирует. Если про него писать, это точно не будет пособием по написанию компиляторов, скорее, антипособием.
del
То, что раньше делали целые корпорации (весь стек технологий от разработки и производства железа до программной инфраструктуры и компилятора) сегодня может сделать один человек, если у него, конечно же, есть знания. Это круто.
Компьютер на логических микросхемах: исполнение инструкций