Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Суть в том, что команды включения акселератора будут вызывать немаскируемое прерывание NMI, по которому программа-обработчик будет брать из стека адрес возврата и разбирать по нему команды вплоть до LD B,B выполняя все действия софтверно (ну или через DMA).
|
18 May 2013 00:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Задействовать дополнительне разряды адреса от Z180 (A17,A18,A19) скорее всего не получится, т.к. бортовой MMU делит доступную память на 3 части, причём первая часть - это всегда начало памяти, а последняя - это всегда конец, т.е. перемещаться по большой памяти может только среднее окно, а нам надо 4 независимых области по 16K...
P.S. Хотя эти биты адреса можно для DMA пересылок использовать - ведь ему весь мегабайт физически доступен будет и скорость у него приличная - один байт за 6 системных клоков (частота кварца делённая пополам).
Last edited by Shaos on 18 May 2013 01:18, edited 1 time in total.
|
18 May 2013 00:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
В последнее время я пришёл к выводу, что логичнее не заморачиваться с ТВ стандартами (PAL vs NTSC), а ориентироваться сразу на SVGA 800x600 - универсальное решение получается. Текстовый режим 80x32 можно сразу растянуть на весь экран (размер знакоместа при этом будет 10x18 пикселов). А вот у графических режимов придётся размножать пикселы - 640x256 можно удвоить по вертикали (каждая строка будет повторяться 2 раза), разместив получившееся изображение 640x512 посередине экрана 800x600:
Режим 320x256 потребует раздвоения как по вертикали, так и по горизонтали:
Ну и добавится родной режим 800x600 - 16 цветов с двумя экранами и 256 цветов с одним.
Хотя наверное 400 надо сделать по горизонтали для 256 цветов, чтобы оставался один байт на 2 такта пиксельклока.
Видеопамяти при этом потребуется полмегабайта (со своим процессором?) или четверть мегабайта если без вторых экранов.
Кроме того можно добавить PC-шный текстовый режим 80x25 - чисто на всякий случай
P.S. Если уж пошли бордюры, то может и ZX-спектрумовский экран поддержать?
P.P.S. Согласно HardWareMan-овской ссылке режимы 800x600 у нас бывают такие:
Для Z180 20MHz в качестве задающей частоты можно взять 40MHz (800x600@60).
А для Z180 33MHz можно попробовать 36MHz (800x600@56) - вдруг заведётся...
Last edited by Shaos on 19 May 2013 13:10, edited 1 time in total.
|
18 May 2013 00:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Хотя может и не стоит замахиваться сразу на 800x600, а начать с "EGA on VGA" 640x350 с пиксельклоком 25.175 MHz?...
P.S. 640x400 и 640x480 тоже можно по ходу поддержать, т.к. у них пиксельклок тот же
P.P.S. Пока пожалуй остановлюсь на 640x350@70 и 640x400@70, тогда вместо вот этих режимов:
вводятся вот такие (жирным выделены программно "совместимые" со старым Спринтером):
P.P.S. По той же ссылке находим:
Значит пока вырисовывается такая картина - Z180 работает на кварце 25.175 МГц, а выдаваемая из проца системная частота PHI будет в 2 раза меньше - 12587.5 кГц, которую мы и заюзаем как пиксельклок (в 16-цветных режимах буду использовать обе фазы этого клока). В результате экранных пикселов будет в 2 раза меньше:
4 пиксела - горизонтальный перед;
48 пикселов - горизонтальая синхра;
20 пикселов - горизонтальный зад;
4 пиксела - левый бордюр;
320 пиксела - видео;
4 пиксела - правый бордюр.
т.к. на бордюр нам наплевать, то прибавим его к переду и заду, сдвинув всё влево, чтобы строка начиналась сразу с видео (так удобнее считать):
320+8+48+24=400
по вертикалям (бордюр тоже прибавлен):
350+37+2+60=449 для 350 строк
400+12+2+35=449 для 400 строк
В отличие от Спринтера хочу несколько иначе построить работу с расширенными видеорежимами - вместо подключения отдельных строк кадра в 16K окно, мы разделим всю видеопамять на куски по 16K и будем подключать именно их в адресное пространство процессора. Одно окно в 16384 байта может охватить 51.2 строки видео (одна строка это 320 однобайтовых пикселов или 640 полубайтовых) - округлим до 50. Выходит, что режим в 350 строк потребует 7 таких областей, а в 400 строк - 8 (т.е. всего видеопамяти будет 128K). Видеопамять можно построить так, чтобы её куски были относительно независимыми друг от друга и чтобы процессор тормозился только если он лезет в тот кусок, который в данный момент отрисовывается.
P.P.P.S. Открыл опрос вначале этого топика по поводу названия:
http://www.nedopc.org/forum/viewtopic.php?t=8869
Last edited by Shaos on 03 Jun 2013 17:41, edited 10 times in total.
|
18 May 2013 07:02 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
не увидел в списке 640х480х256@60!?
_________________Хочу стать всезнайкой
|
18 May 2013 11:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Памяти на него не хватит и 640x480 пока сильно другой режим - не срастается в лёгкую с 640x350 и 640x400
|
18 May 2013 11:50 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
А разве видео не будет отдельным устройством(видео карта)!?
_________________Хочу стать всезнайкой
|
18 May 2013 12:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Вот так будет выглядеть стандартный спринтеровский экран 640x256 в разрешении 640x350 с вертикальным смещением в 50 пикселов:
А вот так он будет выглядеть, если спринтеровская программа будет выводить свою графику 640x256 в новом режиме 640x400 (смещение не предусмотрено):
Ну и на последок - так может выглядеть гипотетический гибридный видеорежим, когда верхняя часть экрана - это стандартный спринтеровский графический экран 640x256, а нижняя - 12 строк в текстовом режиме, используемых скажем для отладки стандартных спринтеровских приложений:
P.S. Все картинки после подготовки в своих разрешениях были растянуты до 640x480 чтобы сохранить правильное соотношение сторон для читателя
Last edited by Shaos on 23 May 2013 14:19, edited 8 times in total.
|
18 May 2013 12:51 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Угу - только я хочу утолкать его в платку 10x10 см и обойтись без дорогих FPGA - максимум CPLD не очень большой ёмкости...
|
18 May 2013 12:55 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
с учетом CPLD 10х10 вполне достаточно, ну а какой объём памяти планируется?
_________________Хочу стать всезнайкой
|
18 May 2013 13:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
т.е. идея заключается в том, что смещение настраиваемое - можно скажем с тем же шагом в 50 строк сделать
P.S. отсюда новая идея - в режиме 640x350 (и соответственно 320x350) экран замкнуть в кольцо, у которого всегда будет видно 7 из 8 сегментов (т.к. видеопамяти у нас на 400 строк) - в теневом сегменте можно хранить спрайты для игр, а прокрутку как таковую теоретически для титров можно заюзать
Last edited by Shaos on 19 May 2013 12:34, edited 1 time in total.
|
18 May 2013 13:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Планирую взять 128K четырьмя блоками по 32K (CY62256 70ns) с независимым доступом - это чтобы процессор и видеоконтроллер мешали друг-другу только в 25% случаев (на самом делее меньше - ещё ведь синхросигналы всякие есть и т.д.), когда процессор читает или пишет в видеопамять.
P.S. Хотя для начала можно и одной микросхемой 128K сделать, а городки с интеллектуальной синхронизацией на потом отложить. Правда при этом в режиме 640x400 процент перекрытия с процессором будет 71% (при условии, что процессор подключил видеопамять в своё адресное пространство), а 640x350 - 62% (т.е. 2/3 времени работы с видеопамятью процессор будет простаивать в ожидании видеоконтроллера). В случае же 4 корпусов с "интеллектуальной" логикой разрешения конфликтов, время простоя процессора, работающего с видеопамятью, будет в 4 раза меньше - 17.8% и 15.6% соответственно.
P.P.S. Ещё один вариант - позвать HardWareMan-a, чтобы он нахимичил полностью прозрачную схему работы с видеопамятью для Z180
|
18 May 2013 13:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Подумалось ещё усугубить - сделать возможным подключать любой сегмент в любую из 8 областей экрана
Тогда нам нужно будет 4 порта, каждый из которых будет управлять двумя экранными местами (четверть экрана), куда можно будет подключать любой из 8 сегментов или вообще отключать сегмент:
bit 7 - управление нечётным экранным местом (1-запрещено, 0-разрешено);
bits 4,5,6 - номер сегмента в нечётном экранном месте (0...7);
bit 3 - управление чётным экранным местом (1-запрещено, 0-разрешено);
bits 0,1,2 - номер сегмента в чётном экранном месте (0...7).
Запрещённое экранное место закрашивается чёрным цветом, а в будущем три бита у запрещённого сегмента можно считать цветом заливки...
А вот текстовый экран можно по честному скроллить с шагом в одну строку - через порт, куда номер первой строки экрана будет заноситься и скроллинг точно также только для "старых" режимов будет доступен (2 и 3).
P.S. Если установка сегментов в графическом режиме будет доступна только в "старых" режимах, где вертикальное разрешение 350 линий, то экранных мест будет 7, а не 8 - соответственно в четвёртом порту будет 4 свободных бита, которые в будущем тоже можно подо что-то задействовать...
P.P.S. Может цвет бордюра ими переключать?
P.P.P.S. Наверное лучше экраны переключать в режиме 320x200 и палитры...
|
18 May 2013 15:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Всё таки разнёс оригинальные режимы Спринтера (256 строк) и новые (350 строк), т.к. в будущем (например когда дорастём до 800x600) можно будет эмулировать оригинальные режимы через другое разрешение - в 640x350 уж слишком сплюснуто выглядит. Ну и опять же будет возможность перемаппивать эти режимы на другие по желанию пользователя.
800x600 (сжато до 640x480):
640x350 (растянуто до 640x480):
Потом есть мысль таки разделить видеопамять на 4 микросхемы по 32K, которые будут использоваться не только как хранилище пикселов, но и палитры - т.е. когда работаем с одной микросхемой, три другие выступают в роли кодировщика цвета по палитре - я прикинул, всё влазит! Но т.к. память только 70 нс, то придётся некое подобие конвейера делать - пока один пиксел декодится в RGB, следующий пиксел в тоже самое время будет считываться из видеопамяти...
Last edited by Shaos on 19 May 2013 13:04, edited 3 times in total.
|
19 May 2013 10:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Как-то вяло голосуем - добавил ещё 2 варианта ответа - про то что ничего не получится и классический "мне пофиг"
P.S. Zpring пока побеждает - я сам к этому названию склоняюсь, т.к. придумал его применительно к Спринтеру ещё 8 лет назад, правда речь там шла только про эмулятор...
Last edited by Shaos on 19 May 2013 11:50, edited 2 times in total.
|
19 May 2013 10:28 |
|
|