Микрокодовое ядро на ПЗУ (nedoPC-27)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Shaos wrote:я наверное в ближайшем будущем напишу эмулятор этого дела и попробую попрограммировать в базовой конфигурации...
Для начала, попробуй написать процедуры сложения и вычитания 32-разрядных чисел. :)
Конечно, можно табличкой сделать, но если складывать байты, то получится таблица на 65536 значений, а ещё и перенос нужно учитывать. Можно и побитно складывать, но тогда нужны команды работы с битами. А если нет инкремента/декремента и номер бита указывается прямо в команде, то представляю, насколько длинная будет эта процедура...
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

По сути, твой процессор будет эмулятором обычной логики, и сумматор получится такой-же огромный, как и на обычной логике.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

На то она и базовая конфигурация, чтобы быть неоптимальной ;)

По сути железяки - в базовой конфигурации мы имеем 4 ПЗУ-хи, к выходам которых подключены 4 8-битных регистра - RM0, RM1, RM2 и RM3. Первые два - адрес следующей микрокоманды, RM2 - 8 битов управления (M0,M1,/WM,/WT,P0,P1,FP,FG), RM3 - 8 бит идущих на внешний разъём. Также есть регистр общего назначения RT0 и оперативная память, состоящая из 4 24-битных регистров, 8-битные части которых могут быть записаны значением из RT0, также как и RT0 может быть записан значением из любой 8-битной части этой памяти. Всего получается, что у нас имеется 13 однобайтных регистров для хранения данных.

По умолчанию мы имеем следующие входы:
- 8 внешних сигналов, которые могут идти на 8-битиный регистр RT0 (в базовой конфигурации можно перемычками подсоединить к RM3);
- 2 внешних сигнала, которые могут выбирать какой из 24-битных регистров подключен к выходу оперативной памяти (если FP=1);
- 2 сигнала, сохраняемых для следующего такта.

И выходы:
- 24 сигнала, которые выводят значения из выбранного 24-битного регистра оперативной памяти (может быть использовано как адрес внешней памяти);
- 8 сигналов, которые просто выводят внутреннюю шину данных наружу (сюда может быть подано значение с любого из 13 однобайтных регистров девайса);
- 2 сигнала, сохранённых на предыдущем такте;
- 4 сигнала выбора, дешифрованных из предыдущих двух (половинка дешифратора всё равно оставалась - так я её решил заюзать).

Описание битов управления:
биты 0 и 1 - сигналы M0 и M1, управляющие тем, какой из трёх 8-битных частей выбранного 24-битного регистра используется на чтение или запись (M0=0 M1=0 является специальным случаем, при котором RT0 запитывается от внешнего входа данных);
бит 2 - сигнал /WM, сигнализирующий о том, что оперативная память должна быть записана значением из RT0 по окончанию текущего такта (не для случая, когда M0=0 и M1=0);
бит 3 - сигнал /WT, сигнализирующий о том, что регистр RT0 должен быть записан значением с внутренней шины данных либо со внешнего входа данных (источник управляется сигналами M0 и M1) по окончанию текущего такта;
биты 4 и 5 - сигналы P0 и P1, управляющие тем, какой из 24-битных регистров подключен к выходам оперативной памяти (если FP=0);
бит 6 - сигнал FP, управляющий тем, какие два сигнала P0/P1 используются для выбора 24-битного регистра из четырёх - внутренние (0) или внешние (1);
бит 7 - сигнал FG, управляющий тем, откуда должен браться младший байт адреса следующей микрокоманды - из регистра RM0 (0) или из регистра RT0 (1).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Я вот думаю - стОит ли цеплять ПЗУ ?
Все "самогонные" компьютерщики пишут, что ПЗУ обычно зело тормозит по скорости.
Может на дешифраторах и диодах микрокод забить ?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Я вот думаю - стОит ли цеплять ПЗУ ?
Все "самогонные" компьютерщики пишут, что ПЗУ обычно зело тормозит по скорости.
Может на дешифраторах и диодах микрокод забить ?
И "перепрограммировать" его перепайкой диодов? ;)
Я для начала более цивилизованным путём пойду...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote: По сути железяки - в базовой конфигурации мы имеем 4 ПЗУ-хи, к выходам которых подключены 4 8-битных регистра - RM0, RM1, RM2 и RM3. Первые два - адрес следующей микрокоманды, RM2 - 8 битов управления (M0,M1,/WM,/WT,P0,P1,FP,FG), RM3 - 8 бит идущих на внешний разъём. Также есть регистр общего назначения RT0 и оперативная память, состоящая из 4 24-битных регистров, 8-битные части которых могут быть записаны значением из RT0, также как и RT0 может быть записан значением из любой 8-битной части этой памяти. Всего получается, что у нас имеется 13 однобайтных регистров для хранения данных.

По умолчанию мы имеем следующие входы:
- 8 внешних сигналов, которые могут идти на 8-битиный регистр RT0 (в базовой конфигурации можно перемычками подсоединить к RM3);
- 2 внешних сигнала, которые могут выбирать какой из 24-битных регистров подключен к выходу оперативной памяти (если FP=1);
- 2 сигнала, сохраняемых для следующего такта.

И выходы:
- 24 сигнала, которые выводят значения из выбранного 24-битного регистра оперативной памяти (может быть использовано как адрес внешней памяти);
- 8 сигналов, которые просто выводят внутреннюю шину данных наружу (сюда может быть подано значение с любого из 13 однобайтных регистров девайса);
- 2 сигнала, сохранённых на предыдущем такте;
- 4 сигнала выбора, дешифрованных из предыдущих двух (половинка дешифратора всё равно оставалась - так я её решил заюзать).

Описание битов управления:
биты 0 и 1 - сигналы M0 и M1, управляющие тем, какой из трёх 8-битных частей выбранного 24-битного регистра используется на чтение или запись (M0=0 M1=0 является специальным случаем, при котором RT0 запитывается от внешнего входа данных);
бит 2 - сигнал /WM, сигнализирующий о том, что оперативная память должна быть записана значением из RT0 по окончанию текущего такта (не для случая, когда M0=0 и M1=0);
бит 3 - сигнал /WT, сигнализирующий о том, что регистр RT0 должен быть записан значением с внутренней шины данных либо со внешнего входа данных (источник управляется сигналами M0 и M1) по окончанию текущего такта;
биты 4 и 5 - сигналы P0 и P1, управляющие тем, какой из 24-битных регистров подключен к выходам оперативной памяти (если FP=0);
бит 6 - сигнал FP, управляющий тем, какие два сигнала P0/P1 используются для выбора 24-битного регистра из четырёх - внутренние (0) или внешние (1);
бит 7 - сигнал FG, управляющий тем, откуда должен браться младший байт адреса следующей микрокоманды - из регистра RM0 (0) или из регистра RT0 (1).
Базовая конфигурация может:
- читать извне 1 байт и записывать его в регистр RT0;
- записывать 1 байт в RT0 из любого из 12 регистров;
- записывать 1 байт из RT0 в любой из 12 регистров;
- передавать управление на адрес, младший байт которого берётся из RT0;
- выдавать 3 байта от любой тройки регистров из четырёх в соответствии с внешней или внутренней парой битов управления страницами (P0 и P1) как одно 24-битное слово, которое можно использовать как адрес для внешней памяти.

P.S. Прицепив регистр RM3 к внешнему входу получим возможность микрокомандой записывать значения в RT0 (а значит и в любой другой регистр).

P.P.S. Прицепив 2 сигнала сохранённых на предыдущем такте (это могут быть две кнопки) как внешние P0/P1, мы получим возможность управлять системой даже в базовой конфигурации.
Last edited by Shaos on 23 Jun 2011 19:46, edited 4 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

2_Shaos

Post by Lavr »

Shaos wrote:Я для начала более цивилизованным путём пойду...
А пока ты не паяешь - мне кажется пофигу какой путь.
У меня в "Электронном_верстаке" ПЗУ не было - я так их и слепил
на диодах и DC - у одного "самогонного" мужика видел - он
так заменил 2 штуки РФ5, причём - говорит - прямо в панельках,
и не паяя, чему я дюже удивился...
Чтож у него в панельках "цветник из диодов" был штоль...
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 2_Shaos

Post by Shaos »

Lavr wrote:
Shaos wrote:Надо из тетрадки в игл перенести
Сунул бы тетрадку в сканер.... :wink: , а то пока еще ты всё перерисуешь...
Через 9 месяцев сунул таки тетрадку в сканер, а то уже забывать стал чего собственно хотел...

вот первоначальная идея - выходные регистры (8 штук) заполняются байтами микрокода из большого ПЗУ - соответственно каждая микрокоманда занимает 8 тактов:

Image

вот второй вариант - микрокод уже разбит на маленькие ПЗУ по 64К - соответственно можем наращивать ширину микрокоманды как угодно:

Image

для тактирования входных регистров адреса и выходных регистров микрокоманды используются две тактовые частоты, причём раньше должна появится частота, идущая на выходные регистры:

Image

вот блок-схема файла регистров с данными:

Image

всё-таки думаю начать с первого варианта - там где один ПЗУ из которого байты микрокоманды выдаются последовательно и запоминаются на соответствующих регистрах

а дальнейший вариант - всё-таки не с кучей ПЗУ, а с одной большой, из которой при включении микропрограммы заливаются в ряд состоящий из произвольного количества ОЗУ и уже оттуда оно работает
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вариант нарезки регистров для эмуляции i8080:
M0L0=PC
M1L1=SP
M2L2=DE
M3L3=HL
H0=F
H1=A
H2=B
H3=C
Внешняя память подключена к выходам M и L

P.S. L это когда M1=0 M0=1, M это когда M1=1 M0=0, H это когда M1=1 M0=1. Цифра после буквы задаётся сигналами P0 и P1.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вариант нарезки регистров для эмуляции MOS6502:
M0L0=PC
M1=0x10 L1=S
M2=F L2=A
M3L3=XY
H0=?
H1=?
H2=?
H3=?
Last edited by Shaos on 02 Oct 2012 16:27, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Вариант нарезки регистров для эмуляции i8080:
M0L0=PC
M1L1=SP
M2L2=DE
M3L3=HL
H0=F
H1=A
H2=B
H3=C
Внешняя память подключена к выходам M и L

P.S. L это когда M1=0 M0=1, M это когда M1=1 M0=0, H это когда M1=1 M0=1. Цифра после буквы задаётся сигналами P0 и P1.
прикинул, что с минимальным внешним обвесом эту конструкцию можно превратить в эмулятор 8080 - причём АЛУ будет "эмулироваться" прямо в памяти микропрограмм - унарные операции будут выполняться над 8-битными данными, а бинарные (с двумя аргументами) над 4-битными (путём передачи управления на адрес в зависимости от значения в регистре RT0)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:Вариант нарезки регистров для эмуляции i8080:
M0L0=PC
M1L1=SP
M2L2=DE
M3L3=HL
H0=F
H1=A
H2=B
H3=C
Внешняя память подключена к выходам M и L

P.S. L это когда M1=0 M0=1, M это когда M1=1 M0=0, H это когда M1=1 M0=1. Цифра после буквы задаётся сигналами P0 и P1.
прикинул, что с минимальным внешним обвесом эту конструкцию можно превратить в эмулятор 8080 - причём АЛУ будет "эмулироваться" прямо в памяти микропрограмм - унарные операции будут выполняться над 8-битными данными, а бинарные (с двумя аргументами) над 4-битными (путём передачи управления на адрес в зависимости от значения в регистре RT0)
а можно снаружи прицепить 74180-е и 74181-е, т.е. сделать настоящее 8-битное АЛУ - будет быстрее работать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote: По сути железяки - в базовой конфигурации мы имеем 4 ПЗУ-хи, к выходам которых подключены 4 8-битных регистра - RM0, RM1, RM2 и RM3. Первые два - адрес следующей микрокоманды, RM2 - 8 битов управления (M0,M1,/WM,/WT,P0,P1,FP,FG), RM3 - 8 бит идущих на внешний разъём. Также есть регистр общего назначения RT0 и оперативная память, состоящая из 4 24-битных регистров, 8-битные части которых могут быть записаны значением из RT0, также как и RT0 может быть записан значением из любой 8-битной части этой памяти. Всего получается, что у нас имеется 13 однобайтных регистров для хранения данных.

По умолчанию мы имеем следующие входы:
- 8 внешних сигналов, которые могут идти на 8-битиный регистр RT0 (в базовой конфигурации можно перемычками подсоединить к RM3);
- 2 внешних сигнала, которые могут выбирать какой из 24-битных регистров подключен к выходу оперативной памяти (если FP=1);
- 2 сигнала, сохраняемых для следующего такта.

И выходы:
- 24 сигнала, которые выводят значения из выбранного 24-битного регистра оперативной памяти (может быть использовано как адрес внешней памяти);
- 8 сигналов, которые просто выводят внутреннюю шину данных наружу (сюда может быть подано значение с любого из 13 однобайтных регистров девайса);
- 2 сигнала, сохранённых на предыдущем такте;
- 4 сигнала выбора, дешифрованных из предыдущих двух (половинка дешифратора всё равно оставалась - так я её решил заюзать).

Описание битов управления:
биты 0 и 1 - сигналы M0 и M1, управляющие тем, какой из трёх 8-битных частей выбранного 24-битного регистра используется на чтение или запись (M0=0 M1=0 является специальным случаем, при котором RT0 запитывается от внешнего входа данных);
бит 2 - сигнал /WM, сигнализирующий о том, что оперативная память должна быть записана значением из RT0 по окончанию текущего такта (не для случая, когда M0=0 и M1=0);
бит 3 - сигнал /WT, сигнализирующий о том, что регистр RT0 должен быть записан значением с внутренней шины данных либо со внешнего входа данных (источник управляется сигналами M0 и M1) по окончанию текущего такта;
биты 4 и 5 - сигналы P0 и P1, управляющие тем, какой из 24-битных регистров подключен к выходам оперативной памяти (если FP=0);
бит 6 - сигнал FP, управляющий тем, какие два сигнала P0/P1 используются для выбора 24-битного регистра из четырёх - внутренние (0) или внешние (1);
бит 7 - сигнал FG, управляющий тем, откуда должен браться младший байт адреса следующей микрокоманды - из регистра RM0 (0) или из регистра RT0 (1).
Базовая конфигурация может:
- читать извне 1 байт и записывать его в регистр RT0;
- записывать 1 байт в RT0 из любого из 12 регистров;
- записывать 1 байт из RT0 в любой из 12 регистров;
- передавать управление на адрес, младший байт которого берётся из RT0;
- выдавать 3 байта от любой тройки регистров из четырёх в соответствии с внешней или внутренней парой битов управления страницами (P0 и P1) как одно 24-битное слово, которое можно использовать как адрес для внешней памяти.

P.S. Прицепив регистр RM3 к внешнему входу получим возможность микрокомандой записывать значения в RT0 (а значит и в любой другой регистр).

P.P.S. Прицепив 2 сигнала сохранённых на предыдущем такте (это могут быть две кнопки) как внешние P0/P1, мы получим возможность управлять системой даже в базовой конфигурации.
Вот например задача для опробования базовой конфигурации: 16-битный счётчик, который считает вперёд, если нажать на первую кнопку, и назад, если на вторую. Индикация светодиодами, подключёнными к шине внешнего адреса - 24 сигнала из которых мы будем смотреть на младшие 16. Счётчик при включении питания обнуляется.

Микропрограмма обнуления всех регистров:

Code: Select all

0000: 01 00 0C 00 ; T0=0
0001: 02 00 05 00 ; L0=T0
0002: 03 00 15 00 ; L1=T0
0003: 04 00 25 00 ; L2=T0
0004: 05 00 35 00 ; L3=T0
0005: 06 00 06 00 ; M0=T0
0006: 07 00 16 00 ; M1=T0
0007: 08 00 26 00 ; M2=T0
0008: 09 00 36 00 ; M3=T0
0009: 0A 00 07 00 ; H0=T0
000A: 0B 00 17 00 ; H1=T0
000B: 0C 00 27 00 ; H2=T0
000C: 0D 00 37 00 ; H3=T0
Будем использовать регистры H0,H1,H2,H3 как маркеры того, какая кнопка нажата:

Code: Select all

000D: 0E 00 0C 01 ; T0=1
000E: 0F 00 17 00 ; H1=T0 (1)
000F: 10 00 0C 02 ; T0=2
0010: 11 00 27 00 ; H2=T0 (2)
0011: 12 00 37 00 ; H3=T0 (2)
Если нажаты обе кнопки, то программа должна будет думать, что нажата только вторая.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote: По сути железяки - в базовой конфигурации мы имеем 4 ПЗУ-хи, к выходам которых подключены 4 8-битных регистра - RM0, RM1, RM2 и RM3. Первые два - адрес следующей микрокоманды, RM2 - 8 битов управления (M0,M1,/WM,/WT,P0,P1,FP,FG), RM3 - 8 бит идущих на внешний разъём. Также есть регистр общего назначения RT0 и оперативная память, состоящая из 4 24-битных регистров, 8-битные части которых могут быть записаны значением из RT0, также как и RT0 может быть записан значением из любой 8-битной части этой памяти. Всего получается, что у нас имеется 13 однобайтных регистров для хранения данных.

По умолчанию мы имеем следующие входы:
- 8 внешних сигналов, которые могут идти на 8-битиный регистр RT0 (в базовой конфигурации можно перемычками подсоединить к RM3);
- 2 внешних сигнала, которые могут выбирать какой из 24-битных регистров подключен к выходу оперативной памяти (если FP=1);
- 2 сигнала, сохраняемых для следующего такта.

И выходы:
- 24 сигнала, которые выводят значения из выбранного 24-битного регистра оперативной памяти (может быть использовано как адрес внешней памяти);
- 8 сигналов, которые просто выводят внутреннюю шину данных наружу (сюда может быть подано значение с любого из 13 однобайтных регистров девайса);
- 2 сигнала, сохранённых на предыдущем такте;
- 4 сигнала выбора, дешифрованных из предыдущих двух (половинка дешифратора всё равно оставалась - так я её решил заюзать).

Описание битов управления:
биты 0 и 1 - сигналы M0 и M1, управляющие тем, какой из трёх 8-битных частей выбранного 24-битного регистра используется на чтение или запись (M0=0 M1=0 является специальным случаем, при котором RT0 запитывается от внешнего входа данных);
бит 2 - сигнал /WM, сигнализирующий о том, что оперативная память должна быть записана значением из RT0 по окончанию текущего такта (не для случая, когда M0=0 и M1=0);
бит 3 - сигнал /WT, сигнализирующий о том, что регистр RT0 должен быть записан значением с внутренней шины данных либо со внешнего входа данных (источник управляется сигналами M0 и M1) по окончанию текущего такта;
биты 4 и 5 - сигналы P0 и P1, управляющие тем, какой из 24-битных регистров подключен к выходам оперативной памяти (если FP=0);
бит 6 - сигнал FP, управляющий тем, какие два сигнала P0/P1 используются для выбора 24-битного регистра из четырёх - внутренние (0) или внешние (1);
бит 7 - сигнал FG, управляющий тем, откуда должен браться младший байт адреса следующей микрокоманды - из регистра RM0 (0) или из регистра RT0 (1).
Базовая конфигурация может:
- читать извне 1 байт и записывать его в регистр RT0;
- записывать 1 байт в RT0 из любого из 12 регистров;
- записывать 1 байт из RT0 в любой из 12 регистров;
- передавать управление на адрес, младший байт которого берётся из RT0;
- выдавать 3 байта от любой тройки регистров из четырёх в соответствии с внешней или внутренней парой битов управления страницами (P0 и P1) как одно 24-битное слово, которое можно использовать как адрес для внешней памяти.

P.S. Прицепив регистр RM3 к внешнему входу получим возможность микрокомандой записывать значения в RT0 (а значит и в любой другой регистр).

P.P.S. Прицепив 2 сигнала сохранённых на предыдущем такте (это могут быть две кнопки) как внешние P0/P1, мы получим возможность управлять системой даже в базовой конфигурации.
Для единообразия думаю надо убрать инверсные сигналы, чтобы неактивное состояние соответствовало нулю, т.е. биты управления будут следующими:

Bit 0: M0 \
Bit 1: M1 - два бита адресующих регистры внутренней памяти (RLx,RMx,RHx) либо RT0
Bit 2: WM - запись содержимого RT0 в память по выбранному адресу M0/M1
Bit 3: WT - запись в регистр RT0 (при M0=0 M1=0 WM=1 происходит запись из внешнего порта)
Bit 4: P0 \
Bit 5: P1 - два бита адресующих страницу регистров внутренней памяти
Bit 6: FP - сигнал использования внешних P0/P1 вместо внутренних (биты 4 и 5)
Bit 7: FG - сигнал записи содержимого RT0 в младший байт адреса следующей команды

Теперь можно писать ассемблер этого дела :)

