1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Bad Apple для MSX

Тема в разделе "IBM PC-несовместимое", создана пользователем Pyhesty, 7 янв 2022.

Метки:
  1. Pyhesty

    Pyhesty

    Регистрация:
    2 май 2017
    Сообщения:
    629
    Спустя полгода нашел все же время опубликовать статью про разработку демы Bad Apple для MSX

    Если у чего-то есть экран, то там обязана играть Bad Apple!. Именно так думал и я. Каково же было моё удивление, когда узнал, что Bad Apple не существует на MSX, и вот почему...

    Когда-то давным-давно моим первым компьютером стал школьный КУВТ-2, он же "Ямаха". Это как первая любовь, такая же недолгая, прошло несколько лет обучения MSX-Basic, и далее мы перешли на x286, но ощущение, что что-то осталось нереализованным на этом компьютере - осталось. Конечно же, в те годы, пятиклашками, мы не понимали, чем одни компьютеры отличались от других, но любимым времяпрепровождением было пялиться в зелёный экран и нажимать на клавиши клавиатуры, а также иногда играть в USAS, Vampir Killer и Metal Gear...

    С тех пор прошло много времени, и я почему-то и не предполагал, что можно вернуться в прошлое, вновь ощутить в руках клавиатуру КУВТ-2, увидеть приветствие MSX Basic... Но внезапно, в прошлом году увидев на барахолке КУВТ, я неожиданно для себя купил её... Строго говоря КУВТ-2 - это MSX-2 в варианте поставки от Ямахи для России в учебные классы, с небольшими модификациями. И это классно! Так как MSX, как платформа, в мире очень распространена, а в Японии так и вообще есть культ MSX.

    upload_2022-1-7_22-6-12.png

    Очевидно, что в своё время я не успел написать на ней что-то важное для себя, понять вообще, как эта Ямаха работает, и нужно было восполнить этот пробел... Но сперва нужно посмотреть, что уже есть и сыграть в любимые игры. Когда эйфория уже спала, то начался этап предметного изучения и поиска идеи, что же такого закодить. Ранее с друзьями мы уже развлекались зеленой демкой Bad Apple на осциллографе, и тут подумалось: "А не замахнуться ли нам на Вильяма, понимаете ли, нашего Шекспира?":

    По какой-то невероятной причине Bad Apple не была представлена на платформе MSX, то есть формально какая-то демо была, но запустить его на не разогнанной не модифицированной MSX было нельзя, существует стрим 80Мбайтного файла со специализированного накопителя на специально модифицированной MSX, короче, это было явно не то, что требовалось...

    Почему же Bad Apple нельзя реализовать на MSX? Ответ кроется в архитектуре платформы MSX. Из книги К.И.Фахрутдинов, И.И.Бочаров "Архитектура и устройства микрокомпьютеров стандарта MSX-2":

    ahabrastorage.org_getpro_habr_upload_files_02b_a46_959_02ba46959fa466b235e0273c3e9829ce.png

    Сердцем MSX является Z80 процессор (привет "здесь смайл машет вам ручкой" почитатели ZX Spectrum), но! как мы видим на схеме, видео память VRAM прячется за видео процессор TI V9918/38, что резко снижает скорость пересылки данных из обычной памяти в видео память. В то же время, наличие видеопроцессора является и преимуществом в архитектуре MSX, он позволяет выполнять различные операции по отрисовке линий, точек, а также отображать тайлы (они же шаблоны, они же символы) и спрайты, позволяет отслеживать коллизии спрайтов, а также ещё несколько ништячков, что очень полезно при реализации игр. Но, к сожалению, они не помогают при выводе видео. Нужно было придумывать некоторую хитрость.

    Были проверены варианты отрисовки изображения точками и линиями, но они оказались слишком медленные, и тогда стало понятным, что нужно решение искать в родной области MSX - а именно в отображении тайлов. По сути всю область экрана (256х192) можно представить как знакоместа 32х24, в каждом знакоместе можно разместить одни из 256 символов 8х8, он же тайл. Таких тайлов может храниться в памяти VRAM 256 штук. 256 тайлов не могут покрыть все варианты реализации 8х8, но могут перекрыть все варианты 4х2, что должно соответствовать разрешению 128х48.

    Таким образом, решение для отображения видео в тайловом (символьном) формате лежит в подборе таких тайлов, чтобы они были максимально естественными и создавали ощущение чуть большего разрешения, чем на самом деле.

    Чтобы чутка упростить себе жизнь, большая часть различных преобразований, забивая гвозди микроскопом - выполнена в матлабе. Все варианты точек разрешения 4х2 в тайле 8х8 были размазаны фильтром и обратно биннаризованы. Вот для примера, как это происходит, тайл 00110010 сначала размывается, потом опять биннаризируется и "ступеньки" получаются чуть более сглаженными. А также на рисунке ниже - все варианты тайлов грубые и сглаженные.

    upload_2022-1-7_22-7-34.png

    upload_2022-1-7_22-7-48.png

    Дальше нужно было решить магию, как получившийся объем из 2200+ кадров уместить в размер хотя бы одной дискеты, не более чем 720кБ. Каждый кадр теперь это 32*24 = 768 байт или на видео 1.5Мбайт. Нужно было бы придумать очень простой вариант кодера. После переборки нескольких вариантов было решено ввести следующие четыре состояния битового потока: рисовать белым (код 0b00), рисовать черным (0b11), отрисовать следующие N пикселей текущим пером (0b01) и отрисовать в текущем тайле следующий в потоке 8 битный символ (0b10). Такая простая реализация кодирования позволила реализовать на Z80 простой декодер и уменьшить объем данных с 1500кБ до 320кБ.

    Результатом всего этого действа стала первая Bad Apple демо как для MSX-2, так и для более простых MSX машин. =) Хочу выразить признательность организаторам Chaos Construction 2021 за возможность представить эту работу общественности на демопати!

    приятного просмотра:



    статья также доступна по ссылке: Bad Apple для MSX на CC'21

    но какие-то технические вопросы все же лучше спрашивать здесь
     
    Revolter, AndyFox, Dimouse и 5 другим нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление