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

📄 sony_servo.lst

📁 索尼CX3068VCD伺服的随身听
💻 LST
📖 第 1 页 / 共 5 页
字号:
 286          extern void SERVO_delay_n_ms(int n_ms);
 287          extern void SERVO_short_delay(int delay);
 288          extern volatile int ms_timer;	/* 100 ms timer */
 289          extern void SERVO_start_timer(int ms_delay);
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 6   

 290          extern int SERVO_check_timer(void);
 291          extern int SERVO_Check_SCOR(void);
 292          extern void FIX_KYstdby();
 293          void (*servo_task)();
 294          
 295          #ifdef ENABLE_MP3      
              extern void Mp3_DoMute();
              extern void Mp3_UnMute();
              #endif
 299          
 300          void null_func()
 301          {
 302          }
 303          
 304          
 305          /************************************************************************
 306           * INTERNAL FUNCTIONS                                                   *
 307           ************************************************************************/
 308          void SERVO_emrchk(void);
 309          void SERVO_emr_10(void);
 310          void SERVO_emr_20(void);
 311          void SERVO_emcsbq(void);
 312          void SERVO_trackjump_1(int);
 313          void SERVO_trackjump_3(int);
 314          void SERVO_trackjump_10(int);
 315          void SERVO_M_trackmove(int qdirection, int track_diff);
 316          void SERVO_avrg_ctl(void);
 317          void SERVO_filter_setting(void);
 318          void SERVO_EF_balance(void);
 319          void SERVO_fb_dtr(void);
 320          void SERVO_agc(void);
 321          void SERVO_ag_trk(void);
 322          void SERVO_fbias(void);
 323          void SERVO_rfjsmp(void);
 324          void SERVO_efv_10(void);
 325          void SERVO_fbias_10(void);
 326          void SERVO_fbias_20(void);
 327          void SERVO_fbc(void);
 328          void SERVO_agc_10(void);
 329          void SERVO_agc_20(void);
 330          void SERVO_fcson(void);
 331          void SERVO_fcstry(void);
 332          void SERVO_fcserr(void);
 333          void SERVO_focsok(void);
 334          void SERVO_emrchk(void);
 335          int  check_focus_ok(void);
 336          unsigned int udiv(unsigned int, unsigned int);
 337          void SERVO_processQcode(void);
 338          void SERVO_send_command_no_latch(int, unsigned int);
 339          void SERVO_send_one_command(unsigned char);
 340          void SERVO_focus_10(void);
 341          void SERVO_focus_20(void);
 342          void SERVO_focus_30(void);
 343          void SERVO_focus_40(void);
 344          void SERVO_focus_50(void);
 345          void SERVO_focus_60(void);
 346          void SERVO_fcsext(void);
 347          void SERVO_fcsdwn(void);
 348          int  SERVO_match(void);
 349          void SERVO_trackjump_1(int);
 350          void trackjump_monitor(int);
 351          void long_trackjump_monitor(void);
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 7   

 352          void clear_emergency_flag(void);
 353          unsigned int adjCDtime(unsigned int time, unsigned int amount, 
 354          			      unsigned int direction);
 355          void SERVO_schedule(void);
 356          void Do_mute(void);
 357          void Undo_mute(void);
 358          int SERVO_search(void);
 359          int SERVO_stop(void);
 360          void SERVO_send_command(int num, unsigned int data);
 361          void SERVO_2N_trackjump(int qdirection, int track_diff);
 362          void SERVO_all_servo_off(void);
 363          void reset_emergency_flag(void);
 364          void SERVO_ReadQCode(void);
 365          
 366          /* make sure this is at least 750 ns, but not much more */
 367          /* 1 clock = 15ns@66mhz or 20ns@50Mhz */
 368          /* each pass of loop = at least 4 clocks, but leave a bit extra */
 369          void SERVO_Wait750()
 370          {
 371          	volatile unsigned int i;
 372          	
 373          // 	for (i=0; i<(750/60); i++);
 374           	for (i=0; i<3; i++);
 375          //	for (i=0; i<20; i++);
 376          
 377          }
 378          
 379          
 380          
 381          /************************************************************************
 382           * Q CODES
 383           ************************************************************************/
 384          
 385           extern unsigned char jump_flag;
 386           
 387          void SERVO_processQcode()
 388          {
 389              int num;
 390          
 391          	SERVO_ReadQCode();
 392          	
 393          	if ((SERVO_Qarray[0]&0x0f)!=0x01)
 394              		return;
 395              if (!SERVO_Qarray[SERVO_QZERO]) {
 396              
 397          		for (num = 0; num < SUBQ_LEN; num++)
 398          		{
 399          	    	SERVO_Qarray_new[num] = SERVO_Qarray[num];
 400          	#ifdef SLAVE_MODE   ///Adam add for slave mode..
              			Slv_SendSubCodeQ(num,SERVO_Qarray_new[num]);
              	#endif
 403          	    	
 404          	    }
 405          	    	
 406          	    if (SUBQ_READY==1)
 407          	    	SERVO_new_Qcode = 0;
 408          	    else
 409          			SERVO_new_Qcode = 1;
 410          	    	
 411          /*		SERVO_new_Qcode = 1; */
 412          		/* Get absolute CD time */
 413          		SERVO_cdtime = (SERVO_Qarray[SERVO_QPMIN] << 16) | 
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 8   

 414          	       (SERVO_Qarray[SERVO_QPSEC] << 8) | 
 415          			SERVO_Qarray[SERVO_QPFRAME];
 416              	}
 417          }
 418          
 419          #ifdef ENABLE_MP3      
              extern void mp3_servo_emrchk( void );
              void mp3_servo_service()
              {
                 if (mutecmd == 1)
              		Do_mute();
                   else if (mutecmd == 2)
              		Undo_mute();
                   mutecmd = 0;
              
              
                  if (servo_focus_drop || servo_gfs_drop)
              	mp3_servo_emrchk();
                  SERVO_schedule();
              
              }
              #endif  // ENABLE_MP3      
 436          
 437          /*
 438           * Get subQ code and check emergency situations
 439           */
 440          void SERVO_service()
 441          {
 442          	/* first check edge detector on SCOR */
 443          	if(SUBQ_READY){
 444          	        RESET_SUBQ;
 445          		/*YES, now check for CRC*/
 446          		if(SERVO_SQSO_HIGH){ 
 447          			/*YES, get subq data*/
 448          			SERVO_processQcode();
 449          			/*reset subQ emergency variables*/
 450          			servo_subq_timer=SUBQ_TIMEOUT;
 451          			servo_subq_drop=0;
 452          			servo_sbqemr=0;
 453          			}
 454          		/* else //hide by ding */
 455          /*    		zputs("NO CRC\n"); */
 456          		} 
 457          #if 1
 458              /* mutecmd maybe set in timer interrupt */
 459              if (mutecmd == 1)
 460          		Do_mute();
 461              else if (mutecmd == 2)
 462          		Undo_mute();
 463              mutecmd = 0;
 464          
 465          
 466              /* Emergency checking */
 467              if (/*(CDinfo.type != CD_NODISC) &&*/
 468          		(servo_focus_drop || servo_gfs_drop || servo_subq_drop))
 469          			SERVO_emrchk();
 470          
 471              SERVO_schedule();
 472          #endif    
 473          }
 474          
 475          
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 9   

 476          void SERVO_service1()
 477          {
 478                  if (SUBQ_READY) {
 479          	/* first check edge detector on SCOR */
 480          	        RESET_SUBQ;
 481          		if(SERVO_SQSO_HIGH){
 482          			/*YES, get subq data*/
 483          			SERVO_processQcode();
 484          			/*reset subQ emergency variables*/
 485          			servo_subq_timer=SUBQ_TIMEOUT;
 486          			servo_subq_drop=0;
 487          			servo_sbqemr=0;
 488          			}
 489          		/* else //hide by ding */
 490          /*    		zputs("NO CRC1\n"); */
 491                  }
 492          }
 493          extern unsigned char fg_mode;
 494          extern TMSF cdm; 
 495          extern bit cd_pause, ls_pause;
 496          extern unsigned char VCD_ver;
 497          extern void CDU_CDactTit();
 498          extern void CDU_CDabsMin();
 499          extern void CDU_CDabsSec();
 500          extern void CDU_CDfound();
 501          #ifdef USE_OSD_FUNC	//chu
              extern char slow_state;
              #endif
 504          extern void FIX_KYopcl();	//chu
 505          extern int SERVO_open();
 506          #ifdef ENABLE_ESP 
              extern void esp_track_change();
              #endif
 509          
 510          void SERVO_mode_handle()
 511          {
 512          	int num;
 513          	int flag;
 514          	unsigned int r_tmp;
 515          
 516          	disable_reset_timer();
 517          
 518          	switch (SERVO_mode) {
 519          		case SERVO_IDLE:
 520          		     break;
 521          		case SERVO_STOP:
 522          			SERVO_stop();
 523          			SERVO_mode=SERVO_IDLE;
 524          			break;
 525          		case SERVO_OPEN:
 526          			SERVO_open();
 527          			break;
 528          		case SERVO_CLOSE:
 529          			SERVO_close();
 530          			SERVO_mode = SERVO_IDLE;
 531          			break;
 532          		case SERVO_PLAY:
 533          			if (search_flag) {
 534          				int found;
 535          				search_flag = 0;
 536          				/* Go back to previous position after emergency handling */
 537          	//			pcm_mute();
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 10  

 538          				#ifdef NEW_DSP
              				     regs16->Game_TLB_23=0x15;
              			    #else
 541          				     pcm_mute();
 542          			    #endif
 543              
 544          				found = SERVO_search();
 545          				if (!found && !servo_focus_on) {
 546          					SERVO_stop();
 547          					break;
 548          				}
 549          
 550          				#ifdef NEW_DSP
              				     regs16->Game_TLB_23=0x0;
              			    #else
 553          				     pcm_restore();
 554          			    #endif 
 555          			
 556          			//	pcm_restore();
 557          			}
 558          			/* Update VFD display for any new information during playing.	  */
 559          			/* Update the Q-sub data to SERVO_Qarray_current from		  */
 560          			/* SERVO_Qarray_new, for the RECOVER use if any lost of the track */
 561          			if (SERVO_new_Qcode && kickfg) {
 562          				dsa_recv.word=DSR_FOUND;  ///kzy add 5/23
 563          				SERVO_new_Qcode = 0;
 564          				if ((SERVO_Qarray_new[SERVO_QCTRADD] & 0xf) == 0x01) {
 565          				int prev_time;
 566          					/* Keep out of lead out area */
 567          					if (SERVO_Qarray_new[SERVO_QTRACK] == 0xaa) {
 568          											dsa_recv.byte[DSA_PAR] = 0xaa;
 569          						CDU_CDactTit();
 570          											break;
 571          					}
 572          					/* abnormal Q_time */
 573          					prev_time = (SERVO_Qarray_current[SERVO_QPMIN] << 16) |
 574          								(SERVO_Qarray_current[SERVO_QPSEC] << 8) |
 575          								SERVO_Qarray_current[SERVO_QPFRAME];
 576          					if ((SERVO_cdtime < prev_time) ||
 577          						(SERVO_cdtime > adjCDtime(prev_time, 0x50, 1)))
 578          					{
 579          						int tmp,found;
 580          
 581          						tmp = adjCDtime(prev_time, 0x30, 1);
 582          						target_min   = (tmp>>16) & 0xff;
 583          						target_sec   = (tmp >>8) & 0xff;
 584          						target_frame = tmp & 0xff;
 585          
 586          					    #ifdef NEW_DSP
              					       regs16->Game_TLB_23=0x15;
              					    #else 
 589          						   pcm_mute();
 590          					    #endif
 591                

⌨️ 快捷键说明

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