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