nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 04:59



Reply to topic  [ 63 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next
SpetSvga-2011 --> ТурбоСпец/MiniWhiz-2023 
Author Message
Devil

Joined: 06 Oct 2006 03:17
Posts: 856
Location: г.Лянтор,Сургутского р-на,ХМАО
Reply with quote
Софта с "Сябра", который под 480x256 или 512x256 никто и не писал. Автор сочинил комп, добавил разные разрешения и на этом всё остановилось.


17 Feb 2023 23:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
fifan wrote:
Автор сочинил комп, добавил разные разрешения и на этом всё остановилось.

Вот я всегда про это и думаю... что под красивые экраны писать некому потом... :-?

Но одна хорошая идея здесь промелькнула: если видео-ОЗУ "Специалиста" раздвинуть до 512х256,
то можно реализовать 4 цвета на точку.
Я никогда не делал цвет "Специалисту", т.к. 16 цветов на "полку" мне очень не нравилось... :-?

_________________
iLavr


17 Feb 2023 23:15
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
fifan wrote:
Автор сочинил комп, добавил разные разрешения и на этом всё остановилось.

Вот я всегда про это и думаю... что под красивые экраны писать некому потом... :-?

Ну 480x256 это 80 символов в строку например - типа здравствуй необъятная библиотека софта под CP/M-80 :lol:

Shaos wrote:
Ну тут тоже весь софт Специалиста стандартного и MX пойдёт - "в душе" ведь это всё тот же железочеловечный спец :idea:
(хотя не - софт что заточен под i8080 с его кривым DAA и обращением к портам с дублированием младшего байта адреса в старший - не пойдёт)

Хардыч на зхпк писал, что был софт для спеца, который к клаве обращался типа через IN #F8 что давало чтение из адреса #F8F8.
По идее это можно хардверно решить, дублируя младший байт в старший байт адреса таким же образом (причём сделав это отключаемой фичей).
И наверное DAA можно на шине поймать и вызвать какой-то софтовый трап для [не]корректной его обработки?...

_________________
:dj: https://mastodon.social/@Shaos


18 Feb 2023 01:43
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
...что был софт для спеца, который к клаве обращался типа через IN #F8 что давало чтение из адреса #F8F8.

В моём собственном железном Специалисте_МХ работал OUT 0FFH - он попадал в ячейку 0FFFFH, естественно.
Для нормального Специалиста_МХ обращение в эту ячейку памяти было запрещенным, но у меня оно аппаратно
перекидывало область экрана Специалиста на 0С000H - обратно только по RESET.
"Орион-128" становился популярным, и была мысль адаптировать его программы к Специалисту.
Благо, MX_RAMFOS позволяла оперативно заменять систему, т.к. вся была в ОЗУ.

_________________
iLavr


18 Feb 2023 02:28
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну у меня тоже можно будет начало экрана перекидывать :)
Причём куда угодно с шагом 256 байт...

_________________
:dj: https://mastodon.social/@Shaos


18 Feb 2023 02:43
Profile WWW
Senior

Joined: 01 Jan 2022 04:34
Posts: 162
Location: USSR, Tashkent
Reply with quote
делать надоть что то типа с100 или рп2014 или исабас - модульный. проц атдельно , видяха атдельно.

надоел специалист - воткнул вга или вдп или синклера видяху


18 Feb 2023 07:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
надоел специалист - воткнул вга или вдп или синклера видяху

Да я как-то всё же люблю старые компы в формфакторе клавиатуры... :wink:
У меня и "Специалист" такой был, и с 2000 года все рабочие компы дома - ноутбуки.
Из прошлого только P-166 остался в формате десктопа, ну и свою самую первую 286-ю
с ЕГА монитором я храню как раритет... :lol:

_________________
iLavr


18 Feb 2023 10:43
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
imsushka wrote:
делать надоть что то типа с100 или рп2014 или исабас - модульный. проц атдельно , видяха атдельно.

надоел специалист - воткнул вга или вдп или синклера видяху

Вот "Специалист MMX" от SpaceEngineer такой типа модульный:

Attachment:
M_MX_2.jpg
M_MX_2.jpg [ 138.51 KiB | Viewed 2264 times ]

Мне такие бутерброды не нра :roll:

_________________
:dj: https://mastodon.social/@Shaos


18 Feb 2023 22:38
Profile WWW
Senior

Joined: 01 Jan 2022 04:34
Posts: 162
Location: USSR, Tashkent
Reply with quote
Shaos wrote:
imsushka wrote:
делать надоть что то типа с100 или рп2014 или исабас - модульный. проц атдельно , видяха атдельно.

надоел специалист - воткнул вга или вдп или синклера видяху

Вот "Специалист MMX" от SpaceEngineer такой типа модульный:

Мне такие бутерброды не нра :roll:


где ж он модульный ?? убери платы расширения и станица чистый специалист.
а я говорю о подобии RC2014 или просто отдельной платы видяхи для RC2014


18 Feb 2023 22:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Можно на счёт знакомест графики отвести отдельную цепочку счётчиков, которая будет стартовать в нужном месте строки, а основная цепочка счётчиков может считать не знакоместа, как в оригинале, а пикселы - в этом случае можно более точно подогнаться под тайминги SVGA оставаясь в пределах более доставаемого кварца 56 МГц (28 х 2):
Code:
SVGA Signal 800 x 600 @ 60 Hz timing

General timing
Screen refresh rate   60 Hz
Vertical refresh   37.878787878788 kHz
Pixel freq.   40.0 MHz

Horizontal timing (line)
Polarity of horizontal sync pulse is positive.

Scanline part Pixels   Time  28MHz
Whole line    1056   26.4µs  739
Visible area   800   20.0µs  560 (8*70 -> 512:3+64+3, 480:5+60+5, 384:11+48+11)
Front porch     40    1.0µs   28
Sync pulse     128    3.2µs   90
Back porch      88    2.2µs   61

Vertical timing (frame)
Polarity of vertical sync pulse is positive.

Frame part     Lines      Time
Whole frame    628   16.5792ms
Visible area   600    15.8400ms (44+512+44)
Front porch      1    0.0264ms
Sync pulse       4    0.1056ms
Back porch      23    0.6072ms
480 пикселов в строке можно добавить как один из графических режимов, выбираемых программно:
Code:
0 0 -> 384 (default)
0 1 -> 480
1 0 -> 512
1 1 -> hardware text mode 80x32 (future)
для 384 видеопамять имеет размер #3000
для 480 - #3C00
для 512 - #4000
для текстового режима 80x32 - #A00
начало видеопамяти по умолчанию как известно #9000
для 480 пикселов в строке начало надо сдвинуть до #8400
для 512 пикселов в строке - до #8000
а для текстового режима видеопамять может подняться до #B600, освободив тем самым 9.5 килобайт для программы пользователя.

P.S. Если символы в текстовой видеопамяти располагать не линейно, а вертикальными колонками, и знакогенератор зашить в отдельно стоящий 2Кб ПЗУ, то наверное можно даже и на рассыпухе его организовать ;)

P.P.S. Новые цифры для счётчиков:
0...559 - видимая часть экрана (до #22F = 10 0010 1111)
- для режима 512 cчётчик адресов стартует после 23 (#017 = 00 0001 0111) и считает 64 знакоместа (до #3F = 11 1111)
- для режима 480 cчётчик адресов стартует после 39 (#027 = 00 0010 0111) и считает 60 знакомест (до #3B = 11 1011)
- для режима 384 счётчик адресов стартует после 87 (#057 = 00 0101 0111) и считает 48 знакомест (до #2F = 10 1111)
560...587 - передний порожек (до #24B = 10 0100 1011)
588...677 - синхроипульс (до #2A5 = 10 1010 0101)
678...738 - задний порожек (до #2E2 = 10 1110 0010)

Для начала можно внимательно поглядеть как считают счётчики в MX^2.
Первый счётчик принимающий 40 МГц выдаёт 20M,10M,5M и 2M5 сигналы.
Второй и третий счётчики принимает на счётный вход 2M5 (однако в моей вариации схемы почему-то туда идёт N2M которые есть инвертированные 2.5 МГц) и выдают биты счётчика знакомест X0,X1,X2,X3,X4,X5,X6.
Второй и третий счётчики сбрасываются путём подачи сигнала HRS=!(X0&X6) на вход синхронной загрузки нулей - это значит, что оно сбросится на 65м знакоместе, просчитав 66 раз, что вполне соотносится с времянками 800x600@60 (см.выше) - 1056/2/8=66.
Ну и далее цепочка из трёх счётчиков считает строки, принимая в качестве счётного входа по спаду сигнал HS (на моей схеме это HSYN - горизонтальный синхроимпульс) и сбрасываясь по VRS в результате получаются биты номера строки Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8 (причём самый младший бит счётчика игнорируется, а Y0 это уже на самом деле первый бит - т.е. строки повторяются по 2).
В формировании логики графического контроллера принимает участие сигнал ALD, который в схеме от Fifan-а просто идёт с выхода переполнения первого счётчика, а в моей схеме как-то хитро замешан 2M & !5M & 10M & 20M - видимо это из-за того, что далее на счётчики идёт инверсный 2M, поэтому будем придерживаться схемы (в том числе нумерации микросхем), которую нарисовал Fifan т.е. ALD = 2M5 & 5M & 10M & 20M и далее на счётчики идёт прямой 2M5.
Видимая часть изображения должна составлять 48 знакомест и оно похоже смещено на 16 от начала счёта (см. ниже) плюс по одному знакоместу слева и справа должен быть бордюр, который является частью видимых 800 пикселов (400 при пиксельклоке 20 МГц, что на 16 больше, чем стандартные 384).
Триггер DD10.1 устанавливается по фронту сигнала X4 и асинхронно сбрасывается по !(ALD & X6) выдавая на инверсном выходе сигнал HBL.
Триггер DD10.2 устанавливается по фронту сигнала X0 & X3 и асинхронно сбрасывается по !(X0 & !X6 & !X3 & HBL) выдавая на прямом выходе сигнал HS.
Вот примерно что получается:
Code:
                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6
X = 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

ALD _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
      _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
X0  _| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |
        ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___     ___
X1  ___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|   |___|
            _______         _______         _______         _______         _______         _______         _______         _______
X2  _______|       |_______|       |_______|       |_______|       |_______|       |_______|       |_______|       |_______|       |____
                    _______________                 _______________                 _______________                 _______________
X3  _______________|               |_______________|               |_______________|               |_______________|               |____
                                    _______________________________                                 _______________________________
X4  _______________________________|                               |_______________________________|                               |____
                                                                    _______________________________________________________________
X5  _______________________________________________________________|                                                               |____
                                                                                                                                    ____
X6  _______________________________________________________________________________________________________________________________|
    _______________________________                                                                                                 ____
HBL                              . |_______________________________________________________________________________________________|?.
    _                 __________________________________________________________________________________________________________________
HS   |_______________|

Точками я пометил места где должно начинаться и заканчиваться видимое поле в случае полных 800 пикселов - т.к. там по одному знакоместу слева и справа расположен бордюр (который всегда чёрный в схеме MX^2). В нашем случае горизонтальный бордюр будет сильно шире (т.к. частота больше) и его ширина будет разной для разных видеорежимов. И кстати не совсем понятно, почему импульс HS получается отрицательный т.к. в описании к 800x600@60 написано, что оба синхроимпульса - положительные.

Для наших целей надо поменять только логику счёта горизонтальных счётчиков плюс добавить генерацию сигнала бордюра в вертикальных. Вертикальные пределы в MX^2 получаются на триггерах DD17.1 и DD17.2 - в обоих случаях тактируются они сигналом X3. Сигнал VRS (сбрасывающий вертикальные счётчики) получается с инверсного выхода триггера DD17.2, на вход D которого подаётся !(Y8 & Y5 & Y4 & Y3 & Y1), т.е. сигнал сброса получается на 100111010й строке, что есть 314 пар или 628 строк (что соответствует описанным выше времянкам разрешения 800x600@60). Сигнал вертикального синхроимпульса VS получается с прямого выхода триггера DD17.1, на вход D которого подано !(Y1 & Y2 & !Y3 & Y4 & !Y5 & Y8) что должно срабатывать на номерах 1xx01011x:
100010110 = 278
100010111 = 279
101010110 = 342
101010111 = 343
110010110 = 406
110010111 = 407
111010110 = 470
111010111 = 471
но т.к. счётчики сбрасываются на номере 314 (628 строк), то отрабатывают только номера 278 и 279, что в строках означает 556,557,558 и 559, хотя если считать от начала видимых 600 строк оно должно начинаться на 601й строке (после одной строки "front porch") - значит изображение начинает показываться в 601-556=45й строке т.е. первые 45 видимых на мониторе строк это чёрный бордюр (на нашей смещённой шкале они расположены в самом конце на строках 582...627, что есть номера от 291 до 313) и также чёрный бордюр идёт после показа 256 раздвоенных строк (512 видимых), что есть номера от 256 и до 277 (причём последняя линия это тот самый единичный "back porch") - нам надо выделить сигнал бордюра в правильных номерах, чтобы подавать цвет бордюра вместо черноты там, где это будет нужно, а именно в 256...276 и в 291...313 номерах:
1 0000 0000
...
1 0001 0100
и
1 0010 0011
...
1 0011 1001 (последний номер в шкале счёта).

По ходу надо сплошной сигнал бордюра иметь для краёв экрана, поэтому его надо получать на триггере, который взводится на 1 0010 0011 и сбрасывается на 1 0001 0100.

P.S. Тут выходит что ширина бордюра сверху выше на пару строк, а снизу - меньше на пару строк, т.е. видимое изображение сдвинуто вниз на 2 строки - по идее это можно "починить" пересчитав номера, а можно пока оставить как есть, чтобы не трогать основную часть логики вертикальных счётчиков ( а так поставить бы галки вместо логики - сэкономилось бы куча корпусов ; )

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2023 01:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Получается, что сдвинутость экрана по горизонтали на 16 знакомест упрощает в MX^2 формирование адреса байта в видеопамяти т.к. адрес идёт от #90yy до #BFyy:
#90yy -> 1001 0000 yyyy yyyy = ((#80 | 16)<<8)|Y
...
#BFyy -> 1011 1111 yyyy yyyy = ((#80 | 63)<<8)|Y

А в нашем расширенном варианте надо уметь считать от любого произвольного стартового адреса #zz00 и этого можно достичь делая предзагрузку горизонтальных счётчиков знакомест в нужное значение вместо нуля, что значит они должны уметь считать во всю ширь - 8 бит. Также можно сделать так, чтобы регистр стартового адреса по ресету получал значение #90 (1001 0000) - в этом случае все режимы включая стандартный получат возможность двигать свои экраны:

Attachment:
VAD.jpg
VAD.jpg [ 35.19 KiB | Viewed 2204 times ]

Либо надо просто поставить 8-битный регистр (можно даже без сброса) и поправить загрузчик в прошивке так, чтобы он при старте записывал в этот регистр значение #90 - в этом случае на это дело вместо 3 корпусов (как на картинке выше) уйдёт только 1.

P.S. Проблема с предустановкой счётчиков - эти счётчики будут знать где начать счёт, но не будут знать где остановить счёт, так что скорее всего останавливать их будет та же внешняя цепочка горизонтальных счётчиков, которая их и стартовала - напомню, что они считают с точностью до пиксела:
0...559 - видимая часть экрана (до #22F = 10 0010 1111)
- для режима 384 счётчик адресов стартует после 87-го пиксела (#057 = 00 0101 0111) и считает 48 знакомест - до 87+48*8=471 (#1D7 = 01 1101 0111)
- для режима 480 cчётчик адресов стартует после 39-го пиксела (#027 = 00 0010 0111) и считает 60 знакомест - до 39+60*8=519 (#207 = 10 0000 0111)
- для режима 512 cчётчик адресов стартует после 23-го пиксела (#017 = 00 0001 0111) и считает 64 знакоместа - до 23+64*8=535 (#217 = 10 0001 0111)
560...587 - передний порожек (до #24B = 10 0100 1011)
588...677 - синхроимпульс (до #2A5 = 10 1010 0101)
678...738 - задний порожек (до #2E2 = 10 1110 0010)

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2023 11:34
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Чото 56-мегагерцовый осциллятор не так то просто найти.
Кварц чтоли взять и нагородить генератор на инверторах?
P.S. Хотя нашёл чото на ебее - поглядим...

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2023 16:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вопрос к достопочтенной публике:
Code:
D3 = 0 - бордюр включен, 1 - бордюр выключен (можно переключать кнопочками)
Сделать ли мне бордюр по умолчанию включённым или по умолчанию выключенным? Я в любом случае хочу вывести кнопочки, чтобы вручную можно было бордюр включить или выключить (взведя или сбросив соответствующий триггер).
Напомню, что я туда хочу отправлять цвет с ВВ55 т.е. оно как бы будет восьмицвет (который на самом деле "девятицвет" т.к. цвета будут иметь повышенную интенсивность включая чёрный, превращая его в серый).
Я так подозреваю, что обычная специалистовская запись на магнитофон через монитор будет генерить разноцветные полосы на бордюре вот прямо щас (т.е. даже не как на спектруме, а как на комодоре будет) - в этом смысле бордюр хотелось бы иметь включённым изначально :)

И ещё я хочу (как и писал выше) сразу же сделать трюк с копированием младшего байта номера порта в старший, чтобы сымитировать поведение 8080 при обращении к памяти через порты - в этом случае будет работать "хитрый" софт, который к клаве, звуку или цвету обращается по компнде IN. В будущем, когда добавятся настоящие порты, эту фичу можно сделать отключаемой (битики под это я уже предусмотрел).

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2023 16:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Ещё возможен режим "цвет на точку", когда при сохранении того же разрешения 512x256 и использовании обоих половинок видеопамяти и памяти цвета можно получить 16 цветов на точку:

Image

При этом правда будет несколько запутанным вывод такой картинки:
- первая пара точек плашки берётся из байта в основной памяти цвета;
- вторая пара точек плашки берётся из байта в основной памяти;
- третья пара точек плашки берётся из байта в запасной памяти цвета;
- четвёртся пара точек плашки берётся из байта в запасной памяти.

Что-то мне кажется, что поддержать такой режим было бы совсем несложно - просто вместо двиганья битов плашки на мультиплексор, подставляющий то цвет фона, то цвет переда в зависимости от значения бита, надо просто подавать туда 10101010 и подключать на вход попеременно основную память цвета (2 такта), затем основную память графики (2 такта), затем запасную память цвета (2 такта), затем запасную память графики (2 такта) - адрес байта во всех четырёх местах уже должен быть выставлен правильно (кстати получается, что цветовые атрибуты тоже будут скроллироваться при перестановке начального адреса видеопамяти, но только в пределах 16 килобайт, что соответствует 64 столбикам, замкнутым в горизонтальное кольцо, в то время как основная память может скроллироваться по всей 64-килобайтной ширине что есть кольцо в 256 столбиков или 5 экранов с небольшим).

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2023 19:36
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Я так подозреваю, что обычная специалистовская запись на магнитофон через монитор будет генерить разноцветные полосы на бордюре вот прямо щас (т.е. даже не как на спектруме, а как на комодоре будет)

А мне, честно говоря, бордюр моргающий никогда не нравился... :osad:
Куда приятнее и информативнее был загрузчик с обратным счетчиком циферками, как на магнитофоне... :wink:

_________________
iLavr


20 Feb 2023 06:19
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 63 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 13 guests


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.