📄 mstar.lst
字号:
751 1 return tStandardMode[ucModeIdx].HTotal* 2;
752 1 else
753 1 return tStandardMode[ucModeIdx].HTotal;
754 1 }
755
756
757 WORD msCalculateHFreqX10( WORD wHPeriod )
758 {
759 1 return ((((DWORD)MST_CLOCK_KHZ * 10) + (wHPeriod / 2)) / wHPeriod); // kHz
760 1 }
761
762
763 BYTE msCalculateVSyncTime(void)
764 {
765 1 WORD wHFreqX10; // horizontal frequency
766 1
767 1 wHFreqX10 = msCalculateHFreqX10( (WORD)msGetHorizontalPeriod() ); // calculate HSync frequency
768 1 return (BYTE)((( (WORD)msGetVerticalTotal() * 10 ) + (wHFreqX10 / 2)) / wHFreqX10);
769 1 }
770
771 WORD msGetHorizontalPeriod(void)
772 {
773 1 WORD wHorizontalPeriod;
774 1 BYTE ucBank;
775 1
776 1 ucBank = msReadByte( BK0_00_REGBK);
777 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
778 1 wHorizontalPeriod = (msReadWord(BK0_EB_HSPRD_H) & MST_H_PERIOD_MASK);
779 1 msWriteByte( BK0_00_REGBK, ucBank );
780 1 return wHorizontalPeriod;
781 1 }
782
783 WORD msGetVerticalTotal(void)
784 {
785 1 WORD wVerticalTotal;
786 1 BYTE ucBank = msReadByte( BK0_00_REGBK);
787 1
788 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
789 1 wVerticalTotal = (msReadWord(BK0_ED_VTOTAL_H) & MST_V_TOTAL_MASK);
790 1
791 1 msWriteByte( BK0_00_REGBK, ucBank );
792 1 return wVerticalTotal;
793 1 }
794
795 void GetInputSignalHV(void)
796 {
797 1 #if VGA_ENABLE
C51 COMPILER V8.01 MSTAR 11/28/2006 08:08:06 PAGE 15
798 1 if( IsVGAInUse()) // PC/YPbPr
799 1 {
800 2 g_InOutCtl.inHPeriod = g_wHorizontalPeriod;
801 2 g_InOutCtl.inVTotal = g_wVerticalTotal;
802 2 }
803 1 else // CVBS/SV/656
804 1 #endif
805 1 {
806 2 g_InOutCtl.inHPeriod = msGetVideoHPeriod(2);
807 2 g_InOutCtl.inVTotal = msVDGetVTotal();
808 2 }
809 1 g_InOutCtl.inHFreq = MST_CLOCK_HZ/g_InOutCtl.inHPeriod;
810 1 g_InOutCtl.inOutVFreq = (g_InOutCtl.inHFreq+(g_InOutCtl.inVTotal/2))/g_InOutCtl.inVTotal;
811 1
812 1 if( g_InOutCtl.bInterlace )
813 1 g_InOutCtl.inOutVFreq *= 2;
814 1
815 1 //printf("\r\n\r\ninHP=%d",g_InOutCtl.inHPeriod);
816 1 //printf("\r\ninHF=%d",g_InOutCtl.inHFreq);
817 1 //printf("\r\ninVT=%d",g_InOutCtl.inVTotal);
818 1 //printf("\r\nInOutVFreq=%d", g_InOutCtl.inOutVFreq);
819 1 }
820
821 void msSetOutputSyncControl( BYTE ucOutputTimingCtl )
822 {
823 1 BYTE ucBk0_57;
824 1
825 1 ucBk0_57 = _BIT6; // Frame lock mode 1
826 1
827 1 #if (PANEL_SYNC_MODE_1)
*** WARNING C322 IN LINE 827 OF ..\..\kernal\mStar.c: unknown identifier
ucBk0_57 |= _BIT7; // Output v sync manually
#endif
830 1
831 1 #if (SCALING_FORMULA)
832 1 ucBk0_57 |= _BIT2; // Scaling range add 1
833 1 #endif
834 1
835 1 if( ucOutputTimingCtl&OUTPUT_FREERUN )
836 1 {
837 2 #if(ENABLE_CHECK_AUTO_H_TOTAL)
*** WARNING C322 IN LINE 837 OF ..\..\kernal\mStar.c: unknown identifier
g_bEnableAutoHTotal = 0;
#endif
840 2 }
841 1 else
842 1 {
843 2 if( IsVGAInUse()) // PC/YPBPR
844 2 {
845 3 ucBk0_57 |= _BIT1;
846 3 ucBk0_57 |= _BIT7;
847 3 }
848 2 else
849 2 {
850 3 #if(ENABLE_CHECK_AUTO_H_TOTAL)
*** WARNING C322 IN LINE 850 OF ..\..\kernal\mStar.c: unknown identifier
g_bEnableAutoHTotal = 0;
#else
853 3 ucBk0_57 |= _BIT1;
854 3 #endif
855 3 }
856 2 }
C51 COMPILER V8.01 MSTAR 11/28/2006 08:08:06 PAGE 16
857 1
858 1 msWriteByte_Bank_BackupBank( REG_BANK_SCALER, BK0_57_OSCTRL1, ucBk0_57 );
859 1 }
860
861 void SetScalingRatio( BOOL bInterlace )
862 {
863 1 BYTE ucBank; // bank buffer
864 1 DWORD dwTemp;
865 1 WORD wInputVSize;
866 1
867 1 ucBank = msReadByte(BK0_00_REGBK); // store bank
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;
*** ERROR C202 IN LINE 877 OF ..\..\KERNAL\MSTAR.C: 'PanelHeight': undefined identifier
878 1 else
879 1 #endif
880 1 g_WindowInfo.V_DisSize=PanelVSiEnd;
*** ERROR C202 IN LINE 880 OF ..\..\KERNAL\MSTAR.C: 'PanelVSiEnd': undefined identifier
881 1
882 1 // Horizontal
883 1 if( SCALING_H_IN == SCALING_H_OUT )
*** ERROR C202 IN LINE 883 OF ..\..\KERNAL\MSTAR.C: 'PanelWidth': undefined identifier
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 )
*** ERROR C202 IN LINE 890 OF ..\..\KERNAL\MSTAR.C: 'PanelWidth': undefined identifier
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 );
*** ERROR C202 IN LINE 898 OF ..\..\KERNAL\MSTAR.C: 'PanelWidth': undefined identifier
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
C51 COMPILER V8.01 MSTAR 11/28/2006 08:08:06 PAGE 17
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 }
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)
*** WARNING C322 IN LINE 936 OF ..\..\kernal\mStar.c: unknown identifier
937 2 if( g_WindowInfo.V_SaclingRatioInfo&SCALING_RATIO_FLAG_PRE )
938 2 {
939 3 dwTemp = PRE_SCALING_RATIO_V( SCALING_V_IN, SCALING_V_OUT );
940 3 if( bInterlace )
941 3 dwTemp = dwTemp<<1;
942 3 dwTemp |= 0xC00000;
943 3 }
944 2 else
945 2 #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
C51 COMPILER V8.01 MSTAR 11/28/2006 08:08:06 PAGE 18
975 1 }
976
977 void CalculateAspectRatio(void)
978 {
979 1 #if(ENABLE_OVER_SCAN)
*** WARNING C322 IN LINE 979 OF ..\..\kernal\mStar.c: unknown identifier
WORD wTemp;
BYTE ucOverScanH;
BYTE ucOverScanV;
// Get over scan ratio
ucOverScanH = g_ucOverScanH;
ucOverScanV = g_ucOverScanV;
// Cal Over scan
if( ucOverScanH )
{
wTemp = (DWORD)g_WindowInfo.H_CapSize * g_ucOverScanH / 1000;
//g_WindowInfo.H_CapStart += wTemp;
g_WindowInfo.H_CapSize = (g_WindowInfo.H_CapSize - 2 * wTemp);
}
if( ucOverScanV )
{
wTemp = (DWORD)g_WindowInfo.V_CapSize * g_ucOverScanV / 1000;
//g_WindowInfo.V_CapStart += wTemp;
g_WindowInfo.V_CapSize = (g_WindowInfo.V_CapSize - 2 * wTemp);
}
#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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -