sdrv_putchar_thai.s01
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· S01 代码 · 共 317 行
S01
317 行
NAME sdrv_putchar_thai(16)
RSEG BBC_PUTS(0)
EXTERN BlackCharToColor
EXTERN CharPointBuffer
EXTERN CheckCharMode
EXTERN CheckDisplaySpace
EXTERN CheckSymbol
EXTERN DisplayBuffer
EXTERN Hdrv_BuffDataTrans
EXTERN Hdrv_SetDrawMode
EXTERN Hdrv_SetWindow
EXTERN NextSFlag
EXTERN PutCharErrFlag
EXTERN SFlag
EXTERN Sdrv_GetFontPoint
PUBLIC Sdrv_PutChar
EXTERN region
EXTERN ?CLZ80L_4_04_L00
RSEG BBC_PUTS
Sdrv_PutChar:
; 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 : PutChar.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. #pragma memory=constseg(BBS_PUTS)
; 20. #pragma memory=default
; 21.
; 22. #pragma memory=dataseg(BBD_PUTS)
; 23. #pragma memory=default
; 24.
; 25. #pragma codeseg(BBC_PUTS)
; 26.
; 27. //non_banked char CheckCharMode(int code);
; 28. //bool CheckDisplaySpace(char codemod);
; 29. ////*******************************************************************************/
; 30. ///*
; 31. //** FUNCTION: PutChar
; 32. //**
; 33. //** Description: 在屏幕上打出一个字符,并打完后当前指针自动跳到下一个汉字的左上角
; 34. //**
; 35. //** input
; 36. //** code: 字符的码值
; 37. //**
; 38. //** output
; 39. //** none
; 40. //********************************************************************************/
; 41.
; 42. non_banked bool Sdrv_PutChar(int code)
; 43. {
PUSH BC
PUSH IX
PUSH AF
PUSH DE
POP IX
; 44. char charmode;
; 45. bool putchar_result;
; 46. PutCharErrFlag = RESULT_PUTCHAR_OK; //默认为OK
XOR A
LD (PutCharErrFlag),A
; 47. Hdrv_SetDrawMode(DrawModeV_def); //把显示模式设置成竖向显示模式(与旧字库兼容)
LD DE,1
CALL Hdrv_SetDrawMode
; 48. Sdrv_GetFontPoint(code, CharPointBuffer);//取点阵
LD BC,CharPointBuffer
PUSH IX
POP DE
CALL Sdrv_GetFontPoint
; 49. charmode = CheckCharMode(code);
PUSH IX
POP DE
CALL CheckCharMode
LD HL,1
ADD HL,SP
LD (HL),A
; 50. SFlag = CheckSymbol(code);
PUSH IX
POP DE
CALL CheckSymbol
LD (SFlag),A
; 51. putchar_result = CheckDisplaySpace(charmode);
LD HL,1
ADD HL,SP
LD E,(HL)
CALL CheckDisplaySpace
LD HL,0
ADD HL,SP
LD (HL),A
; 52. if (!putchar_result)
XOR A
OR (HL)
JR NZ,?0001
?0000:
; 53. {
; 54. Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模式
LD E,A
LD D,A
CALL Hdrv_SetDrawMode
; 55. return putchar_result;//如显示范围不对,则不做显示动作而直接退出
LD HL,0
ADD HL,SP
LD A,(HL)
; 56. }
JP ?0015
?0001:
; 57. switch(charmode)
INC HL
LD A,(HL)
CP 0
JR NZ,?0004
?0003:
; 58. {
; 59. case CharMode0608://06*08点阵模式(ascii小字体)
; 60. //设置字模输出的大小
; 61. region.width = ASCII_SMALL_WIDTH_DEF;
LD A,6
LD (region+2),A
; 62. region.height = ASCII_SMALL_HEIGHT_DEF;
LD A,8
LD (region+3),A
; 63. Hdrv_SetWindow(®ion);
CALL ?0022
; 64. //把黑白字模转为彩色字模放在Buff中
; 65. BlackCharToColor(ASCII_SMALL_WIDTH_DEF, CharPointBuffer);
LD BC,CharPointBuffer
LD DE,6
CALL BlackCharToColor
; 66. //把暂时显存区的数据送到LCM
; 67. Hdrv_BuffDataTrans(DisplayBuffer, ASCII_SMALL_HEIGHT_DEF*ASCII_SMALL_WIDTH_DEF*2);
LD BC,96
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
; 68. region.x += ASCII_SMALL_WIDTH_DEF;//坐标移到下一个字的左上角
LD A,(region)
ADD A,6
JP ?0021
; 69. break;
?0004:
CP 1
JP NZ,?0013
; 70.
; 71. case CharMode0816://08*16点阵模式(ascii大字体)
; 72. //设置字模输出的大小//上半个字
; 73. region.width = ASCII_LARGE_WIDTH_DEF;
LD A,8
LD (region+2),A
; 74.
; 75. if(SFlag == 5)
LD A,(SFlag)
CP 5
JR NZ,?0006
?0005:
; 76. {
; 77. region.height = 5;
LD A,5
LD (region+3),A
; 78. Hdrv_SetWindow(®ion);
CALL ?0022
; 79. BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
LD BC,CharPointBuffer
LD DE,8
CALL BlackCharToColor
; 80. Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*5*2);
LD BC,80
JR ?0019
?0006:
; 81. }
; 82. else if(SFlag == 3)
CP 3
JR NZ,?0009
?0008:
; 83. {
; 84. region.height = 3;
LD A,3
LD (region+3),A
; 85. region.y += 13;
LD A,(region+1)
ADD A,13
; 86. Hdrv_SetWindow(®ion);
CALL ?0023
; 87. BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF); //change by ybfu
LD BC,CharPointBuffer+8
LD DE,8
CALL BlackCharToColor
; 88. //把暂时显存区的数据送到LCM
; 89. Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*3*2);
LD BC,48
JR ?0019
; 90. //region.y -= 13;
; 91. }
; 92. else
?0009:
; 93. {
; 94. region.height = ASCII_LARGE_HEIGHT_DEF/2;
LD A,8
LD (region+3),A
; 95. region.y += ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
LD A,(region+1)
ADD A,8
; 96. Hdrv_SetWindow(®ion);
CALL ?0023
; 97. //把黑白字模转为彩色字模放在Buff中(上区)
; 98. BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF); //change by ybfu
LD BC,CharPointBuffer+8
LD DE,8
CALL BlackCharToColor
; 99. //把暂时显存区的数据送到LCM
; 100. Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*(ASCII_LARGE_HEIGHT_DEF/2)*2);
LD BC,128
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
; 101.
; 102. region.y -= ASCII_LARGE_HEIGHT_DEF/2;//Y坐标减8准备输出上区(上半个字)
LD A,(region+1)
ADD A,248
; 103. Hdrv_SetWindow(®ion);
CALL ?0023
; 104. BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
LD BC,CharPointBuffer
LD DE,8
CALL BlackCharToColor
; 105. //把暂时显存区的数据送到LCM
; 106. Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*(ASCII_LARGE_HEIGHT_DEF/2)*2);
LD BC,128
?0019:
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
?0010:
?0007:
; 107. }
; 108.
; 109. //坐标移到下一个字的左上角
; 110. if(NextSFlag == 0)
LD A,(NextSFlag)
OR A
JR NZ,?0012
?0011:
; 111. {
; 112. region.x += ASCII_LARGE_WIDTH_DEF;
LD A,(region)
ADD A,8
?0021:
LD (region),A
; 113. }
; 114. else
JR ?0013
?0012:
; 115. NextSFlag = 0; //如果是符号,X坐标不增加
XOR A
LD (NextSFlag),A
?0013:
; 116. //region.y -= ASCII_LARGE_HEIGHT_DEF/2;
; 117. break;
?0014:
; 118. #if 0
; 119. case CharMode1616://16*16点阵模式(汉字)
; 120. //设置字模输出的大小(上半个汉字)
; 121. region.width = CHINESE_WIDTH_DEF;
; 122. region.height = CHINESE_HEIGHT_DEF/2;
; 123. region.y += CHINESE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个汉字)
; 124.
; 125. Hdrv_SetWindow(®ion);
; 126.
; 127. //把黑白字模转为彩色字模放在Buff中
; 128. //putCharChFlag=8;
; 129. BlackCharToColor(CHINESE_WIDTH_DEF, CharPointBuffer + CHINESE_WIDTH_DEF); //change by ybfu
; 130. //putCharChFlag=8;
; 131. //把暂时显存区的数据送到LCM
; 132. Hdrv_BuffDataTrans(DisplayBuffer, (CHINESE_HEIGHT_DEF/2)*CHINESE_WIDTH_DEF*2);
; 133. region.y -= CHINESE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个汉字)
; 134. region.height = CHINESE_HEIGHT_DEF/2;
; 135. Hdrv_SetWindow(®ion);
; 136. BlackCharToColor(CHINESE_WIDTH_DEF, CharPointBuffer);
; 137.
; 138. //把暂时显存区的数据送到LCM
; 139. Hdrv_BuffDataTrans(DisplayBuffer, (CHINESE_HEIGHT_DEF/2)*CHINESE_WIDTH_DEF*2);
; 140.
; 141. //坐标移到下一个字的左上角
; 142. region.x += CHINESE_WIDTH_DEF;
; 143. //region.y -= CHINESE_HEIGHT_DEF/2;
; 144. break;
; 145. #endif
; 146. default:
; 147. break;
?0002:
; 148. }
; 149. Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
LD DE,0
CALL Hdrv_SetDrawMode
; 150. return TRUE;
LD A,1
; 151. }
?0015:
POP HL
POP IX
POP BC
RET
?0023:
LD (region+1),A
?0022:
LD DE,region
JP Hdrv_SetWindow
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?