°´ÕÕgoooglemanÀÏÐֵĽ¨Ò飬´ÓÓÅÁú2440°å×ÓµÄbootloaderѧÆð¡£Ê×ÏÈÏȽ«³ÌÐòÔËÐÐÆðÀ´£¬stepÖ´ÐУ¬¸ãÇå³þÿ²½×öÁËʲô£¬ÎªÊ²Ã´Õâô×ö¡£½«ÕûÌåµÄÁ÷³Ìѧϰһ±é¡£µÈ1¸öÔ£¬2¸öÔ£¬ÎÞÂ۶೤ʱ¼ä£¬µ±×Ô¼ºÕæÕýÕÆÎÕºó£¬ÔÙ½«ÕûÌåµÄ´úÂë¼ÓÉÏ×¢ÊÍ£¬×ö³ÉPDFÎĵµ¡£·Ö¸øºóÀ´Õߣ¬È¥°ïÖúÏñÎÒÏÖÔÚÕâÑùˮƽµÄССÄñ¡£
OK,µÚÒ»»°¿ªÊ¼£º
³ÌÐòÈë¿Úµã:
³ÌÐò×ʼÌøµ½2440init.sÎļþ£¬Ö´ÐÐÈçÏ´úÂ룺b ResetHandler Ìøתµ½¸´Î»Òì³£´¦Àí³ÌÐò¡£
ResetHandler
ldr r0,=WTCON ;watch dog disable
ldr r1,=0x0
str r1,[r0]
£¨½«¿´ÃŹ·¶¨Ê±Æ÷ÇåÁ㣬²é¿´datasheet£¬WTCONµÄµÚ0λÊÇ¿´ÃŹ·¶¨Ê±Æ÷¸´Î»Êä³öÐźſª¹Ø¡£Îª0£¬Ôò³ÌÐò¹Ø±ÕÁËS3C2440AµÄ¿´ÃŹ·¸´Î»¹¦ÄÜ¡££©
ldr r0,=INTMSK
ldr r1,=0xffffffff ;all interrupt disable
str r1,[r0]
£¨½«ÖжÏÆÁ±Î¼Ä´æÆ÷È«²¿ÖÃ1£¬½«¶ÔÓ¦µÄÖжÏÈ«²¿¹Ø±Õ¡££©
ldr r0,=INTSUBMSK
ldr r1,=0x7fff ;all sub interrupt disable `
str r1,[r0]
£¨½«×ÓÖжÏÆÁ±Î¼Ä´æÆ÷È«²»ÖÃ1£¬½«×ÓÖжÏÆÁ±Î¼Ä´æÆ÷¶ÔÓ¦µÄÖжÏÈ«²¿¹Ø±Õ¡££©
ldr r0,=LOCKTIME
ldr r1,=0xffffff
str r1,[r0]
£¨LOCKTIMEÊÇËø¶¨Ê±¼ä¼ÆÊý¼Ä´æÆ÷£¬·Ö±ðÉ趨ÁËUPLL ¶ÔÓÚUCLK µÄËø¶¨Ê±¼ä¼ÆÊýÖµºÍ
MPLL¶ÔÓÚFCLK¡¢HCLK¡¢PCLKµÄËø¶¨Ê±¼ä¼ÆÊýÖµ¡£¾ßÌå²é¿´datasheetµÚ7ÕÂʱÖÓ²¿·Ö¡££©
[ PLL_ON_START
; Added for confirm clock divide. for 2440.
; Setting value Fclk:Hclk:Pclk
ldr r0,=CLKDIVN
ldr r1,=CLKDIV_VAL ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
str r1,[r0]
(ÕâÀïÏÈÃ÷ȷһϣ¬ÔÚADSϵÄbootloader´úÂë³£¿´µ½
[
|
]
ËûÃÇÆäʵ¾ÍÏ൱ÓÚcÓïÑÔÀïÃæµÄ
Ifdef
Else
Endif)
£¨CLKDIVNÊÇʱÖÓ·ÖƵÆ÷¿ØÖƼĴæÆ÷£¬ÉèÖõÄֵΪCLKDIV_VALºê¡£ÎÒÕâÀïÉèÖõÄÊÇCLKDIV_VAL EQU 5 ;1:4:8£©
¼ÌÐøÖ´ÐУº
[ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000;R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
|
mrc p15,0,r0,c1,c0,0
bic r0,r0,#0xc0000000;R1_iA:OR:R1_nF
mcr p15,0,r0,c1,c0,0
]
ÓÉÓÚÎÒÕâÀïCLKDIV_VALµÄֵΪ5£¬ËùÒÔÖ´ÐÐ
mrc p15,0,r0,c1,c0,0 <1>
orr r0,r0,#0xc0000000;R1_nF:OR:R1_iA <2>
mcr p15,0,r0,c1,c0,0 <3>
<1> mrcÊÇд¦ÀíÆ÷ÃüÁî¡£ÓÃÓÚ¶Áȡд¦ÀíÆ÷ÖеļĴæÆ÷µÄÊý¾Ýµ½ARM´¦ÀíÆ÷µÄ¼Ä´æÆ÷ÀïÃæ¡£Õâ¾ä»°µÄÒâ˼Ӧ¸ÃÊǶÁд¦ÀíÆ÷ÖеļĴæÆ÷Êý¾Ýµ½ARM´¦ÀíÆ÷µÄr0ÀïÃæ¡£Ó¦¸ÃÊÇARM·ÃÎÊMMU£¬Ò»°ãcp15¾ÍÊÇMMU¡£ÕâÈýÌõÖ¸ÁîµÄÄ¿µÄÊǽ«MMUµÄ30£¬31λÖÃ1¡£
¹¦ÄÜÈçÏ£º31루iA bit£©Function:Asynchronous clock select (Ñ¡ÔñÒ첽ʱÖÓ)
30루nF bit£©Function: notFastBus select
ldr r0,=UPLLCON
ldr r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)
str r1,[r0]
£¨ÅäÖÃUPLL£¬Ò»°ãUPLLµÄÖµÉèÖÃΪ48MHZ£¬»òÕß96MHZ£¬ÒòΪһ°ã½ÏÄÑÕÒµ½Ò»¸öºÏÊʵÄPLLÖµ£¬ËùÒÔÊÖ²áÉÏÍƼöÁËһЩ¡£±¾³ÌÐòÖÐÓÐÈçϺ궨Ò壺#define UCLK 48000000£¨ÔÚoption.hÎļþÖУ©£¬Ôò¶ÔÓ¦ÊÖ²áÉϵÄÍƼöÖµ£¬MDIV=56,PDIV=2,SDIV=2£©
£¨ÔÚoption.incÎļþÖÐÓÖÓÐÈçÏ´úÂ룬ͨ¹ýÕâ¶Î´úÂëÒѾȷ¶¨ÁËU_MDIV£¬U_PDIV £¬U_SDIVÖµ£¬ÄÇôÉÏÃæµÄ´úÂë¾ÍÊǽ«ÏàÓ¦·ÖƵֵдÈëµ½UPLLCON¡£ÏêϸµÄÄÚÈÝÈ¥¿´Êý¾ÝÊÖ²áµÄµÚ7Õ£¬Ê±ÖÓÓëµçÔ´¹ÜÀí²¿·Ö¡££©
[ UCLK = 48000000
U_MDIV EQU 56 ;Fin=12.0MHz Fout=48MHz
U_PDIV EQU 2
[ CPU_SEL = 32440001
U_SDIV EQU 2 ; 2440A£¨ÎÒÃÇÉèÖõÄÊÇÕâ¸öÖµ£¬ÒòΪÓõÄоƬÊÇS3C2440A£©
|
U_SDIV EQU 1 ; 2440X
]
]
³ÌÐò¼ÌÐøÖ´ÐУº
nop
nop
nop
nop
nop
nop
nop
ÕâÀïÃæ²åÈëÁË7¸önop£¬ÔÚÉèÖÃÍêUPLLCON¼Ä´æÆ÷ºó£¬ÐèÒªÖÁÉÙÑÓʱ7-clocks£¬µÈ´ýÓ²¼þµÄÅäÖÃÍê³É¡£
;Configure MPLL
ldr r0,=MPLLCON
ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=16.9344MHz
str r1,[r0]
½ÓÏÂÀ´ÅäÖÃMPLLCON¼Ä´æÆ÷£¬ÓëUPLLCON²¿·ÖÏàͬ£¬ÓÅÁú2440µÄ°å×ÓÖ÷ƵÊÇ400MHZ¡£
[ FCLK = 400000000
CLKDIV_VAL EQU 5 ;1:4:8
M_MDIV EQU 92 ;Fin=12.0MHz Fout=400MHz
M_PDIV EQU 1
[ CPU_SEL = 32440001
M_SDIV EQU 1 ; 2440A
|
M_SDIV EQU 0 ; 2440X
]
]
ÔòM_MDIV=92,M_PDIV=1,M_SDIV=1.±¾³ÌÐò¶Î½«Õ⼸¸öֵдÈëµ½ÁËMPLLCON¼Ä´æÆ÷¡£
;Check if the boot is caused by the wake-up from SLEEP mode.
ldr r1,=GSTATUS2
ldr r0,[r1]
tst r0,#0x2
;In case of the wake-up from SLEEP mode, go to SLEEP_WAKEUP handler.
bne WAKEUP_SLEEP
¼ì²éÒýµ¼³ÌÐòÊÇ·ñÊÇ´ÓÐÝÃßģʽ±»»½Ðѵģ¬Èç¹ûÊǵĻ°£¬¾ÍÌøתµ½ÏàÓ¦µÄ³ÌÐò¶Î½øÐд¦Àí¡£
ÕâÀïÃæÓõ½ÁËÒ»¸ötstÖ¸Áî¡£Ê×ÏÈÁ˽âÒ»ÏÂÕâ¸öÖ¸Áî¡£
tstÊÇλ²âÊÔÖ¸Á¸ù¾Ý²âÊÔ½á¹û¸üÐÂCPSRÖеÄÏàÓ¦Ìõ¼þ±ê־룬ÒÔ±ãºóÃæµÄÖ¸Áî¸ù¾ÝÏàÓ¦µÄÌõ¼þ±êÖ¾À´ÅжÏÊÇ·ñÖ´ÐС£
ÔÙÀ´¿´GSTATUS2Õâ¸ö¼Ä´æÆ÷£¬²éѯоƬÊֲᣬGSTATUS2ÊǸ´Î»×´Ì¬¼Ä´æÆ÷£¬±¾³ÌÐò²âÊÔµÄÊÇËüµÄµÚ1루0010£©£¬¡°Boot is caused by wakeup reset in sleep mode¡±£¬Õâ¸ö±êÖ¾´ú±íÒýµ¼³ÌÐòÊÇ´ÓÐÝÃßģʽ±»»½Ðѵġ£ÓÉÓÚÎÒÕâÀï²¢²»ÊÇ´ÓÐÝÃßģʽ»½Ðѵģ¬ËùÒÔ³ÌÐòûÓÐÌøת£¬¼ÌÐø˳ÐòÖ´ÐС£
;Set memory control registers
;ldr r0,=SMRDATA
adrl r0, SMRDATA ;be careful!, hzh
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, #52 ;End address of SMRDATA
0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %B0
mov r0, #&1000
1
subs r0, r0, #1
bne %B1
ÕâÀïÊÇÉèÖô洢Æ÷¿ØÖƼĴæÆ÷¡£Ê×ÏÈ»¹ÊÇÁ˽âÒ»ÏÂadrlÖ¸ÁËüÊÇÖеȷ¶Î§µÄµØÖ·¶ÁÈ¡Ö¸Á±ÈADRαָÁî¿ÉÒÔ¶ÁÈ¡¸ü´ó·¶Î§µÄµØÖ·¡£SMRDATAÊÇÒ»¸ö±êºÅ£¬½«Õâ¸ö±êºÅ´¦µÄµØÖ·¼ÓÔص½ÁËr0¡£BWSCONÊÇ×ÜÏß¿í¶ÈÓëµÈ´ý¿ØÖƼĴæÆ÷£¬½«Õâ¸ö¼Ä´æÆ÷µÄµØÖ·¼ÓÔص½ÁËr1¡£È»ºó½«SMRDATA+52µØÖ·Öµ¼ÓÔص½r2£¬Õâ¸öµØÖ·ÊÇSMRDATAµÄβµØÖ·¡£ÔÚSMRDATAµØÖ·´¦´æ·ÅµÄÊÇÓÃDCDÖ¸Áî·ÖÅäµÄÒ»¶¨´óСµÄ×ÖÄÚ´æµ¥Ôª£¬Õâ¶ÎÄÚ´æ´æ·ÅµÄ¾ÍÊÇÓë´æ´¢Æ÷Ïà¹ØµÄ¿ØÖƼĴæÆ÷µÄÅäÖòÎÊý¡£ÔÙÀ´¿´BWSCONµÄµØÖ·ÊÇ0x48000000£¬È»ºóÊÇBANKCON0£¨Bank0 ¿ØÖƼĴæÆ÷£©µÄµØÖ·ÊÇ0x48000004£¬BANKCON1£¨Bank0 ¿ØÖƼĴæÆ÷£©µÄµØÖ·ÊÇ0x48000008£¬ÒÔ´ËÀàÍÆ£¬Ò»Ö±µ½BANKCON7µÄµØÖ·ÊÇ0x48000020¡£½Ó×ÅÊÇREFRESH£¨SDRAM ˢпØÖƼĴ棩µØÖ·ÊÇ£º0x48000024£¬BANKSIZE£¨¿Éµ÷µÄbank ´óС¼Ä´æÆ÷£©µØÖ·ÊÇ£º0x48000028£¬MRSRB6£¨Ä£Ê½¼Ä´æÆ÷¼¯¼Ä´æÆ÷bank6£©µØÖ·ÊÇ£º0x4800002C£¬MRSRB7£¨Ä£Ê½¼Ä´æÆ÷¼¯¼Ä´æÆ÷bank7£©µØÖ·ÊÇ£º0x48000030¡£ÉÏÃæÕâЩ¼Ä´æÆ÷¶¼ÊÇ´æ´¢Æ÷¿ØÖƵÄÏà¹Ø¼Ä´æÆ÷£¬µØÖ·È«²¿Á¬Ðø£¬Ïà²î0x04. ÄÇôÏÖÔÚÖªµÀÁËΪʲôldr r3, [r0], #4£¬str r3, [r1], #4£¬ÕâÁ½¶Î´úÂ룬ÏȽ«SMRDATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;; When EINT0 is pressed, Clear SDRAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; check if EIN0 button is pressed
ldr r0,=GPFCON
ldr r1,=0x0
str r1,[r0]
ldr r0,=GPFUP
ldr r1,=0xff
str r1,[r0]
ldr r1,=GPFDAT
ldr r0,[r1]
bic r0,r0,#(0x1e<<1) ; bit clear
tst r0,#0x1
bne %F1
; Clear SDRAM Start
ldr r0,=GPFCON
ldr r1,=0x55aa
str r1,[r0]
; ldr r0,=GPFUP
; ldr r1,=0xff
; str r1,[r0]
ldr r0,=GPFDAT
ldr r1,=0x0
str r1,[r0] ;LED=****
mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0
ldr r9,=0x4000000 ;64MB
ldr r0,=0x30000000
0
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
;Clear SDRAM End
1
;Initialize stacks
bl InitStacks
½ÓÏÂÀ´ÊÇÕâ¶Î±È½Ï³¤µÄ´úÂ룬×ÜÌåµÄ×÷ÓþÍÊÇ£¬Èç¹û EINT0 ²úÉú(ÕâÖжϾÍÊÇÎÒÃÇ°´¼ü²úÉúµÄ), ¾ÍÇå³ýSDRAM¡£·ÖÎö֮ǰÏȸãÇåÒ»¸ö֪ʶµã£¬Õâ¶Î´úÂëÀïÃæÓÐÒ»¸öbne %B0£¬»¹ÓÐÒ»¸öbne %F1£¬ÕâÁ½¾ä´úÂëÊÇʲôÒâ˼ÄØ£¿%B´ú±íÏòÇ°ËÑË÷£¬%F´ú±íÏòºóËÑË÷£¬¡°0¡±¡°1¡±Ö»ÊDZêºÅ¶øÒÑ¡£Ò²¾ÍÊDz»µÈÓÚÔòÏòÇ°ºóÕßÏòºóÌøתµ½±êºÅ0»òÕß±êºÅ1µÄλÖá£
ldr r0,=GPFCON
ldr r1,=0x0
str r1,[r0]
GPF0-GPF7¶¼±»ÉèÖóÉÁËinput¡£
ldr r0,=GPFUP
ldr r1,=0xff
str r1,[r0]
GPF0-GPF7¶¼±»½ûÖ¹ÉÏÀ¡£
ldr r1,=GPFDAT
ldr r0,[r1]
bic r0,r0,#(0x1e<<1) ; bit clear
tst r0,#0x1
bne %F1
Õâ¶Î´úÂëÔòÊǼì²âEINT0µÄÊäÈë¡£ÓÐÊäÈëÔòÇå¿ÕSDRAM£¬Ã»ÊäÈë¾ÍÖ±½ÓÏòÏÂÌøµ½±êºÅ1
´¦¡£ÔÙÀ´¿´bicÖ¸Áî¡£¾Ù¸öÀý×Ó£¬BIC R1,R2,R3ÔòÊǽ«R3µÄ·´ÂëºÍR2Âß¼Ó룬½á¹û±£´æµ½R1¡£ÕâÀïΪʲôÊÇ0x1e£¬ÎÒÒ²²»ÊǺÜÀí½â¡£·´Õý0x1eµ¹ÊÇ¿ÉÒÔ¡£Ò»»áµ½CSDNÈ¥·¢Ìû¡£ÅªÇå³þÁË£¬ÔÙ²¹³ä½øÀ´¡£tst r0,#0x1Õâ¶ÎÖ¸Áî¾ÍÊDzâÊÔ×îµÍλÊÇ·ñΪ0.
; Clear SDRAM Start
ldr r0,=GPFCON
ldr r1,=0x55aa
str r1,[r0]
; ldr r0,=GPFUP
; ldr r1,=0xff
; str r1,[r0]
ldr r0,=GPFDAT
ldr r1,=0x0
str r1,[r0] ;LED=****
mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0
ldr r9,=0x4000000 ;64MB
ldr r0,=0x30000000
0
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
;Clear SDRAM End
Õâ¶Î´úÂëÔòÊÇÇå¿ÕSDRAM¡£
ldr r0,=GPFCON
ldr r1,=0x55aa
str r1,[r0]
GPF0-GPF3ÉèÖÃΪÖжÏEINT0-EINT3£¬GPF4-GPF7ÉèÖÃΪÊä³ö¡£
; ldr r0,=GPFUP
; ldr r1,=0xff
; str r1,[r0]
È«²¿½ûÖ¹ÉÏÀ¡£
ldr r0,=GPFDAT
ldr r1,=0x0
str r1,[r0]
½«GPFDATÈ«²¿ÖÃ0.GPF4-GPF7Êä³öµÍµçƽ¡£
mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0
½«r1-r8¼Ä´æÆ÷ÄÚÈÝÉèÖÃΪ0£¬ÓÃÀ´×öÇå¿ÕSDRAMÓõġ£
ldr r9,=0x4000000 ;64MB
ldr r0,=0x30000000
0
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
r9ÖÐ×°ÈëµÄÖµÊÇSDRAMµÄÈÝÁ¿´óС£¬r0ÖÐ×°ÈëµÄÖµÊÇSDRAMµÄÊ×µØÖ·¡£
0
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
Õâ¶Î´úÂëÓÃÀ´Ñ»·ÇåÁ㣬ֱµ½SDRAMÈ«²¿Çå¿ÕΪֹ¡£
1
;Initialize stacks
bl InitStacks
µ±È»Èç¹ûÔÚ´úÂëÇ°¶Î£¬Ã»Óа´Ï°´¼üµÄ»°£¬¾ÍÖ±½ÓÌøµ½±êºÅ1´¦µÄÕâ¶Î´úÂ룬Ìøתµ½³õʼ»¯¶ÑÕ»µÄµØ·½ÁË¡£ÊÂʵÉÏ£¬»ù±¾²»»áÔÚ´Ë´¦°´Ï°´¼ü£¬ËùÒÔÇå¿ÕSDRAMµÄ´úÂë»ù±¾²»»áÖ´ÐС£
½Ó×ÅÏòÏ¿´£º
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack ; UndefStack=0x33FF_5C00
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack ; AbortStack=0x33FF_6000
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack ; IRQStack=0x33FF_7000
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack ; FIQStack=0x33FF_8000
bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack ; SVCStack=0x33FF_5800
Õâ¶Î´úÂëÔòÊÇ·Ö±ð³õʼ»¯¸÷ÖÖģʽµÄ¶ÑÕ»¡£ÒÔ³õʼ»¯Î´¶¨Òåģʽ¶ÑջΪÀý¡£ÏȽ«CPSR¶ÁÈ¡µ½r0,È»ºóÀûÓÃbicÖ¸Á½«¿ØÖÆģʽµÄµÍ5λÇåÁã¡£Ö®ºóÉèÖ㨻òÉÏ£©ÎªÎ´¶¨Òåģʽ£¬½ûÖ¹Öжϣ¬½«½á¹û±£´æµ½r1,È»ºó½«r1±£´æµ½CPSR¡£½Ó×Åldr sp,=UndefStack ÉèÖöÑÕ»¡£¶ÑÕ»µÄµØÖ·Öµ£¬ÎªUndefStackºê£¬¾ßÌåÊǶàÉٲ鿴ºê¶¨Òå¼´¿É¡£³ÌÐò×¢ÊÍÖÐÒ²ÒѾ±ê×¢ÁË¡£
ÐèÒªÖªµÀorr r1,r0,#UNDEFMODE|NOINT£¬ÕâÌõÖ¸ÁîÖ´ÐÐÖ®ºó£¬r0¼Ä´æÆ÷ÖеÄÖµÊÇÎޱ仯µÄ£¬ËùÒÔÒÔºó³õʼ»¯ÆäËû¶ÑÕ»µÄʱºò£¬¿ÉÒÔ½Ó×ÅÄÃr0À´Óᣳõʼ»¯ÆäËûģʽ¶ÑÕ»£¬Óë´ËÏàͬ£¬²»ÔÙ׸Êö¡£
mov pc,lr ³ÌÐòÌøת»ØÈ¥¡££¨×ª£©
txgc_wm ÓÚ 2011-03-27 00:13:51·¢±í:
²»´í