|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Real i8085 + Xilinx CPLDs + 2 * SIMM30 = Orionix :)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
| | | | Shaos wrote: Поразбирался я тут с SIMM30 и вот что получается: Порт 2 (который #F900), как известно, выбирает подключаемую страницу и мы обозначим его содержимое так: P7 P6 P5 P4 P3 P2 P1 P0 Причём в Орионе-128/256 в этому порту используются только биты P0 и P1. Нам надо иметь 2 одинаковые симки, т.к. инфу из видеопамяти логичнее брать параллельно из двух страниц, соответственно бит P0 порта ¹2 всегда будет обозначать какую из двух симок мы подключаем в область адресного пространства (0 - симку с точками, 1 - симку с цветом). SIMM30 бывают размером 256К, 1М и 4М (причём все поддерживают HIDDEN CAS-before-RAS). Разбиение по RAS/CAS придётся делать по разному для разных размеров: Как видим P0 тут не участвует, т.к. используется для выбора симки. Свободный бит P7 можно задействовать скажем для подключения ром-диска размером до 8 мегов в непосредственное адресное пространство процессора вместо симов. P.S. Поприкидывал я тут симковские времянки к 5-мегагерцовому 8085 - без вейтов чего-то не получается - даже с 70 нс памятью... | | | | |
Думаем дальше: для автодетекта симов придётся модифицировать монитор либо джамперами заставить юзера устанавливать размеры? Есть мысль заиметь отдельным чипом 2К ОЗУ для области #F000-#F7FF (можно программно сделать убирание портов из этой области) и это ОЗУ будет безвейтовым по понятным причинам. Соответственно чтобы программа шла на полной скорости (5 МГц), её надо запускать из этого ОЗУ (либо ПЗУ). Программы же запущенные из общей памяти будут тормозить чуть менее чем половину времени, хотя можно попробовать убирать торможение в режиме отключенной графики (режимы #02 и #03).
Новый порт для настройки новых фич (как например программное убирание портов из области #F400-#F7FF) можно засунуть в адрес #F7FF, причём один из битов этого порта будет его отключать (для совместимости со старым Орионом, где в этой области могут находиться внешние устройства). Запись в адрес #F7FF будет идти и в регистр, и в ОЗУ, а чтение - только из ОЗУ, т.е. таким образом можно организовать не только запись, но и чтение из этого порта.
|
01 Dec 2013 01:04 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
какая вэйтовость? ты о чем?
|
01 Dec 2013 02:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
о том что для 70 нс сима надо как минимум 120 нс на вычитку байта плюс примерно столько же на следом идущий CAS-before-RAS - т.е. оно на 5 МГц 8085, где каждый четвёртый такт занят видеоконтроллером, бесконфликто не ложится...
|
01 Dec 2013 11:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ещё один трюк, который можно проделать в CPLD-версии Ориона это горизонтальный скролл через всю видеопамять Порт ¹3 (#FA00) по стандарту Ориона задаёт один из четырёх экранов: D1 D0 0 0 - экран №1 (#C000...#EFFF) 0 1 - экран №2 (#8000...#AFFF) 1 0 - экран №3 (#4000...#6FFF) 1 1 - экран №4 (#0000...#2FFF) Как видим если инвертировать эти 2 бита, то они дадут старшие 2 бита адреса отображаемой видеопамяти. Теперь прикинем что надо сделать, чтобы задавать произвольное смещение - одна колонка это 256 байт, соответственно 64К имеет в себе 256 таких колонок - одного байта хватит для задания стартовой колонки, причём мы точно также будем его инвертировать: #FF будет задавать видеопамять #0000...#2FFF #FE будет задавать видеопамять #0100...#30FF #FD будет задавать видеопамять #0200...#31FF и т.д. последнее окно #C000...#EFFF при этом будет задаваться байтом #3F (значения 0,1,2 и 3 всё также можно оставить для совместимости). P.S. На самом деле если организовать возможность записи и в теневую видеопамять, то последнее окно без перехлёста будет #D000...#FFFF, задаваемое байтом #2F, а если мы ещё разрешим и перехлёст (зацикливание видеопамяти), то будут заюзаны все числа вплоть до 0, что в-принципе противоречит тому, что 0-1-2-3 мы оставили для совместимости - но это можно как-то решить в будущем путём отключения режима совмесимости и т.д. P.P.S. Можно также поддержать и 480 пикселей по горизонтали для 80-колоночного текстового режима, причём также со горизонтальным скроллом P.P.P.S. Ещё мысль - симы ведь у нас 9-битные на самом деле - а не заюзать ли этот лишний бит в качестве альфа-канала?
|
01 Dec 2013 11:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Итак, мы заводим новый системный порт ¹0 по адресу #F7FF, который будет доступен как по записи, так и по чтению (через ОЗУ):
D0 - управляет совместимостью с NTSC (см.ниже)
D1 /
D2 - включает режим 480 точек по горизонтали (для 80x25)
D3 - включает режим альфаканала (просвечивает область с нулевого адреса) ???
D4 - задают режим видимости Devices/FastRAM (см.ниже)
D5 /
D6 - включает теневую память вместо ОЗУ, ПЗУ и портов (порт #F7FF также запрещается)
D7 - запрещает порт #F7FF для совместимости со стандартным Орионом (если 0, то порт разрешён)
При запрещении порта #F7FF битами D6 или D7 его можно вернуть обратно путём осуществления записи скажем по адресу #FFFF (на самом деле по любому #FFxx), что обнулит биты D6 и D7 порта #F7FF (но при чтении всё ещё будут читаться старые значения, т.к. память не обновится пока в порт что-то явно не запишут).
Возможное решение проблемы совместимости с NTSC, где будут видимы только 200 линий:
00 - режим по умолчанию где видны все 256 линий (в режиме NTSC будут видны только верхние 200 строк);
01 - во всех режимах видны только 200 строк с вертикальным отступом 0;
10 - во всех режимах видны только 200 строк с вертикальным отступом 28;
11 - во всех режимах видны только 200 строк с вертикальным отступом 56.
В режиме NTSC результат 00 и 01 будет идентичным, а в режиме PAL значения 01,10,11 будут отображать растянутый по горизонтали кадр с чёрными полосками высотой в 28 пикселов сверху и снизу.
Режимы видимости Devices/FastRAM в области #F400...#F7FF (порт ¹0 по адресу #F7FF всегда виден, если не запрещён):
00 - Devices only (плюс порт #F7FF, который запрещается отдельно);.
01 - Devices+FastRAM (периферия только по стандартным адресам, а между ними - ОЗУ);
10 - Keyboard+FastRAM (из устройств по своим адресам находится только клавиатура, а во всех остальных адресах - ОЗУ);
11 - FastRAM (все устройства спрятаны).
Плюс ко всему в области #F6xx планируется быть шина NI-15, полностью видимая только в режиме 00
Last edited by Shaos on 01 Dec 2013 21:26, edited 6 times in total.
|
01 Dec 2013 12:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
| | | | Shaos wrote: Поразбирался я тут с SIMM30 и вот что получается: Порт 2 (который #F900), как известно, выбирает подключаемую страницу и мы обозначим его содержимое так: P7 P6 P5 P4 P3 P2 P1 P0 Причём в Орионе-128/256 в этому порту используются только биты P0 и P1. Нам надо иметь 2 одинаковые симки, т.к. инфу из видеопамяти логичнее брать параллельно из двух страниц, соответственно бит P0 порта ¹2 всегда будет обозначать какую из двух симок мы подключаем в область адресного пространства (0 - симку с точками, 1 - симку с цветом). SIMM30 бывают размером 256К, 1М и 4М (причём все поддерживают HIDDEN CAS-before-RAS). Разбиение по RAS/CAS придётся делать по разному для разных размеров: Как видим P0 тут не участвует, т.к. используется для выбора симки. Свободный бит P7 можно задействовать скажем для подключения ром-диска размером до 8 мегов в непосредственное адресное пространство процессора вместо симов. P.S. Поприкидывал я тут симковские времянки к 5-мегагерцовому 8085 - без вейтов чего-то не получается - даже с 70 нс памятью... | | | | |
Ещё бывают 16MB SIMM30, но наверное 32 мега для Ориона будет жирновато?...
|
01 Dec 2013 12:57 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
а как же тогда работал турбованный скорпион на РУшках? а ведь там еще чтение атрибутов, а память одной линейкой.
скажу больше - плата, с которой я утянул V30 работает на 8МГц и содержит 120нс ОЗУ и никакого намека на вэйты.
|
01 Dec 2013 16:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
ну русские спектрумы это та ещё песня - лишь бы работала конкретная поделка, пофиг на даташыты
P.S. вроде турба всегда с вейтами была, нет?...
|
01 Dec 2013 16:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Первый чип готов - это дешифратор адресов, порты (и старые, и новый - поддержаны старшие 4 бита порта #F7FF) и логика начального пуска 8085, которая по второму фетчу заменяет ROM на обычное распределение памяти - всё влезло в XC9536XL - даже ещё место осталось:
| | | | Code: ---------------------------------------------------------------------------------- -- Company: nedoPC.org -- Engineer: Shaos -- -- Create Date: 17:33:05 12/01/2013 -- Design Name: orionix decoder -- Module Name: main - Behavioral -- Project Name: Orionix-2013 -- Target Devices: xc9436xl -- Tool versions: ISE 14.7 -- Description: 1st CPLD chip for Orionix-2013 -- -- Dependencies: -- -- Revision: 0.04 -- Revision 0.04 (12/12/2013) - Some names fixed -- Revision 0.03 (12/11/2013) - Invered screen bits -- Revision 0.02 (12/02/2013) - Fixed port F8xx -- Revision 0.01 (12/01/2013) - File Created -- Additional Comments: -- This design is Public Domain ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all;
entity main is Port ( CLR : in STD_LOGIC; AD0 : in STD_LOGIC; AD1 : in STD_LOGIC; AD2 : in STD_LOGIC; AD3 : in STD_LOGIC; AD4 : in STD_LOGIC; AD5 : in STD_LOGIC; AD6 : in STD_LOGIC; AD7 : in STD_LOGIC; A8 : in STD_LOGIC; A9 : in STD_LOGIC; A10 : in STD_LOGIC; A11 : in STD_LOGIC; A12 : in STD_LOGIC; A13 : in STD_LOGIC; A14 : in STD_LOGIC; A15 : in STD_LOGIC; ALE : in STD_LOGIC; WR : in STD_LOGIC; SAND : in STD_LOGIC; CSRAM : out STD_LOGIC; CSRAM2 : out STD_LOGIC; CSROM2 : out STD_LOGIC; VM0 : out STD_LOGIC; VM1 : out STD_LOGIC; VM2 : out STD_LOGIC; IS0 : out STD_LOGIC; IS1 : out STD_LOGIC; WRP2 : out STD_LOGIC; WRP4 : out STD_LOGIC; CSKB : out STD_LOGIC; CSD1 : out STD_LOGIC; CSD2 : out STD_LOGIC; CSEX : out STD_LOGIC); end main;
architecture Behavioral of main is signal FRS: STD_LOGIC; signal SCN: STD_LOGIC; signal A0: STD_LOGIC; signal A1: STD_LOGIC; signal A2: STD_LOGIC; signal A3: STD_LOGIC; signal A4: STD_LOGIC; signal A5: STD_LOGIC; signal A6: STD_LOGIC; signal A7: STD_LOGIC; signal DF0: STD_LOGIC; signal DF1: STD_LOGIC; signal ALM: STD_LOGIC; signal DSB: STD_LOGIC; begin
process (SCN,ALM,DSB,DF1,DF0,CLR,WR,AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7, A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15) is begin if CLR = '0' then CSRAM <= '1'; CSRAM2 <= '1'; CSROM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; WRP2 <= '1'; WRP4 <= '1'; else if SCN='1' then -- Show ROM everywhere CSRAM <= '1'; CSRAM2 <= '1'; CSROM2 <= '0'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; WRP2 <= '1'; WRP4 <= '1'; elsif ALM='1' then -- Show shadow memory CSRAM <= '0'; CSRAM2 <= '1'; CSROM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; WRP2 <= '1'; WRP4 <= '1'; elsif A15='1' and A14='1' and A13='1' and A12='1' then -- Fxxx CSRAM <= '1'; if A11='1' then -- F800..FFFF CSRAM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; if WR='0' then -- Writing to the ports (see other process for actual writing) CSROM2 <= '1'; if A10='0' and A9='0' and A8='1' then -- Write to F9xx (external register) WRP2 <= '0'; else WRP2 <= '1'; end if; if A10='0' and A9='1' and A8='1' then -- Write to FBxx (external register) WRP4 <= '0'; else WRP4 <= '1'; end if; else -- Reading from the ROM CSROM2 <= '0'; WRP2 <= '1'; WRP4 <= '1'; end if; else -- F000..F7FF if A0='1' and A1='1' and A2='1' and A3='1' and A4='1' and A5='1' and A6='1' and A7='1' then -- F7FF if DSB='0' then -- F7FF enabled CSRAM2 <= '0'; CSEX <= '1'; else -- F7FF disabled if DF1='1' then -- extension slot disabled CSRAM2 <= '0'; CSEX <= '1'; else -- extension slot enabled CSRAM2 <= '1'; CSEX <= '0'; end if; end if; CSROM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; WRP2 <= '1'; WRP4 <= '1'; else -- F000..F7FE if A10='1' then -- F400..F7FE CSROM2 <= '1'; WRP2 <= '1'; WRP4 <= '1'; if A9='0' and A8='0' then -- F4xx if DF1='1' and DF0='1' then -- keyboard disabled (11) CSRAM2 <= '0'; CSKB <= '1'; elsif DF1='0' and DF0='0' then -- keyboard enabled (00) CSRAM2 <= '1'; CSKB <= '0'; else -- keyboard enabled only in four addresses (01,10) if A7='0' and A6='0' and A5='0' and A4='0' and A3='0' and A2='0' then CSRAM2 <= '1'; CSKB <= '0'; else -- otherwise it's RAM CSRAM2 <= '0'; CSKB <= '1'; end if; end if; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; elsif A9='0' and A8='1' then -- F5xx if DF1='1' then -- device disabled (10,11) CSRAM2 <= '0'; CSD1 <= '1'; elsif DF0='0' then -- device enabled (00) CSRAM2 <= '1'; CSD1 <= '0'; else -- device enabled only in four addresses (01) if A7='0' and A6='0' and A5='0' and A4='0' and A3='0' and A2='0' then CSRAM2 <= '1'; CSD1 <= '0'; else CSRAM2 <= '0'; CSD1 <= '1'; end if; end if; CSKB <= '1'; CSD2 <= '1'; CSEX <= '1'; elsif A9='1' and A8='0' then -- F6xx if DF1='1' then -- device disabled (10,11) CSRAM2 <= '0'; CSD2 <= '1'; elsif DF0='0' then -- device enabled (00) CSRAM2 <= '1'; CSD2 <= '0'; else -- device enabled only in four addresses (01) if A7='0' and A6='0' and A5='0' and A4='0' and A3='0' and A2='0' then CSRAM2 <= '1'; CSD2 <= '0'; else CSRAM2 <= '0'; CSD2 <= '1'; end if; end if; CSKB <= '1'; CSD1 <= '1'; CSEX <= '1'; else -- F7xx if DF1='1' then -- extension slot disabled (10,11) CSRAM2 <= '0'; CSEX <= '1'; else -- extension slot enabled (00,01) CSRAM2 <= '1'; CSEX <= '0'; end if; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; end if; else -- F000..F3FF CSRAM2 <= '0'; CSROM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; WRP2 <= '1'; WRP4 <= '1'; end if; end if; end if; else -- 0000..EFFF CSRAM <= '0'; CSRAM2 <= '1'; CSROM2 <= '1'; CSKB <= '1'; CSD1 <= '1'; CSD2 <= '1'; CSEX <= '1'; WRP2 <= '1'; WRP4 <= '1'; end if; end if; end process;
process (ALE,AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7) is begin if ALE'event and ALE='0' then -- falling edge A0 <= AD0; A1 <= AD1; A2 <= AD2; A3 <= AD3; A4 <= AD4; A5 <= AD5; A6 <= AD6; A7 <= AD7; end if; end process;
process (CLR,WR,A15,A14,A13,A12,A11,A10,A9,A8,A7,A6,A5,A4,A3,A2,A1,A0,ALM,DSB) is begin if CLR = '0' then VM0 <= '0'; VM1 <= '0'; VM2 <= '0'; IS0 <= '1'; IS1 <= '1'; DF0 <= '0'; DF1 <= '0'; ALM <= '0'; DSB <= '0'; elsif WR'event and WR='1' then -- rising edge of WR if A15='1' and A14='1' and A13='1' and A12='1' and A11='0' and A10='1' and A9='1' and A8='1' and A7='1' and A6='1' and A5='1' and A4='1' and A3='1' and A2='1' and A1='1' and A0='1' then -- Write to F7FF if ALM='0' and DSB='0' then -- F7FF enabled DF0 <= AD4; DF1 <= AD5; ALM <= AD6; DSB <= AD7; end if; elsif A15='1' and A14='1' and A13='1' and A12='1' and A11='1' then -- >=F800 if ALM='0' and A10='0' and A9='0' and A8='0' then -- Write to F8xx VM0 <= AD0; VM1 <= AD1; VM2 <= AD2; elsif ALM='0' and A10='0' and A9='1' and A8='0' then -- Write to FAxx if AD0='0' then IS0 <= '1'; else IS0 <= '0'; end if; if AD1='0' then IS1 <= '1'; else IS1 <= '0'; end if; elsif A10='1' and A9='1' and A8='1' then -- Write to FFxx if ALM='1' then -- Hide shadow memory ALM <= '0'; end if; if DSB='1' then -- Enable port F7FF DSB <= '0'; end if; end if; end if; end if; end process;
process (CLR,SAND,FRS,SCN) is begin if CLR = '0' then -- reset FRS <= '1'; SCN <= '1'; elsif SAND'event AND SAND='1' then -- rising edge if FRS='1' then -- 1st step FRS <= '0'; elsif SCN='1' then -- 2nd step SCN <= '0'; end if; end if; end process;
end Behavioral;
| | | | |
Xilinx ISE превратил этот VHDL код вот в такое: | | | | Code: ********** Mapped Logic **********
$OpTx$$OpTx$FX_DC$24_INV$105 <= (A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1);
FDCPE_A0: FDCPE port map (A0,AD0,NOT ALE,'0','0');
FDCPE_A1: FDCPE port map (A1,AD1,NOT ALE,'0','0');
FDCPE_A2: FDCPE port map (A2,AD2,NOT ALE,'0','0');
FDCPE_A3: FDCPE port map (A3,AD3,NOT ALE,'0','0');
FDCPE_A4: FDCPE port map (A4,AD4,NOT ALE,'0','0');
FDCPE_A5: FDCPE port map (A5,AD5,NOT ALE,'0','0');
FDCPE_A6: FDCPE port map (A6,AD6,NOT ALE,'0','0');
FDCPE_A7: FDCPE port map (A7,AD7,NOT ALE,'0','0');
FTCPE_ALM: FTCPE port map (ALM,ALM_T,WR,NOT CLR,'0'); ALM_T <= ((A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND ALM AND A11) OR (AD6 AND A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND NOT ALM AND NOT DSB AND NOT A11 AND A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1));
CSD1 <= NOT (((NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A7) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A0) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A1) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A2) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A3) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A4) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A5) OR (NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A6)));
CSD2 <= NOT (((A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A7) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A0) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A1) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A2) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A3) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A4) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A5) OR (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A6)));
CSEX <= NOT (((A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A7) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A0) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A1) OR (A15 AND A14 AND A13 AND A12 AND CLR AND NOT ALM AND NOT DF1 AND DSB AND NOT A11 AND NOT SCN AND A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A2) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A3) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A4) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A5) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A6)));
CSKB <= NOT (((NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A7) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A0) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A1) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT A11 AND NOT SCN AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A2) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A3) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A4) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A5) OR (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND CLR AND NOT ALM AND NOT DF1 AND NOT DF0 AND NOT A11 AND NOT SCN AND NOT A6)));
CSRAM <= ((NOT CLR) OR (SCN) OR (A15 AND A14 AND A13 AND A12 AND NOT ALM));
CSRAM2 <= ((NOT A15) OR (NOT A14) OR (NOT A13) OR (NOT A12) OR (NOT CLR) OR (NOT DF1 AND DSB AND $OpTx$$OpTx$FX_DC$24_INV$105) OR (A10 AND NOT DF1 AND NOT DF0 AND NOT $OpTx$$OpTx$FX_DC$24_INV$105) OR (A9 AND A8 AND A10 AND NOT DF1 AND NOT $OpTx$$OpTx$FX_DC$24_INV$105) OR (A10 AND NOT DF1 AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (NOT A9 AND NOT A8 AND A10 AND NOT DF0 AND NOT A2 AND NOT A3 AND NOT A4 AND NOT A5 AND NOT A6 AND NOT A7) OR (ALM) OR (A11) OR (SCN));
CSROM2 <= NOT (((CLR AND SCN) OR (A15 AND A14 AND A13 AND A12 AND WR AND CLR AND NOT ALM AND A11)));
FDCPE_DF0: FDCPE port map (DF0,AD4,WR,NOT CLR,'0',DF0_CE); DF0_CE <= (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND NOT ALM AND NOT DSB AND NOT A11 AND A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1);
FDCPE_DF1: FDCPE port map (DF1,AD5,WR,NOT CLR,'0',DF1_CE); DF1_CE <= (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND NOT ALM AND NOT DSB AND NOT A11 AND A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1);
FTCPE_DSB: FTCPE port map (DSB,DSB_T,WR,NOT CLR,'0'); DSB_T <= ((A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND DSB AND A11) OR (A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND A10 AND AD7 AND NOT ALM AND NOT DSB AND NOT A11 AND A2 AND A3 AND A4 AND A5 AND A6 AND A7 AND A0 AND A1));
FDCPE_FRS: FDCPE port map (FRS,'0',SAND,'0',NOT CLR,FRS);
FDCPE_IS0: FDCPE port map (IS0,NOT AD0,WR,'0',NOT CLR,IS0_CE); IS0_CE <= (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT ALM AND A11);
FDCPE_IS1: FDCPE port map (IS1,NOT AD1,WR,'0',NOT CLR,IS1_CE); IS1_CE <= (A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT ALM AND A11);
FDCPE_SCN: FDCPE port map (SCN,'0',SAND,'0',NOT CLR,SCN_CE); SCN_CE <= (SCN AND NOT FRS);
FDCPE_VM0: FDCPE port map (VM0,AD0,WR,NOT CLR,'0',VM0_CE); VM0_CE <= (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT ALM AND A11);
FDCPE_VM1: FDCPE port map (VM1,AD1,WR,NOT CLR,'0',VM1_CE); VM1_CE <= (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT ALM AND A11);
FDCPE_VM2: FDCPE port map (VM2,AD2,WR,NOT CLR,'0',VM2_CE); VM2_CE <= (NOT A9 AND NOT A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT ALM AND A11);
WRP2 <= NOT ((NOT A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT WR AND CLR AND NOT ALM AND A11 AND NOT SCN));
WRP4 <= NOT ((A9 AND A8 AND A15 AND A14 AND A13 AND A12 AND NOT A10 AND NOT WR AND CLR AND NOT ALM AND A11 AND NOT SCN));
Register Legend: FDCPE (Q,D,C,CLR,PRE,CE); FTCPE (Q,D,C,CLR,PRE,CE); LDCP (Q,D,G,CLR,PRE);
| | | | |
Статистика: Распределение ног:
UPD 02-DEC-2013: Чего-то я вчера забыл, что порт F8xx трёх-битный - переделал, добавив выход V2 (и заменив два входа IS0 и IS1 на один вход SAND, куда надо подавать S0 & S1)
UPD 12-DEC-2013: Переименовал кое-что и залокал ноги...
Last edited by Shaos on 12 Dec 2013 00:14, edited 3 times in total.
|
02 Dec 2013 01:03 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Херня какая-то этот ваш хилинх с VHDL...
|
02 Dec 2013 01:14 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
нет
алсо зачем два симма, когда есть, например, IS41C(LV)16256
|
02 Dec 2013 01:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Я пробовал со схемным вводом возиться - получается дольше т.к. там чтобы одну линию переименовать нужно много кликомышей через главное меню делать, а линий там дофига, так что остаётся только VHDL
|
02 Dec 2013 07:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
затем что их есть у меня
и симы, и симовые гнёзда
P.S. хотя наверное должно быть можно сделать по аналогии с оригинальной схемой на двойной частоте без вейтов - я подумаю...
|
02 Dec 2013 07:57 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Пока прикидываю неразогнанный двухсимовый вариант для 5 МГц:
Как я понимаю за 4 такта процессора (и 8 тактов пиксельклока) нам надо успеть прочитать один раз из видеопамяти и один-два раза прочитать-записать данные по требованию процессора, ну и может один раз сделать CAS-before-RAS рефреш - так?
Процессор всегда пишет-читает через такт после ALE. У нас может быть четыре состояния s0,s1,s2,s3, в первых трёх из которых по умолчанию будет читаться видеопамять и сохранять видеоданные в регистре, из которого в состоянии s3 видеоданные будут уходить в сдвиговый регистр и ALE может попасть на любое из этих состояний:
ALE попало на s0 - значит общение процессора с памятью будет во время состояния s2 и мы точно знаем, что регистр с видеоданными уже будет записан в текущем такте (s0), значит следующий такт s1 можно посвятить рефрешу CAS-before-RAS, а на s3 снова может выпасть ALE.
ALE попало на s1 - значит общение процессора с памятью будет во время состояния s3 и мы точно знаем, что регистр с видеоданными уже будет записан в текущем такте (s1), значит следующий такт s2 можно посвятить рефрешу CAS-before-RAS.
ALE попало на s2 - значит общение процессора с памятью будет во время состояния s0, а в следующем состоянии s3 регистр с данными уже должен быть записан, значит в текущем такте (s2) пишем регистр с видеоданными и больше ничего не делаем (CAS-before-RAS не заказывается).
ALE попало на s3 - значит общение процессора с памятью будет во время состояния s1 и следующий такт (s0) надо посвятить записи видеорегистра, значит CAS-before-RAS также не заказывается.
P.S. RD и WR надо попросту укоротить, откусив их начала и оставив только кусок, попадающий на T3?
|
02 Dec 2013 19:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Покажи дописанный вариант - я попробую его своему зайлинксу скормить
P.S. Начну уже наверное свои растактовки видеосигнала заводить в VHDL - цифры на 10 МГц для PAL и NTSC мной посчитаны ещё в мае 2008:
http://www.nedopc.org/forum/viewtopic.p ... 8&start=40
P.P.S. Я тут думаю, что наверное CAS-before-RAS не нужно столь часто вызывать - вместо этого свободные циклы обращения к памяти можно отдать скажем под некий DMA, на котором можно сделать блиттер для быстрой графики...
P.P.P.S. #FB00 я планировал заюзать для задания смещения до начала экранной области (экран сможет перемещаться с шагом 256 байт), далее #FB01 можно заюзать под команду блиттера (0 - остановить копирование и приготовиться принимать данные, 1 - начать копирование с одного сима, 2 - начать копирование с двух симов, 3 - начать копирование пикселов из первого сима с маской из второго сима), #FB02 и #FB03 будут задавать начальный адрес источника, #FB04 и #FB05 будут задавать начальный адрес приёмника, а #FB06 будет задавать количество копируемых байт (от 1 до 256) - вобщем как-то так...
|
03 Dec 2013 11:11 |
|
|
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
|
|