Автор строит компьютеры из NAND-гейтов, но не из транзисторов, а на видеокодеке VP8. Он использует механизмы предсказания кадров, чтобы моделировать комбинаторную логику. Вместо электрических сигналов True и False — белые (255) и чёрные (0) блоки пикселей.
VP8 делит кадры на key-frames и inter-frames. Key-frames кодируются независимо, в них блоки предсказываются из соседних блоков. Декодер работает построчно, сверху вниз, поэтому для предсказания доступны блок сверху, блок слева и верхний левый пиксель. Inter-frames ссылаются на предыдущие кадры. Автор строит схемы только на key-frames: комбинаторная логика хорошо ложится на них, а ограниченный набор примитивов делает задачу интереснее.
Провода вправо и вниз моделируются режимами H_PRED и V_PRED. H_PRED копирует значение пикселя слева, V_PRED — сверху. Входы — это непредсказанные блоки-константы, выходы — просто подписанные блоки.
Для функциональной полноты достаточно гейтов NOT и AND (либо одного NAND). Оба собираются из режима TM_PRED (True Motion prediction). Он считает каждый пиксель как left[i] + top[j] - top_left. Для однородных чёрных или белых блоков формула упрощается до left + top - top_left. Значения пикселей зажимаются в диапазон 0..255.
NOT работает так: вход подаётся на top_left, верхняя строка заполняется 255, левый столбец — 0. Тогда выход блока равен 255 - INPUT. Результат уходит в правые и нижние пиксели, которые распространяются проводами.
AND собирается чуть сложнее: top_left фиксируется на 255, первый вход A идёт в верхнюю строку, второй B — в левый столбец. Формула A + B - 255 в точности даёт таблицу истинности AND. Из NOT и AND легко собрать NAND, а дальше — любые другие схемы.
Автор называет это «странными машинами» и отмечает, что это только начало. Остаются открытые вопросы: можно ли оптимизировать гейты, встроить этот подход в инструмент синтеза — например, превращать Verilog прямо в VP8-фреймы — и как сделать последовательную логику на inter-frames. Статья предлагает разобраться в видеокодеках через неожиданный, но наглядный способ — и заодно напоминает, что кодеки задают только структуру и примитивы, а вот как именно кодировать видео, остаётся на усмотрение энкодера.