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

📄 nesp.src

📁 SM5907应用程序
💻 SRC
📖 第 1 页 / 共 3 页
字号:

; tandow electronic co.
; (c) copyright 1997-2000,  all rights reserved
;
; module name:  esp.src
;
; description:	SM5907AF
;
; created by: jxd, 2002/1/24

;modify:	1. modify skip error step to 30frame
		.include	"s3c8245.reg"
		.include	"var.inc"
		.include	"sonydef.inc"

	.extern		Playtime, Adjsvotm1, Timedif, Timeformat, Svomute
	.extern		Svounmute, Gettoc, Cda1x, Cda2x, Getgfs
	.extern		Do16bitmul, Tabjump, Delay1ms, ClrQstatus, Delayxms
	.extern		Pitchoff10, Timedif1, Adjsvotime
	.extern		Cp3byte, Playtimepause, Clvstop, Cpreg3iram3, Sysplay1trk
	.extern		scan_par_tab
;=========================================================================
;	interface with cpu
;=========================================================================
;ymld		perform command pulse
;ymdata		data out for transfer command
;ymclk		clock out for transfer command
;zsense		data in when read status
;=========================================================================
;	bit variable
;=========================================================================
;by_esp_flag
b_esp_pause::		equ	00000001b
b_esp_skip		equ	00000010b
b_esp_disc_over		equ	00001000b
b_esp_mute		equ	00010000b
b_esp_dlnk		equ	00100000b
b_esp_run::		equ	01000000b
b_esp_rev		equ	10000000b

;by_esp_flag2,5907 status
b2_esp_msrih		equ	00000010b	;decoding stopped due to internal factors
b2_esp_mswih		equ	00000100b	;encoding stopped due to internal factors
b2_esp_dcomp		equ	00001000b	;compare-connect operating
b2_esp_bovf		equ	00100000b	;input buffer full
b2_esp_msovf		equ	01000000b	;dram full(only once)
b2_esp_flag6		equ	10000000b	;gfs low
;
; by_esp_flag3,5907 status
b3_esp_decod		equ	00010000b
b3_esp_encod		equ	00100000b	;
b3_esp_ovfl		equ	01000000b	;dram full
b3_esp_msemp		equ	10000000b	;empty


;by_esp_task
n_esp_off		equ	0
n_esp_off10		equ	1
n_esp_on10		equ	2
n_esp_on20		equ	3
n_esp_skip10		equ	4
n_esp_skip20		equ	5
n_esp_pause10		equ	6
n_esp_stop10		equ	7
n_esp_stop20::		equ	8
n_esp_chk		equ	9
n_esp_cnnt10		equ	10
n_esp_cnnt20		equ	11
n_esp_cnnt30		equ	12
n_esp_cnnt40		equ	13
n_esp_cnnt50		equ	14
n_esp_off20		equ	15



;=========================================================================
;	MACRO DEFINE
;=========================================================================
;
RESET_5907:		.MACRO
			.ENDM
;=========================================================================
;function:	initialize 5907
;		reset->set operation mode->set through mode
;=========================================================================
Espinit::
Init5907:	RESET_5907
		ldw	rr12,#(85h<<8) | 11000001b	;(4Mx4bit), 4 bits, yflag=l
;		ldw	rr12,#(85h<<8) | 11001000b	;(4Mx4bit), full bits, yflag=l
		call	esp_write_command
		call	Init5907inputbuf
		call	esp_through_mode
		clr	by_esp_task
		clr	by_esp_flag2
		clr	by_esp_flag3
rete00:		ret




;=========================================================================
;esp process
;1.	get 5907 status
;2.	get esp play time per 50ms
;3.	perform esp task
;=========================================================================
Espctrl::	cp	by_esp_task,#0
		jr	eq,rete00
		tm	by_esp_flag,#b_esp_run
		jr	z,rete00
		and	by_esp_flag,#~b_esp_run
		cp	by_esp_task,#n_esp_chk
		jr	ult,esp_pro1
		ld	r13,#90h
		call	esp_read1_command
		ld	by_esp_flag2,r13
		ld	r13,#91h
		call	esp_read1_command
		ld	by_esp_flag3,r13

		tm	by_esp_flag3,#b3_esp_decod
		jr	nz,esp_pro2
		tm	by_esp_flag3,#b3_esp_encod
		jr	nz,esp_pro2
		cp	tmr_100ms_esp,#0
		jr	ne,esp_pro3
;		tm	by_flag4,#b4_svo_B
;		jr	nz,rete00
		and	by_flag4,#~b4_svo_B
		call	esptime_2_svotime
		jp	esp_next1

esp_pro2:	ld	tmr_100ms_esp,#150	;15s
esp_pro3:	tm	by_time_flag,#b_esp_100ms
		jr	z,esp_pro1
		and	by_time_flag,#~b_esp_100ms
		call	esp_lcd
esp_pro1:	;tm	by_flag1,#b1_pbt_loop	;loop_lnk
		;jr	z,esp_pro4		;loop_lnk
		;tm	by_flag1,#b1_pbt_scan | b1_pbt_scan2	;loop_lnk
		;jr	nz,esp_pro4		;loop_lnk
		;tm	by_flag4,#b4_svo_B	;loop_lnk
		;jr	z,esp_pro4		;loop_lnk
		;cp	by_esp_task,#n_esp_chk
		;jr	ult,esp_pro4
		;ret
esp_pro4	ld	r13,by_esp_task
		ldw	rr14,#esp_task_tab
		jp	Tabjump




esp_task_tab:	dw	rete01
		dw	esp_off_10
		dw	esp_on_10
		dw	esp_on_20
		dw	esp_skip_10
		dw	esp_skip_20
		dw	esp_pause_10
		dw	esp_stop_10
		dw	rete01		;esp_stop_20
		dw	esp_check
		dw	esp_connect_10
		dw	esp_connect_20
		dw	esp_connect_30
		dw	esp_connect_40
		dw	esp_connect_50


;=======================================================================
;refresh write address
;		SUBQ_OK & HAVE_NO_ERROR
;		WAQV_COMMAND & START_DECODE
;=======================================================================
esp_check:	;tm	by_flag1,#b1_pbt_scan | b1_pbt_scan2
		;jr	nz,esprefresh

		tm	by_esp_flag2,#b2_esp_msovf | b2_esp_bovf
		jp	nz,esp_connect_11
		tm	by_svo_flag8,#b8_svo_dataerr
		jp	nz,esp_connect_13
		call	Getgfs
		jr	nz,esp_chk1
		and	by_svo_flag8,#~b8_svo_newsbq
		cp	by_esp_timer,#0		;by_esp_gfs_timer
		jp	eq,esp_connect_12
		ret
esp_chk1:	ld	by_esp_timer,#7		;14ms,by_esp_gfs_timer
		tm	by_svo_flag8,#b8_svo_newsbq	;have readed new correct q code
		jp	z,rete01
		and	by_svo_flag8,#~b8_svo_newsbq
;		tm	by_flag1,#b1_pbt_scan
;		jr	nz,esp_refresh_adr
		tm	by_esp_flag,#b_esp_pause
		jr	z,esp_refresh_adr
		cp	by_dram_sec,#42		;not refresh vwa when RDT>42S
		jp	ugt,rete01
esp_refresh_adr:call	chklnktime
		jp	c,esp_connect_12
		cp	r4,#2
		jr	ult,esprefresh
		tm	by_svo_flag10,#b10_svo_fwd
		jp	z,esp_connect_12
esprefresh:	ld	r13,#10100011b
		call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys
		cp	tmr_mute_2ms,#0
		jr	ne,esprf1
		call	esp_unmute			;tmp
		SYS_UNMUTE
esprf1		cp	by_svo_trk_play,#6eh
		jr	ne,esprf0
		or	by_esp_flag,#b_esp_disc_over
esprf0		call	hold_cnnt_time

esppb0:		tm	by_flag1,#b1_pbt_scan
		jr	nz,espchkscan
esppb1:		tm	by_flag1,#b1_pbt_scan2	;loop_lnk
		jr	nz,espchkscan2
		tm	by_flag1,#b1_pbt_loop	;loop_lnk
		jr	z,rete06
espchkloop:	ld	r0,#by_b_min		;loop_lnk
		ld	r1,#by_svo_min_play	;loop_lnk
		call	Cp3byte			;loop_lnk
		jr	c,esplp0
		ld	r0,#by_a_min
		ld	r1,#by_svo_min_play	;loop_lnk
		call	Cp3byte			;loop_lnk
		jr	c,rete06
esplp0:		ld	by_svo_min_play,by_a_min	;loop_lnk
		ld	by_svo_sec_play,by_a_sec	;loop_lnk
		ld	by_svo_frm_play,by_a_frm	;loop_lnk
		jp	Esprev
rete06:		ret

		
espchkscan:	ld	r13,by_scan_status
		add	r13,#4
		add	r13,r13
		clr	r12
		ldc	r13,#scan_par_tab1[rr12]
		ld	r5,by_scan_min
		ld	r6,by_scan_sec
		ld	r7,by_scan_frm
		add	r7,r13
		adc	r6,r12
		adc	r5,#0
		call	Timeformat
		ld	r0,#by_svo_min_play
		call	Cpreg3iram3
		jr	nc,rete06
		ld	r13,by_scan_status
		add	r13,#4
		add	r13,r13
		clr	r12
		ldc	r13,#scan_par_tab1+1[rr12]
		clr	r12
		div	rr12,#75
		ld	r0,r13
		ld	r13,r12
		ld	r12,r0
		tm	by_scan_status,#80h
		jr	z,esprf30
		com	r12
		com	r13
		incw	rr12
esprf30:	call	Adjsvotime		;Adjsvotm1
		jp	c,Sysplay1trk		;reach start position
		ld	by_scan_min,by_svo_min_play
		ld	by_scan_sec,by_svo_sec_play
		ld	by_scan_frm,by_svo_frm_play
		jp	Esprev
		
;
espchkscan2:	ld	r5,by_scan_min
		ld	r6,by_scan_sec
		ld	r7,by_scan_frm
		add	r7,#15
		adc	r6,#0
		adc	r5,#0
		call	Timeformat
		ld	r0,#by_svo_min_play
		call	Cpreg3iram3
		jr	nc,rete01
		ld	by_svo_min_play,by_scan_min
		ld	by_svo_sec_play,by_scan_sec
		ld	by_svo_frm_play,by_scan_frm
		jp	Esprev
		
;

;
;
;
hold_cnnt_time:	ld	by_esp_min1,by_svo_min_play
		ld	by_esp_sec1,by_svo_sec_play
		ld	by_esp_frm1,by_svo_frm_play
rete01:		ret

;
scan_par_tab1:	db	25,235		;frame of play and skip
		db	25,145		;170
		db	25,95		;115
		db	25,55		;60
		db	00,00
		db	74,25
		db	45,60
		db	35,125
		db	30,175

;=======================================================================
;	connect sequence
;		STOP_ENCODE
;		SERVO_TRACKING_TO_POSITION
;		SET_CONNECT_COMMAND
;		WAIT_CONNECT_OK
;=======================================================================
;;stop encode
esp_connect_10:	tm	by_svo_flag8,#b8_svo_dataerr
		jr	z,esp_connect_11
esp_connect_13:	add	by_esp_jmp_cnt,#3
esp_connect_12:	inc	by_esp_jmp_cnt
		and	by_svo_flag8,#~b8_svo_dataerr
esp_connect_11:	ld	r13,#00100001b		;stop encode
		call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys
		ld	by_esp_task,#n_esp_cnnt20
		and	by_esp_flag,#~b_esp_dlnk
		ret


;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;step 1
;;wait encoding stop and get servo to target time for connect
esp_connect_20:	tm	by_esp_flag3,#b3_esp_encod
		jr	nz,rete02
		tm	by_esp_flag,#b_esp_disc_over
		jr	nz,rete02
	;check jump cnt, add 30 frames per ? times when rdt>=2s, 
		cp	by_dram_sec,#42
		jr	ule,espcnnt23
		tm	by_esp_flag,#b_esp_pause
		jr	nz,esp_cnnt_26
		ret
		
espcnnt23:	ld	r13,#10*4
		tm	by_esp_flag,#b_esp_pause
		jr	nz,esp_cnnt_25
		ld	r13,#7*4
		cp	by_dram_sec,#2
		jr	ugt,esp_cnnt_25
		ld	r13,#6
esp_cnnt_25:	call	esp_record_skip		;skip error sector of disc
esp_cnnt_26:	ldw	rr12,#-15
		ld	r5,by_esp_min1		;get connection point
		ld	r6,by_esp_sec1
		ld	r7,by_esp_frm1
		call	Adjsvotm1		;adjust by_svo_min_play...
		call	Playtime
		inc	by_esp_task
rete02:		ret



;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;step 3
esp_connect_30:	tm	by_svo_flag8,#b8_svo_dataerr
		jr	nz,esp_connect_10	;espcnnt31	;only for skip count
		cp	tmr_256ms_svo,#n_t256ms_5s
		jr	ult,esp_connect_13	;skip counter increase if cannot reach target time in 7s
		cp	by_svo_utl,#n_svoutl_play	;seek ok
		jr	ne,rete02			;Playtime
	;determine connect type
;		call	chklnktime
;		jr	c,esp_connect_12
		tm	by_esp_flag,#b_esp_skip		;have skiped error
		jr	nz,esp_cnnt_sbq
		tm	by_esp_flag,#b_esp_rev
		jr	nz,espcnnt33
		tm	by_esp_flag,#b_esp_pause
		jr	nz,esp_cnnt_16b_3p		;16bits 3pair
		cp	by_dram_sec,#2
		jr	ult,esp_cnnt_sbq		;12bits 2pair
		ld	r13,by_esp_lnk_count
;		and	r13,#0fh
		cp	r13,#7
		jr	ule,esp_cnnt_16b_3p
		cp	r13,#15
		jr	ule,esp_cnnt_12b_3p
;		and	by_esp_lnk_count,#0f0h
;<2s
esp_cnnt_sbq:	call	Svomute
		;cp	by_esp_lnk_count,#30h
		;jr	ult,espcnnts1
		;ld	by_esp_jmp_cnt,#0ffh
		;jp	esp_cnnt_25
espcnnts1:	inc	by_esp_task
		ld	by_esp_timer,#150	;250ms
		ret

espcnnt33:	cp	by_esp_rev,#3
		jr	ult,esp_cnnt_sbq
		jp	Playtime
		ret

;>10s or pause status
esp_cnnt_16b_3p:ld	r13,#00000000b
		jr	ec3p

;6~10s
esp_cnnt_12b_3p:ld	r13,#00001000b
ec3p:		;tm	by_flag1,#b1_pbt_scan
		;jr	nz,ec3p1
		tm	by_esp_flag,#b_esp_pause
		jr	z,ec3p1
		or	r13,#01000000b
ec3p1:		call	esp_cmd_83h
		ld	r13,#00101101b		;12bit, 3 pair
		ld	by_esp_timer,#150	;250ms, can elapsed 37 frames
esp_cnnt_31:	call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys
		ld	by_esp_task,#n_esp_cnnt50
rete03:		ret


		

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;step 4, direct connect but check Qcode
;;wait sub code
esp_connect_40:	tm	by_svo_flag8,#b8_svo_dataerr
		jp	nz,esp_connect_13	;espcnnt41
;		cp	by_svo_utl,#n_svoutl_play	;seek ok
;		jp	ne,esp_connect_13		;Playtime
		cp	by_esp_timer,#0
		jp	eq,espcnnt41
		call	chklnktime
		jp	c,espcnnt41			;have error
		tm	by_flag1,#b1_pbt_scan2 | b1_pbt_scan
		jr	nz,esp_cnnt_direct
		tm	by_svo_flag10,#b10_svo_fwd

⌨️ 快捷键说明

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