📄 functions.c
字号:
/******************************************************************************
Copyright (c) J&K 2006
File Name : functions.c
Engineer : Jackie
Location : R&D Dep.
Date Created : 2006-06-09
Description :
Current Revision : Revision: 1.0
Modification Notes :
****************************************************************************/
#include "main_asm.h"
#include "commondefine.h"
extern void DisplayNO(int Number);
/**************************************************************************
Function Name : INTER_Table_UINT2
Engineer : Jackie
Date : 2006-06-09
Description : 16bit无符号整型数二维插值
parameters : struct GROUP_INTER_UINT2* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
un16Row_Coord:行坐标值
Return : VL:函数返回值,16bit无符号整型插值结果
Warning :
**************************************************************************/
extern unsigned int INTER_Table_UINT2(struct GROUP_INTER_UINT2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)
{
unsigned int VE,VB,VL,pos;//VE:右基准点值;VB:左基准点值;VL:返回值
unsigned int row,col,rowratio,colratio;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;
if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;
if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;
//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
if(row>=array->TableRow)row=array->TableRow-1;
if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
if(col>=array->TableCol)col=array->TableCol-1;
//行比例值计算
rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
//列比例值计算
colratio = (unsigned char)((((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp);
array->V=Table_UINT2;
pos=row*array->TableRow+col;
VB=array->V[pos];//左基准点值
VE=array->V[pos+1];//右基准点值
//通用ASM汇编插值函数
__asm{
LDD VE
PSHD
INS
INS
LDD VB
DES
DES
PSHD
INS
INS
INS
INS
LDAB colratio
DES
DES
DES
DES
ETBL 4,SP+
STD VL
}
pos+=array->TableCol;
VB=array->V[pos];
VE=array->V[pos+1];
__asm{
LDD VE
PSHD
INS
INS
LDD VB
DES
DES
PSHD
INS
INS
INS
INS
LDAB colratio;
DES
DES
DES
DES
ETBL 4,SP+
STD VE
}
__asm{
LDD VE
PSHD
INS
INS
LDD VL
DES
DES
PSHD
INS
INS
INS
INS
LDAB rowratio;
DES
DES
DES
DES
ETBL 4,SP+
STD VL
}
}
/**************************************************************************
Function Name : INTER_Table_INT2
Engineer : Jackie
Date : 2006-06-09
Description : 16bit有符号整型数二维插值
parameters : struct GROUP_INTER_INT2* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
un16Row_Coord:行坐标值
Return : VL:函数返回值,16bit有符号整型插值结果
Warning :
**************************************************************************/
extern int INTER_Table_INT2(struct GROUP_INTER_INT2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)
{
int VE,VB,VL,pos;//VE:右基准点值;VB:左基准点值;VL:返回值
unsigned int row,col,rowratio,colratio;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;
if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;
if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;
//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
if(row>=array->TableRow)row=array->TableRow-1;
if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
if(col>=array->TableCol)col=array->TableCol-1;
//行比例值计算
rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
//列比例值计算
colratio = (unsigned char)((((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp);
array->V=Table_INT2;
pos=row*array->TableRow+col;
VB=array->V[pos];//左基准点值
VE=array->V[pos+1];//右基准点值
//通用ASM汇编插值函数
__asm{
LDD VE
PSHD
INS
INS
LDD VB
DES
DES
PSHD
INS
INS
INS
INS
LDAB colratio
DES
DES
DES
DES
ETBL 4,SP+
STD VL
}
pos+=array->TableCol;
VB=array->V[pos];
VE=array->V[pos+1];
__asm{
LDD VE
PSHD
INS
INS
LDD VB
DES
DES
PSHD
INS
INS
INS
INS
LDAB colratio;
DES
DES
DES
DES
ETBL 4,SP+
STD VE
}
__asm{
LDD VE
PSHD
INS
INS
LDD VL
DES
DES
PSHD
INS
INS
INS
INS
LDAB rowratio;
DES
DES
DES
DES
ETBL 4,SP+
STD VL
}
}
/**************************************************************************
Function Name : INTER_Table_UCHAR_2
Engineer : Jackie
Date : 2006-06-09
Description : 8bit无符号整型数二维插值
parameters : struct GROUP_INTER_UCHAR2* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
un16Row_Coord:行坐标值
Return : VL:函数返回值,8bit无符号整型插值结果
Warning :
**************************************************************************/
extern unsigned char INTER_Table_UCHAR_2(struct GROUP_INTER_CHAR_2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)
{
unsigned char VE,VB;//VE:右基准点值;VB:左基准点值;
unsigned char row,col,rowratio,colratio,pos,VL;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;VL:返回值
if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;
if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;
//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
if(row>=array->TableRow)row=array->TableRow-1;
if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
if(col>=array->TableCol)col=array->TableCol-1;
//行比例值计算
rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
//列比例值计算
colratio = (unsigned char)(((unsigned char)((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp);
array->V=Table_UCHAR_2;
pos=row*array->TableRow+col;
VB=array->V[pos];//左基准点值
VE=array->V[pos+1];//右基准点值
//通用ASM汇编插值函数
__asm{
LDAB rowratio;
LDAA VE
PSHA
INS
LDAA VB
DES
PSHA
TBL 2,SP+
STAA VL
}
pos+=array->TableRow;
VB=array->V[pos];
VE=array->V[pos+1];
__asm{
LDAB rowratio;
LDAA VE
PSHA
INS
LDAA VB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -