home *** CD-ROM | disk | FTP | other *** search
- ; 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