;
;               MAKESUB.ASM
;            (revised 4/28/80)
;
;11/04/79 FIRST WRITTEN BY KEITH PETERSEN
;         AND BOB MATHIAS.
;
;04/28/80 UPDATED FOR MORE EFFICIENT CODING BY
;         CLAYTON HIBBERT AND KEITH PETERSEN.
;
;THIS PROGRAM DEMONSTRATES HOW ONE CP/M COM
;PROGRAM CAN EXECUTE ANOTHER COM PROGRAM.
;THE SECRET IS IN CREATING A FILE CALLED
;"$$$.SUB" WHICH CONTAINS THE COMMAND TO
;EXECUTE THE NEXT PROGRAM. AFTER DOING THAT,
;A JMP TO WARM BOOT (0000H) WILL CAUSE CP/M
;TO DO A SUBMIT OF THAT COMMAND.
;
;
DRNAME  EQU     4       ;ADDR. WHERE DRIVE NAME IS
BDOS    EQU     5
FCB     EQU     5CH
FCBEX   EQU     FCB+12
FCBNR   EQU     FCB+32
BUFF    EQU     80H     ;CP/M DEFAULT BUFFER
MAKE    EQU     22
WRITE   EQU     21
CLOSE   EQU     16
;
       ORG     100H
;
       LXI     H,FILNAM ;POINT TO FILENAME
       LXI     D,FCB   ;POINT TO FCB
       MVI     B,13     ;LENGTH OF FILENAME
       CALL    MOVER   ;MOVE IT TO FCB
;
;       GO MAKE THE FILE
;
       XRA     A
       STA     FCBNR   ;SET RECORD NUMBER TO ZERO
       LXI     D,FCB   ;POINT TO NAME
       MVI     C,MAKE  ;MAKE FILE
       CALL    BDOS
;
;       GET THE NAME TO PUT IN FILE
;
       LXI     H,COMNAM ;POINT TO COMMAND STRING
       LXI     D,BUFF  ;POINT TO FCB
       MVI     B,NAMLEN ;LENGTH OF MOVE
       CALL    MOVER   ;MOVE NAME INTO BUFFER
;
;       WRITE FILE NAME TO DISK
;
       LXI     D,FCB   ;POINT TO NAME
       MVI     C,WRITE ;WRITE RECORD
       CALL    BDOS
;
;       NOW CLOSE THE FILE ON DISK
;
       LXI     D,FCB   ;POINT TO NAME
       MVI     C,CLOSE ;CLOSE FILE
       CALL    BDOS
;
;       INSURE THE DISK WE WANT TO SUBMIT ON
;
       XRA     A       ;GET A ZERO
       STA     DRNAME  ;SET CP/M FOR DRIVE A:
       JMP     0       ;REBOOT
;
;MOVE (B) BYTES FROM (HL) TO (DE)
;
MOVER:  MOV     A,M     ;GET BYTE FROM SOURCE
       STAX    D       ;STORE AT DESTINATION
       INX     H       ;INCREMENT SOURCE ADR
       INX     D       ;INCREMENT DESTINATION ADR
       DCR     B       ;DECREMENT MOVE COUNTER
       JNZ     MOVER   ;NOT DONE, DO MORE
       RET
;
FILNAM  DB      1       ;DRIVE NAME 1=A
       DB      '$$$     SUB' ;NAME OF SUBMIT FILE
       DB      0       ;SET EXTENT NR TO ZERO
;
COMNAM  DB      NAMLEN -2 AND 0FFH ; ACTUAL LENGTH OF COMMAND
       DB      'DIR'   ;PUT COMMAND HERE
       DB      0       ;END WITH ZERO
NAMLEN  EQU     $-COMNAM ;LENGTH OF NAME
;
       END