Где-то заголовок, который вы переносите, должен был установить палитру.На VGA 256 цветов отображаются через таблицу, которую программист предварительно настроил для преобразования их в 18-битный цвет RGB (с одинаковыми 6 битами на канал).Если вы запускаете оригинальный заголовок с помощью эмуляции, следите за записью в порты 0x3c6, 0x3c8 и 0x3c9 или обращениями к BIOS через int 10h, с ax = 0x1010 (для установки одного цвета) или 0x1012 (для установки диапазона).Если у вас есть исходный код, очевидно, ищите источник таблицы палитры.
В терминах рисования вы можете сохранить палитру самостоятельно, например, как массив в стиле C из 256 CGColorRefs, или использовать CGColorSpaceCreateIndexed какВы предлагаете (игнорируйте небольшую ошибку документации Apple; таблица цветов может содержать до 256 записей, а не до 255), вероятно, с растровым контекстом, чтобы просто передать свой буфер в CoreGraphics и забыть об этом.
Я ожидаюпереназначение будет выполняться на процессоре, поэтому, если это будет слишком дорого, подумайте об использовании GL ES 2.x и написании подходящего пиксельного шейдера - вы загрузите свое фактическое изображение, скажем, в виде яркости (то есть, одного канала) текстуры, плюс текстура 256x1, где цвет в каждой точке является записью палитры, затем напишите шейдер, который считывает из первой текстуры текущие координаты текстуры и использует это значение для индексации второй.