sdrv_functions_thai.s01
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· S01 代码 · 共 406 行
S01
406 行
NAME sdrv_functions_thai(16)
RSEG UI_RCODE(0)
EXTERN AsciiSelect
PUBLIC CheckCharMode
PUBLIC CheckDisplaySpace
PUBLIC CheckSymbol
EXTERN PutCharErrFlag
EXTERN putCharChFlag
EXTERN region
EXTERN region_win
EXTERN ?CLZ80L_4_04_L00
RSEG UI_RCODE
CheckCharMode:
; 1. /*
; 2. ********************************************************************************
; 3. * ACTOS
; 4. * ui dirver show picture
; 5. *
; 6. * (c) Copyright 2002-2003, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * File : Sdrv_functions.c
; 10. * By : Rcmai
; 11. * Version: 1> v1.00 first version 10/17/2003 10:46PM
; 12. ********************************************************************************
; 13. */
; 14. #include "display.h"
; 15. #include "Drv_S6B33B0A.h"
; 16.
; 17. #pragma codeseg(UI_RCODE)
; 18.
; 19.
; 20. ////*******************************************************************************/
; 21. ///*
; 22. //** FUNCTION: CheckCharMode
; 23. //**
; 24. //** Description: 检测字符的模式
; 25. //**
; 26. //** input
; 27. //** code: 字的内码
; 28. //**
; 29. //** output
; 30. //** == CharMode1616: 汉字
; 31. //** == CharMode0816: 大ASCII
; 32. //** == CharMode0608: 小ASCII
; 33. //********************************************************************************/
; 34. non_banked char CheckCharMode(int code)
; 35. {
PUSH DE
; 36. //*如下动作主要是取 int code 的高8位来作比较(int 型参数是以 de 传送的,*
; 37. //* 也就是要用d的值来作比较),用如下指令可使编译器优化成不用移位而 *
; 38. //* 直接使用d的值来作比较。可省去不少时间及代码空间。 *
; 39. //if ((unsigned char)((unsigned int)code>>8) >= FirstSectionCode)
; 40.
; 41. if ((unsigned char)code >= 0xa0)
LD A,E
CP 160
JR NC,?0003
?0000:
; 42. {
; 43. return CharMode0816;//汉字
; 44. }
?0001:
; 45. else if (AsciiSelect == FONT_TYPE_SMALL)
LD A,(AsciiSelect)
OR A
JR Z,?0004
?0002:
; 46. {
; 47. return CharMode0608;//小字体ASCII
; 48. }
?0003:
; 49. return CharMode0816;//大字体ASCII
LD A,1
; 50. }
?0004:
POP HL
RET
CheckSymbol:
; 51. //================================================================================
; 52.
; 53. non_banked char CheckSymbol(int code)
; 54. {
PUSH IX
PUSH DE
POP IX
; 55. if(((unsigned char)code == 0xd1)||(((unsigned char)code >= 0xd4)&&((unsigned char)code <= 0xda))||
; 56. (((unsigned char)code >= 0xe7)&&((unsigned char)code <= 0xee)))
LD A,E
CP 209
JR Z,?0012
PUSH IX
POP HL
LD A,L
CP 212
JR C,?0010
LD A,218
CP L
JR NC,?0012
?0010:
?0009:
LD A,L
CP 231
JR C,?0006
LD A,238
CP L
JR C,?0006
?0012:
?0011:
?0007:
?0008:
?0005:
; 57. {
; 58. //charclarityBak = charclarity;
; 59. //charclarity = 0;
; 60. if(((unsigned char)code == 0xd8)||((unsigned char)code == 0xd9)||((unsigned char)code == 0xda))
PUSH IX
POP HL
LD A,L
CP 216
JR Z,?0015
LD A,L
CP 217
JR Z,?0015
LD A,L
CP 218
JR NZ,?0014
?0015:
?0016:
?0013:
; 61. {
; 62. putCharChFlag = 3;
LD A,3
JR ?0039
; 63. return 3;
; 64. }
?0014:
; 65. else
; 66. {
; 67. putCharChFlag = 5;
LD A,5
?0039:
LD (putCharChFlag),A
; 68. return 5;
; 69. }
JR ?0017
?0006:
; 70.
; 71. }
; 72. else
; 73. {
; 74. //charclarity = charclarityBak;
; 75. putCharChFlag = 8;
LD A,8
LD (putCharChFlag),A
; 76. return 0;
XOR A
; 77. }
?0017:
POP IX
RET
; 78. }
CheckDisplaySpace:
; 79.
; 80. ////*******************************************************************************/
; 81. ///*
; 82. //** FUNCTION: non_banked bool CheckDisplaySpace
; 83. //**
; 84. //** Description: 检测屏幕空间是否满足显示要求,如超出范围则报错
; 85. //**
; 86. //** input
; 87. //** codemod: 点阵的模式
; 88. //**
; 89. //** output
; 90. //** True: 屏幕空间能满足显示要求
; 91. //** False: 屏幕空间不能满足显示要求
; 92. //********************************************************************************/
; 93.
; 94. non_banked bool CheckDisplaySpace(char codemod)
; 95. {
PUSH BC
PUSH DE
; 96. switch(codemod)
LD A,E
CP 0
JR NZ,?0024
?0019:
; 97. {
; 98. case CharMode0608://06*08点阵模式(ascii小字体)
; 99. // region.x [0 ~ Displaylength-1]
; 100. // region.y [0 ~ Displayhight-1]
; 101. if (region.x+ASCII_SMALL_WIDTH_DEF > region_win.x+region_win.width)
LD BC,(region)
LD B,0
LD HL,6
ADD HL,BC
LD C,L
LD B,H
LD DE,(region_win+2)
LD D,0
LD HL,(region_win)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0056
XOR H
?0056:
JP M,?0070
?0020:
; 102. {
; 103. DUMP(RESULT_PUTCHAR_X_ERR);
; 104. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 105. return FALSE;
; 106. }
?0021:
; 107. if (region.y+ASCII_SMALL_HEIGHT_DEF > region_win.y+region_win.height)
LD BC,(region+1)
LD B,D
LD HL,8
ADD HL,BC
LD C,L
LD B,H
LD DE,(region_win+3)
LD D,0
LD HL,(region_win+1)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0057
XOR H
?0057:
JP P,?0018
?0022:
; 108. {
; 109. DUMP(RESULT_PUTCHAR_Y_ERR);
; 110. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JP ?0071
; 111. return FALSE;
; 112. }
?0023:
; 113. break;
?0024:
CP 1
JR NZ,?0029
; 114.
; 115. case CharMode0816://08*16点阵模式(ascii大字体)
; 116. if (region.x+ASCII_LARGE_WIDTH_DEF > region_win.x+region_win.width)
LD BC,(region)
LD B,0
LD HL,8
ADD HL,BC
LD C,L
LD B,H
LD DE,(region_win+2)
LD D,0
LD HL,(region_win)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0058
XOR H
?0058:
JP M,?0070
?0025:
; 117. {
; 118. DUMP(RESULT_PUTCHAR_X_ERR);
; 119. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 120. return FALSE;
; 121. }
?0026:
; 122. if (region.y+ASCII_LARGE_HEIGHT_DEF > region_win.y+region_win.height)
LD BC,(region+1)
LD B,D
LD HL,16
ADD HL,BC
LD C,L
LD B,H
LD DE,(region_win+3)
LD D,0
LD HL,(region_win+1)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0059
XOR H
?0059:
JP P,?0018
?0027:
; 123. {
; 124. DUMP(RESULT_PUTCHAR_Y_ERR);
; 125. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JR ?0071
; 126. return FALSE;
; 127. }
?0028:
; 128. break;
?0029:
CP 3
JR NZ,?0034
; 129. /*
; 130. case CharMode1616://16*16点阵模式(汉字)
; 131. if (region.x+CHINESE_WIDTH_DEF > region_win.x+region_win.width)
; 132. {
; 133. DUMP(RESULT_PUTCHAR_X_ERR);
; 134. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 135. return FALSE;
; 136. }
; 137. if (region.y+CHINESE_HEIGHT_DEF > region_win.y+region_win.height)
; 138. {
; 139. DUMP(RESULT_PUTCHAR_Y_ERR);
; 140. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
; 141. return FALSE;
; 142. }
; 143. break;
; 144. */
; 145. case PicDisMode://图形显示模式
; 146. if (region.x+region.width > region_win.x+region_win.width)
LD BC,(region+2)
LD B,0
LD DE,(region)
LD D,B
LD L,C
LD H,B
ADD HL,DE
LD C,L
LD B,H
LD DE,(region_win+2)
LD D,0
LD HL,(region_win)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0060
XOR H
?0060:
JP P,?0031
?0030:
; 147. {
; 148. DUMP(RESULT_PUTCHAR_X_ERR);
; 149. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
?0070:
LD A,1
JR ?0067
; 150. return FALSE;
; 151. }
?0031:
; 152. if (region.y+region.height > region_win.y+region_win.height)
LD BC,(region+3)
LD B,D
LD DE,(region+1)
LD D,B
LD L,C
LD H,B
ADD HL,DE
LD C,L
LD B,H
LD DE,(region_win+3)
LD D,0
LD HL,(region_win+1)
LD H,D
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0061
XOR H
?0061:
JP P,?0018
?0032:
; 153. {
; 154. DUMP(RESULT_PUTCHAR_Y_ERR);
; 155. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
?0071:
LD A,2
JR ?0067
; 156. return FALSE;
; 157. }
?0033:
; 158. break;
?0034:
; 159.
; 160. default:
; 161. DUMP(RESULT_PUTCHAR_OTHER_ERR);
; 162. PutCharErrFlag = RESULT_PUTCHAR_OTHER_ERR;//不知类型的也不显示
LD A,3
?0067:
LD (PutCharErrFlag),A
; 163. return FALSE;
XOR A
; 164. }
JR ?0035
?0018:
; 165. return TRUE;
LD A,1
; 166. }
?0035:
POP HL
POP BC
RET
; 167. //================================================================================
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?