Еще один файлик для возможной оптимизации - EG_Sprites_Player вроде это вывод спрайтов игрока.
Код:
inc ixl
inc ixl
ld l,(ix+0) ;2я строка
ld h,(ix+1)
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
and a
sbc hl,bc ;1я строка
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
inc hl
;ld (hl),0
Все инструкции LD (HL),0 закомментированы, и там куча пустых строк с ними.
Проверить бы всю строку, если она пустая - зачем щелкать HL, можно сразу переходить на следующую.
И еще, какие-то извращенские методы доставания адреса строк через IX, это жрет много времени =)
Получается, что на каждую вертикальную координату экрана своя таблица адресов?
Сколько ж эти таблицы жрут? Или я не догоняю логику работы процедуры вывода?
Саму процедуру можно ускорить, для начала заменив IX и работу с ним на DE:
Код:
EX DE,HL
LD E,(HL)
INC L
LD D,(HL)
INC HL
EX DE,HL
Выигрыш где-то 20 тактов на переход. Немного, но... либо задействовать DE во втором ускорении ниже.
Второе: в коде куча повторяющихся байт, наиболее частый, вроде, 45. Можно распихать самые частые по регистрам.
Свободных регистров у нас получается три: A, E и D (если оставить IX), либо только A.
То бишь пишем в память не числа, а регистры. Получится строка типа такой (заменив 45 на аккум):
Код:
ld l,(ix+0) ;2я строка
ld h,(ix+1)
;ld (hl),0
inc hl
ld (hl),a
inc hl
ld (hl),41
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),8
and a
sbc hl,bc ;1я строка
ld (hl),9
inc hl
ld (hl),a
inc hl
ld (hl),61
inc hl
ld (hl),63
inc hl
ld (hl),a
inc hl
ld (hl),a
inc ixl
inc ixl
Выигрыш тоже небольшой, однако по чуток, да набирается экономия, если еще и адреса из DE брать.