📄 msvd.lst
字号:
284 2 return MST_CLOCK_HZ/15625;
285 2 else
286 2 return MST_CLOCK_HZ/15734;
287 2 }
288 1 return 0;
289 1 }
290
291 #if(ENABLE_CHECK_AUTO_H_TOTAL)
292
293 BYTE msVDCheckScalerStatus( BYTE ucCheckFlag )
294 {
295 1 BYTE ucStatus = 0;
296 1 WORD wTmp;
297 1 WORD wHFreq;
298 1 WORD wVTotal;
299 1
300 1 // Calculate H frequency ...
301 1 wTmp = msGetHorizontalPeriod();
302 1 if( wTmp == 0x1fff || wTmp == 0 ) // Check H period
C51 COMPILER V8.18 MSVD 09/29/2009 23:58:04 PAGE 6
303 1 {
304 2 //printf("\r\nHP=%d", wTmp);
305 2 ucStatus |= VD_H_PERIOD_INVALID;
306 2 }
307 1 else // H period is valid
308 1 {
309 2 wHFreq = msCalculateHFreqX10(wTmp); // Cal H freq
310 2 if( wHFreq < 146 || wHFreq > 167 ) //200 ) // Hfreq < 14.6K, > 16.6K => freq invalid
311 2 {
312 3 ucStatus |= VD_H_FREQ_INVALID;
313 3 }
314 2 else // H freq is valid
315 2 {
316 3 if( ucCheckFlag&VD_V_TOTAL_INVALID )
317 3 {
318 4 wVTotal = msVDGetVTotal(); // Get VTotal from VD
319 4 wTmp = msVDGetVTotal(); // Get VTotal from scaler
320 4
321 4 // Check VD&Scaler VTotal
322 4 if( (wVTotal < 420) || (wVTotal > 730)
323 4 ||(wTmp < 420) || (wTmp > 730)
324 4 ||(abs((int)wVTotal - wTmp) > 50)) // The VTotal of VD and Scaler is different!!
325 4 {
326 5 ucStatus |= VD_V_TOTAL_INVALID;
327 5 }
328 4 else // VTotal is valid
329 4 {
330 5 if( ucCheckFlag&VD_V_FREQ_INVALID )
331 5 {
332 6 // Cal V freq
333 6 wTmp = msCalculateVFreqX10( wHFreq, wTmp )*2;
334 6 if( wTmp < 440 || wTmp > 660 )
335 6 {
336 7 ucStatus |= VD_V_FREQ_INVALID;
337 7 }
338 6 }
339 5 }
340 4 }
341 3 }
342 2 }
343 1 return ucStatus;
344 1 }
345 #endif
346
347 bit msVDGetColorLockBit(void)
348 {
349 1 return msVD_FSC_GetColorBurstStatus();
350 1 }
351
352 WORD msVDGetSyncStatus(void)
353 {
354 1 BYTE ucBank;
355 1 BYTE ucTmp;
356 1 WORD wVDStatus = 0;
357 1 BYTE ucCombStatus;
358 1 WORD wVDVtotal = msVDGetVTotal();
359 1
360 1 ucBank = msReadByte( BK0_00_REGBK);
361 1
362 1 msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
363 1 ucCombStatus = msReadByte( BK3_72_COMB_STSC);
364 1
C51 COMPILER V8.18 MSVD 09/29/2009 23:58:04 PAGE 7
365 1 // Check V total
366 1 #if( ENABLE_VD_DSP )
367 1 if( wVDVtotal > 566 ) // 625 lines
368 1 wVDStatus |= VD_VSYNC_50HZ;
369 1 #else
if( ucCombStatus&_BIT6 ) // 625 lines
wVDStatus |= VD_VSYNC_50HZ;
#endif
373 1
374 1 //if( 0 == (ucCombStatus&_BIT3) ) // Check comb: No any input signal
375 1 {
376 2 msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
377 2 if( ((msVDSpecialRead( 0x00, BK2_01 )&0xF0) >= 0x60)// Sync ctl state > 6
378 2 &&(msVDDSPReadByte( 0x14 )&_BIT1) ) // SYNC_FOUND
379 2 {
380 3 #if( ENABLE_VD_DSP )
381 3 if( wVDVtotal >= 420 && wVDVtotal <= 730 )
382 3 #else
if( (ucCombStatus&0x07) != 7 )
#endif
385 3 {
386 4 wVDStatus |= (VD_HSYNC_LOCKED|VD_SYNC_LOCKED);
387 4 // Check interlace
388 4 if( msGetInterlaceBit() )
389 4 {
390 5 wVDStatus |= VD_INTERLACED;
391 5 }
392 4 }
393 3 }
394 2 }
395 1
396 1 // Get other VD status:
397 1 if( wVDStatus&VD_HSYNC_LOCKED )
398 1 {
399 2 {
400 3 // Get bk2_02 value
401 3 ucTmp = msVDSpecialRead( 0x00, BK2_02 );
402 3
403 3 // Check Color burst lock
404 3 if( (ucTmp&0x0C) == 0x04 )
405 3 {
406 4 wVDStatus |= VD_COLOR_LOCKED;
407 4 }
408 3 }
409 2
410 2 // Check FSC
411 2 ucTmp = msVDSpecialRead( 0x00, BK2_01 );
412 2 switch( ucTmp&0x07 )
413 2 {
414 3 default:
415 3 case 0: wVDStatus |= VD_FSC_4433;
416 3 break;
417 3 case 2: wVDStatus |= VD_FSC_3579;
418 3 break;
419 3 case 4: wVDStatus |= VD_FSC_3575;
420 3 break;
421 3 case 6: wVDStatus |= VD_FSC_3582;
422 3 break;
423 3 case 1: wVDStatus |= VD_FSC_4285;
424 3 break;
425 3 }
426 2
C51 COMPILER V8.18 MSVD 09/29/2009 23:58:04 PAGE 8
427 2 // Don't care PAL_SWITCH!!
428 2 // We do not support auto detect PAL-M
429 2 // Check PAL switch
430 2 if( g_ucMSVDForceSystem == VD_FORCE_AUTO )
431 2 {
432 3 if( wVDStatus&VD_VSYNC_50HZ ) // 50 Hz
433 3 {
434 4 wVDStatus |= VD_PAL_SWITCH;
435 4 }
436 3 else // 60 Hz
437 3 {
438 4 // ucTmp = wVDStatus&VD_FSC_TYPE;
439 4 // if( (ucTmp == VD_FSC_3579)
440 4 // ||(ucTmp == VD_FSC_3575)
441 4 // ||(ucTmp == VD_FSC_3582)
442 4 // ||(ucTmp == VD_FSC_4433)
443 4 // )
444 4 {
445 5 #if 1 // HW detect PAL/NTSC
446 5 ucTmp = msVDSpecialRead( 0x00, BK2_03 );
447 5 if( ucTmp&_BIT5 )
448 5 wVDStatus |= VD_PAL_SWITCH;
449 5 #elif 0 // Force PAL
wVDStatus |= VD_PAL_SWITCH;
#else // Force NTSC
#endif
454 5 }
455 4 }
456 3 }
457 2 else
458 2 {
459 3 if( (g_ucMSVDForceSystem == VD_FORCE_PAL)||(g_ucMSVDForceSystem == VD_FORCE_PAL_358) )
460 3 {
461 4 wVDStatus |= VD_PAL_SWITCH;
462 4 }
463 3 }
464 2
465 2
466 2 // if( ucTmp&_BIT6 )
467 2 // wVDStatus |= VD_MACROVISION;
468 2 }
469 1
470 1 msWriteByte( BK0_00_REGBK, ucBank );
471 1
472 1 return wVDStatus;
473 1 }
474
475 //////////////////////////////////////////////////////
476 // Std 50/60 Vtotal FSC HTotal Color
477 //-----------------------------------------
478 // NTSC 60 525 358 910
479 // PAL-M 60 525 358 909 PAL-Switch
480 // NTSC-443 60 525 443 1127
481 // PAL-60 60 525 443 1127 PAL-Switch
482 // xxx 50 625 358
483 // PAL-Nc 50 625 358 917 PAL-Switch
484 // xxx 50 625 443
485 // PAL 50 625 443 1135 PAL-Switch
486 // SECAM 50 625 428 1097
487 ///////////////////////////////////////////////////////
488 BYTE msVDGetVideoSystem( WORD wVideoStatus )
C51 COMPILER V8.18 MSVD 09/29/2009 23:58:04 PAGE 9
489 {
490 1 BYTE ucSignalType = SIG_NONE;
491 1
492 1 putstr("\r\n");
493 1 if( wVideoStatus&VD_HSYNC_LOCKED )
494 1 {
495 2 if( wVideoStatus&VD_VSYNC_50HZ ) // 50Hz
496 2 {
497 3 switch( wVideoStatus&VD_FSC_TYPE )
498 3 {
499 4 case VD_FSC_4285: // SECAM
500 4 ucSignalType = SIG_SECAM;
501 4 putstr("[SECAM]");
502 4 break;
503 4 case VD_FSC_4433: // 4.43361875MHz, PAL or NTSC443 or PAL(60)
504 4 ucSignalType = SIG_PAL;
505 4 putstr("[PAL]");
506 4 break;
507 4 case VD_FSC_3579: // 3.579545MHz, NTSC
508 4 case VD_FSC_3575: // 3.57561149MHz,PAL(M)
509 4 case VD_FSC_3582: // 3.58205625MHz,PAL(Nc)
510 4 ucSignalType = SIG_PAL_NC;
511 4 putstr("[PAL-NC]");
512 4 break;
513 4 }
514 3 }
515 2 else // 60Hz
516 2 {
517 3 switch( wVideoStatus&VD_FSC_TYPE )
518 3 {
519 4 case VD_FSC_4285: // SECAM
520 4 putstr("[SECAM60??-->");
521 4 case VD_FSC_4433: // 4.43361875MHz, PAL or NTSC443 or PAL(60)
522 4 if( wVideoStatus&VD_PAL_SWITCH )
523 4 {
524 5 ucSignalType = SIG_PAL_60;
525 5 putstr("[PAL-60]");
526 5 }
527 4 else
528 4 {
529 5 ucSignalType = SIG_NTSC_443;
530 5 putstr("[NTSC-443]");
531 5 }
532 4 break;
533 4 case VD_FSC_3579: // 3.579545MHz, NTSC
534 4 case VD_FSC_3575: // 3.57561149MHz,PAL(M)
535 4 case VD_FSC_3582: // 3.58205625MHz,PAL(Nc)
536 4 if( wVideoStatus&VD_PAL_SWITCH )
537 4 {
538 5 ucSignalType = SIG_PAL_M;
539 5 putstr("[PAL-M]");
540 5 }
541 4 else
542 4 {
543 5 ucSignalType = SIG_NTSC;
544 5 putstr("[NTSC]");
545 5 }
546 4 break;
547 4 }
548 3 }
549 2 }
550 1 return ucSignalType;
C51 COMPILER V8.18 MSVD 09/29/2009 23:58:04 PAGE 10
551 1 }
552
553
554
555 void msVDColorKill( BOOL bColorKill )
556 {
557 1
558 1 msWriteByte( BK0_00_REGBK, REG_BANK2_VD);
559 1
560 1 if( bColorKill ) // COLOR_OFF
561 1 {
562 2 printMsg("color kill");
563 2
564 2 msWriteByteMask( BK2_55_COLOR_OFF, 0xC0, 0xC0 );
565 2 msWriteByte( BK0_00_REGBK, REG_BANK3_COMB);
566 2 msWriteByteMask( BK3_60_IMGCTRL, 0x00, 0x30 ); // Disable Auto Chrom Gain
567 2
568 2
569 2 if( msDSP_Std_GetNoiseMag() < 10 )
570 2 msWriteByteMask(BK3_21_COMB2DCFGB, 0x30, 0x70); // Notch mode of Y
571 2 else
572 2 msWriteByteMask(BK3_21_COMB2DCFGB, 0x20, 0x70); // Notch mode of Y
573 2
574 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -