📄 osdbasic.lst
字号:
453 1
454 1 if( I2CAutoIncFlagOn==0 )
455 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
456 1 }
457 #ifdef PAL_TV
void DrawAttrString(WORD addr, BYTE *Str, BYTE cnt)
{
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
#ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
WriteTW88(TW88_OSDRAMADDRLO, addr);
WriteI2Cn( TW88I2CAddress, TW88_OSDRAMDATALO, Str, cnt ); // Attr
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
}
#endif
472 void DrawAttrCnt(WORD addr, BYTE color, BYTE cnt)
473 {
474 1 // BYTE val;
475 1 // val = ReadTW88(TW88_ENABLERAM);
476 1 // WriteTW88(TW88_ENABLERAM, (val&0xf3)|0x04); // OSD RAM Auto Access Enable
477 1
478 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
479 1 #ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
482 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
483 1 WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATALO, color, cnt );
484 1
485 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
486 1 }
C51 COMPILER V7.50 OSDBASIC 08/20/2007 10:23:32 PAGE 9
487
488 void ClearDataCnt(WORD addr, BYTE cnt)
489 {
490 1 if( I2CAutoIncFlagOn==0 )
491 1 WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
492 1 #ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
495 1 WriteTW88(TW88_OSDRAMADDRLO, addr);
496 1 WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATAHI, ' ', cnt );
497 1
498 1 if( I2CAutoIncFlagOn==0 )
499 1 WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
500 1 }
501 /*
502 #ifdef SUPPORT_TW88_CC_DECODER
503 void CopyStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, BYTE *str)
504 {
505 extern IDATA struct OSDStrInfo OSDStrInfo;
506
507 OSDStrInfo.cnt = cnt;
508 if( !OSDStrInfo.cnt ) OSDStrInfo.cnt = strlen( str );
509 OSDStrInfo.addr = xoff;
510 OSDStrInfo.str = (DWORD)(str);
511 OSDStrInfo.attr = attr;
512 CopyStr__(0,winno,yoff);
513 }
514 #endif //SUPPORT_TW88_CC_DECODER
515
516 #ifndef KEILC
517 void CopyCStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, CODE_P BYTE *str)
518 {
519 extern IDATA struct OSDStrInfo OSDStrInfo;
520 OSDStrInfo.cnt = cnt;
521 if( !OSDStrInfo.cnt ) OSDStrInfo.cnt = CStrlen( str );
522 OSDStrInfo.addr = xoff;
523 OSDStrInfo.str = (DWORD)(str);
524 OSDStrInfo.attr = attr;
525 CopyStr__(1,winno,yoff);
526 }
527 #endif
528
529 void CopySpecialCStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, CODE_P WORD *str)
530 {
531 extern IDATA struct OSDStrInfo OSDStrInfo;
532
533 OSDStrInfo.cnt = cnt;
534 if( !OSDStrInfo.cnt )OSDStrInfo.cnt = WCStrlen( str );
535 OSDStrInfo.addr = xoff;
536 OSDStrInfo.str = (DWORD)(str);
537 OSDStrInfo.attr = attr;
538 CopyStr__(2,winno,yoff);
539 }
540 */
541 //*****************************************************************************
542 //
543 // Conversion Functions.
544 //
545 //*****************************************************************************
546 BYTE utoa(WORD value, BYTE *str, BYTE radix)
547 {
548 1 BYTE cnt, *str1;
C51 COMPILER V7.50 OSDBASIC 08/20/2007 10:23:32 PAGE 10
549 1 WORD i, div;
550 1
551 1 #ifdef DEBUG_OSD
dPrintf("\r\n++(utoa):0x%x__", value);
#endif
554 1
555 1 str1 = str;
556 1 cnt=0;
557 1 if( radix==10) {
558 2 for(div = 10000; div>=10; div/=10) {
559 3 i = value/div;
560 3 if( i ) {
561 4 *str++ = i+'0';
562 4 cnt++;
563 4 }
564 3 else if( cnt ) // 100, 200, 20,,,,
565 3 *str++ = '0';
566 3
567 3 value%=div;
568 3 }
569 2 *str++ = value+'0';
570 2 *str = 0;
571 2 }
572 1 else if( radix==16) {
573 2 for(div = 0x1000; div>=0x10; div/=0x10) {
574 3 i = value/div;
575 3 if( i ) {
576 4 if( i>=0xa )
577 4 *str++ = i-0xa+'A';
578 4 else
579 4 *str++ = i+'0';
580 4 value%=div;
581 4 }
582 3 }
583 2 if( value>=0xa )
584 2 *str++ = value-0xa+'A';
585 2 else
586 2 *str++ = value+'0';
587 2 *str = 0;
588 2 }
589 1 return 1;
590 1 }
591
592 BYTE ltoa_K(long value, BYTE *str, BYTE i_part)
593 {
594 1 BYTE j;
595 1 long divider;
596 1
597 1 #ifdef DEBUG_OSD
dPrintf("\r\n++(ltoa_K):%ld__", value);
#endif
600 1
601 1 j=0;
602 1 for( divider = 100000000L; divider >= 1000; divider /=10) {
603 2 if( ( value/ divider ) || j ) {
604 3 *str++ = value/divider + '0';
605 3 j++;
606 3 }
607 2 value %= divider;
608 2 }
609 1 *str++ = '.';
610 1 j++;
C51 COMPILER V7.50 OSDBASIC 08/20/2007 10:23:32 PAGE 11
611 1 for( ; divider >= 10; divider /=10) {
612 2 if( value/ divider || j) {
613 3 *str++ = value/divider + '0';
614 3 j++;
615 3 i_part--;
616 3 }
617 2 if( i_part==0 ) {
618 3 *str = 0;
619 3 return j;
620 3 }
621 2
622 2 value %= divider;
623 2 }
624 1 if( value ) {
625 2 *str++ = value + '0';
626 2 j++;
627 2 }
628 1 *str = 0;
629 1 return j;
630 1 }
631 /*
632 BYTE WCStrlen(CODE_P WORD *str)
633 {
634 BYTE i=0;
635
636 while( *str++ ) i++;
637 return i;
638 }
639 */
640 BYTE strlen( BYTE *str )
641 {
642 1 BYTE i=0;
643 1
644 1 while( *str++ ) i++;
645 1 return i;
646 1 }
647 //=============================================================================
648 // Init Menu Window Data initialize
649 //=============================================================================
650 #include "OsdInitTable.c"
651
652 void InitOSDWindow(BYTE *ptr)
653 {
654 1 BYTE i;
655 1
656 1 WriteTW88(0xff, ReadTW88(0xff) & 0xef);
657 1
658 1 i = 0;
659 1 while(ptr[i]) {
660 2 WriteI2Cn_(TW88I2CAddress, &ptr[i+1], ptr[i]);
661 2 WriteI2Cn_(TW88I2CAddress, &ptr[i+1], 5); // To set position LSB...
662 2
663 2 i += ptr[i] + 1;
664 2 };
665 1
666 1 WriteTW88(0xff, ReadTW88(0xff) | 0x10);
667 1 }
668
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1428 ----
C51 COMPILER V7.50 OSDBASIC 08/20/2007 10:23:32 PAGE 12
CONSTANT SIZE = 229 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 66
DATA SIZE = ---- ----
IDATA SIZE = 8 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -