Цитата Сообщение от Titus Посмотреть сообщение
без всякого ООП (которое я, кстати, очень не люблю, но это дело вкуса).
Тут дело не во вкусе, а в необходимости. Вот представь себе: игра, в ней враги, их много, и у каждого свое состояние. Как писать код, обслуживающий врагов, без ООП (в явном или неявном виде)?

Какие другие парадигмы программирования ты используешь? Вот, например, из этого списка:
http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D1%8F
Цитата Сообщение от Titus Посмотреть сообщение
Вопрос о корявости индексной адресации и ее тормознутости в Z80. Понятно, что добавлена она была в процессор, как надстройка, посему ни с точки зрения экономии места, ни с точки зрения скорости не дает особых преимуществ относительно ее реализации несколькими командами.
Позволь не согласиться. Если твоя программа работает с некоторой структурой данных, причем доступ к ее членам происходит не последовательно - то индексная адресация существенно быстрее, чем ее замена косвенной адресацией. Так, например, команда:

LD A,(IX+n) занимает 3 байта и выполняется за 19 тактов, тогда как ее замена в общем случае (без ограничений на расположение структуры в памяти) требует двухбайтового сложения:

LD BC,n ; 10 тактов
ADD HL,BC ; 11 тактов
LD A,(HL) ; 7 тактов

Всего 5 байт и 28 тактов, места больше на 67%, по времени дольше на 47%, к тому же, требуются две хорошие регистровые пары (HL,BC), тогда как при использовании индексной адресации они свободны.

Можно ли было сделать лучше? Да, но ненамного. Сохраняя общую структуру Z80, теоретически можно убрать только префикс (DD/FD) и связанные с ним 4 такта. Остальные 19-4=15 тактов неизбежно останутся: они нужны для выборки кода команды, смещения, 16-битного сложения и обращения в нужную ячейку памяти.
Цитата Сообщение от Titus Посмотреть сообщение
В том же процессоре 6502, она заложена изначално и очень быстра и экономична.
Быстра и экономична? Это смотря с чем сравнивать. Учитывая, что у 6502 нет 16-битных регистров и 16-битного сложения, затраты на "обход" косвенной адресации очень значительны. А по машинным циклам, думаю, получается примерно то же самое. В самом деле, для выполнения команды 6502:

LDA (0x36),Y

требуется:
1) считать код команды (1 байт)
2) считать адрес косвенного обращения (1 байт)
3) считать байт по адресу 0x36 (младший байт базового адреса обращения)
4) считать байт по адресу 0x37 (старший байт базового адреса обращения)
5) 16-битное сложение базового адреса обращения и индексного регистра (как правило, 2 машинных цикла)
6) считать содержимое памяти по адресу обращения.

Итого 7 машинных циклов - против 5 у Z80. Ну или ладно, зачтем Z80 6 циклов, потому что один из них длинный (5 тактов). Что-то не вижу большого выигрыша.

---------- Post added at 18:29 ---------- Previous post was at 18:21 ----------

Добавлю. Приведенная выше косвенно-индексная адресация требует, при обращении к элементам структуры в произвольном порядке, установки регистра Y каждый раз перед обращением, что еще больше повышает затраты.

Если же вести речь о простой индексной адресации вида:
LDA addr,X

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

Я видел хитрые приемы построения программ для организации массива структур с использованием простой индексной адресации. Эти приемы накладывают на программу существенные ограничения. Универсальность кода страдает очень сильно. Впрочем, для игр Atari или NES этого было вполне достаточно. Я анализировал атариевский плеер музыки - именно там использовались эти приемы. Музыка, 4 канала - и известно, что больше не будет. Тогда, конечно, ограничения индексной адресации не играют большой роли.