Принципы кодирования инструкций Intel x86(-64) или "ехал префикс через префикс"

Введение

С давних пор меня интересовало то как процессоры Intel x86 кодируют свои инструкции.
Будучи в детстве владельцем клона ZX Spectrum я уже тогда сталкивался с таблицами кодов инструкций его процессора Z80, как например тут: clrhome.org/table/
В таком виде очень хорошо просматривается принцип кодирования этих инструкций — наглядно видно как они упорядочены и по каким битам раскиданы.
Но вот для x86 таких таблиц как то не удавалось найти, а то как эти коды пояснялись в руководствах от самого Intel было несистематизировано и поэтому не воспринималось.
Однако пару месяцев назад я наконец то наткнулся на табличный вид однобайтовых инструкций от i8086 до i386, поразглядывал его и проникся тем что тут и как кодируется.
Более того — в процессе этого обзорного ознакомления я проникся еще тем как эволюционировала система команд x86 с поколениями процессоров и решил вкратце эти вехи законспектировать тут. Это ни в коем случае не полное справочное руководство, но скорее обзорное знакомство вместе с историческим экскурсом которое возможно поможет кому то быстро понять основные принципы кодирования инструкций x86 перед более углубленным изучением по таблицам.

Читать дальше →

Review Graphics compo from Chaos Constructions Winter 2021

Всем привет! Продолжаем серию обзоров графических работ с прошедших демопати, в этот раз написал статью про все графические работы с зимнего CC'2021. Ни одного слова не напишу о том, как проходил сам фестиваль. Будет только обзор графики.



Читать дальше →

HYPERADIO 2021

Наше радио все еще живо! УРА!



Мы плавно перетекли из 2020 в 2021 год и практически не сбивались с верного пути вещания 24/7.

Были небольшие проблемы, когда в период глобального мирового локдауна. В помещении, где физически расположен сервер Hyperadio, неожиданно произошел ремонт. Грубо говоря, в моей квартире, единственная вещь, которая гордо стояла до последнего и цеплялась проводами к розетке питания и сетевому роутеру, когда вокруг был полнейший хаос, был сервер Hyperadio. Но, дольше суток вроде бы, простоя не было. Ах да, еще мой доморощенный сервер пару-тройку раз подвисал по причине перегрева в самые жаркие летние дни, когда температура в помещении переваливала за +35°С.

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

Читать дальше →

Программирование для Famicom/NES/Денди в Nesicide+ca65: маппер MMC3 - HBlank+скроллинг (10) КОНЕЦ

Это будет последний урок в этой серии описывающий на практике последнюю технику которую нужно знать, чтобы написать крутую игру на Famicom/NES/Денди…
Ну хорошо, если призадуматься, то нюансов в программировании на денди есть еще порядком. Как организовать «бесконечный» скроллинг прокручивая две экранных области друг за другом и обновляя вновь появляющиеся с краёв тайлы в VRAM по ходу движения… Как организовать тайлы в метатайлы 2x2, а то и 4x4 для более краткого описания карт и удобного обновления видеопамяти (ведь атрибуты палитр назначаются сразу блоку тайлов 2x2 в экранной области, а один байт атрибутов покрывает 4x4 тайла)… Как воспроизводить оцифрованные DCPM звуки с помощью FamiTone2…
Впрочем, имхо, материалов и примеров изложенных в этих статьях хватит чтобы сообразить как это всё делается самостоятельно. Да и должно же быть какое то пространство и для собственного творчества. Здесь же я поставлю точку в этом цикле и, возможно, займусь какой-нибудь уже полноценной игрой исходники которой выложу, но это будет другая история.

Читать дальше →

Программирование для Famicom/NES/Денди в Nesicide+ca65: маппер MMC3 - перехват HBlank (9)

Итак, кроме собственно управления дополнительными банками памяти маппер MMC3 обладает еще одной важной функцией — генерацией прерываний IRQ по счётчику сканлайнов. В уроке про zero sprite hit мы перехватывали момент когда можно например в середине кадра сменить параметры прокрутки заднего фона этим средством встроенным в консоль. Но этот способ во первых можно использовать только один раз за кадр, а во вторых требует от процессора тратить все вычислительные ресурсы на обнаружение наступления события, что кроме самого этого факта еще и затрудняет планирование времени сколько код должен выполняться.
Счётчик сканлайнов в MMC3 лишён всех этих недостатков.

Читать дальше →

Музей Яндекса завершает серию вебинаров о творчестве на ретрокомпьютерах

На прошлой неделе мы закончили разговор о маппинге и визуальных эффектах на его основе. Узнали, что такое субпиксельная оптимизация, рассмотрели способы сокращения расхода памяти, научились создавать таблицы маппинга без использования математических формул, ответили на вопросы зрителей. Запись вебинара можно посмотреть здесь.

Сегодняшний вебинар — последний. Мы узнаем как синхронизировать визуальные эффекты под музыку, напишем диспетчер, управляющий очерёдностью и временем вывода эффектов, и с его помощью попробуем собрать небольшое демо на основе музыки, графики и кода, созданных в течение всех предыдущих вебинаров. Ведущие — Олег Сенин (bfox ) и Александр Солодков (TmK ) — программисты, художники, музыканты на различных ретроплатформах.

Ждём всех 4 июня в 19:00 по московскому времени. Участие бесплатное, пожалуйста, зарегистрируйтесь заранее по ссылке. Трансляцию вебинара можно будет посмотреть на youtube.

Практика

А чтобы материал не остался теорией, мы приглашаем проверить свои силы, приняв участие в конкурсной программе фестиваля «Демодуляция 2020», который состоится осенью. Мы понимаем, что для создания чего-то впечатляющего нужно время, поэтому приём работ уже открыт. Более подробно о правилах конкурсов можно прочитать на нашем сайте.