mirror of
https://github.com/lscharen/iigs-game-engine.git
synced 2024-11-26 22:50:22 +00:00
Save 1 cycle per line in the PEA fast-path for odd-aligned blits
This commit is contained in:
parent
108335e90a
commit
5f492fd557
@ -546,18 +546,11 @@ entry_jmp jmp $0100
|
|||||||
; an amortized 4-cycles per line to set the entry point break
|
; an amortized 4-cycles per line to set the entry point break
|
||||||
|
|
||||||
right_odd bit #$000B ; Check the bottom nibble to quickly identify a PEA instruction
|
right_odd bit #$000B ; Check the bottom nibble to quickly identify a PEA instruction
|
||||||
beq r_is_pea ; This costs 6 cycles in the fast-path
|
bne r_is_not_pea ; This costs 5 cycles in the fast-path
|
||||||
|
|
||||||
bit #$0040 ; Check bit 6 to distinguish between JMP and all of the LDA variants
|
xba ; fast code for PEA
|
||||||
bne r_is_jmp
|
|
||||||
|
|
||||||
long_1 stal *+4-base ; Everything else is a two-byte LDA opcode + PHA
|
|
||||||
dfb $00,$00
|
|
||||||
bra r_jmp_rtn
|
|
||||||
|
|
||||||
r_is_pea xba ; fast code for PEA
|
|
||||||
r_jmp_rtn sep #$20 ; shared return code path by all methods
|
r_jmp_rtn sep #$20 ; shared return code path by all methods
|
||||||
pha
|
two_byte_rtn pha
|
||||||
rep #$61 ; Clear Carry, Overflow and M bits #$20
|
rep #$61 ; Clear Carry, Overflow and M bits #$20
|
||||||
odd_entry jmp $0100 ; unconditionally jump into the "next" instruction in the
|
odd_entry jmp $0100 ; unconditionally jump into the "next" instruction in the
|
||||||
; code field. This is OK, even if the entry point was the
|
; code field. This is OK, even if the entry point was the
|
||||||
@ -569,6 +562,14 @@ odd_entry jmp $0100 ; unconditionally jump into
|
|||||||
; code field is page-aligned, only the low byte needs to
|
; code field is page-aligned, only the low byte needs to
|
||||||
; be updated when the scroll position changes
|
; be updated when the scroll position changes
|
||||||
|
|
||||||
|
r_is_not_pea bit #$0040 ; Check bit 6 to distinguish between JMP and all of the LDA variants
|
||||||
|
bne r_is_jmp
|
||||||
|
|
||||||
|
long_1 stal *+6-base ; Everything else is a two-byte LDA opcode + PHA
|
||||||
|
sep #$20 ; Lift 8-bit mode here to save a cycle in the LDA
|
||||||
|
dfb $00,$00
|
||||||
|
bra two_byte_rtn
|
||||||
|
|
||||||
r_is_jmp sep #$41 ; Set the C and V flags which tells a snippet to push only the low byte
|
r_is_jmp sep #$41 ; Set the C and V flags which tells a snippet to push only the low byte
|
||||||
long_2 ldal entry_jmp+1-base
|
long_2 ldal entry_jmp+1-base
|
||||||
long_3 stal *+5-base
|
long_3 stal *+5-base
|
||||||
|
Loading…
Reference in New Issue
Block a user