Subversion Repositories pentevo

Rev

Rev 639 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 28.03.2014 savelij
  3.  
  4. ;Receive one or more files using ZMODEM.
  5. ;ПРИЕМ ОДНОГО ФАЙЛА
  6. ;НА ВХОДЕ: DE=АДРЕС БУФЕРА ЗАГРУЗКИ
  7. ZRECV           XOR A
  8.                 LD H,A
  9.                 LD L,A
  10.                 LD (totl_bytes),HL
  11.                 LD (totl_bytes+2),HL
  12.                 LD (zctlesc),A
  13.                 CALL ZRECVF
  14.                 PUSH AF
  15.                 CALL CMP_FILEEXT                ;ПРОВЕРКА РАСШИРЕНИЯ ПРИНИМАЕМОГО ФАЙЛА
  16.                 JR Z,BREAK_RECV
  17.                 POP AF
  18.                 CP ZFILE
  19.                 CALL Z,ZRECVF2
  20.                 CP ZFILE
  21.                 JR NC,ABORTTX
  22.                 RET
  23.  
  24. ;ПРИ НЕПОДДЕРЖИВАЕМОМ РАСШИРЕНИИ ПОСЫЛ ПРЕРЫВАНИЯ ПЕРЕДАЧИ И ВЫХОД
  25. BREAK_RECV      POP AF
  26.                 LD A,ZCAN
  27.                 CALL ZSHHDR
  28.                 CALL ABORTTX
  29.                 LD HL,TXT_BREAKRECV
  30.                 CALL PRINT_MSG
  31.                 LD HL,TXT_ANYKEY
  32.                 CALL PRINT_MSG
  33. BREAKRECV1      XOR A
  34.                 IN A,(0XFE)
  35.                 CPL
  36.                 AND 0X1F
  37.                 JR Z,BREAKRECV1
  38. BREAKRECV2      XOR A
  39.                 IN A,(0XFE)
  40.                 CPL
  41.                 AND 0X1F
  42.                 JR NZ,BREAKRECV2
  43.                 LD A,0XFF
  44.                 RET
  45.  
  46. ;Initialize for Zmodem receive attempt, try to activate Zmodem sender
  47. ; Handles ZSINIT frame
  48. ; Return ZFILE if Zmodem filename received, -1 on error,
  49. ;  ZCOMPL if transaction finished, else 0
  50. ;DE=АДРЕС БУФЕРА ЗАГРУЗКИ
  51. ZRECVF          LD A,ZRINIT
  52.                 LD (tryzhdrtype),A
  53.                 LD HL,ZRECVF_N
  54.                 LD (HL),60
  55. ZR_0062         LD HL,ZRECVF_N
  56.                 DEC (HL)
  57.                 RET Z
  58.                 LD A,(zmrtype)
  59.                 DEC A
  60.                 JR Z,ZR_0066
  61.                 LD BC,BLKSIZE
  62.                 LD HL,zmblkmax
  63.                 AND A
  64.                 SBC HL,BC
  65.                 JR NC,ZR_0065
  66. ZR_0066         LD DE,zmblkmax
  67.                 LD BC,0
  68.                 JR ZR_0158
  69.  
  70. ZR_0065         LD BC,0
  71.                 LD D,B
  72.                 LD E,C
  73. ZR_0158         CALL STOHDR
  74.                 LD HL,txhdr+3
  75.                 LD (HL),CANFC32|CANFDX
  76.                 LD A,(zmrtype)
  77.                 AND A
  78.                 JR NZ,ZR_0070
  79.                 SET 1,(HL)
  80. ZR_0070         LD A,(zctlesc)
  81.                 AND A
  82.                 JR Z,ZR_0072
  83.                 SET 6,(HL)
  84. ZR_0072         LD A,(tryzhdrtype)
  85.                 CALL ZSHHDR
  86.                 LD HL,tryzhdrtype
  87.                 LD A,ZSKIP
  88.                 CP (HL)
  89.                 JR NZ,ZR_0074
  90.                 LD (HL),ZRINIT
  91. ;again
  92. ZR_0074         CALL ZGETHDR
  93.                 CP ZRQINIT      ;0
  94.                 JR Z,ZR_0062
  95.                 CP ZSINIT       ;2
  96.                 JR Z,ZR_0080
  97.                 CP ZFILE        ;4
  98.                 JR Z,ZR_0077
  99.                 CP ZFIN         ;8
  100.                 JR Z,ZR_0085
  101.                 CP ZEOF         ;11
  102.                 JR Z,ZR_0062
  103.                 CP ZCOMPL       ;15
  104.                 JR Z,ZR_0074
  105.                 CP ZCAN         ;16
  106.                 JR Z,ZR_0091
  107.                 CP ZFREECNT     ;17
  108.                 JR Z,ZR_0083
  109.                 CP ZCOMMAND     ;18
  110.                 JR Z,ZR_0091
  111.                 JR ZR_0062
  112.  
  113. ZR_0077         LD HL,rxhdr+1
  114.                 LD DE,ztrans
  115.                 LDI
  116.                 LDI
  117.                 LDI
  118.                 LD A,ZRINIT
  119.                 LD (tryzhdrtype),A
  120.                 LD DE,zmblkmax
  121.                 LD HL,zmbuff
  122.                 CALL ZRDATA
  123.                 CP ZCRCW
  124.                 JR NZ,ZR_0082
  125.                 LD A,ZFILE
  126.                 RET
  127.  
  128. ZR_0080         LD A,(rxhdr+3)
  129.                 AND 0X40
  130.                 LD (zctlesc),A
  131.                 LD HL,attn
  132.                 LD DE,0X20
  133.                 CALL ZRDATA
  134.                 CP ZCRCW
  135.                 JR NZ,ZR_0082
  136.                 LD BC,0
  137.                 LD DE,1
  138.                 CALL STOHDR
  139.                 JR ZR_0083
  140.  
  141. ZR_0082         LD A,ZNAK
  142.                 JR ZR_0161
  143.  
  144. ZR_0083         LD A,ZACK
  145. ZR_0161         CALL ZSHHDR
  146.                 JR ZR_0074
  147.  
  148. ZR_0085         LD BC,0
  149.                 LD D,B
  150.                 LD E,C
  151.                 CALL STOHDR
  152.                 LD IXL,3
  153. ZR_0087         DEC IXL
  154.                 JR Z,ZR_0086
  155.                 LD A,ZFIN
  156.                 CALL ZSHHDR
  157.                 CALL RS232_READ
  158.                 CP "O"
  159.                 JR NZ,ZR_0087
  160.                 CALL RS232_READ
  161. ZR_0086         LD A,ZCOMPL
  162.                 RET
  163.  
  164. ZR_0091         LD A,ERROR
  165.                 RET
  166.  
  167. ;Receive 1 or more files with ZMODEM protocol
  168. ZRECVF2         LD HL,ZRECVF2_TRIES
  169.                 LD (HL),10
  170.                 LD HL,ZRECVF2_TRIES
  171.                 DEC (HL)
  172.                 LD A,ERROR
  173.                 RET Z
  174. ZR_0097         CALL ZRECVF3
  175.                 CP ZSKIP        ;5
  176.                 JR Z,ZR_0099
  177.                 CP ZEOF         ;11
  178.                 JR NZ,ZR_0104
  179. ZR_0099         CALL ZRECVF
  180.                 CP ZCOMPL       ;15
  181.                 JR NZ,ZR_0102
  182.                 LD A,OK
  183.                 RET
  184.  
  185. ZR_0102         CP ZFILE        ;4
  186.                 JR Z,ZRECVF2
  187.                 LD A,ERROR
  188.                 RET
  189.  
  190. ZR_0104         CP ZRINIT       ;1
  191.                 RET NZ
  192.                 LD A,ERROR
  193.                 RET
  194.  
  195. ;Receive a file with ZMODEM protocol
  196. ; Assumes file name frame is in zmbuff
  197. ZRECVF3         LD HL,0
  198.                 LD (rxbytes),HL
  199.                 LD (rxbytes+2),HL
  200.                 LD A,10
  201.                 LD (ZRECVF3_TRIES),A
  202. ZR_0108         LD DE,(rxbytes)
  203.                 LD BC,(rxbytes+2)
  204.                 CALL STOHDR
  205.                 LD A,ZRPOS
  206.                 CALL ZSHHDR
  207. ;nxthdr
  208. ZR_0109         CALL ZGETHDR
  209.                 CP ZFILE        ;4
  210.                 JR Z,ZR_0113
  211.                 CP ZSKIP        ;5
  212.                 JR Z,ZR_0121
  213.                 CP ZNAK         ;6
  214.                 JP Z,ZR_0111
  215.                 CP ZDATA        ;10
  216.                 JR Z,ZR_0122
  217.                 CP ZEOF         ;11
  218.                 JR Z,ZR_0115
  219. ZR_0111         LD HL,ZRECVF3_TRIES
  220.                 DEC (HL)
  221.                 RET Z
  222. ZR_0113         LD DE,zmblkmax
  223.                 LD HL,zmbuff
  224.                 CALL ZRDATA
  225.                 JR ZR_0108
  226.  
  227. ZR_0115         CALL RCLHDR
  228.                 LD HL,(rxbytes)
  229.                 AND A
  230.                 SBC HL,DE
  231.                 JR NZ,ZR_0109
  232.                 LD HL,(rxbytes+2)
  233.                 AND A
  234.                 SBC HL,BC
  235.                 JR NZ,ZR_0109
  236.                 LD HL,totl_bytes
  237.                 LD DE,(rxbytes)
  238.                 CALL ADD_ADR_DD
  239.                 LD A,(rxtype)
  240.                 RET
  241.  
  242. ZR_0118         LD HL,ZRECVF3_TRIES
  243.                 DEC (HL)
  244.                 JR NZ,ZR_0108
  245.                 RET
  246.  
  247. ZR_0121         LD A,(prev_rxtype)
  248.                 RET
  249.  
  250. ZR_0122         CALL RCLHDR
  251.                 LD HL,0XC000
  252.                 LD (ADR_BUFRECV),HL
  253.                 LD HL,(rxbytes)
  254.                 AND A
  255.                 SBC HL,DE
  256.                 JR NZ,ZR_0183
  257.                 LD HL,(rxbytes+2)
  258.                 AND A
  259.                 SBC HL,BC
  260.                 JR Z,ZR_0124
  261. ZR_0183         LD HL,ZRECVF3_TRIES
  262.                 DEC (HL)
  263.                 RET Z
  264.                 CALL RXATTN
  265.                 JP ZR_0108
  266.  
  267. ;moredata
  268. ZR_0124         LD DE,zmblkmax
  269.                 LD HL,(ADR_BUFRECV);zmbuff
  270.                 LD A,H
  271.                 OR L
  272.                 CALL Z,NEXT_PAGE
  273.                 CALL ZRDATA
  274.                 CP ZCAN         ;0X10
  275.                 RET Z
  276.                 CP ZCRCE        ;h
  277.                 JR Z,ZR_0133
  278.                 CP ZCRCG        ;i
  279.                 JR Z,ZR_0132
  280.                 CP ZCRCQ        ;j
  281.                 JR Z,ZR_0131
  282.                 CP ZCRCW        ;k
  283.                 JR Z,ZR_0130
  284.                 CP ERROR        ;0XFE
  285.                 JR Z,ZR_0138
  286. ;sendnak
  287. ZR_0140         CALL RXATTN
  288.                 LD BC,(rxbytes+2)
  289.                 LD DE,(rxbytes)
  290.                 CALL STOHDR
  291.                 LD A,ZNAK
  292.                 CALL ZSHHDR
  293.                 JR ZR_0124
  294.  
  295. ZR_0138         LD HL,ZRECVF3_TRIES
  296.                 DEC (HL)
  297.                 JR NZ,ZR_0140
  298.                 LD A,ERROR
  299.                 RET
  300.  
  301. ZR_0130         CALL ZR_0193
  302.                 LD A,XON
  303.                 CALL RS232_WRITE
  304.                 JR ZR_0184
  305.  
  306. ZR_0131         CALL ZR_0193
  307.                 JR ZR_0185
  308.  
  309. ZR_0132         LD HL,rxbytes
  310.                 LD DE,(rxcount)
  311.                 CALL ADD_ADR_DD
  312.                 CALL UPDATE_CHISLO
  313. ZR_0185         LD A,10
  314.                 LD (ZRECVF3_TRIES),A
  315.                 JR ZR_0124
  316.  
  317. ZR_0133         LD HL,rxbytes
  318.                 LD DE,(rxcount)
  319.                 CALL ADD_ADR_DD
  320.                 CALL UPDATE_CHISLO
  321. ZR_0184         LD A,10
  322.                 LD (ZRECVF3_TRIES),A
  323.                 JP ZR_0109
  324.  
  325. ZR_0193         LD HL,rxbytes
  326.                 LD DE,(rxcount)
  327.                 CALL ADD_ADR_DD
  328.                 CALL UPDATE_CHISLO
  329.                 CALL STOHDR
  330.                 LD A,ZACK
  331.                 JP ZSHHDR
  332.  
  333. ADD_ADR_DD      LD A,D
  334.                 RLCA
  335.                 SBC A,A
  336.                 LD C,A
  337.                 LD B,C
  338.                 LD A,(HL)
  339.                 ADD A,E
  340.                 LD (HL),A
  341.                 INC HL
  342.                 LD A,(HL)
  343.                 ADC A,D
  344.                 LD (HL),A
  345.                 INC HL
  346.                 LD A,(HL)
  347.                 ADC A,C
  348.                 LD (HL),A
  349.                 INC HL
  350.                 LD A,(HL)
  351.                 ADC A,B
  352.                 LD (HL),A
  353.                 RET
  354.