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

📄 mode1

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻
📖 第 1 页 / 共 3 页
字号:
/************************************************
 *                                              *
 *      MODE.C:  Mosaic Display Mode routine    *
 *                                              *
 ************************************************/
#include <reg51.h>
#include <stddef.h>
#include "mosaic.h"
#include "osd.h"
//#include "mtv312.h"

#define SHCLK_DELAY     1       //SHCLK delay by 4 invertors(vs. 2)

#define PATCH_LEFTEDGE  0       //Turn on TDACLK to patch the left edge
                                //problem on 1024 70Hz/72Hz/75Hz

extern EepModeData idata eepModeData;
extern EepData idata eepData;

extern bit OSDEnabled;
extern bit PresetModeFlag;
extern bit NoInputFlag;
//extern bit MainOSDFlag;
extern bit OutWithBackground;  
bit FindNonPresetModeFlag = 0;

extern unsigned char idata  cursor;
extern unsigned char idata  mainPos;
extern unsigned char idata  subPos;

extern unsigned int idata  ival, ival1;
extern unsigned int idata HsyncCnt, VsyncCnt;

unsigned char data  CurrentMode = MODE_OVERFLOW;           // current mode #
char data  CurrentPolarity = -1;       	// current polarity
int  data  CurrentWidth = 0;           	// current screen width
int  data  CurrentHeight = 0;      		// current screen height


unsigned int  idata DefaultHstart;
unsigned char idata DefaultVstart;
unsigned int  idata DefaultPitch;
unsigned char idata DefaultPhase;
void powerSavingMode(void);
void modePatch(void);
void refreshOSD(void);

#if CHIMEI14_PATCH
bit modeAdjustHt(void);
#endif
//
//      Display Mode tables
//
#include "sharptbl.h"
#include "sam17tbl.h"
#include "shp18tbl.h"
#include "sam15tbl.h"           // default
#include "lg15tbl.h"
#include "lg150x2.h"
#include "lg151x4.h"
#include "cm14ntbl.h"
#include "cm14nc4.h"
#include "cm14mtbl.h"
#include "fuj15tbl.h"
#include "au15tbl.h"
#include "au15ez.h"
#include "ch15tbl.h"
//
//  ADC/TDA tables
//
#ifndef TDATBL_DEFINED
#include "phltda.h"
#include "mrtadc.h"
#if CZ5N6
#include "cz5n6.h"
#else
#include "mrtv2.h"
#endif

#endif //TDATBL_DEFINED


//
//      Display Mode Table
//
MODETBL code ModeTbl[] = {
 {Mode0Tbl, Mode0Tda, 640, 350,2      +PRESETMODE}, //0: 31.5KHz/70Hz +/- 28MHz: 640x350
#if SRC_TV
 {tvNTSCTbl,NULL,     640, 240,0+NOPOL}, //1: NTSC
#else
 {NULL,     NULL,     0,   0,  0      }, //1:
#endif
 {Mode2Tbl, Mode2Tda, 720, 400,1+NOPOL+PRESETMODE}, //2: 31.5KHz/70Hz -/+ 25MHz: 720x400
#if SRC_TV                    //david
 {tvPALTbl, NULL,     720, 286,0+NOPOL}, //3: PAL
#else
 {NULL,     NULL,     0,   0,  0      }, //3:
#endif
 {Mode4Tbl, Mode4Tda, 640, 480,3+NOPOL+PRESETMODE}, //4: 31.5KHz/60Hz -/- 25MHz: 640x480
 {Mode5Tbl, Mode5Tda, 640, 480,3+NOPOL+PRESETMODE}, //5: 37.9KHz/72Hz -/- 31.5MHz: 640x480
 {Mode6Tbl, Mode6Tda, 640, 480,3+NOPOL+PRESETMODE}, //6: 37.5KHz/75Hz -/- 31.5MHz: 640x480
 {Mode7Tbl, Mode7Tda, 640, 480,3+NOPOL}, //7: 43.3KHz/85Hz -/- 36MHz: 640x480
 {Mode8Tbl, Mode8Tda, 800, 600,0+NOPOL+PRESETMODE}, //8: 35.1KHz/56Hz +/+ 36MHz: 800x600
 {Mode9Tbl, Mode9Tda, 800, 600,0+NOPOL+PRESETMODE}, //9: 37.9KHz/60Hz +/+ 40MHz: 800x600
 {Mode10Tbl,Mode10Tda,800, 600,0+NOPOL+PRESETMODE}, //10:47.2KHz/72Hz +/+ 50MHz: 800x600
 {Mode11Tbl,Mode11Tda,800, 600,0+NOPOL+PRESETMODE}, //11:46.9KHz/75Hz +/+ 49.5MHz: 800x600
 {Mode12Tbl,Mode12Tda,1024,768,3+NOPOL+PRESETMODE}, //12:48.4KHz/60Hz -/- 65MHz: 1024x768
 {Mode13Tbl,Mode13Tda,1024,768,3+NOPOL+PRESETMODE}, //13:56.5KHz/70Hz -/- 75MHz: 1024x768
 {Mode14Tbl,Mode14Tda,1024,768,3+NOPOL}, //14:58.2KHz/72Hz -/- 77MHz: 1024x768
 {Mode15Tbl,Mode15Tda,1024,768,0+NOPOL+PRESETMODE}, //15:60.0KHz/75Hz +/+ 78.75MHz: 1024x768
 {Mode16Tbl,Mode16Tda,1024,768,0+NOPOL}, //16:68.7KHz/85Hz +/+ 94.5MHz: 1024x768
 {Mode17Tbl,Mode17Tda,800, 600,2+NOPOL}, //17:44.49KHz/70Hz +/- 44.85MHz: 800x600
 {Mode18Tbl,Mode18Tda,800, 600,0+NOPOL}, //18:53.7KHz/85Hz  +/+ 56.25MHz: 800x600
 {Mode19Tbl,Mode19Tda,800, 600,0+NOPOL}, //19:56.6KHz/90Hz  +/+ 56.6MHz: 800x600
 {Mode20Tbl,Mode20Tda,800, 600,0+NOPOL}, //20:63.9KHz/100Hz +/+ 67.5MHz: 800x600
 {Mode21Tbl,Mode21Tda,640, 480,3+NOPOL}, //21:48.0KHz/90Hz  -/- 39.9MHz: 640x480
 {Mode22Tbl,Mode22Tda,640, 480,3+NOPOL}, //22:52.9KHz/100Hz -/- 44.9MHz: 640x480
 {Mode23Tbl,Mode23Tda,1024,768/2,0+NOPOL},//23:35.5KHz/87Hz(43i) +/+ 44.9MHz: 1024x768
 {Mode24Tbl,Mode24Tda,1024,768,3+NOPOL}, //24:72.6KHz/90Hz +/+  100MHz: 1024x768
 {Mode25Tbl,Mode25Tda,640, 480,1+NOPOL}, //25:35.0KHz 66.7Hz +/-,640x480 66.7Hz MAC-II
 {Mode26Tbl,Mode26Tda,640, 350,2      }, //26:37.861KHz 84.136Hz +/-, 640x350 84Hz
 {Mode27Tbl,Mode27Tda,640, 400,1      }, //27:37.861KHz 84.136Hz -/+, 640x400 84Hz
 {Mode28Tbl,Mode28Tda,640, 480,3+NOPOL}, //28:34.69KHz/70Hz -/- 25MHz: 640x480 70Hz
 {Mode29Tbl,Mode29Tda,832, 624,3+NOPOL}, //29:49.725KHz/74.5Hz -/- 57.3MHz: 832x624
 {Mode30Tbl,Mode30Tda,1024,768,3+NOPOL}, //30:60.15KHz/74.72Hz -/- 80 MHz: 1024x768
 {Mode31Tbl,Mode31Tda,640, 400,3+NOPOL}, //31:24.827KHz 56.424Hz -/-, 640x400 56Hz PC9801
 {Mode32Tbl,Mode32Tda,1024,768,3+NOPOL}, //32:KHz/100Hz +/+  MHz: 1024x768
 {Mode33Tbl,Mode33Tda,640, 400,3      }, //33:31.5Hz 70Hz -/-, 640x400 70Hz
 {Mode34Tbl,Mode34Tda,800, 600,3+NOPOL}, //34:48.83K/66.89Hz -/- 50 MHz: 800x600 66Hz (MAC)
 {Mode35Tbl,Mode35Tda,640, 400,0+NOPOL}, //35:26.36KHz 59.9Hz +/+, 640x400 60Hz //DAVID
 {Mode36Tbl,Mode36Tda,1024,768,0+NOPOL}  //36:35.5KHz 43.4Hz +/+, 1024x768 43Hz //DAVID
,{Mode37Tbl,Mode37Tda,640, 377,0+NOPOL}  //37:29.58kz 73.1Hz +/+, 640x377 73Hz //DAVID
,{Mode38Tbl,Mode38Tda,1280,1024,0+NOPOL} //38:63.981KHz 60.020Hz +/+, 1280x1024 60Hz
,{Mode39Tbl,Mode39Tda,1280,1024,0+NOPOL} //39:79.976KHz 75Hz +/+, 1280x1024 75Hz
,{Mode40Tbl,Mode40Tda,1280,1024,0+NOPOL} //40:91.146KHz 85Hz +/+, 1280x1024 85Hz
,{Mode41Tbl,Mode41Tda,1280,1024,0+NOPOL} //41:73KHz 70Hz +/+, 1280x1024 70Hz
,{Mode42Tbl,Mode42Tda,1280,1024,0+NOPOL} //42:76.8KHz 72Hz +/+, 1280x1024 72Hz
,{Mode43Tbl,Mode43Tda,1152,864, 0+NOPOL} //43:54.35KHz 60Hz +/+, 1152x864 60Hz
,{Mode44Tbl,Mode44Tda,1152,864, 0+NOPOL} //44:64KHz 70Hz +/+, 1152x864 70Hz
,{Mode45Tbl,Mode45Tda,1152,864, 0+NOPOL} //45:67.5KHz 75Hz +/+, 1152x864 75Hz
,{Mode46Tbl,Mode46Tda,1152,864, 0+NOPOL} //46:77.5KHz 85Hz +/+, 1152x864 85Hz
,{Mode47Tbl,Mode47Tda,1280,960, 0+NOPOL} //47:60KHz 60Hz +/+, 1280x960 60Hz
,{Mode48Tbl,Mode48Tda,1280,960, 0+NOPOL} //48:75KHz 75Hz +/+, 1280x960 75Hz
,{Mode49Tbl,Mode49Tda,1280,960, 0+NOPOL} //49:86KHz 85Hz +/+, 1280x960 85Hz
,{Mode50Tbl,Mode50Tda,1152,900, 0+NOPOL} //50:61.8KHz 66Hz +/+, 1152x900 66Hz  //david
,{Mode51Tbl,Mode51Tda,1280,1024,0+NOPOL} //51:69.1KHz 65Hz +/+, 1280x1024 65Hz //david
,{Mode52Tbl,Mode52Tda,1280,1024,0+NOPOL} //52:70.7KHz 66Hz +/+, 1280x1024 66Hz //david
,{Mode53Tbl,Mode53Tda,1280,1024,0+NOPOL} //53:60.6KHz 57Hz +/+, 1280x1024 576z //david
,{Mode54Tbl,Mode54Tda,1280, 720,0+NOPOL} //54:45KHz   60Hz +/+, 1280x720 60Hz //david
,{Mode55Tbl,Mode55Tda,1120, 750,0+NOPOL} //55:50KHz 60Hz +/+, 1120x750 60Hz //david
,{Mode56Tbl,Mode56Tda,1920, 540,0+NOPOL} //56:33.7KHz 30x2Hz +/+,1920(640)x540 30x2Hz //david
,{Mode57Tbl,Mode57Tda, 640, 400,0+NOPOL} //57:25.8KHz 51.7Hz +/+,640x400 51.7Hz    //david


};


#define MAXMODE (sizeof(ModeTbl)/sizeof(MODETBL))

char modeAdjust(void);

//
//      Set Display Mode
//      Return: current mode, -1 unknown mode
//
unsigned char modeSetMode(unsigned char mode, unsigned char sync_pol)
{
        MODETBL *modetbl;
        unsigned char pol, *regtbl;
        char temp;

#if DEBUGMSG
        printf("Mode: mode=%x sync=%x\n", (int)mode, (unsigned int)sync_pol);
#endif

        if (mode >= MAXMODE) {
#if DEBUGMSG
                printf("    mode overlimit %d\n", MAXMODE);
#endif
                return MODE_OUTOFSYNC;
        }

    modetbl = &ModeTbl[mode];

        // Mute screen
    //miscTurnOffPanel();         // Turn off panel display
    miscTurnOffBackLight();
        RegBitOut(0x40, 0x20, 0x70);

    // Program TDA registers
    regtbl = modetbl->tdaptr;
    if (!(MosaicFlag & FLAG_PORTB) && (regtbl!=NULL)) {
        TDADataTableOut(regtbl);
#if MRT_VITESSE2
        TDAByteOut(0x0B, *(regtbl+0x0B));   // double buffer issue
#endif

        DefaultPitch = ((*(regtbl+TDA_DIVH_OFF)& 0x07)<<9) + (*(regtbl+TDA_DIVL_OFF)<<1) + ((*(regtbl+TDA_PHASE_OFF)&0X40)>>6);

        DefaultPhase = *(regtbl+TDA_PHASE_OFF) & PHASEMASK;

#if MRT_ADCPLL
            if (*(regtbl+TDA_OPHASE)) DefaultPhase |= PHASEORIG;
#endif
    }

    // Program Mosaic
    RegByteOut(0x24, 0x00);     // disable minify
    RegByteOut(0x2F, 0x00);     // disable test mode
#if MASCOTV_C
    //RegByteOut(0x5F, 0x00);
#endif


    regtbl = modetbl->modeptr;
    if (regtbl == NULL) {
#if DEBUGMSG
            printf("    modeptr==NULL\n");
#endif
                return MODE_OUTOFSYNC;
        }
        RegDataTableOut(regtbl);

    // screen mute 
    RegBitOut(0x40, 0x20, 0x70);
    
    DefaultHstart = ((unsigned int)*(regtbl+MODEHSTART+1)<<8) + *(regtbl+MODEHSTART);
    DefaultVstart =  *(regtbl+MODEHSTART+2);


    // Check polarity
    pol = modetbl->pol;
    if ( pol & NOPOL ) {
        if ( (regtbl = modetbl->tdaptr) != NULL ) {
                if (MosaicFlag & FLAG_PORTB) {
                        RegBitOut(0x33, sync_pol<<1, 0x06);
            } else {
                        RegBitOut(0x32, sync_pol<<1, 0x06);
            #if PHILIPS_TDA
                        pol = (*(regtbl+TDA_CTRL_OFF) & 0x3F) | (sync_pol<<6);
                        TDAByteOut(TDA_CTRL, pol);
            #endif
            #if MRT_VITESSE2
		//0911  
        #if (VITESSE2_R2&&(!MASCOT_V))
                        pol = (*(regtbl+TDA_CTRL_OFF) & 0x3F) | (sync_pol<<6);
        #else
                        pol = *(regtbl+TDA_CTRL_OFF) & 0x3F;
                if (!(sync_pol&0x01)) pol |= 0x40;    // Bug: Hsync active low
                if (sync_pol&0x02) pol |= 0x80;
        #endif
                        TDAByteOut(TDA_CTRL, pol);
            #endif
        #if MRT_ADCPLL
                            pol = (*(regtbl+TDA_CTRL_OFF) & ~0x01) | (sync_pol & 0x01);
                        //ZZZ TDAByteOut(TDA_CTRL, pol);
            #endif
            }
        }
        }
    else if ( sync_pol != (pol&0x03)) {
#if DEBUGMSG
                printf("    sync_pol mismatch %x\n", (unsigned int)pol);
#endif
        return MODE_OUTOFSYNC; //??? mode error, create a new mode
        }

#if (MRT_VITESSE2 && VITESSE2_R2)  // Patch: VSync needs pull low
        TDAByteOut(TDA_CTRL, TDAByteIn(TDA_CTRL)&0x7F);
#endif


#if AU150X2
if (mode == 12)
 TDAByteOut(TDA_CTRL, 0x61);
 if (mode == 13)
 TDAByteOut(TDA_CTRL, 0x63);
  if (mode == 15)
 TDAByteOut(TDA_CTRL, 0x23);

#endif
#if MASCOT_V
	if (mode != 23)
	    RegBitOut(0x32, 0x80, 0x80);    // CKREFO
#endif

    CurrentMode = mode;

    if (!PresetModeFlag)
    	CurrentMode |= 0x80;
    
    CurrentPolarity = sync_pol;
    CurrentWidth = modetbl->width;
    CurrentHeight = modetbl->height;

	eepFindAutoModeEntry();

    if ( eepFindModeEntry() ) {
    		adjVPos(0,HIDE);
    		adjHPos(0,HIDE);
    		adjPitch(0,HIDE);
    		adjPhase(0,HIDE);

#if DEBUGMSG
                printf("        PRESET loaded\n");
#endif
	}else if(!PresetModeFlag) {
			FindNonPresetModeFlag = 1;
	}
#if MASCOT_V        // patch the issue of last 7 lines
    ival = RegByteIn(0x3B);
    ival = (ival<<8)+RegByteIn(0x3A)+4;
#if LG_151X4
    ival += 8;
    RegBitOut(0x24, 0x10, 0x30);
#elif LG_151
    ival += 2;
    RegBitOut(0x24, 0x20, 0x30);
#endif
        RegByteOut(0x3A, ival);
        RegByteOut(0x3B, ival>>8);
#endif

#if MASCOT_V
    RegBitOut(0x40, 0x80, 0x80);
    if (mode != 23) {
    	RegBitOut(0x32, 0x80, 0x80);
    	RegBitOut(0x18, 0x20, 0x20);
    }
#endif

	RegBitOut(0x40,0x00,0x40);	//disable free run for modeadjust


    if (eepData.MascotFlag & FLAG_FACTORY)
    {	
    		ResetEEPROM(RSTEEP+RSTAUTO+RSTUSER);     //reset without color and mode
    		setEepData();
    }


//  setZoom();          // interpolcation setting

    //modePatch();            // patch for special cases

#if (MASCOT_V && SRC_SI151)
	if (MosaicFlag & FLAG_PORTB)
	    RegBitOut(0x33, 0x50, 0x50);    // for MascotV debug board
#endif

    // Start Capture
    RegBitOut(0x30, 0x01, 0x01);
    
    // screen mute 
    RegBitOut(0x40, 0x20, 0x70);

⌨️ 快捷键说明

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