Bonjour tout le monde
Je cherche une routine pour afficher un sprite sans utiliser ion ou mirage OS (qui ont déjà des fonctions intégrées pour afficher des sprites apparemment)
au passage, j'utilise Oncalc compiler...
;-----> Draw a sprite ; b=size of sprite ; l=yc ; a=xc ; ix holds pointer putSprite: ld e,l ld h,$00 ld d,h add hl,de add hl,de add hl,hl add hl,hl ld e,a and $07 ld c,a srl e srl e srl e add hl,de ld de,gbuf add hl,de putSpriteLoop1: sl1: ld d,(ix) ld e,$00 ld a,c or a jr z,putSpriteSkip1 putSpriteLoop2: srl d rr e dec a jr nz,putSpriteLoop2 putSpriteSkip1: ld a,(hl) xor d ld (hl),a inc hl ld a,(hl) xor e ld (hl),a ld de,$0B add hl,de inc ix djnz putSpriteLoop1 ret
;-----> Draw a picture ;Input: ix->sprite ; a=x ; l=y ; b=height (in pixels) ; c=width (in bytes, e.g. 2 would be 16) ;Output: nothing ; All registers are destroyed except bc', de', hl' largeSprite: di ex af,af' ld a,c push af ex af,af' ld e,l ld h,$00 ld d,h add hl,de add hl,de add hl,hl add hl,hl ld e,a and $07 ld c,a srl e srl e srl e add hl,de ld de,gbuf add hl,de largeSpriteLoop1: push hl largeSpriteLoop2: ld d,(ix) ld e,$00 ld a,c or a jr z,largeSpriteSkip1 largeSpriteLoop3: srl d rr e dec a jr nz,largeSpriteLoop3 largeSpriteSkip1: ld a,(hl) xor d ld (hl),a inc hl ld a,(hl) xor e ld (hl),a inc ix ex af,af' dec a push af ex af,af' pop af jr nz,largeSpriteLoop2 pop hl pop af push af ex af,af' ld de,$0C add hl,de djnz largeSpriteLoop1 pop af ret
... ld b,8 ;8 pixels de hauteur ld l,15 ld a,15 ;coordonnées ld ix,sprite ;données ... sprite: .db 10000001b .db 01000010b .db 00100100b .db 00011000b .db 00011000b .db 00100100b .db 01000010b .db 10000001b ...
ld ix,(sprite)
.nolist ionPutSprite =putSprite [...] .list [...] Start: [...] ld l,15 ; CoorY ld a,15 ; CoorX ld b,8 ld ix,Sprite call ionPutSprite bcall(_grbufcpy) [...] ret [routine] .end END