Bad apple zx spectrum

Прямой эфир

Vinnny 8 ноября 2021, 10:19

aa-dav 29 октября 2021, 19:15

scalesmann 24 октября 2021, 20:59

nodeus 9 октября 2021, 16:46

kotsoft 1 октября 2021, 13:24

aa-dav 18 сентября 2021, 03:14

Lethargeek 16 сентября 2021, 16:19

nodeus 9 июля 2021, 21:08

Новости

nodeus 9 июля 2021, 21:12 3

BlastOff 30 апреля 2021, 20:25 0

nodeus 14 февраля 2021, 11:41 0

nyuk 5 декабря 2020, 23:25 4

bfox 16 ноября 2020, 02:52 3

Hyperadio

events

Лучшее за месяц

Блоги

  • Development16.72
  • Новости13.65
  • Звук7.52
  • VERVE7.47
  • События6.45
  • Графика6.45
  • Игры6.15
  • Pixel Talks5.61

Повидло из плохих яблок: как, зачем и почему

Хозяйке на заметку: повидло
Для варки яблочного повидла подойдут те фрукты, которые не пригодны для еды – переспевшие,
поврежденные и т.д. – короче говоря, все мягкие или жёсткие, какими вы располагаете.
chudo-povar.com

Категорическая вам конничива, товарищи!
Как и было обещано, принесли вам многабуквенный отчёт про тонкости приготовления повидла из плохих яблок в условиях крайнего юга.

DISCLAIMER: За сочинения у меня в школе была стабильная тройка, поэтому пристегните ремни.
Будет много воды и лабуды. Возможны полный бред, попирание принципов, нарушение законов физики и розовые пони.

Преамбула

Всё началось с того, что одним хмурым октябрьским вечером в беседе с n1k-o речь зашла о нашумевшем несколько лет назад анимационном shadow-art видео «Bad Apple!!».
Если вы в своё время благополучно пропустили вспышку (как, собственно, это сделал я), то узнать, в чём суть, можно здесь.
Вот, чтобы далеко не ходить, то самое видео:

Так вот: n1k-o совершенно справедливо заметил, что конверсии этого видео есть чуть более, чем на всех известных платформах, но вот беда — исключая нашу с вами любимую. Обидно, не так ли? Я тогда отшутился, дескать, раз надо, то я прямо сейчас готов исполнить всё вот это, правда, в спектрумовских атрибутах 32×20.

Шутки шутками, но яблочное зёрнышко засело в голове и потихоньку пускало корни.
Как стало понятно позже, и у Олега тоже.

Я осознал и проникся.
Не менее хмурой и не менее октябрьской ночью, удостоверившись, что домочадцы мирно пускают пузыри в кроватках, я вколотил первые строки в Makefile. Пути назад не было.

Ограбление по-питоновски

Итак, исходное видео скачано. Посмотрим-ка на то, что мы тут имеем:

Прикидываем наши скромные возможности и решаем ограничиться десятью кадрами в секунду.
Это снизит размер, позволит выводить чётко кадр через четыре и всё ещё будет выглядеть вполне смотрибельно.
Отсюда получаем порядка 2200 кадров, что в спектрумовских монохромных скринах составляет около 13 метров.
Время расчехлять Python, чесать лысину и притаптывать это безобразие!

Раскладывать на диске адовый пасьянс, выдёргивая и сохраняя кадры по одному, не хочется, да и не нужно.
Делаем так:

После этого мы легко можем брать следующий кадр в формате RGB24 прямо из видео таким образом:

Итак, у нас есть RGB24-кадр из видео, взятый с нужным FPS, любезно отмасштабированный ffmpeg’ом до наших 256×192 и преобразованный нехитрым питоновским кодом в 6144 байта монохромного битмапа. Что дальше?

Читайте также:  Fermata auto для iphone
Притаптываем

Первое, что приходит в голову при виде чёрно-белой картинки — это, конечно же, применить всем известное RLE.
Но априори в чистом виде этим тут совершенно не прославиться. Поэтому пока откладываем в сторону и следом берём второе, что приходит в голову: работать не с кадрами, а с дельтой — разницей между двумя последовательными кадрами. С этим уже можно что-то делать.
Дальше, памятуя о том, что всё это ещё надо будет как-то успевать распаковывать, отказываемся от мысли оперировать отдельными битами изображения и переходим к полным байтам, а вернее — к блокам по 8 пикселей в ширину и 1 в высоту.
Набрасываем некоторое количество кода и видим вот что:

Это исходный кадр RGB24, его конверсия в 1bpp, разница этого кадра с предыдущим и, собственно, кучка блоков 8×1, которую надо наложить на предыдущий кадр для получения текущего.

