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

📄 mstar.lst

📁 MSTARXX.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 868   1          msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
 869   1      /*
 870   1              printf("\r\nSCALING_H_IN=%d", SCALING_H_IN);
 871   1              printf("\r\nSCALING_H_OUT=%d", SCALING_H_OUT);
 872   1          printf("\r\nSCALING_V_IN=%d", SCALING_V_IN);
 873   1          printf("\r\nSCALING_V_OUT=%d", SCALING_V_OUT);
 874   1      */
 875   1          #if VGA_ENABLE
 876   1          if(IsVGAInUse())
 877   1              g_WindowInfo.V_DisSize = PanelHeight;
 878   1          else
 879   1          #endif
 880   1          g_WindowInfo.V_DisSize=PanelVSiEnd;
 881   1      
 882   1          // Horizontal
 883   1          if( SCALING_H_IN == SCALING_H_OUT )
 884   1          {
 885   2              dwTemp = 0;
 886   2              g_WindowInfo.H_SaclingRatioInfo = SCALING_RATIO_TYPE_NATIVE;
 887   2          }
 888   1          else
 889   1          {
 890   2              if( SCALING_H_IN < SCALING_H_OUT )
 891   2              {
 892   3                  g_WindowInfo.H_SaclingRatioInfo = SCALING_RATIO_TYPE_UP;
 893   3                  dwTemp = 0;
 894   3              }
 895   2              else // if( SCALING_H_IN > SCALING_H_OUT )
 896   2              {
 897   3                  g_WindowInfo.H_SaclingRatioInfo = SCALING_RATIO_TYPE_DOWN;
 898   3                  dwTemp = ScalingRatio_H( SCALING_H_IN, SCALING_H_OUT );
 899   3      
 900   3                              //printf("ScalingRatio_H===%x", dwTemp/0x100); //get high 2 bytes
 901   3                      if(IsVideoPortInUse())
 902   3                          dwTemp&=0xFFF000;
 903   3                  if( dwTemp > 0xFF000 )
 904   3                      dwTemp |= 0x800000;
 905   3                  else
 906   3                      dwTemp |= 0xC00000;
 907   3              }
 908   2          }
 909   1          msWrite3Bytes(BK0_32_SRH_H, dwTemp);
 910   1      
 911   1          // Vertical
 912   1          wInputVSize = SCALING_V_IN;
 913   1      
 914   1          if( bInterlace )
 915   1              wInputVSize = wInputVSize/2;
 916   1      
 917   1          if( wInputVSize == SCALING_V_OUT )
 918   1          {
 919   2              dwTemp = 0;
 920   2              g_WindowInfo.V_SaclingRatioInfo = SCALING_RATIO_TYPE_NATIVE;
 921   2          }
C51 COMPILER V8.18   MSTAR                                                                 09/29/2009 23:58:02 PAGE 16  

 922   1          else
 923   1          {
 924   2              if( wInputVSize < SCALING_V_OUT )
 925   2              {
 926   3                  g_WindowInfo.V_SaclingRatioInfo = SCALING_RATIO_TYPE_UP;
 927   3              }
 928   2              else // ( wInputVSize > SCALING_V_OUT ) // Scaling down
 929   2              {
 930   3                  g_WindowInfo.V_SaclingRatioInfo = SCALING_RATIO_TYPE_DOWN;
 931   3              #if(ENABLE_V_PRE_SCALING_DOWN)
 932   3                  g_WindowInfo.V_SaclingRatioInfo |= SCALING_RATIO_FLAG_PRE;
 933   3              #endif
 934   3              }
 935   2      
 936   2              #if (ENABLE_V_PRE_SCALING_DOWN)&&(!WidePanel)
                      if( g_WindowInfo.V_SaclingRatioInfo&SCALING_RATIO_FLAG_PRE )
                      {
                          dwTemp = PRE_SCALING_RATIO_V( SCALING_V_IN, SCALING_V_OUT );
                          if( bInterlace )
                              dwTemp = dwTemp<<1;
                          dwTemp |= 0xC00000;
                      }
                      else
                      #endif
 946   2              {
 947   3                  dwTemp = ScalingRatio_V( SCALING_V_IN, SCALING_V_OUT );
 948   3                  if( bInterlace )
 949   3                      dwTemp = (dwTemp+1)>>1;
 950   3      
 951   3                  if( dwTemp>0x3FFFFF)
 952   3                  {
 953   4                      dwTemp = 0x3FFFFF;
 954   4                  }
 955   3                  dwTemp &= 0x3FFFFF;
 956   3                  dwTemp |= 0x800000;
 957   3              }
 958   2          }
 959   1          //printf("\r\nVScaleRatio=0x%xXX", dwTemp>>8);
 960   1      
 961   1          msWrite3Bytes(BK0_35_SRV_H, dwTemp);
 962   1      
 963   1      #if(ENABLE_V_PRE_SCALING_DOWN)
 964   1          if ((g_WindowInfo.V_SaclingRatioInfo&SCALING_RATIO_FLAG_PRE) && (!bInterlace))
 965   1          {
 966   2              msWriteBit( BK0_C3, 1, _BIT6 );
 967   2          }
 968   1          else
 969   1          {
 970   2              msWriteBit( BK0_C3, 0, _BIT6 );
 971   2          }
 972   1      #endif
 973   1      
 974   1          msWriteByte(BK0_00_REGBK, ucBank); // recovery bank
 975   1      }
 976          
 977          void CalculateAspectRatio(void)
 978          {
 979   1      #if(ENABLE_OVER_SCAN)
 980   1          WORD wTemp;
 981   1          BYTE ucOverScanH;
 982   1          BYTE ucOverScanV;
 983   1      
C51 COMPILER V8.18   MSTAR                                                                 09/29/2009 23:58:02 PAGE 17  

 984   1          // Get over scan ratio
 985   1          ucOverScanH = g_ucOverScanH;
 986   1          ucOverScanV = g_ucOverScanV;
 987   1      
 988   1          // Cal Over scan
 989   1          if( ucOverScanH )
 990   1          {
 991   2              wTemp = (DWORD)g_WindowInfo.H_CapSize * g_ucOverScanH / 1000;
 992   2              //g_WindowInfo.H_CapStart += wTemp;
 993   2              g_WindowInfo.H_CapSize = (g_WindowInfo.H_CapSize - 2 * wTemp);
 994   2          }
 995   1      
 996   1          if( ucOverScanV )
 997   1          {
 998   2              wTemp = (DWORD)g_WindowInfo.V_CapSize * g_ucOverScanV / 1000;
 999   2              //g_WindowInfo.V_CapStart += wTemp;
1000   2              g_WindowInfo.V_CapSize = (g_WindowInfo.V_CapSize - 2 * wTemp);
1001   2          }
1002   1      #endif
1003   1      }
1004          
1005          void msSetupFreeRunMode( BYTE ucVFreq )
1006          {
1007   1          BYTE ucBank; // bank buffer
1008   1      
1009   1          ucBank = msReadByte(BK0_00_REGBK); // backup bank
1010   1          msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
1011   1          //printf("\r\nSetFreeRunMode(%d)", ucVFreq);
1012   1      
1013   1          g_InOutCtl.inOutVFreq = ucVFreq;
1014   1      
1015   1          SetDisplayWindow();
1016   1      
1017   1          msSetOutputTiming( OUTPUT_FREERUN );
1018   1          msWriteRegsTbl(tFreeRunModeTbl);
1019   1      
1020   1          Set_FreeRunModeFlag();
1021   1      
1022   1          msWriteByte (BK0_00_REGBK, ucBank); // recovery bank
1023   1      }
1024          
1025          void msSetOutputTiming( BYTE ucOutputTimingCtl )
1026          {
1027   1          BYTE ucBank; // bank buffer
1028   1      
1029   1          ucBank = msReadByte(BK0_00_REGBK); // store bank
1030   1      
1031   1          //printf("\r\nmsSetOutputTiming(%x)", ucOutputTimingCtl);
1032   1      
1033   1          msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
1034   1      
1035   1          msSetOutputSyncControl( ucOutputTimingCtl );
1036   1      
1037   1          if( ucOutputTimingCtl&OUTPUT_FREERUN )
1038   1          {
1039   2              msWriteWord(BK0_4F_VDTOT_H, PanelVTotal - 1);  // output vtotal
1040   2              msWriteWord(BK0_55_HDTOT_H, PanelHTotal - 1);  // output htotal
1041   2          }
1042   1          else
1043   1          {
1044   2              //msWriteWord(BK0_4F_VDTOT_H, 0x7FF); // output vtotal
1045   2          }
C51 COMPILER V8.18   MSTAR                                                                 09/29/2009 23:58:02 PAGE 18  

1046   1      
1047   1          SetOutputClock( ucOutputTimingCtl );
1048   1      
1049   1          msWriteByte(BK0_00_REGBK, ucBank);
1050   1      }
1051          
1052          void SetCaptureWindow()
1053          {
1054   1          BYTE ucBank;
1055   1      
1056   1          ucBank = msReadByte(BK0_00_REGBK); // store bank
1057   1      
1058   1          msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
1059   1          #if VGA_ENABLE
1060   1          if (IsVGAInUse())
1061   1          {
1062   2              msWriteWord(BK0_06_SPRVST_H, g_ModeSetting.VStart);
1063   2              msWriteWord(BK0_08_SPRHST_H, g_ModeSetting.HStart);
1064   2          }
1065   1          else
1066   1          #endif
1067   1          {
1068   2      
1069   2              msWriteWord(BK0_06_SPRVST_H, g_WindowInfo.V_CapStart);
1070   2              msWriteWord(BK0_08_SPRHST_H, g_WindowInfo.H_CapStart);
1071   2          }
1072   1          msWriteWord(BK0_0A_SPRVDC_H, g_WindowInfo.V_CapSize);
1073   1          msWriteWord(BK0_0C_SPRHDC_H, g_WindowInfo.H_CapSize+8);
1074   1      
1075   1      #if(ENABLE_MONITOR_VTOTAL)
                  if( IsVideoPortInUse() )
                      msMonitorVTotal( 1 ); // Init
              #endif
1079   1      
1080   1          msWriteByte(BK0_00_REGBK, ucBank); // recovery bank
1081   1      }
1082          
1083          void SetDisplayWindow()
1084          {
1085   1          BYTE ucBank; // bank buffer
1086   1      
1087   1          ucBank = msReadByte(BK0_00_REGBK); // store bank
1088   1      
1089   1          msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
1090   1      
1091   1          msWriteWord(BK0_49_SIHST_H, PanelHStart); // Image H start
1092   1          msWriteWord(BK0_4D_SIHEND_H, PanelHStart + PanelWidth - 1); // Image H end
1093   1      
1094   1          msWriteWord(BK0_41_VFDEST_H, PANEL_DE_VSTART); // DE V start
1095   1      
1096   1          if(IsVGAInUse())
1097   1              {
1098   2                  msWriteWord(BK0_45_VFDEEND_H, PanelHeight-1);
1099   2                  msWriteWord(BK0_4B_SIVEND_H, PanelHeight-1);
1100   2              }
1101   1          else
1102   1              {
1103   2                  msWriteWord(BK0_45_VFDEEND_H, PanelVdeEnd-1);
1104   2                  msWriteWord(BK0_4B_SIVEND_H, PanelVSiEnd-1);
1105   2              }
1106   1      
1107   1      
C51 COMPILER V8.18   MSTAR                                                                 09/29/2009 23:58:02 PAGE 19  

1108   1          msWriteByte(BK0_00_REGBK, ucBank); // recovery bank
1109   1      }
1110          
1111          void msProgDigitalWin( BYTE ucOutputTimingCtl )
1112          {
1113   1          BYTE ucVideoSystem;
1114   1          //printf("\r\nmsProgDigitalWin(),%d", g_wCRT_OutVFreq);
1115   1      
1116   1          if( IsSrcHasSignal() && ((ucOutputTimingCtl&3)==0))
1117   1          {
1118   2              ucVideoSystem = g_VdInfo.ucVideoSystem;
1119   2          }
1120   1          else // No signal or Freerun
1121   1          {
1122   2              if( g_InOutCtl.inOutVFreq == 50)
1123   2                  ucVideoSystem = SIG_PAL;
1124   2              else
1125   2                  ucVideoSystem = SIG_NTSC;
1126   2          }
1127   1      
1128   1      
1129   1          g_WindowInfo.H_CapStart= tMsVDCapture[ucVideoSystem].VideoHStart;
1130   1          g_WindowInfo.V_CapStart = tMsVDCapture[ucVideoSystem].VideoVStart;
1131   1          g_WindowInfo.H_CapSize = tMsVDCapture[ucVideoSystem].HRange;
1132   1          g_WindowInfo.V_CapSize = tMsVDCapture[ucVideoSystem].VRange;
1133   1      
1134   1          if(IsSVideoInUse())
1135   1          {
1136   2              g_WindowInfo.H_CapStart=(BYTE)(g_WindowInfo.H_CapStart+tSvideoCaptureOffset[ucVideoSystem].SVideoH
             -StartOffset);
1137   2              g_WindowInfo.V_CapStart=(BYTE)(g_WindowInfo.V_CapStart+tSvideoCaptureOffset[ucVideoSystem].SVideoV
             -StartOffset);
1138   2          }
1139   1      
1140   1          CalculateAspectRatio();
1141   1      
1142   1          SetDisplayWindow();
1143   1      
1144   1          SetCaptureWindow();
1145   1          SetScalingRatio(1);
1146   1      }
1147          
1148          void msProgWindow( BYTE ucOutputTimingCtl )
1149          {
1150   1          #if VGA_ENABLE
1151   1          if( IsVGAInUse())
1152   1              msProgAnalogWin();
1153   1          else
1154   1          #endif
1155   1              msProgDigitalWin( ucOutputTimingCtl );
1156   1      }
1157          
1158          BOOL IsSrcHasSignal(void)
1159          {

⌨️ 快捷键说明

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