📄 devvd.lst
字号:
if(wCurSyncStatus&VD_HSYNC_LOCKED)// && IsSrcHasSignal())
msVD_Patch_004(_ENABLE);
else
msVD_Patch_004(_DISABLE);
#endif
254 3 }
255 2 }
256 1
257 1 // Save current status for next mode detect
258 1 g_wLastSyncStatus = wCurSyncStatus;
259 1 }
260
261 void vdModeHandler(void)
262 {
263 1 if( g_VdInfo.bVideoDoModeSetting )
264 1 {
265 2 WORD wStatus = g_VdInfo.wVideoStatus;
266 2 printMsg("VD setup mode");
267 2
268 2 g_VdInfo.bVideoDoModeSetting = FALSE;
269 2 if( wStatus& VD_HSYNC_LOCKED ) // Has signal
270 2 {
271 3
272 3 // Check signal type
273 3 if( wStatus&VD_VSYNC_50HZ )
274 3 {
275 4 g_VdInfo.ucVideoSystem = SIG_PAL;
276 4 g_ucSrcModeIndex = MD_720x576_50I;
277 4 }
278 3 else
279 3 {
280 4 g_VdInfo.ucVideoSystem = SIG_NTSC;
281 4 g_ucSrcModeIndex = MD_720x480_60I;
282 4 }
283 3
284 3 g_InOutCtl.bInterlace = 1;
285 3
286 3 if( IsVideoPortInUse())
287 3 {
288 4 g_VdInfo.ucVideoSystem = msVDGetVideoSystem( wStatus );
289 4
290 4 if(g_VdInfo.ucVideoSystem!=SIG_SECAM)
291 4 msVD_FSM_Reset();
292 4
293 4 msVDSetupMode( wStatus, g_VdInfo.ucVideoSystem );
294 4 }
295 3
296 3 msCommSetupMode();
297 3
298 3 SetOutputTimingAndWindow(OUTPUT_SIG); // VD mode change: Has signal
299 3
C51 COMPILER V8.18 DEVVD 09/29/2009 23:58:04 PAGE 6
300 3 #if( ENABLE_MONITOR_SIGNAL )
301 3 msMonitorSignal(MONITOR_SIGNAL_INIT);
302 3 #endif
303 3
304 3 msSetBlueScreen( _DISABLE, FR_BLACK);
305 3
306 3 Clr_AFCDisableFlag();
307 3 g_ucAFCTuneCounter=AFCTUNEINITCOUNT;
308 3 }
309 2 else // No signal
310 2 {
311 3 g_VdInfo.ucVideoSystem = SIG_NONE;
312 3 g_InOutCtl.bInterlace = 1;
313 3
314 3 msVDReset();
315 3
316 3 if( IsVideoPortInUse())
317 3 {
318 4 // For TV snow
319 4 #if( TV_SYSTEM == TV_NTSC )
msVDSetupMode( VD_FSC_3579, SIG_NTSC );
#else
322 4 msVDSetupMode( VD_FSC_4433|VD_VSYNC_50HZ, SIG_PAL );
323 4 #endif
324 4 }
325 3
326 3 #if TV_ENABLE
327 3 if( IsTVInUse()) // For TV snow screen
328 3 {
329 4 SetOutputTimingAndWindow( OUTPUT_SNOW );
330 4 msSetBlueScreen( _DISABLE, FR_BLACK);
331 4 g_ucSrcModeIndex = MD_TVsnow;
332 4 }
333 3 else // av/sv
334 3 #endif
335 3 {
336 4 msProgWindow( OUTPUT_FREERUN ); // For display window
337 4 msSetBlueScreen( _ENABLE, FR_BLUE);
338 4 g_ucSrcModeIndex = MD_FreeRun;
339 4 }
340 3
341 3 #ifdef VD_PATCH_001
msVD_Patch_001();
#endif
344 3 }
345 2
346 2 msSetScaler();
347 2
348 2 if(g_ucMenuPageIndex==RootMenu)
349 2 Set_ShowSourceFlag();
350 2
351 2 g_ucSyncMaxStableCounter=0;
352 2
353 2 if (PowerOnFlag)
354 2 {
355 3 Power_TurnOnPanel();
356 3 Power_TurnOnGreenLed();
357 3 }
358 2 }
359 1 }
360
361 XDATA BYTE g_ucDetectInterlace_StableCounter;
C51 COMPILER V8.18 DEVVD 09/29/2009 23:58:04 PAGE 7
362 void msDetectInterlace( BYTE ucFlag )
363 {
364 1 BYTE ucBank = msReadByte( BK0_00_REGBK);
365 1 bit bInterlace;
366 1
367 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
368 1
369 1 // Read scaler report status
370 1 bInterlace = msGetInterlaceBit();
371 1
372 1 if( bInterlace != g_bDetectInterlace_LastInterlaceFlag )
373 1 ++ g_ucDetectInterlace_StableCounter;
374 1 else
375 1 g_ucDetectInterlace_StableCounter = 0;
376 1
377 1 if( (ucFlag&_BIT0) || (g_ucDetectInterlace_StableCounter>20) )
378 1 {
379 2 g_ucDetectInterlace_StableCounter = 0;
380 2 g_bDetectInterlace_LastInterlaceFlag = bInterlace;
381 2
382 2 if( bInterlace )
383 2 {
384 3 msWriteBit( BK0_0E_INTLX, 1, _BIT3 ); // to be checked!!
385 3 msWriteByteMask( BK0_36_VDSUSG, 0x0C, 0x0C );
386 3 //putstr("\r\nInterlace");
387 3 }
388 2 else // Non-interlace
389 2 {
390 3 msWriteBit( BK0_0E_INTLX, 0, _BIT3 );
391 3 msWriteByteMask( BK0_36_VDSUSG, 0x00, 0x0C );
392 3 //putstr("\r\nNon-Interlace");
393 3 }
394 2
395 2 msLineBufferDelayCtl( bInterlace ); // For detect interlace
396 2 }
397 1 msWriteByte( BK0_00_REGBK, ucBank );
398 1 }
399
400
401 BOOL msGetInterlaceBit(void)
402 {
403 1 BOOL bInterlace = 0;
404 1 BYTE ucBank = msReadByte( BK0_00_REGBK);
405 1
406 1 msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
407 1 if( msReadByte( BK0_EF_STATUS2)&_BIT3 )
408 1 bInterlace = 1;
409 1
410 1 msWriteByte( BK0_00_REGBK, ucBank );
411 1 return bInterlace;
412 1 }
413
414
415 void msFieldDetectCtl(void)
416 {
417 1 BYTE ucBank;
418 1
419 1 ucBank = msReadByte( BK0_00_REGBK);
420 1 msWriteByte(BK0_00_REGBK, REG_BANK_SCALER );
421 1
422 1 #if VGA_ENABLE
423 1 if( IsVGAInUse()) // VGA
C51 COMPILER V8.18 DEVVD 09/29/2009 23:58:04 PAGE 8
424 1 {
425 2 /*
426 2 if(StandardModeFlag&bInterlaceMode)
427 2 msWriteByte(BK0_E4_ISOVRD, 0x03);
428 2 else
429 2 */
430 2 msWriteByte(BK0_E4_ISOVRD, 0x00);
431 2
432 2 msWriteByte(BK0_E5_MDCTRL, 0x00);
433 2 }
434 1 else
435 1 #endif
436 1
437 1 {
438 2 msWriteByte(BK0_E4_ISOVRD, 0x03);
439 2 #if (ENABLE_VD_DSP)
440 2 msWriteByte(BK0_E5_MDCTRL, 0x04); // 20051114
441 2 #elif(ENABLE_SW_FILED)
msWriteByte(BK0_E5_MDCTRL, 0x04); // 20060116
#else
msWriteByte(BK0_E5_MDCTRL, 0x00);
#endif
446 2 }
447 1
448 1 msWriteByte( BK0_00_REGBK, ucBank );
449 1 }
450
451 void msLPFCtl( BYTE ucLPFParaIdx )
452 {
453 1 BYTE ucBank;
454 1 BYTE code tLPFPara[][5] = {
455 1 //{ 0x7F, 0x03, 0x3C, 0x05, 0x1A }, // VD 443
456 1 //{ 0x7E, 0x04, 0x3C, 0x04, 0x1C }, // VD 358
457 1 //{ 0x7F, 0x03, 0x3B, 0x06, 0x1A }, // PC, YPbPr
458 1 { 0x42, 0x01, 0x3C, 0x07, 0x14 }, // TV, Strong
459 1 //{ 0x3F, 0x03, 0x3C, 0x05, 0x1A }, // TV, Normal
460 1 { 0x7F, 0x04, 0x3C, 0x04, 0x1A }, // AV
461 1 };
462 1
463 1 BYTE i;
464 1
465 1 ucBank = msReadByte( BK0_00_REGBK);
466 1 msWriteByte( BK0_00_REGBK, 1 );
467 1
468 1 if( ucLPFParaIdx == LPF_CTL_TURN_OFF )
469 1 msWriteBit(BK1_55_LPF_CTL, 0, _BIT6);
470 1 else
471 1 {
472 2 for( i = 0; i < 5; ++ i )
473 2 msWriteByte( BK1_50_LPF_TAP1+i, tLPFPara[ucLPFParaIdx][i]);
474 2
475 2 if( ucLPFParaIdx == LPF_CTL_TV_STRONG)
476 2 msWriteBit(BK1_55_LPF_CTL, 1, _BIT6);
477 2 else
478 2 msWriteBit(BK1_55_LPF_CTL, 0, _BIT6);
479 2 }
480 1
481 1 msWriteByte( BK0_00_REGBK, ucBank );
482 1 }
483
484
485 BYTE code tFreeRunColor[][2] =
C51 COMPILER V8.18 DEVVD 09/29/2009 23:58:04 PAGE 9
486 { // BK0_5C, BK0_5D
487 { 0x00 , 0x00, }, // FREE_RUN_COLOR_BLACK
488 { 0xFE|_BIT0, 0xFF, }, // FREE_RUN_COLOR_WHITE
489 { 0x3E|_BIT0, 0x00, }, // FREE_RUN_COLOR_BLUE
490 };
491
492 void msSetBlueScreen( BOOL bEnable, BYTE ucColor )
493 {
494 1 BYTE ucBank;
495 1 ucBank=msReadByte(BK0_00_REGBK);
496 1 msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
497 1 if( bEnable )
498 1 {
499 2 //msFPLLCtl( FPLL_STOP );
500 2 msWriteBit(BK0_02_ISELECT, _ENABLE, _BIT7);
501 2 msSetupFreeRunMode(DEFAULT_OUTPUT_V_FREQ);
502 2
503 2 // Set screen color
504 2 msWriteByte( BK0_5C_FRAME_COLOR_1, tFreeRunColor[ucColor][0] );
505 2 msWriteByte( BK0_5D_FRAME_COLOR_2, tFreeRunColor[ucColor][1] );
506 2 }
507 1 else // Disable blue screen
508 1 {
509 2 #if VGA_ENABLE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -