; 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. 0100 ORG 100H 0004 = CDISC EQU 4 ; CP/M DRIVE BUFFER LOCATION ; 0100 C30D01 START: JMP BEGIN 0103 08 TXBUF: DB 08 ; LENGTH OF BUFFER 0104 06 DB 06 ; COMMAND LENGTH (EXCLUDING 00,0DH) 0105 4D42415349 DB 'MBASIC' 010B 00 DB 00 ; NULL 010C 0D DB 0DH ; CARRIAGE RETURN ; ; ; 010D 2A0100 BEGIN: LHLD 1 0110 11FDE9 LXI D,-1603H ; OFFSET FOR CP/M 2.X (USE 1503 ; FOR CP/M 1.4X ; 0113 19 DAD D 0114 225C01 SHLD LDCCP ; SAVE CCP LOCATION 0117 210401 LXI H,TXBUF+1 ; POINT TO COUNTER 011A 7E MOV A,M ; GET IT 011B B7 ORA A ; IS IT STILL ZERO? 011C CA5901 JZ REXIT ; YES, SO NO AUTO START 011F 3C INR A ; INCREMENT COUNTER FOR COPY 0120 3C INR A 0121 3C INR A 0122 4F MOV C,A ; GET INTO (B,C) 0123 0600 MVI B,0 0125 E5 PUSH H ; SAVE POINTER 0126 2A5C01 LHLD LDCCP ; GET CCP POINTER 0129 110700 LXI D,7 ; POINT AT COUNTER LOCATION 012C 19 DAD D 012D EB XCHG ; SAVE AS DESTINATION POINTER (D,E) 012E E1 POP H ; GET BACK SOURCE POINTER 012F CD4E01 CALL MOVE ; COPY CODE INTO CCP BUFFER 0132 2A5C01 LHLD LDCCP ; GET POINTER TO CCP 0135 118800 LXI D,88H ; OFFSET TO CCP TXBUF POINTER 0138 19 DAD D 0139 E5 PUSH H ; SAVE POINTER 013A 2A5C01 LHLD LDCCP 013D 110800 LXI D,8 ; OFFSET TO START OF BUFFER 0140 19 DAD D 0141 EB XCHG ; SAVE IN (D,E) 0142 E1 POP H ; GET POINTER BACK U0143 CD0000 CALL PTDE ; RESET POINTER VALUE 0146 2A5C01 LHLD LDCCP ; GET CCP ADDRESS 0149 3A0400 LDA CDISC ; GET DISC # 014C 4F MOV C,A ; SAVE FOR CCP FUNCTION 014D E9 PCHL ; DO AUTO START ; 014E 7E MOVE: MOV A,M ; GET BYTE FROM SOURCE 014F 12 STAX D ; SAVE AT DESTINATION 0150 23 INX H 0151 13 INX D 0152 0B DCX B 0153 78 MOV A,B 0154 B1 ORA C 0155 C24E01 JNZ MOVE ; LOOP UNTIL DONE 0158 C9 RET ; 0159 C306F8 REXIT: JMP 0F806H ; 015C LDCCP: DS 2 ; BUFFER FOR CCP LOCATION ; 015E END