RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Октябрь 2024
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Разработка игр для радио86 РК

Перейти вниз

Разработка игр для радио86 РК Empty Разработка игр для радио86 РК

Сообщение  ведущий_специалист Ср Янв 06 2021, 17:18

1
Решил создать новый топик, Здесь по мере наработок будут выкладываться подпрограммы для создания игр под РК, а именно:
1 - Считаю что первым делом нужно продумать и разработать аппаратную прокрутку по горизонтали и вертикали. Стянул код с чуждого форума, сейчас его дизассемблировал и анализирую, позже выложу здесь с пояснениями. Винксру немного пробивал данную тему, к сожалению тема не раскрыта до конца и его магия не понятна (исходники супермарио под апогеем).А жаль.
Та некоторая информация про скроллинг со стороннего форума говорит, и это нужно проверить, что вг75 позволяет творить чудеса вплоть до того что двигать на одном экране два разных куска памяти, это было бы очень здорово реализовать, например двигая "задний" фон и фон действующий.
2 - Для игр бродилок лабиринтов типа монтицумы, совершенно необходима подпрограмма хранения и распаковки этих лабиринтов с формированием экранов и чтобы подпрограмма из первого пункта свободно по ним "расхаживала".
3 - Подпрограмма для вывода звуков и музыки. Современные игры не могут быть без озвучки, поэтому нужен как минимум конвертер музыки от той же NES в коды ВИ53. В свое время винксру сделал очень хороший подарок программистам, выложив код, который проигрывает оригинальную музыку от супермарио под ви53. Я этот код тоже изучаю и адаптировал его уже под рк86. Облагородив данную программу можно заимствовать музыку и звуки (коих миллионы) от NES и играть в играх РК.
4 - Нужен редактор спрайтов и тайлов. Здесь я темный лес, потому как под PC писать не умею. Найти бы стороннего программера который согласился бы это сделать.
5 - Собственно не представляю ни одну игру без системного шедуллера (распределитель процессов). В принципе подошел бы системный таймер. Грамотно продуманный "движок" игры даст нам красивую динамичную и увлекательную игру. Всего то нужно продумать распределение времени на обработку спрайтов (их изменение, их перемещение по траектории), обработку главного героя, опрос кнопок пользователя, обновление музыкальных паттернов, выдача ВИ53 звуковых эффектов. Также не стоит забывать про прорисовку фона до пользования и в процессе вывода на экран.

Исходя из поставленных выше задач думаю пробовать написать следующие игры (я с детства их мечтал портировать на рк86 как только первый раз в них сыграл):
1. Super mario - горизонтальная бегалка, классическая игра любовь миллионов геймеров.
2. Из лабиринтов есть пара запавших игр из атари это монтецума ревендж, и игра (Fort Apocalipse) где летаешь на вертолете и собираешь людей, в конце игры нужно взорвать реактор и следить чтобы не кончилось топливо.
3. Простейшая горизонтальная бегалка - динозаврик из гугла. Бежишь в неизвестность, набираешь очки, прыгаешь через кактусы уворачиваешься от летающих птеродактилей.
4. Moon Patrol от атари, едешь на 3х колесном луноходе, прыгаешь, стреляешь по нло.
5. Из любопытства - можно портировать какой нибудь цветной и красивый тетрис.
4.


Последний раз редактировалось: ведущий_специалист (Чт Янв 07 2021, 13:35), всего редактировалось 1 раз(а) (Обоснование : вспомнил название игры)
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty .

Сообщение  barsik Ср Янв 06 2021, 19:05

2
ведущий_специалист пишет:первым делом нужно продумать и разработать аппаратную прокрутку по горизонтали и вертикали.
Это уж слишком круто для начала. Понятно, что Вам начинать с "Hello World" не требуется, но всё равно начинать лучше не с крутизны, а с чего-то простого. Игры с панорамированием слишком сложные, начинать, думаю, лучше с игр с неподвижным пейзажем или вообще без него. Например с самой простой игры Тенис, затем возможно Ксоникс, Пэкман и даже Тетрис. Т.е с чисто текстовых игр с простым алгоритмом. Это проще и позволит быстро освоить инструментарий (мне например, т.к я хочу использовать Си, надо попутно изучить Си и освоить компилятор Си из 1979 года).

