home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 277.lha / GetSend / send.asm < prev    next >
Encoding:
Assembly Source File  |  1989-08-08  |  2.3 KB  |  163 lines

  1. .model small
  2.  
  3. .stack 256
  4.  
  5. .data
  6. blocksize    =    32768
  7. ack_char    =    055h
  8.  
  9. len_l    dw    ?
  10. len_h    dw    ?
  11. file_handle    dw    ?
  12. file_data    db    blocksize dup (?)
  13. file_name    db    30 dup (?)
  14. chksum    db    0
  15. ctdn    dw    0
  16.  
  17. .code
  18.  
  19. init_ser:    mov    dx,3fbh
  20.     mov    al,131
  21.     out    dx,al
  22.     mov    al,1        ; 1=115.2K, 2=57.6K, 3=38.4 6=19.2
  23.     mov    dx,3f8h
  24.     out    dx,al
  25.     inc    dx
  26.     xor    al,al
  27.     out    dx,al
  28.     mov    dx,3fbh
  29.     mov    al,3
  30.     out    dx,al
  31.     ret
  32.  
  33. send_al:    add    chksum,al
  34.     push    ax
  35.     mov    dx,3fdh
  36. poll_loop:    in    al,dx
  37.     and    al,32
  38.     jz    poll_loop
  39.     jmp    short $+2
  40.     pop    ax
  41.     mov    dx,3f8h
  42.     out    dx,al
  43.     ret
  44.  
  45. get_al:                ; ret al=char, z if time out
  46.     mov    ctdn,50
  47. outer:    mov    cx,-1
  48. get_al_loop:    mov    dx,3fdh
  49.     in    al,dx
  50.     test    al,1
  51.     jnz    got_char
  52.     loop    get_al_loop
  53.     dec    ctdn
  54.     jnz    outer
  55.     xor    al,al
  56.     ret
  57. got_char:    mov    dx,3f8h
  58.     in    al,dx
  59.     or    dx,dx
  60.     ret
  61.  
  62.     
  63.  
  64. start:    mov    ax,es
  65.     mov    ds,ax
  66.     mov    ax,@data
  67.     mov    es,ax
  68.     mov    si,82h
  69.     mov    di,offset file_name
  70. scan_loop:    lodsb
  71.     cmp    al,0dh
  72.     jz    eon
  73.     stosb
  74.     jmp    scan_loop
  75. eon:    xor    al,al
  76.     stosb
  77.     mov    ax,ds
  78.     push    es
  79.     pop    ds
  80.     mov    es,ax
  81.     call    init_ser
  82.     mov    dx,offset file_name
  83.     mov    ah,4eh
  84.     xor    cx,cx
  85.     int    21h
  86.  
  87.     mov    ax,word ptr es:80h+26
  88.     mov    len_l,ax
  89.     mov    ax,word ptr es:80h+28
  90.     mov    len_h,ax
  91.     mov    ax,ds
  92.     mov    es,ax
  93.  
  94.     mov    dx,offset file_name
  95.     mov    ax,3d00h
  96.     int    21h            ; open for read
  97.     jc    done_prog            ; error not found
  98.     mov    file_handle,ax
  99.  
  100.     mov    al,55h
  101.     call    send_al
  102.     mov    al,0aah
  103.     call    send_al
  104.     mov    al,byte ptr len_h+1
  105.     call    send_al
  106.     mov    al,byte ptr len_h
  107.     call    send_al
  108.     mov    al,byte ptr len_l+1
  109.     call    send_al
  110.     mov    al,byte ptr len_l
  111.     call    send_al
  112.     lea    si,file_name
  113. send_name_loop:
  114.     lodsb
  115.     or    al,al
  116.     jz    end_name
  117.     call    send_al
  118.     jmp    send_name_loop
  119. end_name:    call    send_al
  120.     mov    al,chksum
  121.     call    send_al
  122.     call    get_al
  123.     cmp    al,ack_char
  124.     jnz    done_prog
  125. ; send next blocksize bytes
  126. next_block:    mov    cx,blocksize
  127.     test    len_h,-1
  128.     jnz    full_block
  129.     cmp    cx,len_l
  130.     jb    full_block
  131.     mov    cx,len_l
  132. full_block:    sub    len_l,cx
  133.     sbb    len_h,0
  134.     push    cx
  135.     mov    ah,3fh
  136.     mov    bx,file_handle
  137.     mov    dx,offset file_data
  138.     int    21h
  139.     pop    cx
  140.     mov    chksum,0
  141.     mov    si,offset file_data
  142. send_loop:    lodsb
  143.     call    send_al
  144.     loop    send_loop
  145.     mov    al,chksum
  146.     call    send_al
  147.     call    get_al
  148.     cmp    al,ack_char
  149.     jnz    done_prog
  150.     test    len_h,-1
  151.     jnz    next_block
  152.     test    len_l,-1
  153.     jnz    next_block
  154. done_prog:    mov    ax,4c00h
  155.     int    21h
  156.  
  157.     end    start
  158.  
  159.  
  160.  
  161.     
  162.  
  163.