Просмотр полной версии : Пишем игры под РК подобные
Ведущий_специалист
27.11.2021, 13:39
Всем привет. Пытаюсь собрать группу единомышленников для игрописания под ВМ80. Ниша не занятая, интересная и трудная.
Интерес именно в области рк совместимых (радио86-рк, апогей, кр04 ....). Вообще, учитывая минусы платформ, перечисленных выше, создается более совершенная платформа, которая сможет удовлетворить потребности программистов в этой области. Процесс идет. Интерес в другом, есть ли народ, кто готов поучавствовать в игрописании, разработке платформы..(свои пожелания).
Для начала , что проделано. Не спеша освоен z88dk , с помощью которого можно уже полноценно писать на си, и не ужиматься тем полу си полу ассемблером(известный автор из спб). Я в свою очередь портировал и практически запустил sim city на кр04, исходник требует глубокой модернизации и оптимизации в плане вывода графики. Подумываю о переносе на апогей. Это единственная платформа, которая позволит сделать это без тормозов и получить более менее играбельную прогу. Вобщем присоединяйтесь, одному как то сложновато в этом деле, учитывая что я немного слаб в ассемблере.
Kakos_nonos
27.11.2021, 14:09
Офигеть! Сим сити на рк! Будет огонь!
Я тестировал z88dk, это сейчас лучший си для 8080, но мне всё же показался тормозным.
Я делал эксперименты в использовании компилятора языка pl/m для 8080. Он генерил намного лучше код, но это всё таки другой язык, и не очень удобный по современным меркам. Однако писать быстрее чем на асме и не так заморочно.
Вот тут пример игры на pl/m для рк, вместе с исходниками.
https://zx-pk.ru/threads/28613-igra-quot-dvigalka-quot-na-apogej-rk.html
Ведущий_специалист
27.11.2021, 14:51
Офигеть! Сим сити на рк! Будет огонь!
Я тестировал z88dk, это сейчас лучший си для 8080, но мне всё же показался тормозным.
Да, тоже по быстродействию как то не зашло, но это лучшее пока что есть в природе. Нужно оптимизировать в плане вывода полигона. Если со спрайтами я мало мальски разберусь то быстрый вывод пиксела нужно прорабатывать на асме. Под кр04 это все запускается, но слайд шоу. Сейчас допаяю свой кр04 займусь плотно игрой.
Kakos_nonos
27.11.2021, 17:22
Я думаю, если делать симсити для рк, то лучше в текстовом режиме, как dwarf fortress например.
Это было бы и быстрее по коду и на экран больше бы инфы влезло бы. Так как пиксели очень большие и мало взелит инфы на экран.
PL/M80(Intel), кстати тоже работает и в CP/M-80 и в ISIS-II(Intel). Последний кажется даже на нем и написан с ассемблерными вставками. Там есть и многомодульность и многозадачность для RMX80(Intel). Другое дело, где все это взять, если даже на архивном сайте Intel-a этого нет. А у меня осталось просто в памяти после 5 лет работы на КРАМ( СССР аналог Intellec MDS Series II) разработка московского ВНИИЭМ, производился на АЭМЗ Александрия Кировоградской УССР. Дистрибутивы были на 8 дюймовых дискеттах.
Вот вроде и МАМЕ стал Intellec MDS Series II поддерживать, если не фейк конечно, сам не успел попробовать.
Ведущий_специалист
27.11.2021, 19:25
В апогей это все залезет очень хорошо, даже можно будет оцветнить. А в рк я пробовал (у меня рк с изменяемым знакогенератором), все быстро и круто но.... не хватило знакогенератора, буквально 15-20 символов из имеющихся 128. А кр04 выводя поточечно делает это ну краайне медленно, все надо переписывать на асм, и это возможно, и это будет работать.
А вообще я портировал это все из игры, разработанной на чб экране разрешением 126х64 точки )).
Kakos_nonos
27.11.2021, 20:44
Вывод пикселя на асме надо делать, да. Лучше даже вывод спрайта асмом делать.
Я писал код вывода пикселя на асме, вот, нащел:
CLEARDOT:
CALL GETDOT
CMA
ANA M
MOV M,A
RET
DRAWDOT:
CALL GETDOT
MOV B,A
MOV A,M
ORA B
;ORI 64
MOV M,A
RET
GETDOT: ;B,C
LXI D,VISIONS
MOV A,B
RAR
JNC NOF
INX D
NOF:
ANI 127
MOV B,A
MOV A,C
RAR
JNC NOS
INX D
INX D
NOS:
ANI 127
MOV C,A
PUSH D
CALL GPA
POP D
LDAX D
RET
VISIONS:
.BYTE 1,2,16,4
GPA:;B,C - X,Y
MOV A,C
ADD A
MOV L,A
MVI H,$DF
MOV E,M
INX H
MOV D,M
MOV L,B
MVI H,0
DAD D
XCHG
LHLD VADDR
DAD D
RET
VADDR: $xxxx тут адрес видеопамяти
cleardot стирает точку, а drawdot ставит, по положению B:C
- - - Добавлено - - -
Но вывод спрайта лучше не попиксельно делать, а сразу картинку гнать в память по-знаково, а то это супер-медленно будет
Ведущий_специалист
27.11.2021, 23:39
еще вопрос. существуют ли адекватные конвертеры картинок графических файлов в псевдографику апогея (в свое время vinxru такие делал для себя, но он совсем от дел отошел, мои просьбы остались без ответа). Я к тому, что было бы неплохо поиметь конвертер, который выдал бы массив апогеевских знакомест в виде картинки.
Kakos_nonos
28.11.2021, 17:17
Я писал такой на делфи, на делфи пишется быстро, в цикле по картинке проходим и генерируем байты исходя из точек изображения.
Вот мой пример (на делфи 7) как я генерировал картинку для заставки демы Ducks not forgive.
Вообще, апогей и рк это не сильно популярные компы для творчества, поэтому нормальных тулз для конертирования/рисования и прочего тут не совсем, как и не нормальных. Всё придется писать самому:v2_dizzy_roll:
Это сложно, но зато интересно, ты как будто первооткрыватель:v2_dizzy_botan:
Вот хороший стрим еще был, там Нордук рассказывает как писал дему на Радио-86 рк.
https://youtu.be/ri9OIrTTeP0
- - - Добавлено - - -
Вот генератор картинки. Если он видит белый цвет, то генерирует число 126, это я поставил заглушку, куда потом вручную поместил код изменения цвета.
Ведущий_специалист
28.11.2021, 23:41
Вчера колдовал с подпрограммой вывода точки на асме (которая несколько постов выше). Пробовал ее под апогеем (забыл конечно уточнить, под апогей ли она), в режиме графики. Что то там не то, не работает, выводит точку в 0 строке по y. Проект под z88dk с асм файликом и си, под netbeans. Вроде все компилит - а не работает. Под чистым асмом не успел сегодня покодить. зато завел (почти... я немного тут увлекаюсь самоделками) новодел кр04. Если есть интерес - могу проект расшарить, там особо ничего нового.
- - - Добавлено - - -
Был я на стриме нордука, здоровались с тобою. Немного не понял, конвертилка вставляет в массив атрибуты или нет?
Kakos_nonos
29.11.2021, 17:19
Эта процедура не для режима графики, а для обычного, где блоки 2*2 пикселя в знакоместе.
Вспомнил, да, извиняюсь, там нужна еще таблица смещений строк чтоб была в памяти, так что это не весь код. Чтоб избежать тормозного умножения на 78.
Вот код, его надо один раз запустить в начале проги. Он поместит в область памяти $DFxx таблицу смещений для строк, от туда уже те процедуры что выше будут брать координаты.
MOVERAM:
LXI D,0
LXI H,$DF00
MVI A,34
LXI B,78
NTACK:
MOV M,E
INX H
MOV M,D
INX H
XCHG
DAD B
XCHG
DCR A
JNZ NTACK
RET
Нет, аттрибуты не вставляет. Я их потом вручную вписывал.
Ведущий_специалист
01.12.2021, 00:56
https://cloud.mail.ru/public/SbYH/1gDaBKeML
- - - Добавлено - - -
https://cloud.mail.ru/public/SbYH/1gDaBKeML
А оно работает ))))).
Спасибо за код. На самом деле куча работы с игрой. дофига нужно оптимизации. Это графика рк86. Почему апогей? По памяти не влезло, так бы под ркшку сделал.
пс... картинку как ни вставлял как то сложно...https://cloud.mail.ru/public/SbYH/1gDaBKeML
Kakos_nonos
01.12.2021, 18:16
А оно работает ))))).
Офигенно! Если получится до конца, то будет вообще круто! Лучшая игра на рк получится!
- - - Добавлено - - -
Кстати, у рк надо чтоб изображение было чуть смещено вправо и вниз. Я не помню точно, сколько символов, но если запустить вашу игруна реале, то часть изображения будет за видимой областью
Ведущий_специалист
01.12.2021, 19:39
На классический рк86 не хватает каких то 5-6 килобайт. Я конечно попробую код ужать, но это уже после оптимизации по скорости. Оригинальный движок сделан покадрово и расчитан на смену минимум 15 кадров в секунду .... что ни один вм80 сделать не сможет. Поэтому потихоньку заменяю динамические части игры на статику, да и вывод картинок поточечно нужно переделывать на вывод спрайта. вот тогда игрулина "задышит". Теперь нужна ассемблерная подпрограмма вывода картинки (спрайта) на входе координаты размер и где лежит. Что то типа DrawBitmap(где лежит картинка в памяти,поместить по х,поместить по у,длина, ширина); Я то на си написал это но медленновато, на ассемблере будет гоораздо шустрее.
Kakos_nonos
03.12.2021, 18:13
Да, вывод картинки это обязательно на ассемблере, и надо чтоб картинка лежала в памяти уже в готовом формате (в блоках 2*2 на символ) Тогда будет очень просто и быстро.
летом решил вспомнить как писать на асме и переписал заново свою игру 90 года. Надо бы доделать под апогей еще с цветом и т.п. Но пока, что то не до этого
https://i.ibb.co/x1JzH2X/2021-08-03-21-38-16.png
https://i.ibb.co/D5B2vH0/2021-08-03-21-38-36.png
https://i.ibb.co/8jLsR46/2021-08-05-09-42-10.png
Ведущий_специалист
17.12.2021, 12:17
Вопрос к спецам. Где можно надыбать музычки для игры. Интересует что нить типа вестерна потом классики и че нить современного. Это нужно для озвучки сим сити в начале стройки в развитии и когда город живет. Также не помешали бы звуки сирены и сыпанья денег. Звук нужен для любого трекера ви53, все варианты хороши. Лазил по биполе - там чето мало музыки, либо я не там смотрю. Есть мысли конечно в денди покопошиться там музыки навалом... Но все таки.. Я знаю, есть среди нас музыкант...
пс... игру ближе к новому году хочу зарелизить. все получается.. но вот на релиз демки времени нет, поэтому просто игра. И да... в рк она скорее всего не влезет, шансы совсем малы, либо оно будет с убогой заставкой без картинок карт и прочего. Причина - нужно 40кБ памяти.
Причина - нужно 40кБ памяти.
Сейчас это особо не проблема - у многих есть дисководы! Можно сделать дисковую версию. В крайнем случае можно блоками на ленте хранить, по аналогии со Спектру-играми, например, Черепашки-ниндзя, и выводить надпись "Включите магнитофон для загрузки следующего блока/уровня"... Можно вообще извратится и сделать подгрузку с внешней ПЗУ...
Для графики я уже предлагал замену ПЗУ шрифтов на ОЗУ, можно спрайтами рисовать...
https://zx-pk.ru/threads/20714-pomechtaem-ili-vopros-o-videovykhode.html?p=713206&viewfull=1#post713206
Ведущий_специалист
18.12.2021, 11:57
Для графики я уже предлагал замену ПЗУ шрифтов на ОЗУ, можно спрайтами рисовать...
https://zx-pk.ru/threads/20714-pomechtaem-ili-vopros-o-videovykhode.html?p=713206&viewfull=1#post713206
Я 2 года назад полностью эту тему изучил и доработал. В результате появилась Пальмира. Там и цвет и ОЗУ с знакогенератором, ОЗУ по 0хС000 и прочие плюшки. Мало того - я ОЗУ знакогенератора разместил в адресном пространстве процессора. И это ОЗУ можно программно переключать как для работы в процессоре так и в работе с ВГ75. Помогали мне в этом Барсик и Виктор2312. Пальмира это отдельная тема, можно говорить об этом много. Рк шка получилась просто люксовая, учитывая совместимость с оригиналом на 95%.
Насчет загрузки думал, учитывая что есть отличная оболочка и биос SD карты - это не проблема.... Просто цель писания игры была совсем чтобы взять и на классике рк86 с 32кБ ОЗУ запустить новую графическую игру.
Вчера кстати немного доработал код, уже даже можно играть. ОНО пока слайд шоу и жутко бесит, но ускорение заметно уже процентов на 150. Заставка и прочие менюшки уже летают ))) это самое простое. Основной движок игры конечно же нуждается в еще большей оптимизации. Если с выводом игрового поля мало мальски со скрипом пошло, то в основном движке много деления и умножения что заставляет бедный вм80 пускать пар. Я конечно привык давно в этой области работать один, но призываю здравые(в ксоре)) умы в помощи. Пишу в z88dk со вставками ассемблера. Присоединяйтесь.
Ведущий_специалист
31.12.2021, 00:24
Сегодня немного потестил игру. ОНО живое. Зависания победил, глюки с памятью поборол. Тайлы все перерисовал. Получилось чудо ))), пока очень сырое с коряво перенесенными тайлами. И да сейчас глюк с курсором и пока что достаточно меделенно. Но это все живет, считает считает население , рисует пробки рисует здания в зависимости от населения и прочее.
https://cloud.mail.ru/public/CRQa/YAknWNsGo
Нужно много оптимизации. То что на скрине - это часа 2 жизни и развития.
Ведущий_специалист
04.02.2022, 13:20
Офигенно! Лучшая игра на рк получится!
Ну что же, тогда ловите "лучшую" игру под апогей ))). Дорабатывать это можно до бесконечности, но оно отнимает очень много времени. При заполненной карте строениями процентов на 60 начинаются адско жуткие тормоза. Я не стал уже разбираться где тормоз, главное оно работает, играть можно и интересно, запись на диск и чтение есть. Управление тоже очень продумано. Бету со временем доработаю в что то постоянное, но не факт. Вобщем выношу на суд. Игра полностью в псевдографике, без цвета, без звука. Делал спецом так - что в истории рк86-апогея такого жанра и движка еще не было.
Из обидного - игра занимает 40 килобайт, изначально планировалось создать это для классического рк86. Даже при желании подгружать картинки карты и тексты вышло порядка 35кБ. Короче не влазит.
Просьба модерам закрепить ссылку на игру сверху темы.
https://cloud.mail.ru/public/YNDe/31xgyU9uK
Ах да. Если будете запускать на эмуляторе Emu80 то нужна версия эмулятора не ниже 40395. Там реализована поддержка записи на диск (игра использует биос SD карты).
А где такую версию брать? На официальном сайте 4.0.379 от 28.11.2021
А где такую версию брать?
Даже скорее не версия, а некая промежуточная сборка с экспериментальной поддержкой записи на SD-карту по схеме vinxru. В репозитории этой ветки пока нет.
https://emu80.org/v4beta/Emu80qt_40395beta.7z
Ведущий_специалист
28.02.2022, 14:15
Всем привет. Выкладываю очередную и наверное здесь последнюю игру, ввиду нулевого интереса публики. Вобщем игра - производная 2048, с графикой и анимацией.
https://cloud.mail.ru/public/tMLx/vGNaTajDZ
Запускать под стандартным рк86 32кб версии. Игру проверял во втором часу ночи, проверил не до конца, могут быть и глюки в конце. Сохранение результата делать не стал. Мерцание при сдвижке можно убрать но ленно.
- - - Добавлено - - -
Я тестировал z88dk, это сейчас лучший си для 8080, но мне всё же показался тормозным.
https://zx-pk.ru/threads/28613-igra-quot-dvigalka-quot-na-apogej-rk.html
Z88DK просто отличный компилятор. 2048, которую я портировал с платформы на авр (автор японец какой то) наворотил в коде так - что даже я, прожженный си программер мало там понимал. На удивление скомпилилось все идеально, как надо, без гемороя. Единственное пришлось попотеть в переносе графике и оптимизации на ассемблере вывода на экран (здесь благодарности Пыхонину Виктору в поддержке и помощи).
Kakos_nonos
01.03.2022, 17:00
Поиграл в игры, эх, как же не хватает производительности рк-шке)
2048 круто выглядит, если убрать мерцание, то будет вообще мощно!
Уже 3-й вариант 2048 для рк, самый крутой!
самый крутой? где исходники?
anarchyman
02.03.2022, 03:03
Выкладываю очередную и наверное здесь последнюю игру, ввиду нулевого интереса публики.
Вы кстати зря по поводу нулевого интереса.
Много кто - просто не пишет.
Я например очень заинтересован, тем более ща у меня в новом исполнении на ESP появился PK.
Давайте продолжать :-)
Я тоже не могу остановиться и собрал в феврале еще одну РК-шку, теперь sram. :)
2048, которую я портировал с платформы на авр
В оригинале игра тоже останавливается после набора 2048 ? (:
Ну тогда предыдущие варианты для РК лучше, ибо ровно 2048 собирать - легко и скучно.
Oleg N. Cher
02.03.2022, 14:39
Выкладываю очередную и наверное здесь последнюю игру, ввиду нулевого интереса публики. .Эта реализация 2048 просто шикарная! Анимация на уровне! Немного портит мерцание. Кстати, а как планировалось его убрать? Перевести вывод через Монитор на прямой в видеопамять?
Я тоже сделал свой вклад в РК - портировал игру "Охота на лис" (https://zx.oberon.org/FoxHunt) со Спектрума, притом на языке Оберон. Это первая попытка сделать на Обероне игру для РК. По идее, должно быть интересно тем, кто любит Паскаль. Но нет. Интерес тоже нулевой. Не повод отчаиваться, главное закрыть свои гештальты. По большому счёту хотите делать для масс - занимайтесь не РК. А раз тянет заниматься РК, значит есть свой личный интерес.
Ведущий_специалист
02.03.2022, 20:29
В оригинале эта игра перерисовывает постоянно экран по типу фпс(несколько кадров в секунду) между выводом стирая! Весь экран. На частоте 16 мегагерц конечно же глаз этого не замечает. В случае с рк, я долго мудрил вообще, думая как это реализовать. В результате просто стираю всё поле целиком. Оттуда и мерцание. На данный момент вывод на экран сделан максимально быстро командами стека, по сути можно рисовать огромные спрайты без проблем, даже гифки и прочее. А мерцание убрать можно затирая при сдвижке тайла его предыдущее место. Будет красиво приятно и быстро
- - - Добавлено - - -
Игры будут ещё. Пишу просто в своё удовольствие. Чем больше вникаю в особенности z88dk и рк плюшки, тем лучше получается. Да на самом деле мне пофиг на сторонний интерес, дело в другом, не суть. Есть мысли ещё пару аркад в парк рк игр добавить
Oleg N. Cher
02.03.2022, 20:43
Впечатлён, весьма впечатлён. Но всё-таки лучше было бы именно для РК перерисовывать только то, что изменилось. И в 2048 это достижимо. Здесь, да и вообще на ретро-платформах, не очень работает стратегия перерисовки всего экрана. Банально скорости не хватает. Так что буду ждать более плавной 2048. Хотя конечно занимайтесь тем, к чему душа лежит. Я сам с трудом довылизваю начатое, когда осталась одна рутина и, в принципе, понятно, что это сработает.
Ведущий_специалист
02.03.2022, 22:58
Впечатлён, весьма впечатлён. Но всё-таки лучше было бы именно для РК перерисовывать только то, что изменилось. И в 2048 это достижимо. Здесь, да и вообще на ретро-платформах, не очень работает стратегия перерисовки всего экрана. Банально скорости не хватает. Так что буду ждать более плавной 2048. Хотя конечно занимайтесь тем, к чему душа лежит. Я сам с трудом довылизваю начатое, когда осталась одна рутина и, в принципе, понятно, что это сработает.
Открою секрет, сейчас в 2048 версии начала марта все поле перерисовывается раз 10 в секунду. Надо бы проверить точнее цыфру. Я немного отлаживаю код, уже есть наработки прорисовки 2д поля просто из куска карты и прокрутки кнопками управления курсором. Это работает, причем крайне быстро. РК это умеет. Скорости хватает. Мало того, прорисовка настолько быстра, что есть мысли сделать двойной экран, чтобы выводить по очереди их. А иначе неприятные глазу артефакты.
2048 в скором времени доработаю. мне уже дали несколько замечаний надо исправить, учитывая и пожелания здесь на форуме. И вообще я рад, что немного разбудил ВАС, РК шников...вывел из спячки....собирайте ркшки, новое ПО не за горами.
Shumadan
03.03.2022, 08:43
а нет ли видеоролика игры?
- - - Добавлено - - -
а тупанул, загрузил на эмуляторе. Здорово! Лишь мигающий курсор мешает. Нельзя его убрать?
Oleg N. Cher
03.03.2022, 11:24
Если я правильно думаю, на Радио-86РК нельзя. На Микроше можно.
- - - Добавлено - - -
Даже в цветном Dizzy 7/5 для РК мигающий курсор не убран.
Курсор можно убрать за грань вилдимого экрана. Но на эмуляторе видно всю не видимую на обычном телевизоре "рамку".
Между РК и мирошей разницы нет. Какая?
Oleg N. Cher
03.03.2022, 18:58
Есть разница. На Микроше курсор можно гасить. По-моему даже через подпрограммы Монитора.
в чем разница, схема насколько я помню абсолютно одинаковая.
Если я правильно думаю, на Радио-86РК нельзя. На Микроше можно.
Давно пробовал на реале, точно работает.http://archive.radio.ru/web/1992/04/018/
да в инструкции микроши есть полное описание програмирования ВГ75.
да в инструкции микроши есть полное описание програмирования ВГ75
и как цвет вывести, даже бейсик есть цветной
Темка то подзаглохла... Мде.
Ну да ладно. Всем интересующимся, небольшой справочник по адресации видеопамяти РКшки. Вообще конечно, инфа открытая и пересчитать каждый сам все может. Так что это для тех, кому действительно лень ). Делалось для себя, потому как изображение на вкладке журнала Радио лично меня не слабо сбило с толку. Ну и для 16кб версии там адресация, что по нынешним временам раритетный раритет...
Организация видеопамяти Радио-86РК (https://disk.yandex.ru/i/3YgvJ34JXYR1aw)
Ведущий_специалист
05.12.2023, 17:08
К новому году будет еще игра, если не забуду доделать.
Fishbone
06.12.2023, 09:08
обновите ссылки на игры, а то те уже мертвые.
Кстати насчет идей для игр... Был такой компутер за бугром - Sharp MZ-700, так у него тоже символьный экран 25 строк по 40 символов... Фиксированный знакогенератор и ничего - игр масса. Правда цветовая составляющая во многих играх не проработана. Ну да к РК это и не нужно )))
Ведущий_специалист
06.12.2023, 13:52
обновите ссылки на игры, а то те уже мертвые.
2048 немного нужно допилить. симсити тоже есть мысли как ускорить, применив нормальный (на ассемблере) генератор случайных чисел.
Ссылки появятся в скором времени.
А вот насчет игр - есть платфрма arduboy на нее уже выпущено очень много игр от простейших карточкоперемещалок до реальных 3д шутеров. Учитывая разрешение экрана этого ардубоя 128х64 точки - можно перетащить оттуда массу игр на рк86 и его производные. Я уже имею очень хорошие наработки по подпрограммам на z88dk+ ассемблер, и могу смело заверить, что 30% игр от ардубой платформы можно перетащить. Единственное - практика показывает, мало мальски горизонтальный скроллер с фоном и 3-5 большими анимированными спрайтами требует от вм80 МИНИМУМ 2,5 МГц тактовой. Уже при 1.8МГц заметный тупеж и мерцания. Поэтому пишу пока игру на пальмиру - потом обрежу все что можно и внедрю в апогей, благо там одно и то же почти только тактовая меньше.
Выскажу мысли:
1. Яндекс проводил Retro Games Battle, может попробовать написать им как-то коллективно, мол, добавьте в список Р86РК... Интерес к теме тем самым явно повысится.
2. За Arduboy наблюдаю практически с момента его рождения. Очень хорошо знаком с Ардуино, много проектов сделал на разных процессорах... И всё же там частоты совсем другие. Даже в версии с восьминогими ATtiny не менее 16 мГц. Экран там сам поддерживает функцию скроллинга, у него свой процессор. Кадр сначала отрисовывают в памяти, потом этот кусок памяти по I2C гонят в экран - вот этот момент наверное стоит попробовать. В других проектах видел, что в экран передают только изменения, очень помогает, если экран тормозной.
Сам я пытаюсь делать браузерную 3D игру на ПК, технические успехи есть, даже очень есть, а вот чтобы играть интересно было, это я не умею, ибо программист, а не геймдизайнер. В итоге вернулся к истокам вдохновения искать, а у вас тут так интересно оказывается!
Ведущий_специалист
11.12.2023, 12:18
Выскажу мысли:
1. Яндекс проводил Retro Games Battle, может попробовать написать им как-то коллективно, мол, добавьте в список Р86РК... Интерес к теме тем самым явно повысится.
Вылизывают этот несчастный спек как только можно. А ведь писать под вм80 куда интереснее. Действительно, устроили бы нормальный конкурс для советских компьютеров на вм80, может кто и написал бы еще пару тройку шедевров, а такие есть, лично знаю, могут и умеют... Была бы мотивация.
Ну это вряд ли... Если только самим не организовать од эгидой zx.pk - да только дело то оно затратное. А в частном порядке больших призов не назначишь. Ну и лично для меня РК самм по себе не очень интересен - только как платформа для начального изучения ассемблера. Те же Апогей, Партнер, Пальмира - все они являются более лучшими и развитыми вариантами 86РК. Не лучше бы проводить конкурс для них? Тем паче что у пальмиры, как я понял, перепрограммируемый знакогенератор, а значит все существенно проще, чем на остальных машинах с ВГ75
Ведущий_специалист
11.12.2023, 14:42
Тем паче что у пальмиры, как я понял, перепрограммируемый знакогенератор, а значит все существенно проще, чем на остальных машинах с ВГ75 Очень неплохая графика получается. Думаю скоро зацените.
Ведущий_специалист
11.12.2023, 18:24
обновите ссылки на игры, а то те уже мертвые.
https://github.com/maxadler1979/palmira/tree/main/games/2048
Выложил исходники, учитывая что там собрана почти полная SDK вплоть для подгрузки файлов с диска, подпрограммами вывода поточечно шрифтов графики ну и соответственно быстрого вывода спрайтов и очистки экрана.
Те же Апогей, Партнер, Пальмира - все они являются более лучшими и развитыми вариантами 86РК. Не лучше бы проводить конкурс для них? Тем паче что у пальмиры, как я понял, перепрограммируемый знакогенератор, а значит все существенно проще, чем на остальных машинах с ВГ75
Ну тут главное, чтобы играть было интересно, знакогенератор привлекательность игры поднимет, но геймплей не улучшит. На Ардубое графические возможности всего 128x64 точки, но игры привлекательные. Наверное за счет того, что пиксельарт и ASCII-арт всё это время тоже развивались.
Я играл во многие реализации 2048 на совершенно различных платформах, даже и без цифр, чисто картинками.
Неплохая реализация для рк-шки. Недочеты есть, но главное - нельзя продолжить после достижения цели. Обычно спрашивается - играем с самого начала или продолжаем текущую, чтобы заработать еще очков и набрать 4096 или 8192 и т.д.:))
https://s1.hostingkartinok.com/uploads/images/2023/12/2ef5f7e307632e297971a2403837f8de.jpg
Даже вот так уже интереснее:
https://image.spreadshirtmedia.net/image-server/v1/compositions/T730A14PA1534PT14X72Y0D11077951W18526H19278C21:13/views/1,width=550,height=550,appearanceId=14,backgroundC olor=000000,noPt=true/ascii-art-owl-shoulder-bag.jpg
CityAceE
13.12.2023, 09:07
рандомные картинки
Если уж делать такие картинки, то хотя бы в разрешении Радио-86РК. Так-то, если сделать 1024*768 символов, то ещё лучше всё будет выглядеть. Насколько я понимаю, у Радио-86РК видимая область составляет 64*25 символов.
Ведущий_специалист
20.12.2023, 19:56
Немного сдвинул с места код игры (пописываю иногда). Игра горизонтальная бегалка по жанру замочи их всех. Так вот.
Подшаманил 2й уровень. Сделал тайлы фона массивом, что конечно отожрало еще скорости и стало проблематично от слова совсем на 1,8 МГц. Ранее уровень выводил фон по сути 2мя тайлами константой, что хоть и давало ощущение плавного скролла, но немного создавало эффект дешевой игры. При 2 МГц более менее играбельно, что в принципе пока что радует. Игру пока что пишу под пальмиру, поэтому есть резон доделывать, на апогее уже бы задумался стоит ли при такой скорости.
Добавил крутой анимации при сдыхании врагов, благо памяти для графики еще дофига.
Как писал выше, теперь игра умеет ПЛАВНУЮ программную тайловую прокрутку спрайтами 15х16 точек. По сути я бы сказал что движок закончен.... и можно даже мастырить супермарио, но хз, это всего лишь скролл ОДНОЙ строки. Если сильно выпендриться, можно с таким же успехом сделать 2х 12 тайлов (12 вверху и 12 внизу, с теми же размерами 15х16 точек)... Больше?? Можно конечно!! Гоним бедный ВМ80 до 2,5 - 3 МГЦ и рисуем фон чуть ли не в 4-5 строк. Но это при том, что я оставил в движке запас на анимацию и передвижение до 5 спрайтов на экране с отработкой коллизий и нюансов типа определения движения побыстрее или помедленнее, отработкой врагами трюков типа ударов кусаний и подлянок. Вобщем движок почти доделан... но чем дальше тем лень больше. Учитывая очень малый интерес публики к этому всему, да еще писание кода и находу сочинение + конвертация графики.. так себе занятие... Чистый энтузиазм и ... чтоли возможность доказать что оно всетаки возможно.
Создавая пальмиру я не думал, что зайду так далеко с кодингом игр для нее, так бы конечно же внедрил туда вм85 эдак на 4-5 МГц. Запас есть конечно, ВМ80 гонится без проблем до 3х, да и пальмира позволяет это делать путем просто перепайки кварца на гф24.
Интерес есть. Какая-то магия присутствует. Я немного вспомнил, как на ассемблере писать под РК, но не более. Однако прорабатываю 3D сцену с персонажем, в которой присутствует экран. Следующим этапом попробую на экран в сцене выводить видеозахват с композита. Может хорошая сцена получится для записи видеороликов. Параллельно ищу идеи для игр на РК.
Да с идеями то проблем как раз не вижу... Самое простое - порт 3Д пакмана с ZX. Есть масса старых игр на други платформы - я тут уже упоминал Sharp MZ700 - там тоже графика по знакоместам. Если совсем лень что-то придумывать, то игры "Элктроника" - Воришки или, скажем, "Веселый повар". Ну и вишенка на торте: Приключения Ларри Лаффера. Первая игра довольно короткая, 5 или 6 локаций всего, да и текста не так, чтобы много. А вот реализация.. у меня то как раз проблема с графикой - перерабатывать в знакоместа и символы псевдографики - все же талант надо иметь...
Ведущий_специалист
21.12.2023, 12:37
игры "Элктроника"
Есть отличная заготовка от arduboy Octopus - по нашему тайна океана. Игра писана в плюсах - но в принципе оформить в нормальный вид проблем не вижу. https://github.com/jicehel/Octopus-for-META/tree/master - первая попавшаяся ссылка.
.. у меня то как раз проблема с графикой - перерабатывать в знакоместа и символы псевдографики - все же талант надо иметь...
Мне Пыхонин Виктор по дружески создал просто потрясающие конвертилки на pyton'е. Умеют конвертировать в рк86-апогей-пальмиру любые битмапы, код ардубоя, запакованый код ардубоя... Также появилась возможность сконвертировать любую картинку в 128 символов знакогенератора пальмиры. Практически все спрайты ардубой можно сконвертировать в удобные массивы для рк86 и тп... Было бы время и желание.
Вопрос назрел. Как правильно привязывать код по времени? По идее, нужно ждать обратного хода луча, чтобы от этого события отсчитывать время. Но в эмуляторе это сделать почему-то не получается. А железку я пока не раздобыл. Может есть какие-то таймеры, прерывания, или что-то подобное, что можно использовать для синхронизации выполнения кода по времени?
Может есть какие-то таймеры, прерывания, или что-то подобное, что можно использовать для синхронизации выполнения кода по времени?
Зависит от конкретного компа. На классическом РК86 только обратный ход луча в ВГ75, на компах с ВИ53 можно попробовать использовать таймер, на Партнере, например, вообще есть кадровое прерывание.
нужно ждать обратного хода луча, чтобы от этого события отсчитывать время. Но в эмуляторе это сделать почему-то не получается
Про какой эмулятор речь? В большинстве эмуляторов проблем с этим нет.
Ведущий_специалист
29.12.2023, 12:48
Может есть какие-то таймеры, прерывания, или что-то подобное, что можно использовать для синхронизации выполнения кода по времени?
Сходу есть кр04 - там таймер и прерывание. А так по дедовски - подождал начала кадра и вперед.
Ага, всё заработало, сам ступил. С обратным ходом луча.
Получилось сделать счетчик-делитель с привязкой к синхронизации кадров, это чтобы скорость разных объектов была разная. Мелкие звезды скроллятся медленнее больших, быстрее всего меняется передний план. Сделал хранение основных переменных в ОЗУ, а так же вывод спрайтов.
И вот тут начались непонятки, надеюсь на вашу помощь с ответами)
1. Как на современных телевизорах и автомобильных мониторах выглядит изображение, все 78 знакомест в ширину видно?
2. Пишу в этом эмуляторе: https://rk86.ru/ - он поддерживает графический режим? Не получается убрать межстрочную пустоту. Хочу понять, это снова я туплю, или не всего можно добиться в эмуляторах.
3. А стоит ли вообще убирать межстрочные пробелы? С ними конечно тоскливо, совсем не Ардубой, но и с ними можно интересную рисовку придумать.
4. Никто не пробовал что-то типа мультиколора? Если через раз заполнять знакоместо и стирать его, то пиксель кажется более тёмным. Вроде бы это даёт некие возможности по графике на краях спрайта, но и заметное мерцание может раздражать.
Не факт, что у меня что-то получится, но пока тема цепляет, понемногу двигаюсь вперёд.
1. Как на современных телевизорах и автомобильных мониторах выглядит изображение, все 78 знакомест в ширину видно?
Нет, все 78 символов не видны. На некоторых телевизорах видно чуть больше 64-х, а на некоторых экран смещён в сторону и не видно первых знакомест.
2. Пишу в этом эмуляторе: https://rk86.ru/ - он поддерживает графический режим? Не получается убрать межстрочную пустоту. Хочу понять, это снова я туплю, или не всего можно добиться в эмуляторах.
В этом эмуляторе не полностью реализованы возможности ВГ75 (контроллера дисплея) и ВТ57 (контроллера пдп). Поэтому изменить высоту строки нельзя. В других эмуляторах, например Emu или Emu80, это реализовано.
3. А стоит ли вообще убирать межстрочные пробелы? С ними конечно тоскливо, совсем не Ардубой, но и с ними можно интересную рисовку придумать.
Для графики без разрывов, конечно стоит.
4. Никто не пробовал что-то типа мультиколора? Если через раз заполнять знакоместо и стирать его, то пиксель кажется более тёмным. Вроде бы это даёт некие возможности по графике на краях спрайта, но и заметное мерцание может раздражать.
Vinxru успешно опробовал в своих Цветных Линиях под Апогей. Мультиколор делается довольно просто - нужно создать два экрана по разным адресам и каждый кадр переключать контроллер пдп с одного на другой.
Vinxru успешно опробовал в своих Цветных Линиях под Апогей. Мультиколор делается довольно просто - нужно создать два экрана по разным адресам и каждый кадр переключать контроллер пдп с одного на другой.
Это очень ценная информация, спасибо! Но, это я так понимаю, тоже надо на реальном железе смотреть?
Это очень ценная информация, спасибо! Но, это я так понимаю, тоже надо на реальном железе смотреть?
Да, на реальном. На эмуляторах ужасно мигает.
Ещё один глупый вопрос у меня.
Вот я скомпилировал код, получил бинарник... А как ему заголовок и жопу для формата .rk приписать? Руками только? Может можно в коде в начале и в конце сделать что-то типа "db" с байтами заголовка? Или может просто конвертер есть?
Пишу в этом эмуляторе: https://rk86.ru/ - он удобен т.к. доступен с разных ПК, скинул исходник себе на почту и уже к рабочему месту не привязан. Но графические режимы хочу потестить на Emu80, не могу туда файл загрузить.
Хочу показать уже, что получается. Осталось доделать анимацию спрайтов и сами спрайты дорисовать. Будет некая графическая демка - отправная точка для понимания, всё ли я делаю правильно.
Всех с наступающим!
решение от vinxru.
создать файл "make-rka.js" с кодом:
//----------------------------------------------------------------------------
// RAMFOS
// Создание образа диска из отдельных файлов
//
// 2013-11-01 Разработано vinxru
//----------------------------------------------------------------------------
// Стандартная ерунда
fso = new ActiveXObject("Scripting.FileSystemObject");
function fileSize(name) { return fso.GetFile(name).Size; }
function loadAll(name) { return fso.OpenTextFile(name, 1, false, 0).Read(fileSize(name)); } // File.LoadAll глючит
function save(fileName, data) { fso.CreateTextFile(fileName).Write(data); }
src = loadAll("tbl.bin"); encode = []; decode = []; for(i=0; i<256; i++) { encode[i] = src.charAt(i); decode[src.charCodeAt(i)] = i; }
// Расчет контрольной суммы файла
function apogeySum(data) {
var s = 0;
for(var i=0; i<data.length-1; i++)
s += decode[data.charCodeAt(i)] * 257;
s = (s & 0xFF00) + ((s + decode[data.charCodeAt(i)]) & 0xFF);
return (s & 0xFFFF);
}
start = 0x0000;
data = loadAll("game.bin");
crc = apogeySum(data);
end = start+data.length-1;
save("game.rka", encode[start>>8]+encode[start&0xFF]+encode[end>>8]+encode[end&0xFF]+data
+encode[0]+encode[0]+encode[0]+encode[0xE6]+encode[crc>>8]+encode[crc&0xFF]);
запускается из под консоли без параметров -- тупо набрать make-rka.js, ентер.
имена файлов жёстко прошиты в коде. входной файл должен иметь имя "game.bin", выходной будет создан с именем "game.rka", файл game.bin должен быть там же, где и make-rka.js.
Не хватает файлика tbl.bin для работы этого скрипта(
ох, Лёха, Лёха.
чот сходу не удалось переделать скрипт, чтоб ему не требовалось это недоразумение, поэтому прикрепляю tbl.bin.
если надо, напишу на сях конвертер.
80003
Шикарно! Всё работает, спасибо!
Кстати, господа, поделитесь инфой, как настроить ВГ75 (и ВТ55, если это тоже надо) А то стандартный режим в 86РК.. Ну не то чтобы меня не устраивал, но хочется большего. Нашел (не скажу где) код, который переключает режим 38 строк + 1 на растр и переключает адрес видеопамяти на 4000h. Но вот комментариев там для меня явно недостаточно... Хотя сам код работает, как выяснилось... Правда после переключения адреса видеопамяти использовать стандартные подпрограммы не представляется возможным, но это мелочь ведь... Пока что так, но теряется синхронизация.
MVI A,0 ; формат экрана
STA 0C001h
MVI A,4dh ; 78 колонок
STA 0C000h
MVI A,1Eh ; 30 строк, чтобы не менять адрес видеопамяти
STA 0C000h
MVI A,76h ; 7 линий в знакоместе (без пропуском между строками)
STA 0C000h
MVI A,53h ; 0101.0011 - чорт знает, что это
STA 0C000h
MVI A,27h ; команда начала отображения
STA 0C001h
LDA 0C001h; очищаем байт прерывания
WAIT: LDA 0C001h
ANI 20h ; ждем бит запроса на прерывание VRTC
JZ WAIT
JMP 0F86Ch ; возврат в Монитор
Или ВТ57 все равно перенастраивать надо?
Пока что так, но теряется синхронизация.
Если используется приведённый выше пример кода, то синхронизация потеряется. Там выставлено 32 строки высотой по 7 линий, итого 224 строки растра. Для устойчивой синхронизации нужно примерно +-310 строк для 50 Гц и +-258 для 60Гц.
Или ВТ57 все равно перенастраивать надо?
ВТ57 требуется перенастраивать, если в новом режиме отличается размер экранной области (в байтах).
То есть, для режима в 7 байт в строке нужно установить 44 строки? Тогда и получим 310 строк TV-изображения. А только адресное пространство будет ощутимо больше чем на стандартные настройки РК и переносить адрес видеопамяти все равно придется... Но, спасибо за пинок в нужную сторону.
А только адресное пространство будет ощутимо больше чем на стандартные настройки РК и переносить адрес видеопамяти все равно придется...
Тут как бы такое - если уж изменяешь видеорежим, то почему бы заодно не изменить и адрес экрана и его размер. Обычно видеорежим же меняют чтоб показать что-то отличное от стандартного монитора - например для игры. А тогда и всё остальное всё-равно уже будет своё самописное, а не стандартные процедуры из монитора. Так то это больше миф, что экран (или тот же стек) намертво прибит гвоздями и ничего менять нельзя (особенно нельзя использовать нестандартные процедуры, ага))))).
Кстати, господа, поделитесь инфой, как настроить ВГ75 (и ВТ55, если это тоже надо) А то стандартный режим в 86РК..
Я подбирал режим программой: https://zx-pk.ru/threads/33056-programma-nastrojki-vg75-vt57-%C2%ABadjust75%C2%BB.html
Но, в эмуляторе Emu80. А в эмуляторе как понять, что синхронизация сбивается?
Я подбирал режим программой: https://zx-pk.ru/threads/33056-programma-nastrojki-vg75-vt57-%C2%ABadjust75%C2%BB.html
Но, в эмуляторе Emu80. А в эмуляторе как понять, что синхронизация сбивается?
Ну так набери программу и выполни - сразу увидишь )) Я ж тоже в эмуляторе. Вообще Апогей приобрел, но пока не включал. А РК как самая простецкая платформа на том же железе.
Ну так набери программу и выполни - сразу увидишь ))
Ага, вижу...
У меня глюков нет т.к. у меня 30 строк, а не 30 + 1.
LXI HL, KR580VG75 + 1
; Скрываем курсор
MVI M, 080h
DCR L
MVI M, 0FFh
MVI M, 0FFh
; Останов КР580ВГ57
INR L
MVI M, 0
DCR L
MVI M, 04Dh ; 78 столбцов
MVI M, 01Dh ; 30 строк, 3F -> 63 строки
MVI M, 076h ; 8 линий в знакоместе
MVI M, 053h ; 0101.0011
; Старт КР580ВГ57
INR L
MVI M, 027h
CALL VG75_READY
И снова вопрос к уважаемой общественности! Правильно ли будет использовать именно такой режим для современных мониторов / телевизоров?
Хочу оставить так, для хотя бы кривой совместимости с эмуляторами, которые слабо поддерживают ВГ75. А разрешения псевдографики мне и так хватает, ибо про псевдографику...
Куча спрайтов гуглится по запросу "1 bit art". Вот я стал переносить некоторые спрайты, но радости не получил т.к. у нас пропорции псевдопикселя не квадратные, а прямоугольные. В итоге спрайты получаются гротескно вытянутые по высоте. Похоже что графику придется переизобретать для 86РК.
Вот я скомпилировал код, получил бинарник... А как ему заголовок и жопу для формата .rk приписать?
Проще всего использовать мою утилиту bin2tape (https://emu80.org/files/?id=78). Поддерживает все форматы РК-подобных ПК и некоторые другие.
- - - Добавлено - - -
https://rk86.ru/ - он поддерживает графический режим?
А еще он не поддерживает выдачу информации об обратном ходе луча...
- - - Добавлено - - -
нужно создать два экрана по разным адресам и каждый кадр переключать контроллер пдп с одного на другой
Vinxru делал даже проще - просто ПДП программировался на буфер удвоенной длины. В каждой половине буфера свой полукадр, и не нужно ничего переключать.
- - - Добавлено - - -
ВТ57 требуется перенастраивать, если в новом режиме отличается размер экранной области
Как вариант, можно еще в конец экранной области занести байт F3 (End of Screen - Stop DMA). Иногда может быть полезно.
- - - Добавлено - - -
Правильно ли будет использовать именно такой режим для современных мониторов / телевизоров?
Не совсем. Этот режим даст параметры развертки, близкие к NTSC (около 62 Гц). Современные ТВ должны без проблем этот режим растянуть, но как-то это не аккуратно - не наш стандарт все-таки...
Да и старое оборудование поведет себя непредсказуемо. Лучше запрограммировать на 37 строк, что, во-первых, позволит использовать бОльшее количество строк на экране (32 видимых), а во-вторых, даст практически стандартные параметры вертикальной развертки.
Vinxru делал даже проще - просто ПДП программировался на буфер удвоенной длины. В каждой половине буфера свой полукадр, и не нужно ничего переключать.
Точно - совсем забыл про такой "бесплатный" аппаратный даблскрин, не требующий перенастройки пдп каждый кадр.
Kakos_nonos
02.01.2024, 18:51
Hammer, Я использовал такие процедуры для установки экрана в 50 гц и 60 гц без перерывов между строк. Настраиваются и вт57 и вг75
WAITIN:
LXI H, VG75+1
MOV A,M
WAIT1:
MOV A,M
ANI $20
JZ WAIT1
RET
SET50HZ:
LHLD VADDR
XCHG
LXI H,VG75+1
MVI M,0
DCX H
MVI M,77
MVI M,36
MVI M,7
MVI M,NREZH;53
INR L
MVI M,23h ;27h
CALL WAITIN ;ожидание конца кадра перед прог.DMA
LXI H,VT57+8
MVI M,$80
MVI L,4
MOV M,E
MOV M,D
INR L
LXI D,2885+$4000
MOV M,E
MOV M,D
MVI L,8
MVI M,$A4
LXI H,VG75+1
MVI M,23H
RET
SET60HZ:
LHLD VADDR
XCHG
LXI H,VG75+1
MVI M,0
DCX H
MVI M,77
MVI M,29
MVI M,7
MVI M,NREZH;53
INR L
MVI M,23h ;27h
CALL WAITIN ;ожидание конца кадра перед прог.DMA
LXI H,VT57+8
MVI M,$80
MVI L,4
MOV M,E
MOV M,D
INR L
LXI D,2339+$4000
MOV M,E
MOV M,D
MVI L,8
MVI M,$A4
LXI H,VG75+1
MVI M,23H
RET
WAITIN - процедура ожидание обратного хода луча, чтоб делать установку в начале цикла
VADDR - по этому адресу распологается адрес видеопамяти. Можно ставить любой
Лучше запрограммировать на 37 строк, что, во-первых, позволит использовать бОльшее количество строк на экране (32 видимых), а во-вторых, даст практически стандартные параметры вертикальной развертки.
Т.е. я делаю 37 строк, но не смещаю указатель видеопамяти, в конце стандартной памяти ставлю F3, и получаю 32 видимых строки, из которых 30 можно использовать через стандартную память? Вроде подходит!
и получаю 32 видимых строки, из которых 30 можно использовать через стандартную память
30 не получится. В стандартном режиме из 30 могут не поместиться на экран и не используются 3 верхних и 2 нижних, остаются 25. Точно так же и здесь лучше не использовать 4 верхних, остается 26. Ну, может быть, 3, а не 4...
Хотя иногда встречается такое: экран программируется на 37 строк, используется стандартная видеообласть, в конце пишется F3, и вывод производится стандартными средствами.
Получаем обычные 25 строк, но смещенные в верхнюю часть экрана, плюс самая верхняя строка рискует быть слегка обрезанной на некоторых устройствах отображения.
Еще можно поиграться с параметром Vertical Retrace Row Count, его увеличение с одновременным уменьшением количества видимых строк скорее всего сдвинет картинку вниз. Но, опять-таки, это еще больше отклоняет видеосигнал от стандарта, и нет гарантии, что такое везде будет отображаться корректно...
- - - Добавлено - - -
Хотя можно еще попробовать добавить в начале коды F1 (End of Row - Stop DMA), которые вставят пустые строки и сместят картинку вниз.
В общем, ВГ75 дает большой простор для творчества ;)
NEO SPECTRUMAN
02.01.2024, 20:53
для игор с "псевдографикой" полная высота символов вообще не нужна
можно подрезать символы и сместить на 1 пиксель
и выдать хоть 64
ну и получить на "заезженную" одинаковую РК графику
а ннечто новое и сменьшим числом горизонтальных дырок
правдо это конешно дополнительная нагрузка на память с проceранием тактов проца
Ведущий_специалист
02.01.2024, 21:21
Куча спрайтов гуглится по запросу "1 bit art". Вот я стал переносить некоторые спрайты, но радости не получил т.к. у нас пропорции псевдопикселя не квадратные, а прямоугольные. В итоге спрайты получаются гротескно вытянутые по высоте. Похоже что графику придется переизобретать для 86РК.
Могу посоветовать отличнейший сайт https://pixeljoint.com/pixels/new_icons.asp?search=&dimo=%3C%3D&dim=96&colorso=%3C%3D&colors=2&tran=&anim=&iso=&av=&owner=0&d=&dosearch=1&ob=search&action=search
Я оттуда много графики на пальмиру - кр04 взял. Ну и сам ардубой - хранилище 1 битовых спрайтов.
30 не получится. В стандартном режиме из 30 могут не поместиться на экран и не используются 3 верхних и 2 нижних, остаются 25.
Не, я считаю те строки, которые мы засылаем в ВГ57, а не те, которые отображаются.
Пока волшебная комбинация получилась такой...
MVI M, 04Dh ; 78 столбцов
MVI M, 01Dh ; 30 строк
MVI M, 077h ; 8 линий в знакоместе
MVI M, 053h ; 0101.0011
; Старт КР580ВГ57
INR L
MVI M, 027h
; End of Screen - Stop DMA
LXI HL, KR580VG75 - 1
MVI M, 0F3h
Увеличение количества строк даёт сбой синхронизации. Пока так оставлю. На реальной железке продолжу эксперименты. Нигде не могу купить плату Радио-86РК со статической памятью версии Сергея Малинова с черри-клавиатурой (SRAM). Для меня сей девайс прям киберпанк и ретрофутуризм в одном изделии. Наверное сразу надо будет купить набор РК с Али, чтобы скопом нужные компоненты иметь?
для игор с "псевдографикой" полная высота символов вообще не нужна
можно подрезать символы и сместить на 1 пиксель
и выдать хоть 64
Я так уже попробовал в предыдущем куске кода. Как-то странно он режет, кусками по высоте. Сверху на картинке порезанные пиксели, снизу целые:
https://vtub.me/_public/misc/tmp.jpg
Могу посоветовать отличнейший сайт
Ага, спасибо, изучу!
LXI HL, KR580VG75 - 1
MVI M, 0F3h
Так надо не по адресу KR580VG75 - 1 записывать F3, а по последнему адресу экранной области - 7FF3.
Тогда увеличение числа строк сбой синхронизации не будет вызывать.
Если увеличивать количество строк, то память переползает за 7FF3, но благодаря F3 ничего страшного не происходит, но сбой синхронизации имеет место быть. Я уже понял, что сходу это всё не настроить, поэтому не спешу.
А как-то можно знакоместо сверху обрезать? Тогда получилось бы псевдопиксели квадратные сделать.
- - - Добавлено - - -
Хотя да, перепутал адреса...
NEO SPECTRUMAN
03.01.2024, 01:47
Если увеличивать количество строк, то память переползает за 7FF3,
так перемещай начало видео памяти
А как-то можно знакоместо сверху обрезать? Тогда получилось бы псевдопиксели квадратные сделать.
line counter mode в доке
но сдвиг можот оказатсо в другую сторону
я ужо не помню а в доке написано криво
line counter mode в доке
Вниз он сдвигается, зараза... А что означает параметр "Число символов в строчном синхроимпульсе"? Очень непонятно в мануале написано. Может получится растянуть изображение по ширине, чтобы заквадратить пиксели?
А что означает параметр "Число символов в строчном синхроимпульсе"? Очень непонятно в мануале написано.
Это ширина строчного синхроимпульса. Изначально она установлена шириной в 8 символов, это 6 мкс.
Может получится растянуть изображение по ширине, чтобы заквадратить пиксели?
Есть один простой способ - все современные тв сейчас с экраном формата 16:9. Если растянуть изначальный квадрат на весь экран, то и большие ркшные «пиксели» 3х4 точки растянуться чуть в ширь и станут вполне себе квадратными ;)
Ну осталось ещё один финт ушами проверить)
Может кто-то уже делал? Если начать заполнять экранную область памяти с момента начала обратного хода луча, луч обгонит память? Например, мы сразу увидим стертый экран, или увидим сам процесс стирания?
Я пока не стираю весь экран, только те места, где рисую, но уже некое противное мерцание проскакивает. Хочу понять тайминги хотя бы приблизительно.
NEO SPECTRUMAN
03.01.2024, 18:09
Вниз он сдвигается, зараза..
мдо значет печально
но серавно это дает "новый" набор псевдографики
или можно "трясти" текст
- - - Добавлено - - -
Может кто-то уже делал? Если начать заполнять экранную область памяти с момента начала обратного хода луча, луч обгонит память? Например, мы сразу увидим стертый экран, или увидим сам процесс стирания?
Я пока не стираю весь экран, только те места, где рисую, но уже некое противное мерцание проскакивает. Хочу понять тайминги хотя бы приблизительно.
заведи "второй" экран
и щелкай начало видео памяти когда тот готов
а так конешно начинаетсо гонка
правдаа не с лучом а с дма
который останавливает проц и перекидывает всю строку в вг75
после чего до начала след строки есть опять свободдные такты проца
заведи "второй" экран
и щелкай начало видео памяти когда тот готов
К этому всё и идёт (хотя вот прям совсем не хочется), но сначала надо понять, сколько есть свободных тактов, получится ли отрисовать экран за 12 кадров хотя бы. Или вообще всё можно отрисовать за 1 кадр.
От этого зависит и синхронизация по обратному ходу луча. Время выполнения кода может отличаться от кадра к кадру. Например, где-то за один кадр всё отрисуется, где-то за два. Потом мы ждем обратного хода луча, соответственно такая синхронизация будет очень плавающей, а спрайты будут двигаться с подёргиванием. Жаль нет прерываний.
Частично от этого можно избавиться сделав два экрана, но только частично.
Сейчас у меня получается так, что на фоне экрана движутся звезды. Я стираю старое знакоместо звезды, ставлю звезду на следующее знакоместо. После этого поверх звёзд я вывожу спрайт. Но на экране я вижу, что часть звёзд иногда пробиваются сквозь спрайты. Это значит, что звезда уже стёрла знакоместо, но спрайт ещё не нарисован. Хотя я все отрисовки начинаю сразу после обратного хода луча. Получается, что на такую синхронизацию вообще положить можно.
Второй экран нивелирует такие моменты, но плавности спрайтам не придаст (
NEO SPECTRUMAN
03.01.2024, 19:27
Время выполнения кода может отличаться от кадра к кадру. Например, где-то за один кадр всё отрисуется, где-то за два.
время работы процедур отрисовки тебе известно
заведи щетчик на каждую большую отрисовку
потом коггда примерное время каждра кончилось
уходи на синхронизацию
NEO SPECTRUMAN
03.01.2024, 22:00
получится ли отрисовать экран за 12 кадров хотя бы. Или вообще всё можно отрисовать за 1 кадр.
это не спецтрум
тебе не нужна фреймовость пушо утя минимальный шаг 6 и 8 пикселей
а 8 пикселей за фрейм это достатошно большая скорость
(чем меньше уровня гоночек из 1-х батлтодс
или какойто очень динамичный скроллшутор)
на глаз
за 12 фреймов ты вполне сможошь отрисовать много чаго
(типа полный скролл фона без сдвига начала видео памяти + свистелки и перделки)
можот дажо 6 хватит
для статишного экрана те хватит 1...2 фрейма
если буш юзать сдвиг начала видео памяти для скроллов
на свистелки и перделки думаю те хватит и 2...5 фреймов
и конешно это если ты буш писать на прямую в "видео" память
правда я не знаю чаго ты конкретно хошь сделоть
мож прикинуть скорость пропорционально к другим платформам
проц в 2 раза медленее чем на спектруме K=0.5
регистров меньшо K=0.7 (но это не тошно)
НО видео рама в 3 раза меньшо K=3
тобешь если чота на спектруме можно сделоть фреймово
можно предположить что и на РК это жо можно тожо сделоть фреймово при тех жо визуальных размерах
если буш делоть пониженные знакоместа
то на тоже самое будет уже уходить в 2 раза большо времени чем на спектрумах
но это без учета возможности сдвига видеорамы
где РК может рвать и метать (фреймово крутить фон практически без тактозатрат)
Shumadan
03.01.2024, 22:15
Параллельно ищу идеи для игр на РК.
сделайте порт игры Динозаврика из Хрома. Я даже иногда подвисал на ней
NEO SPECTRUMAN
03.01.2024, 22:24
Параллельно ищу идеи для игр на РК.
r-type с быстрым фуллскрин скроллом Ж)
на глаз
за 12 фреймов ты вполне сможошь отрисовать много
По прикидкам примерно так и получается. НО! Что-то простое можно скролить и по половинке знакоместа, я так звезды сделал, вроде плавно получилось.
правда я не знаю чаго ты конкретно хошь сделоть
Я пока просто хочу собрать некий каркас, абстрактно, посмотреть, как оно всё бегает, где и как можно использовать обман и хитрости чтобы, например, не использовать умножение. Вроде получается, но всегда есть узкие места, допиливаю.
но это без учета возможности сдвига видеорамы
где РК может фреймово крутить фон практически без тактозатрат
Попробую, интересно!
сделайте порт игры Динозаврика из Хрома. Я даже иногда подвисал на ней
В первом приближении что-то такое и получается, максимально простое, но технически выверенное
Ведущий_специалист
04.01.2024, 00:22
Динозаврика из Хрома
Если что у меня есть полностью графика самого динозаврика птеродактилей кактусов и земли. Я немного не доделал игрушку эту. (все для рк86).
- - - Добавлено - - -
Кстати от себя совет дам, не гонись за фпс. В рк это немного не то... А вот если память позволяет - конечно же лепи второй экран (в случае горизонтальной скроллилки качество сдвига будет ощутимо на глаз, красиво и без рывков). Просто уже проверил это и делюсь результатами.
конечно же лепи второй экран (в случае горизонтальной скроллилки качество сдвига будет ощутимо на глаз, красиво и без рывков)
Я пока не понимаю как это должно работать со спрайтами. Скролл фона будет быстрым, но то место, где на фоне был спрайт -> надо восстановить, и шлёпнуть новый спрайт. Один хрен это всё стоит циклов. Если только скролить пару строк, изображающих землю, а остальное всё оставить черным, то да, смысл есть.
Спрайты у меня получаются анимированные, надо придумать, как человечек перепрыгивает из одного знакоместа в другое. Или не надо. А если не надо, тогда теряется смысл пиксельной графики. Это все приходится перепроверять и перерисовывать. И совмещать по таймингу.
Я бы даже нанял художника, они есть, но объяснить, что пиксель будет прямоугольным, а пиксель вообще-то не пиксель, а разновидность тетриса - задача в современных реалиях практически невыполнимая.
Вобщем всё как бы не очень сложно, но и не быстро совсем. Но и в 3Д проектах у меня было ровно так же. Сначала суета, потом всё устаканивается. Поэтому я сильно не спешу, методично проверяю варианты.
Если начать заполнять экранную область памяти с момента начала обратного хода луча, луч обгонит память?
Да, обгонит. За один кадр можно только исхитриться успеть сделать стирание с помощью стековых операций, да и то не экранной области, а видимой части и впритык во времени...
Про звук ещё хотел написать. Я пока звук не начинал делать, но идейка появилась, как звук улучшить аппаратно.
Там же прямоугольный сигнал генерится? Нужно на выход звука поставить управляемый усилитель, который снижает до нуля коэффициент усиления за 0.5 секунды, например. Тогда получится затухающий звук. Такую мульку можно сделать полностью аналоговую, на микросхеме TDA7052А или на 561ЛН2.
Если то же самое провернуть используя фильтр низких частот, меняя добротность фильтра, то получится эффект, как во вложении. Но это не прямоугольный сигнал в примере, а пила.
80025
Прямоугольный будет звучать, как бас у Хаббарда (нижняя осциллограмма): https://www.youtube.com/watch?v=G2uV440Jc8A
Тут я ардуиной меняю добротность, но тоже можно сделать полностью аналоговый девайс, который просто втыкается в звуковой выход. Есть подобные штуки на оптопаре, они не требуют питания (если память не изменяет), но и звук у них сильно хуже.
Мне кажется, это будет роднее, чем AY, который не имеет ФНЧ. И вообще много одноголосых синтезаторов существует. Чтобы проверить эффекты, про которые я говорю, можно пропустить звук через простейший синтезатор Korg Monotron.
Если интересно, могу передать схемы и знания заинтересованному, а он уже тему создаст и разовьёт мысль. Уверен, что как минимум хороший секвенсор / драм машину сделать можно.
Тут не нужен высокий ФПС, спрайты клавиш и крутилрк не сложные, а остальное всё уже считай написано. Дополнить можно управлением через порт, тогда будут очень крутые ударные и тарелка на белом шуме.
Ведущий_специалист
04.01.2024, 12:15
Я пока не понимаю как это должно работать со спрайтами.
while(1)
{
GetInput(); // опросим клавиатуру
check_player(); // реакция героя на клавиатуру
sticman_core(); // отрисовка анимации героя
level3_scroll(); // отрисовка фона
dog_check(); // зарождение собак
dog_core(); // перемещение и анимация собак
slime_check(); // зарождение червей
slime_core(); // перемещение и анимация червей
if (stickman_health==0) break; // проблемы со здоровьем? конец игры
if (level_tiles==120) break; // уровень пройден
}
Вывел спрайт героя, вывел поверх фон, остальные спрайты. Пара проверок вот и весь игровой цикл. Чем быстрее это делаешь тем меньше мерцаний при наложении фона на спрайты или наоборот спрайтов на фон. Вот о чем я вам писал, что за фпс лучше не гнаться, там принцип немного другой (создал весь экран с фоном и спрайтами - а затем выдал его в экран).
Я бы даже нанял художника, они есть, но объяснить, что пиксель будет прямоугольным, а пиксель вообще-то не пиксель, а разновидность тетриса - задача в современных реалиях практически невыполнимая.
Здесь можно много беседовать. Эти товарищи (художники) вроде грамотные, и им пофиг на квадратный пиксел (по крайней мере они это могут осознать) - взять тот же майнкрафт, там вообще все квадратное и это покорило мир. А вот объяснить художнику (дизайнеру) что графика однобитная - это практически нереально, хоть как он это не поймет, но впихнет в графику градацию.. Про дизеринг тоже молчу.. не в случае с рк86. Вот в кр04 уже более-менее.
while(1)
Вывел спрайт героя, вывел поверх фон, остальные спрайты. Пара проверок вот и весь игровой цикл. Чем быстрее это делаешь тем меньше мерцаний при наложении фона на спрайты или наоборот спрайтов на фон.
Это я всё понимаю, это уже сделано и работает. Дорисую спрайты, выложу скриншоты, чтобы было удобнее обсуждать.
- - - Добавлено - - -
Кстати про сишный язык. Было бы круто и сильно проще, многократно полезнее сделать модуль для Ардуино для работы с процессорами i8080.
Сложный вопрос. Уже есть реализация на ESP. Жаль только, без выхода на монитор. Буквально в соседней теме. Разве не дубликат будет?
Кстати, такой вот вопрос. Где-то в Монитор хранится адрес памяти, соответствующий позиции курсора на экране. А вот в каких адресах? Никак не могу найти...
Фиг с ними, со скриншотами, вот демка!
80033
Если есть возможность, проверьте на реальном железе. Возможно будет криво отображаться из-за выбранных настроек ВГ75.
Демка простая, с мерцанием и глюками, но она нужна для того, чтобы понять, как это всё лучше устранить. Синхронизации по обратному ходу луча тут тоже нет.
Тут я нащупал пределы производительности. С добавлением новых спрайтов тормозить будет сильнее.
Вот какие у меня мысли и пояснения:
1. Мультиколор накрылся медным тазом. Мигать знакоместом через переключение экранной памяти можно только если оба экрана статичны. Иначе будет не снижение яркости знакоместа, а эффекты порождающие эпилепсию. Для статичных сцен типа интро оставляем.
2.Обрезание символа до 7 пикселей в высоту даёт ломаные псевдопиксели. Но при движении спрайтов это не заметно. Вполне юзабельно.
3. Не так много спрайтов, как хотелось бы, можно реально использовать. Это может вносить коррективы в сюжет игры.
4. Самая гиморная часть работы теперь - отрисовка анимации. Особенно если планировать сдвиг спрайта по горизонтали на половину знакоместа. Я пока не понял, надо это или нет. Прикинуть можно по звёздам - мелкие звезды сдвигаются на одно знакоместо, крупные на половину. Вроде заметно, что плавнее бегут крупные звезды.
5. Можно сделать ВЕРТИКАЛЬНЫЙ скроллер всего экрана, сдвигая начало видеопамяти. Но память быстро кончится. И нельзя сдвинуться на половину знакоместа.
6. Чем меньше спрайт, тем быстрее он выводится. Лучше мелкие спрайты рисовать. Вот как сейчас, спрайты различимы?
7. В некоторых случаях спрайт стирать не надо, можно добавить в спрайт пустые знакоместа, которыми будет стираться шлейф от движущегося спрайта.
8. Мерцание и два экрана. Вроде решение проблемы само напрашивается. Я правда хотел попробовать сделать таблицу наложения псевдографики, ну типа какая загогулина получится, если два символа перекрывают друг друга. Боюсь, это будет слишком ресурсоёмко, а графику не сильно улучшит.
Критикуйте ) Предлагайте!
Сложный вопрос. Уже есть реализация на ESP. Жаль только, без выхода на монитор.
Я имел в виду иметь возможность писать код в Arduino IDE и получать бинарник в итоге.
Fishbone
05.01.2024, 14:40
Параллельно ищу идеи для игр на РК.
LumASCII
https://bobs-stuff.itch.io/lumascii
Фиг с ними, со скриншотами, вот демка!
Если есть возможность, проверьте на реальном железе. Возможно будет криво отображаться из-за выбранных настроек ВГ75.
Под Апогей возможно сделать? Из реального РК-железа у меня есть только он. Или исходник посмотреть?
Под Апогей возможно сделать?
Не знаю отличий. Смогу доработать по подсказкам.
Или исходник посмотреть?
Пока исходник не хочу показывать, он взъерошенный, выложу, когда причешу.
Не знаю отличий. Смогу доработать по подсказкам.
Соответствие адресов устройств и экранной области:
Радио-86 Микроша Апогей
Генератор звука ВИ53 ----- $d800 $ec00
Интерфейс клавиатуры ВВ55 $8000 $c000 $ed00
Интерфейс пользователя ВВ55 $a000 $c800 $ee00
Контроллер дисплея ВГ75 $c000 $d000 $ef00
Контроллер ПДП ВТ57 $e000 $f800 $f000
Начало экранной области $76d0 $76d0 $e1d0
Конец экранной области $7ff3 $7ff3 $eaf3
Вроде такие отличия.
[CODE]Вроде такие отличия.
В эмуляторе работает: 80037
Где-то в Монитор хранится адрес памяти, соответствующий позиции курсора на экране. А вот в каких адресах?
7600h
- - - Добавлено - - -
В эмуляторе работает: demo_sprites_apogei.zip
На реале тоже видно, что работает, но все варианты подключения lcd-монитора вызвали срыв синхронизации, а доставать и подключать ЭЛТ-монитор было лень.
Под Апогей возможно сделать? Из реального РК-железа у меня есть только он. Или исходник посмотреть?
Так вроде Апогей тот же РК, только с цветом... Пока только адреса видеопамяти отличаются, насколько удалось заметить. В остальном должно работать. Наверное...
Hammer, и еще: для РК лучше все-таки использовать расширение .rkr, а то программа для РК с апогеевским расширением выглядит странно...
Если есть возможность, проверьте на реальном железе. Возможно будет криво отображаться из-за выбранных настроек ВГ75.
Проверил - ну да, криво. В смысле что слетает синхронизация и после этого ничего не видно. Но по идее так и должно было произойти - 31 строка по 7 линий это 217 тв строк, получается ~71.4 Гц. Такое практически ни один ТВ не покажет.
Всё-таки нужно что-то с этим делать ;) А именно увеличить количество строк и перенастроить пдп. Hammer, почему упорно сопротивляешься? )))
- - - Добавлено - - -
Так вроде Апогей тот же РК, только с цветом... Пока только адреса видеопамяти отличаются, насколько удалось заметить. В остальном должно работать. Наверное...
Ну да, должно - после того как автор заменил адреса и скомпилировал под апогей.
- - - Добавлено - - -
Hammer, хорошие новости - если изменить количество линий в строке на 8 и увеличить кадровый синхроимпульс до двух строк, то изображение стабильное (~60,5 Гц). Для этого меняем второй параметр настройки ВГ75 с 1D на 5D (две строки в кадровом синхроимпульсе) и третий параметр с 76 на 77 (восемь линий в строке).
Pyk, сможешь проверить? Изменить надо значения по адресам 11h и 13h
А именно увеличить количество строк и перенастроить пдп. Hammer, почему упорно сопротивляешься? )))
Я жду реакции на спрайты, различимы ли, играбельны? Если вообще в принципе такая графика норм, то имеет смысл:
1. Растопырить экран на максимальную высоту, максимальное количество строк, среднюю треть использовать, как игровое поле, остальное заполнить статичной графикой. Тогда ВГ75 будет отжирать у процессора такты.
2. Попробовать растопырить экран, но использовать спецсимволы для пропуска строк. Тогда же ведь ВГ75 будет отжирать у процессора уже поменьше тактов?
И до последнего не хочется отказываться от эмулятора https://rk86.ru/ - я же на работе кое-то успеваю кодить, с Emu80 такая возможность может улетучиться. Но в принципе пофиг уже.
с 76 на 77 (восемь линий в строке)
Плохо, пиксели заметно вытянутся.
NEO SPECTRUMAN
05.01.2024, 19:17
Плохо, пиксели заметно вытянутся.
пиксели всегда одинаковы
Ведущий_специалист
05.01.2024, 19:26
Запустил на реале. Звезды очень плавные. Спрайты - лучше на рк и не сделать. Здесь уже подбирать пиксельарт чтобы сочеталось по сценарию.
https://i.ibb.co/q1MjRBy/photo-2024-01-05-19-22-38.jpg (https://ibb.co/9Y9gqn8)
С настройками экрана что то не то....
если изменить количество линий в строке на 8 и увеличить кадровый синхроимпульс до двух строк, то изображение стабильное (~60,5 Гц).
Логично, но как эмулятор, так и большинство современных ТВ при этом перейдут в режим 480i (NTSC) и растянут изображение по вертикали ;) Лучше бы все-таки 50 Гц, если хочется более квадратные "пиксели" псевдографики...
Pyk, сможешь проверить?
Да, проверю, но чуть позже...
Плохо, пиксели заметно вытянутся.
Логично, но как эмулятор, так и большинство современных ТВ при этом перейдут в режим 480i (NTSC) и растянут изображение по вертикали ;) Лучше бы все-таки 50 Гц, если хочется более квадратные "пиксели" псевдографики...
Господа - речь же шла про то, что до этого на реальном железе вообще невозможно было ничего разглядеть, а с помощью изменения всего двух байт в коде это стало возможно. Теперь можно уже и оценить то что хотел автор, спрайты и прочие мигания. Разве нет?
- - - Добавлено - - -
Я жду реакции на спрайты, различимы ли, играбельны?
Спрайты шикарны - и прыгают и скачут ))
А звёзды да, мерцают на фоне текста.
- - - Добавлено - - -
И до последнего не хочется отказываться от эмулятора https://rk86.ru/ - я же на работе кое-то успеваю кодить, с Emu80 такая возможность может улетучиться. Но в принципе пофиг уже.
Может попросить автора эмулятора доделать эмуляцию ВГ75 и ВТ57 ?? Сейчас по сути он эмулирует РК86 из статьи про замену ВГ75, где видеорежим один на подобии Микро80 и ЮТ88.
Может попросить автора эмулятора доделать эмуляцию ВГ75 и ВТ57 ??
Не, погоды не сделает. Надо переносить экран, делать второй экран, добивать до 50Гц. И новую демку делать со статической настроечной таблицей. Тогда будет видно, что и где растягивается/обрезается. Предложения по дизайну таблицы приветствуются. В качестве быстрой анимации можно вставить кубик на одно знакоместо, как в демке, чтобы за один кадр успеть нарисовать.
Я вот уверен, что на разных мониторах мы совершенно разные смещения увидим.
И саму игру продумывать!
Горизонтальная прыгалка. Разные артефакты подобранные на дороге дают разный эффект, но не сами по себе, а с учётом уже подобранных артефактов. Например, если уже взял гриб, то траву подбирать не надо, отравишься, а гриб с колбой дадут двойной прыжок. При подходе к табличке с текстом открывается окно с такими рецептами смешивания. А можно и 2048 таким образом визуализировать.
Это пример, который помогите дополнить или улучшить)
Ведущий_специалист
05.01.2024, 20:25
Горизонтальная прыгалка. Разные артефакты подобранные на дороге дают разный эффект, но не сами по себе, а с учётом уже подобранных артефактов. Например, если уже взял гриб, то траву подбирать не надо, отравишься, а гриб с колбой дадут двойной прыжок. При подходе к табличке с текстом открывается окно с такими рецептами смешивания. А можно и 2048 таким образом визуализировать.
посмотри squario на arduboy там совсем просто квадратик главный герой, треугольник враг. Играбельность просто в зашкал. Ну или tiny bert бегаешь туда сюда собираешь ключики открываешь двери.... Еще пример очень крутой от obonо https://community.arduboy.com/t/hollow-seeker-a-simple-action-game/2594 Просто залипаторная игрушка.
Знаю обе игры, смотрел их раньше, даже играл. Там по 3/4 экрана скроллится, игры динамичны за счёт скорости скролла. На 86РК такой скорости не будет скорее всего, и играть сразу станет неинтересно. Всё же стабильных 16 мгц против непонятно скольких с учётом отъедания ВГ75. Надо что-то самобытное изобретать :v2_dizzy_roll:
Pyk, сможешь проверить?
Запись с реала через ТВ-тюнер:
https://disk.yandex.ru/i/GgHSsVDz7Ye3wQ
Из-за особенностей работы ТВ-тюнера видна чересстрочная развертка.
Господа - речь же шла про то, что до этого на реальном железе вообще невозможно было ничего разглядеть, а с помощью изменения всего двух байт в коде это стало возможно. Теперь можно уже и оценить то что хотел автор, спрайты и прочие мигания. Разве нет?
Да, конечно. Это я к автору обращался, чтобы он не решил ограничиться этими минимальными изменениями, а сделал в итоге нормальный режим :)
- - - Добавлено - - -
Может попросить автора эмулятора доделать эмуляцию ВГ75 и ВТ57 ??
Или просить автора Emu80 допилить, наконец, web-версию эмулятора ;)))
если изменить количество линий в строке на 8 и увеличить кадровый синхроимпульс до двух строк, то изображение стабильное (~60,5 Гц). Для этого меняем второй параметр настройки ВГ75 с 1D на 5D (две строки в кадровом синхроимпульсе) и третий параметр с 76 на 77 (восемь линий в строке)
Прям вот почти то, что надо! Ещё бы отпилить до 7-ми линий в знаке... Меч вытянулся и уже не похож на меч.
Или просить автора Emu80 допилить, наконец, web-версию эмулятора ;)))
Ну или хотя бы компилятор встроить в эмулятор ) У меня сейчас получается компилятор, потом конвертация из бинарника в .rk, а потом загрузка в эмулятор. Слишком много действий. Нужно чтобы просто написал код, и тут же увидел результат его работы. Можно даже исходник подгружать из внешнего файла.
- - - Добавлено - - -
Лучше бы все-таки 50 Гц, если хочется более квадратные "пиксели" псевдографики...
Попробовал, пиксели становятся плоскими)))
У меня сейчас получается компилятор, потом конвертация из бинарника в .rk, а потом загрузка в эмулятор. Слишком много действий. Нужно чтобы просто написал код, и тут же увидел результат его работы.
А если просто сделать cmd-файл, который все это делает - компилирует, преобразовывает в rk и скармливает эмулятору? Можно даже попробовать в какую-нибудь IDE вроде VS Code встроить компиляцию и запуск одной кнопкой...
Прям вот почти то, что надо! Ещё бы отпилить до 7-ми линий в знаке... Меч вытянулся и уже не похож на меч.
На всякий случай обращу внимание, что в выложенном видео aspect ratio не совсем правильный, захват дает растянутую картинку, на видео ориентироваться не стоит.
А если просто сделать cmd-файл, который все это делает - компилирует, преобразовывает в rk и скармливает эмулятору?
Это уже нужен компилятор на локальной машине.
https://svofski.github.io/pretty-8080-assembler/ - вот очень удобный компилятор, и там есть подобная кнопка, но там нет эмулятора РК.
https://rk86.ru/ при всех недостатках даёт возможность сразу писать, и сразу же видеть результат. Для начала работы с РК, это прям очень удобно.
Прям вот почти то, что надо! Ещё бы отпилить до 7-ми линий в знаке... Меч вытянулся и уже не похож на меч.
Ну смотри, для ~50 Гц нужно 44 строки по 7 линий. Тогда картинка утрамбуется по вертикали и пиксели тоже.
Ну смотри, для ~50 Гц нужно 44 строки по 7 линий. Тогда картинка утрамбуется по вертикали и пиксели тоже.
Да вроде как по 8 линий ~50 Гц даёт хороший квадратный пиксель, я это уже попробовал. Но в эмуляторе видно срыв синхронизации. Как вот настроить, чтобы в Emu80 кадры не прыгали, и 50 Гц было? У меня не получается такие цифры поймать.
- - - Добавлено - - -
Нет! Не верьте мне, я совсем запутался)))
Да вроде как по 8 линий ~50 Гц даёт хороший квадратный пиксель, я это уже попробовал. Но в эмуляторе видно срыв синхронизации. Как вот настроить, чтобы в Emu80 кадры не прыгали, и 50 Гц было? У меня не получается такие цифры поймать.
- - - Добавлено - - -
Нет! Не верьте мне, я совсем запутался)))
А чего тут путаться то, дели и всё. 312 / 8 = 39 строк. И никакого срыва не будет.
А чего тут путаться то, дели и всё. 312 / 8 = 39 строк. И никакого срыва не будет.
Проверяю в Emu80, вижу срыв...
Не своей демкой проверяю, а вот этой штукой: https://zx-pk.ru/threads/33056-programma-nastrojki-vg75-vt57-%C2%ABadjust75%C2%BB.html
Проверяю в Emu80, вижу срыв...
Не своей демкой проверяю, а вот этой штукой: https://zx-pk.ru/threads/33056-programma-nastrojki-vg75-vt57-%C2%ABadjust75%C2%BB.html
Жесть. Если б я понимал как на форуме отыскать свои старые сообщения, где я выкладывал примеры под рк86 (там точно было 39*8), то дал бы ссылку. Там точно никаких срывов нет.
Но тут всё так НЕ интуитивно (((((
80041
Вот тут пример под Апогей с комментариями - можно менять в исходнике значения под разные форматы экрана и проверять (по умолчанию как раз стоит 44 строки по 7 линий). Второй пример под РК86 - скролящийся стрелками курсора во все стороны Пикачу (уже в режиме 39 строк по 8 линий). Компилируется в Прекрасном Ассемблере (https://svofski.github.io/pretty-8080-assembler/), запускается в Emu80 (только что проверял). "Никаких срывов" ))))
Ну и на реальном Апогее подключённом к настоящему тв, тоже проверял естественно.
А на что влияет код F3h? Может им можно частоту подправить на десятые доли?
А на что влияет код F3h? Может им можно частоту подправить на десятые доли?
Это код "конец экрана стоп пдп"
Частота изображения считается легко - 8,000,000 Гц (пиксельклок) делится на 516 (86 символов в строке шириной 6 пикселей) получается ~ 15,503. Дальше делим на 50 или 60 Гц - получается ~310 или ~258 тв строк (для устойчивого изображения без срывов). И вот эти уже значения делим на количество линий в строке - получается 39 или 44 соответственно для 8 и 7 линий при 50 Гц и 33 или 37 для 60 Гц.
Всё остальное будет срываться!
- - - Добавлено - - -
Hammer, ты мои примеры посмотрел? Может так понятнее станет.
Hammer, ты мои примеры посмотрел? Может так понятнее станет.
Скомпилировались, но оба не заработали, ни для РК, ни для Апогея)
Emu80 последней версии. На что грешить уже не знаю.
- - - Добавлено - - -
Знаю на что грешить) Компилятор даёт бинарник с предательским расширением .rk, но в нем нет заголовка и жопы нормального .rk файла. Заработало.
Чем больше строк, тем сильнее ВГ75 отъедает такты. Получается, что режим 5Dh, 77h выгоднее того, где пикачу. В этих режимах проц проседает до 1 мГц и ниже, это для игры "Тайны океана" разве что хватит, какие уж тут спрайты и скроллы))) Чудес не бывает. Если только команды конца строки как-то помогут высвободить такты, тогда да, режим из второго теста должен подойти, можно будет скипнуть часть строк.
Скомпилировались, но оба не заработали, ни для РК, ни для Апогея)
Emu80 последней версии. На что грешить уже не знаю.
- - - Добавлено - - -
Знаю на что грешить) Компилятор даёт бинарник с предательским расширением .rk, но в нем нет заголовка и жопы нормального .rk файла. Заработало.
В Прекрасме надо жать Tape для кассетного файла, для последующeго запуска в Emu80.
- - - Добавлено - - -
Чем больше строк, тем сильнее ВГ75 отъедает такты. Получается, что режим 5Dh, 77h выгоднее того, где пикачу. В этих режимах проц проседает до 1 мГц и ниже, это для игры "Тайны океана" разве что хватит, какие уж тут спрайты и скроллы))) Чудес не бывает. Если только команды конца строки как-то помогут высвободить такты, тогда да, режим из второго теста должен подойти, можно будет скипнуть часть строк.
Отставить пессимизм ))
Надо сначала набросать движок, а потом посмотреть что он может. Вполне играбельно для РК может выйти и 25 фпс и 16, если на просчёт всех событий будет уходить 2 или 3 кадра.
Оригинальные игры вообще супер тормоза, которые можно сейчас ускорить в разы. Так что не стоит бросать свои попытки.
Отставить пессимизм ))
Надо сначала набросать движок, а потом посмотреть что он может.
Дык нет пессимизма. Для проверки тормозов как раз есть демка на пределах нагруженности. Проверю режимы, посмотрю на сколько производительность просядет, повлияют ли на неё команды конца строки. Тут как раз всё понятно, надо просто провести исследование.
Ведущий_специалист
06.01.2024, 13:34
Вот кстати спросить хотел, какие задержки при выводе спрайтов в демке. Ибо без задержек там ну совсем никак.
Вот кстати спросить хотел, какие задержки при выводе спрайтов в демке. Ибо без задержек там ну совсем никак.
Задержек нет, есть счетчик/делитель.
Я инкрементирую ячейку памяти. Большие звёзды и спрайты отрисовываются через каждые 16 инкрементов, малые звёзды через каждые 48, смена анимации через каждые 64.
Таким образом не надо всё и вся считать за каждый проход, теряя производительность.
По идее этот счетчик надо привязать к обратному ходу луча, чтобы всё плавно работало.
Ведущий_специалист
06.01.2024, 14:43
Задержек нет, есть счетчик/делитель.
Большие звёзды и спрайты отрисовываются через каждые 16 инкрементов, малые звёзды через каждые 48, смена анимации через каждые 64.
Ну про это и спрашивал. запас есть, значит хватит на еще что нибудь поделать. Сам сейчас колдую, игру доделываю, отрисовку спрайтов и анимацию при ударе и попаданию по врагу. Благо памяти хватает. Но опять же, хоть у меня цикл по сути отбирает практически всю производительность, всеравно пришлось вводить задержку на цикл, чтобы анимация просмотривалась, а иначе все 5 картинок перебираются так быстро что не успеваешь разглядеть что там понарисовал )).
Так что не стоит бросать свои попытки.
Я разобрался ) Менять настройки ВГ 57 надо всегда вместе с настройками ПДП, иначе частоты не получаются задуманными.
Вот сейчас получилось 37 строк, 8 линий, 51Гц. В 32-й строке стоит F3, чтобы сместить изображение вниз. Не знаю, влияет ли это на частоту или отжор тактов, но надо бы узнать...
В режиме 44 строки и 7 линий ПДП отжирает на 5% больше, и это заметно.
Интересно посмотреть, правда ли на телевизорах пиксели в нужную сторону растянутся?
80042
Вот сейчас получилось 37 строк, 8 линий, 51Гц.
Можно ещё одну строку добавить, чтоб в сумме вышло 39. Например в строчный синхроимпульс, заменив значение 24 на 64. Получится как раз 312 тв строк - а это уже намного лучше чем сейчас 304.
Интересно посмотреть, правда ли на телевизорах пиксели в нужную сторону растянутся?
Как-то так:
https://pic.maxiol.com/thumbs2/1704549055.1571435258.sprites.jpg (https://pic.maxiol.com/?v=1704549055.1571435258.sprites.jpg&dp=2)
На реале пришлось область видеопамяти предварительно почистить, чтобы запустилось.
Близко к краям изображение нежелательно выводить - синхронизация может сбиваться, лучше использовать 64 символа из 78, а крайние оставлять черными...
- - - Добавлено - - -
(Телевизора нет, выведено на монитор через GBS8200).
- - - Добавлено - - -
Можно ещё одну строку добавить, чтоб в сумме вышло 39. Например в строчный синхроимпульс, заменив значение 24 на 64. Получится как раз 312 тв строк
Думаю, опечатка, в кадровый, конечно, не строчный. Но лучше, наверное, все-таки обычную строку добавить, чтобы не удлинять и так длинный синхроимпульс. Если вниз, то за кодом F3 все равно отнимать процессорное время не будет, а если наверх, то можно вставить код F1 вместо строки...
Ага, спасибо! Я вобщем понял, что с растягиванием пикселей чуда не происходит, значит будет режим 78х43@50.34Гц и 7 строк в символе.
Уберу символы с рамки, сэкономлю такты. Потестировал этот режим, можно ужаться, чтобы и в нем не сильно тормозил код.
Вариантов удобных всё равно не остаётся.
Уберу символы с рамки, сэкономлю такты.
Да, снизу F3, сверху - F1 в каждой строке. В рабочей области тоже можно F1 в конце каждой строки для экономии тактов.
Убрать лишние выборки ПДП и в режиме 50 Гц тормозить будет даже меньше, чем при 60 Гц - реже обращение к ОЗУ...
Экономию можно получить, если стандартизировать анимационные спрайты. Сделать 4х4 знакоместа и 4 кадра. Верхнее знакоместо на подъем, как у колбы и сердца. А вот меч большой, его получится поднять только на половину знакоместа, значит ему просто нужна другая анимация. Большой спрайт, если такой будет, делить на малые.
Да, снизу F3, сверху - F1 в каждой строке. В рабочей области тоже можно F1 в конце каждой строки для экономии тактов.
Т.е. там, например, где начинается невидимая область (бордюр), можно поставить F1?
Т.е. там, например, где начинается невидимая область (бордюр), можно поставить F1?
Да, но есть нюанс: возможно, после F1 придется оставить еще один байт (хотя бы нулевой). Цитирую документацию:
Note: If a Stop DMA character is not the iast character in a burst or row, DMA is not stopped until after the next character is read. In this situation, a dummy character must be placed in memory after the Stop DMA character.
Думаю, опечатка, в кадровый, конечно, не строчный.
Да, спасибо что поправил - речь конечно же про кадровый ))
На реале пришлось область видеопамяти предварительно почистить, чтобы запустилось.
Близко к краям изображение нежелательно выводить - синхронизация может сбиваться, лучше использовать 64 символа из 78, а крайние оставлять черными...
А до изменений области что было? А то у меня ничего внятного не показывает - всё улетает в космос и никакой стабильной картинки. Не могу шедевр оценить (((((
- - - Добавлено - - -
Да, Hammer, дело говорит Pyk про 64 символа. В РК нельзя всю строку в 78 символов использовать - надо оставить слева 8 пустых знакомест, а справа 6. Иначе вообще мало кто увидит картинку по ТВ - хоть по современному, хоть по допотопному. И ко всему прочему надо сверху примерно строки три оставлять пустыми и снизу ещё парочку. Ну или грамотно расставлять все эти F1 и F3.
Не могу шедевр оценить (((((
Да там нечего смотреть, всё то же самое. Pyk наверное имел в виду, что я экран не стираю перед использованием. Как переработаю графику, выложу ещё чего-нибудь.
- - - Добавлено - - -
надо оставить слева 8 пустых знакомест, а справа 6
Это я в эмуляторе вижу, поправлю.
Ну или грамотно расставлять все эти F1 и F3.
Пока не овладел эти кунг-фу. Куда ни поставь, либо картинку на две части делит, либо срыв синхронизации.
Пока не овладел эти кунг-фу. Куда ни поставь, либо картинку на две части делит, либо срыв синхронизации.
Тогда пока на них и не отвлекайся, чтоб голову не морочить.
- - - Добавлено - - -
Да там нечего смотреть, всё то же самое. Pyk наверное имел в виду, что я экран не стираю перед использованием. Как переработаю графику, выложу ещё чего-нибудь.
Ну вчерашнее хоть криво но запустилось, а после небольшой правки уже и не криво. А сегодняшнее просто улетает и всё - на экране мельтешение строк и всё ((
Буду ждать новых версий!
Интересно посмотреть, правда ли на телевизорах пиксели в нужную сторону растянутся?
demo_0.2.zip
https://disk.yandex.ru/d/F-zs61NwkS-d_w
Ещё ссылочку приложу -> https://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=905294#post905294
Ещё ссылочку приложу
Спасибо! Я уже остановился на 78х43@50.34Гц и 7 строк в символе. Но если найдется режим, в котором можно заквадратить псевдопиксели, то конечно рад буду проверить.
- - - Добавлено - - -
Подскажите максимально быстрый способ чтения клавиатуры. Или где описание искать. Стандартная процедура из Монитора оказалась слишком медленной.
Подскажите максимально быстрый способ чтения клавиатуры. Или где описание искать. Стандартная процедура из Монитора оказалась слишком медленной.
В Пикачу смотрел? Я там каждый фрейм читаю напрямую из порта.
- - - Добавлено - - -
Максимально быстрый способ такой. Выставляем в порт 8000 (РК86) или в ED00 (Апогей) значение, соответствующее линиям клавиатуры, которые хотим опросить. Затем читаем из портов соответственно 8001 или ED01.
- - - Добавлено - - -
Вот когда-то такую подсказку делал, может поможет:
Т.е. установленный бит соответствует нажатой клавише? Если я правильно понял, то вполне можно устанавливать комбинации клавиш в одном ряду...
Максимально быстрый способ такой...
Ага, с подсказкой сразу понятно стало. Разобрался откуда берутся тормоза. ПДП держит шину наверное. Читается из порта всегда быстро. А записывается быстро в него только во время обратного хода луча.
Т.е. установленный бит соответствует нажатой клавише? Если я правильно понял, то вполне можно устанавливать комбинации клавиш в одном ряду...
Наоборот, если бит сброшен, то клавиша нажата.
- - - Добавлено - - -
Ага, с подсказкой сразу понятно стало. Разобрался откуда берутся тормоза. ПДП держит шину наверное. Читается из порта всегда быстро. А записывается быстро в него только во время обратного хода луча.
Если контроллер ПДП получил управление, то процессор остановлен и уже никак и ничто не записывается им ни в порты ни в память, ни быстро ни медленно.
Вот, что у меня получается )
Сделал стирание экрана перед запуском демки, переделал счетчик-делитель, привязал его к обратному ходу луча, сделал отдельную быструю подпрограмму для вывода спрайтов фиксированного размера 4х4 знакоместа и 4 кадра, сделал набросок опроса клавиатуры, частично разметил бордюр. Получилось рабочее пространство шириной 64 знакоместа, что очень удобно.
Однако всё работает плавно, и быстро! И есть еще много возможностей для оптимизации. И есть сам по себе запас ресурсов. В принципе, теперь стало понятно, что на гугловского динозаврика мощностей хватает. Я рад )
Заставил человечка бежать по нажатию на пробел. Перемещается он на одно знакоместо. Скорость при этом в два раза выше скорости больших звёзд. Можно двигаться на половину знакоместа, тогда скорость сравняется со скоростью больших звёзд.
НО! За счет анимации, смещение на одно знакоместо выглядит вполне себе нормально, я думал, что будет заметен перескок, но нет всё норм. Если бы ФПС побольше иметь, тогда да, надо использовать перемещение на половину знакоместа. Но пока прям вот сильно заметно ускориться не получилось. А ускорение будет потрачено на карту уровня, просчёт коллизий и т.д.
Я вот чего думаю... Диззи всё время машет руками для того, чтобы его было лучше видно на фоне других спрайтов. Тут даже такое не прокатит. Слишком маленькое разрешение, персонажа от фона цветом не отделить, всё сливается в пиксельную кашу.
Вот хороший пример:
https://i.redd.it/t9w9pawm55a91.gif
Все персонажи на ровном черном фоне. Наверное надо в эту сторону думать по рисовке.
Жаль праздники заканчиваются, поэтому темп мне придётся сильно снизить.
делай под цветной апогей
В любом случае, сначала надо научиться делать под ч/б 86РК.
за вдохноовлениём идти на lowres jam-ы
Я один столько спрайтов не нафигачу. Тут вообще надо художником быть.
И, как ни крути, 86РК и сейчас самый распространенный конструктор. РК даже на Али продают, в разных версиях, а Апогеев я что-то не видел
Shumadan
08.01.2024, 14:47
Тут вообще надо художником быть.
Если что обращайтесь. Имею художественное образование)
Здесь помогал кирпичи рисовать) https://zx-pk.ru/threads/32119-batty-dlya-pk-spetsialist.html?p=1085282&viewfull=1#post1085282
Если что обращайтесь. Имею художественное образование)
Здесь помогал кирпичи рисовать) https://zx-pk.ru/threads/32119-batty-dlya-pk-spetsialist.html?p=1085282&viewfull=1#post1085282
Отлично! Нужно найти общий стиль рисовки. Я очень сейчас стараюсь сделать очередную версию демки, нужно будет её посмотреть и скорректировать направление моего вялого художественного вектора.
Очень много времени уходит на рисование спрайтов. В основном из-за того, что после переноса в демку они смотрятся либо слишком "тяжело", либо чужеродно. Спрайт отправляется в корзину.
Похоже уже на игру? Пробел включает беготню!
80051
На телевизоре выглядит отлично:
80053
Ну и бегает довольно шустро )))
Пробел включает беготню!
demo_03.zip
80055
1) Сначала следует очистить память, и только потом включать туда экран.
Подскажите максимально быстрый способ чтения клавиатуры. Или где описание искать. Стандартная процедура из Монитора оказалась слишком медленной.
2) Бывают РК-шки с другой клавиатурой (Электроника КР-02/-03) ;) https://zx-pk.ru/threads/9653-radio-86rk-navigatsiya-po-klonam.html
В ПЗУ у них изменённая процедура опроса клавиатуры.
https://disk.yandex.ru/d/yXYBW39y3LjVvi/%D0%A0%D0%90%D0%94%D0%98%D0%9E-86%D0%A0%D0%9A/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D 0%B8%D0%BA%D0%B0%20%D0%9A%D0%A0-02%20(%D0%A3%D0%BB%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D 1%81%D0%BA) <== внимание, на схеме клавиатуры перепутаны XP1-XP2. Ориентироваться на количество линий: 8+1 и 11+1.
1) Сначала следует очистить память, и только потом включать туда экран.
Спасибо, исправлю!
2) Бывают РК-шки с другой клавиатурой (Электроника КР-02/-03) ;)
Тьма модификаций, за всеми не угонишься, поэтому за основу взял Радио 86РК, портировать в последующем можно, но портировать пока нечего. Только-только скелет гомункула формируется в жутких муках.
- - - Добавлено - - -
Интересно... Тут картинка растянулась вширь, и пиксели стали такими, как надо:
https://zx-pk.ru/attachment.php?attachmentid=80053&d=1704733026
А здесь наоборот, не смотря на то, что в строке 7 линий, пиксели еще сильнее растянуло:
https://zx-pk.ru/attachment.php?attachmentid=80055&d=1704735689
Интересно... Тут картинка растянулась вширь, и пиксели стали такими, как надо
Ну так я растянул вширь во весь экран 16:9
Подскажите максимально быстрый способ чтения клавиатуры. Или где описание искать. Стандартная процедура из Монитора оказалась слишком медленной.
Речь про F81B?
Ну так я растянул вширь во весь экран 16:9
Если что, в Emu80 тоже есть такой режим, включается по Alt-N. Но я не уверен, что стоить писать что-то в расчете на него...
опять же если рисовать в "запрещенной зоне" можно получить окрашивание на некооторых телеках
Пытался найти инфу на форуме, но потонул во флэйме. Можно в двух словах, как это работает, и видно ли сие в эмуляторах?
Назревают два события:
1. Неожиданно просто и быстро получилось прикрутить карту уровня, поэтому скоро я окунусь в рисование спрайтов с головой. Заодно, хотелось бы изучить эти эффекты.
2. Очень надеюсь, что через пару недель (не сглазить бы) решится вопрос с платой, и я начну собирать железку. А значит тоже в какой-то степени смогу потестировать цвет.
Hammer, если что, я делал какие-то наброски для конвертирования графических файлов в псевдографику РК и Апогея. Если актуально - найду.
Hammer, если что, я делал какие-то наброски для конвертирования графических файлов в псевдографику РК и Апогея. Если актуально - найду.
Не, не надо, тут подбор и перерисовка спрайтов занимает гораздо больше времени, чем конвертирование. Пока бессмысленно.
Vinxru делал даже проще - просто ПДП программировался на буфер удвоенной длины. В каждой половине буфера свой полукадр, и не нужно ничего переключать.
Получилось, и очень хорошо выглядит в эмуляторе тоже. Появляется глубина даже у совсем маленьких спрайтов. Но нужно отрисовывать спрайты сразу на двух экранах, и с минимальной задержкой, иначе появляется эффект размытия. Вообще практически параллельно надо спрайты рисовать.
Ведущий_специалист
11.01.2024, 18:52
скролл для бега гуглозаврика. Скорость на всю. https://cloud.mail.ru/public/PqL6/8i1S5L45h
Если успею, сделаю для сравнения с двойным буфером экрана чтобы минимизировать рывки и дерготню.
Ведущий_специалист
12.01.2024, 00:39
https://cloud.mail.ru/public/Ytbe/senN2PrQ7 А вот с привязкой по началу кадра (пока что без второго экрана). Можно заметить забавные артефакты с кактусом )))
к слову о написании игр. Как по мне, было бы весьма неплохо создать (хоть какую-нибудь) базу спрайтов, а до кучи и разных подпрограмм для работы с изображениями, клавиатурой и т.п. BASIC ведь почему прост? Там каждая команда, это, по сути, функция. Хотя ладно, на счет функций я загнул, это уже готовый графический язык получится. Но библиотку спрайтов и вправду было бы неплохо сделать, чтобы тем, кто в художествах вообще ни ногой, было хоть что-то перед глазами. Ну и наверное отдельную тему для этого, если идея найдет откликнувшихся... А то я замаялся искать приемлемый спрайт персонажа для экрана РК. Пока в одной игре на tandy 200 не увидел. Ну и все равно подгонять пришлось...
к слову о написании игр. Как по мне, было бы весьма неплохо создать (хоть какую-нибудь) базу спрайтов, а до кучи и разных подпрограмм для работы с изображениями, клавиатурой и т.п.
Ну это должен родиться некий движок с хорошим описанием. А пока его нет, очень помогает книга "Программирование на языке ассемблера для микропроцессоров 8080 и 8085, Л. Левенталь". И все равно, даже готовые решения/подпрограммы всегда спорны, всегда требуют адаптации в конкретный код.
А то я замаялся искать приемлемый спрайт персонажа для экрана РК. Пока в одной игре на tandy 200 не увидел. Ну и все равно подгонять пришлось...
Добро пожаловать в мой мир )))
Я про это сразу упомянул, как только влился в процесс. Делать это надо не совсем так. Надо нанять художника, который нарисует стартовый ассет. Но это позже. Сначала нужно пощупать спрайты за вымя, погонять их, понять наиболее выгодную разметку для экранного пространства.
Вот очередная порция рассуждений на эту тему )
Как показать больше движения, используя меньше графики? Единственный способ, использовать параллакс - объекты движущиеся в одном направлении должны иметь разную скорость. Те, что дальше от зрителя, должны двигаться медленнее.
А какие это должны быть объекты?
Пара разных облаков, звёзды, кроны деревьев уходящие в дизеринг к стволу, очертания гор, город и т.д.
Пикселей мало, значит основные спрайты не должны быть огромными. А какого размера? А хрен его знает...
И вот только через тесты можно подобраться к этим величинам.
Это скроллерки, а ведь по программированию гораздо проще сделать графическую новеллу! Но тут придётся отталкиваться от мастерства художника и сценариста.
Вобщем я считаю, что первым делом нужно создавать базу идей к играм. Не портов с других платформ, а именно самобытных сценариев.
Вот я писал для 3Д сценарий, но пне кажется, его можно и на РК реализовать в повествовательном стиле.
3022 год, инженер на небольшом ремонтном корабле был отправлен к астероиду, для приведения в порядок систем ретрансляции видеосигнала.
Астероид диаметром 138 метров, покрыт кратерами, скалистыми образованиями, наблюдается периодическая активность гейзера, где-то здесь находится погибший астронавт. На орбите астероида летает небольшой спутник-наблюдатель. Спутник имеет интеллект, есть отчёт о потере управления спутником.
Вскоре после того, как ретранслирующее оборудование было установлено и успешно запущено, астероид посетил неизвестный корабль, начались аномалии в работе оборудования.
Задача инженера - восстановить работу ретрансляторов. Для этого нужно выявить причины аномалий и отремонтировать спутник.
По мере восстановления систем ретрансляции с ним на связь в режиме видеоконференции выходят отдельные персонажи, которые помогают инженеру решать головоломки и снабжают его необходимой информацией.
* Спутник - это живой мозг извращенца и матершинника, заключённый в стеклянную капсулу, жизнь поддерживается за счёт энергии двух солнечных батарей, спутник имеет один вялый манипулятор. Органически мозг цел, но от одиночества имеет проблемы социального характера
** Про пилота мало что известно, он в самом расцвете сил, когда-то имел военный статус "Архангел", в настоящее время соглашается на контракты гражданских организаций, предпочитает работать один и в отдалённых регионах космоса.
Самый важный вопрос - нафига это надо, если распоследняя ардуина мощнее по всем характеристикам? Ну... Это мостик, по которому артобъекты субкультуры могут переходить в сознания других людей. Заражение рационально производить посредством геймплейных видеороликов. Это весело и интересно!
Ведущий_специалист
12.01.2024, 19:46
Ну это должен родиться некий движок с хорошим описанием.
У меня это почти готово и меня это полностью удовлетворяет. Хотя да, многим хотелось бы целиком на асме, многим целиком на си... Я для себя сделал симбиоз ассемблера и си.
Самый важный вопрос - нафига это надо.
Тут очень интересный и философский вопрос. Многие на протяжении всего времени (более 40 лет) поносили бедный рк86 и вдоль и поперек, мол самая ущербная платформа каких видывал свет.... Но я как то наблюдал и за остальным.....Специалист, Орион... Много ли программных шедевров в виде красочных игр легенд? А вот именно, или нет или на пальцах посчитать.
Это весело и интересно! А вот здесь в точку! Вжись не возьму ардуйню и не стану в нее играть, почему? Любой дурак напишет на нее игру.... Это же крайне неинтересно!! Берешь любой esp32 и творишь на нем любой эмуль видеоигры.... Ну неинтересно же!! А вот берем вм80 с частотой до 3х МГц и пишем интереснейшую игру. И мозг разминаешь и понимаешь что пишешь самую интересную игру в мире, так как лишь немногим удается реализовать на этом что то играбельное.
Многие на протяжении всего времени (более 40 лет) поносили бедный рк86 и вдоль и поперек, мол самая ущербная платформа каких видывал свет....
Тут как посмотреть. Вот появились мелкие и очень удобные I2C экраны, сразу же появился Ардубой, появились клавиатуры на тактовых кнопках... Сейчас адрубои расхватывают модуль, который эмулирует I2C экран с выводом на телевизор/монитор, мелкий экран, говорят, неудобно, говорят... Ничего не напоминает? Иногда кажется, что они скоро дискеты и картриджи изобретут. И интерес ведь не снижается, а только растёт! Очень прикольное явление само по себе.
Появляется в итоге одноплатный компьютер с клавиатурой и выходом на монитор. Ну есть у нас такой уже))) Можно даже ESP воткнуть вместо ВВ55 для математики и общения с внешним миром, или вместо ПЗУ при желании.
Я тем временем сделал таки второй экран, он пока правда безбожно глючит. Думаю, как теперь делать анимацию самого спрайта, а не его графики. Например, прыжок игрока. Видимо придётся доступ к массивам и таблицам придумывать.
NEO SPECTRUMAN, интересная идея :)
Не знаю только, насколько быстро получится на лету конвертить, но думаю, что вывод буфера фиксированного размера должно получиться неплохо оптимизировать.
Не понял только, откуда цифры 10*32 байт? Псевдографика на РК - 128*50... Неполный экран?
Да вообще фиксированный размер очень удобен. Сначала я написал умный вывод спрайта, с циклами и подсчётом разной фигни, потом всё переделал в пользу скорости. У меня получился вывод спрайта 8х4 вот таким:
SPRITE_8X4_T:
PUSH H
PUSH D
LXI B, line - 7
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
POP D
POP H
LXI B, 8
DAD B
RET
SPRITE_ROW_8:
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX D
RET
В HL кладём адрес знакоместа на экране, откуда начнётся прорисовка спрайта, в DE кладём адрес спрайта в памяти. После вывода спрайта вызываем подпрограмму ещё раз, и она заполняет следующий кусок экрана по горизонтали этим же спрайтом. Так можно шлёпать текстуры.
Код выглядит большим и колхозным, но работает быстрее. Видимо всю графику сведу к спрайтам 4х2, 4х4, 6х6 и 8х4.
Ведущий_специалист
14.01.2024, 14:56
Как показать больше движения, используя меньше графики? Единственный способ, использовать параллакс - объекты движущиеся в одном направлении должны иметь разную скорость. Те, что дальше от зрителя, должны двигаться медленнее.
!
Мало того, до меня тут немного дошло, что по идее, в нормальных играх нужно использовать (хоть немного) физику прыжка. Объясню что я имею ввиду. Нажали пробел - главный герой должен отреагировать прыжком. Как мы будем это делать? Первое на ум приходит приращивать координату Y до определенного значения а потом ее минусовать. Вот здесь и вылазит главная ошибка. Если обработка героя синхронизирована с выводом спрайтов врагов и фона - получится робот автомат, скорость подъема а затем спуска будет фиксированной что некрасиво и неинтересно. А вспомните супермарио? резкий скачек, ближе к пику прыжка замедление, и спуск, тем быстрее чем ближе к земле.
Сейчас покажу как я реализовал это программно и соответственно примерчик запускаемый.
Мало того, до меня тут немного дошло, что по идее, в нормальных играх нужно использовать (хоть немного) физику прыжка.
Вот тоже дошел до прыжков, и тоже упёрся в этот момент. В игровых движках для перемещения объектов используют гравитацию, силу, или импульс. Вы пишите про импульс. Я пока на этом подзастрял.
Ну, может использовать тот же счетчик? В момент прыжка вычисляем смещение в одно знакоместо, на счет 3 смещение на 0,5 знакоместа, такты 6,7 - зависает персонаж, и потом меняем вектор движения и также обратно, сначала на 0,5 знакоместа, потом на 1, пока не встретится препятствие. Я когда питоном баловался, так примерно делал. Но то там...
Надо какую-то функцию к счетчику прикручивать, либо синус, либо параболу, либо сплайн. Так в современных игровых движках анимация устроена, линейное перемещение можно заменить. Но все равно не очень понятно, как себя должен вести спрайт при двойном прыжке. Попробую с импульсом подружиться.
По поводу еще одной идеи для игры. Баскетбол в одну корзину. Но мяч можно держать в воздухе нажимая пробел - мяч получит дополнительный импульс при нажатии. На яндекс играх увидел)
не забывай, что у тебя крайне неторопливый процессор, а потому высчитывать движение по формуле может быть не так практично, чем если заложить готовый алгоритм движения. В качестве примера можно рассмотреть Super Mario для nes - там у процессора всего три регистра (правда два из них индексные), но прыжок выглядит довольно плавно и, как мне думается никаких сложных вычислений там не сделать. Хотя, конечно, видеочип там тоже многое сглаживает. А частота то с РК вроде как одна.
Значения синуса с удобным шагом можно в таблицу записать, и брать оттуда готовое значение, чтобы не считать. Я так на ардуине синусоиду и другие формы сигнала генерил через PWM.
ну в общем, несколько спрайтов. Правда выглядят грубовато в стандартном режиме РК, а вот в 44*7 может и ничего будет. Надо еще учитывать что спрайты в формате РК будут несколько худее, чем на рисунке. Формат изображения 90*50 пикселей. Мне в gimp нормально работать, так что масштабированием я не занимался. В фотошопе тож нормально будет видно при увеличении, или в paint.net. Содрано с "CRACKY mini" (TANDY200)
https://disk.yandex.ru/i/mZzUkrh5zQANVA
Если мелковато - извините. Но суть все равно ясна.
Вот таблица для синуса, которую я использовал для генерации 8-ми битного звука:
sine:
db $00, $00, $00, $00, $01, $01, $01, $02,
db $02, $03, $04, $05, $05, $06, $07, $09,
db $0A, $0B, $0C, $0E, $0F, $11, $12, $14,
db $15, $17, $19, $1B, $1D, $1F, $21, $23,
db $25, $28, $2A, $2C, $2F, $31, $34, $36,
db $39, $3B, $3E, $41, $43, $46, $49, $4C,
db $4F, $52, $55, $58, $5A, $5D, $61, $64,
db $67, $6A, $6D, $70, $73, $76, $79, $7C,
db $80, $83, $86, $89, $8C, $8F, $92, $95,
db $98, $9B, $9E, $A2, $A5, $A7, $AA, $AD,
db $B0, $B3, $B6, $B9, $BC, $BE, $C1, $C4,
db $C6, $C9, $CB, $CE, $D0, $D3, $D5, $D7,
db $DA, $DC, $DE, $E0, $E2, $E4, $E6, $E8,
db $EA, $EB, $ED, $EE, $F0, $F1, $F3, $F4,
db $F5, $F6, $F8, $F9, $FA, $FA, $FB, $FC,
db $FD, $FD, $FE, $FE, $FE, $FF, $FF, $FF,
db $FF, $FF, $FF, $FF, $FE, $FE, $FE, $FD,
db $FD, $FC, $FB, $FA, $FA, $F9, $F8, $F6,
db $F5, $F4, $F3, $F1, $F0, $EE, $ED, $EB,
db $EA, $E8, $E6, $E4, $E2, $E0, $DE, $DC,
db $DA, $D7, $D5, $D3, $D0, $CE, $CB, $C9,
db $C6, $C4, $C1, $BE, $BC, $B9, $B6, $B3,
db $B0, $AD, $AA, $A7, $A5, $A2, $9E, $9B,
db $98, $95, $92, $8F, $8C, $89, $86, $83,
db $80, $7C, $79, $76, $73, $70, $6D, $6A,
db $67, $64, $61, $5D, $5A, $58, $55, $52,
db $4F, $4C, $49, $46, $43, $41, $3E, $3B,
db $39, $36, $34, $31, $2F, $2C, $2A, $28,
db $25, $23, $21, $1F, $1D, $1B, $19, $17,
db $15, $14, $12, $11, $0F, $0E, $0C, $0B,
db $0A, $09, $07, $06, $05, $05, $04, $03,
db $02, $02, $01, $01, $01, $00, $00, $00
Смысл такой, линейная позиция - это индекс для таблицы. Например, если у нас весь прыжок описывается значением от 0 до 7, то значение нужно отмасштабировать до диапазона таблицы. Значит делаем побитовый сдвиг линейного значения влево 5 раз. А полученную из таблицы цифру наоборот сдвигаем вправо. Сдвиг влево - это умножение на два, сдвиг вправо - деление на два. Таким образом подбираем нужные коэффициенты. Работает быстро, без шума и пыли )
Ведущий_специалист
14.01.2024, 23:13
Ну так вот... Немного распишу как делать задержки в общем цикле.
void dino_core(void)
{
if (dino.jump !=1) // если не прыгаем
{
put_sprite_3 = dino.dino_ptr[dino.AnimFrame]; // отрисуем текущий спрайт
put_sprite(dino.x,dino.y); // выведем по координатам
if (dino.AnimFrame==0) dino.AnimFrame = 1; else dino.AnimFrame = 0; // шевелим ногами (меняем спрайты)
}
else
{
jump_delay--; // уменьшаем задержку прыжка
if (jump_delay == 0) {// достигла 0
jump_delay = di_jmp_dl[dino_jump_pointer];// обновим задержку с нового места массива
put_sprite_3 = dino_empty;// пустой спрайт
put_sprite(dino.x,dino.y);// затрем предыдущее состояние
dino.y = dino_jump[dino_jump_pointer];// обновим новую координату по y
put_sprite_3 = dino.dino_ptr[dino.AnimFrame];// обновим спрайт
put_sprite(dino.x,dino.y); // отрисуем в экран
if (dino_jump_pointer!=8){ // достигли конца координат прыжка и его задержки?
dino_jump_pointer++;// если нет то следующий
}
else
{
dino.jump =0; //если да то снимаем флаг прыжка
dino.busy =0;// снимаем флаг запрета опроса кнопок
}
}
}
}
До этого создаем 2 массива, первый - координаты прыжка, второй задержка между итерациями.
unsigned char dino_jump[9] = {16,12,11,8,8,8,14,16,18};
unsigned char di_jmp_dl[9] = { 1, 2, 2,3,7,5, 3, 2, 1};
Как видно, координата 8 (что посерединке, 4 элемент массива) самая затяжная (задержка 7 циклов) ибо является переломной в физике .. типа дальше падаем вниз.
Да, координаты по у в рк чем выше экран тем ближе к 0, и еще... запустив пример, вы увидите почему задержка в циклах такая маленькая. Игровой процесс оброс кактусами скроллом прыжками и прочим... задержки минимальны... увы проц совсем слаб.
что такое 1 цикл? а вот...
while(1)
{
check_player();
cactus_check();
waitHorzSync();
scroll();
cactus_core();
dino_core();
}
сие есть один цикл. Еще добавится птеродактиль и опрос на коллизии с птеродактилем и кактусами. Задержку придется еще больше занизить. Помимо всего еще будет отрисовка очков и может быть смена дня ночи.... Вот поэтому я и сделал пальмиру. Там хотя бы можно выпаять кварц штатный 16 мгц и впаять хотя бы 18, и можно спокойно играть в новые игры.
https://cloud.mail.ru/public/PqL6/8i1S5L45h Загружайте смотрите, принимаются замечания. По сути основная часть игры готова - осталась ерунда.
Кстати да, о чем писалось выше, обратите внимание - кактус асинхронен скролу земли... Все просто. Кому интересно - выложу движок сюда . Вместе обмусолим , вместе допилим, вместе продвинем в массовость.
- - - Добавлено - - -
Раз уж добрался до компа распишу немного больше полностью по динозаврику моменты.
void check_player(void)
{
uint8_t kb=255;
if (dino.busy==1) return; // ядро занято отрисовкой и нет смысла жать кнопки и их отрабатывать
kb=0xff;
kb=key_scan(0xfd);// опросим клавиатуру
if (kb==223) //жмем прыжок
{
dino.dino_ptr = Dino[0]; // набор спрайтов для летящего динозаврика (тут статика)
dino.AnimFrame=0;// но начнем с начального тайла
dino.jump = 1; // сообщение ядру что мы прыгаем
dino.busy = 1; // сообщение этой функции в дальнейшем что мы заняты
jump_delay = 1; // костыль (как же без него)
dino_jump_pointer = 0;// указатель на массивы координат Y и задержки
}
if (kb==127)// жмем вниз
{
put_sprite_3 = dino_empty; // todo в разработке
put_sprite(dino.x,dino.y);
dino.dino_ptr = Dino[2];
}
if (kb==239)//run left // немного от оригинала отошел - бежим влево
{
dino.x-=1;
if (dino.x<left_x) dino.x=left_x; // ограничение
}
if (kb==191) // бежим вправо
{
dino.x+=1;
if (dino.x>right_x) dino.x=right_x;
}
//Мы ничего не делаем. Будем просто бежать
if (kb==255) // нет действий от пользователя
{
if (dino.dino_ptr != Dino[1])dino.dino_ptr = Dino[1]; // сменим набор спрайтов на бег
}
}
самое интересное - наверное структура самого динозаврика
typedef struct
{
unsigned char busy;
unsigned char jump; //
unsigned char y; //
unsigned char x;
unsigned char **dino_ptr; // выбор спрайтов
unsigned char AnimFrame; // номер выводимого спрайта
}dino_t;
предпоследний указатель немного сложен...да, потому что указатель на массивы
unsigned char **Dino[] = {Dino_stay , Dino_run, Dino_duck,};
а в свою очередь содержимое массива выше это....
unsigned char *Dino_stay[] =
{
dino1,
dino1,
};
unsigned char *Dino_run[] =
{
dino2,
dino3,
};
... где например...
unsigned char dino1[122] = {
10,12,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x07, 0x17, 0x17, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17,
0x13, 0x03, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x17, 0x17, 0x03, 0x03, 0x00, 0x00,
0x00, 0x15, 0x00, 0x00, 0x16, 0x17, 0x17, 0x17, 0x14, 0x00, 0x00, 0x00, 0x00, 0x17, 0x15, 0x16,
0x17, 0x17, 0x17, 0x17, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x17, 0x17, 0x17, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x13, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
0x10, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00
};
Это уже массив самого спрайта.
Стоит отметить, что такая реализация указателей массивов и структур очень неплохо переваривается самим z88dk. Исполняемый код в таком стиле создается максимально быстрым.
У меня и оба экрана заработали, и функция синуса. Всё быстро бегает, я вполне доволен. Ещё несколько косяков уберу и будет новая демка.
Но! С двойным экраном есть две фичи:
1. Пока мы отображаем один экран, а рисуем на втором, спрайт может поменять свою позицию. Если под спрайтом фон не перерисовывать, то стирать спрайт тоже придется сначала на старом экране, потом на новом. Иначе будет мерцание.
2. Я отрисовываю звезды не каждый цикл, а через раз. И от этого они попадают всегда на чётный экран. Из-за этого звёзды мерцают. Не хочется их в общий цикл ставить, но наверное придётся.
Теперь надо придумывать, как быстро коллизии считать.
Вот ещё интересная графика:
https://www.youtube.com/watch?v=zTH8kSlWJHU
NEO SPECTRUMAN
18.01.2024, 00:50
DDp
SegaBoy
Pyk
нашел у себя такое видео
ЧТО ЭТО ЗА МАШИНА?
ничего в упор не помню
https://i.postimg.cc/mkhc72bc/ch0001safe-MOV.jpg
вместо дополнительных 2-х каналов цвета
тут почему то модифицированное подчеркивание с обрезкой шрифта о_О
какойто фпга недоклон?
- - - Добавлено - - -
да и инвертирующего атрибута не видно
- - - Добавлено - - -
или наверрно это те character attribute codes?
которыее 11ссссBH
эти la0 la1 разведены на апогее?
если до тогда это можот расширть возможностти чисто атрибутного режима
(в 3 раза больше цветов)
или наверное хватает одних vsp и lten
нашел у себя такое видео
ЧТО ЭТО ЗА МАШИНА?
ничего в упор не помню
…
какойто фпга недоклон?
…
или наверрно это те character attribute codes?
которыее 11ссссBH
Если это моё (судя по телевизору), тогда это обычный цветной Апогей. (Сам уже ничего не помню из той поры)))
И да, это те самые атрибутные коды.
NEO SPECTRUMAN
18.01.2024, 01:03
И да, это те самые атрибутные коды.
почему я только щас обратил на это внимание? о_О
да и блджд из этих la1 la0
можно было сделать еще дополнительную градацию яркости для 2-х каналов
и получить еще 7 цветов
хотя la1 действует только на линии подчеркивания
тобешь только 3 цвета
ну или дополнительное разноцветное подчеркиваание
эти la0 la1 разведены на апогее?
…
или наверное хватает одних vsp и lten
Нет, LA не разведены.
Да, обрезка сверху и снизу осуществляется по сигналу VSP. Соответственно до линии подчёркивания или после (и в одном случае и до и после).
NEO SPECTRUMAN
18.01.2024, 03:17
Если это моё (судя по телевизору),
я тоже думааю что это твоё :)
Нет, LA не разведены.
я ужо скачал схему и глянул Ж)
- - - Добавлено - - -
Да, обрезка сверху и снизу осуществляется по сигналу VSP. Соответственно до линии подчёркивания или после (и в одном случае и до и после).
ну значет зашибись
щас че нить скнонвертирую
с "новыми" возможностями :v2_dizzy_step:
- - - Добавлено - - -
нет я немножкоо общеталсо
для атрибутного режима
это всего лишь 8 дополнительных знакомесст
с character атрибутами
https://i.postimg.cc/L84FVHhD/VW-468-dithered-c-codes.png
без
https://i.postimg.cc/vHtd918D/VW-468-dithered.png
и судя из названия
можнно предположить что оно действует только для 1-го символа
с дополнительными не сделанными цветами я тоже общеталсо
ну тогда можно было бы повесить оно на переключение на другой шрифт например
- - - Добавлено - - -
6х4
как раз по максимально возможноой высоте экрана
https://i.postimg.cc/MZDnZGkb/VW-468-dithered-0004.png
2,5 экранов в высоту :)
https://i.postimg.cc/mrBDGxd6/yuubari-468-dithered-0001.png
- - - Добавлено - - -
3.7 экранов в высоту :v2_lol:
https://i.postimg.cc/0251xkxS/mayano-top-gun-0002-468-dithered-0000.png
чаго нет комодурщики так делают сорокалетиями
https://i.postimg.cc/FFVX2dtm/0002-468-dithered-0002.png
- - - Добавлено - - -
https://i.postimg.cc/3RH2VrV4/0002-320-dithered-0000.png https://i.postimg.cc/XJc9bS62/0003-320-dithered-0000.png
https://i.postimg.cc/cCFYvRHw/0004-320-dithered-0000.png https://i.postimg.cc/xj5Lp2R8/0006-320-dithered-0000.png
https://i.postimg.cc/hPGTH5yr/0007-320-dithered-0000.png https://i.postimg.cc/d0Gy2P3q/0010-320-dithered-0000.png
https://i.postimg.cc/XYGFvy0B/0012-320-dithered-0000.png https://i.postimg.cc/m26CRyKG/0008-320-dithered-0000.png
https://i.postimg.cc/MpCBfKWP/0013-320-dithered-0000.png
- - - Добавлено - - -
SegaBoy, DDp, Pyk а кто нить проверял line counter mode на реале?
ато там какаята ахенея в доке
и щас я понимаю вообще как последняя строка знакоместа выплевываетсо первой? о_О
или последняя строка беретсо из 0-й строки?
чо за муть?
кому и нахрена был нужен режим пережевывания шрифта?
- - - Добавлено - - -
картинки из доки
https://i.postimg.cc/qvWC9BSc/07.png https://i.postimg.cc/QM5WsGZ2/09.png
https://i.postimg.cc/DZT4wj28/11.png https://i.postimg.cc/mDyzzYDV/15.png
а кто нить проверял line counter mode на реале?
ато там какаята ахенея в доке
и щас я понимаю вообще как последняя строка знакоместа выплевываетсо первой? о_О
или последняя строка беретсо из 0-й строки?
чо за муть?
кому и нахрена был нужен режим пережевывания шрифта?
Проверял. Всё работает как описано. Line Counter Mode 1 сдвигает знакоместо вниз и первой сверху выводится последняя строка. Именно этот режим и выставлен в РК по-умолчанию, как на Figure 13. Первой идёт строка 9, но она гасится режимом подчёркивания. Затем идут видимые строки с 0 по 7 и последняя строка 8, которая тоже гасится. (Если б они не гасились, то вместо строк 8 и 9 выводились бы строки 0 и 1, так как старшая линия LC3 никуда не подключена).
- - - Добавлено - - -
В некоторых программах реализованы символы высотой 9 строк, где первые две строки дублируются. Как раз за счёт сдвига вниз. Первой идёт последняя строка 8, а за ней уже строка 0. Но так как LC3 не задействована то и 0 и 8 это одна и та же строка в знакогенераторе.
NEO SPECTRUMAN
18.01.2024, 06:55
Первой идёт строка 9, но она гасится режимом подчёркивания. Затем идут видимые строки с 0 по 7 и последняя строка 8, которая тоже гасится.
каким еще? о_О
- - - Добавлено - - -
наверно
uuuu MSB determines blanking of top and bottom lines
этож надо было так резместить эту строку
(я ее за 10 лез ни разу осознанно не прочитал (хотя мусолил эту доку вдоль и поперек))
че получаетсо если поместить underline на 9...16 строку
автоматом те обнулит 1-ю? о_О
во рукожопы
а mode1 смещение видимо для шрифта
у которого нет горизонтальных зазоров
и чтоб зазоры делать чисто хардварно
- - - Добавлено - - -
вот кстате 6х4
mode 0
https://i.postimg.cc/Y2xq12xn/0002-320-dithered-0001.png
mode 1
https://i.postimg.cc/Yqq28cnp/0002-320-dithered-0002-mode1.png
- - - Добавлено - - -
В некоторых программах реализованы символы высотой 9 строк, где первые две строки дублируются.
это какие?
- - - Добавлено - - -
интересно
а если в 6х4
ждать конца строки а потом вообще тушить видео
делать паузу
а потом включать
может получитсо растянуть КСИ еще на 40 строк и выдать 50Гц?
за это время можно выпоолнять какуюнить процедуру со статическим временем
- - - Добавлено - - -
SegaBoy, а еще не помню
для чисто атрибутного режима (когда мы забиваем на fifo)
для каждого field атрибута все равно нужно ложить баласт в виде обычного символа?
нельзя 2 подряд?
получаетсо чисто атрибутный 6х4 для РК будет тяжеловат по памяти
ДМА вообще вытянит перегон 10К за такой "уменьшенный" фрейм?
- - - Добавлено - - -
а еще когда нету времени между IR и началом отрисовки
для синхронизации с фреймами можно юзать переполнение fifo буфера
сделать например в последних строках переполнениё
а потом ловить FO
чета там делать
а после него ловить IR
@Pyk а кто нить проверял line counter mode на реале?
Да, проверял, конечно. Именно так и работает, так и в emu80 раелизовано.
а если в 6х4
ждать конца строки а потом вообще тушить видео
делать паузу
а потом включать
Что-то не понял идею? Ждать конца какой строки? Или конца кадра?
ДМА вообще вытянит перегон 10К за такой "уменьшенный" фрейм?
Вряд ли, в этом режиме вообще минимальный запас по скорости. Можно посчитать или в emu80 смоделировать и проверить.
когда нету времени между IR и началом отрисовки
для синхронизации с фреймами можно юзать переполнение fifo буфера
сделать например в последних строках переполнениё
а потом ловить FO
чета там делать
а после него ловить IR
Опять не понял идею, если честно, пояснишь чуть подробней?
SegaBoy, а еще не помню
для чисто атрибутного режима (когда мы забиваем на fifo)
для каждого field атрибута все равно нужно ложить баласт в виде обычного символа?
нельзя 2 подряд?
Если в этом режиме идут два подряд атрибута, то первый запишется в обычный буфер на 80 символов по 8 бит, а второй в фифо на 16 символов по 7 бит. Таким образом при выводе на экран первый атрибут останется атрибутом (старший бит 1), а второй превратится в символ (старший бит 0). Стало быть да, для чисто атрибутного режима нужен баласт.
NEO SPECTRUMAN
18.01.2024, 18:37
Что-то не понял идею? Ждать конца какой строки? Или конца кадра?
да именно кадра
(у меня часто не те слова проскакивают)
- - - Добавлено - - -
Опять не понял идею, если честно, пояснишь чуть подробней?
у тебя будет 2 точки для синхронизации
1-я строка в которой сделали переполнениие fifo (и это вроде должно поставить соответствующий флаг)
2-я это конец фрейма
поставив между ними какой нить счетчик
возможно ты сможешь с большей точностьью находить текущее положение в фрейме (номер такта)
ну и так больше вероятность не пропустить начало фрейма
но нужно будет пожертвовать одной строкой (ну или не одной)
ну и есное дело это не для атрибутного режима
или это может быть рамка между игровым экраном и панелькой
- - - Добавлено - - -
пока я еще тут
подкину еще идею
если для атрибутного режима баласт нужен все равно
можно попробовать хранить столбцы каждого фрейма через 1
а в конце иметь 16 столбцев с символами и атрибутами и перерисовывать только их
сдивагя на 1 байт начала видео рамы туда сюда
A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1
A2 A1 A2 A1 A2 A1 C1 A1 - C1 A1 A2 A1 A2 A1 C1 A1 - C1 - сдвинули начало
A2 A1 A2 A1 A2 C2 A2 C2 - A2 A1 A2 A1 A2 C2 A2 C2 - C1 - поправили последние 16 столбцев и начало 1-го
Ну это всё будет применимо для игр неких... статических! Надо и с другого конца думать.
Вот есть очень удачная фишка с буфером двойной длины, она даёт возможность аппаратно получить один полутон. Ну очень хорошо выглядит! Но очень сложно сразу в два экрана писать. Я попробовал арканоид замутить, там надо отрисовывать только мяч и биту, с этим легко справиться. При попадании в плитку, её можно делать серой, при втором попадании стирать. Но мне пока совсем не нравится, как мячик двигается.
А какие игры ещё можно придумать с незначительно изменяемым экраном?
NEO SPECTRUMAN
18.01.2024, 18:55
А какие игры ещё можно придумать с незначительно изменяемым экраном?
логические и флипскриновые
космические скроллшуторы
тожо не требуют перерисовки всего экрана
космические скроллшуторы
тожо не требуют перерисовки всего экрана
Я этот момент так и не понял. Меняя адрес не получится сделать горизонтальный скролл. В скролшутерах придется именно весь экран перерисовывать. Или я не врубаюсь?
NEO SPECTRUMAN
18.01.2024, 19:16
В скролшутерах придется именно весь экран перерисовывать.
у тебя весь экран черный при этом :)
тебе надо перерисовыватьь маленький кусочек земли с низу
и звездочки
тебе даже не надо востанавливать содержимое под спрайтами
стер спрайты/звезды
нарисовал звезды
нарисовал по новой землю (которая до 30% экрана максимум)
- - - Добавлено - - -
на тему арканоида
just for lulz попробуй это
https://i.postimg.cc/qvRt3Qzj/0000.png
https://i.postimg.cc/PqvP6xbD/0001.png
https://i.postimg.cc/mDQhs552/0002.png
возможно в движении
оно будет смотретсо интересно
ибо моск может вытягивать оригинальное содержимое через пикселизацию
можно всю графику сделать с закосом под шумогглюкии :)
NEO SPECTRUMAN
18.01.2024, 21:25
Что-то не понял идею? Ждать конца какой строки? Или конца кадра?
а на тему строк можно тоже
отпанахать 16 столбцев справа
и ловить каждую строку символов
может так можно будет перепрограмировать ДМА на новую строку
как раз и проц освободитсо и буфер уже будет заполнен
или например делать скролл экрана со статишной панелькой
возможн получитсо делоть "волночки" или изгиб дороги как в приставках
так можно будет и экономить на видео памяти
показывать одни строки n раз подряд
ну это при условии что не будет той ДМА ошибки
которая сразу тушит экран
если в 6х4
ждать конца строки а потом вообще тушить видео
делать паузу
а потом включать
Боюсь, что ССИ нужны будут во время паузы, вряд ли что-то путное получится :(
или это может быть рамка между игровым экраном и панелькой
Можно знакогенераторы переключать в тех компах, где они переключаются не атрибутами, например на Микроше или на Апогее. Верхняя часть - один знакогенератор, нижняя - другой...
NEO SPECTRUMAN
18.01.2024, 22:05
сконвертил рандомную gif-ку
(тут мячик сильно маленький)
и в браузере ччотта идет сильно мдлено умя
https://i.postimg.cc/TYTkX19M/0000.gif https://i.postimg.cc/fW6vwKh9/00011.gif
во со скоростью 0.02 сек на кадр
быстрее чем 0.01 :v2_lol:
https://i.postimg.cc/MHh5N0z1/00002.gif
на большей скорости мячик выглядит интересней
- - - Добавлено - - -
Боюсь, что ССИ нужны будут во время паузы, вряд ли что-то путное получится
никакого ССИ нету на КСИ
я предлагаю растянуть КСИ
отпанахать 16 столбцев справа
и ловить каждую строку символов
Интересная идея!
Целиком строку за это время обработать (например, проскроллить) за это время вряд ли получится, а вот чуть подредактировать или подсунуть готовую наверное можно.
Надо бы попробовать. Я посмотрел - в emu80 флаг FO поддерживается, но я не уверен, что я эту фичу сколь либо серьезно тестировал. Возможно, и еще кое-что придется в эмуляторе подправить...
NEO SPECTRUMAN
18.01.2024, 22:11
можно сконвертить все положения шарика
и на каком то "сером" фоне
и например с тенью
ну и ракетку можно сделать более "плавной"
A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1
A2 A1 A2 A1 A2 A1 C1 A1 - C1 A1 A2 A1 A2 A1 C1 A1 - C1 - сдвинули начало
Опять не совсем понял. Что здесь А и что такое С?
NEO SPECTRUMAN
18.01.2024, 22:13
Целиком строку ща это время обработать (например, проскроллить) за это время вряд ли получится, а вот чуть подредактировать или подсунуть готовую наверное можно.
это полезно для статишных панелек
при скролле фона
- - - Добавлено - - -
Опять не совсем понял. Что здесь А и что такое С?
атрибут и символ
это байты памяти
A1 - атрибут кадра 1
А2 - атрубут кадра 2
С1 - символы для фифо кадра 1
С2 - символы для фифо кадра 2
так можно иметь 2 атрибутных кадра
без баласта
NEO SPECTRUMAN, обозначения понял, но идею по прежнему нет...
Если показывать атрибуты из 7-битного буфера FIFO, но набор символов будет сильно ограниченным, да и вообще, как атрибуты мешать будут...
NEO SPECTRUMAN
18.01.2024, 22:21
Если показывать атрибуты из 7-битного буфера FIFO, но набор символов будет сильно ограниченным,
вв атрибутном режиме символы не используютсо вообще
все 16 байт фифо будут залиты одним символом
в фифо не атрибуты
а символы
атрибуты не теряютсо при переполнении фифо
а вот символы будут братсо из фифо
и будет 5 раз отображено содержиимое фифо друг за другом
вместо атрибутов 2-го кадра
а у нас там как раз 16 символов в конце будет
...ну это конешно при условии
что дма заканчиваетсо до начала строки
NEO SPECTRUMAN, по-прежнему ничего не понимаю :(
Вот эта строчка A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1 будет отображать:
A2 A2 C1 C1 A2 A2 C1 C1, причем A1 и A2 со снятыми старшими битами
Что нам это даст?
NEO SPECTRUMAN
18.01.2024, 22:43
NEO SPECTRUMAN, по-прежнему ничего не понимаю
Вот эта строчка A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1 будет отображать:
A2 A2 C1 C1 A2 A2 C1 C1, причем A1 и A2 со снятыми старшими битами
Что нам это даст?
ну размер показан условно
Cx 16 штук
там где "-" след строка
а отображатсо будет
для
A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1
будет
A1 C1 A1 C1 A1 C1 A1 C1
для
A2 A1 A2 A1 A2 C2 A2 C2 - A2 A1 A2 A1 A2 C2 A2 C2 - C1
будет
A2 C2 A2 C2 A2 C2 A2 C2
каждое переключение кадра нужно обновлять 32*количество строк байта
при том все C одинаковы
для 6х4 режима
экономия 10К рамы на баласте
причем A1 и A2 со снятыми старшими битами
в фифо они будут затерты последними x16 C
можно сконвертить все положения шарика
Я хотел сделать шарик четвертинкой знакоместа, фигня получается, но если делать шарик крупнее, и с бликом, то уже прям хорошо. И математика не всегда полезна. Наверное стоит нарисовать анимированным спрайтом движения. Под 45 градусов, 15 и 60 градусов. Посмотрел другие арканоиды, почти везде так и сделано. Тогда да, можно нарисовать анимированным спрайтом плавную, а не ступенчатую траекторию. Ну а если тень добавить, то совсем норм должно быть.
Как время появится, попробую ещё раз.
ну и ракетку можно сделать более "плавной"
Не, если двигать графику на половинку знакоместа, то всё хорошо и плавно получается (вспомним звёзды в моей демке), не имеет смысла что-то городить. Я сейчас всю демку переделал на движение по половинке знакоместа, плавность вполне играбельная.
NEO SPECTRUMAN
19.01.2024, 00:18
Не, если двигать графику на половинку знакоместа
для арканоидов может захотетсо более плавных шариков
- - - Добавлено - - -
а с конверченного шарика чуть ли не молнии во все стороны :)
что можно даже как то обыгграть
и летает он куда плавней чем 3х4 шаг
- - - Добавлено - - -
хотя конешно иметь по 48 вариантов 1 спрайта
для РК неподъемна
- - - Добавлено - - -
еще
к сожалению оригинал укрупненными 2х пикселями
и дерганный
https://i.postimg.cc/7hXJbg5z/GLX.gif
- - - Добавлено - - -
вощем реквестируетсо какая нить плавная gif-ка с арканоидом или каким нить галаксиансом
а отображатсо будет
для
A1 A2 A1 A2 A1 C1 A1 C1 - A1 A2 A1 A2 A1 C1 A1 C1
будет
A1 C1 A1 C1 A1 C1 A1 C1
Как это?
NEO SPECTRUMAN
19.01.2024, 01:52
Как это?
80 байт буфер строки
16 байт фифо
строка "строитсо" вроде до начала отрисовки строки
и эти 16 прибиты гвоздями
сначала дма-ой жретсо видео рама
все 1-е байты уходят в буфер
если 1-й байт атрибут
2-й байт с символом уходит в фифо а там всего 16 байт зацикленно
если мы словили больше 16 атрибутов
зацикленный буфер начинает затираетсо новыми данными
и в конце чтения строки
в фифо оказываетсо последние 16 символов
(в какой последовааатеьносте науке неизвестно)
потом при отрисовке при наличии атрибута в буфере
символ беретсо из фифо
а атрибут из буфера
поэтому нам трижды все равно что у нас 64 символа в строке были шлаком
мы увидим только последние 16
повторенные 16 раз друг за другом
а так работа фифо опять же внятно не утошнялась?
возможно нужно выставлять 1-е 16 символов валидными
а в остальных можно хранить атрибуты второго кадра
можот иззо этого непониманиё?
но сути это не меняет
принцип один и тот жо
- - - Добавлено - - -
А ТУТ У НАС НАЧИНАЮТСО НЕСТЫКОВКИ С МАНУАЛОМ?
тут не видно 16 зацикленных символов
но это не field атрибуты а character атрибуты
https://i.postimg.cc/JhTD9KMv/ch0001safe.jpg
тогда или
character атрибуты буферизируютсо на оборот
символ идет в буфер а атрибут в фифо
или фифо на самом деле больше 16 байт !!!!
как тебе такое илон маск?
опять всё недокументированное...
field атрибуты гарантировано идут куда то где есть как минимум 80 байт
это подтвержденно многочисленными фотками с реалов
- - - Добавлено - - -
на картинке выше явно больше 16 character атрибутов подряд
и явно больше 16 символов подряд
44 символа подряд
и 44 character атрибута подряд!!!
вот и приехали с документациёй
снова нужно тестирование на реалах
можот буржуи увеличили фифо в 8275
а наши уже скопировали с них?
а дока осталась с 71-го года
если фифо на самом деле больше
это же лучшо для нас
если же отличаетсо способ хранение
и там не фифо а дополнительный буфер
то...
хотя на картинке 44 символа подряд и поверх них 44 атрибута
с независимыми атрибутами
в окошке 44 ширриной это тоже вин для насс
это намного лучше чем 2 в 1-м буфер!
если бы данные после заполнения
шли в фифо буфер 2-й строки
то мы бы получили "мультиколорные" глюки в последних строках строки (мдо хорошое словосочетани...)
а их нет?
да и там больше 32-х символов же
не объяснение
тогда может и тот шрифт в партнере разбитый на несколько частей
не идиотизм?
character атрибуты буферизируютсо на оборот
character атрибуты вообще не буферизируются, буферизируются в FIFO только field атрибуты и только в прозрачном режиме.
NEO SPECTRUMAN
19.01.2024, 17:02
character атрибуты вообще не буферизируются, буферизируются в FIFO только field атрибуты и только в прозрачном режиме.
очень подробный бред
ну и как они не буферизируютсо?
подумай еще
буфер на 80 байтэ
по твоей логике на картинке в него влезло 88 байт
+наверное нужно паралельное чтение атрибутов и символов
ибо зачем нужно было делать этот фифо вообще?
даже если character атрибуты идут в основной буфер
они тогда дают возможность использовать 2 цвета без затрат фифо!!!
и при том наверное единичный character атрибут влияет только на 1 символ
а на следующий опять вернется предыдущий field атрибут?
без затрат фифо
все можноо разукрасить красочней
в придачу там куча всяких обрезок знакоместа
а 44 знакоместта это целых 264 пикселя
эпиквин?
- - - Добавлено - - -
character атрибуты вообще не буферизируются, буферизируются в FIFO только field атрибуты и только в прозрачном режиме.
ну я уже понел что оно нехрена не эмулируетсо :)
- - - Добавлено - - -
с обрезками теперь можно выдать 128*6 варианта знакоместа на голом РК86
- - - Добавлено - - -
а еще не описан? способ обрезки символов без линии подчеркивания
судя из фотки
строка на которую указывает линия подчеркивания
рисуется в случаях обрезки как сверху так и снизу
и возможноо будет одна видимая полоса при обррезке с обооих ссторон?
тогда это еще 128 комбинай знакоместа!!
НО НА ФОТКЕ ТАКОГО НЕТ
ПРИ ТОМ ЧТО ОБРЕЗКА С 2-Х СТОРОН С ВКЛЮЧЕННЫМ ПОДЧЕРКИВАНИЕМ ВРОДЕ ЕСТЬ
ТОБЕШЬ ОПЯТТЬ ННАДО УТОШНЯТЬ НА РЕАЛЕ!
наверное простто не хватило буфера чтоб показать все возможные character атрибуты?
в доке что то похожее на полосочку посредине есть
- - - Добавлено - - -
во сколько у нас знакомест из коробки
https://i.postimg.cc/cJQ3Q374/chr-rk-DDp-char-a.png
- - - Добавлено - - -
под текуще примерно известные ограничения (44 знакоместа)
правее без character атрибутов
https://i.postimg.cc/rF4ghfkq/VW-264-dithered-0000.png https://i.postimg.cc/bv2BC9H1/VW-264-dithered-0002.png
без ограничений в 44 знакоместа
и под апогей
https://i.postimg.cc/zfm2k4Mw/0002-320-dithered-0000.png https://i.postimg.cc/TYc8X0bx/0002-320-dithered-0001.png
- - - Добавлено - - -
всякие шарики летящие на пиксельном уровне
так тоже можно сконвертить лучше
NEO SPECTRUMAN, там всё просто и никакой загадки нет.
На этом фото с экрана показаны Character Attribute с 0000 по 1010, или с нулевого по десятый, итого 11 штук. Выводятся они четыре раза, поэтому и получается "магическое" число 44. Код Character Attribute представляет собой 11ССССхх, где СССС это те самые с 0000 по 1010. Младшие два бита хх увеличиваются каждое знакоместо, поэтому новый атрибут вступает в силу каждые четыре символа. Самый младший бит отвечает за цвет, поэтому символы то белые, то голубые. Насколько я помню этот тест был сделан для ответа на вопрос "Как на Апогее будут отображаться эти самые Character Attribute?" - ну как-то вот так )))
NEO SPECTRUMAN
19.01.2024, 17:21
там всё просто и никакой загадки нет.
ты хоть понял о чем идет речь?
строение атррибута и так всем понятно
ннпонятна работа буфера запятая фифо и их размер
с докой серъезные нестыковки
ты хоть понял о чем идет речь?
Конечно же нет )))
У тебя иногда такой поток сознания, который некоторые не могут ухватить.
1. В чём вопрос с буфером, растолкуй мне, плиз. 2. Откуда сомнения про размер буфера в 80 знакомест и в фифо на 16?
- - - Добавлено - - -
с докой серъезные нестыковки
"неправда ваша"
NEO SPECTRUMAN
19.01.2024, 18:04
1. В чём вопрос с буфером, растолкуй мне, плиз. 2. Откуда сомнения про размер буфера в 80 знакомест и в фифо на 16?
твоя же фотка
на ней 44 символа + 44 character атрибута
по идеи character атрибуты должны работать так же как и field атрибуты
в плане раскидывания по буферам (но это не тошно)
а на фотке мы не видим 16 байтного фифо
(ибо должно было быть 16 зацикленных символов)м
если character атрибуты идут в основной буфер вместе с символами (что нелогично)
то на фотке мы не видим 80 байтный буфер
(ибо 80 байт буфер вместил как минимум 88 байт)
еще как варинт можно предположить что есть свой фифо для использования совместно с character атрибутами
который больше 16 байт
и который не упоминаетсо в доке
или же данные начинают попадать в фифо для 2-й строки
но по какой то причине мы не увидили артифактов
У тебя иногда такой поток сознания, который некоторые не могут ухватить.
передаем приветы товарищам которые включили слияние всех пстов за сутки
при том что памяти это особо не экономит
ибо все равно хранятсо все версии пста когда либо измененного
в итоге невозможно сделоть разные, не связанные между собой, мысли
отдельными пстами
ну ГЯФ короче
по идеи character атрибуты должны работать так же как и field атрибуты
Нет, конечно же, не должны. Character Attribute работают по-другому. Из них аппаратно, при наличие соответствующей обвязки, строятся символы для рамок и тому подобного - углы, вертикальные и горизонтальные линии, Т и + образные пересечения и тд. По сути это обычные символы, только берутся они не из знакогенератора. Но так как схематически они не поддержаны разработчиками РК и схема отключения знакогенератора не предусмотрена, то во время их отображения мы и видим обычные символы (из штатного знакогенератора) "покорёженные" этими атрибутами.
А Field Attribute работают как раз как ты и ожидаешь - в одном режиме вместо них отображается пустое знакоместо, а в другом этих пробелов нет, но следующий за атрибутом символ помещается в фифо.
NEO SPECTRUMAN
19.01.2024, 18:32
Нет, конечно же, не должны. Caracter Attribute работают по-другому. Из них аппаратно, при наличие соответствующей обвязки, строятся символы для рамок и тому подобного - углы, вертикальные и горизонтальные линии, Т и + образные пересечения и тд. По сути это обычные символы, только берутся они не из знакогенератора. Но так как схематически они не поддержаны разработчиками РК и схема отключения знакогенератора не предусмотрена, то во время их отображения мы и видим обычные символы (из штатного знакогенератора) "покорёженные" этими атрибутами.
А Field Attribute работают как раз как ты и ожидаешь - в одном режиме вместо них отображается пустое знакоместо, а в другом этих пробелов нет, но следующий за атрибутом символ помещается в фифо.
рукалицо
- - - Добавлено - - -
еще раз напоминаю что строка ВЫЧИТЫВАЕТСО ДО ТОГО как рисуетсо
- - - Добавлено - - -
до отрисовки ВСЁ куда то надо сложить
- - - Добавлено - - -
эти гребанные буфера на самом деле больше чем в документации
судя по фоткке
своей ошибки я тоже не вижу
несколькко раз перепроверил
- - - Добавлено - - -
Caracter Attribute работают по-другому.
тогда вопрос нахрена нуженн был фифо?
когда одного бы буфера хватило
принцип работы у атрибутов практически одинаковый
опять же это одна баба сказала
где это в документации?
я не верю ни одной бабе
тем более когда фотки с реала этому перечат
и тем более когда "лгущая" документация этто обышное дело
твоя же фотка
на ней 44 символа + 44 character атрибута
Это не 44 символа + 44 Character Attribute, это и есть 44 Character Attribute !!! Про это я и писал двумя постами выше - я в программе, в обычном режиме вывожу символы с кодами от 11_0000_00 до 11_1010_11 (они же и являются Character Attribute, потому как их сташие два бита равны 11). Если отбросить старший бит, то получаются коды с 40 по 6В - ровно 44 штуки символов. Они выводятся в циклическом режиме, пока не заполнят весь экран. И это есть то что ты видишь - 44 символа, не потому что буфер или фифо, а потому что программа так написана.
NEO SPECTRUMAN
19.01.2024, 18:39
Это не 44 символа + 44 Character Attribute, это и есть 44 Character Attribute !!!
угу предположим
там как раз упоминание что 1 character атрибут генерит рандомный символ
даже так
это все рравно расширение графических возможноостей
ибо дает нам дохрена новых символов
тогда нужно утошнение как они перекрывают field атрибуты
например непонятно что будет
field атрибут начнет действоваттьь сразу после опять?
F1 ch ch ch CA ch ch ch F2 ch ch CA ch ch - рама
F1 F1 F1 CA F1 F1 F1 F2 F2 CA F2 F2 - результат
2 других канала наследуют ли значение от fielld атрибута или обнулятсо?
если унаследует
тогда будет еще 4? 8? наборов character атрибутов
тогда вопрос нахрена нуженн был фифо?
Он нужен во втором режиме, когда Field Attribute не отображается. В него помещается символ идущий сразу за Field Attribute.
Обращаю внимание, ФИФО работает только во втором режиме и только для Field Attribute !!! Field Attribute, не Character !!!
NEO SPECTRUMAN
19.01.2024, 19:20
Он нужен во втором режиме, когда Field Attribute не отображается.
если character атрибут по совместительству сам же символ
то это объясняет вместимость
но вопросы еще остались см пост вышо
ибо это улучшает положение в плане разукрашки символов
без лишних затрат фифо
тобешь надо перебрать все возможные fielld атрибуты
ВСЕ в том числе подчеркиваниё и флеш
и проверить как при этом работают character символы (тогда атрибуты вообще неправильное название)
после field атрибута и что потом после этого character-а происходит
и для надежности тест должен бытть таким
строка 1 - FA ch ch ch ch CA ch ch ch ch ch
строка 2 - ch ch ch ch ch ch ch ch ch ch ch
чтоб потом не возникало дополнительных вопросов
хотя так сильно много картинок
нужен отдельный тест с проверкой переноса на след стоку
с одной "картинкой" всего
без проверок на реале таки не обойтись :)
ну и тогда
описаный трюк с 2-мя атрибутными буферами в одном
будет работать
щас расчеркну его обраттно :)
- - - Добавлено - - -
и тут небольшой большой облом
половина из этих "новых" символов с флешем :(
ну серавно халявные атрибуты же
- - - Добавлено - - -
ровно 44 штуки символов
а "запрещенные" символы тоже не провеерены на реале?
тобешь надо перебрать все возможные fielld атрибуты
ВСЕ в том числе подчеркиваниё и флеш
и проверить как при этом работают character символы
GP0, GP1, инверсия и highlight field-атрибутов действуют на character-атрибуты точно так же, как на обычные символы
А вот подчеркивание и мерцание (и highlight) берутся из кода самого character-атрибута (символа), на них field-атрибуты не влияют.
NEO SPECTRUMAN
19.01.2024, 19:48
GP0, GP1, инверсия и highlight field-атрибутов действуют на character-атрибуты точно так же, как на обычные символы
тобешь у нас 4...8 вариантов этих символов
но тут извечный вопрос где доказательства этого?
опять только догадка?
А нужно быть точно увереным что после character "атрибута" подчеркивание, флеш и highlight востанавлииваетсо
и что gp0 и gp1 наследуютсо а не обнуляютсо
чтобы его использовать
- - - Добавлено - - -
А вот подчеркивание и мерцание берутся
и highlight
- - - Добавлено - - -
кстате сразу подкидываю идею использования
эти символы можно использовать для каких то собираемых объектов
и двигать линию подчеркиввания вверх вниз
или это что то может менять свою высоту (подрезатсо)
при этом онно же может хардварно мигать
но тут извечный вопрос где доказательства этого?
опять только догадка?
Во-первых, это логично, так как для формирования псевдографики используются VSP и LTEN, которые как раз и формируются этими двумя атрибутами.
Во-вторых, это подтверждается тестами на реале.
А нужно быть точно увереным что после character "атрибута" подчеркивание, флеш и highlight востанавлииваетсо
и что gp0 и gp1 наследуютсо а не обнуляютсо
Тесты на реале это подтверждают.
и highlight
Да, исправился, спасибо!
NEO SPECTRUMAN
19.01.2024, 20:03
Тесты на реале это подтверждают.
а де можно увидеть эти тесты?
- - - Добавлено - - -
Во-первых, это логично, так как для формирования псевдографики используются VSP и LTEN, которые как раз и формируются этими двумя атрибутами.
с каких это пор телепатия это логично?
и опять же ни слова про gp0 gp1
с каких это пор телепатия это логично?
Никакой телепатии, все очень логично:
- VSP и LTEN используются для формирования псевдографики, так что мерцание и подчеркивание обязаны браться из кода символа (character-атрибута)
- Подчеркивание из кода символа документировано
- Логично, что атрибуты общего назначения должны влиять на псевдографику, тем более, что они не задействованы при ее формировании
а де можно увидеть эти тесты?
Я столько раз это тестировал, что просто помню. Можешь набросать любой тест для Апогея в emu80, я запущу на реале и продемонстрирую идентичность отображения.
NEO SPECTRUMAN
19.01.2024, 21:05
быстренько сверил (как раз видно какое мигание)
https://i.postimg.cc/WbbfYv5b/ch0001safe-11.png
маловато конешно
^ на апогее другой символ Ж)
а того нерекомендуемого символа тут нет
там еще 4 должно быть Ж)
а еще какието запрещенные
- - - Добавлено - - -
для ЧБ конвертаций сильно большого выиграша нету
с character "атрибутами"
https://i.postimg.cc/MpcCpw2K/VW-468-dithered-char-attr.png
без
https://i.postimg.cc/Ss43dzXJ/VW-468-dithered-simple.png
хотя все равно переходы плавнее
да и можно еще подвигать подчеркиваниё
сконвертить в цвете
там где это можно хорошо применить нечем
- - - Добавлено - - -
для апогея это цвета без использования фифо
https://i.postimg.cc/RVb5GVx4/0002-320-dithered-0002.png
может покатитт для неба и гор Ж)
- - - Добавлено - - -
https://i.postimg.cc/Pfw20XDd/1111-468-dithered-0000.png
NEO SPECTRUMAN, по-моему эти изыскания немного уходят от темы. У нас же была отдельная где все эти особенности изучали.
Если будешь отталкиваться от моих снимков с экрана Апогея, то совсем голову сломаешь )))
Вот например:
80127
80128
80129
Может уважаемым Pyk и b2m тоже будет интересно ;)
NEO SPECTRUMAN
19.01.2024, 23:07
Может уважаемым Pyk и b2m тоже будет интересно
да подумаешь
я могу детектить spectaculator :)
и при том не визуально
а так что можно выдать ругательства и сбросится нафик Ж)
(да и вощем этот момент упустили практически апсолютно все эмуляторопейсатели)
- - - Добавлено - - -
Если будешь отталкиваться от моих снимков с экрана Апогея, то совсем голову сломаешь )))
мдо тут вообще 81 символ :v2_lol:
но тут надо знать чего посылаетсо в вг76
может он вполне может считать и больше 80
а буфер тольько на 80
никтож как всегда
- - - Добавлено - - -
че он может до 128 щитать на самом деле? (rka еще не смотрел)
блджд с 64-мя строками так же нельзя :v2_dizzy_facepalm:
вот там бы оно нам пригодилось
а от куда идет чтение 81-го?
оно ж некратное для wrap-инга
там или
1...80 - 01010000
или
0...79 - 01001111
сходу не въеду как можно сделоть только 80 байт памяти
может там типа 8 матриц 5х16 ?
...
ну а если как то читаетсо 0-й столбец
то это можно использовать для бордюрных эффектов
чтобы дублировать то же что и слева
..
а тут расказывали как у кого то там видно 64х25 онли Ж)
тут у людей 81 видно Ж)
- - - Добавлено - - -
или может счет идет назад
тогда на оборот первые символы будут читатсо фиг знаетт от куда
да и буфер будет заполнятся с затиранием
- - - Добавлено - - -
Если будешь отталкиваться от моих снимков с экрана Апогея, то совсем голову сломаешь )))
вот именно по этому
я совершенно не верю сказочкам эмуляторщиков
Ведущий_специалист
19.01.2024, 23:22
Ой как много понаписано, правда я так и не понял в чем суть и что хотели донести...
https://cloud.mail.ru/public/VHfa/wsRJ4Shj3 очередной этап. уже есть заставка, уже можно поиграть. Пока что легко без очков и птеродактилей. Кстати, заставка ровно 128х64, и если кто решит посчитать - там еще 8-10 символов в экран по х влезет и штук 6 строк по у.
А эмуляторщики - они даа, такие. За что им низкий поклон.
NEO SPECTRUMAN
19.01.2024, 23:39
6х4 апогей
https://i.postimg.cc/5t3TBzsj/1111-468-dithered-0002.png https://i.postimg.cc/0jc7Z8LY/mont-468-dithered-0000.png
хотя там 2-м шрифтом можно наверное и намного лучше
- - - Добавлено - - -
А эмуляторщики - они даа, такие. За что им низкий поклон.
пинать их надо
ато они на любой пчих "и так сойдет" ;)
- - - Добавлено - - -
правда я так и не понял в чем суть и что хотели донести...
а вот доносим
можно вот так без затраты дополнительной памяти на атрибуты
https://i.postimg.cc/mkX8kN2W/jimara-468-dithered-0000.png https://i.postimg.cc/7PmBKD1t/kazbek-468-dithered-0000.png
https://i.postimg.cc/yYxL55v1/shkara-468-dithered-0000.png https://i.postimg.cc/c4zFNmbQ/tetnuldi-468-dithered-0000.png
а с затратами можно еще лучше чем текущие онли 16 изменений цвета на строку
теперь у нас прям свой HAM :v2_lol:
Ведущий_специалист
19.01.2024, 23:54
Нужен код инита вг75 под этот режим и крайне желателен конвертер картинок в сии чудные псевдографическоапогеевск ие. Глядишь и игры вскоре появятся с такой графикой.
Может уважаемым Pyk и b2m тоже будет интересно
Да, этот недокументированный момент я упустил в эмуляторе, похоже ;(
Ты где-то это уже показывал, и я просто пропустил или это впервые такой эксперимент был проведен?
NEO SPECTRUMAN
20.01.2024, 00:03
2-й шрифтт апогея
https://i.postimg.cc/t4xY43X0/1111-468-dithered-0003.png https://i.postimg.cc/VNP5rJ6J/jimara-468-dithered-0001.png
https://i.postimg.cc/cJ7CQdgX/kazbek-468-dithered-0001.png https://i.postimg.cc/vBQBhC5M/mont-468-dithered-0001.png
https://i.postimg.cc/wv0BGFkN/shkara-468-dithered-0001.png https://i.postimg.cc/Bbbv9DhV/tetnuldi-468-dithered-0001.png
- - - Добавлено - - -
РК-шный шрифт vs 2-й шрифт апогея
https://i.postimg.cc/cHnvrf7t/0001-320-dithered-0007.png https://i.postimg.cc/MHJvRXtP/0001-320-dithered-0008.png
https://i.postimg.cc/T1TTfbt6/0001-320-dithered-0012-rk.png https://i.postimg.cc/NM6Q3D7D/0001-320-dithered-0011.png
Ты где-то это уже показывал, и я просто пропустил или это впервые такой эксперимент был проведен?
Два-три года назад я экспериментировал со всякими режимами ВГ75 и ВТ57 и заметил некоторые отличия на реале и эмуляторах. Но так нигде и не выложил результаты, руки не дошли )))
Конкретно этот момент со счётчиком ВГ75 считающим до 128-и хотел проверить. Ну и конечно удивился когда мой телевизор всё это дело показал без срывов и прочего ))
SegaBoy, исправил поведение emu80.
У меня тоже только один конвертер RDB->HDMI подхватил этот режим с длительностью строки 76,5 мкс, причем отобразил точно так, как у тебя на фото. На всех остальных устройствах - срыв синхронизации...
Не уверен, что этот эффект можно реально применить на РК или Апогее, но можно подумать, например, насчет Партнера - на нем тактовая частота ВГ75 не 1,33 МГц, а 1,5...
Я тем временем переделал полёт мячика, заменив таблицами операции перемножения. Сам мячик может быть спрайтом, смещается на половинку знакоместа. Сделал это всё с буфером ПДП двойной длины. Не вот прям понг получился, но вроде терпимо. Может полутона помогут ещё сильнее сгладить движения.
Движения получаются немного рваными из-за неквадратности псевдопикселей. По горизонтали плавно летает, но смещение по вертикали ощущается немного дёргано, из-за неквадратности. Сделал высоту знакоместа 7 пикселей, помогло, но не особо.
Поэкспериментирую ещё.
https://i.postimg.cc/NF5jrZH6/split-scroll.gif
Может кого заинтересует - сплит-скрин со скроллом на Апогее (могу переделать на РК и Микрошу)
выглядит забавно. а где можно такое использовать?
выглядит забавно. а где можно такое использовать?
Ну это как пример работы с контроллером ПДП. А так можно использовать например в играх, где сверху или снизу статичная панель, а игровое поле подвижное. У кого на что фантазии хватит )))
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot