;
;
;   utils_ip.txt
;
;
;----------------------------------------------
;
;    ISP  murus
;   tr_txds   
;  tr_rxds     
;       
;       
;    
;
 tr_spi:
  mov tr_txds,a
  clr murport.SCK_L
  mov tr_cnt,#8
 loop_tr:
  mov a,tr_txds
  rlc a
  mov murport.MOSI_L,C
  mov tr_txds,a
  mov r3,#10
  djnz r3,$
  setb murport.SCK_L
  mov r3,#20
  djnz r3,$
  mov a,murport ;
  clr murport.SCK_L
  mov C,ACC.MISO_L
  mov a,tr_rxds
  rlc a
  mov tr_rxds,a
  mov r3,#10
  djnz r3,$
  djnz tr_cnt,loop_tr
  mov a,tr_rxds
 ret
;
;----------------------------------------------
;
;     
;  "  "
;
;
 wait_s:
  mov a,murport
  jb ACC.EXT_S,wait_s
  acall tm_2 ; WAITT 2
  mov a,murport
  jb ACC.EXT_S,wait_s
  acall tm_2 ; WAITT 2
 l_wait_s:
  mov a,murport
  jnb ACC.EXT_S,l_wait_s
  acall tm_2 ; WAITT 2
  mov a,murport
  jnb ACC.EXT_S,l_wait_s
 ret
;
 tm_2:
  WAITT 2
 ret
  
;
;----------------------------------------------
;
;      ASCII
;    ,   R5:R4 -
; ,     R5
; ,     R4
;
;
;
 binascii:
   mov r7,a
   acall tetras
   mov r4,a
   mov a,r7
   swap a
   acall tetras
   mov r5,a
  ret
 tetras:
   anl a,#0b00001111
   inc a
   movc a,@a+PC
  ret
 kodas:
  .db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
;
;----------------------------------------------
;
;
;       0xFF
;  ,   flash_size 0
;  flash_size+1    
;
 blanc:
  mov r7,#0xFF
  mov dptr,#0
 loop_blanc:
   mov a,r7
   movx @dptr,a
   inc dptr
   mov a,DP0L
   jnz loop_blanc
   mov a,DP0H
   cjne a,flash_size+1,loop_blanc
 ret
;
;----------------------------------------------
;
; 
;    
;   
;     00000 - dump_size
;  
;  r1    
;  r0    
; ,     0xFF
;
 dumper:
  mov dptr,#0
  mov r7,#0xFF
  clr a
  mov r0,a
  mov r1,a
 loop_dumper:
   movx a,@dptr
   xrl a,r7
   jz over_adr
    mov r0,DP0L
    mov r1,DP0H
 over_adr:
   inc dptr
   mov a,DP0L
   jnz loop_dumper
   mov a,DP0H
   cjne a,flash_size+1,loop_dumper
  ret

;
;----------------------------------------------
;
;     
;
;    dptr     
;    (DP0L)   0
;    DP0H:DP0L 
;      
;     DP0H
;     
;   
;
 page_wr:
  mov a,#0b01010000
  acall tr_spi
  mov a,DP0H
  acall tr_spi
 ll_1:
   movx a,@dptr
   acall tr_spi
   inc DP0L
   mov a,DP0L
  jnz ll_1
 ret

;
;----------------------------------------------
;
;     
;
 page_hed:
  mov a,DP0H ;  "0nn00 ",  nn   DP0H
  acall binascii
  push DP0H
  push DP0L
  mov dptr,#optrs3_a+5
  mov a,r5
  movx @dptr,a
  inc dptr
  mov a,r4
  movx @dptr,a
  pop DP0L
  pop DP0H
  LLPRINT optrs3_a
 ret

;
;----------------------------------------------
;
;   
;
;    errd  ,  errk 
;  erradr  DP0L   
;     0xFF
;
 fftsr:
   clr ver_er
   mov a,#0b00110000
   acall tr_spi
   mov a,DP0H
   acall tr_spi
 ll_fftsr:
   clr a
   acall tr_spi
   mov r0,a
   mov r1,#0xFF
   jb ver_er,overhap
   mov errd,r0
   mov errk,r1
   mov erradr,DP0L
 overhap:
   mov a,r0
   xrl a,r1
   jz overhap1
   jb ver_er,overhap1
   setb ver_er
 overhap1:
   inc DP0L
   mov a,DP0L
   jnz ll_fftsr
  ret
   
;
;----------------------------------------------
;
;    
;
;    errd  ,  errk 
;  erradr  DP0L   
;      ,
;    
;
 wr_tsr:
   clr ver_er
   mov a,#0b00110000
   acall tr_spi
   mov a,DP0H
   acall tr_spi
 ll_wrtsr:
   clr a
   acall tr_spi
   mov r0,a
   movx a,@dptr
   mov r1,a
   jb ver_er,overhap2
   mov errd,r0
   mov errk,r1
   mov erradr,DP0L
 overhap2:
   mov a,r0
   xrl a,r1
   jz overhap3
   jb ver_er,overhap3
   setb ver_er
 overhap3:
   inc DP0L
   mov a,DP0L
   jnz ll_wrtsr
  ret
;
;----------------------------------------------
;
;
   
;
;----------------------------------------------
;
;
   
;
;----------------------------------------------
;
;