ZXNet эхоконференция «hardware.zx»


тема: ULA 4видеорежима и все в 64 макроячейки



от: Дмитрий Демьяненко
кому: All
дата: 17 Jan 2006
Hello, All

Вот вам альфа версия ULA размером в 64 макроячейки
которая перкарасно впихивается к примеру в Altera EPM7064 MAX
При это схемка мультиплекит 20бит адреса

Подерживает 4 видеорежима
1. 256х192 стандартный
2. 256х192 железный мультицвет
3. 512х192 монохром (со спецификой пока)
4. GigaScreen

За основу взята схема от KAY-1024 (недеюсь я ее не поуродовал)
Особенности режима 512x192 в том что атребуты экрана устанавлеваются
такие какие были у последненго считаного знакоместа до переключеия.

nVOE - нога для формирования гашения сигала
Остальные названия взяты по схеме KAY-1024 (вереней ANT-1024HD
sblive.narod.ru).

Во вложении snapshot проекта для Altera Quatrus исходник на VerilogHDL

Файл: zx_sinhro.rar http://zx.pk.ru/attachment.php?attachmentid=2315

от: Orionsoft
кому: All
дата: 17 Jan 2006
Hello, heroy

her> Вот вам альфа версия

Правильной дорогой идём товарищи !!!

от: Дмитрий Демьяненко
кому: All
дата: 17 Jan 2006
Hello, Orionsoft

Какая наиболее коректная длительность сигнала INT
хотя бы для KAY и Penatago

от: Дмитрий Демьяненко
кому: All
дата: 17 Jan 2006
Hello, caro

Принимаем к сведению
Учитывая специфику ограничения в 64 макроячейки делаю
сигнал INT длиной в 4 микросекунды
всего лиш подкинуться к счетчикам

А насчет считать сигналы M1 к сожалению места нет

от: Alex Freed
кому: All
дата: 26 Jan 2006
Hello, Conan

Con> Можно сделать INT в два раза короче, при переключении в TURBO, но это
Con> усложняет схемотехнику.

Может я чего не понимаю, но мне представляется так:
5 разрядный счетчик (1 корпус) и RS тригер - 1/2 корпуса.
тригер устанавливается по КСИ и счетчик считает CPU clock. Досчитал до 32 -
сброс RS тригера. Очень точно и автоматом настраивается на турбу. Hет?

от: Konstantin Sviridov
кому: All
дата: 26 Jan 2006
Hello, alexfreed

ale> Может я чего не понимаю, но мне представляется так
ale> Очень точно и автоматом настраивается на турбу. Hет?

Да. Все именно так, как вы сказали. Добавляется пара (тройка) корпусов мелкой
логики.
P.S. Сейчас такое усложнение выглядит незначительным, в конце 80-х начале 90-х
оно обошлось бы рублей в 10 стоимости (при зарплате 150). Если пересчитать на
современные соотношения, то станет понятным, почему наиболее простые модели
(<Ленинград 1>) были столь популярны.

от: Дмитрий Демьяненко
кому: All
дата: 26 Jan 2006
Hello, alexfreed

ale> 5 разрядный счетчик (1 корпус) и RS тригер - 1/2 корпуса.

Итого 5 макроячеек а хочется (64 всего что бы было 63 занимает все осттальное)
к томуже анало микрухи LVTTL стоит 1.5$ доллра

Тут если пересхочить дальше на болшее по эмкости семейство останется много
места пустого, ареализовать что то культурное внутри не хватает пинов у
микрухи, я и так в этом проекте отключил JTAG что бы накалядовать еще 4 ножки
у MAX 3064 этой лабуды нет так что там по умолчаниюна 4 ноги доступных
пользователю больше

от: Alex Freed
кому: All
дата: 27 Jan 2006
Hello, heroy

her> 64 всего что бы было 63 занимает все осттальное

Очень не советую пытаться использовать 100% ресурсов. Всегда должен быть
небольшой запас потому что почти всегда приходится что-то слегка менять.

her> реализовать что то культурное внутри не хватает пинов у микрухи

Похоже будут у нас 2 разных варианта. У меня сейчас довольно плотно заполнена
XC95108. Благо у нее 84 ноги, так что с ногами все хорошо. Внутри делается и
видео, и MMU. Снаружи почти ничего не остается для мелкой логики.

от: Дмитрий Демьяненко
кому: All
дата: 27 Jan 2006
Hello, alexfreed

ale> Благо у нее 84 ноги, так что с ногами все хорошо

У max7064 тоже 84 но вот использовать все нельзя хотябы потому что питание туды
сувать надо

ale> Похоже будут у нас 2 разных варианта. У меня сейчас довольно плотно
ale> заполнена XC95108.

Какая разница описание и там у тут походит без проблем просто исходник надо
писать как минимум что бы его поняли оба синтезатора.

ale> Очень не советую пытаться использовать 100% ресурсов

Используеться что то около 45 тригеров (и по альтеровски соответственно
макроячейки), остальные заняты трасировкой и логикой так что там есть где
разгулятся а вот тригеры уже некуда сувать :)

от: Дмитрий Демьяненко
кому: All
дата: 27 Jan 2006
Hello, heroy

А по поводу минимума корпусов так можно к примеру из альтеры взять ciclone II
там проц влазиет при частоте около 40МГц и все остальное и по прайсу на
altera.ru стоит 16 долоров плус микруха конфигурационного ПЗУ 3 долора и будет
весь спек вместе в ВГ93 в одной микрухе так же туда и атемгу или другой
микроконтролер всунуть можно и все навороты (всеми мечтаемые спрайтовые движки,
перемещение блоков памяти и тд), но большинству микруху в 144 лапы без паяльной
станции не припояты так что такое не расматриваю изначально
а плата будет по размеру гнезд натыканых на неё

от: Alex Freed
кому: All
дата: 28 Jan 2006
Hello, heroy

her> А по поводу минимума корпусов так можно к примеру из альтеры взять
her> ciclone II

Это я уже делал. Правда не спек, а Apple и БК0010. И на готовой плате за $99.
Hадо будет на ней же сделать прошивку для спека.

от: Alex Freed
кому: All
дата: 28 Jan 2006
Hello, heroy

her> У max7064 тоже 84 но вот использовать все нельзя хотябы потому что
her> питание туды сувать надо

Hу тогда я не знаю куда ты ноги деваешь. Hа i/o их 69 остается.

module zx2_dram(clk14,reset,R,G,B,bright,sync,ioreq,memreq,refr,wr_n,rd_n,M1,
ram_addr_m,ram_data,cpu_data,cpu_addr,cas_n,ras_n, A14_rom);

Macrocells Product Terms Registers Pins Function Block
Used Used Used Used Inputs Used
102/108 ( 94%) 273 /540 ( 51%) 65 /108 ( 60%) 56 /69 ( 81%) 201/216 ( 93%)

Т.е. еще 13 ног в запасе.

от: SMT
кому: All
дата: 30 Jan 2006
Hello, heroy

ld b,b и подобные нельзя - практически любая ленточная или tr-dos защита набита
ими

от: Дмитрий Демьяненко
кому: All
дата: 30 Jan 2006
Hello, CHRV

CHR> команд записью единички в какой нить порт

Согласен должно включаться так как достаточно нетривиальное расширение, зато
очень функционально

от: Дмитрий Демьяненко
кому: All
дата: 30 Jan 2006
Hello, alexfreed

Вот мыслеизложение

Думал я тут немного какой команды не хватает Z80? И вот придумал не хватает
катострафически команд межсегментного перехода, а потом подумал а можно ли без
медленных протонов изменить кристалл процессора, оказывается можно :)
необходимо доделать всего лишь ULA. Суть задумки заключается в использовании
очень умной команды LD B,B. Именно благодаря ее изумительным интеллектуальным
свойствам невозможное становится былью.

Работать это будет так
Команда межсегментного перехода JP 34:FC00 в интерпретации ассемблера будет
выглядеть так
LD B,B DB #34 JP #FC00
Заманчиво? Особенно если рассмотреть вариант под корректировки транслятора. A
ULA будет делать следующие шаги
1. LD B,B ага команда межсегментного перехода, ну скормим ее процессору
2. DB #34 вот эта интересующая нас страничка запомним ее а процессору скормим
команду NOP
3. JP #FC00 а вот эту команду мы тоже скормим процессору
4. Теперь ждем цикла M1 и когда он выступить сменим страничку на запомненную
Просто?

Дальше подумал переход это хорошо, но как-то не алгоритмично получается, надо
бы вызов в подпрограмму и возврат сделать
CALL 34:FC00 и RETF призовем на помощь великие и могучие команды LD C,C и LD
D,D

Итак рассмотрим команду CALL 34:FC00 будет это дело у нас интерпретироваться
так
LD C,C DB #34 CALL #FC00

Рассмотрим, что будет делать ULA
1. LD C,C ага команда межсегментного перехода, скормим ее
2. DB #34 запомним номер странички а процессору скормим команду PUSH HL
3. Процессор ничего не подозревая выполняет команду PUSH HL а мы в этот момент
подло его отключаем от шины данных и выставляем туда по очереди #0034 :)
4. CALL #FC00 скормим ее процессору
5. Ждем цикла M1 и по наступлению меняем номер страницы

Осталась самая подлая команда RET на время ее исполнения придется намертво
отключить все виды прерываний.
LD D,D POP HL RET

1. LD D,D ага команда межсегментного возврата, скормим ее
2. POP HL скормим и эту команду
3. Во время выполнения этой команды мы запомним младшую половину читаемого по
шине слова где то внутри ULA
4. RET скормим ее процессору
5. Ждем цикл M1 и меняем номер странички

Вот так. Hо есть одно но в каждой процедуре которая имеет тип FAR (тобиш
вызывается командой межсегментного вызова подпрограммы), должна иметь шапку
которая меняет местами два слова на вершине стека (это чтобы работала команда
длинного возврата), но я думаю можно поплатиться за такую расширяемость
программного обеспечения и фактически можно вызывать процедуры в пределах 4Мб,
почему 4? А потому что старшие два бита адреса всегда установлены в 1 и
фактически не участвуют в адресации получаем (8+14)^2 =4Мб . А почему старшие
два бита 1, а потому что окно проецирования дополнительной памяти располагается
по адресам #C000-#FFFF и имеют общее свойство два старших бита такие как
упоминалось выше

Вердикт?

PS Можно расмотреть еще две команды это переключение страницы LD E,E DB #34 и
переключение страницы на время исполнения одной команды LD H,H #34 своеобразный
префикс замещения сегмента.

И еще одну LD (HL),(HL) назовем ее HALT и пусть она останавливает процессор :)

от: Чунин Роман
кому: All
дата: 30 Jan 2006
Hello, SMT

SMT> ld b,b и подобные нельзя - практически любая ленточная или tr-dos
SMT> защита набита ими

Hу ничего ни мешает активировать режим LD r,r команд записью единички в какой
нить порт. По умолчанию неактивировано. Повторюсь идея не нова (в Спринтере это
использовалось) и достаточно удобна.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Письма - Ответы редакции на письма читателей по поводу работы программы MMD и ее дальнейшем развитии.
Чудо техники - Десять байт.
Железо - Блоки питания.
Лето в лесу - Любовный и сладкий миp Ли Вонг Яна.
Mail - errata: игры из СССР

В этот день...   24 апреля