replace texture jump table with dispatch table

(cherry picked from commit 88f10f9f06)
This commit is contained in:
2026-04-24 10:12:23 +02:00
parent b0758c6976
commit f0656aca40
6 changed files with 92 additions and 47 deletions

View File

@@ -120,48 +120,21 @@ get_tile_address:
; r13: address
; Locals:
; r2: jump address
; r2: pointer address
; */
get_sprite_address:
push r1
push r2
cmp r1, sprites.max
jbe get_sprite_address_jmp_table_init
jbe get_sprite_address_ptr
mov r1, sprites.unimplemented
get_sprite_address_jmp_table_init:
lsl r2, r1, 3 ; 2*instruction_size = *8 = <<3
add r2, r2, get_sprite_address_jmp_table_start
jmp r2
get_sprite_address_ptr:
lsl r2, r1, arch.instruction_increment_shift
add r2, r2, ptr.textures_addresses
load_32 r13, [r2]
get_sprite_address_jmp_table_start:
; sprite_empty
add r13, zr, sprite_empty
jmp get_sprite_address_return
; sprite_unimplemented:
add r13, zr, sprite_unimplemented
jmp get_sprite_address_return
; sprite_wall_end
add r13, zr, sprite_wall_end
jmp get_sprite_address_return
; sprite_wall_straight
add r13, zr, sprite_wall_straight
jmp get_sprite_address_return
; sprite_wall_corner
add r13, zr, sprite_wall_corner
jmp get_sprite_address_return
; sprite_robot
add r13, zr, sprite_robot
jmp get_sprite_address_return
; sprite_ghost
add r13, zr, sprite_ghost
jmp get_sprite_address_return
; sprite_coin:
add r13, zr, sprite_coin
;jmp get_sprite_address_return
get_sprite_address_return:
pop r2
pop r1
ret