📄 lcd_gbk.txt
字号:
000268 2e737973 DCB ".sys"
00026c 00000000 DCB "\0\0\0\0"
|L1.624|
000270 00000000 DCD FirstDataSector
|L1.628|
000274 00000000 DCD SectorsPerClust
|L1.632|
000278 00000000 DCD BytesPerSector
|L1.636|
00027c 00000000 DCD FAT_ReadSector
|L1.640|
000280 00000000 DCD ||.bss||
ENDP
Read_One_GBK16 PROC
;;;99 uint8 Read_One_GBK16(uint8 *ch)
;;;100 {
000284 e92d4010 PUSH {r4,lr}
;;;101 uint16 temp1;
;;;102 uint8 temp2;
;;;103 uint16 sector_offset;//扇区偏移
;;;104 uint16 byte_offset;//字节偏移
;;;105 uint8 buffer[512];
;;;106 temp1=*ch;
000288 e5d01000 LDRB r1,[r0,#0]
;;;107 temp2=*(ch+1);
00028c e5d00001 LDRB r0,[r0,#1]
000290 e24ddc02 SUB sp,sp,#0x200 ;100
;;;108 if(temp1<0x81||temp2<0x40)return 1;//不合法的汉字
000294 e3510081 CMP r1,#0x81
000298 23500040 CMPCS r0,#0x40
00029c 3a00001b BCC |L1.784|
;;;109 temp1-=0x81;//的到类似于2312的区号
0002a0 e2411081 SUB r1,r1,#0x81
0002a4 e1a01801 LSL r1,r1,#16
0002a8 e1a01821 LSR r1,r1,#16
;;;110 temp2-=0x40;//位号
0002ac e2400040 SUB r0,r0,#0x40
;;;111 temp1*=192;//xx7f and xxff are included
0002b0 e0811081 ADD r1,r1,r1,LSL #1
0002b4 e3e028ff MVN r2,#0xff0000
0002b8 e20000ff AND r0,r0,#0xff ;110
0002bc e0021301 AND r1,r2,r1,LSL #6
;;;112 temp1+=temp2;//得到偏移
0002c0 e0800001 ADD r0,r0,r1
;;;113 //temp1*=24;
;;;114 sector_offset = temp1/(BytesPerSector/32);//算出要读哪个扇区
0002c4 e51f1054 LDR r1,|L1.632|
0002c8 e3c00801 BIC r0,r0,#0x10000 ;112
0002cc e1d110b0 LDRH r1,[r1,#0] ; BytesPerSector
0002d0 e1a012a1 LSR r1,r1,#5
0002d4 ebfffffe BL __aeabi_uidivmod
;;;115 byte_offset = (temp1%(BytesPerSector/32))*32;//算出要读扇区的哪个字节
0002d8 e3e0281f MVN r2,#0x1f0000
0002dc e0024281 AND r4,r2,r1,LSL #5
;;;116 if(FAT_ReadSector(GBK16 + sector_offset,buffer))return 1;//读要读的扇区
0002e0 e51f108c LDR r1,|L1.604|
0002e4 e51f2070 LDR r2,|L1.636|
0002e8 e5911004 LDR r1,[r1,#4] ; GBK16
0002ec e5922000 LDR r2,[r2,#0] ; FAT_ReadSector
0002f0 e0800001 ADD r0,r0,r1
0002f4 e28d1000 ADD r1,sp,#0
0002f8 e1a0e00f MOV lr,pc
0002fc e12fff12 BX r2
000300 e3500000 CMP r0,#0
000304 051f108c LDREQ r1,|L1.640|
000308 028d2000 ADDEQ r2,sp,#0
00030c 0a000003 BEQ |L1.800|
|L1.784|
000310 e3a00001 MOV r0,#1
|L1.788|
000314 e28ddc02 ADD sp,sp,#0x200
000318 e8bd4010 POP {r4,lr}
;;;117 for(temp2 = 0,temp1 = byte_offset;temp2<32;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];//复制要复制的数据
;;;118 return 0;
;;;119 }
00031c e12fff1e BX lr
|L1.800|
000320 e7d23004 LDRB r3,[r2,r4] ;117
000324 e7c13000 STRB r3,[r1,r0] ;117
000328 e2800001 ADD r0,r0,#1 ;117
00032c e20000ff AND r0,r0,#0xff ;117
000330 e2843001 ADD r3,r4,#1 ;117
000334 e3500020 CMP r0,#0x20 ;117
000338 e3c34801 BIC r4,r3,#0x10000 ;117
00033c 3afffff7 BCC |L1.800|
000340 e3a00000 MOV r0,#0 ;118
000344 eafffff2 B |L1.788|
;;;120
ENDP
Dis_GBK12_fast PROC
;;;121 uint8 Dis_GBK12_fast(uint16 x,uint16 y,uint8 *ch)
;;;122 {
000348 e92d4070 PUSH {r4-r6,lr}
00034c e1a04000 MOV r4,r0
000350 e1a00001 MOV r0,r1
000354 e1a06002 MOV r6,r2
;;;123 uint16 i,j;
;;;124 uint8 temp;
;;;125
;;;126 extern uint8 disBuf[504];
;;;127 // disBuf[(y/8)*84 + x +i] = temp;
;;;128 j = y/12;
000358 e3a0100c MOV r1,#0xc
00035c ebfffffe BL __aeabi_uidivmod
000360 e1a05000 MOV r5,r0
;;;129 if(Read_One_GBK12(ch))return 1;
000364 e1a00006 MOV r0,r6
000368 ebfffffe BL Read_One_GBK12
00036c e3500000 CMP r0,#0
000370 13a00001 MOVNE r0,#1
000374 1a000077 BNE |L1.1368|
000378 e51f3100 LDR r3,|L1.640|
00037c e59f2384 LDR r2,|L1.1800|
;;;130
;;;131 if(j==0)
000380 e3550000 CMP r5,#0
000384 e284e054 ADD lr,r4,#0x54 ;129
000388 e2841060 ADD r1,r4,#0x60 ;129
00038c 1a000016 BNE |L1.1004|
;;;132 {
;;;133 for(i=x;i<x+12;i++)
000390 e1a00004 MOV r0,r4
000394 e284500c ADD r5,r4,#0xc
|L1.920|
000398 e1500005 CMP r0,r5
;;;134 {
;;;135 temp = GBK_Buffer[i-x];
00039c 3040c004 SUBCC r12,r0,r4
0003a0 37d3c00c LDRBCC r12,[r3,r12]
;;;136 disBuf[i] = temp;
0003a4 37c2c000 STRBCC r12,[r2,r0]
0003a8 32800001 ADDCC r0,r0,#1 ;133
0003ac 33c00801 BICCC r0,r0,#0x10000 ;133
0003b0 3afffff8 BCC |L1.920|
;;;137 }
;;;138 for(i=x+84;i<x+84+12;i++)
0003b4 e3ce0801 BIC r0,lr,#0x10000
|L1.952|
0003b8 e1500001 CMP r0,r1
0003bc 2a000064 BCS |L1.1364|
;;;139 {
;;;140 temp = GBK_Buffer[i-x-84+12];
0003c0 e040c004 SUB r12,r0,r4
0003c4 e08cc003 ADD r12,r12,r3
0003c8 e55ce048 LDRB lr,[r12,#-0x48]
;;;141 disBuf[i] &= 0xf0;
0003cc e7d2c000 LDRB r12,[r2,r0]
;;;142 disBuf[i] |= (temp & 0x0f);
0003d0 e20ee00f AND lr,lr,#0xf
0003d4 e20cc0f0 AND r12,r12,#0xf0 ;141
0003d8 e18cc00e ORR r12,r12,lr
0003dc e7c2c000 STRB r12,[r2,r0]
0003e0 e2800001 ADD r0,r0,#1 ;138
0003e4 e3c00801 BIC r0,r0,#0x10000 ;138
0003e8 eafffff2 B |L1.952|
|L1.1004|
;;;143 }
;;;144 }
;;;145 else if(j==1)
0003ec e3550001 CMP r5,#1
0003f0 e3a060f0 MOV r6,#0xf0 ;138
0003f4 1a00001b BNE |L1.1128|
;;;146 {
;;;147 for(i=x+84;i<x+84+12;i++)
0003f8 e3ce0801 BIC r0,lr,#0x10000
|L1.1020|
0003fc e1500001 CMP r0,r1
;;;148 {
;;;149 temp = GBK_Buffer[i-x-84];
000400 3040c004 SUBCC r12,r0,r4
000404 308cc003 ADDCC r12,r12,r3
000408 355ce054 LDRBCC lr,[r12,#-0x54]
;;;150 disBuf[i] &= 0x0f;
00040c 37d2c000 LDRBCC r12,[r2,r0]
;;;151 disBuf[i] |= ((temp<<4) & 0xf0);
000410 3006e20e ANDCC lr,r6,lr,LSL #4
000414 320cc00f ANDCC r12,r12,#0xf ;150
000418 318cc00e ORRCC r12,r12,lr
00041c 37c2c000 STRBCC r12,[r2,r0]
000420 32800001 ADDCC r0,r0,#1 ;147
000424 33c00801 BICCC r0,r0,#0x10000 ;147
000428 3afffff3 BCC |L1.1020|
;;;152 }
;;;153 for(i=x+168;i<x+168+12;i++)
00042c e28400a8 ADD r0,r4,#0xa8
000430 e3c00801 BIC r0,r0,#0x10000
000434 e284c0b4 ADD r12,r4,#0xb4
|L1.1080|
000438 e150000c CMP r0,r12
00043c 2a000044 BCS |L1.1364|
;;;154 {
;;;155 temp = GBK_Buffer[i-x-168]>>4;
000440 e0401004 SUB r1,r0,r4
000444 e0811003 ADD r1,r1,r3
000448 e55150a8 LDRB r5,[r1,#-0xa8]
;;;156 temp += GBK_Buffer[i-x+12-168]<<4;
00044c e551e09c LDRB lr,[r1,#-0x9c]
000450 e1a01225 LSR r1,r5,#4 ;155
000454 e081120e ADD r1,r1,lr,LSL #4
;;;157 disBuf[i] = temp;
000458 e7c21000 STRB r1,[r2,r0]
00045c e2800001 ADD r0,r0,#1 ;153
000460 e3c00801 BIC r0,r0,#0x10000 ;153
000464 eafffff3 B |L1.1080|
|L1.1128|
;;;158 }
;;;159 }
;;;160 else if(j==2)
000468 e3550002 CMP r5,#2
00046c e284ee15 ADD lr,r4,#0x150 ;153
000470 e2841f57 ADD r1,r4,#0x15c ;153
000474 1a000018 BNE |L1.1244|
;;;161 {
;;;162 for(i=x+252;i<x+12+252;i++)
000478 e28400fc ADD r0,r4,#0xfc
00047c e3c00801 BIC r0,r0,#0x10000
000480 e2845f42 ADD r5,r4,#0x108
|L1.1156|
000484 e1500005 CMP r0,r5
;;;163 {
;;;164 temp = GBK_Buffer[i-x-252];
000488 3040c004 SUBCC r12,r0,r4
00048c 308cc003 ADDCC r12,r12,r3
000490 355cc0fc LDRBCC r12,[r12,#-0xfc]
;;;165 disBuf[i] = temp;
000494 37c2c000 STRBCC r12,[r2,r0]
000498 32800001 ADDCC r0,r0,#1 ;162
00049c 33c00801 BICCC r0,r0,#0x10000 ;162
0004a0 3afffff7 BCC |L1.1156|
;;;166 }
;;;167 for(i=x+336;i<x+336+12;i++)
0004a4 e3ce0801 BIC r0,lr,#0x10000
|L1.1192|
0004a8 e1500001 CMP r0,r1
0004ac 2a000028 BCS |L1.1364|
;;;168 {
;;;169 temp = GBK_Buffer[i-x+12-336];
0004b0 e040c004 SUB r12,r0,r4
0004b4 e08cc003 ADD r12,r12,r3
0004b8 e55ce144 LDRB lr,[r12,#-0x144]
;;;170 disBuf[i] &= 0xf0;
0004bc e7d2c000 LDRB r12,[r2,r0]
;;;171 disBuf[i] |= (temp & 0x0f);
0004c0 e20ee00f AND lr,lr,#0xf
0004c4 e20cc0f0 AND r12,r12,#0xf0 ;170
0004c8 e18cc00e ORR r12,r12,lr
0004cc e7c2c000 STRB r12,[r2,r0]
0004d0 e2800001 ADD r0,r0,#1 ;167
0004d4 e3c00801 BIC r0,r0,#0x10000 ;167
0004d8 eafffff2 B |L1.1192|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -