📄 sony_servo.lst
字号:
592
593 // pcm_mute();
594
595 found = SERVO_search();
596 if (!found && !servo_focus_on) {
597 SERVO_stop();
598 break;
599 }
C51 COMPILER V6.12 SONY_SERVO 02/22/2002 15:21:29 PAGE 11
600 #ifdef NEW_DSP
regs16->Game_TLB_23=0x0;
#else
603 pcm_restore();
604 #endif
605
606 // pcm_restore();
607 }
608
609 if (SERVO_Qarray_current[SERVO_QTRACK] != SERVO_Qarray_new[SERVO_QTRACK])
610 { /* Track Change */
611 for (num = 0; num < SUBQ_LEN; num++)
612 SERVO_Qarray_current[num] = SERVO_Qarray_new[num];
613 SERVO_update_track = 1;
614 SERVO_update_second = 1;
615 /* Take care about lead out ! */
616 r_tmp = SERVO_Qarray_new[SERVO_QTRACK];
617 r_tmp = CVbcd2hex[r_tmp];
618 r_tmp = r_tmp - ((CDinfo.type == CD_CDDA) ? 0 : 1);
619 servo_info = CVhex2bcd[r_tmp] << 24;
620 r_tmp = SERVO_Qarray_new[SERVO_QPOINT] << 16;
621 servo_info += r_tmp;
622 //////// added by Wenxin //////////////////
623 dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]];
624 #ifdef ENABLE_ESP
esp_track_change(dsa_recv.byte[DSA_PAR]);
#endif
627 CDU_CDactTit();
628 ///////////////////////////////////////////
629 }
630 else { /* Track Keep */
631 #if 0 // Wenxin -- never used variable
static int check_time = 0;
#endif
634 int prev_cdtime;
635 /* Check for subQ-code. If it doesn't advance *
636 * in 2 seconds, do a jump track to skip it */
637 prev_cdtime = (SERVO_Qarray_current[SERVO_QPMIN] << 16) |
638 (SERVO_Qarray_current[SERVO_QPSEC] << 8) |
639 SERVO_Qarray_current[SERVO_QPFRAME];
640 /* Do NOT copy backward-going subQ */
641 if (SERVO_cdtime > prev_cdtime) {
642 for (num = 0; num < SUBQ_LEN; num++)
643 SERVO_Qarray_current[num] = SERVO_Qarray_new[num];
644 /* update index */
645 servo_info &= 0xff00ffff;
646 r_tmp = SERVO_Qarray_new[SERVO_QPOINT] << 16;
647 servo_info += r_tmp;
648 /* check necessary for update time */
649 if ((servo_info & 0xff) != SERVO_Qarray_new[SERVO_QPSEC]) { //chu use abs. time !!
650 r_tmp = SERVO_Qarray_new[SERVO_QPMIN] << 8; //chu
651 r_tmp += SERVO_Qarray_new[SERVO_QPSEC]; //chu
652 servo_info &= 0xffff0000;
653 servo_info += r_tmp;
654 SERVO_update_second = 1;
655 #if 1
656 if( (sysMode == SYS_PLAY) /*&& (VCD_ver != VCD30)*/ ){
657 if( !jump_flag && !ls_pause && !cd_pause && !SERVO_Qarray_new[6] &&
658 !servo_focus_drop && !servo_gfs_drop && !servo_subq_drop
659 #ifdef USE_OSD_FUNC //chu
&& !slow_state
#endif
C51 COMPILER V6.12 SONY_SERVO 02/22/2002 15:21:29 PAGE 12
662 )
663 {
664 // sz added Jul 3(rd) -> goto track => toby
665 if( CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]] != cdm.trk){
666 dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]];
667 #ifdef ENABLE_ESP
esp_track_change(dsa_recv.byte[DSA_PAR]);
#endif
670 CDU_CDactTit();
671 }
672 // the end
673 if( CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]] != cdm.min){
674 dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]];
675 CDU_CDabsMin();
676 }
677 dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QPSEC]];
678 CDU_CDabsSec();
679 /////////// Added by Wenxin /////////////////
680 if ( cd_ab_flag &&
681 (CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]]*60*75+
682 CVbcd2hex[SERVO_Qarray_new[SERVO_QPSEC]]*75+
683 CVbcd2hex[SERVO_Qarray_new[SERVO_QPFRAME]] >= msf2frm(&ab1)) )
684 {
685 MSF temp;
686 debugprint("CDU_CDfound",cd_ab);
687 temp.min = ab0.min;
688 temp.sec = ab0.sec;
689 temp.frm = ab0.frm;
690 pcm_mute();
691 Cdm_gotoMSF( &temp );
692 CDU_CDfound();
693 }
694 /////////// end fo added //////////////////////
695 }
696 }
697 #endif
698 }
699 }
700 }
701 }
702 }
703 break;
704 case SERVO_PAUSE:
705 if (SERVO_new_Qcode && kickfg) {
706 pcm_mute();
707 Do_mute();
708 flag=SERVO_Seek(pause_min,pause_sec,pause_frame);
709 SERVO_mode=SERVO_PAUSE;
710 if(!flag && !servo_focus_on)
711 {
712 SERVO_stop();
713 dsa_recv.word=DSR_ERROR;
714 }
715 }
716 break;
717 case SERVO_RELEASEPAUSE:
718 /*flag=SERVO_Seek(pause_min,pause_sec,pause_frame);
719 if (!flag && !servo_focus_on)
720 {
721 SERVO_stop();
722 dsa_recv.word=DSR_ERROR;
723 }
C51 COMPILER V6.12 SONY_SERVO 02/22/2002 15:21:29 PAGE 13
724 else*/ SERVO_mode=SERVO_PLAY;
725 break;
726 case SERVO_SEARCH:
727 break;
728 case SERVO_TRAY:
729 if(servo_pres_m == OPEN_10)
730 {
731 if ((glbTimer - open_delay) > T300MS)
732 {
733 if (SERVO_OPEN_HIGH) {
734 SERVO_close();
735 // regs16->Control_Status = 0xff;
736 FIX_KYopcl(); // sz 7/12 => tray moving inside
737 }
738 }
739 }
740 break;
741
742 default:
743 break;
744 }
745 enable_reset_timer();
746 return;
747 }
748
749
750
751
752 /************************************************************************
753 * SEND COMMANDS TO DSP *
754 ************************************************************************/
755 /*
756 * Send 1 command(4 bits) to DSP
757 */
758 void SERVO_send_one_command(unsigned char cmd1)
759 {
760 int num1 = 0;
761 unsigned int cmd;
762
763 for (num1 = 0; num1 < 4; num1++) {
764 cmd = cmd1;
765 CLEAR_SERVO_CLOCK;
766 if (cmd & 0x0001)
767 SET_SERVO_DATA;
768 else
769 CLEAR_SERVO_DATA;
770 cmd1 >>= 1;
771 SERVO_short_delay(2);
772 SET_SERVO_CLOCK;
773 SERVO_short_delay(2);
774 }
775 }
776
777 void SERVO_send_one_command1(unsigned char cmd1)
778 {
779 int num1 = 0;
780 unsigned int cmd;
781 volatile int i;
782
783 for (num1 = 0; num1 < 4; num1++) {
784 cmd = cmd1;
785 CLEAR_SERVO_CLOCK;
C51 COMPILER V6.12 SONY_SERVO 02/22/2002 15:21:29 PAGE 14
786 if (cmd & 0x0001)
787 SET_SERVO_DATA;
788 else
789 CLEAR_SERVO_DATA;
790 cmd1 >>= 1;
791 for (i=0; i<3; i++);
792 SET_SERVO_CLOCK;
793 for (i=0; i<3; i++);
794 }
795 }
796
797 void SERVO_send_command(int num, unsigned int data)
798 {
799 int nump;
800 int interrupt_backup;
801
802 interrupt_backup = enable_interrupt;
803 enable_interrupt = 0;
804 for (nump = 0; nump < num; nump++) {
805 SERVO_send_one_command((unsigned char)(data & 0xf));
806 data >>= 4;
807 }
808
809 CLEAR_SERVO_XLAT;
810 SERVO_short_delay(2);
811 SET_SERVO_XLAT;
812 SERVO_short_delay(2);
813 enable_interrupt = interrupt_backup;
814 }
815
816 void SERVO_send_command_no_latch(int num, unsigned int data)
817 {
818 int nump;
819 int interrupt_backup;
820 interrupt_backup = enable_interrupt;
821 enable_interrupt = 0;
822 for (nump = 0; nump < num; nump++) {
823 SERVO_send_one_command((unsigned char)(data & 0xf));
824 data >>= 4;
825 }
826 enable_interrupt = interrupt_backup;
827 SERVO_short_delay(2);
828 }
829
830 void SERVO_send_command_no_latch1(int num, unsigned int data)
831 {
832 int nump;
833 volatile int i;
834
835 enable_interrupt = 0;
836 for (nump = 0; nump < num; nump++) {
837 SERVO_send_one_command1((unsigned char)(data & 0xf));
838 data >>= 4;
839 }
840 for (i=0; i<5; i++);
841 enable_interrupt = 1;
842 }
843
844 void SERVO_send_8X_command(unsigned char soct, int mode)
845 {
846 unsigned int command;
847
C51 COMPILER V6.12 SONY_SERVO 02/22/2002 15:21:29 PAGE 15
848 command = 0x81170800;
849 if (soct)
850 command |= (0x20 << 16);
851 if (mode)
852 command |= (0x800 << 16);
853 SERVO_send_command(8, command);
854 }
855
856
857
858
859
860
861
862
863 /************************************************************************
864 * SET FILTERS *
865 ************************************************************************/
866 #ifdef USE_SONY_3068 // sz 8/18
unsigned int filtertbl[] = {
0x340080, 0x340504, 0x341120, 0x34400c,/*b*/
0x34436a, 0x34444a/*7*/, 0x344572/*d*/
};
#else
872 unsigned int filtertbl[] = {
873 0x340080, 0x340504, 0x341120, 0x34400b,
874 0x34436a, 0x344447, 0x34457d
875 };
876 #endif
877 void SERVO_filter_setting(void)
878 {
879 int i;
880
881 for (i=0; i<7; i++)
882 SERVO_send_command(6, filtertbl[i]);
883 }
884
885
886
887
888
889
890 /************************************************************************
891 * SERVO MUTE COMMANDS *
892 ************************************************************************/
893 void Do_mute()
894 {
895 servo_mute_on = 1;
896 SERVO_send_command(6, 0xA20000);
897 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -