; 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. 0004 = CDISC EQU 4 ; CP/M DRIVE BUFFER LOCATION ; ; U0000 00 TXBUF: DB YY ; LENGTH OF BUFFER U0001 00 DB XX ; COMMAND LENGTH (EXCLUDING 00,0DH) 0002 434F4D4D41 DB 'COMMAND' 0009 00 DB 00 ; NULL 000A 0D DB 0DH ; CARRIAGE RETURN ; ; ; 000B 2A0100 LHLD 1 ; GET JUMP TO BIOS 000E 11FDE9 LXI D,-1603H ; OFFSET FOR CP/M 2.X (USE 1503 ; FOR CP/M 1.4X ; 0011 19 DAD D 0012 225700 SHLD LDCCP ; SAVE CCP LOCATION 0015 210100 LXI H,TXBUF+1 ; POINT TO COUNTER 0018 7E MOV A,M ; GET IT 0019 B7 ORA A ; IS IT STILL ZERO? 001A CA5700 JZ REXIT ; YES, SO NO AUTO START 001D 3C INR A ; INCREMENT COUNTER FOR COPY 001E 3C INR A 001F 3C INR A 0020 4F MOV C,A ; GET INTO (B,C) 0021 0600 MVI B,0 0023 E5 PUSH H ; SAVE POINTER 0024 2A5700 LHLD LDCCP ; GET CCP POINTER 0027 110700 LXI D,7 ; POINT AT COUNTER LOCATION 002A 19 DAD D 002B EB XCHG ; SAVE AS DESTINATION POINTER (D,E) 002C E1 POP H ; GET BACK SOURCE POINTER 002D CD4C00 CALL MOVE ; COPY CODE INTO CCP BUFFER 0030 2A5700 LHLD LDCCP ; GET POINTER TO CCP 0033 118800 LXI D,88H ; OFFSET TO CCP TXBUF POINTER 0036 19 DAD D 0037 E5 PUSH H ; SAVE POINTER 0038 2A5700 LHLD LDCCP 003B 110800 LXI D,8 ; OFFSET TO START OF BUFFER 003E 19 DAD D 003F EB XCHG ; SAVE IN (D,E) 0040 E1 POP H ; GET POINTER BACK U0041 CD0000 CALL PTDE ; RESET POINTER VALUE 0044 2A5700 LHLD LDCCP ; GET CCP ADDRESS 0047 3A0400 LDA CDISC ; GET DISC # 004A 4F MOV C,A ; SAVE FOR CCP FUNCTION 004B E9 PCHL ; DO AUTO START ; 004C 7E MOVE: MOV A,M ; GET BYTE FROM SOURCE 004D 12 STAX D ; SAVE AT DESTINATION 004E 23 INX H 004F 13 INX D 0050 0B DCX B 0051 78 MOV A,B 0052 B1 ORA C 0053 C24C00 JNZ MOVE ; LOOP UNTIL DONE 0056 C9 RET ; S REXIT: ... ; ROUTINE OR PROGRAM TO GO TO ; IF COMMAND LENGTH IS ZERO. ; 0057 LDCCP: DS 2 ; BUFFER FOR CCP LOCATION ; 0059 END