001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095 | ;********************* Split-out **********************
cblock h'40'
spout_lp
spout_adrl
spout_adrr
spout_adrwl
spout_adrwr
spout_data
spout_sft
spout_sftw
spout_tol
spout_fml
spout_tor
spout_fmr
endc
split_out
movlw d'8' ;Set loop count
movwf spout_lp ;Save loop count
movwf spout_sft ;Save shift loop count
movlw scrnhd ;Set screen head adr
addlw d'7' ;Set screen adr(Left)
movwf spout_adrl ;Save screen adr(Left)
addlw d'1' ;Set work adr(Right)
movwf spout_adrr ;Save work adr(Right)
movlw scrnwhd ;Set work head adr
addlw d'7' ;Set work adr(Left)
movwf spout_adrwl ;Save work adr(Left)
addlw d'1' ;Set work adr(Right)
movwf spout_adrwr ;Save work adr(Right)
split_out_lp
decfsz spout_sft,f ;Need shift ?
goto split_out_shift ;Yes. jump to shift proc
split_out1
movf spout_adrwl,w ;Read work adr(Left)
movwf fsr ;Set work adr
movf indf,w ;Read work data
movwf spout_data ;Save data
movf spout_adrl,w ;Read screen adr
movwf fsr ;Set screen adr
movf spout_data,w ;Read data
movwf indf ;Write data(Left)
movf spout_adrwr,w ;Read work adr(Right)
movwf fsr ;Set work adr
movf indf,w ;Read work data
movwf spout_data ;Save data
movf spout_adrr,w ;Read screen adr
movwf fsr ;Set screen adr
movf spout_data,w ;Read data
movwf indf ;Write data(Right)
call led_cnt ;LED control
call t100m ;Wait 100 msec
decf spout_adrl,f ;Screen adr - 1
decf spout_adrwl,f ;Work adr - 1
incf spout_adrr,f ;Work left adr + 1
incf spout_adrwr,f ;Work right adr + 1
decfsz spout_lp,f ;Split end ?
goto split_out_lp ;No. Next
return
split_out_shift
movf spout_sft,w ;Shift loop count
movwf spout_sftw ;Save shift loop count
movlw scrnhd ;Set screen head address
movwf spout_tol ;Save TO adr(Left)
incf spout_tol,w ;TO adr + 1
movwf spout_fml ;Save FROM adr(Left)
addlw d'13' ;Set screen right index
movwf spout_fmr ;Save FROM adr(Right)
incf spout_fmr,w ;FROM adr + 1
movwf spout_tor ;Set TO adr(Right)
splito_shift_lp
movf spout_fml,w ;Read FROM adr(Left)
movwf fsr ;Set FROM adr
movf indf,w ;Read FROM data
movwf spout_data ;Save data
movf spout_tol,w ;Read TO adr
movwf fsr ;Set TO adr
movf spout_data,w ;Read data
movwf indf ;Write data(Left)
movf spout_fmr,w ;Read FROM adr(Right)
movwf fsr ;Set FROM adr
movf indf,w ;Read FROM data
movwf spout_data ;Save data
movf spout_tor,w ;Read TO adr
movwf fsr ;Set TO adr
movf spout_data,w ;Read data
movwf indf ;Write data(Right)
incf spout_tol,f ;TO adr(Left) + 1
incf spout_fml,f ;FROM adr(Left) + 1
decf spout_tor,f ;TO adr(Right) - 1
decf spout_fmr,f ;FROM adr(Right) - 1
decfsz spout_sftw,f ;Shift end ?
goto splito_shift_lp ;No. Next
goto split_out1 ;Yes. Shift end |