📄 nesp.src
字号:
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 + -