Разобравшись с работой с экраном в монохроме, делее осваиваем на текстовых играх работу с цветом. Далее начинаем думать в сторону графики, для начала чисто текстовой, т.е блочно-символьной (т.е когда тайлы для спрайтов и пейзажа игры заготовлены в виде фонта) и пытаемся сделать мультипликацию в движениях фигурок. Но для этого уже нужен редактор графики в формате 24*24 пикселя (думаю, что более крупные спрайты неуместны на экране с поточечным разрешением 384*240 или 512*240, что получается из текста 64*30 и знакоместа 6*8 или 8*8). После переходим к цветной графике 192*102.

Вот какой постепенный план мне кажется разумным.
ведущий_специалист пишет:ВГ75 позволяет творить чудеса вплоть до того, что двигать на одном экране два разных куска памяти, это было бы очень здорово реализовать, например двигая "задний" фон и фон действующий.
Объёма моего мозга кое-как хватает, чтобы понять как сделать вертикальный ролик экрана, но как ВГ75 может делать горизонтальный сдвиг этого понять не могу.

Для вертикального сдвига нужен двойной размер экранного буфера (два смежных буфера). Увеличивая адрес начала экрана на 78 байт мы с каждым шагом сдвигаем экран вверх дополнив новой последней строкой. До тех пока нач адрес экрана не достигнет последней строки первого экранного буфера (что значит, что все экранные строки уже во втором буфере. После чего содержимое экрана переписывается из второго буфера в первый и в нём заполняется последняя строка. Точнее, чтобы скорость сдвига осталась равномерной надо при каждом сдвиге копировать по одной строке (плюс обновлять возникшую последнюю строку). Но по горизонтали изменением адреса начала экрана сдвиг не сделать.

Кстати, читал, что в некоторых игровых компьютерах начала 80-тых было две плоскости - плоскость пейзажа или заднего плана и переднеяя плоскость. По обоим могли бегать и спрайты. Cпрайт переднего плана закрывал пейзаж и спрайт расположенный на заднем плане. Это можно сделать включив две ВГ75 синхронно. Синхронно две ВГ75 включаются в МЦПГ и это делал freddy. Но секрет, как это сделать неизвестен.
ведущий_специалист пишет:необходима подпрограмма хранения и распаковки этих лабиринтов с формированием экранов и чтобы подпрограмма из первого пункта свободно по ним "расхаживала".
Распаковка лабиринта по сравнению с остальным простая задача. А вот, чтобы спрайт двигался мультиплицировано - это значит, что речь идёт о разработке движка игры, что по сути и составляет основную работу при написании игр.
ведущий_специалист пишет:код, который проигрывает оригинальную музыку от "Супермарио" на ВИ53. Я этот код тоже изучаю и адаптировал его уже для РК86.
Круто, сразу видно профессионала в написании игр.
ведущий_специалист пишет:можно заимствовать музыку и звуки (коих миллионы) от NES и играть в играх РК
Да, игры РК с музыкой от Денди сильно выиграют, даже если игровой аспект получится не очень.
ведущий_специалист пишет:под PC писать не умею.
Сомневаюсь. Если Вы хорошо программисруете на С++, то Вам ничто не мешает взять любой Си для PC под Windows и писать хотя-бы программу типа консольное приложение (т.е чисто текстовое).
ведущий_специалист пишет:не представляю ни одну игру без системного шедуллера (распределитель процессов). В принципе подошел бы системный таймер. Грамотно продуманный "движок" игры даст нам красивую динамичную и увлекательную игру...
Так это и есть движок игры. В нём должна быть или какая-то опора на аппаратный таймер (типа прерываний или фронтов на каком-то входе с низкой частотой ~5...10 ГЦ) или время придётся считать программно, что сложнее и результат намного хуже.

В принципе время можно отмерять считывая регистр статуса ВГ75. Там есть бит прерывания (кажется 20H), который возникает по началу VRTC, т.е в вашем случае VGA-480 с периодом 60 ГЦ. Можно из 3-х каналов ВИ53 один канал тактировать HRTC (31.5 КГЦ) и читать из него "на лету" состояние счётчика, что позволит знать реальное время. Якобы есть такое свойство у ВИ53. Но на ОРИОНЕ с клоком 2.5 МГЦ это у меня не получилось (возможно "сам дурак" или нужно было добавить такт WAIT-а).

PS. У кроманьонцев объём мозга был на ~20% больше, а у неандертальцев ещё больше. А теперь ещё и ковид-19 быстро понижает средний IQ населения. Учёные собираются воссоздать кроманьонца по уцелевшему генетическому материалу и скрестить его с современным человеком с целью получения более умного потомства.
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty Re: Разработка игр для радио86 РК

Сообщение  ведущий_специалист Чт Янв 07 2021, 10:57

3
Продолжая свои раздумья в области программирования под рк вот что еще пришло в голову:
Рассматривая табличку альтернативного знакогенератора, которую нарисовал Барсик для увеличения графических возможностей рк, тут же захотелось иметь программу, которая оперируя набором данных тайлов будет строить из них картинку или спрайт. К примеру загружаешь файл, программа его преобразует и разбивает на тайлы, и на выходе получаются картинка из готовых тайловых блоков. Аналогично можно сделать то же самое с цветом (но это будет гораздо сложнее и мозговыноснее. А если программисту еще и подумать и пробовать применять то же самое но с инверсией, то можно добиться отличных (ну на сколько позволит цветовое разрешение в 8 цветов) цветных картинок. Ну я имел ввиду доселе невиданные на рк86 графические заставки.
Так как на с++ (также как и любом другом ооп) я дуб дубом, то буду искать знакомых программистов, которые согласятся создать такую программу.
По поводу памяти. Мои скромные подсчеты привели к следующим цифрам. Так как рк86 благополучно расширяется до 50 КБ оперативки благодаря простейшим схемотехническим решениям Барсика (мною это было проверено и оно работает), и не вредит совместимости с остальным ПО рк86, видится следующая картина:
Так как все что я видел под 8ми разрядками из игр занимало максимум 40-45КБ максимум (взять хотя бы ZX), то можно порассуждать, что для более менее красивых игр нам будет достаточно 8 кб под сам движок кода, 10кб под спрайты, тайлы, загружаемый ЗГ, операционку и временные переменные. 32 кб можно оставить под музыку, игровое поле, лабиринты и прочие графические элементы. Если игру добавлять красочными графическими экранами, то это видится дополнением дополнительной микросхемы в 32кб, которая просто переключается программно (это тоже все работает и проверено) на место основной (микросхемы работают по очереди , одна теневая вторая рабочая и наоборот). Причем программно это будет смотреться очень неплохо, так как например если основной движок игры загнать в адрес 8000-А000, то и не нужно думать о стеке и записывать, в какой странице мы находимся. Считаю очень удачным такое распределение адресного пространства рк.
Таким образом имея 32кб+32кб(теневых) ОЗУ основных, 16кб дополнительных (отключаемых) + область D000-E000, можно делать отличные вещи.
Я призываю РК сообщество вдуматься и подключиться к этим проектам, и подумать. Хватит собирать бестолковое железо на полки под стекло. Давайте воскресим все это так как это интересно сложно и весело )))).
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty .

