
Сообщение от
izzx
сделал так, чтобы в тот момент, когда проседал FPS, второстепенный код не выполнялся
Если он "второстепенный" и не критичен для работы - может, его вообще убрать? =))
Поглядел изменения - не во все въехал. Трудновато вникать в чужие исходники, да еще переписанные по диагонали (эт я про адаптацию с Амстрада).
Но озадачил вот этот момент (файл EG_Sprites10.asm):
Код:
; sprites are 6 bytes wide, so repeat another 5 times
ld a,(hl)
ld (de),a
inc e;
; res 3,h
;---
push de
ld de,80
and a
sbc hl,de
pop de
;---
ldi
; set 3,h
;---
push de
ld de,80
add hl,de
pop de
;---
;
ld a,(hl)
ld (de),a
inc e
; res 3,h
;---
push de
ld de,80
and a
sbc hl,bc
pop de
;---
ldi
; set 3,h
;---
Если это вывод спрайтов - он так и остался вертикально-побайтово. Но даже если это что-то иное - процедура значительно похудеет и ускорится, если убрать LDI оттуда.
Заменяем LDI на 4 команды (LD A,(HL):LD (DE),A:INC E/DE:INC L/HL), зато освобождаем пару BC, и можно убрать PUSH-POP DE, заменив в сложении/вычитании DE на BC:
Еще и не нужно будет каждый раз загружать число 80 в BC.
- - - Добавлено - - -
Подумал - LDI можно оставить, просто после каждого LDI добавить команду INC C (чтобы восстановить значение 80) - это быстрее и короче, чем 4 команды вместо LDI.
Достаточно загрузить один раз 80 в начале процедуры и все. Основное же изменение останется (уборка PUSH-POP DE и замена DE на BC).