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