Сообщение  Viktor2312 Чт Янв 07 2021, 13:24

4
Я призываю РК сообщество вдуматься и подключиться к этим проектам, и подумать. Хватит собирать бестолковое железо на полки под стекло. Давайте воскресим все это так как это интересно сложно и весело )))).

За предыдущий пост ваш, поставил вам + так как одобряю и согласен с многим. Но вот принимать участия в разработке железа, ПО и т. д. не могу, по крайней мере сейчас. Но очень хочется конечно, по итогам, увидеть окончательный вариант готовый на 100%, то есть схема полная и всё необходимое ПО для запуска, ну там "прошивки" для ПЗУ и остальное ПО необходимое для запуска ПЭВМ. Чтобы в дальнейшем, как появится время, фин. средства и т. д. собрать себе этот вариант ПЭВМ. Итог: одобряю, поддерживаю морально, продолжайте, не останавливайтесь Exclamation

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty Re: Разработка игр для радио86 РК

Сообщение  ведущий_специалист Чт Янв 07 2021, 14:32

5
посмотрел сейчас геймплей fort apocalipse.. Графика ниочем, но игра просто супер. Думаю в разрешение 192х80 точек можно уложиться. С количеством цветов там непонятно. читая про атари800 я понял что в графическом режиме можно использовать максимум 4 цвета, хотя разные источники пишут по разному. Вобщем мне пока что странно, почему рк86 никто не дорабатывал и не изучал, потому что минимально доработанный рк может подвинуть атари по своим возможностям ну или хотя бы максимально приблизиться.
По делу. Настраивая ПДП вт57 мы загоняем ему адрес, откуда брать данные для отсылки в вг75. Так вот, самое простое - выстраиваем несколько экранов в памяти, и при нажатии кнопки вправо мы прибавляем к адресу пдп +одну строку. Это должно блин сработать. Думаю вечерком это дело проверить.
Код:
                                ld a,0xfd
                                                ld (0x8000),a
                                                ld de,0x00ec  ;адрес начала картинки
                                                ld hl,0x03e2  ;конец программы в целом (конец картинки)
                                        0x000b:  ld a,(de)
                                                inc de
                                                cp 0x80 ;если встретили упр код 0х80 то идем дальше
                                                jp z,0x0028
                                                jp nc,0x001a
                                                ld (hl),a
                                                inc hl
                                                jp 0x000b
                                        0x001a:  and 0x7f
                                                ld c,a
                                                ld a,(de)
                                                inc de
                                        0x001f:  ld (hl),a ;пишем картинку сюда
                                                inc hl
                                                dec c
                                                jp p,0x001f ;непонятно что за команда, в z80 немного понимаю
                                                jp 0x000b ;дораспаковываем картинку
                                        0x0028:  ld hl,0xc001 ;настраиваем экран
                                                ld a,(hl)
                                        0x002c:  ld a,(hl)
                                                and 0x20
                                                jp z,0x002c
                                                ld (hl),0x00
                                                dec l
                                                ld (hl),0x4d
                                                ld (hl),0x25
                                                ld (hl),0xff
                                                ld (hl),0x93
                                                inc l
                                                ld (hl),0x80
                                                dec l
                                                ld (hl),0xff
                                                ld (hl),0xff
                                                inc l
                                                ld (hl),0x27
                                                ld hl,0xc001
                                                ld a,(hl)
                                        0x004c:  ld a,(hl)
                                                and 0x20 ; ждем прерывания
                                                jp z,0x004c
                                                ld hl,0xe008
                                                ld (hl),0x80
                                                ld l,0x04
                                                ld (hl),0xe2
                                                ld (hl),0x03
                                                inc l
                                                ld (hl),0x93 ;настраиваем ПДП
                                                ld (hl),0x4b
                                                ld l,0x08
                                                ld (hl),0xa4
                                        0x0066:  ld a,(0x8001) ; основной цикл
                                                or 0x0f ;скорее всего опрашиваем клавиатуру
                                                cp 0x7f ; опрашиваем все комбинации клавиш верх низ лево право и их сочетания
                                                jp z,0x0075
                                                cp 0x2f
                                                jp nz,0x007b
                                        0x0075:  ld de,0x4be1; магический код
                                                jp 0x00da ; запишем все в пдп
                                        0x007b:  cp 0x3f; и так все остальные кнопки
                                                jp nz,0x0086
                                                ld de,0x4be2
                                                jp 0x00da
                                        0x0086:  cp 0xbf
                                                jp z,0x0090
                                                cp 0x1f
                                                jp nz,0x0096
                                        0x0090:  ld de,0x4b94
                                                jp 0x00da
                                                cp 0x9f
                                                jp nz,0x00a1
                                                ld de,0x4b46
                                                jp 0x00da
                                        0x00a1:  cp 0xdf
                                                jp z,0x00ab
                                                cp 0x8f
                                                jp nz,0x00b1
                                        0x00ab:  ld de,0x4b45
                                                jp 0x00da
                                        0x00b1:  cp 0xcf
                                                jp nz,0x00bc
                                                ld de,0x4b44
                                                jp 0x00da
                                        0x00bc:  cp 0xef
                                                jp z,0x00c6
                                                cp 0x4f
                                                jp nz,0x00cc
                                        0x00c6:  ld de,0x4b92
                                                jp 0x00da
                                        0x00cc:  cp 0x6f
                                                jp nz,0x00d7
                                                ld de,0x4be0
                                                jp 0x00da
                                        0x00d7:  ld de,0x4b93
                                        0x00da:  ld hl,0xe007 ; как видно, для аппаратной прокрутки всего лишь правильно настраиваем пдп
                                                ld (hl),e
                                                ld (hl),d  ; здесь нужно разобраться что за магию типа 0x4b93 отсылаем
                                                ld hl,0xc001 ; и ждем прерывания от вг75
                                                ld a,(hl)
                                        0x00e3:  ld a,(hl)
                                                and 0x20
                                                jp z,0x00e3
                                                jp 0x0066 ; далее на опрос кнопок
                              0x00ec: ; запакованная картинка оригинал на яйцефоруме


Выше представлен рабочий дизассемблированный код, который заставляет аппаратно двигать картинку вверх вниз влево вправо и по диагонали. Это стоит немного доработать и получится классный движок перемещения экрана.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty редакторы тайлов и игровых пространств

Сообщение  ведущий_специалист Пн Янв 18 2021, 17:45

6
http://www.romhacking.net/utilities/119/
редактор тайлов, хоть и для NES, но при умелых настройках сможет круто сберечь нервы. Хотя бы рисовать в нем знакогенератор и просто тайлы псевдографики куда приятнее.
https://thorbjorn.itch.io/tiled
достаточно навороченный редактор карт игрового мира. Можно подсунуть свои тайлы и рисовать ими игровое поле. Особо разбираться пока что времени не было но редактор неплохой.
https://dunin.itch.io/ptop
Прикольный редактор спрайтов. Ставишь фоном видос или игру и обрисовываешь все что можно.
ведущий_специалист
ведущий_специалист
Мастер+

Сообщения : 303
Дата регистрации : 2020-10-16
Откуда : Санкт Петербург

Вернуться к началу Перейти вниз

Разработка игр для радио86 РК Empty .

Сообщение  barsik Чт Янв 28 2021, 01:41

7
Вот здесь кто-то разработал эмулятор РК86 с ловушкой на чтение/запись заданной ячейки памяти, что полезно при переделке РК-игр под клавиатуру стоящую по адресу не 8000 и для адаптации на VGA (где также требуется найти место, где происходит запись в БИС ВГ75).

Попутно из этого поста мы можем узнать методику которой кракеры ломают игры, чтобы поиметь в них "вечную жизнь". Если количество жизней хранить не в одной ячейке и не в незакодированном обычном числовом виде, то можно в новых играх положить конец подобному наглому читерству. Чтоб играли честно, а не жульничали. Например, количество жизней можно хранить в виде числа жизней умноженного на 3, в виде с переставленными чётными/нечётными битами, причём закодировано по разному в нескольких местах и в ходе игры проверять, что все числа жизней из разных мест их хранения идентичны.
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения