📄 modectrl.lst
字号:
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MODECTRL
OBJECT MODULE PLACED IN .\Obj\MODECTRL.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Source\VGA\MODECTRL.C LARGE OPTIMIZE(6,SPEED) BROWSE INCDIR(.\Include\;.\So
-urce\;.\Include\Panel\;.\Include\GammaTable\;.\Include\tuner\) DEFINE(T103) DEBUG OBJECTEXTEND PRINT(.\MODECTRL.lst) OBJ
-ECT(.\Obj\MODECTRL.obj)
line level source
1 //---------------------------------------------------------------------------
2 // Terawins Inc. Company Confidential Strictly Private
3 //
4 // $Archive: ModeCtrl.c 702 $
5 // $Revision: 1.01 $
6 // $Author: JoannW $
7 // $Date: 2002/06/18 $
8 //
9 // --------------------------------------------------------------------------
10 // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
11 // --------------------------------------------------------------------------
12 // Copyright 2002 (c) Terawins Inc.
13 // This is an unpublished work.
14 // --------------------------------------------------------------------------
15 #include <reg51.h>
16 #include <math.h>
17 #include "common.h"
18
19 #include "Struct.h"
20 #include "system.h"
21
22 #include "SRC_ctrl.h"
23 #include "TwoWire.h"
24 #include "T803_Util.h"
25 #include "TW803Reg.h"
26 #include "OSDCtrl.h"
27 #include "CfgDsply.h"
28 #include "OSDDraw.h"
29 #include "Display.h"
30 #include "modetbl.h"
31 #include "Resolution.h"
32 #include "MyMath.h"
33 #include "Global.h"
34 #include "struct.h"
35 #ifdef NVRAM
36 #include "NVRam.h"
37 #endif
38 #include "ModeData.h"
39 #include "ModeCtrl.h"
40 #include "Auto.h"
41 #include "INIT.h"
42 uWORD wHPeriodCount;
43
44 #ifdef PC_MODE
45
46 BOOL ModeDetect(void)
47 {
48 1 uCHAR cTotalModes;
49 1 uCHAR cTotalFound;
50 1 uDWORD dwModeListMask=0;
51 1
52 1 uCHAR cPolarity;
53 1
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 2
54 1 m_cModeStatus = 0;
55 1 EepPrivate.cAltID = 0xFF;
56 1 EepPrivate.wHOffset = 0;
57 1 EepPrivate.wVOffset = 0;
58 1 m_bAlt = 0;
59 1 m_wVTotal = 0;
60 1 m_bDosMode = 0;
61 1 m_bDigital=0;
62 1 m_dwBuff[0]=GetInputVSyncXclkCnt();
63 1 GetModeInfo(&m_wVTotal, &wHPeriodCount, m_dwBuff[0]);
64 1
65 1 if(m_wVTotal < VTOTAL_MIN || wHPeriodCount > HPERIOD_MAX)
66 1 {
67 2 m_cModeStatus = SYNCERROR; //unreasonable result, sync error
68 2 return FALSE;
69 2 }
70 1
71 1 cPolarity=McPolDetect();
72 1
73 1
74 1 m_dwBuff[0] = 0; //Clear Modes List
75 1
76 1 m_cBuff[0] = NUMINTERLACED;
77 1 m_cBuff[1] = TOTALMODES;
78 1 EepPrivate.cModeID = m_cBuff[0];
79 1 m_cBuff[2] = EepPrivate.cModeID;
80 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
81 1 while ((m_wVTotal >= m_pModeDescriptorPtr->wVTotal) && (EepPrivate.cModeID <= m_cBuff[1]))
82 1 {
83 2 if(ModeTable[m_cBuff[2]].wVTotal<m_pModeDescriptorPtr->wVTotal) m_cBuff[2] = EepPrivate.cModeID;
84 2 EepPrivate.cModeID++;
85 2 m_pModeDescriptorPtr++;
86 2 }
87 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
88 1 m_cBuff[3] = EepPrivate.cModeID;
89 1 while ((ModeTable[m_cBuff[3]].wVTotal == m_pModeDescriptorPtr->wVTotal) && (EepPrivate.cModeID <= m_cBuff
-[1]))
90 1 {
91 2 //if(ModeTable[m_cBuff[3]].wVTotal<m_pModeDescriptorPtr->wVTotal)
92 2 m_cBuff[3] = EepPrivate.cModeID;
93 2 EepPrivate.cModeID++;
94 2 m_pModeDescriptorPtr++;
95 2 }
96 1 EepPrivate.cModeID = --m_cBuff[2];
97 1 m_pModeDescriptorPtr = &ModeTable[m_cBuff[2]];
98 1 while ((ModeTable[m_cBuff[2]].wVTotal == m_pModeDescriptorPtr->wVTotal) && (EepPrivate.cModeID >=0))
99 1 {
100 2 //if(ModeTable[m_cBuff[2]].wVTotal<m_pModeDescriptorPtr->wVTotal)
101 2 m_cBuff[2] = EepPrivate.cModeID;
102 2 EepPrivate.cModeID--;
103 2 m_pModeDescriptorPtr--;
104 2 }
105 1
106 1 //m_cBuff[3] = EepPrivate.cModeID-1;
107 1 dwModeListMask = 1;
108 1 EepPrivate.cModeID = m_cBuff[2];
109 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
110 1
111 1
112 1 //Search through this Lower to Upper Bound range, if the polarity is same,
113 1 //only keep the mode in the list
114 1
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 3
115 1 cTotalModes=0;
116 1 cTotalFound=0;
117 1 m_wBuff[0]=0;
118 1 for (EepPrivate.cModeID = m_cBuff[2]; EepPrivate.cModeID <= m_cBuff[3]; EepPrivate.cModeID++, dwModeListM
-ask<<=1, m_pModeDescriptorPtr++)
119 1 {
120 2 if(cPolarity==(m_pModeDescriptorPtr->cModeFlags0& SYNC_POLARITY))
121 2 {
122 3 if(cTotalFound==0)
123 3 {
124 4 cTotalFound ++;
125 4 m_dwBuff[1] = dwModeListMask;
126 4 m_cBuff[0]=EepPrivate.cModeID; //New Lower Bound
127 4 }
128 3 else
129 3 {
130 4 m_dwBuff[1] |= dwModeListMask;
131 4 cTotalFound++;
132 4 }
133 3 }
134 2 }
135 1 cTotalModes = cTotalFound;
136 1 if(cTotalFound==0) return FALSE;
137 1 EepPrivate.cModeID = m_cBuff[0]; //Move to new lower bound
138 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
139 1 m_dwBuff[0] = m_dwBuff[1];
140 1 m_dwBuff[1] = 0;
141 1
142 1 //For each remaining mode find the mode with the lowest accuracy value
143 1 if (cTotalModes > 1)
144 1 {
145 2 m_wBuff[0] = 0xffff;
146 2 dwModeListMask = 1L;
147 2 dwModeListMask <<= (EepPrivate.cModeID - m_cBuff[2]);
148 2 cTotalFound = 0;
149 2 //start from new lower bound
150 2 for (EepPrivate.cModeID = m_cBuff[0]; EepPrivate.cModeID <= m_cBuff[3]; EepPrivate.cModeID++, dwModeList
-Mask <<=1, m_pModeDescriptorPtr++)
151 2 {
152 3 if (m_dwBuff[0] & dwModeListMask)
153 3 {
154 4 if (abs( (unsigned int)(m_pModeDescriptorPtr->wVTotal - m_wVTotal)) <=VLINE_TOLERANCE
155 4 && abs((unsigned int)(m_pModeDescriptorPtr->wHPeriodCount - wHPeriodCount))
156 4 <=m_pModeDescriptorPtr->wHPeriodCount*HSYNC_TOLERANCE)
157 4 {
158 5 if ((m_wBuff[1] = (abs((unsigned int)(m_pModeDescriptorPtr->wVTotal - m_wVTotal)))*32 +
159 5 (abs((unsigned int)(m_pModeDescriptorPtr->wHPeriodCount - wHPeriodCount))))
160 5 <= m_wBuff[0])
161 5 {
162 6 if (m_wBuff[1]==m_wBuff[0])
163 6 {
164 7 m_dwBuff[1] |= dwModeListMask;
165 7 cTotalFound++;
166 7 }
167 6 else
168 6 {
169 7 cTotalFound = 1;
170 7 m_dwBuff[1] = dwModeListMask;
171 7 m_wBuff[0] = m_wBuff[1];
172 7 m_cBuff[0] = EepPrivate.cModeID; //New Lower Bound
173 7 }
174 6 }
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 4
175 5 }
176 4 }
177 3 }
178 2 if(cTotalFound==0) //Error
179 2 {
180 3 EepPrivate.cModeID = m_cBuff[0];
181 3 m_cModeStatus = OVERRANGE;
182 3 return FALSE;
183 3 }
184 2 else
185 2 cTotalModes = cTotalFound;
186 2 }
187 1 EepPrivate.cModeID = m_cBuff[0];
188 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
189 1 m_dwBuff[0] = m_dwBuff[1];
190 1 m_dwBuff[1] = 0;
191 1
192 1 //If still more than 1 mode left, for each remaining mode find the mode with closest HPeriod
193 1 //If only one mode left, mode detect done
194 1 if (cTotalModes > 1)
195 1 {
196 2 m_wBuff[0] = 0xffff;
197 2 dwModeListMask = 1;
198 2 dwModeListMask <<= (EepPrivate.cModeID - m_cBuff[2]);
199 2 cTotalFound = 0;
200 2 for (EepPrivate.cModeID = m_cBuff[0]; EepPrivate.cModeID <= m_cBuff[3]; EepPrivate.cModeID++, dwModeList
-Mask<<=1, m_pModeDescriptorPtr++)
201 2 {
202 3 if (m_dwBuff[0] & dwModeListMask)
203 3 {
204 4 if (m_wBuff[1] = (abs(m_pModeDescriptorPtr->wHPeriodCount - wHPeriodCount)) <= m_wBuff[0])
205 4 {
206 5 if (m_wBuff[1]==m_wBuff[0])
207 5 {
208 6 m_dwBuff[1] |= dwModeListMask;
209 6 cTotalFound++;
210 6 }
211 5 else
212 5 {
213 6 cTotalFound = 1;
214 6 m_dwBuff[1] = dwModeListMask;
215 6 m_wBuff[0] = m_wBuff[1];
216 6 m_cBuff[0] = EepPrivate.cModeID;
217 6 }
218 5 }
219 4 }
220 3 }
221 2 cTotalModes = cTotalFound;
222 2 }
223 1
224 1
225 1 EepPrivate.cModeID = m_cBuff[0];
226 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
227 1 m_dwBuff[0] = m_dwBuff[1];
228 1 m_dwBuff[1] = 0;
229 1
230 1 if (cTotalModes > 1)
231 1 {
232 2 m_wBuff[0] = 0xffff;
233 2 cTotalFound = 0;
234 2 dwModeListMask = 1;
235 2 dwModeListMask <<= (EepPrivate.cModeID - m_cBuff[2]);
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 5
236 2 for (EepPrivate.cModeID = m_cBuff[0]; EepPrivate.cModeID <= m_cBuff[3]; EepPrivate.cModeID++, dwModeList
-Mask <<= 1, m_pModeDescriptorPtr++)
237 2 {
238 3 if (m_dwBuff[0] & dwModeListMask)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -