📄 sdrv_regioncopy.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 18/May/107 10:54:38 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = large #
# Source file = d:\case_i_d913f\drv\ui_ssd1332\sdrv\sdrv_regioncopy.c#
# List file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_r\list\sdrv_regioncopy.lst#
# Object file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_r\obj\sdrv_regioncopy.r01#
# ASM file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_r\list\sdrv_regioncopy.s01#
# Command line = -v0 -ml -uu #
# -OD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_R\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DIC3951 -DNAPDEBUG #
# -LD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_R\List\ #
# -q -t8 #
# -AD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_R\List\ #
# -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\ #
# -Id:\case_i_d913f\drv\ui_ssd1332\inc\ #
# d:\case_i_d913f\DRV\UI_SSD1332\SDRV\sdrv_regioncopy.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME sdrv_regioncopy(16)
\ 0000 RSEG BBC_DW3(0)
\ 0000 EXTERN DisplayBuffer
\ 0000 EXTERN Hdrv_BuffDataTrans
\ 0000 EXTERN Hdrv_GetBuffData
\ 0000 EXTERN Hdrv_SetWindow
\ 0000 PUBLIC Sdrv_RegionCopy
\ 0000 EXTERN region_win
\ 0000 EXTERN ?CLZ80L_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 RSEG BBC_DW3
\ 0000 Sdrv_RegionCopy:
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_RegionCopy.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_DW3)
18 #pragma memory=default
19
20 #pragma memory=dataseg(BBD_DW3)
21 #pragma memory=default
22
23 #pragma codeseg(BBC_DW3)
24
25 ////*******************************************************************************/
26 ///* void Sdrv_RegionCopy(region_t sregion, region_t tregion)
27 //** FUNCTION: Sdrv_RegionCopy
28 //**
29 //** Description: 把源区域的数据复制到目的区域
30 //** input
31 //** region_t *sregion: 指定源区域 ;
32 //** region_t *tregion: 指定目的区域
33 //**
34 //** output
35 //** none
36 //********************************************************************************/
37 void Sdrv_RegionCopy(region_t *sregion, region_t *tregion)
38 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B D5 PUSH DE
\ 000C 21F2FF LD HL,65522
\ 000F 39 ADD HL,SP
\ 0010 F9 LD SP,HL
39 int block_pixel;//每一小块象素的个数
40 BYTE block_line; //每一小块的行数
41 int i;
42 //int height_cnt; //高度计数器
43 region_t sregionram;//临时使用
44 region_t tregionram;//临时使用
45 BYTE line_cnt;//行数计数器
46
47 BYTE sregiony_tmp;
48 BYTE tregiony_tmp;
49
50 //把源目区域数据放到临时区作运算
51 sregionram = *sregion;
\ 0011 EB EX DE,HL
\ 0012 010400 LD BC,4
\ 0015 EDB0 LDIR
52 tregionram = *tregion;
\ 0017 210400 LD HL,4
\ 001A 39 ADD HL,SP
\ 001B EB EX DE,HL
\ 001C DD6EFE LD L,(IX-2)
\ 001F DD66FF LD H,(IX-1)
\ 0022 0E04 LD C,4
\ 0024 EDB0 LDIR
53
54 //下面强迫目标区域与源区域大小相同
55 tregionram.width = sregionram.width;
\ 0026 DD46F0 LD B,(IX-16)
\ 0029 DD70F4 LD (IX-12),B
56 tregionram.height = sregionram.height;
\ 002C DD46F1 LD B,(IX-15)
\ 002F DD70F5 LD (IX-11),B
57
58 if ( (sregionram.x + sregionram.width) > (region_win.x+region_win.width) //源区域横向是否超限
59 || (sregionram.y + sregionram.height) > (region_win.y + region_win.height) //源区域纵向是否超限
60 || (tregionram.x + sregionram.width) > (region_win.x+region_win.width) //目标区域横向是否超限(源与目宽度一样)
61 || (tregionram.y + sregionram.height) > (region_win.y + region_win.height) ) //目标区域纵向是否超限(源与目宽度一样)
\ 0032 DD6EF0 LD L,(IX-16)
\ 0035 41 LD B,C
\ 0036 50 LD D,B
\ 0037 DD5EEE LD E,(IX-18)
\ 003A 60 LD H,B
\ 003B 19 ADD HL,DE
\ 003C 4D LD C,L
\ 003D 44 LD B,H
\ 003E ED5B0200 LD DE,(region_win+2)
\ 0042 1600 LD D,0
\ 0044 2A0000 LD HL,(region_win)
\ 0047 62 LD H,D
\ 0048 19 ADD HL,DE
\ 0049 F680 OR 128
\ 004B ED42 SBC HL,BC
\ 004D E25100 JP PO,?0014
\ 0050 AC XOR H
\ 0051 ?0014:
\ 0051 FAF701 JP M,?0009
\ 0054 DD6EF1 LD L,(IX-15)
\ 0057 62 LD H,D
\ 0058 DD5EEF LD E,(IX-17)
\ 005B 19 ADD HL,DE
\ 005C 4D LD C,L
\ 005D 44 LD B,H
\ 005E ED5B0300 LD DE,(region_win+3)
\ 0062 1600 LD D,0
\ 0064 2A0100 LD HL,(region_win+1)
\ 0067 62 LD H,D
\ 0068 19 ADD HL,DE
\ 0069 F680 OR 128
\ 006B ED42 SBC HL,BC
\ 006D E27100 JP PO,?0015
\ 0070 AC XOR H
\ 0071 ?0015:
\ 0071 FAF701 JP M,?0009
\ 0074 DD6EF0 LD L,(IX-16)
\ 0077 62 LD H,D
\ 0078 DD5EF2 LD E,(IX-14)
\ 007B 19 ADD HL,DE
\ 007C 4D LD C,L
\ 007D 44 LD B,H
\ 007E ED5B0200 LD DE,(region_win+2)
\ 0082 1600 LD D,0
\ 0084 2A0000 LD HL,(region_win)
\ 0087 62 LD H,D
\ 0088 19 ADD HL,DE
\ 0089 F680 OR 128
\ 008B ED42 SBC HL,BC
\ 008D E29100 JP PO,?0016
\ 0090 AC XOR H
\ 0091 ?0016:
\ 0091 FAF701 JP M,?0009
\ 0094 DD6EF1 LD L,(IX-15)
\ 0097 62 LD H,D
\ 0098 DD5EF3 LD E,(IX-13)
\ 009B 19 ADD HL,DE
\ 009C 4D LD C,L
\ 009D 44 LD B,H
\ 009E ED5B0300 LD DE,(region_win+3)
\ 00A2 1600 LD D,0
\ 00A4 2A0100 LD HL,(region_win+1)
\ 00A7 62 LD H,D
\ 00A8 19 ADD HL,DE
\ 00A9 F680 OR 128
\ 00AB ED42 SBC HL,BC
\ 00AD E2B100 JP PO,?0017
\ 00B0 AC XOR H
\ 00B1 ?0017:
\ 00B1 FAF701 JP M,?0009
\ 00B4 ?0002:
\ 00B4 ?0003:
\ 00B4 ?0000:
62 {
63 return; //超限返回
64 }
\ 00B4 ?0001:
65
66 //把一个大的矩形分成N个小的矩形块,每个小矩形数据应能用一个page buf 传送完
67 // 这样可方便在源,目标间进行数据交换(不断换窗口)
68 block_line = DisplayBufLen/(2*(sregionram.width));
\ 00B4 DD6EF0 LD L,(IX-16)
\ 00B7 62 LD H,D
\ 00B8 29 ADD HL,HL
\ 00B9 4D LD C,L
\ 00BA 44 LD B,H
\ 00BB 110002 LD DE,512
\ 00BE CD0000 CALL ?SS_DIV_L02
\ 00C1 DD73F9 LD (IX-7),E
69 block_pixel = block_line * (sregionram.width);
\ 00C4 DD4EF0 LD C,(IX-16)
\ 00C7 0600 LD B,0
\ 00C9 50 LD D,B
\ 00CA CD0000 CALL ?S_MUL_L02
\ 00CD D5 PUSH DE
\ 00CE FDE1 POP IY
70
71 line_cnt = sregionram.height;//保存高度值
\ 00D0 DD46F1 LD B,(IX-15)
\ 00D3 DD70F8 LD (IX-8),B
72 sregionram.height = block_line;
\ 00D6 DD46F9 LD B,(IX-7)
\ 00D9 DD70F1 LD (IX-15),B
73 tregionram.height = block_line;
\ 00DC DD70F5 LD (IX-11),B
74
75 if ((sregion->y) >= (tregion->y))
\ 00DF DD6EFE LD L,(IX-2)
\ 00E2 DD66FF LD H,(IX-1)
\ 00E5 23 INC HL
\ 00E6 E5 PUSH HL
\ 00E7 DD6EFC LD L,(IX-4)
\ 00EA DD66FD LD H,(IX-3)
\ 00ED 23 INC HL
\ 00EE 7E LD A,(HL)
\ 00EF E1 POP HL
\ 00F0 BE CP (HL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -