- Эмуляторы БК0011М под Win7
- [+] Старые сообщения (29)
-
? Patron - 18.03.2012 18:14
Правда, логичнее всего изменять начальную позицию отображения кадра в видеобуфере только перед началом вывода очередного кадра..
...
Но если программы БК так сильно ограничены в возможностях влиять на формирование изображения, то как знание точного положения позиции вывода на экране и в буфере может помочь в создании каких-то необычных "эффектов" ?
Чем изображение на экране при запуске такого рода демок на реальной БК-0010 отличается от "обычного" ???
-
? wm - 18.03.2012 19:58
Если изменять текущую палитру перед выводом на экран строго определенных линий сканирования, то можно добиться многоцветных эффектов (multicolor) - те отображать на экране больше цветов, чем положено - с разной палитрой в разных строках. Этим в БК демки в основном занимались, на других старых компах-консолях это и в играх достаточно часто использовалось. Демка "Insult GigaDemo" на БК с этой точки одна из самых показательных (плюс несколько других). Причем синхронизируется она не по таймеру, а после возникновения прерывания вертикальной синхронизации гонит блок кода из повторяющихся инструкций MOV etc. с периодическими изменениями палитры. Т.е. изменение палитры в нужной строке зависит от точности эмуляции таймингов инструкций CPU. Я ей как раз пробовал заниматься пару недель назад - в гостевухе моего сайта (http://xbase.ru/index.php?sovietpc) в самом верхнем сообщении есть несколько скриншотов с мультиколором в "Insult Gigademo". Правда, не факт, что правильных (пока), БК-0011М у меня нет их проверить, только БК-0010.01.
-
? wm - 18.03.2012 20:09
По вертикальному прерыванию и затем таймеру (недокументированному) синхронизируется тест времянок экрана от Sandro.
-
? gid - 18.03.2012 20:18
Необычные эффекты в большинстве своём выражаются в следующем:
экран условно разделяется на горизонтальные участки, содержимое которых отображается разными палитрами, это так называемый "мультиколор".
Т.к. мы можем примерно отследить по таймеру, какая строка экрана в данный момент прорисовывается лучом кинескопа, то в определённый момент переключаем палитру, и следующий горизонтальный участок уже отрисовывается другими цветами, потом снова переключаем палитру, и снова, и снова. В общем смысл, надеюсь, понятен.
Правда эти демки работают только на БК0011(М), а не на БК0010, на десятке из всех спецэффектов - манипуляции с регистром 177664.
Ещё можно, подобрав задержки и манипулируя значением регистра рулонного сдвига 177664 добиться эффекта, когда на экране образуется либо не прорисовываемый участок, либо прорисовываемый дважды, но это не столь эффектно и интересно.
Довольно близко к этому подошёл Александр Тишин со своим эмулятором на Яве BK2010.
Кстати, в ответ на первый пост - этот эмулятор отлично работает как под Win7, так и под Линуксом, лишь бы ява-машина была.
-
? Patron - 18.03.2012 20:36
По идее, если регистр 177664 копируется видео-контроллером БК-0010 во время обратного хода строки - то можно сделать на экране несколько "пустых" строк растра, можно сделать, чтобы две картинки чересстрочно "проезжали друг сквозь друга" по вертикали, но нельзя сделать в середине соседних строк растра "пустой" квадрат или другую фигуру.
Если же любое изменение регистра рулона сразу смещает позицию чтения в буфере, то тогда возможностей для манипуляций становится больше.
Так как на самом деле? В какой момент изменение регистра 177664 смещает позицию чтения в буфере - немедленно или только с началом вывода следующей строки растра ???
-
? wm - 18.03.2012 23:08
Сорри, не заметил, что вопрос конкретно про БК-0010. Там таки да, разве что скроллирование, поэтому тайминги подгонять нет особого смысла. Но демки-то вроде как писались в основном под 11М.
-
? gid - 19.03.2012 10:14
сделать, чтобы две картинки чересстрочно "проезжали друг сквозь друга" по вертикали тоже не получится, не хватает быстродействия, скорее всего, контроллера ВП1-037, т.к. в реале получается отчаянно мерцающее малопонятное нечто, по которому бегают, если удачно подобрать задержки, чёрные полосы не успевающего прорисоваться растра.
-
? alex savelev@ - 19.03.2012 10:55
177664 использовался демописателями весьма мало, т.к. толку от него немного.
Ну можно заранее подготовить фреймбуффер, потом сразу вывести готовую картинку. Вообщем все ну да еще рулонный сдвиг. Короче весьма редко в демках его пользовали.
-
? Patron - 19.03.2012 11:54
>> не хватает быстродействия, скорее всего, контроллера ВП1-037
Слегка не понял. Допустим, что изменение 177664 влияет на ВП1-037 только в начале каждой строки ( это было бы логично ). Тогда у нас есть время, равное времени вывода целой строки растра, чтобы изменить смещение позиции чтения в буфере, откуда ВП1-037 будет извлекать данные для формирования следующей строки. Поскольку временные смещения всех строк от начала кадра известны - можно легко управлять выборкой данных для каждой строки растра отдельно. ВП1-037 при этом будет работать как обычно, просто считывая слова буфера с учётом регистра рулона и формируя видеосигнал строки.
Другое дело, если изменение 177664 смещает позицию чтения в буфере растра НЕМЕДЛЕННО - вот тогда мы действительно получим мерцающие "огрызки" строк, но это никак не будет связано с быстродействием ВП1-037, который по-прежнему будет просто считывать слова буфера с учётом регистра рулона и формировать видеосигнал строки.
Вот почему так важно точно знать, в какой момент изменение 177664 смещает позицию чтения в буфере растра - немедленно или только перед началом вывода очередной строки.
-
? gid - 19.03.2012 14:39
не буду фантазировать, про ВП1-037 я никогда и ни в каких справочниках не встречал никакой информации, то ли это сверхсекретная разработка, то ли он просто никому не нужен, то ли справочники мне нужные не попадались, всё что я знаю о его работе получено методом тыка и экспериментами с регистром 177664.
Говоря про быстродействие, я имел в виду быстродействие формирования видеосигнала. С частотой 50Гц прорисовывается весь экран целиком (про режим расширенной памяти говорить не будем). И нельзя никак этот процесс прервать, и вообще никак нельзя управлять лучом ЭЛТ.
Значение регистра 177664 применяется скорее всего в начале формирования новой строки растра, т.к. я смотрел глазами, а не приборами, не буду утверждать что так и есть, но я видел только чёрные полосы не прорисовываемых строк.
А ещё более вероятно, и это только что пришло мне в голову, что новое значение регистра применяется только после полного формирования видеокадра, а чёрные горизонтальные полосы, которые я видел - это просто результат не совсем точной синхронизации формирователя видео БК и старого советского телевизора, к которому БК был подключен.
-
? Patron - 19.03.2012 15:33
Логичны оба варианта влияния 177664. Если ВП1-073 считывает его в начале каждой строки - видимый рулон экрана (по идее) должен быть более плавным, нежели при считывании в начале каждого кадра.
В принципе, совсем не сложно написать тест, который это всё проверит.
Нужно повесить на прерывание кадровой развёртки ( вектор 0100 ) подпрограммку:
MOV #1, R1
MOV #1000., R2
MOV #370, R3
MOV #177764, R5
MOV #V100, @#0100
...
V100:
MOV R1, R0
SOB R0, .-0.
MOV (R5), R4
MOV R3, (R5)
MOV R2, R0
SOB R0, .-0.
MOV R4, (R5)
RTI
Данная подпрограмма начинает свою работу после начала вывода кадра и заканчивается до завершения вывода кадра.
Поэтому, ( если используемое значение #370 смещает позицию чтения на "пустой экран" ) если подобрав значения R1 и R2 - можно добиться "выключения" одной или нескольких верхних строк растра - значит значение в регистре 177664 влияет на каждую строку, иначе - только на кадр целиком.
-
? Patron - 19.03.2012 15:50
Правда, надо в регистре 177664 ещё бит "сжатия экрана" учитывать..
Типа, если просто загнать туда 0370 - включится режим отображения на 1/4 экрана..
-
? alex savelev@ - 19.03.2012 18:09
Patron, тратить свое время на это совершенно бесполезно - по простой причине - нет БКшного софта или демок которые бы использовали такие вещи. Во всяком случае, мне неизвестна ни одна БК-демка с похожими эффектами. Поэтому, для эмуляции, нет смысла заниматся такой фигней. Потратить свою энергию и время попусту можно и на другое) Ну это дело хозяйское конечно. Хотите заниматся ерундой - дело ваше, вперед.
-
? SKcorp. - 19.03.2012 19:04
Insult и CAT используют режим РП и прокрутку рулона.
-
? Manwe - 20.04.2018 20:44
Кто-нибудь помнит что нужно записать в 177664, чтобы получился режим расширенной памяти, показывающий наверху экрана область с 70000 до 100000? Понятно, что 9-ый бит равен нулю, а в младших битах что?
-
? Manwe - 20.04.2018 20:51
Судя по дизассемблированному ПЗУ БК0010, это число 230:
¤
; режим РП
104770) MOV #70000,202 - конец экранного ОЗУ (100000-70000)
104776) MOV #10000,206 - размер экранного ОЗУ
105004) MOV #5000,210
105012) MOV #400,164
105020) MOV #230,@#177664
¤
http://vak.ru/doku.php/proj/bk/bk0010-monitor
-
? BD - 20.04.2018 21:21
Проще, иначе следить за скроллом
MOV #214,R0
EMT 16
--------------
MOV #230,@#177664 - установть режим РП
MOV #1330,@#177664 - установить режим полного экрана
-
? Alexander "Sandro" Tishin@ - 23.04.2018 04:02
#230 -- это если используем последние 4 КБ экранной памяти для картинки. Так-то рулон работает и в режиме уменьшенного экрана. И да, как раз демка Cat это использует, например.
¤
Это во-первых. Во-вторых, отключение экрана работает мгновенно. Поэтому режим показа каждой второй строки в нижних 3/4 экрана таки реализуем технически. Правда, не могу придумать, зачем.
-
? Lasoft / Excess team - 03.05.2018 21:10
Пожалуйста, уточните, как это мгновенно? Регистр смещения считывается один раз на старте отрисовки каждого кадра, так что это не совсем мгновенно ) вот экран и палитра переключаются да, мгновенно.
-
? Lasoft / Excess team@ - 03.05.2018 21:13
и ещё могу добавить, что примерно переключение палитры происходит раньше чем переключение экрана, вп-шка успевает примерно 8 точек отрисовать с новой палитрой и только потом переключает экран, для примера команда MOVB RN,(R0), где R0=177663
-
? Alexander "Sandro" Tishin@ - 06.05.2018 13:48
Мгновенно -- это сначит бит расширенного экрана отрабатывается для каждого слова. Фактически он просто бланкирует сигнал WTI, если я не ошибаюсь. К кадровому синхроимпульсу привязан только рулон.
¤
Задержка между переключением палитры и экрана может быть самая разная. Достаточно попробовать разместить команду в быстрой памяти, например, в ПЗУ. При исполнении из ДОЗУ вмешивается арбитраж доступа в память, что более-менее стабилизирует задержку.
- << Форум