P.S. Вот список возможных микрокодов базовой конфигурации (добавил возможность оперировать ещё одним регистром RT1 в командах с пометкой NEW):

Code: Select all

76543210 below X=[0,1] and Y=[0...7]
--------
0XXX0000 (#Y0) - RT0 on databus
00000001 (#01) - RL0 on databus
00000010 (#02) - RM0 on databus
00000011 (#03) - RH0 on databus
0XXX0100 (#Y4) - RT0 on databus, RT1=RT0 (NEW)
00000101 (#05) - RT0 on databus, RL0=RT0
00000110 (#06) - RT0 on databus, RM0=RT0
00000111 (#07) - RT0 on databus, RH0=RT0
0XXX1000 (#Y8) - RT1 on databus, RT0=RT1 (NEW)
00001001 (#09) - RL0 on databus, RT0=RL0
00001010 (#0A) - RM0 on databus, RT0=RM0
00001011 (#0B) - RH0 on databus, RT0=RH0
0XXX1100 (#YC) - RT1 on databus, RT0=ExtPort
0XXX1101 (#YD) - don't use
0XXX1110 (#YE) - don't use
0XXX1111 (#YF) - don't use

00010001 (#11) - RL1 on databus
00010010 (#12) - RM1 on databus
00010011 (#13) - RH1 on databus

00010101 (#15) - RT0 on databus, RL1=RT0
00010110 (#16) - RT0 on databus, RM1=RT0
00010111 (#17) - RT0 on databus, RH1=RT0

00011001 (#19) - RL1 on databus, RT0=RL1
00011010 (#1A) - RM1 on databus, RT0=RM1
00011011 (#1B) - RH1 on databus, RT0=RH1

00100001 (#21) - RL2 on databus
00100010 (#22) - RM2 on databus
00100011 (#23) - RH2 on databus

00100101 (#25) - RT0 on databus, RL2=RT0
00100110 (#26) - RT0 on databus, RM2=RT0
00100111 (#27) - RT0 on databus, RH2=RT0

00101001 (#29) - RL2 on databus, RT0=RL2
00101010 (#2A) - RM2 on databus, RT0=RM2
00101011 (#2B) - RH2 on databus, RT0=RH2

00110001 (#31) - RL3 on databus
00110010 (#32) - RM3 on databus
00110011 (#33) - RH3 on databus

00110101 (#35) - RT0 on databus, RL3=RT0
00110110 (#36) - RT0 on databus, RM3=RT0
00110111 (#37) - RT0 on databus, RH3=RT0

00111001 (#39) - RL3 on databus, RT0=RL3
00111010 (#3A) - RM3 on databus, RT0=RM3
00111011 (#3B) - RH3 on databus, RT0=RH3

01XX0001 (#41,#51,#61,#71) - RLp on databus (where p=2*P1'+P0')
01XX0010 (#42,#52,#62,#72) - RMp on databus (where p=2*P1'+P0')
01XX0011 (#43,#53,#63,#73) - RHp on databus (where p=2*P1'+P0')

01XX0101 (#45,#55,#65,#75) - RT0 on databus, RLp=RT0 (where p=2*P1'+P0')
01XX0110 (#46,#56,#66,#76) - RT0 on databus, RMp=RT0 (where p=2*P1'+P0')
01XX0111 (#47,#57,#67,#77) - RT0 on databus, RHp=RT0 (where p=2*P1'+P0')

01XX1001 (#49,#59,#69,#79) - RLp on databus, RT0=RLp (where p=2*P1'+P0')
01XX1010 (#4A,#5A,#6A,#7A) - RMp on databus, RT0=RMp (where p=2*P1'+P0')
01XX1011 (#4B,#5B,#6B,#7B) - RHp on databus, RT0=RHp (where p=2*P1'+P0')

1XXXXXXX (#80...#FF) - the same as above, but next address will be 256*RM1+RT0 instead of 256*RM1+RM0
P.S. В будущих версиях можно добавить ещё три внешних порта и заюзать для их чтения команды #YD,#YE,#YF (которые сейчас использовать не рекомендуется).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Первая версия схемы (с одним ПЗУ и 8-шаговым тактированием) полностью набросана на бумажке - теперь осталось накидать её в Eagle и заказать платку (на макетке наверное будет тяжеловасто городить прототип)...
Я тут за главного - если что шлите мыло на me собака shaos точка net