Как SimCity уместилась в 16 МГц: симуляция, которая работает не каждый кадр

How to run a city builder on 16 MHz

Как SimCity уместилась в 16 МГц: симуляция, которая работает не каждый кадр

Автор разбирает открытый код Micropolis — исходник оригинальной SimCity — и показывает, как Maxis запускала полноценную симуляцию города на процессоре Intel 386SX с частотой 16 МГц. Главный трюк: функция Simulate() не обновляет все системы каждый кадр, а распределяет их по 16 слотам через параметр mod16. Тот же приём встречается в Assetto Corsa и Unreal Lumen — не пересчитывать всё сразу.

Итак, SimCity просто пропускает большую часть симуляции.
  1. pelcg

    У нас всё это работает на машине с 16 МГц, а на современных компьютерах с 32 ГБ оперативной памяти есть крайне требовательные к памяти десктопные приложения, использующие Java и даже Electron.

    Даже текстовый редактор, написанный сегодня на JavaScript с использованием Electron, займёт 1 ГБ+ без учёта того, что пользователь может открыть несколько документов, что может увеличить потребление оперативной памяти.

  2. prosaic-hacker

    Это хорошее откровение, но это техника стара как мир. Моя первая после университета работа программистом была в CAE Electronics, компании по производству авиасимуляторов. Симуляции работали на различных мини-компьютерах той эпохи, в основном на DEC Vax 780 и его преемниках, или на Gould SEL в моё время там.

    Если память мне не изменяет, симуляция работала как суперцикл на микроконтроллере каждые 50 мс или 33 мс. На каждом цикле диспетчер запускал выбранный набор основных функций симуляции: некоторые каждый цикл, некоторые каждый 2-й, 4-й или более цикл. Система называлась banding. Таблица диспетчеризации была переделана для оптимизации потребностей конкретного симулятора.

    Были различные оптимизации вне основного CPU, так как периферийные устройства тоже выполняли вычисления. Также, по мере ускорения систем, оставалось время для работы обычной ОС с низкоприоритетными функциями, не требующими реального времени.

    Техника не была новой в моё время и использовалась в предыдущем поколении систем Xerox примерно на десятилетие раньше.

  3. phire

    > Оригинальная SimCity, например, указывает Intel 386SX в качестве CPU в системных требованиях.

    Не уверен, откуда это взялось. На коробке оригинального релиза [1] сказано, что игра будет работать на любом ПК с 512 КБ оперативной памяти. То есть это 8088 на частоте всего 4,77 МГц.

    Но это далеко не самая низкая по характеристикам версия игры. Версия для Commodore 64, возможно, и лишилась quite a few features (вроде стадионов, полицейских/пожарных станций и железных дорог), но основной цикл симуляции города присутствовал всего в 64 КБ оперативной памяти и на 1 МГц 6502.

    А порт для BBC Micro/Acorn Election был ещё более впечатляющим. Там были в основном все функции полной версии для Amiga/PC/Mac, не хватало только музыки/звука/анимации. С 2 МГц 6502 (или 1 МГц на Election) и всего 32 КБ оперативной памяти.

    [1] https://images.launchbox-app.com/79861ce4-75ea-46dd-b46e-521...

Ещё за этот день

2026-10-24