Раньше всё начиналось с ZX Spectrum 48K, на котором автор научился работать со сложной 3D-графикой, пока ещё не имея на ней. Недавно он перенес эту логику на микроконтроллер ATmega328P и выводил её на OLED-дисплей с разрешением 128x64. Но задача стояла другая: заставить этот код работать на настоящем Speccy, чей процессор Z80 куда меньше, чем ATmega328P. Разработчик написал кросс-компилятор z88dk, чтобы собрать программу под эту архитектуру. В исходном коде на C проект выдавал всего 6,2 кадра в секунду, так как Z80 не умеет выполнять операции с плавающей точкой. Чтобы ускорить рендеринг, автор полностью переписал алгоритм на ассемблере и изменил саму математику проекции.
Вместо тяжёлых умножений в цикле были оставлены только два деления и простые арифметические действия. Для ускорения делений использовались таблицы обратных значений и разрядная арифметика 8,8. В ассемблерной версии, где деления заменили на умножения по таблице reciprocals, скорость выросла до 14 кадров в секунду. Кроме того, был реализован режим предвычислений, когда вся геометрия рассчитывается заранее. В этом режиме проект выдаёт 40 кадров в секунду, что в четыре раза быстрее стандартной версии. Такой подход позволил загрузить все данные в видеопамять заранее, оставив внутри цикла только операции чтения памяти и установки бита.
Для перевода координат из физического пространства в экранную автор использовал фиксированную точность. Данные были масштабированы на коэффициент 8960, а оси координат поменяны местами, чтобы упростить проверку видимости точек. Для камеры орбитального типа были введены специальные множители для синуса и косинуса, которые корректируют радиус орбиты и горизонтальный сдвиг. Полученные формулы представляют собой классическую 3D-проекцию, адаптированную под ограничения Z80. В финальном файле statue.tap находится не только код, но и бинарные данные моделей, готовые к запуску в эмуляторе FUSE или на реальной консоли.