home *** CD-ROM | disk | FTP | other *** search
-
-
- ; T U R N K E Y . A S M
-
- ; THIS PROGRAM USED EITHER IN CONJUNCTION WITH
- ; ANY CPM SYSGEN PROGRAM OR PATCHED INTO SYSGEN VERS 2.0
-
- ; IT ALLOWS THE OPERATOR INPUT OF EITHER OR BOTH A COLD
- ; BOOT COMMAND PROGRAM AND/OR A WARM BOOT COMMAND PROGRAM
- ; WHICH CAN BE THE SAME OR DIFFERENT. IT FUNCTIONS BY
- ; RESERVING A BUFFER SPACE JUST BEFORE BIOS FOR THE COLD BOOT
- ; COMMAND, WITH A SMALL ROUTINE RUN AT COLD BOOT TIME
- ; TO COPY THE BUFFER TO THE CCP BUFFER FOR EXECUTION AT
- ; COLD BOOT. BY ALLOWING THIS SPACE THIS PROGRAM TRANSFERRS
- ; OPERATOR INPUT TO THIS BUFFER AND DIRECTLY TO THE
- ; CCP BUFFER DURING A SYSGEN OPERATION. THUS WHEN THE
- ; SYSTEM IS PUT WITH SYSGEN IT CONTAINS THE NEW COLD
- ; AND OR WARM BOOT COMMANDS. THE OPERATOR NEED ONLY
- ; RUN SYSGEN 2.0 OR A COMBINATION IF NOT 2.0 TO CHANGE
- ; THE COLD AND/OR WARM BOOT COMMANDS.
-
-
- ; WRITTEN BY:
-
- ; JAMES K. OFFENBECHER
- ; 813 B. LAUREL HILL
- ; FORT DIX, NEW JERSEY
- ; 08640
- ; TELEPHONE (609)-723-7529
-
- ;CONDITIONAL ASSEMBLY EQUATES - SET THE
- ;APPROPRIATE ONE TO BE A -1
-
- 0000 = ALONE EQU 0 ;SET TO -1 IF STANDALONE
- FFFF = SYSGEN EQU -1 ;SET TO -1 IF PATCH TO SYSGEN
-
-
- ; BDOS EQUATES
-
- 0005 = BDOS EQU 5 ;BDOS CALL LOCATION
- 0001 = CONIN EQU 1 ;CONSOLE INPUT FUNCTION
- 0002 = CONOUT EQU 2 ;CONSOLE OUTPUT FUNCTION
- 000A = INLINE EQU 10 ;READ CONSOLE BUFFER FUNCTION
- 0000 = WBOOT EQU 0 ;WARM BOOT ADDRESS
-
- ; MISCELLANEOUS EQUATES
-
- 000D = CR EQU 0DH ;ASCII CARRIAGE RETURN
- 000A = LF EQU 0AH ;ASCII LINE FEED
- 0020 = BUFLEN EQU 32 ;LENGTH OF INPUT BUFFER
- ; NOTE: THE BUFLEN EQUATE SHOULD BE THE SAME AS IN
- ; THE BIOS PATCH.
-
- ; MEMORY IMAGE PATCH POINTS
- 0980 = CCP EQU 0980H ;START OF CCP IN MEMORY
- 0987 = CCPBUF EQU CCP+7 ;COMMAND LINE IN BDOS
- 1F80 = BIOS EQU CCP+1600H ;START OF BIOS
- 1F5D = BIOBUF EQU BIOS-BUFLEN-3 ;SET UP BUFFER BEFORE BIOS
-
- ;CONDITIONAL EQUATES (IF PATCHING SYSGEN 2.0)
-
- IF SYSGEN
-
- 019A = MSGOUT EQU 019AH ;SUBR LOC IN SYSGEN
-
- ENDIF
-
- ; THIS IS THE STARTING POINT OF THE STANDALONE VERSION
- ; IT SETS THE STACK POINTER UP WHICH IS NOT NEEDED
- ; WITH THE PATCHED VERSION SINCE SYSGEN 2.0'S STACK
- ; IS BIG ENOUGH.
-
- IF ALONE
-
- ORG 100H ;IF STANDALONE ONLY
-
- LXI SP,STACK ;SET UP STACK POINTER
-
- ENDIF
-
- ; THIS IS THE STARTING POINT IF A PATCH TO SYSGEN IS USED.
- ; SYSGEN'S STACK IS USED AND IT IS ORGED PAST SYSGEN WITH
- ; A FEW BYTES TO SPARE. TO PATCH SYSGEN LOCATIONS MUST
- ; BE CHANGED AS FOLLOWS:
- ; LOC WAS CHANGE TO
- ; 0320H 95H 00H
- ; 0321H 01H 05H
- ; USE DDT TO OVERLAY BOOTER.HEX OVER SYSGEN AFTER CHANGES
- ; AND SAVE WITH 'SAVE 5 SYSBOOT.COM'.
-
- IF SYSGEN
-
- 0500 ORG 500H
-
- 0500 E5 PUSH H ;SAVE H/L FROM SYSGEN
-
- ENDIF
-
- ; COMMON SEGMENT OF PROGRAM STARTS HERE
-
- 0501 CD5405 CBOT: CALL ZLOOP ;CLEAR THE BUFFER
- 0504 218505 LXI H,CBOOTM ;POINT TO COLD BOOT REQUEST
- 0507 CD9A01 CALL MSGOUT ;PUT IT ON CONSOLE
- 050A 11E405 LXI D,IBUF ;POINT TO INPUT BUFFER
- 050D 0E0A MVI C,INLINE ;GET FUNCTION IN C
- 050F CD0500 CALL BDOS ;PUT INPUT IN BUFFER
- 0512 3AE505 CO LDA IBUF+1 ;GET # OF CHARS ENTERED
- 0515 FE1F CPI BUFLEN-1 ;GET # OF CHARS ALLOWED
- 0517 DA2305 JC COK ;BYPASS ERROR IF OK
- 051A 21BD05 LXI H,TOLONG ;POINT TO ERROR MESSAGE
- 051D CD9A01 CALL MSGOUT ;PRINT IT
- 0520 C30105 JMP CBOT ;TRY AGAIN
- 0523 215D1F COK: LXI H,BIOBUF ;POINT TO BIOS BUFFER
- 0526 CD6105 CALL COPY ;GO PUT IT INTO THE BIOS
- 0529 CD5405 WBOT: CALL ZLOOP ;RE-CLEAR THE BUFFER
- 052C 21A105 LXI H,WBOOTM ;POINT TO WARM BOOT REQUEST
- 052F CD9A01 CALL MSGOUT ;PUT IT ON CONSOLE
- 0532 11E405 LXI D,IBUF ;POINT TO INPUT BUFFER
- 0535 0E0A MVI C,INLINE ;GET FUNCTION IN C
- 0537 CD0500 CALL BDOS ;GO PUT MESSAGE IN BUFFER
- 053A 3AE505 LDA IBUF+1 ;GET # OF CHARS ENTERED
- 053D FE1F CPI BUFLEN-1 ;GET # OF CHARS ALLOWED
- 053F DA4B05 JC WOK ;BYPASS ERROR IF OK
- 0542 21BD05 LXI H,TOLONG ;POINT TO ERROR MESSAGE
- 0545 CD9A01 CALL MSGOUT ;PRINT IT
- 0548 C32905 JMP WBOT ;TRY AGAIN
- 054B 218709 WOK: LXI H,CCPBUF ;POINT TO BUFFER IN CCP
- 054E CD6105 CALL COPY ;GO PUT MESSAGE IN CCP
- 0551 C37B05 JMP EXIT ;EXIT TO CPM OR SYSGEN
-
- ; THIS ROUTINE CLEARS THE INPUT BUFFER TO ALL ZEROS
-
- 0554 AF ZLOOP: XRA A ;CLEAR A
- 0555 0E20 MVI C,BUFLEN ;SET THE COUNT
- 0557 21E505 LXI H,IBUF+1 ;POINT PAST THE MAX LENGTH
- 055A 77 ZLOOP1: MOV M,A ;CLEAR THE BYTE
- 055B 23 INX H ;POINT TO NEXT
- 055C 0D DCR C ;ONE LESS TO DO
- 055D C25A05 JNZ ZLOOP1 ;LOOP TILL DONE
- 0560 C9 RET
-
- ; THIS ROUTINE COPIES THE INPUT BUFFER TO THE SPECIFIED
- ; SYSTEM BUFFER CLEARING ANY OLD COMMANDS PRESENT.
-
- 0561 11E505 COPY: LXI D,IBUF+1 ;POINT TO # OF CHARS INPUT
- 0564 0E20 MVI C,BUFLEN ;PUT COUNT IN C
- 0566 1A COPY1: LDAX D ;GET BYTE FROM INPUT BUFFER
- 0567 FE61 CPI 'A'+20H ;LESS THAN LOWER CASE A
- 0569 DA7305 JC CHROK ;DON'T NEED CONVERT
- 056C FE7B CPI 'Z'+20H+1 ;HIGHER THAN LOWER CASE Z
- 056E D27305 JNC CHROK ;DON'T NEED CONVERT
- 0571 E65F ANI 05FH ;CONVERT TO LOWER CASE
- 0573 77 CHROK: MOV M,A ;PUT IN OUTPUT
- 0574 23 INX H ;BUMP OUTPUT
- 0575 13 INX D ;BUMP INPUT TOO
- 0576 0D DCR C ;ONE LESS TO DO
- 0577 C26605 JNZ COPY1 ;LOOP TILL DONE
- 057A C9 RET
-
- IF ALONE
-
- ; THIS ROUTINE OUTPUTS A MESSAGE TO THE CONSOLE DEVICE
- ; BY CHARACTER UNTIL A ZERO IS ENCOUNTERED.
- ; ALSO INCLUDES STANDALONE EXIT ROUTINE.
-
- MSGOUT: MOV A,M ;GET BYTE IN A
- ORA A ;SET Z FLAG IF END
- RZ ;RETURN IF DONE
- PUSH H ;SAVE THE POINTER
- MOV E,A ;PUT CHAR IN E FOR BDOS
- MVI C,CONOUT ;GET FUNCTION IN C
- CALL BDOS ;GO PUT THE CHAR ON CONSOLE
- POP H ;RESTORE POINTER
- INX H ;POINT TO NEXT BYTE
- JMP MSGOUT ;LOOP TILL DONE
-
- EXIT: JMP WBOOT
-
- ENDIF
-
- IF SYSGEN
-
- 057B 21E105 EXIT: LXI H,NEWLIN ;POINT TO NEW LINE MESSAGE
- 057E CD9A01 CALL MSGOUT ;PRINT IT
- 0581 E1 POP H ;RESTORE H/L FROM SYSGEN
- 0582 C39A01 JMP MSGOUT ;JUMP BACK INTO SYSGEN
-
- ENDIF
-
- ; SYSTEM MESSAGES
-
- 0585 0D0A454E54CBOOTM: DB CR,LF,'ENTER COLD BOOT COMMAND',CR,LF,0
-
- 05A1 0D0A454E54WBOOTM: DB CR,LF,'ENTER WARM BOOT COMMAND',CR,LF,0
-
- 05BD 0D0A544F4FTOLONG: DB CR,LF,'TOO MANY CHARACTERS - TRY AGAIN',CR,LF,0
-
- 05E1 0D0A00 NEWLIN: DB CR,LF,0
-
- ; INPUT BUFFER STORAGE
-
- 05E4 20 IBUF: DB BUFLEN ;BUFFER LENGTH FOR BDOS CALL
- 05E5 DS BUFLEN ;THE ACTUAL STORAGE LOCS
-
- ; STACK SPACE IF STANDALONE ONLY (USE SYSGEN STACK IF OK)
-
- IF ALONE
-
- DS 31
- STACK: DS 1
-
- ENDIF
-
- 0605 END
-