Если немного помедитировать, можно заметить, что наши блоки из-за их размера и содержания видео (все вот эти вот силуэты) чаще всего образуют цепочки по вертикали. Исходя из этого делаем предположение, что оптимальнее RLE будет работать именно со столбцами (идём по битмапу сверху вниз), нежели построчно (слева направо).

Прикидываем на пальцах формат хранения одного кадра. Если опустить ненужные подробности, получается примерно так:

В общем, всё очевидно, ничего нового. В скобках — условные команды распаковщику:
skip — пропустить N строк экрана, literals — отрисовать следующие за командой блоки, rle — отрисовать следующий блок M раз, и, наконец, end-of-frame — закончили упражнение.

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

Таджу Каге Буншин но Дзюцу!

Понятное дело, что из-за невеликой производительности нашего Z80 нам недоступны алгоритмы сжатия с хитрой математикой, которые в хвост и в гриву гоняют на PC. Однако есть ниндзюцу со сложным и страшным названием и простой, как полено, сутью: VQ, то бишь векторное квантование.

Оставим рассказы про понижение размерности многомерного векторного пространства путём отображения на конечный набор значений из дискретного подпространства меньшей размерности математикам и Википедии, опишем принцип просто и грубо.

Хозяйке на заметку: алгоритмы Алгоритма (sic!)
Будет преступлением не сказать о том, что где-то в этом месте индеец Зоркий Глаз таки узрел на Поуете совершенно замечательный Bad Apple C64 от algorithm’а. Так вот, алгоритмы Алгоритма строятся примерно на той же базе, но куда более изощрённы технически.
За счёт этого видео ужато до ничтожных размеров флопика C64, однако на результат без боли в глазах смотреть трудновато.
Даже с учётом преимуществ Коммодора — возможности стримить с флопа и быстро рисовать.

Здесь должен был быть рисунок, наглядно демонстрирующий всё это безобразие, но мне очень не хочется его рисовать. Поэтому просто давайте условимся, что он здесь есть. Мы же с вами взрослые люди, да?

Такую структуру хитрые компрессологи называют поваренной кодовой книгой, codebook.
Не правда ли, сразу видна аналогия c картами тайлов и с палитровыми картинками, к примеру, 256c? Там точно таким же образом 8-битному индексу цвета сопоставляется его 24-битное RGB-значение из палитры (по сути, той же кодовой книги).
Дальше, наверное, можно уже и не продолжать, но… терпите уж 🙂

Читайте также:  Напряжение зарядного устройства iphone

Исходный кадр теперь можно сохранить в виде набора индексов-указателей на блоки в кодовой книге и собственно самой кодовой книги. При этом 8xN бит блока заменяется M битами его индекса.
При условии, что блоки изображения не всегда уникальны и M

  • making of
  • , Bad Apple
  • , conversion
  • , ZX Enhanced
  • , дикий адЪ
  • , музыка для мужика
  • Источник

    ZX Spectrum сегодня? Живее всех живых!

    По просьбе немногочисленных хабралюдей, даю телеграмму по поводу состояния дел zx-specurum-а в наши дни. К сожалению, написать абсолютно про всё у меня не получится, поэтому сделаю краткий обзор современного железа и эмуляторов, на которых это железо можно виртуально пощупать.

    Писать буду для обычного хабрачеловека, не спектрумиста :), так что для более детальной информации используйте ссылки в конце статьи.

    Что такое для вас spectrum? Наверное, это тёплый ламповый звук загрузки с магнитофона, Manic Miner и Elite. Возможно, это TR-DOS, 128кб памяти и музыкальный чип AY. А может быть это Scorpion-256, ATM Turbo или даже Profi.

    В любом случае, всё это безнадёжно устарело, завалено пылью на шкафах, и, наверное, даже не работает, но, тем не менее, пару слов о «классическом ex-USSR спектруме»:

    CPU: Z80, 3.5 MHz. Возможна турба до неполных 7 MHz
    RAM: от 48Kb до 1Mb
    Sound: бипер, AY чип (синтезированный 3х-канальный звук)
    Tape: есть
    FDD: 720кб дискеты (по умолчанию TR-DOS поддерживает только 640кб)
    HDD: возможно подключение, наиболее полная программная поддержка в системе is-dos

    Отдельно стоит рассказать про видео — 256×192 точек + 32×24 цветные атрибуты: на каждый блок 8×8 точек приходится два цвета (один цвет PAPER, для выключенных пикселей; и один INK, для включенных); плюс область вокруг экрана, называемая BORDER (тоже можно выставлять цвет); подробней — speccy.info/256×192

    Хотя, малый размер видеопамяти позволяет процессору на 3MHz легче справляться с выводом графики, результат часто не оправдывает ожиданий.

    Кроме давно известных режимов «аппаратный multicolor«, 512×256 и Gigascreen, ещё бывают:

    384×304 — область экрана расширяется до 384×304 пикселей, остальное остаётся прежним (атрибуты на квадратик 8×8). Из-за сложности реализации на клонах спектрума отличных от Pentagon и ужасной адресации видеопамяти (расширенная область поделена на 9 блоков, раскиданных по памяти), распространения не получил. speccy.info/384×304

    16 colors per pixel — как следует из названия, даёт спектрумистам то, о чём раньше они могли только мечтать — каждая точка на экране своим цветом. Однако размер видеопамяти увеличивается в 4 раза, и кроме того, на реальном спектруме притормаживает процессор (поэтому используется обычно только в турбо режиме). Тем не менее, режим многообещающий, есть несколько игр и demo. speccy.info/16col

    256 colors per 2 pixels — «апгрейд» режима 16col. Две соседние точки сдваиваются, и получается режим 128×192 при 256 цветах. Поддержка в железе экспериментальная, и без изменяемой палитры малопригоден к использованию.

    Читайте также:  Коврик для зарядки всех устройств apple

    Flash-Color — за счёт смешивания INK и PAPER, достигается около 46 различных цветов. Однако так как используются всё те же атрибуты (на блок 8×8 пикселей), на деле выглядит не очень. speccy.info/Flash_color


    16col+palette+gigascreen

    Программируемая палитра — тот самый наворот, который жизненно необходим режимам 16col и 256col. Есть несколько вариантов решений; один из них — realddp.narod.ru/zx/pal444

    Помимо Covox, Sound Drive, DMA Ultrasound и General Sound, выпущенных ещё в каменном веке :), были придуманы такие устройства:

    TS (Turbo Sound) — представляет собой ещё один звуковой процессор AY, расширяя количество каналов звука до шести. www.nedopc.com/TURBOSOUND/ts.php

    TSFM (Turbo Sound FM) — «апгрейд» режима Turbo Sound. Помимо 6 каналов AY-звука, добавляется 6-канальный звуковой чип (FM синтез, аналогичен чипу, используемому в приставке Sega Mega Drive). www.nedopc.com/TURBOSOUND/ts-fm.php

    Neo GS — обновлённый вариант платы General Sound. Как и General Sound, представляет собой, по сути, отдельный компьютер со своим процессором (Z80 на частоте 12MHz для GS, 24MHz для NGS), памятью (от 128Kb до 2Mb) и звуковым модулем: 4 (8 для NGS) канала звука, проигрывающих сэмплы из памяти. В Neo GS помимо этого присутствуют SD/MMC ридер, аппаратный декодер mp3 и DMA режим обмена данными с памятью спектрума. Neo GS так же может использоваться как акселератор для вычислений — в память устройства можно загружать произвольный код (в обычный GS тоже, но в отличие от NGS, в обычном GS не было DMA — отсюда очень медленная скорость обмена информацией между спектрумом и GS). www.nedopc.com/gs/ngs.php

    ZX Evolution

    ZX Evolution или PentEvo — это самый современный спектрум. В отличие от других (не столь современных) спектрумов, в пентеве на борту есть всё необходимое современному человеку — встроенный контроллер PS/2 клавиатуры и мыши, контроллеры дисковода и винчестера, SD card ридер, RS232 (ака COM порт).

    Еще есть очень важная особенность — на борту есть скандаблер, что позволяет подключить пентеву почти к любому VGA монитору (хоть LCD); так что теперь не надо покупать TV-тюнеры, EGA-мониторы и телевизоры.

    Нельзя не упомянуть про наличие FPGA на плате; это позволяет менять конфигурацию компьютера без паяльника (не на лету, как можно было в Sprinter, но тоже весьма неплохо).

    www.nedopc.com/zxevo/zxevo.php — узнать больше о zx evolution.
    www.youtube.com/watch?v=4fI_St1IeWQ — тов. AAA рассказывает о пентеве.
    www.youtube.com/watch?v=BYmyuF2UVWg — самая требовательная демка на спектруме (требует 16col + tsfm + neogs) успешно работает на пентеве.

    Полезняшки

    RGB to PAL coder — позволяет подключить спектрум (или любое другое устройство с RGB выходом) к обычному телевизору. www.nedopc.com/PALCODER/palcoder.php

    ZXMC (ZX_Multi_Card) — очень многофункциональное устройство. Позволяет подключить к спектруму обычную PC клавиатуру и мышку. Имеет на борту порт RS232, более известный как COM порт (позволяя подключить, например, модем), и часы реального времени (RTC). zx.pk.ru/showthread.php?t=609

    Эмуляторы

    Все эмуляторы ниже рассчитаны на эмуляцию современного спектрума, а не старой доброй чёрной коробки с резиновыми клавишами 🙂

    Источник

    Оцените статью