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 / SIMTEL / CPMUG / CPMUG019.ARK / COPY.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  6KB  |  208 lines

  1. ;;;       COPY - COPY DISK A TO B
  2. ;
  3. ;         L.E. HUGHES     8080SDC     77/10/29
  4.  
  5. ;         MSIZE MUST AGREE WITH CP/M SIZE
  6.  
  7.  MSIZE    EQU    32
  8.  
  9.  MEMT     EQU    MSIZE*1024
  10.  BIOS     EQU    MEMT-3*256
  11.  
  12. ;         BIOS ENTRY POINTS
  13.  
  14.  CONSTA   EQU    BIOS+06H       ;CONSOLE STATUS (A=0, NO DATA)
  15.  CONIN    EQU    BIOS+09H       ;CONSOLE INPUT (INTO A)
  16.  CONOUT   EQU    BIOS+0CH       ;CONSOLE OUTPUT (FROM C)
  17.  SELDSK   EQU    BIOS+1BH       ;SELECT DISK (FROM C, 0..1)
  18.  SETTRK   EQU    BIOS+1EH       ;SET TRACK (FROM C, 0..76)
  19.  SETSEC   EQU    BIOS+21H       ;SET SECTOR (FROM C, 1..26)
  20.  SETDMA   EQU    BIOS+24H       ;SET DMA ADDRESS (FROM BC)
  21.  READ     EQU    BIOS+27H       ;READ SECTOR INTO DMA BUFFER
  22.  WRITE    EQU    BIOS+2AH       ;WRITE SECTOR FROM DMA BUFFER
  23.  
  24. ;         MISC SYMBOLS
  25.  
  26.  LF       EQU    0AH            ;LINE FEED
  27.  CR       EQU    0DH            ;CARRIAGE RETURN
  28.  
  29.  DISKA    EQU    0
  30.  DISKB    EQU    1
  31.  
  32.  ITRK     EQU    0              ;INITIAL TRACK TO COPY
  33.  LTRK     EQU    76             ;LAST TRACK TO COPY
  34.  
  35.           ORG    100H
  36.  COPY:    LXI    H,0
  37.           DAD    SP
  38.           SHLD   OLDSP
  39.           LXI    SP,STACK+64
  40.  
  41. ;         ALLOW USER TO MOUNT DISK(S) BEFORE PROCEEDING
  42.  
  43.           LXI    H,STR1         ;PRINT 'TYPE CR TO COPY A ONTO B'
  44.           CALL   WASC
  45.           CALL   RACC
  46.           CPI    CR
  47.           JNZ    COPYX          ;EXIT IF RESPONSE IS ANYTHING BUT CR
  48.  
  49. ;         BEGIN MAIN LOOP
  50.  
  51.           LXI    H,STR4         ;PRINT HEADER
  52.           CALL   WASC
  53.           LXI    H,STR5
  54.           CALL   WASC
  55.           MVI    A,ITRK         ;INITIAL TRACK NUMBER
  56.           STA    TRKNO
  57.  COPY2:   MVI    C,DISKA        ;SELECT DRIVE A
  58.           CALL   SELDSK
  59.           LDA    TRKNO          ;SET TRACK NUMBER
  60.           MOV    C,A
  61.           CALL   SETTRK
  62.           LXI    H,TBUF         ;SET INITIAL DMA ADDRESS
  63.           SHLD   DMAPTR
  64.           MVI    A,1            ;INITIAL SECTOR NUMBER
  65.           STA    SECNO
  66.  COPY3:   LDA    SECNO          ;SET SECTOR NUMBER
  67.           LXI    H,SMAP-1
  68.           MVI    D,0
  69.           MOV    E,A
  70.           DAD    D
  71.           MOV    C,M
  72.           CALL   SETSEC
  73.           LHLD   DMAPTR         ;SET DMA ADDRESS
  74.           MOV    B,H
  75.           MOV    C,L
  76.           CALL   SETDMA
  77.           CALL   READ           ;READ SECTOR
  78.           LHLD   DMAPTR         ;ADD 80H TO DMA PTR
  79.           MOV    A,L
  80.           ADI    80H
  81.           MOV    L,A
  82.           JNC    $+4
  83.           INR    H
  84.           SHLD   DMAPTR
  85.           LXI    H,SECNO        ;ADD 1 TO SECTOR NUMBER
  86.           INR    M
  87.           MOV    A,M
  88.           CPI    26+1           ;LOOP THRU ENTIRE TRACK
  89.           JC     COPY3
  90.  
  91. ;         WRITE TBUF TO CURRENT TRACK ON DISK B
  92.  
  93.           MVI    C,DISKB        ;SELECT DISK B
  94.           CALL   SELDSK
  95.           LDA    TRKNO          ;SET TRACK NUMBER
  96.           MOV    C,A
  97.           CALL   SETTRK
  98.           LXI    H,TBUF         ;SET DMA ADDRESS
  99.           SHLD   DMAPTR
  100.           MVI    A,1            ;SET INITIAL SECTOR NUMBER
  101.           STA    SECNO
  102.  COPY4:   LDA    SECNO          ;SET SECTOR NUMBER
  103.           LXI    H,SMAP-1
  104.           MVI    D,0
  105.           MOV    E,A
  106.           DAD    D
  107.           MOV    C,M
  108.           CALL   SETSEC
  109.           LHLD   DMAPTR         ;SET DMA ADDRESS
  110.           MOV    B,H
  111.           MOV    C,L
  112.           CALL   SETDMA
  113.           CALL   WRITE          ;WRITE SECTOR
  114.           LHLD   DMAPTR         ;ADD 80H TO DMAPTR
  115.           MOV    A,L
  116.           ADI    80H
  117.           MOV    L,A
  118.           JNC    $+4
  119.           INR    H
  120.           SHLD   DMAPTR
  121.           LXI    H,SECNO        ;ADD 1 TO SECTOR NUMBER
  122.           INR    M
  123.           MOV    A,M
  124.           CPI    26+1           ;LOOP THRU ENTIRE TRACK
  125.           JC     COPY4
  126.  
  127. ;         ADVANCE TO NEXT TRACK
  128.  
  129.           MVI    A,'*'
  130.           CALL   WACC
  131.           LXI    H,TRKNO
  132.           INR    M
  133.           MOV    A,M
  134.           CPI    LTRK+1         ;LOOP THRU ENTIRE DISK
  135.           JC     COPY2
  136.  
  137. ;         ALL DONE
  138.  
  139.  COPY5:   LXI    H,STR2         ;PRINT 'COPY COMPLETE'
  140.           JMP    COPY6
  141.  COPYX:   LXI    H,STR3         ;PRINT 'COPY ABORTED'
  142.  COPY6:   CALL   WASC
  143.           LHLD   OLDSP          ;EXIT TO CP/M
  144.           SPHL
  145.           RET
  146.  
  147. ;         WASC - WRITE ASCII STRING TO CONSOLE
  148.  
  149.  WASC:    MOV    A,M
  150.           ORA    A
  151.           RZ
  152.           CALL   WACC
  153.           INX    H
  154.           JMP    WASC
  155.  
  156. ;         WACC - WRITE ASCII CHARACTER TO CONSOLE
  157.  
  158.  WACC:    PUSH   H
  159.           PUSH   D
  160.           PUSH   B
  161.           MOV    C,A
  162.           CALL   CONOUT
  163.           POP    B
  164.           POP    D
  165.           POP    H
  166.           RET
  167.  
  168. ;         RACC - READ ASCII CHARACTER FROM CONSOLE
  169.  
  170.  RACC:    PUSH   H
  171.           PUSH   D
  172.           PUSH   B
  173.           CALL   CONIN
  174.           ANI    7FH
  175.           POP    B
  176.           POP    D
  177.           POP    H
  178.           RET
  179.  
  180. ;         OUTPUT STRINGS
  181.  
  182.  STR1:    DB     'TYPE CR TO COPY A ONTO B',CR,LF,0
  183.  STR2:    DB     CR,LF,'COPY COMPLETE',CR,LF,0
  184.  STR3:    DB     'COPY ABORTED',CR,LF,0
  185.  STR4:    DB     '          1         2         3         4'
  186.           DB     '         5         6         7',CR,LF,0
  187.  STR5:    DB     '01234567890123456789012345678901234567890'
  188.           DB     '123456789012345678901234567890123456',CR,LF,0
  189.  
  190. ;         SECTOR MAP
  191.  
  192.  SMAP:    DB     01,06,11,16,21,26
  193.           DB     05,10,15,20,25
  194.           DB     04,09,14,19,24
  195.           DB     03,08,13,18,23
  196.           DB     02,07,12,17,22
  197.  
  198.  OLDSP:   DS     2
  199.  STACK:   DS     64
  200.  
  201.  TRKNO:   DS     1              ;TRACK NUMBER
  202.  SECNO:   DS     1              ;SECTOR NUMBER
  203.  DMAPTR:  DS     2              ;DMA POINTER
  204.  
  205.  TBUF:    DS     26*128         ;TRACK BUFFER
  206.  
  207.           END
  208.