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 / SCOPY.ASM < prev    next >
Assembly Source File  |  1985-02-10  |  8KB  |  284 lines

  1. ;;;       COPY - COPY DISK A TO B
  2. ;
  3. ;         L.E. HUGHES     8080SDC     77/10/29
  4.  
  5. ;         MEMS MUST AGREE WITH CP/M SIZE
  6.  
  7.  MEMS     EQU    32
  8.  
  9.  MEMT     EQU    MEMS*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.  BOOT     EQU    0000H
  33.  
  34.  ITRK     EQU    0
  35.  LTRK     EQU    76
  36.  
  37.  BUF      EQU    400H
  38.  NTRKS    EQU    LTRK-ITRK+1         ;NUMBER OF TRACKS
  39.  BSIZE    EQU    BIOS-BUF            ;BUFFER SIZE
  40.  NBPT     EQU    128*26              ;NUMBER OF BYTES PER TRACK
  41.  NTPP     EQU    BSIZE/NBPT          ;NUMBER OF TRACKS PER PASS
  42.  NP       EQU    (NTRKS/NTPP)+1      ;NUMBER OF PASSES
  43.  NTLP     EQU    NTRKS-(NP-1)*NTPP   ;NUMBER OF TRACKS IN LAST PASS
  44.  
  45.           ORG    100H
  46.  COPY:    LXI    SP,STACK+64
  47.  
  48. ;         PRINT HEADING
  49.  
  50.           MVI    A,(MEMS/10)+'0'
  51.           CALL   WACC
  52.           MVI    A,(MEMS MOD 10)+'0'
  53.           CALL   WACC
  54.           LXI    H,STR1
  55.           CALL   WASC
  56.           IF     NP/10
  57.           MVI    A,(NP/10)+'0'
  58.           CALL   WACC
  59.           ENDIF
  60.           MVI    A,(NP MOD 10)+'0'
  61.           CALL   WACC
  62.           LXI    H,STR2
  63.           CALL   WASC
  64.           XRA    A
  65.           STA    TRKI
  66.           STA    TRKO
  67.           MVI    A,NP
  68.           STA    PCOUNT
  69.  
  70. ;         BEGIN MAIN LOOP
  71.      
  72.  COPY1:   LXI    H,STR3         ;PRINT 'MOUNT OLD DISK, THEN TYPE CR'
  73.           CALL   WASC
  74.           CALL   RACC
  75.           CALL   WEOLC
  76.           LXI    H,BUF          ;PTR = FWA OF BUFFER
  77.           SHLD   PTR
  78.           MVI    A,NTPP         ;TCOUNT = NUMBER OF TRACKS
  79.           STA    TCOUNT
  80.           LDA    PCOUNT
  81.           ORA    A
  82.           JNZ    COPY2
  83.           MVI    A,NTLP
  84.           STA    TCOUNT
  85.  COPY2:   LHLD   PTR            ;READ NEXT N TRACKS
  86.           LDA    TRKI
  87.           CALL   RDTRK
  88.           LHLD   PTR
  89.           LXI    D,NBPT
  90.           DAD    D
  91.           SHLD   PTR
  92.           LDA    TRKI
  93.           INR    A
  94.           STA    TRKI
  95.           LDA    TCOUNT
  96.           DCR    A
  97.           STA    TCOUNT
  98.           JNZ    COPY2
  99.           LXI    H,STR4         ;PRINT 'MOUNT NEW DISK, THEN TYPE CR'
  100.           CALL   WASC
  101.           CALL   RACC
  102.           CALL   WEOLC
  103.           LXI    H,BUF          ;PTR = FWA OF BUFFER
  104.           SHLD   PTR
  105.           MVI    A,NTPP         ;TCOUNT = NUMBER OF TRACKS PER PASS
  106.           STA    TCOUNT
  107.           LDA    PCOUNT
  108.           ORA    A
  109.           JNZ    COPY3
  110.           MVI    A,NTLP
  111.           STA    TCOUNT
  112.  COPY3:   LHLD   PTR            ;WRITE NEXT N TRACKS
  113.           LDA    TRKO
  114.           CALL   WRTRK
  115.           LHLD   PTR
  116.           LXI    D,NBPT
  117.           DAD    D
  118.           SHLD   PTR
  119.           LDA    TRKO
  120.           INR    A
  121.           STA    TRKO
  122.           LDA    TCOUNT
  123.           DCR    A
  124.           STA    TCOUNT
  125.           JNZ    COPY3
  126.           LDA    PCOUNT
  127.           DCR    A
  128.           STA    PCOUNT
  129.           JNZ    COPY1          ;LOOP UNTIL ALL PASSES DONE
  130.           LXI    H,STR5         ;PRINT 'COPY COMPLETE'
  131.           CALL   WASC
  132.           JMP    BOOT
  133.  
  134. ;;        RDTRK - READ ABSOLUTE TRACK INTO MEMORY
  135. ;
  136. ;         ENTRY CONDITIONS
  137. ;            HL........FWA OF AREA TO READ TRACK INTO
  138. ;            A.........TRACK NUMBER (0 TO 76)
  139.  
  140.  RDTRK:   PUSH   B
  141.           PUSH   D
  142.           PUSH   H
  143.           SHLD   DMAPTR
  144.           MOV    C,A
  145.           CALL   SETTRK
  146.           MVI    A,1            ;INITIAL SECTOR #
  147.           STA    SECNO
  148.  RDTRK1:  LDA    SECNO
  149.           LXI    H,SMAP-1
  150.           MVI    D,0
  151.           MOV    E,A
  152.           DAD    D
  153.           MOV    C,M
  154.           CALL   SETSEC
  155.           LHLD   DMAPTR
  156.           MOV    B,H
  157.           MOV    C,L
  158.           CALL   SETDMA
  159.           CALL   READ
  160.           LHLD   DMAPTR
  161.           LXI    D,80H
  162.           DAD    D
  163.           SHLD   DMAPTR
  164.           LXI    H,SECNO
  165.           INR    M
  166.           MOV    A,M
  167.           CPI    26+1
  168.           JC     RDTRK1
  169.           POP    H
  170.           POP    D
  171.           POP    B
  172.           RET
  173.  
  174. ;;        WRTRK - WRITE ABSOLUTE TRACK FROM MEMORY
  175. ;
  176. ;         ENTRY CONDITIONS
  177. ;            HL........FWA OF AREA TO WRITE TRACK FROM
  178. ;            A.........TRACK NUMBER (0 TO 76)
  179.  
  180.  WRTRK:   PUSH   B
  181.           PUSH   D
  182.           PUSH   H
  183.           SHLD   DMAPTR
  184.           MOV    C,A
  185.           CALL   SETTRK
  186.           MVI    A,1            ;INITIAL SECTOR #
  187.           STA    SECNO
  188.  WRTRK1:  LDA    SECNO
  189.           LXI    H,SMAP-1
  190.           MVI    D,0
  191.           MOV    E,A
  192.           DAD    D
  193.           MOV    C,M
  194.           CALL   SETSEC
  195.           LHLD   DMAPTR
  196.           MOV    B,H
  197.           MOV    C,L
  198.           CALL   SETDMA
  199.           CALL   WRITE
  200.           LHLD   DMAPTR
  201.           LXI    D,80H
  202.           DAD    D
  203.           SHLD   DMAPTR
  204.           LXI    H,SECNO
  205.           INR    M
  206.           MOV    A,M
  207.           CPI    26+1
  208.           JC     WRTRK1
  209.           POP    H
  210.           POP    D
  211.           POP    B
  212.           RET
  213.  
  214. ;         STRING DATA
  215.  
  216.  STR1:    DB     'K SINGLE DRIVE DISK COPY UTILITY V1.0',CR,LF,0
  217.  STR2:    DB     ' PASSES REQUIRED TO COPY ENTIRE DISK',CR,LF,0
  218.  STR3:    DB     'MOUNT OLD DISK, THEN TYPE CR',0
  219.  STR4:    DB     'MOUNT NEW DISK, THEN TYPE CR',0
  220.  STR5:    DB     'COPY COMPLETE',CR,LF,0
  221.  
  222. ;         WASC - WRITE ASCII STRING TO CONSOLE
  223.  
  224.  WASC:    MOV    A,M
  225.           ORA    A
  226.           RZ
  227.           CALL   WACC
  228.           INX    H
  229.           JMP    WASC
  230.  
  231. ;         WEOLC - WRITE END OF LINE TO CONSOLE
  232.  
  233.  WEOLC:   MVI    A,CR
  234.           CALL   WACC
  235.           MVI    A,LF
  236.           JMP    WACC
  237.  
  238. ;         WACC - WRITE ASCII CHARACTER TO CONSOLE
  239.  
  240.  WACC:    PUSH   H
  241.           PUSH   D
  242.           PUSH   B
  243.           MOV    C,A
  244.           CALL   CONOUT
  245.           POP    B
  246.           POP    D
  247.           POP    H
  248.           RET
  249.  
  250. ;         RACC - READ ASCII CHARACTER FROM CONSOLE
  251.  
  252.  RACC:    PUSH   H
  253.           PUSH   D
  254.           PUSH   B
  255.           CALL   CONIN
  256.           ANI    7FH
  257.           POP    B
  258.           POP    D
  259.           POP    H
  260.           RET
  261.  
  262. ;         SECTOR MAP
  263.  
  264.  SMAP:    DB     01,06,11,16,21,26
  265.           DB     05,10,15,20,25
  266.           DB     04,09,14,19,24
  267.           DB     03,08,13,18,23
  268.           DB     02,07,12,17,22
  269.  
  270.  OLDSP:   DS     2
  271.  STACK:   DS     64
  272.  
  273.  TRKNO:   DS     1              ;TRACK NUMBER
  274.  SECNO:   DS     1              ;SECTOR NUMBER
  275.  DMAPTR:  DS     2              ;DMA POINTER
  276.  
  277.  PTR:     DS     2
  278.  TRKI:    DS     1              ;INPUT TRACK NUMBER
  279.  TRKO:    DS     1              ;OUTPUT TRACK NUMBER
  280.  PCOUNT:  DS     1              ;PASS COUNT
  281.  TCOUNT:  DS     1              ;TRACK COUNT
  282.  
  283.           END
  284.