📄 sdrv_functions_la.s01
字号:
NAME sdrv_functions_la(16)
RSEG UI_RCODE(0)
EXTERN AsciiSelect
PUBLIC CheckCharMode
PUBLIC CheckDisplaySpace
EXTERN PutCharErrFlag
EXTERN region
EXTERN region_win
EXTERN ?CLZ80L_4_04_L00
EXTERN ?C_S_SWITCH_L06
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 >= FirstSectionCode)
; 42. //{
; 43. // return CharMode1616;//汉字
; 44. //}
; 45. //else
; 46. if (AsciiSelect == FONT_TYPE_SMALL)
LD A,(AsciiSelect)
OR A
JR Z,?0002
?0000:
; 47. {
; 48. return CharMode0608;//小字体ASCII
; 49. }
?0001:
; 50. return CharMode0816;//大字体ASCII
LD A,1
; 51. }
?0002:
POP HL
RET
CheckDisplaySpace:
; 52. //================================================================================
; 53.
; 54.
; 55. ////*******************************************************************************/
; 56. ///*
; 57. //** FUNCTION: non_banked bool CheckDisplaySpace
; 58. //**
; 59. //** Description: 检测屏幕空间是否满足显示要求,如超出范围则报错
; 60. //**
; 61. //** input
; 62. //** codemod: 点阵的模式
; 63. //**
; 64. //** output
; 65. //** True: 屏幕空间能满足显示要求
; 66. //** False: 屏幕空间不能满足显示要求
; 67. //********************************************************************************/
; 68.
; 69. non_banked bool CheckDisplaySpace(char codemod)
; 70. {
PUSH BC
PUSH DE
; 71. switch(codemod)
CALL ?C_S_SWITCH_L06
DEFB 0
DEFW 4
DEFW ?0024
DEFW ?0004
DEFW ?0009
DEFW ?0014
DEFW ?0019
?0004:
; 72. {
; 73. case CharMode0608://06*08点阵模式(ascii小字体)
; 74. // region.x [0 ~ Displaylength-1]
; 75. // region.y [0 ~ Displayhight-1]
; 76. 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,?0048
XOR H
?0048:
JP M,?0066
?0005:
; 77. {
; 78. DUMP(RESULT_PUTCHAR_X_ERR);
; 79. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 80. return FALSE;
; 81. }
?0006:
; 82. 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,?0049
XOR H
?0049:
JP P,?0003
?0007:
; 83. {
; 84. DUMP(RESULT_PUTCHAR_Y_ERR);
; 85. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JP ?0067
; 86. return FALSE;
; 87. }
?0008:
; 88. break;
?0009:
; 89.
; 90. case CharMode0816://08*16点阵模式(ascii大字体)
; 91. 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,?0050
XOR H
?0050:
JP M,?0066
?0010:
; 92. {
; 93. DUMP(RESULT_PUTCHAR_X_ERR);
; 94. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 95. return FALSE;
; 96. }
?0011:
; 97. 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,?0051
XOR H
?0051:
JP P,?0003
?0012:
; 98. {
; 99. DUMP(RESULT_PUTCHAR_Y_ERR);
; 100. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JP ?0067
; 101. return FALSE;
; 102. }
?0013:
; 103. break;
?0014:
; 104.
; 105. case CharMode1616://16*16点阵模式(汉字)
; 106. if (region.x+CHINESE_WIDTH_DEF > region_win.x+region_win.width)
LD BC,(region)
LD B,0
LD HL,16
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,?0052
XOR H
?0052:
JP M,?0066
?0015:
; 107. {
; 108. DUMP(RESULT_PUTCHAR_X_ERR);
; 109. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 110. return FALSE;
; 111. }
?0016:
; 112. if (region.y+CHINESE_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,?0053
XOR H
?0053:
JP P,?0003
?0017:
; 113. {
; 114. DUMP(RESULT_PUTCHAR_Y_ERR);
; 115. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JR ?0067
; 116. return FALSE;
; 117. }
?0018:
; 118. break;
?0019:
; 119.
; 120. case PicDisMode://图形显示模式
; 121. 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,?0054
XOR H
?0054:
JP P,?0021
?0020:
; 122. {
; 123. DUMP(RESULT_PUTCHAR_X_ERR);
; 124. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
?0066:
LD A,1
JR ?0063
; 125. return FALSE;
; 126. }
?0021:
; 127. 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,?0055
XOR H
?0055:
JP P,?0003
?0022:
; 128. {
; 129. DUMP(RESULT_PUTCHAR_Y_ERR);
; 130. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
?0067:
LD A,2
JR ?0063
; 131. return FALSE;
; 132. }
?0023:
; 133. break;
?0024:
; 134.
; 135. default:
; 136. DUMP(RESULT_PUTCHAR_OTHER_ERR);
; 137. PutCharErrFlag = RESULT_PUTCHAR_OTHER_ERR;//不知类型的也不显示
LD A,3
?0063:
LD (PutCharErrFlag),A
; 138. return FALSE;
XOR A
; 139. }
JR ?0025
?0003:
; 140. return TRUE;
LD A,1
; 141. }
?0025:
POP HL
POP BC
RET
; 142. //================================================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -