home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MODEMS / MODEM / CP405SRC.ARK / CP4FET.ASM < prev    next >
Assembly Source File  |  1986-12-25  |  4KB  |  140 lines

  1. ;Originally by Bill Catchings, Columbia University
  2. ;From KERMIT-Manual        Changed 22-May-86 B.E.  EIBEN@DEC-MARLBORO
  3. ;
  4. ;Usage/Goal:    Minimal [ungarded] text-capture into memory
  5. ;        via transmission of CR to HOST and capture
  6. ;        of sent char's till '@' seen. Saving of data
  7. ;        on disk.
  8. ;
  9. ;Limits:    File-length = TPA -300H roughly 40K most micro's
  10. ;        Beware current CP4KER.HEX is already 36K.
  11. ;        NO ERROR checking whatsoever...
  12. ;
  13. ;    1. Example [TOPS-20 and FOO.HEX assumed]
  14. ;
  15. ;        TER NO PAUSE END    ;let terminal run loose
  16. ;        REFUSE SYSTEM-MESSAGES    ;avoid interfering messages.
  17. ;        REFUSE LINKS
  18. ;        SET NO ALERT
  19. ;        TYPE FOO.HEX        ;DO NOT type confirming CR !!
  20. ;
  21. ;      .. then on MICRO [assuming that RDR/PUNCH are already pointing
  22. ;      to Communication-port and same is at 'right' Baud-rate ,Bits
  23. ;       and Parity setting; FETCH.COM generated via DDT , enough free
  24. ;      space on connected floppy . FETCH has NO ERROR-checking what-
  25. ;      soever to keep brevity ]
  26. ;
  27. ;        FETCH FOO.HEX        ;receive/create FOO.HEX
  28. ;                    ;FOO.HEX can't exist already
  29. ;
  30. ;    You should now see the characters being echoed on the screen
  31. ;
  32.  
  33. ;Assembly [assume on disk B:]    ASM FETCH.BBB or LASM FETCH.BBB
  34. ;Linkage            LOAD FETCH    or MLOAD FETCH
  35. ;
  36.  
  37. ORG 100H            ;let's start at a standard address
  38. MEMADR    equ    300H        ;Where we start storing bytes
  39. MEMOFF    equ    2H        ;Linked to MEMADR [offset in 2 sector pairs]
  40. MEMST    equ    MEMADR-2    ;We 'swallow' first two bytes
  41. BYTPTR    equ    200H        ;Here we keep the pointer
  42. BYTHI    equ    BYTPTR+1    ;High order byte
  43. BYTLOW    equ    BYTPTR        ;Low order byte
  44. DMAPTR    equ    BYTPTR+2    ;Sector pointer to write
  45.  
  46. SECLEN    equ    80H        ;128 bytes are a 'sector'
  47. SEVBIT    equ    7FH        ;parity mask
  48. MONE    equ    0FFFFH        ;Minus one in 16 bits
  49.  
  50. BDOS    equ    5H        ;System call
  51. Punch    equ    4H        ;Send to Punch {to Host}
  52. Reader    equ    3H        ;Read from Reader {from Host}
  53. Screen    equ    2H        ;Write to screen
  54. CLSFIL    equ    10H        ;Close file
  55. WRTSEC    equ    15H        ;Write a sector
  56. MAKFIL    equ    16H        ;Write NEW file
  57. SETDMA    equ    1AH        ;Set DMA address
  58. FCB1    equ    5CH        ;File Control Block 1
  59.  
  60. CR    equ    0DH        ;ASCII Carriage Return
  61. CTRLZ    equ    1AH        ;ASCII Control-Z
  62.  
  63. ;Note--The following may need to be changed when downloading from other
  64. ;systems, e.g. to '.' for TOPS-10, '$' for VAX/VMS, etc.  Alternatively,
  65. ;the hex file itself can have an '@' added to it, after its last line.
  66.  
  67. ENDSIG    equ    40H        ;Tops-20 prompt '@'
  68.  
  69. ;Here's the program:
  70.  
  71. start:    lxi    h,MEMST        ;Where to store in memory
  72.     shld    BYTPTR        ;keep address there
  73.     mvi    e,CR        ;oct 15 is CR
  74.     mvi    c,PUNCH        ;Output to PUNCH {send to HOST}
  75.     call    BDOS
  76.  
  77. gbyte:    mvi    c,READER    ;Input from RDR {read from HOST}
  78.     call    BDOS
  79.     ani    7FH        ;mask to 7-bit {strip parity}
  80.     push    psw        ;save a and flags
  81.     mov    e,a        ;char to e for echo-call
  82.     mvi    c,SCREEN    ;Output to screen
  83.     call    BDOS
  84.     pop    psw        ;restore a and flags
  85.     cpi    ENDSIG        ;End signal (system's prompt)?
  86.     jz    donfil        ;Yes, we have whole file in memory
  87.     call    stuff        ;No, store byte
  88.     jmp    gbyte        ;go back for next byte
  89.  
  90. donfil:    mvi    a,CTRLZ        ;Control-Z is EOF
  91.     call    stuff        ;Store Control-Z
  92.     lxi    h,MEMADR    ;Pointer to file in memory
  93.     shld    DMAPTR        ;Save here for DMA pointer
  94.                 ;a long divide by 256 follows
  95.     lda    BYTHI        ;get HI byte
  96.     sta    BYTLOW        ;store as low byte
  97.     xra    a        ;zero a
  98.     sta    BYTHI        ;wipe old HI byte
  99.     mvi    c,MAKFIL    ;MAKE new FILE
  100.     lxi    d,FCB1
  101.     call    BDOS
  102.  
  103. again:    call    nsect        ;write 128 bytes
  104.     call    nsect        ;and another 128 bytes
  105.     lxi    h,MONE        ;stick a -1
  106.     xchg            ;into DE
  107.     lhld    BYTPTR        ;get modified pointer (per 256 bytes)
  108.     dad    d        ;decrement
  109.     shld    BYTPTR        ;and store back
  110.     mvi    a,MEMOFF    ; getting
  111.     cmp    l        ;  done ?
  112.     jz    done        ;Yes, we hit it on the nail
  113.     jmp    again        ;Not quite
  114.  
  115. nsect:    lhld    DMAPTR        ;Get the file-pointer
  116.     xchg            ;move into DE
  117.     mvi    c,SETDMA    ;Set DMA
  118.     call    BDOS
  119.     mvi    c,WRTSEC    ;Write sector to file
  120.     lxi    d,FCB1
  121.     call    BDOS
  122.     lhld    DMAPTR        ;Get the file-pointer
  123.     lxi    d,SECLEN    ;128 bytes got moved
  124.     dad    d        ;add them to adjust pointer
  125.     shld    DMAPTR        ;and save again
  126.     ret            ;and return
  127.  
  128. stuff:    lhld    BYTPTR        ;Get the pointer
  129.     mov    m,a        ;store the character
  130.     inx    h        ;Increment the pointer
  131.     shld    BYTPTR        ;and save again
  132.     ret            ;and return
  133.  
  134. done:    mvi    c,CLSFIL    ;Close file
  135.     lxi    d,FCB1
  136.     call    BDOS
  137.     jmp    0        ;Do warm-reboot to always come back
  138.  
  139.     END    START
  140.