home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols100 / vol111 / intercpm.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  6.1 KB  |  362 lines

  1.     TITLE    '8 INCH TO 5 INCH COPY PROGRAM'
  2. NSBOOT    EQU    0E800H
  3. BDOS5    EQU    5H
  4.     ORG    100H
  5.     JMP    START
  6.     ORG    500H
  7. START    LXI    SP,STACK+50
  8. SIGNON1    LXI    D,SIGNON
  9. SIGNON2    CALL    PRINT
  10.     LXI    D,BOOTMSG    ;BOOT NORTH STAR DOS?
  11.     CALL    PRINT
  12.     CALL    INPUT
  13.     CPI    'Y'
  14.     JZ    BOOTNS        ;BOOT NS DOS
  15. MESS1    LXI    D,DEST        ;DESTINATION SYSTEM?
  16.     CALL    PRINT
  17.     CALL    INPUT
  18.     STA    TODOS
  19.     CPI    '5'        ;TO NORTH STAR
  20.     JZ    TONS
  21.     CPI    '8'        ;TO CP/M
  22.     JZ    TOCPM
  23.     JMP    MESS1
  24. TONS    LXI    D,SRCCPM    ;CONFIRM SOURCE ON CPM
  25.     CALL    PRINT
  26.     JMP    MESS4
  27. TOCPM    LXI    D,SRCNS        ;CONFIRM SOURCE ON NS
  28.     CALL    PRINT
  29. MESS4    XRA    A        ;RESET EOF INDICATOR
  30.     STA    EOF
  31. MESS6    LXI    D,MOUNT        ;TYPE MOUNT MESSAGE
  32.     CALL    PRINT        ;DONE NOW SO THAT DISKS ARE LOADED
  33.     CALL    INPUT        ;WHEN FILE NAMES ARE ENTERED
  34. MESS7    LXI    D,CPMFILE    ;GET CPM FILE NAME
  35.     CALL    PRINT
  36.     CALL    INPUT
  37.     CALL    GETFCB        ;CREATE FCB
  38.     CALL    OPENCPM
  39.     LXI    D,NSFILE    ;GET 5 INCH CPM NAME
  40.     CALL    PRINT
  41.     CALL    INPUT
  42.     CALL    GETFCB5
  43.     CALL     OPENCPM5
  44.     LDA    TODOS
  45.     CPI    '5'
  46.     JZ    TO5INCH
  47.     JMP    TO8INCH
  48. NSERR    LXI    D,ERRM3
  49.     CALL    PRINT
  50.     JMP    FINISHED
  51. PRINT    PUSH    D
  52.     LXI    D,CRLF
  53.     MVI    C,9
  54.     CALL    BDOS8
  55.     POP    D
  56. PRINT2    MVI    C,9
  57.     CALL    BDOS8
  58.     RET
  59. INPUT    LXI    D,IBUF
  60.     MVI    C,0AH
  61.     CALL    BDOS8
  62.     LDA    IBUF+2
  63.     RET
  64. BDOS8    JMP    05H
  65. BOOTNS    LHLD    06H
  66.     SHLD    BDOS8+1
  67.     JMP    NSBOOT
  68.  
  69. * COPY FILES FROM 5 INCH TO 8 INCH CPM
  70. TO8INCH    EQU    $
  71. COPY1    LXI    D,CPMBUFF
  72.     MVI    C,1AH        ;SET DMA ADDR
  73.     CALL    BDOS5
  74.     LXI    D,FCB5
  75.     MVI    C,14H
  76.     CALL     BDOS5    ;SEQUENTIAL READ FROM 5"
  77.     ORA    A
  78.     JNZ    EOFON8
  79.     LXI    D,CPMBUFF
  80.     MVI    C,1AH
  81.     CALL    BDOS8
  82.     LXI    D,FCB
  83.     MVI    C,15H
  84.     CALL    BDOS8
  85.     ORA    A
  86.     JNZ    EOFON8
  87.     JMP    COPY1
  88. EOFON8    CALL    CLOSECPM
  89.     CALL    CLOSECPM5
  90.     JMP    MESS7
  91.  
  92. * COPY 8 INCH TO 5 INCH NORTH STAR CPM
  93. TO5INCH    EQU    $
  94. COPY6    LXI    D,CPMBUFF
  95.     MVI    C,1AH
  96.     CALL    BDOS8
  97.     LXI    D,FCB
  98.     MVI    C,14H
  99.     CALL    BDOS8        ;READ 8"
  100.     ORA    A
  101.     JNZ    EOFON8
  102.     LXI    D,CPMBUFF
  103.     MVI    C,1AH
  104.     CALL    BDOS5
  105.     LXI    D,FCB5
  106.     MVI    C,15H
  107.     CALL    BDOS5        ;WRITE 8"
  108.     ORA    A
  109.     JNZ    EOFON8
  110.     JMP     COPY6
  111.  
  112.  
  113. FINISHED    MVI    C,0    ;GO TO CPM
  114.     JMP    BDOS8
  115.  
  116.  
  117. CLOSECPM    EQU    $
  118.     LXI    D,FCB
  119.     MVI    C,10H
  120.     CALL    BDOS8        ;CLOSE THE FILE
  121.     RET
  122.  
  123.  
  124. OPENCPM    LXI    D,FCB
  125.     MVI    C,0FH
  126.     CALL    BDOS8        ;OPEN THE FILE
  127.     INR    A
  128.     JNZ    EXISTS        ;FILE ALREADY EXISTS
  129.     LDA    TODOS        ;FILE DOES NOT EXIST
  130.     CPI    '8'        ;THATS OK, IT IS TO CPM
  131.     JZ    MAKEIT        ;CREATE A FILE
  132. NOTFND    LXI    D,NOFILE    ;NO FILE ERR
  133.     CALL    PRINT
  134.     JMP    FINISHED
  135. MAKEIT    LXI    D,FCB        ;CREATE A FILE
  136.     MVI    C,16H        ;ON CPM
  137.     CALL    BDOS8
  138.     INR    A
  139.     JZ    CPMERR        ;NO ROOM TO CREATE ONE
  140.     RET
  141. EXISTS    LDA    TODOS        ;FILE ALREADY EXISTS
  142.     CPI    '5'        ;THATS OK BECAUSE COPY IT TO NS
  143.     RZ
  144.     LXI    D,FCB        ;COPYING IT TO CPM SO DELETE
  145.     MVI    C,13H        ;THE EXISTING FILE AND MAKE
  146.     CALL    BDOS8        ;A NEW ONE
  147.     JMP    MAKEIT
  148. GETFCB    LXI    H,IBUF+2    ;GET ADDRESS OF INPUT LINE
  149.     LDA    IBUF+1        ;GET CHAR CNT FROM INPUT BUFFER
  150.     ORA    A
  151.     JZ    FINISHED    ;QUIT IF NO NAME ENTERED
  152.     MOV    B,A
  153.     MVI    C,33
  154.     XRA    A
  155.     LXI    D,FCB        ;CLEAR THE FCB
  156. CLEARFCB    STAX    D
  157.     INX    D
  158.     DCR    C
  159.     JNZ    CLEARFCB
  160.     PUSH    H        ;SAVE THE POSITION OF THE DRIVE NUMBER
  161.     INX    H        ;CHECK FOR A COLON
  162.     MOV    A,M
  163.     CPI    ':'
  164.     JNZ    NOCOLON
  165.     POP    H
  166.     MOV    A,M
  167.     ANI    1FH        ;CONVERT A=1...P=16
  168.     STA    FCB
  169.     INX    H
  170.     INX    H        ;PASS THE COLON
  171.     DCR    B
  172.     DCR    B
  173.     JMP    GETNAME
  174. NOCOLON    POP    H
  175. GETNAME    LXI    D,FCB+1
  176.     MVI    C,11
  177.     MVI    A,20H        ;BLANK OUT THE NAME
  178. CLEARNAME    STAX    D
  179.     INX    D
  180.     DCR    C
  181.     JNZ    CLEARNAME
  182.     LXI    D,FCB+1
  183.     MVI    C,8
  184. MOVENAME    MOV    A,M    ;MOVE THE NAME TO THE FCB
  185.     CPI    '.'        ;LOOK FOR THE PERIOD THAT SEPARATES
  186.     JZ    PERIOD        ;THE NAME  FROM THE TYPE
  187.     CALL     UPPERCASE
  188.     STAX    D
  189.     INX    D
  190.     INX    H
  191.     DCR    B        ;DECREASE BYTE CNT IN INPUT BUFFER
  192.     RZ
  193.     DCR    C
  194.     JNZ    MOVENAME
  195.     MOV    A,M
  196.     CPI    '.'
  197.     JZ    PERIOD
  198.     DCR    B
  199.     RZ
  200.     JMP    CPMFILENAME
  201. PERIOD    LXI    D,TYPE
  202.     INX    H
  203.     MVI    C,3
  204. MOVETYPE    MOV    A,M
  205.     CALL    UPPERCASE
  206.     STAX    D
  207.     INX    D
  208.     INX    H
  209.     DCR    B
  210.     RZ
  211.     DCR    C
  212.     JNZ    MOVETYPE
  213.     RET
  214. CPMFILENAME    LXI    D,ERRM4
  215.     CALL    PRINT
  216.     JMP    FINISHED
  217. UPPERCASE    CPI    60H    ;CONVERT LOWER TO UPPER CASE
  218.     RC
  219.     SBI    20H
  220.     RET
  221.  
  222. CLOSECPM5    EQU    $
  223.     LXI    D,FCB5
  224.     MVI    C,10H
  225.     CALL    BDOS5        ;CLOSE THE FILE
  226.     RET
  227.  
  228.  
  229. OPENCPM5    LXI    D,FCB5
  230.     MVI    C,0FH
  231.     CALL    BDOS5        ;OPEN THE FILE
  232.     INR    A
  233.     JNZ    EXISTS5        ;FILE ALREADY EXISTS5
  234.     LDA    TODOS        ;FILE DOES NOT EXIST
  235.     CPI    '5'        ;THATS OK, IT IS TO CPM5
  236.     JZ    MAKEIT5        ;CREATE A FILE
  237. NOTFND5    LXI    D,NOFILE    ;NO FILE ERR
  238.     CALL    PRINT
  239.     JMP    FINISHED
  240. MAKEIT5    LXI    D,FCB5        ;CREATE A FILE
  241.     MVI    C,16H        ;ON CPM5
  242.     CALL    BDOS5
  243.     INR    A
  244.     JZ    CPM5ERR        ;NO ROOM TO CREATE ONE
  245.     RET
  246. EXISTS5    LDA    TODOS        ;FILE ALREADY EXISTS
  247.     CPI    '8'        ;THATS OK BECAUSE COPY IT TO NS
  248.     RZ
  249.     LXI    D,FCB5        ;COPYING IT TO CPM5 SO DELETE
  250.     MVI    C,13H        ;THE EXISTING FILE AND MAKE
  251.     CALL    BDOS5        ;A NEW ONE
  252.     JMP    MAKEIT5
  253. GETFCB5    LXI    H,IBUF+2    ;GET ADDRESS OF INPUT LINE
  254.     LDA    IBUF+1        ;GET CHAR CNT FROM INPUT BUFFER
  255.     ORA    A
  256.     JZ    FINISHED    ;QUIT IF NO NAME ENTERED
  257.     MOV    B,A
  258.     MVI    C,33
  259.     XRA    A
  260.     LXI    D,FCB5        ;CLEAR THE FCB5
  261. CLEARFCB5    STAX    D
  262.     INX    D
  263.     DCR    C
  264.     JNZ    CLEARFCB5
  265.     PUSH    H        ;SAVE THE POSITION OF THE DRIVE NUMBER
  266.     INX    H        ;CHECK FOR A COLON
  267.     MOV    A,M
  268.     CPI    ':'
  269.     JNZ    NOCOLON5
  270.     POP    H
  271.     MOV    A,M
  272.     ANI    1FH        ;CONVERT A=1...P=16
  273.     STA    FCB5
  274.     INX    H
  275.     INX    H        ;PASS THE COLON
  276.     DCR    B
  277.     DCR    B
  278.     JMP    GETNAME5
  279. NOCOLON5    POP    H
  280. GETNAME5    LXI    D,FCB5+1
  281.     MVI    C,11
  282.     MVI    A,20H        ;BLANK OUT THE NAME
  283. CLEARNAME5    STAX    D
  284.     INX    D
  285.     DCR    C
  286.     JNZ    CLEARNAME5
  287.     LXI    D,FCB5+1
  288.     MVI    C,8
  289. MOVENAME5    MOV    A,M    ;MOVE THE NAME TO THE FCB5
  290.     CPI    '.'        ;LOOK FOR THE PERIOD5 THAT SEPARATES
  291.     JZ    PERIOD5        ;THE NAME  FROM THE TYPE
  292.     CALL     UPPERCASE
  293.     STAX    D
  294.     INX    D
  295.     INX    H
  296.     DCR    B        ;DECREASE BYTE CNT IN INPUT BUFFER
  297.     RZ
  298.     DCR    C
  299.     JNZ    MOVENAME5
  300.     MOV    A,M
  301.     CPI    '.'
  302.     JZ    PERIOD5
  303.     DCR    B
  304.     RZ
  305.     JMP    CPM5FILENAME
  306. PERIOD5    LXI    D,TYPE5
  307.     INX    H
  308.     MVI    C,3
  309. MOVETYPE5    MOV    A,M
  310.     CALL    UPPERCASE
  311.     STAX    D
  312.     INX    D
  313.     INX    H
  314.     DCR    B
  315.     RZ
  316.     DCR    C
  317.     JNZ    MOVETYPE5
  318.     RET
  319. CPM5FILENAME LXI D,ERRM5
  320.     JMP    CPMERR0
  321. CPMERR    LXI    D,ERRM38
  322.     JMP    CPMERR0
  323. CPM5ERR LXI    D,ERRM35
  324. CPMERR0    CALL    PRINT
  325.     JMP    FINISHED
  326. ERRM38    DB    'CPM ERR ON 8 INCH SYSTEM$'
  327. ERRM35    DB    'CPM ERR ON 5 INCH NS SYSTEM$'
  328.  
  329. CRLF    DB    0DH,0AH,'$'
  330. DEST    DB    'DESTINATION SYSTEM (5/8)? $'
  331. SRCCPM    DB    'COPY FROM 8 INCH (HD) TO 5 INCH NORTH STAR$'
  332. SRCNS    DB    'COPY FROM 5 INCH NORTH STAR TO 8 INCH (OR HARD DISK)$'
  333. ERRM2    DB    'CPM IO ERROR$'
  334. ERRM4    DB    'CPM FILE NAME ERROR$'
  335. ERRM5    DB    'NORTH STAR FILE NAME ERROR$'
  336. ERRM3    DB    'NORTH STAR IO ERROR$'
  337. NOFILE    DB    'FILE NOT FOUND$'
  338. SIGNON    DB    0CH,'INTERCPM REL 1.0 5 INCH TO 8 INCH COPY$'
  339. BOOTMSG    DB    'REBOOT 5 INCH CPM (Y/N)? $'
  340. CPMFILE    DB    '8 INCH FILE NAME? $'
  341. NSFILE    DB    '5 INCH (NS) FILE NAME? $'
  342. MOUNT    DB    'MOUNT DISKETTES AND ENTER RETURN$'
  343. TODOS    DS    1
  344. EOF    DS    1
  345. IBUF    DB    20
  346.     DS    22
  347. FCB    DS    9
  348. TYPE    DS    3
  349.     DS    25
  350. CPMCNT    DS    1
  351. FCB5    DS    9
  352. TYPE5    DS    3
  353.     DS    25
  354. TEMP5    DS    1
  355. CPMADDR    DS    2
  356. TEMP    DS    1
  357. CPMBUFF    EQU    80H
  358. CPM5ADDR    DS    2
  359. CPM5CNT    DS    1
  360. STACK    DS    50
  361.     END    100H
  362.