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