Рубрика «ruvds_переводы» - 7

Проектируем самодельный 16-битный CPU в 2023 году - 1


Для создания самодельного CPU требуется большое количество чипов логики. И в самом деле разумно, что для реализации регистров, счётчика команд, АЛУ и других компонентов CPU на логике TTL или CMOS действительно необходимо существенное число чипов. Но сколько конкретно?

Я попытался оптимизировать свой самодельный CPU, минимизировав количество чипов логики, чтобы ответить на вопрос: какое минимальное число интегральных схем требуется для полного по Тьюрингу CPU без CPU?

Мой ответ: для создания 16-битного последовательного CPU нужно всего 8 интегральных схем, включая память и тактовый генератор. Он имеет 128 КБ SRAM, 768 КБ FLASH и его можно разгонять до 10 МГц. Он содержит только 1-битное АЛУ, однако большинство из его 52 команд работает с 16-битными значениями (последовательно). На своей максимальной скорости он исполняет примерно 12 тысяч команд в секунду (0,012 MIPS) и, среди прочего, способен выполнять потоковую передачу видео на ЖК-дисплей на основе PCD8544 (Nokia 5110) с частотой примерно 10 FPS.Читать полностью »

Профилирование Python — почему и где тормозит ваш код - 1


Представьте ситуацию: вы написали скрипт для обработки каких-то данных на ноутбуке, ушли попить кофе, а когда пятнадцать минут спустя вернулись, завершилось едва ли 10%.

Почему скрипт работает так медленно? Какая его часть тормозит? Дело в чтении данных, их обработке или сохранении? Как ускорить исполнение? Действительно ли скрипт вообще медленный?

Ответить на все эти вопросы поможет инструмент под названием «профилировщик» (profiler).
Читать полностью »

Как iMac спас компанию Apple - 1


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

Первый iMac появился в мире компьютеров, отчаянно нуждавшемся в переменах.

После бурных дней революции персонального компьютера в середине 1990-х возник застой. Apple десяток лет транжирила преимущества Mac и, наконец, после громкого появления Windows 95 от них почти ничего не осталось. Это была эпоха бежевых десктопных компьютеров, подключённых к большим ЭЛТ-дисплеям и другой периферии.

В 1997 году Стив Джобс вернулся в Apple, находившуюся на пороге смерти, и быстро оценил пассивы и активы компании. У Apple не было ни волшебной палочки, ни курицы, несущей золотые яйца, зато имелся молодой промышленный дизайнер, который экспериментировал с цветами и прозрачным пластиком.

Мозг Джобса, дизайны Джони Айва и новый чип PowerPC G3 компании Motorola позволили компании начать придумывать план. По сути, Джобс вернулся к своей исходной концепции «компьютер для всех остальных», к продаже простоты. Графический интерфейс Mac с управлением мышью, возможно, и изменил направление движения мира PC, но его дизайн «всё в одном» не сработал. Джобс решил, что настало время повторной попытки.
Читать полностью »

Взлом доступа к ядру Windows при помощи драйвера принтера - 1


В этой статье приводятся подробности CVE-2023-21822 — уязвимости Use-After-Free (UAF) в win32kfull, которая может привести к повышению привилегий. Отчёт о баге отправлен в рамках программы ZDI, а позже она была пропатчена компанией Microsoft.

В ядре Windows есть три API, предназначенные для общего использования драйверами устройств с целью создания растровых изображений (bitmap): EngCreateBitmap, EngCreateDeviceBitmap и EngCreateDeviceSurface. Каждый из этих API возвращает дескриптор растрового изображения. Если вызывающая сторона хочет выполнить какие-то операции рисования на растровом изображении, то она должна сначала заблокировать это изображение, передав его дескриптор функции EngLockSurface. EngLockSurface увеличивает значение эталонного счётчика растрового изображения и возвращает указатель на соответствующую запись SURFOBJ. SURFOBJ — это расположенная в памяти ядра структура, содержащая всю информацию, связанную с растровым изображением, например, его размер, формат пикселей, указатель на пиксельный буфер и так далее. Подробнее структуру SURFOBJ мы рассмотрим позже.

После вызова EngLockSurface полученный указатель на SURFOBJ может передаваться различным API рисования, например, EngLineTo и EngBitBlt. Полный список этих API рисования можно найти в winddi.h. После того, как вызывающая сторона завершит операции рисования, она должна вызывать EngUnlockSurface. На этом этапе эталонный счётчик растрового изображения снова сбрасывается до нуля, и вызывающей стороне больше не разрешается использовать указатель на SURFOBJ. В конце вызывающая сторона может удалить растровое изображение, вызвав для его дескриптора EngDeleteSurface. Типичное использование этих API показано ниже:
Читать полностью »

Создание игры в стиле GameBoy в 13 КБ - 1


В прошлом году я решил поучаствовать в гейм-джеме js13kgames. Это длящееся один месяц ежегодное соревнование по созданию с нуля игры на JavaScript, которая должна уместиться в 13 КБ (в zip). Места как будто не очень много, но с достаточным количеством креативности при таких ограничениях можно достичь многого. Просто взгляните на потрясающие примеры прошлых лет:

Хотя в прошлом году моя игра заняла не такое высокое место, я всё равно хотел бы поделиться своими открытиями, сделанными в процессе её разработки.

Мне захотелось сделать игру, напоминающую о ретроэпохе игр на портативных консолях с их уникальным квадратным экраном, низким разрешением и видом сверху вниз. Я решил реализовать быстрый геймплей в стиле action-RPG с простым, но увлекательным геймплеем, мотивирующим игрока продолжать игру. С музыкой всё было очевидно — звуковые эффекты должны быть похожими на звуки аркадных автоматов.

Поиграть в мою игру можно на странице Gravepassing сайта JS13KGames. Полный код выложен на GitHub.
Читать полностью »

Что происходит, когда запускаешь «Hello World» в Linux - 1


Сегодня я задумалась о том, что происходит, когда запускаешь в Linux простую программу «Hello World» на Python.

print("hello world")

Вот как это выглядит в командной строке:

$ python3 hello.py
hello world

Но внутри происходит гораздо больше. Я объясню, что там творится, и, что гораздо важнее, расскажу об инструментах, при помощи которых вы сами сможете исследовать происходящее. Мы воспользуемся readelf, strace, ldd, debugfs, /proc, ltrace, dd и stat. Я не буду рассматривать относящиеся к Python части, только объясню, что происходит при выполнении динамически компонуемых исполняемых файлов.
Читать полностью »

Как ID Software удалось выжать невозможное из EGA-карт - 1


Я прочитал превосходную книгу Doom Guy Джона Ромеро, которую крайне рекомендую. В девятой главе Джон рассказывает о том, как его поразила увиденная им технология Adaptive Tile Refresh (ATR). Благодаря этому я понял, что пока не анализировал очень важную методику, лежавшую в основе серии игр Commander Keen (CK).

В процессе исследований я выяснил, что ATR использовалась только в первой трилогии CK. Во второй разработчики начали использовать нечто гораздо лучшее.Читать полностью »

Долгие годы, начиная ещё задолго до моего рождения, в Великобритании использовались билеты на поезд размером с кредитную карту. Изначально это были билеты APTIS1, которые позже заменили на чуть более удобочитаемую версию, печатаемую в том же формате.

1 Я до сих пор помню, как покупал их в детстве, чтобы добраться до лондонского вокзала Ватерлоо!

Реверс-инжиниринг британских билетов на поезд - 1


Сегодня эта отрасль стимулирует нас отказываться от бумажного билета в пользу электронного, со штрих-кодом (или смарт-карты ITSO2); компании-перевозчики не только не хотят тратить деньги на печать билетов, но и получают возможность точно отслеживать использование билетов в сети и минимизировать случаи мошенничества.
Читать полностью »

Как мой менеджер потратил миллион долларов на сервер бэкапов, который я ни разу не использовал - 1


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

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

Когда я пришёл в Ubisoft в 2014 году, меня назначили в отдел программирования онлайна на должность руководителя Ops. Это было ужасно, потому что все работали под Windows.

Kubernetes ещё не было на горизонте, да если бы он и был, сам Docker оставался крайне сырым и пока не мог выполнять нативные двоичные файлы Windows.

Вместо него мы использовали собственную реализацию распределённых систем.
Читать полностью »

Двадцать пять лет curl - 1


Когда жить интересно, время летит незаметно. 20 марта curl исполнилось 25 лет.

Проект curl начался очень скромно: это был небольшой переименованный инструмент передачи URL, о котором почти никто не знал в первые годы его существования.

▍ Я в то время

Я создал самый первый релиз curl, и с тех пор выпускал пакеты каждого нового релиза. В день, когда я впервые выпустил curl, мне было 27 лет, я работал разработчиком ПО в Frontec Tekniksystem, где в основном занимался разработкой встроенных систем для более крупных шведских компаний-разработчиков. Например, в течение нескольких лет в конце 90-х я работал над довольно большим количеством проектов для телекоммуникационного гиганта Ericsson.

Мне нравились программирование и разработка с тех пор, как в середине 80-х у меня появился первый компьютер. В 1990-х у меня уже был устоявшийся ежедневный график: когда моя вторая половина ложилась спать, я продолжал бодрствовать, час-два занимаясь разработкой. По сути, именно так мне удавалось находить время для своих проектов в первые несколько десятков лет. Меньше сна. Меньше других дел.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js