📄 mstar.lst
字号:
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 + -