home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol050 / stscmd < prev    next >
Encoding:
Text File  |  1984-04-29  |  3.8 KB  |  292 lines

  1. ;
  2. ;    +----------------------------+
  3. ;    |                 |
  4. ;    |     S  Y  S  C  M  D       |
  5. ;    ;                 |
  6. ;    +----------------------------+
  7. ;
  8. ;
  9. ;    Version number:    2.1
  10. ;    Version date:    April 30, 1981
  11. ;
  12.  
  13. ;    The following code is supplied to customers who
  14. ;    purchase a hard/floppy disk system from DTC.
  15. ;    The command
  16. ;    STSCMD z xxx y
  17. ;    computes the memory size and offset arguments for
  18. ;    the STSCOPY.SUB SUBMIT file and executes
  19. ;    SUBMIT STSCOPY1 z xxx mm hhhh y
  20. ;
  21. ;
  22. VERS:    EQU    21
  23. ;
  24. CR:    EQU    0Dh    ;ASCII carriage return
  25. LF:    EQU    0Ah    ;ASCII line feed
  26. TAB:    EQU    9    ;ASCII horizontal tab
  27. EOS:    EQU    '$'    ;BDOS end of string
  28. ;
  29. ;
  30. ;    BDOS function equates
  31. ;
  32. PRTSTR:    EQU    09    ;Print string,    DE=buffer address
  33. INIT:    EQU    13    ;Initialize BDOS
  34. ;
  35. ;    Page zero locations
  36. ;
  37. BOOT:    EQU    0
  38. CDISK:    EQU    4
  39. BDOSV:    EQU    5
  40. DBUF:    EQU    080h    ;Default buffer
  41. ;
  42. MM:    EQU    MSIZE-(BIOSIZ-600h)/K
  43. ;
  44. ;
  45.  
  46. ;    Assembly switch
  47. DAW:    EQU    FALSE
  48. ;
  49.  
  50.     ORG    100h
  51.  
  52. STSCMD:
  53.     PUSH    PSW
  54.     PUSH    B
  55.     PUSH    D
  56.     PUSH    H
  57.     LXI    H,0
  58.     DAD    SP
  59.     SHLD    SYSTK
  60.     LXI    SP,STACK
  61.  
  62.     CALL    SYS
  63.  
  64. SYSRET:
  65.     LHLD    SYSTK
  66.     SPHL
  67.     POP    H
  68.     POP    D
  69.     POP    B
  70.     POP    PSW
  71.     RET
  72.  
  73.  
  74. SYS:
  75.     LXI    H,DBUF        ;Get buffer count
  76.     MOV    A,M
  77.     ORA    A
  78.     JZ    HELP
  79.     MOV    B,A
  80.     LXI    D,ARG
  81. SYS1:
  82.     INX    H        ;Point to string
  83.     MOV    A,M        ;Skip leading spaces
  84.     CPI    ' '
  85.     JNZ    SYS2
  86.     DCR    B
  87.     JZ    HELP
  88.     JMP    SYS1
  89. SYS2:
  90.     CPI    'A'        ;Validate drive
  91.     JC    HELP
  92.     CPI    'P'+1
  93.     JNC    HELP
  94.     STAX    D
  95.     INX    D
  96.     MVI    A,' '
  97.     STAX    D
  98.     INX    D
  99. SYS3:
  100.     DCR    B        ;Skip to unit record file name
  101.     JZ    HELP
  102.     INX    H
  103.     MOV    A,M
  104.     CPI    ' '
  105.     JZ    SYS3
  106. SYS4:
  107.     STAX    D        ;Move unit record file name
  108.     INX    D
  109.     INX    H
  110.     DCR    B
  111.     JZ    HELP
  112.     MOV    A,M
  113.     CPI    ' '
  114.     JNZ    SYS4
  115.     STAX    D
  116.     INX    D
  117.     MVI    A,MM/10+'0'    ;mm
  118.     STAX    D
  119.     INX    D
  120.     MVI    A,MM MOD 10 +'0'
  121.     STAX    D
  122.     INX    D
  123.     MVI    A,' '
  124.     STAX    D
  125.     INX    D
  126.     PUSH    B
  127.     LXI    B,1F80h-CBIOS    ;hhhh
  128.     MOV    A,B
  129.     CALL    BYTHEX
  130.     MOV    A,C
  131.     CALL    BYTHEX
  132.     MVI    A,' '
  133.     STAX    D
  134.     INX    D
  135.     POP    B        ;y
  136. SYS5:
  137.     MOV    A,M
  138.     INX    H
  139.     CPI    ' '
  140.     JNZ    SYS6
  141.     DCR    B
  142.     JZ    HELP
  143.     JMP    SYS5
  144. SYS6:
  145.     STAX    D
  146.     INX    D
  147.     XRA    A        ;Terminate command string
  148.     STAX    D
  149.     LXI    H,CCPCMD    ;Compute command string length
  150.     MOV    A,E
  151.     SBB    L
  152.     MOV    C,A
  153.     INR    C
  154.     DCR    A
  155.     MOV    M,A
  156.  
  157.     IF    DAW
  158.     PUSH    B
  159.  
  160.     MVI    C,INIT        ;Initialize BDOS
  161.     CALL    BDOSV
  162.     CALL    HOME        ;Get fresh copy of CCP
  163.     LXI    B,CCP
  164.     MVI    E,2        ;Starting sector
  165.     MVI    D,(BDOS-CCP)/128    ;Number of sectors
  166. SYS7:
  167.     PUSH    B
  168.     PUSH    D
  169.     CALL    SETDMA
  170.     POP    B
  171.     PUSH    B
  172.     MVI    B,0
  173.     CALL    SETSEC
  174.     CALL    READ
  175.     POP    D
  176.     POP    B
  177.     LXI    H,128
  178.     DAD    B
  179.     MOV    B,H
  180.     MOV    C,L
  181.     INR    E
  182.     DCR    D
  183.     JNZ    SYS7
  184.     MVI    C,INIT
  185.     CALL    BDOSV
  186.     
  187.     POP    B
  188.     LXI    H,CCPCMD
  189.     LXI    D,CCP+7        ;Move command to CCP buffer
  190. SYS8:
  191.     MOV    A,M
  192.     STAX    D
  193.     INX    H
  194.     INX    D
  195.     DCR    C
  196.     JNZ    SYS8
  197.     LDA    CDISK
  198.     MOV    C,A
  199.     JMP    CCP+3        ;Execute CCP command
  200.     ENDIF
  201.     IF    NOT DAW
  202.     MVI    A,EOS
  203.     STAX    D
  204.     LXI    D,USRMSG
  205.     MVI    C,PRTSTR
  206.     CALL    BDOSV
  207.     LXI    D,CCPCMD+1
  208.     MVI    C,PRTSTR
  209.     CALL    BDOSV
  210.     JMP    BOOT
  211.  
  212. USRMSG:    DB    CR,LF,LF,'Command string is:',CR,LF,LF,TAB,EOS
  213.     ENDIF
  214.  
  215.  
  216. BYTHEX:
  217.     PUSH    PSW        ;Save byte to be converted
  218.     RAR            ;Convert most significant nibble
  219.     RAR
  220.     RAR
  221.     RAR
  222.     CALL    HEXASC        ;Make it an ASCII character
  223.     POP    PSW        ;Convert least significant nibble
  224. HEXASC:
  225.     ANI    0Fh
  226.     ADI    090h
  227.     DAA
  228.     ACI    040h
  229.     DAA
  230.     STAX    D
  231.     INX    D
  232.     RET
  233.  
  234.  
  235. ;    BIOS Subroutines
  236. ;
  237. HOME:    LHLD    BOOT+1
  238.     MVI    L,18h
  239.     PCHL
  240.  
  241. SETSEC:    LHLD    BOOT+1
  242.     MVI    L,21h
  243.     PCHL
  244.  
  245. SETDMA:    LHLD    BOOT+1
  246.     MVI    L,24h
  247.     PCHL
  248.  
  249. READ:    LHLD    BOOT+1
  250.     MVI    L,27h
  251.     PCHL
  252.  
  253.  
  254. HELP:    MVI    C,PRTSTR    ;Print help message
  255.     LXI    D,HELPM
  256.     CALL    BDOSV
  257.     JMP    BOOT
  258.  
  259. HELPM:    DB    CR,LF,LF
  260.     IF    DAW
  261.     DB    'STSCOPY'
  262.     ENDIF
  263.     IF    NOT DAW
  264.     DB    'STSCMD'
  265.     ENDIF
  266.     DB    ' z xxx y',CR,LF,LF
  267.     DB    'Determines the STSCOPY'
  268.     IF    DAW
  269.     DB    '1'
  270.     ENDIF
  271.     DB    '.SUB parameters mm and hhhh',CR,LF
  272.     IF    DAW
  273.     DB    'and does',CR,LF,LF
  274.     DB    'SUBMIT STSCOPY1 z xxx mm hhhh y',CR,LF
  275.     ENDIF
  276.     DB    EOS
  277.  
  278. ;    CCP command string
  279. ;
  280. CCPCMD:    DB    0        ;length
  281.     DB    'SUBMIT STSCOPY'
  282.     IF    DAW
  283.     DB    '1'
  284.     ENDIF
  285.     DB    ' '
  286. ARG:    DS    30
  287.  
  288. SYSTK:    DS    2
  289.     DS    50
  290. STACK:    EQU    $
  291.     END
  292.