13Fermer
ContraLe 12/04/2012 à 09:46
Déjà tu pourrais faire comme ça (attention je teste dans le graphbuffer pas le lcd réel) :
; a = x
; e = y
GET_BYTE:
; y * 12
ld hl, 0
ld d, 0
add hl, de ; 1
add hl, de ; 2
add hl, de ; 3
add hl, hl ; 6
add hl, hl ; 12

; x / 8
ld d, 0
ld e, a
srl e ; / 2
srl e ; / 4
srl e ; / 8
add hl, de

; A present on a le decalage dans hl

ld de, plotsscreen ; Prendre le debut du graphbuffer
add hl, de ; Puis ajouter le decalage

ld a, (hl)
ret

; a = x
; e = y
; retourne a = 1 si pixel allumé, a = 0 sinon
PIXEL_TEST:
ld c, a
ld b,00000111b
and b
ld b, a ; Sauver dans b pour la boucle

cp 0
jp z,aligne
ld a, 10000000b
jp nonaligne

aligne:
ld a, 10000000b
jp test

nonaligne:
srl a
djnz nonaligne

test:
ld b, a ; sauver dans b
push bc
ld a, c
call GET_BYTE
pop bc
and b
cp 0
jp z, return_zero
ld a, 1
ret
return_zero:
ld a, 0
ret


Et tester avec ça :
.nolist
#define EQU .equ
#include "ti83asm.inc"
#include "tokens.inc"
#define xcoord 8270h
#define ycoord 8272h

.list

.org 9327h

START:
; Turn the indicator to off and clear screen
call RINDOFF ; Turn off runindicator


loop:
call BUFCLR
call BUFCOPY

ld a, 0
ld e, 0
ld ix, sp
call DRAW_SPRITE
call BUFCOPY
call WAITKEY

; Test donne 1
ld a, 0
ld e, 0
call PIXEL_TEST
ld h, 0
ld l, a
call _dispHL
call WAITKEY

; Test donne 0
ld a, 1
ld e, 0
call PIXEL_TEST
ld h, 0
ld l, a
call _dispHL
call WAITKEY

; Test donne 1
ld a, 1
ld e, 1
call PIXEL_TEST
ld h, 0
ld l, a
call _dispHL
call WAITKEY

ret
.end
end



sp:
.db 10000000b
.db 11000000b
.db 11100000b
.db 11110000b
.db 11111000b
.db 11111100b
.db 11111110b
.db 11111111b

#include "sprites.routines.asm"



Y a aussi un fonction getPixel dans la librairie de ion mais je ne sais pas exactement ce qu'elle fait :
http://joewing.net/programs/calc/ti83/ion/libs.shtml#getpixel

Si tu as des questions sur mon code ou n'importe quoi d'autre à propos d'asm n'hésite pas, tu es au bon endroit smile