⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msvd.lst

📁 Maria2 CarTV 20060707 Tony
💻 LST
📖 第 1 页 / 共 5 页
字号:
                  {
                      g_msVD_Patch004_StableCounter = 0;
                  }
              }
              #endif
1111          
1112          #ifdef VD_PATCH_005
              XDATA BYTE g_msVD_Patch005_VDAbnormalCounter;
              void msVD_Patch_005( BYTE ucResetTime )
              {
                  if( ucResetTime )
                  {
                      g_msVD_Patch005_VDAbnormalCounter = 0;
                      g_msVD_Patch005_Timer = ucResetTime;
                  }
                  else
                  {
                      BYTE ucScalerStatus;
              
                      if( g_msVD_Patch005_Timer )
                          return;
                      g_msVD_Patch005_Timer = 10;
              
                      ucScalerStatus = msVDCheckScalerStatus(0);
                      if( ucScalerStatus != 0 )
                      {
                          g_msVD_Patch005_VDAbnormalCounter ++;
                          if( g_msVD_Patch005_VDAbnormalCounter > 3 )
                          {
                              g_msVD_Patch005_VDAbnormalCounter = 0;
                              putstr("\r\n=====VD output abnormally=====");
                              // Reset VD
                              msVD_FSM_Reset();
                          }
                      }
                      else
C51 COMPILER V8.01   MSVD                                                                  11/28/2006 08:08:13 PAGE 20  

                      {
                          g_msVD_Patch005_VDAbnormalCounter = 0;
                      }
                  }
              }
              #endif
1148          
1149          void msVDCombLineBufferCtl( BYTE flag )
1150          {
1151   1          BYTE ucBank = msReadByte( BK0_00_REGBK);
1152   1      
1153   1          msWriteByte( BK0_00_REGBK, REG_BANK3_COMB);
1154   1      
1155   1          if( flag == MSVD_COMB_LINE_BUFFER_CTL_HW_AUTO )
1156   1          {
1157   2              msWriteByteMask(BK3_50, 0x07, 0x07); // Line buffer free run mode: Auto
1158   2          }
1159   1          else
1160   1          {
1161   2              bit bCurLineLockStatus = 0;
1162   2      
1163   2              msWriteByte( BK0_00_REGBK, REG_BANK2_VD);
1164   2      
1165   2              // Get line lock status
1166   2              if( msVDDSPReadByte( 0x21 )&_BIT7 )
1167   2                  bCurLineLockStatus = 1;
1168   2      
1169   2              msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
1170   2              if( bCurLineLockStatus ) // Current is line lock mode
1171   2              {
1172   3                  if( (g_VdInfo.wVideoStatus&VD_FSC_TYPE) == VD_FSC_4XXX ) // PAL/NTSC443/SECAM
1173   3                      msWriteByteMask(BK3_50, 0x05, 0x07); // Line buffer free run mode: Decided by register
1174   3                  else // NTSC
1175   3                      msWriteByteMask(BK3_50, 0x02, 0x07); // Line buffer free run mode: Decided by register
1176   3              }
1177   2              else // Current is not line lock mode
1178   2              {
1179   3                  if( IsAVInUse()&&(g_VdInfo.ucVideoSystem == SIG_NTSC_443) )
1180   3                  {
1181   4                      msWriteByteMask(BK3_50, 0x06, 0x07); // Line buffer free run mode: Decided by register
1182   4                      msWriteByte( BK3_52, 0x67 ); // H return position L
1183   4                      msWriteByte( BK3_53, 0x04 ); // H return position H
1184   4                  }
1185   3                  else
1186   3                  {
1187   4                      WORD wHTotal;
1188   4      
1189   4                      msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
1190   4                      wHTotal = msVDDSPRead2Bytes( DSP_3C );
1191   4                      //printf("\r\nAFEC:HTotal:%d", wHTotal);
1192   4      
1193   4                      msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
1194   4                      if( wHTotal > 1151 )
1195   4                      {
1196   5                          // Force 1151 pixel
1197   5                          msWriteByteMask(BK3_50, 0x06, 0x07); // Line buffer free run mode: Decided by register
1198   5                          msWriteByte( BK3_52, 0x7F ); // H return position L
1199   5                          msWriteByte( BK3_53, 0x04 ); // H return position H
1200   5                      }
1201   4                      else
1202   4                      {
1203   5                          msWriteByteMask(BK3_50, 0x07, 0x07); // Line buffer free run mode: Auto
C51 COMPILER V8.01   MSVD                                                                  11/28/2006 08:08:13 PAGE 21  

1204   5                          //msWriteByte( BK3_52, 0x8E ); // H return position L
1205   5                          //msWriteByte( BK3_53, 0x03 ); // H return position H
1206   5                      }
1207   4                  }
1208   3              }
1209   2          }
1210   1      
1211   1          msWriteByte( BK0_00_REGBK, ucBank );
1212   1      }
1213          
1214          void msVDNoiseHandlerInit(void)
1215          {
1216   1          BYTE ucBank;
1217   1          WORD wTmp;
1218   1      
1219   1          ucBank = msReadByte( BK0_00_REGBK );
1220   1          msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
1221   1      
1222   1          wTmp = msVDDSPRead2Bytes(DSP_10);
1223   1      
1224   1          wTmp |= 0x0080;
1225   1          msVDDSPWriteByte(DSP_10, wTmp);
1226   1          msVDDSPWriteByte(DSP_10+1, wTmp>>8);
1227   1      
1228   1          msVDNoiseHandlerReset();
1229   1      
1230   1          msWriteByte( BK0_00_REGBK, ucBank );
1231   1      }
1232          
1233          void msVDNoiseHandlerReset(void)
1234          {
1235   1          BYTE ucBank;
1236   1      
1237   1          ucBank = msReadByte( BK0_00_REGBK);
1238   1          msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
1239   1      
1240   1          g_ucNoiseDebounce = 0;
1241   1          bNoisy_Det = 0;
1242   1          bLastNoisyStatus = bNoisy_Det;
1243   1      
1244   1          msVDDSPWriteByte( DSP_84, msVDDSPReadByte(DSP_84)&(~_BIT1) ); // Clean mode
1245   1          msWriteByteMask( BK2_38_VSTROBE_LIMIT, 0x03, 0x07 );
1246   1          msWriteByteMask( BK2_97_EDGES_CLEAN_TH, 0x00, 0xC0 );
1247   1          msWriteByte( BK2_73_INI_CTRL2, 0x10 ); // V-Slice=2/8,H-Slice=4/8
1248   1          msWriteByte( BK2_79_656_HDES1, 0x17 );
1249   1          msWriteByte( BK2_7A, 0x20 );
1250   1      
1251   1          msWriteByte( BK0_00_REGBK, REG_BANK3_COMB );
1252   1          if( g_VdInfo.ucVideoSystem != SIG_SECAM )
1253   1          {
1254   2              msWriteByteMask( BK3_6F_MAX_CRMA, 0x00, 0x03 ); // Cb/Cr low pass mode
1255   2          }
1256   1          g_ucMSVDNoiseHandlerTimer = 200;
1257   1      
1258   1          msWriteByte( BK0_00_REGBK, ucBank );
1259   1      }
1260          
1261          void msVDNoiseHandler(void)
1262          {
1263   1          BYTE ucBank;
1264   1          WORD wNoiseMag;
1265   1      
C51 COMPILER V8.01   MSVD                                                                  11/28/2006 08:08:13 PAGE 22  

1266   1          if( g_ucMSVDNoiseHandlerTimer )
1267   1              return;
1268   1      
1269   1          g_ucMSVDNoiseHandlerTimer = 20;
1270   1      
1271   1          ucBank = msReadByte( BK0_00_REGBK);
1272   1          msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
1273   1      
1274   1          // Noise detection ...
1275   1      
1276   1          //wNoiseMag = msDSP_Std_GetNoiseMag();
1277   1          wNoiseMag = msVDDSPReadByte( DSP_2A );
1278   1          if( g_ucNoiseDebounce < 30 )
1279   1          {
1280   2              if( wNoiseMag > 0x40 )
1281   2                  g_ucNoiseDebounce += 4;
1282   2              else if( wNoiseMag >= 0x30 )
1283   2                  g_ucNoiseDebounce += 2;
1284   2              else if( wNoiseMag > 0x28 )
1285   2                  g_ucNoiseDebounce ++;
1286   2          }
1287   1          if( g_ucNoiseDebounce != 0 )
1288   1          {
1289   2              if( wNoiseMag < 0x10 )
1290   2              {
1291   3                  if( g_ucNoiseDebounce < 6 )
1292   3                      g_ucNoiseDebounce = 0;
1293   3                  else
1294   3                      g_ucNoiseDebounce -= 6;
1295   3              }
1296   2              else if( wNoiseMag < 0x20 )
1297   2                  g_ucNoiseDebounce --;
1298   2          }
1299   1      
1300   1          if( g_ucNoiseDebounce >= 30 )
1301   1          {
1302   2              bNoisy_Det = 1;
1303   2          }
1304   1          else if( g_ucNoiseDebounce == 0 )
1305   1          {
1306   2              bNoisy_Det = 0;
1307   2          }
1308   1      
1309   1          if( bLastNoisyStatus != bNoisy_Det )
1310   1          {
1311   2              if( bNoisy_Det ) // Noise mode
1312   2              {
1313   3                  putstr("\r\nNoise mode");
1314   3                  msVDDSPWriteByte( DSP_84, msVDDSPReadByte(DSP_84)|(_BIT1) ); // Noise mode
1315   3                  msWriteByteMask( BK2_38_VSTROBE_LIMIT, 0x07, 0x07 );
1316   3                  msWriteByteMask( BK2_97_EDGES_CLEAN_TH, 0x80, 0xC0 ); // [7:6]='10' (slice input IIR8)
1317   3                  msWriteByte( BK2_73_INI_CTRL2, 0xF0 ); // V-Slice=6/8,H-Slice=6/8
1318   3                  msWriteByte( BK2_79_656_HDES1, 0x16 );
1319   3                  msWriteByte( BK2_7A, 0xA0 ); // HDES
1320   3      
1321   3                  if( g_VdInfo.ucVideoSystem != SIG_SECAM )
1322   3                  {
1323   4                      msWriteByte( BK0_00_REGBK, REG_BANK3_COMB );
1324   4                      msWriteByteMask( BK3_6F_MAX_CRMA, 0x03, 0x03 ); // Cb/Cr low pass mode
1325   4                  }
1326   3              }
1327   2              else // Clean mode
C51 COMPILER V8.01   MSVD                                                                  11/28/2006 08:08:13 PAGE 23  

1328   2              {
1329   3                  putstr("\r\nClean mode");
1330   3                  msVDDSPWriteByte( DSP_84, msVDDSPReadByte(DSP_84)&(~_BIT1) ); // Clean mode
1331   3                  msWriteByteMask( BK2_38_VSTROBE_LIMIT, 0x03, 0x07 );
1332   3                  msWriteByteMask( BK2_97_EDGES_CLEAN_TH, 0x00, 0xC0 ); // [7:6] = '00' (slice input CCTRAP)
1333   3                  msWriteByte( BK2_73_INI_CTRL2, 0x10 ); // V-Slice=2/8,H-Slice=4/8
1334   3                  msWriteByte( BK2_79_656_HDES1, 0x18 );
1335   3                  msWriteByte( BK2_7A, 0x20 ); // HDES
1336   3      
1337   3                  if( g_VdInfo.ucVideoSystem != SIG_SECAM )
1338   3                  {
1339   4                      msWriteByte( BK0_00_REGBK, REG_BANK3_COMB );
1340   4                      msWriteByteMask( BK3_6F_MAX_CRMA, 0x00, 0x03 ); // Cb/Cr low pass mode
1341   4                  }
1342   3              }
1343   2              bLastNoisyStatus = bNoisy_Det;
1344   2          }
1345   1      
1346   1          msWriteByte( BK0_00_REGBK, ucBank );
1347   1      }
1348          
1349          ///////////////////////////////////////////////////////////////////////////////////////////////////
1350          void msVDCombHandler(void)
1351          {
1352   1          BYTE ucBank;
1353   1          WORD wHTotalDiff;
1354   1      
1355   1      //    if( g_ucMsVDCombHandler_Timer )
1356   1      //        return;
1357   1      
1358   1      //    g_ucMsVDCombHandler_Timer = 100;
1359   1      
1360   1          ucBank = msReadByte( BK0_00_REGBK);
1361   1      
1362   1          msWriteByte( BK0_00_REGBK, REG_BANK2_VD);
1363   1      
1364   1          wHTotalDiff = abs( msVDDSPRead2Bytes( 0x3C ) - tVideoSystemStdHTotal[g_VdInfo.ucVideoSystem] );
1365   1      
1366   1          msWriteByte( BK0_00_REGBK, REG_BANK3_COMB);
1367   1          if( (msReadByte( BK3_10_COMBCFGA)&3) == 2 ) // Current is 2D
1368   1          {
1369   2              if( wHTotalDiff >= 6 )
1370   2                  msWriteByteMask(BK3_10_COMBCFGA, 0x01, 0x07); // Switch to 1D
1371   2          }
1372   1          else // Current is 1D
1373   1          {
1374   2              if( wHTotalDiff <= 4 )
1375   2                  msWriteByteMask(BK3_10_COMBCFGA, 0x02, 0x07); // Switch to 2D
1376   2          }
1377   1      
1378   1          if( g_ucmsVDCtl&MSVD_CTL_FLAG_COMB_LINE_BUF ) // For debug
1379   1              msVDCombLineBufferCtl( MSVD_COMB_LINE_BUFFER_CTL_SW );
1380   1      
1381   1          msWriteByte( BK0_00_REGBK, ucBank );
1382   1      }
1383          
1384          
1385          
1386          #if(ENABLE_VCR_HANDLER)
              BYTE msVDGetVCRFoundCounter(void)
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -