TGViewer
Physics.Math.Code Physics.Math.Code @physics_lib · 147K subscribers
Post #15001 32.8K
👨🏻‍💻 Магия 3D на ZX Spectrum: Как это делали на калькуляторе и ассемблере? 🖥

В былые времена 8-битный ZX Spectrum заставляли делать то, что ему вообще-то не снилось — крутить 3D-модели. Когда мы сейчас видим скриншоты Elite или Driller, сложно поверить, что этот "проволочный каркас" заставлял людей в 90-х открывать рты от удивления . Но как это работало технически? Были ли там библиотеки DirectX? Конечно нет. По сути был голый металл. Никаких готовых решений не существовало. Программисты были одновременно и математиками, и художниками, и инженерами. Вся магия происходила на голом ассемблере (Z80). Почему на ассемблере? Потому что Бейсик был безнадежно медленным. Представьте: первая 3D-программа в журнале Your Computer (1983 год) была написана на Бейсике, но уже через год код уходил в машинные коды, чтобы получить хоть какие-то сносные 5-10 кадров в секунду. Как вам такие FPS, зумеры?

🔻 Цена 3D: Такты и килобайты

Программы весили около 16-48 КБ. В этот объем нужно было вместить код движка, текстуры (если они были) и логику. Один из современных энтузиастов ради интереса переписал 3D-движок под Spectrum. Результат на реальном "железе" с частотой 3.5 МГц — 1 кадр в секунду. Чтобы получить играбельные 10 FPS, код оптимизировали до такой степени, что каждая команда и каждый такт процессора были на счету.

⚙️ Как это создавалось программно?

Современный программист скажет: «float умножить на матрицу». Спектрумист сказал бы: «Ты охренел, сынок, какой float?». И вот какие интересные особенности получались:
▪️1. Никаких дробей: Дробных чисел боялись как огня. Выход — использовать целочисленную арифметику и таблицы предрасчета. Например, синус угла хранили не как число от 0 до 1, а как значение, умноженное на 256
▪️2. Таблицы вместо расчетов: Процессор Z80 не умел быстро умножать. Поэтому умножение делали сдвигами и сложением, либо просто брали готовый результат из заранее заготовленной таблицы (например, таблица умножения на 24 килобайта — это вам не шутки!)
▪️3. Точка решает всё: Самая важная процедура — вывод точки. В статьях того времени программисты хвастались скоростью: 70 тактов на точку . Если процедура вывода точки тормозит, кубик при повороте развалится на глазах.

🏆 Соревнования: Кто быстрее

Все началось с проволочных кубиков (1983-1985). К 1987 году вышла культовая Driller (она же Space Debris), которая использовала заливку полигонов. А потом началась демосцена. Группы ломали игры, чтобы вытащить оттуда 3D-движки.
▫️ Jacek Michalak (Польша) выдрал движок из игры Starion и Starstrike II, добавив туда текстуры.
▫️ В середине 90-х украинские и словацкие кодеры выдали жемчужины: Echology (где объекты были усыпаны точками), IRIS Ultrademo с тенями у объектов.
▫️ Вершина инженерной мысли — режим Gigascreen, когда использовались два экранных буфера для создания иллюзии большего количества цветов.

💬 Насколько это было сложно?

Очень. Чтобы объект не "плыл" при вращении из-за накапливающихся ошибок округления, координаты хранили в 5-байтовом формате, а расчет одного кубика на 200 кадров мог занимать 40 секунд процессорного времени . Код приходилось писать так, чтобы прерывания (halt) не стирали изображение с экрана. Программисты вручную оптимизировали код под конвейер команд, использовали "метод средней точки" для расчета сложных полигонов через простые арифметические операции, чтобы не множить лишние умножения.

ZX Spectrum — это машина, на которой люди учились делать невозможное. 3D на нем — это чистая магия, основанная на математике, знании архитектуры процессора и нечеловеческом терпении. Если есть здесь олды, которые застали и пробовали такую машину, то напишите в комментариях вашу историю. Фото/видео по теме приветствуются. #hardware #assembler #ассемблер #графика #3d #математика #геометрия #программирование #zxspectrum #gamedev

💡 Physics.Math.Code // @physics_lib
  • 👍 112
  • ❤ 40
  • ❤‍🔥 40
  • 🔥 30
  • 👏 5
  • ⚡ 1
  • 🤔 1
  • 🙏 1
More from @physics_lib
  1. Sep 29, 2026💥 Зоопарк нейтронных звезд [2008] [Россия] С. Б. Попов Научно-популярная лекция о нейтрон…
  2. Sep 28, 2026💫 ЭМ поле и ртуть. Почему она крутится? 🌀 Под действием электрического поля ртуть отдает…
  3. Sep 26, 2026💡 Физика света / The Physics of Light [2014] Серия фильмов из 6 частей исследует истинную…
  4. Sep 26, 2026🌈 Наглядно об изменении цвета предметов при погружении на глубину — обратите внимание на…
  5. Sep 24, 2026🥺 Plasma Vortex in a Magnetic Field ⚡️ Видео демонстрирует классический и очень наглядный…
  6. Sep 23, 2026🌪 Однополостный гиперболоид — кривая поверхность держит небоскрёбы Представьте поверхност…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →