📄 sdrv_invert.s01
字号:
NAME sdrv_invert(16)
RSEG BBC_HFUN(0)
EXTERN DisplayBuffer
EXTERN Hdrv_GetBuffData
EXTERN Hdrv_InvBuffDataTrans
EXTERN Hdrv_SetWindow
PUBLIC Sdrv_Invert
EXTERN region_win
EXTERN ?CLZ80L_4_04_L00
EXTERN ?SS_DIV_L02
EXTERN ?S_MUL_L02
RSEG BBC_HFUN
Sdrv_Invert:
; 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_Invert.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 memory=constseg(BBS_HFUN)
; 18. #pragma memory=default
; 19.
; 20. #pragma memory=dataseg(BBD_HFUN)
; 21. //SD_RW sdrw;
; 22. //extern unsigned char BufPage;
; 23. #pragma memory=default
; 24.
; 25. #pragma codeseg(BBC_HFUN)
; 26.
; 27. ////*******************************************************************************/
; 28. ///* 把指定区域作反白显示
; 29. //** FUNCTION: Sdrv_Invert
; 30. //**
; 31. //** Description:
; 32. //**
; 33. //** input
; 34. //** region_t * D3region: 要反白区域的区域大小
; 35. //**
; 36. //** output
; 37. //** none
; 38. //********************************************************************************/
; 39.
; 40. void Sdrv_Invert (region_t * Invregion)
; 41. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH DE
PUSH AF
PUSH AF
PUSH AF
PUSH AF
; 42.
; 43. int block_pixel;//每一小块象素的个数
; 44. BYTE block_line; //每一小块的行数
; 45. int i;
; 46.
; 47. region_t tmpregion;//临时使用
; 48. BYTE line_cnt;//行数计数器
; 49.
; 50. tmpregion = *Invregion;
LD HL,0
ADD HL,SP
EX DE,HL
LD BC,4
LDIR
; 51.
; 52. if ((tmpregion.x + tmpregion.width) > (region_win.x+region_win.width)
; 53. || (tmpregion.y + tmpregion.height) > (region_win.y + region_win.height) )
LD L,(IX-8)
LD E,(IX-10)
LD D,B
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,?0008
XOR H
?0008:
JP M,?0007
LD L,(IX-7)
LD H,D
LD E,(IX-9)
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,?0009
XOR H
?0009:
JP M,?0007
?0002:
?0003:
?0000:
; 54. {
; 55. return;//超限返回
; 56. }
?0001:
; 57.
; 58. //把一个大的矩形分成N个小的矩形块,每个小矩形数据应能用一个page buf 传送完,
; 59. block_line = DisplayBufLen/(2*(tmpregion.width));
LD L,(IX-8)
LD H,D
ADD HL,HL
LD C,L
LD B,H
LD DE,512
CALL ?SS_DIV_L02
LD (IX-3),E
; 60. block_pixel = block_line * (tmpregion.width);
LD C,(IX-8)
LD B,0
LD D,B
CALL ?S_MUL_L02
PUSH DE
POP IY
; 61.
; 62. line_cnt = tmpregion.height;//保存高度值
LD B,(IX-7)
LD (IX-4),B
; 63. tmpregion.height = block_line;
LD B,(IX-3)
LD (IX-7),B
?0005:
; 64.
; 65. while (line_cnt > block_line)
LD A,(IX-3)
CP (IX-4)
JR NC,?0004
?0006:
; 66. {
; 67. //把数据读出
; 68. Hdrv_SetWindow(&tmpregion);
LD HL,0
ADD HL,SP
EX DE,HL
CALL Hdrv_SetWindow
; 69. Hdrv_GetBuffData(DisplayBuffer, block_pixel, NORTransMode_def);
LD HL,0
PUSH HL
PUSH IY
POP BC
LD DE,DisplayBuffer
CALL Hdrv_GetBuffData
POP AF
; 70. Hdrv_SetWindow(&tmpregion);
LD HL,0
ADD HL,SP
EX DE,HL
CALL Hdrv_SetWindow
; 71. Hdrv_InvBuffDataTrans(DisplayBuffer,block_pixel);
PUSH IY
POP BC
LD DE,DisplayBuffer
CALL Hdrv_InvBuffDataTrans
; 72. line_cnt -= block_line;
LD HL,6
ADD HL,SP
LD A,(HL)
SUB (IX-3)
LD (HL),A
; 73. tmpregion.y += block_line;
LD A,(IX-9)
ADD A,(IX-3)
LD (IX-9),A
JR ?0005
?0004:
; 74. }
; 75.
; 76. //反相余下的
; 77. tmpregion.height = line_cnt;
LD B,(IX-4)
LD (IX-7),B
; 78. i = line_cnt * tmpregion.width;
LD C,(IX-8)
LD B,0
LD D,B
LD E,(IX-4)
CALL ?S_MUL_L02
LD (IX-6),E
LD (IX-5),D
; 79. Hdrv_SetWindow(&tmpregion);
LD L,B
LD H,B
ADD HL,SP
EX DE,HL
CALL Hdrv_SetWindow
; 80. Hdrv_GetBuffData(DisplayBuffer, i, NORTransMode_def);
LD L,B
LD H,B
PUSH HL
LD C,(IX-6)
LD B,(IX-5)
LD DE,DisplayBuffer
CALL Hdrv_GetBuffData
POP AF
; 81. Hdrv_SetWindow(&tmpregion);
LD HL,0
ADD HL,SP
EX DE,HL
CALL Hdrv_SetWindow
; 82. Hdrv_InvBuffDataTrans(DisplayBuffer, i);
LD C,(IX-6)
LD B,(IX-5)
LD DE,DisplayBuffer
CALL Hdrv_InvBuffDataTrans
; 83. }
?0007:
LD SP,IX
POP IX
POP IY
POP BC
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -