nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 11 Dec 2018 00:43



Reply to topic  [ 254 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17  Next
4-bit Processor 
Author Message
Fanat

Joined: 27 May 2011 05:25
Posts: 79
Location: Perm
Reply with quote
Post 
А что если сделать какой-нибудь служебный регистр, к которому можно обращаться как к РОН, но его функция будет выступать источником недостающего нибла в командах записи(либо верхнего либо нижнего в зависимости от команды либо адреса LSB)?
Либо запись в этот регистр может быть организован в фоне при операции чтения (4 из 8 бит). При этом указанный в команде(или в LSB адреса) нибл идет в приемник, а другой - в служебный регистр. Получаем програмную реализацию "чтение-модификация-запись" с возможностью маневра, например работать для скорости только с одним ниблом, второй оставляя "don't care" .


17 Jan 2014 01:58
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
AIS wrote:
Я хотел сказать: Берем две четырехбитных памяти. Считывание одновременно из двух - 8 бит. Запись только в одну.
Тогда не надо будет делать: "старший ниббл считывать и обратно записывать, вместе с младшим..."

Честно говоря, так оно и было с самого начала.
Но чем это плохо - всё равно получается, что нет возможности модифицировать ячейку
где лежит КОП
. То есть - такая схема не может сама считывать программу, скажем, с
магнитофона в собственную память.
Поэтому я и попытался от 2-х 4-битных уйти к одному 8-битному корпусу.
В общем-то нужна инструкция типа XCHG двух нибблов. В PDP-11 она есть для решения
похожей проблемы. Но у меня её пока нет.

_________________
iLavr


17 Jan 2014 03:03
Profile
Novelist

Joined: 30 Nov 2013 06:04
Posts: 32
Location: 83.149.47.40
Reply with quote
Post 
Lavr wrote:
нет возможности модифицировать ячейку
где лежит КОП
.

Такой возможности нет, если при записи просто игнорировать ненужные 4 бита и не использовать бит адреса для выбора конкретной микросхемы.
А выше я описал как сделать, чтобы КОП был доступен для записи по четным адресам, а данные по нечетным.


17 Jan 2014 03:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
KolAnVi wrote:
А что если сделать какой-нибудь служебный регистр, к которому можно обращаться как к РОН,
но его функция будет...

Я вот тоже с этими регистрами - всю голову себе поломал... аж не выспался сегодня...

Всё дело в том, что я старательно все эти регистры посокращал до минимума и на этом
пути пришел к выводу, что у меня получается уже что-то близкое к PDP-8, а в ней основной
принцип - все регистры должны быть в памяти, раз уж она тут есть.
Кстати, и в 6502 - тоже решение похожее...
Для чего я и тужился с косвенной адресацией.

В общем и так я приспасабливал этот дополнительный регистр, и иначе... и всё как-то
криво он цепляется.... :(

И тут меня посетила парадоксальная мысль! Я - добавляю лишний регистр... а процессор -
4-битный... а может - добавить ещё один регистр - и пусть процессор станет 8-битным? :o

Интересно, что это многие 4-битные косяки просто сводит на нет...
А схема, что интересно - практически не меняется! :idea:
В общем к утру я на бумажке перерисовал всё в 8-битную версию... и всё стало замечательно!!!
Но... вылез другой косячок - в операциях CALL теперь некуда присунуть 4 старших бита 12-разрядного
программного счетчика... :lol:

Но - сегодня высплюсь - просмотрю всё еще раз...

Тут просто пока я рисовал новую схему - всё больше убеждался, что надо перейти к 8-битному
варианту и вот почему...

Эта схема не является же самоцелью - в её основе была мысль, что простеньким но быстрым
самодельным процем можно попробовать эмулировать 580ВМ80
...
И я просто вдруг задумался... 8 бит данных 16 бит адреса - делим на 4 - получаем:
6 !!! - обращений к УВВ надо сделать, чтобы только выставить адрес и данные эмулируемого
проца!!! :o А разбор команд? Мне думается теперь, что для поставленной задачи 4-битность -
это не лучшее решение...

_________________
iLavr


17 Jan 2014 03:29
Profile
God
User avatar

Joined: 13 Nov 2010 05:06
Posts: 1292
Reply with quote
Post 
Я тоже задумывался над этим вопросом.
Мне показалось оптимальным иметь 12 разрядов для шин адреса и данных.
Да, вроде уже не 8 бит, но ещё не 16... Но 8 и 16 - это скорее дело привычки и традиций.
И я не старался минимизировать схему.


17 Jan 2014 14:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Мне показалось оптимальным иметь 12 разрядов для шин адреса и данных.
...
И я не старался минимизировать схему.

12 разрядов для шины адреса - просто жестокая необходимость, которая обеспечивает
хотя бы минимально 4096 байт для какой-либо серьёзной программы.
Я же не зря ковыряюсь с EDUC-8 - я пробую программировать в убогой системе команд и
пытаюсь понять, что необходимо, а без чего - можно и обойтись.

А вот данные - всё-таки лучше размером в байт - это удобно ложится в распространенные
мс. памяти, чтобы не оригинальничать особо.
И если ты обратил внимание, то в плане - я один корпус ОЗУ подсократил...

А насчет минимизации - ну ты лучше всех тут знаешь, что я жестко решил ограничиться
размером большой макетки.

_________________
iLavr


18 Jan 2014 02:06
Profile
Fanat

Joined: 27 May 2011 05:25
Posts: 79
Location: Perm
Reply with quote
Post 
А что если служебный регистр для записи второго ниббла - это будет второй аккумулятор(они 4-х битные)? И между ними можно будет переключаться командой. Все команды между чтения памяти(по 8 бит) будут иметь флаг, загружать ли второй ниббл в текущий теневой аккумулятор(первый ниббл обрабатывается согласно команде).


18 Jan 2014 11:28
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
KolAnVi wrote:
А что если служебный регистр для записи второго ниббла - это будет второй аккумулятор(они 4-х битные)?

Совершенно верно! :kruto: И именно так примерно я тоже размышлял... :lol:
Но что здесь я увидел неприятного - это решение тянет за собой мультиплексоры
в том или ином месте схемы...

И вот в этот момент я решил - введение "второго 4-битного аккумулятора" -
да это фактически 8-битный единственный аккумулятор!!! :o
Тогда я и подумал, что добавив еще один регистр - я сделаю 8-битным буфер
данных и процессор станет 8-битным. Вот такой был ход мысли.

Регистры команд, флагов и инструкций АЛУ - остаются, как и были, 4-битными.
Ну а РС - он и так уже был 12-битным.
Я вот думаю, может его сделать 16-битным, поскольку старшую 8-битную часть, видимо,
удобнее сохранять в 8-битную память, нежели 4-битный огрызок, который сейчас несколько
всё затрудняет...

_________________
iLavr


18 Jan 2014 12:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
tihsasha1967 wrote:
Хоть проект вроде заброшен и топик-стартер заинтересовался EDUC-8, но всё же.

Я понял, что прошивку придётся многократно править, а правил я её в Ворде,
что довольно трудоёмко, поэтому возникла мысль упростить этот процесс и
сделать редактор прошивки с помощью мыши
...

Ну вот эта мысль наконец-то реализовалась... :wink:

Image
Скачать

Окончательно собирал под Вендой 7, которая неслабо проклевала мне мозг...
Но все опции вроде работают правильно, а окончательно все глюки выяснятся
при эксплуатации.

_________________
iLavr


14 Feb 2014 11:00
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
И тут меня посетила парадоксальная мысль! Я - добавляю лишний регистр... а процессор -
4-битный... а может - добавить ещё один регистр - и пусть процессор станет 8-битным? :o

Интересно, что это многие 4-битные косяки просто сводит на нет...
А схема, что интересно - практически не меняется! :idea:
В общем к утру я на бумажке перерисовал всё в 8-битную версию... и всё стало замечательно!!!
Но... вылез другой косячок - в операциях CALL теперь некуда присунуть 4 старших бита 12-разрядного
программного счетчика... :lol:

Нашел я местечко, куда присунуть 4 старших бита 12-разрядного программного счетчика...
и когда я тщательно всю эту идею продумал, то неожиданно оказалось, что такое решение
очень похоже на микроконтроллеры семейства 1816ВЕ48! :o

_________________
iLavr


02 May 2014 07:29
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
И вот в этот момент я решил - введение "второго 4-битного аккумулятора" -
да это фактически 8-битный единственный аккумулятор!!! :o
Тогда я и подумал, что добавив еще один регистр - я сделаю 8-битным буфер
данных и процессор станет 8-битным. Вот такой был ход мысли.

Я переделал в нулевом приближении всю схему, и всё довольно хорошо вписалось в существующую уже
4-битную конструкцию без значительных изменений.
Я учел опыт PDP-8 (EDUC-8 ), и при 8-разрядной внутренней шине с 12-битным адресом формат команды
стал теперь следующим:

1 байт: KOP_.SEG_ - то есть по 4 бита на код операции и указатель сегмента размером в 256 байт.
2 байт: ADRH.ADRL - младшая и старшая части смещения в сегменте размером в 256 байт.

Да, от RISC-принципов пришлось несколько отойти, и команда с 12-битным адресом обрабатывается
в два захода: во время выборки FETCH KOP_.SEG_ защелкиваются в регистр инструкций, а вторым
заходом ADRH.ADRL - записываются в программный счетчик РС, при этом одновременно из регистра
инструкций
значение сегмента - KOP_.SEG_ - защелкивается в сегментную часть РС.
Таким образом с переходами и вызовами JMP и JSR все проблемы устранились довольно элегантно.

Я ввел 2 префикса: E и F, как советовал Виталий, и как это делают в PDP-8 (EDUC-8 ), так что можно
непротиворечиво реализовать набор в 46 команд, что очень неплохо.

Команды с префиксом E работают со следующим байтом, и их формат вот такой:
1 байт: PREF.KOP_ - то есть 4 бита на код операции, a 4 бита префикса позволяют их отличить от адреса.
2 байт: BYTE.8BIT - байт с которым работают, типа ANI BYTE, MVI A,BYTE.
С этим набором команд тоже всё удобно и проблем нет.

Однобайтные команды с префиксом F :
1 байт: PREF.KOP_ - то есть 4 бита на код однобайтной операции типа RAL, RAR, CMA и т.д. 4 бита префикса
позволяют их отличить от адреса в командах 1 типа и от двухбайтных команд 2 типа.
С этим набором я проблем тоже не вижу.

Проблема опять вылезла там, где я её не ожидал... :( И проблема с инструкциями типа LHLD и SHLD - чисто условно.
Так как HL здесь нет, а есть косвенная загрузка значения РС сегментом и смещением из памяти, ну и их сохранение.

Значит проблема вот где, чтобы косвенно загрузить РС командой, ну скажем LD PC,[ADDR] - то есть сегмент PC -
из [ADDR], а смещение PC - из [ADDR+1], я должен выставить в буфер адреса значение ADDR и считать сегмент PC.
А вот увеличить буфер адреса на 1 - у меня никакого механизма нет. Буфер адреса, в отличие от программного
счетчика РС
- это просто регистр.

Если я правильно помню (могу и ошибиться), в i8080 операции типа LHLD и SHLD выполняются через пару WZ.
То есть: WZ - в буфер адреса через схему инкремента, после чего WZ=WZ+1. Но аналога WZ у меня нет и пока
вводить не хочется: аппаратно - это еще 3 корпуса регистров.

А вот как с этим справляются в 6502, где WZ нет? Как ресурсами 6502 закружают его РСL, РСH из памяти, согласно
этой вот блок-схеме? Подсобите советом знатоки и поклонники 6502! :wink:
Image
Я склонен предположить, что используется DL, т.к. он выходит на шины ABL, ABH, но у DL нет пути через сумматор.

_________________
iLavr


07 Jul 2014 16:33
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Я склонен предположить, что используется DL, т.к. он выходит на шины ABL, ABH, но у DL нет пути через сумматор.

А согласно другому варианту этой же блок-схемы, хоть и менее красивому, есть у DL путь через сумматор... :-?

Image

Но судя по описанию системы команд 6502, шибко красивого решения
при пересечении границы блока и смене сегмента также найдено не было:
Quote:
- Процессор всегда прочитывает второй байт команды условного перехода. Если происходит переход с пересечением границы страницы, то процессор сначала читает байт из текущей страницы, и только потом из нужной.
- Если граница страницы пересекается в других режимах адресации, процессор всегда сначала читает ошибочный байт со страницы, на 1 меньшую, чем нужная.

_________________
iLavr


07 Jul 2014 20:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Как ресурсами 6502 закружают его РСL, РСH из памяти, согласно этой вот блок-схеме?

Вообще говоря в системе команд 6502 это единственная команда, загружающая слово в РС.

JMP (<address>) - с косвенной загрузкой адреса.

А вот разрядность этого регистра DL не совсем понятна. По входу - похож на 8-разрядный,
но имеет 2 выхода на шины ABL, ABH.

И с этой командой у 6502 действительно есть проблемы!
Quote:
The 6502's memory indirect jump instruction, JMP (<address>), is partially broken. If <address> is hex xxFF (i.e., any word ending in FF), the processor will not jump to the address stored in xxFF and xxFF+1 as expected, but rather the one defined by xxFF and xx00 (for example, JMP ($10FF) would jump to the address stored in 10FF and 1000, instead of the one stored in 10FF and 1100). This defect continued through the entire NMOS line, but was corrected in the CMOS derivatives.

_________________
iLavr


08 Jul 2014 07:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
А согласно другому варианту этой же блок-схемы, хоть и менее красивому, есть у DL путь через сумматор... :-?

Image


А согласно более подробному варианту, всё несколько сложнее, чем на блок-схеме выше...


Увеличить

_________________
iLavr


10 Jul 2014 10:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
я неоднократно выкладывал текущие результаты...

По электрической схеме у меня, наконец, всё срослось!
И даже косвенная адресация получилась, на мой взгляд, нескольно необычно,
но довольно просто и эффективно.

К сожалению, завяз немного с ремонтом дома, а так в общем-то всё готово и
надо бы вплотную заняться упорядочением микрокода, благо теперь есть
для этого инструмент.

_________________
iLavr


05 Oct 2014 12:35
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 254 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.