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

📄 nesp.src

📁 SM5907应用程序
💻 SRC
📖 第 1 页 / 共 3 页
字号:
		jr	z,rete03
		cp	r4,#8				;0~8 frame
		jr	uge,rete03
		ld	by_esp_timer,#30	;50ms
esp_cnnt_direct:call	Svounmute
		ld	r13,#00100101b		;direct connect
		or	by_esp_flag,#b_esp_dlnk
		jr	esp_cnnt_31

espcnnt41:	add	by_esp_lnk_count,#10h
		jp	esp_connect_11
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;step 5
;;wait connect ok
esp_connect_50:	tm	by_svo_flag8,#b8_svo_dataerr
		jp	nz,esp_connect_13	;espcnnt51
		tm	by_esp_flag2,#b2_esp_dcomp
		jr	nz,esp_cnnt_51
	;connect ok
		call	chklnktime
		jr	c,espcnnt53		;have error

		tm	by_flag1,#b1_pbt_scan2 | b1_pbt_scan
		jr	z,espcnnt5x
		call	hold_cnnt_time
		jr	espcnntok
		
espcnnt5x	cp	r4,#6		;-5~+5 frm ok when compare-connect
		jr	ult,espcnntok
		tm	by_esp_flag,#b_esp_dlnk
		jr	z,espcnnt53
		cp	r4,#11		;0~+10 frm ok when direct-connect
		jr	uge,espcnnt53
		tm	by_svo_flag10,#b10_svo_fwd
		jr	z,espcnnt55
espcnntok:	clr	by_esp_lnk_count	;-2~10frm ok
		ld	by_esp_task,#n_esp_chk
		clr	by_esp_jmp_cnt
		and	by_esp_flag,#~b_esp_skip & ~b_esp_dlnk & ~b_esp_rev
		and	by_svo_flag8,#~b8_svo_newsbq & ~b8_svo_dataerr
		call	ClrQstatus
		ld	by_esp_timer,#7
		ld	r13,#10100001b		;start encode
		call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys
rete04:		ret

esp_cnnt_51:	;cp	by_svo_utl,#n_svoutl_play	;seek ok
		;jp	ne,esp_connect_13		;Playtime
		cp	by_esp_timer,#0
		jr	eq,espcnnt52
		call	chklnktime
		jr	c,espcnnt52			;have error
		tm	by_svo_flag10,#b10_svo_fwd
		jr	z,rete04
		cp	r4,#10
		jr	uge,espcnnt52
		ret
espcnnt53:
espcnnt55:
espcnnt52:	inc	by_esp_lnk_count
		and	by_esp_flag,#~b_esp_dlnk
		jp	esp_connect_11

;
;c=1, error:r2|r3<>0, r4>30
;
chklnktime:	ld	r0,#by_esp_frm1
		ld	r1,#by_svo_frm_play
		call	Timedif
		or	r2,r3
		jr	nz,clterr
		cp	r4,#36
		jr	uge,clterr
		rcf
		ret
clterr:		scf
		ret
		

;-------------------------------------------------
;input:	r13,
esp_record_skip:cp	by_esp_jmp_cnt,r13
		jr	uge,esprecs1	;rete07
		cp	by_esp_lnk_count,#30h
		jr	ugt,esprecs1
		ret
esprecs1:	or	by_esp_flag,#b_esp_skip
		clr	by_esp_jmp_cnt
		clr	by_esp_lnk_count
		call	get_esp_skip_amt	;get skip amount
		cp	r13,#10
		jr	eq,esp_chk_jc1		;buffer full
		add	r13,r13
		add	r13,#by_esp_sbuf
		ld	pp,#10h
		ld	@r13,by_esp_min1
		inc	r13
		ld	@r13,by_esp_sec1
		inc	r13
		clr	pp
		
esp_chk_jc1:	ldw	rr6,#37			;skip 37 frames
                add	r7,by_esp_frm1
                add     r6,by_esp_sec1
		ld	r5,by_esp_min1
                call	Timeformat
		ld      by_esp_frm1,r7
                ld      by_esp_sec1,r6
		ld	by_esp_min1,r5
rete07:         ret


;=======================================================================
;	calculate esp play time
;=======================================================================
esp_lcd:	ld	r13,#92h
		call	esp_read2_command	;get remain dram time
		ldw	rr2,rr12

	;3344 for 5907, 3568 for other
;		ldw	rr4,#3344	;(time/256bits) *65536
		ldw	rr4,#3566	;(time/256bits) *65536
espxxx		
		call	Do16bitmul	;r2r3=frames
		div	rr2,#75
		ld	by_dram_sec,r3
		ld	by_dram_frm,r2
		ld	r13,r2		;2003/4/1/002
		or	r13,r3		;2003/4/1/002
		jr	nz,esp_lcd9	;2003/4/1/002
		call	esp_skip_reset	;because dram empty
		call	esprevrst
esp_lcd9:
		ld	r5,by_esp_min1
		ld	r6,by_esp_sec1
		ld	r7,by_esp_frm1

	;esp_rev begin
		cp	by_esp_rev,#0
		jr	eq,esplcd50
		tm	by_flag1,#b1_pbt_loop | b1_pbt_scan2
		jr	nz,esplcd55
		tm	by_scan_status,#80h
		jr	nz,esplcd55
		sub	r7,by_esp_rtime+2
		sbc	r6,by_esp_rtime+1
		sbc	r5,by_esp_rtime
		jr	esplcd56
esplcd55:	add	r7,by_esp_rtime+2
		adc	r6,by_esp_rtime+1
		adc	r5,by_esp_rtime
esplcd56:	call	Timeformat
esplcd50	
	;esp_rev end
		sub	r7,r2
		sbc	r6,r3
		sbc	r5,#0
		call	Timeformat
		jr	nc,esp_lcd3
	;time error
		ld	by_esp_min2,by_esp_min1
		ld	by_esp_sec2,by_esp_sec1
		ld	by_esp_frm2,by_esp_frm1
		ret
		
esp_lcd3:	call	get_esp_skip_amt	;get skip amount
		cp	r13,#0
		jr	eq,esp_lcd12
	;skip occur, substract skip time	;r13=skip amount
		ld	r12,r13
		mult	rr12,#37		;1 skip count=37frm
		div	rr12,#75		;r13=sec, r12=frm
		sub	r7,r12
		sbc	r6,r13
		sbc	r5,#0
		call	Timeformat
		
esp_lcd12:	
.if	0
		push	r4
		push	r5
		push	r6
		push	r7
		ld	by_tmp,r5
		ld	by_tmp+1,r6
		ld	by_tmp+2,r7
		ld	r0,#by_tmp+2
		ld	r1,#by_esp_frm2
		call	Timedif
		or	r2,r3
		jr	nz,esp111
;		cp	r4,#10
;		jr	uge,esp111
		jr	esp112
esp111:		nop
		nop
		nop
esp112:		pop	r7
		pop	r6
		pop	r5
		pop	r4
.endif				;test		
		ld	by_esp_min2,r5
		ld	by_esp_sec2,r6
		ld	by_esp_frm2,r7
		cp	r5,by_max_min
		jr	ne,esp_lcd10
		cp	r6,by_max_sec
esp_lcd10:	jr	c,esp_lcd11
		ld	r12,#6eh		;lead out
		jr	esp_lcd4
		
esp_lcd11:	ld	r14,by_mini_trk		;calculate track number
		ld	r15,by_max_trk
		inc	r15
esp_lcd6:	ld	r7,r14
		add	r7,r15
		rcf
		rrc	r7
		ld	r12,r7
		cp	r7,r14
		jr	eq,esp_lcd4	;
		call	Gettoc		;r5r6=min,sec
		cp	r5,by_esp_min2
		jr	ne,esp_lcd8
		cp	r6,by_esp_sec2
		jr	ne,esp_lcd8
		cp	r7,by_esp_frm2
		jr	eq,esp_lcd4
esp_lcd8:	jr	nc,esp_lcd7
		ld	r14,r12
		jr	esp_lcd6
esp_lcd7:	ld	r15,r12
		jr	esp_lcd6

esp_lcd4:	ld	by_esp_trk2,r12
		call	esp_chk_skip
		call	Espchkrev		;esp_rev
		ret



;;check write and read pointer, calculate amout skip count
esp_chk_skip:	call	get_esp_skip_amt
		cp	r13,#0
		jr	eq,rete08		;no skip
		ld	r13,#by_esp_sbuf
		ld	pp,#01h
		ld	r14,@r13
		inc	r13
		ld	r15,@r13
		inc	r13
		clr	pp
		cp	r14,by_esp_min2
		jr	ne,esp_chk_s1
		cp	r15,by_esp_sec2
		jr	ne,esp_chk_s1
esp_chk_s1:	jr	nc,rete08
		ld	r14,#by_esp_sbuf
		ld	pp,#11h
esp_chk_s3:	ld	r12,@r13
		ld	@r14,r12
		inc	r13
		inc	r14
		cp	r13,#by_esp_sbuf+20
		jr	ne,esp_chk_s3
		clr	@r14
		inc	r14
		clr	@r14
		clr	pp
rete08:		ret





;get skip amount,
;ouput:	 r13=skip amount
get_esp_skip_amt:
		ld	r14,#by_esp_sbuf
		clr	r13
		ld	pp,#01h
get_esp_skip_a2:ld	r12,@r14
		inc	r14
		ld	r15,@r14
		inc	r14
		or	r12,r15
		jr	z,get_esp_skip_a1
		inc	r13
		cp	r14,#by_esp_sbuf+20
		jr	ne,get_esp_skip_a2
get_esp_skip_a1:clr	pp
		ret


;
;function:	check reverse time
;
Espchkrev:	cp	by_esp_rev,#0
		jr	ne,espcr1
		ret
espcr1		ld	r0,#by_esp_min2
		ld	pp,#1
		ld	r1,#by_esp_rbuf
		ld	r5,@r1
		inc	r1
		ld	r6,@r1
		inc	r1
		ld	r7,@r1
		clr	pp
		call	Cpreg3iram3		;r5r6r7-@r0
		jr	c,espcr0
		ret
espcr0		dec	by_esp_rev
		ld	r5,by_esp_rtime
		ld	r6,by_esp_rtime+1
		ld	r7,by_esp_rtime+2
		ld	pp,#1
		ld	r1,#by_esp_rbuf+3
		ld	r2,@r1
		inc	r1
		ld	r3,@r1
		inc	r1
		ld	r4,@r1
		clr	pp
;		btjrt	espcr3,r3.7
;		com	r3
;		inc	r3
;		com	r4
;		inc	r4
;		jr	espcr4
;espcr3:		bitr	r3.7
espcr4:		sub	r7,r4
		sbc	r6,r3
		sbc	r5,#0
		call	Timeformat
		ld	by_esp_rtime,r5
		ld	by_esp_rtime+1,r6
		ld	by_esp_rtime+2,r7
		ld	pp,#11h
		ld	r14,#by_esp_rbuf
		ld	r15,#by_esp_rbuf+6
espcr2		ld	r13,@r15
		ld	@r14,r13
		inc	r14
		inc	r15
		cp	r15,#by_esp_rbuf+36
		jr	ne,espcr2
		clr	pp
		ret

Esprev::	ld	r13,#00100001b	;stop encoding
		call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys

		ld	r0,#by_esp_frm1
		ld	r1,#by_svo_frm_play
		call	Timedif
;		ld	by_keyop_input2,r3		;test
;		tm	by_svo_flag10,#b10_svo_fwd
;		jr	z,esprev0
;		bits	r3.7			;substract time
esprev0:	ld	r13,by_esp_rev
;		cp	r13,#6
;		jr	ult,esprev5
;		jr	$
esprev5:	add	r13,r13
		add	r13,by_esp_rev
		add	r13,r13			;r13*6
		add	r13,#by_esp_rbuf
		ld	pp,#10h
		ld	@r13,by_esp_min1
		inc	r13
		ld	@r13,by_esp_sec1
		inc	r13
		ld	@r13,by_esp_frm1
		inc	r13
		ld	@r13,r2
		inc	r13
		ld	@r13,r3
		inc	r13
		ld	@r13,r4
		clr	pp
		inc	by_esp_rev
		ld	r5,by_esp_rtime
		ld	r6,by_esp_rtime+1
		ld	r7,by_esp_rtime+2
;		btjrf	esprev1,r3.7
;		bitr	r3.7
;		sub	r7,r4
;		sbc	r6,r3
;		sbc	r5,#0
;		jr	esprev11
esprev1:	add	r7,r4
		adc	r6,r3
		adc	r5,r2
esprev11:	call	Timeformat
;		btjrf	esprev12,r5.7
;test100:	jr	$
esprev12:
		ld	by_esp_rtime,r5
		ld	by_esp_rtime+1,r6
		ld	by_esp_rtime+2,r7
		call	hold_cnnt_time
		or	by_time_flag,#b_esp_100ms
		ld	by_esp_task,#n_esp_cnnt30
		or	by_esp_flag,#b_esp_rev
		tm	by_flag1,#b1_pbt_loop
		jr	z,esprev15
		ldw	rr12,#-15
		call	Adjsvotime
esprev15	jp	Playtime
;=======================================================================
;	 esp key process
;=======================================================================
;
;function:	esp switch
;
Espkey::	cp	by_sys_status,#n_sys_waitplay	;n_sys_stopped
		jr	ule,espoexit
		cp	by_esp_task,#0
		jr	eq,Espon
		jr	Espoff


esp_off_nogap:	call	Svomute
		ld	r13,#00100001b	;stop encoding
		call	esp_cmd_80h	;en,wacl,de,racl,dcn2,dcn1,waqv,sys
		call	Cda1x
		call	ClrQstatus
		ld	r5,by_esp_min2
		ld	r6,by_esp_sec2
		ld	r7,by_esp_frm2
		ldw	rr12,#0100h	;+1s0f
		call	Adjsvotm1
		call	Playtime
		ld	by_esp_task,#n_esp_off20
espoexit:	ret


⌨️ 快捷键说明

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