PDA

Просмотр полной версии : Расширение памяти Speccy до 128K



ILoveSpeccy
10.06.2007, 23:09
Всем привет!

Меня интересует как расширить память моего Speccy до 128K.

Прочитал про это все что только можно, а на статике (2 чипа: 512K ОЗУ и 32K видеоОЗУ) собрать не получается :(

Теория мне ясна (ну или почти ясна :D), спасибо ZX-ревъю за 1991г.
А на практике неполучается...
Может у кого примерчики имеются (желательно на VHDL) или статейки хорошие на эту тему???

fan
11.06.2007, 17:37
Фунцеклирование порта вопросов не вызывает ?

Впрчем не важно , если сам порт уже реализован в классическом виде , то остаётся на "провода" идущие на старшие адреса RAM повесить дешифратор . Комбинация бит
A14P=1 A15P=0 A16P=1 - SCR-0(RAM5)
A14P=1 A15P=1 A16P=1 - SCR-1(RAM7)
В свою очередь любой из этих вариантов означает обращение в VRAM (и отрубание RAM). Как видно бит A15P удобно использовать как старший бит для руления страницами VRAM (именно поэтому у меня на схеме на старший бит ША VRAM идёт A15P_aka_VA14 ).

На старшие адреса RAM идут A14P A15P A16P влюбом порядке (точнее как удобней разводить ;) ).

Пустые страницы в RAM можно пустить под какуюнить фигню (как в хроме).

Как видно всё очень просто.

Добавлено через 10 минут
Навсякий случий - бит SCR есесно нужно тоже подтыкать к старшей ножке ША VRAM во время работы ВК . Т.е. бит SCR заменяет бит A15P_aka_VA14 на время работы ВК .

ILoveSpeccy
11.06.2007, 18:25
2fan

Ну в обшем с портом 7FFD все ясно...
Читал твой пост насчет этого (тут (http://zx.pk.ru/showthread.php?t=1304&highlight=7ffd)) и понял так:

Биты:

0 -|
1 -|
2 ---- 0 - 7 страница памяти (страница 5 - Screen0, страница 7 - Screen1)
3 ---- активная страница видеопамяти, откуда выводятся данные на телевизор
4 ---- Переключатель ПЗУ 0-128К, 1-48К
5 ---- Если 1 то спек запирается в 48К режиме до резета
6 -|
7 ---- В классическом варианте 128К не исползуются,
но можно адресовать 512К как в пентагоне

Память:

0000 - 3FFF - ПЗУ 128/48
4000 - 7FFF - Всегда страница 5
8000 - BFFF - Всегда страница 2
C000 - FFFF - Страницы 0 до 7 взависимости от состояния младших 3 битов порта 7FFD...

Если я правильно понимаю то может быть такое:
* Процессор работает в Screen0 а видеоконтроллер выводит со страницы Screen1...

Вот вроде и все...

А теперь к практике :) ( А вот на практике неполучается ничего :( )


Комбинация бит
A14P=1 A15P=0 A16P=1 - SCR-0(RAM5)
A14P=1 A15P=1 A16P=1 - SCR-1(RAM7)
В свою очередь любой из этих вариантов означает обращение в VRAM (и отрубание RAM). Как видно бит A15P удобно использовать как старший бит для руления страницами VRAM (именно поэтому у меня на схеме на старший бит ША VRAM идёт A15P_aka_VA14 ).

Может у тебя есть примерчики на VHDL или сырки от ReSpecT 128К???

ILoveSpeccy
12.06.2007, 04:06
Сделал!!!!!!!!!!!! :v2_yahoo::v2_finge::v2_cheer:

Щас спать охота.... завтра напишу в чем дело было :)

fan
12.06.2007, 14:23
Значит вопрос решён ? Давай теперь 4 бит на точку делай ;)

( З.Ы. Сырки у меня только на AHDL . )

ILoveSpeccy
12.06.2007, 18:36
Ну в обшем дело было так :)

Необходимо было полностю разрулить страницы 2,5 и 7.
Я имею в виду вот что:


STR5 <= '1' when (A14 = '1' and A15 = '0') or (A14 = '1' and A15 = '1' and RAMPage = "101") else '0';
STR7 <= '1' when A14 = '1' and A15 = '1' and RAMPage = "111" else '0';
и т.д. ну и соответственно А14Р, А15Р и А16Р менять в случае работы проца в областях 4000-BFFF, если идет работа со страницами 5 и 7 то рулить VRAM, в осталных случаях просто присваивать адресам А14Р, А15Р и А16Р значения трех младших битов порта 7FFD.


Впрчем не важно , если сам порт уже реализован в классическом виде , то остаётся на "провода" идущие на старшие адреса RAM повесить дешифратор .
Может ты как-то проще сделал а я недопонял???
И за сырки на AHDL буду очень благодарен!!!

п.с. Какими прогами или играми потестить правильную работу 128К спека???
Ну чтобы убедитья что все действительно правильно :)

fan
13.06.2007, 10:48
Впринципе достаточно только с порта ловить , т.к. при любом обращении в пятую банку комбинация бит будет 101 (с.м ниже).
Чем тестить ХэЗэ , попробуй смотрелку триколора найти в разделе по графике (если не найдётся то там подскажут). Эта штука активно пишет в обе страницы VRAM и показывает их .

Собсно вот такой у меня кусок -

-- Порт #7FFD (128к).
--------------------
PORT_7FFD[5..0].clk=NOT(VA_CPU[15] or VA_CPU[1] or nIORQ or nWR or PORT_7FFD[5].q); -- Обращение к порту 7FFD .
PORT_7FFD[5..0].clrn=nRESET;
PORT_7FFD[5..0].d=D[5..0];
-- PORT_7FFD[2..0].q; -- Выбор страницы для четвёртой банки .
-- PORT_7FFD[3].q; -- Выбор экранной страницы . Подключается к A14 VRAM через буфер VA_BUF_OUT[].
ROM48 =PORT_7FFD[4].q; -- Выбор ПЗУ 48к .
-- PORT_7FFD[5].q; -- Блокировка порта 7FFD .
-- Мультиплексор порта 7FFD . ////////////////
if (VA_CPU[15] and VA_CPU[14]) then A14P=PORT_7FFD[0].q; A15P=PORT_7FFD[1].q; A16P=PORT_7FFD[2].q; -- если лезим в четвёртую банку .
else A14P=VA_CPU[14]; A15P=VA_CPU[15]; A16P=VA_CPU[14]; -- если лезим в другие банки .
end if;
-- A14P и A16P - выходные пины . A15P - внутрений провод , идёт на CPU_VRAM_SEL_BUF выходит как VA[14],
-- используется для выбора видео страничек (RAM5/RAM7) процессором .
--================================================== ============================
-- Селектор мозгов CPU , выбирает ROM, VRAM, RAM .
--------------------------------------------------
nVRAM=NOT( (A14P==B"1" and A15P==B"0" and A16P==B"1") or (A14P==B"1" and A15P==B"1" and A16P==B"1") ); --
-- Проц полез в VRAM (RAM5 или RAM7) .

(При A14=0 и A15=0 рубим все мозги и подтыкаем ПЗУ).

ILoveSpeccy
13.06.2007, 14:01
Впринципе достаточно только с порта ловить , т.к. при любом обращении в пятую банку комбинация бит будет 101 (с.м ниже).
Чем тестить ХэЗэ , попробуй смотрелку триколора найти в разделе по графике (если не найдётся то там подскажут). Эта штука активно пишет в обе страницы VRAM и показывает их .

Собсно вот такой у меня кусок -

-- Порт #7FFD (128к).
--------------------
PORT_7FFD[5..0].clk=NOT(VA_CPU[15] or VA_CPU[1] or nIORQ or nWR or PORT_7FFD[5].q); -- Обращение к порту 7FFD .
PORT_7FFD[5..0].clrn=nRESET;
PORT_7FFD[5..0].d=D[5..0];
-- PORT_7FFD[2..0].q; -- Выбор страницы для четвёртой банки .
-- PORT_7FFD[3].q; -- Выбор экранной страницы . Подключается к A14 VRAM через буфер VA_BUF_OUT[].
ROM48 =PORT_7FFD[4].q; -- Выбор ПЗУ 48к .
-- PORT_7FFD[5].q; -- Блокировка порта 7FFD .
-- Мультиплексор порта 7FFD . ////////////////
if (VA_CPU[15] and VA_CPU[14]) then A14P=PORT_7FFD[0].q; A15P=PORT_7FFD[1].q; A16P=PORT_7FFD[2].q; -- если лезим в четвёртую банку .
else A14P=VA_CPU[14]; A15P=VA_CPU[15]; A16P=VA_CPU[14]; -- если лезим в другие банки .
end if;
-- A14P и A16P - выходные пины . A15P - внутрений провод , идёт на CPU_VRAM_SEL_BUF выходит как VA[14],
-- используется для выбора видео страничек (RAM5/RAM7) процессором .
--================================================== ============================
-- Селектор мозгов CPU , выбирает ROM, VRAM, RAM .
--------------------------------------------------
nVRAM=NOT( (A14P==B"1" and A15P==B"0" and A16P==B"1") or (A14P==B"1" and A15P==B"1" and A16P==B"1") ); --
-- Проц полез в VRAM (RAM5 или RAM7) .

(При A14=0 и A15=0 рубим все мозги и подтыкаем ПЗУ).

А вот за это ОГРОМНОЕ СПАСИБО!!!
Как я сам не догадался :confused:
Так в 100 раз проще получается и логично :v2_thumb: