no , i'm using a pointer into the the actual frame buffer of the display so i can't hide any data.Do you have a non visible are in the buffer?
its vital that -
the width is in whole bytes ie for a 128x64 display thats 16 bytes
if i had a hidden byte each end then it would be 18
if you are short or long then the data will appear to move up or down at the wrap around
this may be clearer and can be applicable anywhere
note bank dependence has been eliminated
ps window is rotate_l only . not done rr yetCode:width con 128 ;display buffer width and height con 64 ; height bcnt VAR BYTE dcnt VAR BYTE WindowWidth CON 5 ;window is 5 bytes wide scrolling window windowHeight CON 8 ;window is 8 bits high " " @windowPad = _width/8 - _WindowWidth ;number of bytes to get to start of next row @dspbuff = _fbr+16*8+5 ;window start address row8 byte 5 ; fbr is the display frame buffer rotate_r: ' pic18 asm banksel _bcnt ;ROW movlw _windowHeight movwf _bcnt movlw high (dspbuff) ;BOTTOM OF BUFFER movwf FSR0H movlw low (dspbuff) movwf FSR0L movlw low((_WindowWidth )*_windowHeight-1) ;TOP OF BUFFER ADDWF FSR0L movlw high((_WindowWidth )*_windowHeight-1) ADDWFC FSR0H MOVLW _WindowWidth RROW banksel _dcnt movwf _dcnt ;display bcf STATUS, C Rcol rrcf POSTDEC0 ,f ;PER display DECFSZ _dcnt ,F BRA Rcol BNC RBNC bsf PLUSW0,7 ;max would be 127 to use plusw RBNC banksel _bcnt DECFSZ _bcnt ,F BRA RROW ;banksel 0 return endasm rotate_l: ' pic18 asm banksel _bcnt ;ROW movlw _windowHeight movwf _bcnt lfsr 0, dspbuff LROW MOVLW _WindowWidth banksel _dcnt movwf _dcnt ; comf WREG incf WREG bcf STATUS, C Lcol rlcf POSTINC0 ,f ; DECFSZ _dcnt ,F BRA Lcol BNC LBNC bsf PLUSW0,0 ;max would be 127 to use plusw LBNC movlw windowPad addwf FSR0L ,f bnc Lrnc incf FSR0H ,f Lrnc banksel _bcnt DECFSZ _bcnt ,F BRA LROW banksel 0 return endasm




Bookmarks