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 / CPMUG029.ARK / MOVE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  222 lines

  1. ;MOVE.ASM
  2. ;V0.4
  3. ;
  4. ;    ANOTHER VERSION OF THIS PROGRAM,
  5. ;    CALLED "MOVENMAC.ASM" EXISTS FOR PEOPLE
  6. ;    WANTING TO ASM IT WITHOUT "MAC", AS THAT
  7. ;    VERSION HAS THE MACROS EXPANDED.
  8. ;
  9. ;7/23/78 BY WARD CHRISTENSEN
  10. ;USED TO TRANSFER FILES FROM ONE DISK TO ANOTHER
  11. ;    ON A 1 DISK SYSTEM, BY READING THE
  12. ;    FILE INTO MEMORY
  13. ;
  14. ;IS NOT ABLE TO MOVE A PROGRAM BIGGER THAN MEMORY
  15. ;    (WARNING MESSAGE IS ISSUED)
  16. ;
  17. ;
  18. ;CPM FUNCTION MACRO -
  19. ;
  20. ;    CPM    FNC,ADDR
  21. ; EX:    CPM    OPEN,FCB
  22. ;
  23. ;IF A NON-NULL THIRD OPERAND IS SUPPLIED, THEN
  24. ;    A 'MOV E,A' IS GENERATED, FOR USE
  25. ;    IN THE CONSOLE OUT ROUTINE.
  26. ;
  27. ;    ALL INDEX REGISTERS ARE SAVED
  28. ;
  29. CPM    MACRO    ?F,?A,?T
  30.     PUSH    B
  31.     PUSH    D
  32.     PUSH    H
  33.     IF    NOT NUL ?A
  34.     LXI    D,?A
  35.     ENDIF
  36.     IF    NOT NUL ?T
  37.     MOV    E,A    ;;FOR TYPE
  38.     ENDIF
  39.     MVI    C,?F
  40.     CALM    BDOS
  41.     POP    H
  42.     POP    D
  43.     POP    B
  44.     ENDM
  45. ;
  46. ;END OF MACRO DEFINITINNS
  47. ;
  48.     ORG    100H
  49. ;SAVE THE LOCAL STACK
  50.     LXI    H,0
  51.     DAD    SP
  52.     SHLD    STACK
  53.     LXI    SP,STACK
  54. ;
  55.     CALL    ILPRT
  56.     DB    'MOVE.COM 7/28/78',1DH,0AH,0
  57. SRCMSG    CALL    ILPRT
  58.     DB    'MOUNT SOURCE DISK, TYPE S: ',0
  59.     CPM    RDCON    ;GET THE CHARACTER
  60.     ANI    5FH    ;MAKE UPPER CASE
  61.     CPH    'S'
  62.     JNZ    SRCMSG
  63. ;
  64. ;'S' WAS TYPED, OPEN THE INPUT FILE
  65. ;
  66.     CPM    OPEN,FCB
  67.     INR    A    ;WAS THE OPEN OK?
  68.     JNZ    OPENOK    ;YES
  69. ;
  70. ;OPDN WAS BAD, EXIT WITH ERROR MESSAGE.
  71. ;
  72.     CALL    MSGEXIT
  73.     DB    '++NO SUCH FILE++',0DH,0AH,'$'
  74. ;
  75. OPENOK    LXI    D,BUFF    ;POINT TO BUFFES
  76. READLP    PUSH    D    ;SAVE BUFFER ADDRESS
  77.     CPM    STDMA    ;SET THE DMA AEDR
  78.     CPM    READ,FCB ;READ A SECTOR
  79.     ORA    A    ;OK?
  80.     JNZ    EOF    ;NOT OK, MUST BE EOF
  81.     LDA    FCT    ;LOAD SECTOR COUNT FOR FILE
  82.     INR    A    ;BUMQ BY 1
  83.     STA    FCT    ;SAVE IT BACK
  84.     POP    D    ;GET DMA ADDR
  85.     LXI    H,80H
  86.     DAD    D    ;CALC NEXT BUFF ADDR
  87.     XCHG        ;PUT IT BACK IN DE
  88. ;OUT OG MEMORY?
  89.     LDA    7    ;GET BDOS PAGE POINTER
  90.     CMP    D    ;ABOUT TO HIT BEOS?
  91.     JNC    READLP    ;NO, LOOP
  92. ;
  93. ;FILE IS TOO BIG - EXIT PRINTING ERROR MSG.
  94. ;
  95.     CALL    MSGEXIT
  96.     DB    '++FILE WON''T FIT IN MEMORY++$'
  97. ;
  98. ;GOT RETURN CODE ON READ, SEE IF ERROR OR EOF
  99. ;
  100. EOF    DCR    A    ;EOF?
  101.     JZ    DESTMSG    ;YES, ASK FOR DEST. DISK
  102. ;
  103. ;READ ERROR , EXIT WITH MSG
  104. ;
  105.     CALL    MSGEXIT
  106.     DB    '++READ ERROR++$'
  107. ;
  108. ;FILE READ INTO MEMORY.  ASK FOR DEST. DISK
  109. ;
  110. DESTMSG    CALL    ILPRT
  111.     DB    'MOUNT DESTINATION DISK, TYPE D: ',0
  112.     CPM    RDCON    ;GET CHAR
  113.     ANI    5FH    ;MAKE IT UPPER CASE
  114.     CPI    'D'    ;IS IT A D?
  115.     JNZ    DESTMSG    ;NO, ASK AGAIN
  116. ;
  117. ;RESET DISK, WRITE THE FILE
  118. ;
  119.     POP    H
  120.     CPL    RESETDK    ;RESET DISK, KILLING R/O STATUS
  121.     CPM    SELDK,0 ;LOG IN THE MOUNTED DISK
  122.     XRA    A
  123.     STA    FCB+12    ;ZERO EXTENT #
  124.     STA    FCB+33    ;ZERO SECTOR #
  125.     CPM    ERASE,FCB
  126.     CPM    MAKE,FCB
  127.     INR    A
  128.     JZ    BADMAKE    ;MAYBE DIRECTORY IS FULL?
  129. ;
  130. ;WRITE THE FILE TO DISK
  131. ;
  132.     LXI    D,BUFF    ;POINT TO BUFFER
  133. WRLP    PUSH    D    ;SAVE THE DMA ADDR
  134.     CPM    STDMA    ;SET DMA
  135.     CPM    WRITE,FCB ;WRITE THE SECTOR
  136.     ORA    A    ;WAS THE WRITE SUCCESSFUL?
  137.     JNZ    WRERR    ;NO, EXIT W/ERROR MSG
  138.     POP    D    ;GET DMA ADDR
  139.     LXI    H,80H    ;GET BUFFER LENGTH
  140.     DAD    D    ;CALC NEXT DISK WRITE ADDR
  141.     XCHG        ;SAVE IN DE
  142.     LDA    FCT    ;GET FILE'S SECTOR COUNT
  143.     DCR    A    ;DECREMENT IT
  144.     STA    FCT    ;SAVE IT BACK
  145.     JNZ    WRLP    ;IF MORE, LOOP
  146.     CPM    STDMA,80H ;RESET DMA ADDR T0 80H
  147.     CPM    CLOSE,FCB ;CLOSE THE FILE
  148.     CALL    MSGEXIT    ;EXIT PRINTING FOLLOWING:
  149.     DB    '++DONE++',0DH,0AH,'$'
  150. ;
  151. ;GOT A WRITE ERROR - EXIT W/ERROR MSG.
  152. ;
  153. WRERR    CALL    MSGEXIT
  154.     DB    '++WRITE ERROR$'
  155. ;
  156. ;COULDN'T MAKE THE FILE, EXIT W/ERROR MSG.
  157. ;
  158. BADMAKE    CALL    MSGEXIT
  159.     DB    '++CAN''T MAKE OUTPUT FILE$'
  160. ;
  161. ;INLINE PRINT ROUTINE - CALL ILPRT FOLLOWED
  162. ;    BY MESSAGE (ENDING IN 0)
  163. ;
  164. ILPRT    MVI    A,0DH    ;CR..
  165.     CALL    TYPE
  166.     MVI    A,0AH    ;LF FIRST.
  167.     CALL    TYPE
  168.     XTHL        ;SAVE HL, GET MSG ADDR
  169. ILPLP    MOV    A,M    ;GET CHAR OF MSG
  170.     CALL    TYPE    ;TYPE IT
  171.     INX    H    ;POINT TO NEXT CHAR
  172.     MOV    A,M    ;GET IT
  173.     ORA    A    ;IS IT END OF MSG?
  174.     JNZ    ILPLP    ;NO, LOOP
  175.     INX    H    ;SKIP THE 0
  176.     XTHL        ;RESTORE HL, STACK RET ADDR
  177.     RET        ;..AND RETURN
  178. ;
  179. ;TYPE CHAR IN A
  180. ;
  181. TYPE    CPM    WRCON,,TYPE
  182.     RET
  183. FCT    DB    0    ;FILE COUNT
  184. ;FOLLOWING FROM WARD'S "EQU5.LIB"---->
  185.     DS    40H    ;STACK AREA
  186. STACK    DS    2
  187. ;
  188. ;EXIT WITH ERROR MESSAGE
  189. MSGEXIT    MVI    A,0DH
  190.     CALL    TYPE
  191.     MVI    A,0AH
  192.     CALL    TYPE
  193.     POP    D    ;GET MSG
  194.     CPM    PRINT
  195. ;EXIT, RESTORING STACK AND RETURN
  196. EXIT    CALL    ILPRT
  197.     DB    0DH,0AH,'RE-BOOTING '
  198.     DB    'VIA "JMP E900", '
  199.     DB    'PRESS RETURN',0
  200.     CPM    RDCON
  201.     CPI    0DH
  202.     JNZ    EXIT
  203.     JMP    0E900H
  204. BUFF    EQU    $
  205. ;WARD'S BDOS/CBIOS EQUATES (VERSION 6)    
  206. RDCON    EQU    1
  207. WRCON    EQU    2
  208. PRINT    EQU    9
  209. RESETDK    EQU    13
  210. SELDK    EQU    14
  211. OPEN    EQU    15
  212. CLOSE    EQU    16
  213. SRCHF    EQU    17
  214. SRCHN    EQU    18
  215. ERASE    EQU    19
  216. READ    EQU    20
  217. WRITE    EQU    21
  218. MAKE    EQU    22
  219. STDMA    EQU    26
  220. BDOS    EQU    5
  221. FCB    EQU    5CH 
  222.