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