home *** CD-ROM | disk | FTP | other *** search
- ; TITLE 'INSTALL OR REMOVE AUTO BOOT SEQUENCE. 3/4/80'
-
- ; WRITTEN BY JOHN MOORHEAD
-
-
- ; THIS PROGRAM WILL INSTALL OR REMOVE AN AUTO BOOT
- ; MESSAGE OR COMMAND FILE NAME TO/FROM THE USER
- ; INPUT BUFFER AT LOCATION 80 HEX. THIS MODIFICATION
- ; IS PERMANANTLY STORED ON THE CURRENTLY LOGGED DISK.
- ;
- ;NAME: AUTOBOOT.ASM
- ;
- ; THIS PROGRAM WORKS WITH BOTH CP/M VERSIONS 1.4 AND 2.0.
- ; IT LOADS THE FIRST 128 BYTES OF THE CP/M CCP MODULE
- ; INTO RAM AT 80 HEX. THIS IS ASSUMED TO BE ON TRACK
- ; ZERO, SECTOR 2. IF THE USER TYPES 'I' TO INSTALL THE
- ; AUTO BOOT FILE NAME OR COMMAND, THE PROGRAM WILL PROMPT
- ; THE USER FOR SAID ITEM. THE PROGRAM WILL INSERT THAT
- ; TEXT STRING INTO THE CCP CONSOLE BUFFER ALONG WITH THE
- ; LENGTH. IT THEN WRITES THIS MODIFIED SECTOR OF THE CCP
- ; BACK TO THE DISK. 'REMOVE' WORKS THE SAME WAY, EXCEPT
- ; THAT IT SETS THE LENGTH OF THE INPUT BUFFER STRING TO
- ; ZERO AT HEX 987, AND WRITES 16 HEX 20'S (ASCII SPACE)
- ; STARTING AT 988 HEX. THIS IS THEN RE-WRITTEN OUT TO
- ; THE DISK.
- ;
- ; WHEN CP/M WARM BOOTS IT CHECKS THE CONSOLE BUFFER TO
- ; SEE IF IT HAS ANYTHING IN IT. IF IT DOES, CP/M READS
- ; IT AND PERFORMS THE FUNCTION.
-
-
- ORG 100H
- BDOS EQU 5
-
- CR EQU 0DH ;ASCII CARRIAGE RETURN
-
-
- JMP START
-
-
- ;THE CBIOS JUMP TABLE IS MOVED HERE
-
-
- BOOT: DS 3
- WBOOT: DS 3
- CONST: DS 3
- CONIN: DS 3
- CONOUT: DS 3
- LIST: DS 3
- PUNCH: DS 3
- READER: DS 3
- HOME: DS 3
- SELDSK: DS 3
- SETTRK: DS 3
- SETSEC: DS 3
- SETDMA: DS 3
- READ: DS 3
- WRITE: DS 3
- LISTST: DS 3 ;ABOVE 15 FOR CP/M 1.4; LAST 2 FOR
- SECTRAN:DS 3 ;CP/M 2.0 COMPATIBILITY.
-
- START: LXI SP,STACK
- LHLD 1 ;GET WARM BOOT ADDRESS
- DCX H
- DCX H
- DCX H
- LXI D,BOOT ;DESTINATION ADDRESS
- MVI B,17*3 ;NUMBER OF BYTES TO MOVE
- CALL MOVE ;MOVE THE CBIOS JUMP TABLE
- LXI B,80H
- CALL SETDMA ;SET DMA ADDRESS TO 80H
- MVI C,0
- CALL SETTRK ;SET TRACK TO 0
- MVI C,2
- CALL SETSEC ;SET SECTOR TO 2
- CALL READ ;READ IN FIRST SECTOR OF CPM
- QQ: CALL CRLF
- CALL PRINT
- DB ' INSTALL OR REMOVE AUTO BOOT SEQUENCE ON',CR
- CALL PRINT
- DB ' CURRENTLY LOGGED DISK? (I OR R)',CR
- CALL CRLF
- CALL PRINT
- DB ' NOTE - IT IS IMPOSSIBLE TO INSTALL A',CR
- CALL PRINT
- DB ' SUBMIT COMMAND, AS THE SUBMIT PROGRAM',CR
- CALL PRINT
- DB ' WILL LOOK AT THE BUFFER AND RE-SUBMIT',CR
- CALL PRINT
- DB ' ITSELF AD-INFINITUM...',CR
- CALL CRLF
- CALL INPUT ;GET REPLY
- CPI 'I'
- JZ INSTALL
- CPI 'R'
- JZ REMOVE
- JMP QQ
-
-
- ;CONSOLE INPUT ROUTINE
-
- INPUT: PUSH H
- PUSH D
- PUSH B
- MVI C,1 ;GET CONSOLE INPUT
- CALL 5
- CPI 60H
- JC IN1
- SUI 20H ;CONVERT TO UPPER CASE
- IN1: POP B
- POP D
- POP H
- RET
-
- CRLF: CALL PRINT
- DB CR
- RET
-
-
- ;PRINTS ASCII STRINGS POINTED TO BY TOP OF STACK
- ;TO CONSOLE.
-
- PRINT: XTHL ;GET STRING POINTER
- PUSH PSW
- PUSH B
- PO1: MOV A,M
- INX H
- CPI '@' ;NO CR IF @ IS END OF STRING
- JZ NOCR
- CALL COUT
- CPI CR ;CARRIAGE RET?
- JZ THEEND
- JMP PO1
- THEEND: CALL PRINT
- DB 0AH,0,0,0,0,'@'
- NOCR: POP B
- POP PSW
- XTHL
- RET
-
- ;CONSOLE OUTPUT ROUTINE
-
- COUT: PUSH PSW
- PUSH B
- PUSH D
- PUSH H
- MOV E,A
- MVI C,2 ;WRITE CONSOLE
- CALL 5
- POP H
- POP D
- POP B
- POP PSW
- RET
-
-
- ;GENERAL PURPOSE MEMORY TO MEMORY BLOCK MOVE ROUTINE
- ;HL POINT TO THE SOURCE, DE POINT TO THE DESTINATION
- ;THE B REGISTER HAS THE COUNT.
-
-
- MOVE: MOV A,M
- STAX D
- INX H
- INX D
- DCR B
- JNZ MOVE
- RET
-
-
-
- ;THIS ROUTINE GETS THE TEXT STRING FOR THE AUTO BOOT
- ;SEQUENCE AND THEN MOVES IT INTO THE CCP CONSOLE BUFFER.
-
- INSTALL:
- CALL CRLF
- CALL CRLF
- CALL PRINT
- DB ' ENTER COMMAND STRING YOU WISH TO AUTO EXECUTE',CR
- CALL PRINT
- DB ' EXACTLY AS DESIRED - NO BACKSPACES ALLOWED!',CR
- CALL CRLF
- LXI H,INSTL ;LOCATION OF ENTERED STRING
- MVI B,0 ;COUNT FOR MOVE ROUTINE
- INST1: CALL INPUT
- CPI CR
- JZ INST2
- MOV M,A
- INX H
- INR B
- JMP INST1 ;DIDN'T TYPE CR YET, SO GET MORE STUFF
- INST2: MVI M,0 ;WAS A CR, SO LAST BYTE IS A 00
- INR B
- MOV A,B
- STA 87H ;INDICATE LENGTH OF STRING
- LXI D,88H
- LXI H,INSTL ;MOVE TYPED TEXT STRING TO 88H
- CALL MOVE
- CALL WRITE ;WRITE SECTOR TO DISK
- CALL CRLF
- CALL PRINT
- DB ' CP/M AUTO BOOT SEQUENCE INSTALLED',CR
- JMP 0
-
- ;THIS ROUTINE CLEARS THE CCP CONSOLE BUFFER
-
-
- REMOVE: LXI H,REMV
- LXI D,87H
- MVI B,11H
- CALL MOVE
- CALL WRITE
- CALL CRLF
- CALL PRINT
- DB ' CP/M AUTO BOOT SEQUENCE REMOVED',CR
- JMP 0
-
- ;THESE ARE THE STRINGS WHICH ARE PUT IN THE
- ;CCP CONSOLE BUFFER
-
- INSTL: DS 16
-
- REMV: DB 0,' '
-
-
-
-
- DS 256
- STACK:
-
-
- END 100H
-
-