Pourtant faire un effet miroir ça a déjà été fait de nombreuses fois (xlib et compagnie), sauf que les sources ne sont pas dispo... donc si quelqu'un a une routine assez optimisée ce serait cool de la partager

.nolist #include "ion.inc" .list #ifdef TI83P .org progstart-2 .db $bb,$6d #else .org progstart #endif ret jr nc,start .db "flip a sprite",0 start: ld ix,sprite ld bc,$0803 push bc xor a ld l,a call ionLargeSprite pop bc push bc ld ix,sprite call flipsprite ld a,25 ld l,0 pop bc call ionLargeSprite call ionFastCopy bcall _getkey ret ; INPUT : ; ix:sprite; b:height; c:width/8 ; OUTPUT : ; ix=flipped sprite ; /!\ saferam2 is used flipsprite: push ix pop hl ld de,saferam2 flipsprite_loop: push bc push hl ld h,d ld l,e ld b,0 add hl,bc ld d,h ld e,l pop hl push de ld b,c flipsprite_loop2: push bc ld a,(hl) call reverse_a ld (de),a inc hl dec de pop bc djnz flipsprite_loop2 pop de pop bc djnz flipsprite_loop ld de,saferam2 push de pop ix ret ;- Reverse a ;input: Byte in A ;output: Reversed byte in A ;destroys B ;Clock cycles: 66 ;Bytes: 18 ;author: calcmaniac84 reverse_a: ld b,a rrca rrca xor b and %10101010 xor b ld b,a rrca rrca rrca rrca xor b and %01100110 xor b rrca ret sprite: .db %11111111,%11111111,%11111111 .db %10001000,%10001010,%00100011 .db %10111010,%10101111,%01101111 .db %10001000,%10011011,%01100011 .db %11101011,%10101011,%01101111 .db %11101011,%10101011,%01101111 .db %10001011,%10101011,%01100011 .db %11111111,%11111111,%11111111 .end
.nolist #include "ion.inc" .list #ifdef TI83P .org progstart-2 .db $bb,$6d #else .org progstart #endif ret jr nc,start .db "flip a sprite",0 start: ld ix,sprite ld bc,$0803 push bc push ix xor a ld l,a call ionLargeSprite pop hl pop bc push bc call flipsprite ld a,25 ld l,0 pop bc call ionLargeSprite call ionFastCopy bcall _getkey ret ; INPUT : ; hl:sprite; b:height; c:width/8 ; OUTPUT : ; ix=flipped sprite ; /!\ saferam2 is used flipsprite: ld de,saferam2-1 flipsprite_loop: push bc push hl ld h,d ld l,e ld b,0 add hl,bc ld d,h ld e,l pop hl push de ld b,c flipsprite_loop2: push bc ld a,(hl) call reverse_a ld (de),a inc hl dec de pop bc djnz flipsprite_loop2 pop de pop bc djnz flipsprite_loop ld de,saferam2 push de pop ix ret ;- Reverse a ;input: Byte in A ;output: Reversed byte in A ;destroys B ;Clock cycles: 66 ;Bytes: 18 ;author: calcmaniac84 reverse_a: ld b,a rrca rrca xor b and %10101010 xor b ld b,a rrca rrca rrca rrca xor b and %01100110 xor b rrca ret sprite: .db %11111111,%11111111,%11111111 .db %10001000,%10001010,%00100011 .db %10111010,%10101111,%01101111 .db %10001000,%10011011,%01100011 .db %11101011,%10101011,%01101111 .db %11101011,%10101011,%01101111 .db %10001011,%10101011,%01100011 .db %11111111,%11111111,%11111111 .end
; INPUT : ; ix:sprite; b:height; c:width/8 ; OUTPUT : ; ix=flipped sprite ; destroys a, hl, de ; uses saferam3 flip_sprite: push bc push ix pop de ld hl,saferam3 flip_sprite_loop: push bc push de ld b,0 add hl,bc pop de push hl ld b,c flip_sprite_loop2: push bc dec hl ld a,(de) call reverse_a ld (hl),a inc de pop bc djnz flip_sprite_loop2 pop hl pop bc djnz flip_sprite_loop ld hl,saferam3 push hl pop ix pop bc ret ;- Reverse a ;input: Byte in A ;output: Reversed byte in A ;destroys B ;Clock cycles: 66 ;Bytes: 18 ;author: calcmaniac84 reverse_a: ld b,a rrca rrca xor b and %10101010 xor b ld b,a rrca rrca rrca rrca xor b and %01100110 xor b rrca ret
; INPUT : ; ix:sprite; b:height; c:width/8 ; OUTPUT : ; ix=flipped sprite ; destroys a, de ; uses saferam3 flip_sprite: push bc push ix pop de ld hl,saferam3 flip_sprite_outer: ;de = original sprite ;hl = buffer push bc ;save b (sprite height) ld b,0 ;bc = width in bytes add hl,bc ;go to very right of first sprite and draw leftward push hl ld b,8 flip_sprite_loop: dec hl ;go left in buffer push bc ;c gets overwritten so we need to save it ld a,(de) ;first byte in a rrca ;rotate a to the right and rotate the carry left into c rl c djnz $-3 ld (hl),c ;save flipped byte inc de ;next byte of sprite pop bc ;c = counter (number of bytes to flip) dec c jr nz,flip_sprite_loop pop hl pop bc ;restore b (height) djnz flip_sprite_outer ld ix,saferam3 pop bc ret