Le code :
check_event: ; a:numéro du tile ld hl,event_tiles ld b,(event_tiles_end - event_tiles)/3 ; b = 2 ici check_event_loop: cp (hl) ; on compare au numéro du tile de la table inc hl ; on incrémente pour qu'hl prenne la valeur de l'adresse de la routine jp z,jp_hl ; parce que jp z,(hl) n'existe pas inc hl inc hl ; si c'est pas le bon tile on incrémente pour tester le suivant (l'adresse prend 2 octets) djnz check_event_loop ret jp_hl: jp (hl) ; normalement ça saute bien à la _valeur_ d'hl (adresse de la routine) et non pas à son adresse (qui est celle de l'adresse des tiles), non ? event_tiles: .db 3 ; tile n°3 = porte .dw event_door ; adresse de la routine de gestion des téléportations .db 18 ; etc... .dw event_hole event_tiles_end:
Vous voyez où est le problème ?