Важная информация

User Tag List

Показано с 1 по 1 из 1

Тема: Словоблудие + небольшая программа

  1. #1
    Member Аватар для Dwa83
    Регистрация
    31.12.2017
    Адрес
    г. Реж
    Сообщений
    155
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Словоблудие + небольшая программа

    Захотелось вспомнить спек, который в детстве так любил.
    Начал по новому вспоминать, что и как.
    В процессе "вспоминания" немного вскипел мозг, и я решил немного развеяться.
    Наваял небольшой псевдолог заметок по ходу программировыния похожий на повествование.
    Кто не хочет читать словоблдуд, прошу сразу вниз спойлера. Там немного вопросов.

    Скрытый текст


    Нашёл на компе эмуль.
    Решил переписать уже готовую знакомую игру.
    Выбор пал на contra с приставки nes.
    Скачал старую любимую книгу "Как написать игру на ассемблере".
    Нашёл и скачал Gens4.
    Запустил на эмуле, попробовал пример из книги.
    Таак.. Штудировать раздел о Gens`е
    Охх! Как мы раньше это делали?! Транслятор крайне неудобен.
    Начал придумывать выход.

    #define
    ход мыслей и решение:
    Вспомнилось как приходилось большой листинг компилировать.
    Кодинг на бумаге, выгрузки/подгрузки, кривой магнитофон.
    Нехватка памяти для листинга на zx.
    Может писать на ПК и готовую программу "запихивать" в эмуль?
    плюсы: память только для кода, пиши хоть 20к строк
    минусы: не олдфажно(ну и по барабану)
    Нужен транслятор асма для ПК!
    #endif

    GO_TO яндекс.

    НИЧЕГО!
    А если написать свой? Не сложно ведь(наверное)?
    Решено.
    На чём писать? А что у меня есть? VS12 стоит. Ну попробуем.
    Так, нам надо окно, но ведь я никогда оконные не пробовал на студии!
    Всё винапишкой шлёпал главное окно, а графика уже своя..

    GO_TO яндекс по статьям об GUI.

    Дотнет, дотнет, изврат, ещё какие-то библиотеки.(Почему мне дотнет не нравится?)
    О! Ведь есть MFC, она от дотнета не зависит. Но я её не знаю..

    GO_TO яндекс.

    Чтение уроков и пробы примеров.
    Тааак.. Слишком много проблем себе придумываю.
    Есть ведь Borland с++ builder. Он как раз подходит и я с ним знаком.
    Итак, список всех команд z80 в закладки, он пригодится не раз.

    4 дня спустя.

    Что-то уже работает! Убогий редактор, но делает то, что пока мне требовалось.
    Открывает листинг, сохраняет, транслирует, сохраняет в байткод.
    А как этот байткод в спек-то засунуть?
    Нашёл первый попавшийся эмуль с возможностью загрузки блока кода прямо в память.
    Пробуем писать. Сделаем что-то тестовое. Скопипастил пример из книги. Компилится и работает на эмуле. Отлично.
    Попробуем ещё один. Не работает.. Баги в трансляторе.

    Борьба с метками, неправильно работающими командами, добавление новых багов.
    Колдовство с двухпроходностью и ещё не определёнными в коде метками.
    Вот. Работает!

    Как же быть со спрайтами?
    Прилепил небольшую доделку для компилятора для перевода BMP в блоки DEFB.
    Нагуглил полный скрин первого уровня из контры, разобрался со структурой, нарезал тайлов.
    Встретил много полезных статей.
    А в каком формате хранить?

    GO_TO яндекс.

    Чтение различного материала по спрайтам.
    Итог - хранение спрайтов построчно.
    Допилил работу со спрайтами в компиле и перевёл все тайлы в DEFB.

    Так же нужен скроллинг уровня. Да ещё и чтоб всё быстро было.

    В итоге принцип работы первой поделки:
    Создан обычный теневой буффер.
    Буффер заполняется первым экраном уровня.
    Правый столбец знакомест на экране с чёрными атрибурами чтоб скрыть скроллинг.
    Буффер скролится попиксельно влево, при надобности дописывается правый вертикальный столбец из уровня.
    В небольшой буфер копируется часть экрана под спрайтами. Рисуются маски, затем спрайты.
    Переброска буфера на экран и восстановление фона буфера.
    Вроде работает но... Жесть как по черепашьи!
    И это контра? Она ведь должна быть динамичной.
    Слишком медленный горизонтальный скроллинг и нет аппаратного(
    И это ещё врагов нет! А уровень то должен быть насыщен спрайтами..
    Кстати! А ведь может на спеке уже есть контра?

    GO_TO яндекс.

    Воу, так она и вправду есть, но называется GRYZOR.
    Заценим.
    Крайне неиграбельно, но зато как быстро и управление хорошее. Уровни победнее, много пустого места.
    Может оттого и быстро?
    Но самое важное что БЫСТРО, а у меня нет.
    Похоже я рано взялся за такую динамичную игру. Знаний маловато.

    А возьмём что попроще. Как насчёт танчиков с денди?
    Почему бы и нет. Она точно попроще, да и скроллинга уровня нет.

    Несколько дней экспериментов и рабочая поделка готова.
    Кто сказал проще? Проблемы снова начали проявляться. Опять тормоза.

    Принцип работы поделки:
    Рисуется экран без всяких буферов(зачем тратить такты на переброску уровня в экран?).
    Окрашивается "шторкой" как на денди.
    Для каждого спрайта создан буфер так, чтоб он туда помещался даже проскролленый.
    В буффер рисуется часть уровня.
    Рисуется маска и сам спрайт.
    Рисуются элементы, которые должны быть поверх спрайта(кусты к примеру).
    Буффер рисуется в экран.
    Плюсы: Нет мерцания, пока не пересекаюстя краями два спрайтбуфера.

    Но.. Всё медленно!
    Надо избавиться от горизонтального скроллинга.. Я его плёхо уметь..
    Сделаем так же как и ранее делали усатые дядьки с туманного альбиона.
    Будем хранить уже несколько проскролленых спрайтов.

    Всю игру перепишем по новой.
    Написал первую пробу.
    Вау! Эй, танчик, погоди так лететь, я только клавишу немного ткнул.
    Похоже проблема быстрого попиксельного передвижения решена.

    А норм транслятор получился, для экспериментов сгодится.
    Может кому пригодится, надо поделиться. Поищем спектрумистов.

    GO_TO яндекс.
    Нигде не нужен. Жаль.

    GO_TO яндекс снова.

    О, zx-pk.ru.
    Твою мать! Так для ПК есть уже трансляторы?
    На порядок лучше и функциональнее моего.
    Как я так искал? Ну и ладно, зато первый опыт написания подобного получил

    Экспериментируем дальше.
    Начинает притормаживать...
    Рисование фона в буффер.
    Рисование маски.
    Рисование танка.
    Рисование самого буффера на экран.
    Уже незначительно медленнее, но всё же..

    А как же быть при мерцании пересекающихся буферов?
    Нет. Надо менять подход.

    Где-то я встречал инфу об аппаратном переключении буфферов.

    GO_TO zx-pk.ru

    Точно есть такая фишка. Читаем.
    Так она не работает на 48к. Ну и ладно, те у кого 48к лишатся моего мегашедевра из-за того что я не умею делать плавную картинку стандартными методами

    Много чтения и подвисания спека при переключении страниц.
    Почему биты порта в половине статей пронумерованы и описаны неверно?

    Принцып работы поделки:

    Включается банк 5, отображение банка 5
    Очищается экран в 0.
    Рисуется уровень.
    Копируется во вторую половину банка.

    Включается банк 7, отображение банка 7
    Очищается экран в 0.
    Рисуется уровень.
    Копируется во вторую половину банка.

    Включается режим переключения экранов:
    5 - видимый, 7 - подключенный с C000.
    7 - видимый, 5 - подключенный с C000.

    Каждый кадр переключение буферов, прорисовка всегда в C000.

    На каждом кадре под всеми спрайтами восстанавливается фон из второй половины банки.
    Рисуются маски, рисуется спрайты.
    Свап буферов.

    Мерцания больше не будет!
    Работает. Продолжаем экспериментровать!

    PS:
    Всё-таки выложу сюда свою самоделку-транслятор.
    Не факт что кому-то пригодится, но попрошу протестить как вообще работает.
    Очень примитивный и почти ничего нет, но компилит.
    Макросов нет. Использования умножений и делений в выражениях нет. Указания повторов нет. Да вообще нифига нет.
    Несколько ORG в коде не тестилось.
    Запускался только на вин10.

    Так же хотелось бы узнать где подробно и с примерами можно почитать про использование сменных буферов при графике в играх на ZX.
    Всё что нашёл - очень скудная информация.
    [свернуть]


    ZX-Gens.zip
    И на всякий случай вирустотал
    https://www.virustotal.com/#/file/aa...0ba8/detection

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Небольшая коллекция из 22 дискет
    от Eltaron в разделе Софт
    Ответов: 5
    Последнее: 22.01.2021, 23:21
  2. Ответов: 3
    Последнее: 11.01.2013, 16:03
  3. Ответов: 5
    Последнее: 02.11.2008, 16:04

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •