sdrv_functions_jp.s01
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· S01 代码 · 共 366 行
S01
366 行
NAME sdrv_functions_jp(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 >= 0x81)
LD A,E
CP 129
JR C,?0001
?0000:
; 42. {
; 43. return CharMode1616;//汉字
LD A,2
; 44. }
JR ?0004
?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
CheckDisplaySpace:
; 51. //================================================================================
; 52.
; 53.
; 54. ////*******************************************************************************/
; 55. ///*
; 56. //** FUNCTION: non_banked bool CheckDisplaySpace
; 57. //**
; 58. //** Description: 检测屏幕空间是否满足显示要求,如超出范围则报错
; 59. //**
; 60. //** input
; 61. //** codemod: 点阵的模式
; 62. //**
; 63. //** output
; 64. //** True: 屏幕空间能满足显示要求
; 65. //** False: 屏幕空间不能满足显示要求
; 66. //********************************************************************************/
; 67.
; 68. non_banked bool CheckDisplaySpace(char codemod)
; 69. {
PUSH BC
PUSH DE
; 70. switch(codemod)
CALL ?C_S_SWITCH_L06
DEFB 0
DEFW 4
DEFW ?0026
DEFW ?0006
DEFW ?0011
DEFW ?0016
DEFW ?0021
?0006:
; 71. {
; 72. case CharMode0608://06*08点阵模式(ascii小字体)
; 73. // region.x [0 ~ Displaylength-1]
; 74. // region.y [0 ~ Displayhight-1]
; 75. 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:
; 76. {
; 77. DUMP(RESULT_PUTCHAR_X_ERR);
; 78. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 79. return FALSE;
; 80. }
?0008:
; 81. 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:
; 82. {
; 83. DUMP(RESULT_PUTCHAR_Y_ERR);
; 84. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JP ?0069
; 85. return FALSE;
; 86. }
?0010:
; 87. break;
?0011:
; 88.
; 89. case CharMode0816://08*16点阵模式(ascii大字体)
; 90. 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:
; 91. {
; 92. DUMP(RESULT_PUTCHAR_X_ERR);
; 93. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 94. return FALSE;
; 95. }
?0013:
; 96. 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:
; 97. {
; 98. DUMP(RESULT_PUTCHAR_Y_ERR);
; 99. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JP ?0069
; 100. return FALSE;
; 101. }
?0015:
; 102. break;
?0016:
; 103.
; 104. case CharMode1616://16*16点阵模式(汉字)
; 105. 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,?0054
XOR H
?0054:
JP M,?0068
?0017:
; 106. {
; 107. DUMP(RESULT_PUTCHAR_X_ERR);
; 108. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
; 109. return FALSE;
; 110. }
?0018:
; 111. 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,?0055
XOR H
?0055:
JP P,?0005
?0019:
; 112. {
; 113. DUMP(RESULT_PUTCHAR_Y_ERR);
; 114. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
JR ?0069
; 115. return FALSE;
; 116. }
?0020:
; 117. break;
?0021:
; 118.
; 119. case PicDisMode://图形显示模式
; 120. 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:
; 121. {
; 122. DUMP(RESULT_PUTCHAR_X_ERR);
; 123. PutCharErrFlag = RESULT_PUTCHAR_X_ERR;//X轴超出
?0068:
LD A,1
JR ?0065
; 124. return FALSE;
; 125. }
?0023:
; 126. 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:
; 127. {
; 128. DUMP(RESULT_PUTCHAR_Y_ERR);
; 129. PutCharErrFlag = RESULT_PUTCHAR_Y_ERR;//Y轴超出
?0069:
LD A,2
JR ?0065
; 130. return FALSE;
; 131. }
?0025:
; 132. break;
?0026:
; 133.
; 134. default:
; 135. DUMP(RESULT_PUTCHAR_OTHER_ERR);
; 136. PutCharErrFlag = RESULT_PUTCHAR_OTHER_ERR;//不知类型的也不显示
LD A,3
?0065:
LD (PutCharErrFlag),A
; 137. return FALSE;
XOR A
; 138. }
JR ?0027
?0005:
; 139. return TRUE;
LD A,1
; 140. }
?0027:
POP HL
POP BC
RET
; 141. //================================================================================
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?