📄 enhanced_unicode.s01
字号:
NAME enhanced_unicode(17)
RSEG MO_EH_UNI(0)
RSEG MOC_EH_UNI(0)
PUBLIC OneUniToChar
EXTERN SD_FClose
EXTERN SD_FOpen
EXTERN SD_FRead
EXTERN SD_FSeek
PUBLIC ftbl_B5
PUBLIC ftbl_BC
PUBLIC ftbl_GB
PUBLIC ftbl_JP
PUBLIC ftbl_KR
PUBLIC ftbl_LA
PUBLIC ftbl_RS
PUBLIC ftbl_XL
PUBLIC unitochar
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_CMP_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG MO_EH_UNI
OneUniToChar:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * enhanced module impletementation
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: enhanced_unicode.c,v 1.12.8.2 2004/08/25 01:19:26 ybfu Exp $
; 10. *******************************************************************************
; 11. */
; 12. #pragma codeseg(MO_EH_UNI)
; 13.
; 14. #include "actos.h"
; 15. #include "enhanced.h"
; 16. #include "debug.h"
; 17.
; 18. #pragma memory=constseg(MOC_EH_UNI)
; 19. const char ftbl_GB[]="FTBL_GB.$$$";
; 20. const char ftbl_B5[]="FTBL_B5.$$$";
; 21. const char ftbl_JP[]="FTBL_JP.$$$";
; 22. const char ftbl_KR[]="FTBL_KR.$$$";
; 23. const char ftbl_RS[]="U1251.BIN";
; 24. const char ftbl_BC[]="U1250.BIN";
; 25. const char ftbl_LA[]="U1252.BIN";
; 26. const char ftbl_XL[]="U1255.BIN";
; 27. #pragma memory=default
; 28.
; 29. /*
; 30. ********************************************************************************
; 31. *
; 32. *
; 33. * Description :
; 34. *
; 35. * Arguments : inchar 输入的字符串首址 codeoffsetaddr 对照表中的首址
; 36. *
; 37. * Returns : outchar 输出的字符串首址
; 38. * 返回输出中的有效字节数,为0表示没字符输出
; 39. *
; 40. * Notes :
; 41. *
; 42. ********************************************************************************
; 43. */
; 44. WORD OneUniToChar(WORD unicode, const SD_FILE *fp, char mode)
; 45. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -6
PUSH IY
; 46. WORD code,codeCk;
; 47. ulong unicode1;
; 48. int i;
; 49.
; 50. unicode1=((ulong)unicode)*2;
LD L,(IX+2)
LD H,(IX+3)
LD BC,0
ADD HL,HL
RL C
RL B
LD (IX-4),L
LD (IX-3),H
LD (IX-2),C
LD (IX-1),B
; 51. if(unicode>127)
LD C,(IX+2)
LD B,(IX+3)
LD HL,127
AND A
SBC HL,BC
JP NC,?0001
?0000:
; 52. {
; 53. if(mode==CP_XBL)
LD A,(IX+10)
CP 15
JR NZ,?0003
?0002:
; 54. {
; 55. codeCk=0x0000;
; 56. //unicode1=((ulong)codeCk)*2;
; 57. for(i=0;i<128;i++)
LD DE,0
LD IY,0
?0005:
LD BC,32896
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0084
?0006:
; 58. {
; 59. if(!SD_FSeek(fp,SEEK_SET,codeCk*2))
PUSH DE
EX DE,HL
ADD HL,HL
LD BC,0
PUSH BC
PUSH HL
LD E,(IX+4)
LD D,(IX+5)
CALL LWRD SD_FSeek
POP HL
POP HL
OR A
POP DE
JR Z,?0084
?0008:
; 60. return 0x20;
?0009:
; 61. SD_FRead(fp,&code,2);
PUSH DE
LD HL,2
PUSH HL
LD L,6
ADD HL,SP
CALL LWRD ?0106
POP AF
POP DE
; 62. if(code==unicode)
LD L,(IX+2)
LD H,(IX+3)
LD C,(IX-6)
LD B,(IX-5)
AND A
SBC HL,BC
JR NZ,?0011
?0010:
; 63. return codeCk+0x0080;
LD HL,128
ADD HL,DE
JR ?0017
?0011:
; 64. codeCk++;
INC DE
INC IY
JR ?0005
?0004:
; 65. }
; 66. return 0x20;
; 67. }
?0003:
; 68. else
; 69. {
; 70. if(!SD_FSeek(fp,SEEK_SET,unicode1))
LD L,(IX-2)
LD H,(IX-1)
PUSH HL
LD L,(IX-4)
LD H,(IX-3)
PUSH HL
LD C,0
LD E,(IX+4)
LD D,(IX+5)
CALL LWRD SD_FSeek
POP HL
POP HL
OR A
JR NZ,?0013
?0012:
; 71. return 0x20;
?0084:
LD HL,32
JR ?0017
?0013:
; 72. if(SD_FRead(fp,&code,2))
LD HL,2
PUSH HL
INC HL
INC HL
ADD HL,SP
CALL LWRD ?0106
POP AF
LD A,L
OR H
JR Z,?0016
?0014:
; 73. return code;
LD L,(IX-6)
LD H,(IX-5)
; 74. }
JR ?0017
?0015:
; 75. }
; 76. else //是ASCII
?0001:
; 77. {
; 78. return unicode;
LD L,C
LD H,B
; 79. }
JR ?0017
?0016:
; 80. return 0;
LD L,A
LD H,A
; 81. }
?0017:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0106:
LD C,L
LD B,H
LD E,(IX+4)
LD D,(IX+5)
JP LWRD SD_FRead
unitochar:
; 82.
; 83.
; 84. /*
; 85. ********************************************************************************
; 86. *
; 87. *
; 88. * Description :
; 89. *
; 90. * Arguments :
; 91. *
; 92. * Returns :
; 93. *
; 94. * Notes :
; 95. *
; 96. ********************************************************************************
; 97. */
; 98. bool unitochar(char *str,int len,unsigned char encode)
; 99. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -6
PUSH IY
; 100. int s_cnt=0;
; 101. int d_cnt=0;
; 102. WORD code;
; 103. SD_FILE *fp;
; 104.
; 105. //清 WATCH_DOG
; 106. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 107.
; 108. switch(encode)
XOR A
LD (IX-2),A
LD (IX-1),A
LD E,(IX+10)
CALL LWRD ?C_V_SWITCH_L06
DEFW 9
DEFB 0
DEFB 2
DEFB 3
DEFB 4
DEFB 13
DEFB 14
DEFB 15
DEFB 16
DEFB 17
DEFW ?0066
DEFW ?0023
DEFW ?0023
DEFW ?0025
DEFW ?0026
DEFW ?0024
DEFW ?0022
DEFW ?0021
DEFW ?0020
DEFW ?0019
?0019:
; 109. {
; 110. case CP_CHS: //中文简体
; 111. fp=SD_FOpen(ftbl_GB,MODE_READ);
LD C,A
LD DE,ftbl_GB
JR ?0102
; 112. break;
?0020:
; 113. case CP_CHT: //中文繁体
; 114. fp=SD_FOpen(ftbl_B5,MODE_READ);
LD C,A
LD DE,ftbl_B5
JR ?0102
; 115. break;
?0021:
; 116. case 3: //日文
; 117. fp=SD_FOpen(ftbl_JP,MODE_READ);
LD C,A
LD DE,ftbl_JP
JR ?0102
; 118. break;
?0022:
; 119. case 4: //韩文
; 120. fp=SD_FOpen(ftbl_KR,MODE_READ);
LD C,A
LD DE,ftbl_KR
JR ?0102
; 121. break;
?0023:
; 122. case CP_BOL: //波兰
; 123. case CP_CRE: //捷克
; 124. fp=SD_FOpen(ftbl_BC,MODE_READ);
LD C,A
LD DE,ftbl_BC
JR ?0102
; 125. break;
?0024:
; 126. case CP_RUS: //俄文
; 127. fp=SD_FOpen(ftbl_RS,MODE_READ);
LD C,A
LD DE,ftbl_RS
JR ?0102
; 128. break;
?0025:
; 129. case CP_XBL: //西伯莱
; 130. fp=SD_FOpen(ftbl_XL,MODE_READ);
LD C,A
LD DE,ftbl_XL
?0102:
JP LWRD ?0105
; 131. break;
?0026:
; 132. case CP_TAI: //泰文
; 133. for(d_cnt=0,s_cnt=0;(s_cnt<len)&&((str[s_cnt]!=0)||(str[s_cnt+1]!=0)); )
LD (IX-6),A
LD (IX-5),A
?0028:
LD C,(IX+4)
LD B,(IX+5)
LD L,A
LD H,(IX-5)
CALL LWRD ?SS_CMP_L02
JP NC,?0027
LD C,(IX+2)
LD B,(IX+3)
ADD HL,BC
LD A,(HL)
OR A
JR NZ,?0032
LD L,(IX-6)
LD H,(IX-5)
ADD HL,BC
INC HL
LD A,(HL)
OR A
JP Z,?0027
?0032:
?0033:
?0031:
?0030:
?0029:
; 134. {
; 135. code = str[s_cnt]+str[s_cnt+1]*0x100;
LD L,(IX-6)
LD H,(IX-5)
ADD HL,BC
INC HL
LD D,(HL)
LD E,0
LD L,(IX-6)
LD H,(IX-5)
ADD HL,BC
LD C,(HL)
LD B,E
EX DE,HL
ADD HL,BC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -