ben tu reaffiche tout a chaque fois
Y a deux fesses qui sont sur la plage et l'une dit à l'autre :
"Qu'est ce qu'on fait maintenant ?"
Et l'autre lui répond :
"Ben PROUT !!!"
oula j'ai pas tt compris au truc la !
C'est ça en C. Bien sûr, il y a un peu d'interface entre le C et l'ASM autour.
Regarde ExtGraph de Thomas Nussbaumer.
TiMad Le 22/12/2001 à 14:57 On ne peut pas faire ce scrolling en C.. cause: la fonction roll n'a pas d'equivalence en C.. ce qui ne permet donc pas de founir un code potable (un truc du genre: >> puis << sur chaque long ce qui demanderai 30 fois plus de shift pour un scrolling pxl par pxl...)
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!
Il n'y a aucun moyen de le faire en C.
Routine d'ExtGraph:
//=============================================================================
// scrolls a specific number of lines of a LCD buffer (240x128) 1 column to the
// left (160 pixels gets shifted) ...
//
// NOTE: given buffer have to start on an even address otherwise function will
// crash !!!
//=============================================================================
void ScrollLeft160(unsigned short* buffer,unsigned short lines) {
register short* tmpbuffer = buffer;
register short tmplines = lines;
tmpbuffer += (tmplines<<4) - (tmplines);
tmplines--;
asm volatile (
"0:
sub.w #10,%0
lsl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)
roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)
dbra %1,0b"
: "=a" (tmpbuffer), "=d" (tmplines)
: "0" (tmpbuffer), "1" (tmplines));
}
Télécharge ExtGraph et le GCK de Thomas Nussbaumer.
ben oui mais cest ce quon lui avait deja propose.... et ya de lasm...
Y a deux fesses qui sont sur la plage et l'une dit à l'autre :
"Qu'est ce qu'on fait maintenant ?"
Et l'autre lui répond :
"Ben PROUT !!!"
mais comment est ce que tu scroll tes 3 background dans krypton ??? , tu les affiches les 3 avec une foncitons de sprite !?
et en fait, si c possible de scroller en pur C, la preuve >>>
(C) TM
void ScrollUpPseudoCode(unsigned char* buffer, short nr_lines) {
unsigned char* dest = buffer;
unsigned char* src = dest+30; // one line below dest
short act_line;
short i;
//-----------------------------------------------
// move nr_lines upwards ...
//-----------------------------------------------
for (act_line=0;act_line<nr_lines-1;act_line++) {
for (i=0;i<30;i++) *dest++ = *src++; // copy a complete line ...
}
//-----------------------------------------------
// clear last line
//-----------------------------------------------
for (i=0;i<30;i++) *dest++ = 0;
}
void ScrollRightPseudoCode(unsigned char* buffer, short nr_lines) {
short act_line;
short i;
unsigned char value;
unsigned char carry;
//-----------------------------------------------
// move nr_lines upwards ...
//-----------------------------------------------
for (act_line=0;act_line<nr_lines;act_line++) {
carry = 0;
for (i=0;i<30;i++) {
value = (*buffer >> 1) | carry;
if (*buffer & 0x01) carry = 0x80;
else carry = 0x00;
*buffer++ = value;
}
}
}
TiMad Le 23/12/2001 à 13:15 Bon en fait le principe est plutot simple pour un scroll differentielle, tu redessines tout a le fois: le premier plan le 2 le 3eme puis les decors et vaisseaux... cela peut semble asser lourd, mais avec de bonne routine c'est largement faisable...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!