CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): parsec ( 먼 소 류 )
날 짜 (Date): 2003년 2월  6일 목요일 오후 08시 20분 38초
제 목(Title): [i*5/5] -- 일기보드에서...



C code:
-----------------------------------------
void draw_image( const int START_X, const int START_Y, const int END_X, const in
t END_Y )
{
        int i, j;
        word data16; //Remove warning  , r_data, g_data, b_data;
        if(!is_mainlcd_onoff)
                return;
        if(END_Y == 14)  //annunciatorbar만 그리기위해 들어옴. 자바 실행중에 ann
        {
        LcdMainWriteCmd(RXSTART);
        LcdMainWriteData(0);
        LcdMainWriteCmd(RXEND);
        LcdMainWriteData(119);
        LcdMainWriteCmd(RYSTART);
        LcdMainWriteData(0);
        LcdMainWriteCmd(RYEND);
        LcdMainWriteData(13);
        LcdMainWriteCmd(DISP_DATA);

                for(j=0; j<14; j++)
                {
                        for(i=0; i<120; i++)
                        {
                                if(lcd_color_depth == MAIN_COLOR_64K)
                                {
                                        LcdMainWriteData(ezUI_annunbar_image[j][
i]);//ezUI_image2[j][i]); 
                                }
                                else if(lcd_color_depth == MAIN_COLOR_256K)
                                {
                                        LcdMainWriteData(ezUI_annunbar_image[j][
                                        LcdMainWriteData(ezUI_annunbar_image[j][
i] & 0xFFFF);//ezUI_image2[j][i] & 0xFFFF);
                                }
                        }
                }

        }
        else{//END_Y!=14  UI전체 screen update

        // (0.0)~(119,159)
        LcdMainWriteCmd(RXSTART);
        LcdMainWriteData(0);
        LcdMainWriteCmd(RXEND);
        LcdMainWriteData(119);
        LcdMainWriteCmd(RYSTART);
        LcdMainWriteData(0);
        LcdMainWriteCmd(RYEND);
        LcdMainWriteData(159);
        LcdMainWriteCmd(DISP_DATA);
        if(lcd_color_depth == MAIN_COLOR_64K)
        {
                for(j=0;j<160;j++)
                {
                        for(i=0;i<120;i++)
                        {
                                data16 = ezUI_image2[j][i*5/5];
/* 더미 연산을 넣는 경우 요 위치에 넣음. --> */
/* 데이타 출력 부분: */         LcdMainWriteData(data16);
                        }
                }
        }
        else if(lcd_color_depth == MAIN_COLOR_256K)
        {
                for(j=0;j<160;j++)
                {
                        for(i=0;i<120;i++)
                        {
                                data16 = ezUI_image2[j][i] & 0x0003;    // R5-R4
                                LcdMainWriteData(data16);

                                data16 = ezUI_image2[j][i] & 0xFFFF;    // R3-B0
                                LcdMainWriteData(data16);
                        }
                }
        }
        } //END_Y!=14
        LcdMainWriteCmd(NOP);
}
-------------- C 코드는 여기까지 --------------

해당 부분 어셈블러 코드:
(인덱스에 연산하는 부분은 |L1.308|)
-------------------------------
; generated by ARM C Compiler, ADS1.0.1 [Build 187]
        CODE32

        AREA ||C$$codeseg||, CODE, READONLY

||x$codeseg|| DATA

draw_image PROC
        LDR      a1,|L1.436|
        STMDB    sp!,{v1-v5,lr}
        FRAME    SAVE r14, -4
        FRAME    SAVE r8, -8
        FRAME    SAVE r7, -12
        FRAME    SAVE r6, -16
        FRAME    SAVE r5, -20
        FRAME    SAVE r4, -24
        FRAME    ADDRESS r13, 24
        LDRB     a1,[a1,#0]
        CMP      a1,#0
        BEQ      |L1.428|
        MOV      v1,a4
        MOV      v4,#0x2000000
        CMP      v1,#0xe
        MOV      a4,#8
        MOV      a2,#9
        MOV      a3,#0x77
        MOV      a1,#7
        MOV      ip,#0
        LDR      lr,|L1.440|
        BNE      |L1.208|
        MOV      v2,v4
        STRH     a1,[v4,#0]
        STRH     ip,[v2,#2]
        STRH     a4,[v2,#0]
        STRH     a3,[v2,#2]
        STRH     a2,[v2,#0]
        STRH     ip,[v2,#2]
        MOV      a1,#0xa
        STRH     a1,[v2,#0]
        MOV      a1,#0xd
        STRH     a1,[v2,#2]
        MOV      a1,#5
        STRH     a1,[v2,#0]
        LDR      v1,|L1.444|
        MOV      a3,#0
|L1.120|
        RSB      a2,a3,a3,LSL #4
        ADD      a2,v1,a2,LSL #4
        MOV      a1,#0
|L1.132|
        LDRB     a4,[lr,#0]
        CMP      a4,#1
        MOVEQ    a4,a1,LSL #1
        BEQ      |L1.172|
        CMP      a4,#2
        BNE      |L1.180|
        MOV      a4,a1,LSL #1
        LDRH     ip,[a2,a4]
        AND      ip,ip,#3
        STRH     ip,[v2,#2]
|L1.172|
        LDRH     a4,[a2,a4]
        STRH     a4,[v2,#2]
|L1.180|
        ADD      a1,a1,#1
        CMP      a1,#0x78
        BLT      |L1.132|
        ADD      a3,a3,#1
        CMP      a3,#0xe
        BLT      |L1.120|
        B        |L1.420|
|L1.208|
        STRH     a1,[v4,#0]
        STRH     ip,[v4,#2]
        STRH     a4,[v4,#0]
        STRH     a3,[v4,#2]
        STRH     a2,[v4,#0]
        STRH     ip,[v4,#2]
        MOV      a1,#0xa
        STRH     a1,[v4,#0]
        MOV      a1,#0x9f
        STRH     a1,[v4,#2]
        MOV      a1,#5
        STRH     a1,[v4,#0]
        LDRB     a1,[lr,#0]
        LDR      v5,|L1.448|
        CMP      a1,#1
        MOVEQ    v2,#0
        BEQ      |L1.296|
        CMP      a1,#2
        BNE      |L1.420|
        MOV      a3,#0
        MOV      lr,v4
        B        |L1.360|
|L1.296|
        RSB      a1,v2,v2,LSL #4
        ADD      v3,v5,a1,LSL #4
        MOV      v1,#0
|L1.308|
        ADD      a2,v1,v1,LSL #2
        MOV      a1,#5
        BL       __rt_sdiv 
        MOV      a1,a1,LSL #1
        LDRH     a1,[v3,a1]
        STRH     a1,[v4,#2]
        ADD      v1,v1,#1
        CMP      v1,#0x78
        BLT      |L1.308|
        ADD      v2,v2,#1
        CMP      v2,#0xa0
        BLT      |L1.296|
        B        |L1.420|
|L1.360|
        RSB      a2,a3,a3,LSL #4
        ADD      a2,v5,a2,LSL #4
        MOV      a1,#0
|L1.372|
        MOV      a4,a1,LSL #1
        LDRH     ip,[a2,a4]
        AND      ip,ip,#3
        STRH     ip,[lr,#2]
        LDRH     a4,[a2,a4]
        STRH     a4,[lr,#2]
        ADD      a1,a1,#1
        CMP      a1,#0x78
        BLT      |L1.372|
        ADD      a3,a3,#1
        CMP      a3,#0xa0
        BLT      |L1.360|
|L1.420|
        MOV      a1,#0xff
        STRH     a1,[v4,#0]
|L1.428|
        LDMIA    sp!,{v1-v5,lr}
        FRAME    STATE REMEMBER
        FRAME    RESTORE r4
        FRAME    RESTORE r5
        FRAME    RESTORE r6
        FRAME    RESTORE r7
        FRAME    RESTORE r8
        FRAME    RESTORE r14
        FRAME    ADDRESS r13, 0
        BX       lr
|L1.436|
        FRAME    STATE RESTORE
        DCD      is_mainlcd_onoff
|L1.440|
        DCD      lcd_color_depth
|L1.444|
        DCD      ezUI_annunbar_image
|L1.448|
        DCD      ezUI_image2
        KEEP     draw_image
        ENDP

----------- 어셈블러 코드는 여기까지---------------

                                            ... May the source be with you!
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.