Files
FireBee_Setup/tools/vision/LDV/SRC/PIXEL/PIXEL.S
2022-11-14 10:05:42 +01:00

75 lines
1.8 KiB
ArmAsm

.EXPORT Pixelize16
MACRO GET_FRGB16
MOVE.W (A0),D0
MOVE.W D0,D1
ROL.W #5,D1
ANDI.W #$1F,D1 ; D1.W = Composante ROUGE
MOVE.W D0,D2
LSR.W #5,D2
ANDI.W #$3F,D2 ; D2.W = Composante VERTE (0...63)
MOVE.W D0,D3
ANDI.W #$1F,D3 ; D3.W = Composante BLEU (0...31)
ENDM
MACRO SET_FRGB16
MOVE.W D3,D0 ; D3 = Composante Bleu
LSL.W #5,D2
ADD.W D2,D0 ; D0 += Composante Verte
ROR.W #5,D1
ADD.W D1,D0 ; D0 += Composante Rouge
ENDM
*unsigned short Pixelize16(unsigned short *pt, long nb_lpts, short powerx, short powery)
*
*{
* unsigned long rsum = 0 ;
* unsigned long gsum = 0 ;
* unsigned long bsum = 0 ;
* unsigned long p2 = powerx * powery ;
* unsigned short val, pixel, *ptu ;
* unsigned short red, green, blue ;
* short x, y ;
*
* for ( y = 0; y < powery; y++ )
* {
* ptu = pt + y * nb_lpts ;
* for ( x = 0; x < powerx; x++, ptu++ )
* {
* val = *ptu ;
* red = val >> 11 ; /* Sur 5 bits */
* green = ( val >> 5 ) & 0x3F ; /* Sur 6 bits */
* blue = val & 0x1F ; /* Sur 5 bits */
* rsum += (unsigned long) red ;
* gsum += (unsigned long) green ;
* bsum += (unsigned long) blue ;
* }
* }
*
* red = (unsigned short) (rsum / p2) ;
* green = (unsigned short) (gsum / p2) ;
* blue = (unsigned short) (bsum / p2) ;
* pixel = RVB16( red, green, blue ) ;
*
* return( pixel ) ;
}
* unsigned short Pixelize16(unsigned short *pt, long nb_lpts, long power)
* D0 A0 D0 D1
Pixelize16:
MOVEM.L D0-D7/A0-A6,-(SP)
MOVE.L D0,D4
MOVE.L D1,D5
MOVE.L A0,A1
GET_FRGB16
MOVEM.L (SP)+,D0-D7/A0-A6 ; Restauration du contexte