;   ROUTINE TO EXECUTE A COMMAND BY USING THE AUTO
;   START FACILITY IN THE CP/M (V1.4, 2.0-2.2) .  IT
;   ASSUMES THAT THE CCP IS STILL INTACT (HAS NOT BEEN
;   CRASHED OR OVERLAYED.
CDISC   EQU     4       ; CP/M DRIVE BUFFER LOCATION
;
;
TXBUF:  DB YY   ; LENGTH OF BUFFER
       DB XX   ; COMMAND LENGTH (EXCLUDING 00,0DH)
       DB 'COMMAND'
       DB 00   ; NULL
       DB 0DH  ; CARRIAGE RETURN
;
;
;
       LHLD    1               ; GET JUMP TO BIOS
       LXI     D,-1603H        ; OFFSET FOR CP/M 2.X (USE 1503
                               ; FOR CP/M 1.4X
;
       DAD     D
       SHLD    LDCCP           ; SAVE CCP LOCATION
       LXI     H,TXBUF+1       ; POINT TO COUNTER
       MOV     A,M             ; GET IT
       ORA     A               ; IS IT STILL ZERO?
       JZ      REXIT           ; YES, SO NO AUTO START
       INR     A               ; INCREMENT COUNTER FOR COPY
       INR     A
       INR     A
       MOV     C,A             ; GET INTO (B,C)
       MVI     B,0
       PUSH    H               ; SAVE POINTER
       LHLD    LDCCP           ; GET CCP POINTER
       LXI     D,7             ; POINT AT COUNTER LOCATION
       DAD     D
       XCHG                    ; SAVE AS DESTINATION POINTER (D,E)
       POP     H               ; GET BACK SOURCE POINTER
       CALL    MOVE            ; COPY CODE INTO CCP BUFFER
       LHLD    LDCCP           ; GET POINTER TO CCP
       LXI     D,88H           ; OFFSET TO CCP TXBUF POINTER
       DAD     D
       PUSH    H               ; SAVE POINTER
       LHLD    LDCCP
       LXI     D,8             ; OFFSET TO START OF BUFFER
       DAD     D
       XCHG                    ; SAVE IN (D,E)
       POP     H               ; GET POINTER BACK
       CALL    PTDE            ; RESET POINTER VALUE
       LHLD    LDCCP           ; GET CCP ADDRESS
       LDA     CDISC           ; GET DISC #
       MOV     C,A             ; SAVE FOR CCP FUNCTION
       PCHL                    ; DO AUTO START
;
MOVE:   MOV     A,M     ; GET BYTE FROM SOURCE
       STAX    D       ; SAVE AT DESTINATION
       INX     H
       INX     D
       DCX     B
       MOV     A,B
       ORA     C
       JNZ     MOVE    ; LOOP UNTIL DONE
       RET
;
REXIT:  ...     ; ROUTINE OR PROGRAM TO GO TO
               ; IF COMMAND LENGTH IS ZERO.
;
LDCCP:  DS      2       ; BUFFER FOR CCP LOCATION
;
       END