Еще один файлик для возможной оптимизации - EG_Sprites_Player вроде это вывод спрайтов игрока.
Все инструкции LD (HL),0 закомментированы, и там куча пустых строк с ними.Код: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
Проверить бы всю строку, если она пустая - зачем щелкать HL, можно сразу переходить на следующую.
И еще, какие-то извращенские методы доставания адреса строк через IX, это жрет много времени =)
Получается, что на каждую вертикальную координату экрана своя таблица адресов?
Сколько ж эти таблицы жрут? Или я не догоняю логику работы процедуры вывода?
Саму процедуру можно ускорить, для начала заменив IX и работу с ним на DE:
Выигрыш где-то 20 тактов на переход. Немного, но... либо задействовать DE во втором ускорении ниже.Код:EX DE,HL LD E,(HL) INC L LD D,(HL) INC HL EX DE,HL
Второе: в коде куча повторяющихся байт, наиболее частый, вроде, 45. Можно распихать самые частые по регистрам.
Свободных регистров у нас получается три: A, E и D (если оставить IX), либо только A.
То бишь пишем в память не числа, а регистры. Получится строка типа такой (заменив 45 на аккум):
Выигрыш тоже небольшой, однако по чуток, да набирается экономия, если еще и адреса из DE брать.Код: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




Ответить с цитированием