home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv068.ark / TURNKEY.PGM < prev    next >
Text File  |  1984-04-29  |  9KB  |  215 lines

  1.  
  2.  
  3.                 ;    T U R N K E Y . A S M
  4.                 
  5.                 ; THIS PROGRAM USED EITHER IN CONJUNCTION WITH
  6.                 ; ANY CPM SYSGEN PROGRAM OR PATCHED INTO SYSGEN VERS 2.0
  7.                 
  8.                 ; IT ALLOWS THE OPERATOR INPUT OF EITHER OR BOTH A COLD
  9.                 ; BOOT COMMAND PROGRAM AND/OR A WARM BOOT COMMAND PROGRAM
  10.                 ; WHICH CAN BE THE SAME OR DIFFERENT.  IT FUNCTIONS BY
  11.                 ; RESERVING A BUFFER SPACE JUST BEFORE BIOS FOR THE COLD BOOT
  12.                 ; COMMAND, WITH A SMALL ROUTINE RUN AT COLD BOOT TIME
  13.                 ; TO COPY THE BUFFER TO THE CCP BUFFER FOR EXECUTION AT
  14.                 ; COLD BOOT.  BY ALLOWING THIS SPACE THIS PROGRAM TRANSFERRS
  15.                 ; OPERATOR INPUT TO THIS BUFFER AND DIRECTLY TO THE
  16.                 ; CCP BUFFER DURING A SYSGEN OPERATION.  THUS WHEN THE
  17.                 ; SYSTEM IS PUT WITH SYSGEN IT CONTAINS THE NEW COLD
  18.                 ; AND OR WARM BOOT COMMANDS.  THE OPERATOR NEED ONLY
  19.                 ; RUN SYSGEN 2.0 OR A COMBINATION IF NOT 2.0 TO CHANGE
  20.                 ; THE COLD AND/OR WARM BOOT COMMANDS.
  21.                 
  22.                 
  23.                 ; WRITTEN BY:
  24.                 
  25.                 ;    JAMES K. OFFENBECHER
  26.                 ;        813 B. LAUREL HILL
  27.                 ;            FORT DIX, NEW JERSEY
  28.                 ;                08640
  29.                 ;    TELEPHONE  (609)-723-7529
  30.                 
  31.                 ;CONDITIONAL ASSEMBLY EQUATES - SET THE
  32.                 ;APPROPRIATE ONE TO BE A -1
  33.                 
  34.  0000 =         ALONE    EQU    0    ;SET TO -1 IF STANDALONE
  35.  FFFF =         SYSGEN    EQU    -1    ;SET TO -1 IF PATCH TO SYSGEN
  36.                 
  37.                 
  38.                 ;    BDOS EQUATES
  39.                 
  40.  0005 =         BDOS    EQU    5    ;BDOS CALL LOCATION
  41.  0001 =         CONIN    EQU    1    ;CONSOLE INPUT FUNCTION
  42.  0002 =         CONOUT    EQU    2    ;CONSOLE OUTPUT FUNCTION
  43.  000A =         INLINE    EQU    10    ;READ CONSOLE BUFFER FUNCTION
  44.  0000 =         WBOOT    EQU    0    ;WARM BOOT ADDRESS
  45.                 
  46.                 ; MISCELLANEOUS EQUATES
  47.                 
  48.  000D =         CR    EQU    0DH    ;ASCII CARRIAGE RETURN
  49.  000A =         LF    EQU    0AH    ;ASCII LINE FEED
  50.  0020 =         BUFLEN    EQU    32    ;LENGTH OF INPUT BUFFER
  51.                 ; NOTE:  THE BUFLEN EQUATE SHOULD BE THE SAME AS IN
  52.                 ;        THE BIOS PATCH.
  53.                 
  54.                 ; MEMORY IMAGE PATCH POINTS
  55.  0980 =         CCP    EQU    0980H    ;START OF CCP IN MEMORY
  56.  0987 =         CCPBUF    EQU    CCP+7    ;COMMAND LINE IN BDOS
  57.  1F80 =         BIOS    EQU    CCP+1600H    ;START OF BIOS
  58.  1F5D =         BIOBUF    EQU    BIOS-BUFLEN-3    ;SET UP BUFFER BEFORE BIOS
  59.                 
  60.                 ;CONDITIONAL EQUATES (IF PATCHING SYSGEN 2.0)
  61.                 
  62.                     IF    SYSGEN
  63.                 
  64.  019A =         MSGOUT    EQU    019AH    ;SUBR LOC IN SYSGEN
  65.                 
  66.                     ENDIF
  67.                 
  68.                 ; THIS IS THE STARTING POINT OF THE STANDALONE VERSION
  69.                 ; IT SETS THE STACK POINTER UP WHICH IS NOT NEEDED
  70.                 ; WITH THE PATCHED VERSION SINCE SYSGEN 2.0'S STACK
  71.                 ; IS BIG ENOUGH.
  72.                 
  73.                     IF    ALONE
  74.                 
  75.                     ORG    100H        ;IF STANDALONE ONLY
  76.                 
  77.                     LXI    SP,STACK    ;SET UP STACK POINTER
  78.                 
  79.                     ENDIF
  80.                 
  81.                 ; THIS IS THE STARTING POINT IF A PATCH TO SYSGEN IS USED.
  82.                 ; SYSGEN'S STACK IS USED AND IT IS ORGED PAST SYSGEN WITH
  83.                 ; A FEW BYTES TO SPARE.  TO PATCH SYSGEN  LOCATIONS MUST
  84.                 ; BE CHANGED AS FOLLOWS:
  85.                 ;    LOC    WAS    CHANGE TO
  86.                 ;    0320H    95H    00H
  87.                 ;    0321H    01H    05H
  88.                 ; USE DDT TO OVERLAY BOOTER.HEX OVER SYSGEN AFTER CHANGES
  89.                 ; AND SAVE WITH 'SAVE 5 SYSBOOT.COM'.
  90.                 
  91.                     IF    SYSGEN
  92.                 
  93.  0500               ORG    500H
  94.                 
  95.  0500 E5            PUSH    H        ;SAVE H/L FROM SYSGEN
  96.                 
  97.                     ENDIF
  98.                 
  99.                 ; COMMON SEGMENT OF PROGRAM STARTS HERE
  100.                 
  101.  0501 CD5405    CBOT:    CALL    ZLOOP        ;CLEAR THE BUFFER
  102.  0504 218505        LXI    H,CBOOTM    ;POINT TO COLD BOOT REQUEST
  103.  0507 CD9A01        CALL    MSGOUT        ;PUT IT ON CONSOLE
  104.  050A 11E405        LXI    D,IBUF        ;POINT TO INPUT BUFFER
  105.  050D 0E0A          MVI    C,INLINE    ;GET FUNCTION IN C
  106.  050F CD0500        CALL    BDOS        ;PUT INPUT IN BUFFER
  107.  0512 3AE505    CO    LDA    IBUF+1        ;GET # OF CHARS ENTERED
  108.  0515 FE1F          CPI    BUFLEN-1    ;GET # OF CHARS ALLOWED
  109.  0517 DA2305        JC    COK        ;BYPASS ERROR IF OK
  110.  051A 21BD05        LXI    H,TOLONG    ;POINT TO ERROR MESSAGE
  111.  051D CD9A01        CALL    MSGOUT        ;PRINT IT
  112.  0520 C30105        JMP    CBOT        ;TRY AGAIN
  113.  0523 215D1F    COK:    LXI    H,BIOBUF    ;POINT TO BIOS BUFFER
  114.  0526 CD6105        CALL    COPY        ;GO PUT IT INTO THE BIOS
  115.  0529 CD5405    WBOT:    CALL    ZLOOP        ;RE-CLEAR THE BUFFER
  116.  052C 21A105        LXI    H,WBOOTM    ;POINT TO WARM BOOT REQUEST
  117.  052F CD9A01        CALL    MSGOUT        ;PUT IT ON CONSOLE
  118.  0532 11E405        LXI    D,IBUF        ;POINT TO INPUT BUFFER
  119.  0535 0E0A          MVI    C,INLINE    ;GET FUNCTION IN C
  120.  0537 CD0500        CALL    BDOS        ;GO PUT MESSAGE IN BUFFER
  121.  053A 3AE505        LDA    IBUF+1        ;GET # OF CHARS ENTERED
  122.  053D FE1F          CPI    BUFLEN-1    ;GET # OF CHARS ALLOWED
  123.  053F DA4B05        JC    WOK        ;BYPASS ERROR IF OK
  124.  0542 21BD05        LXI    H,TOLONG    ;POINT TO ERROR MESSAGE
  125.  0545 CD9A01        CALL    MSGOUT        ;PRINT IT
  126.  0548 C32905        JMP    WBOT        ;TRY AGAIN
  127.  054B 218709    WOK:    LXI    H,CCPBUF    ;POINT TO BUFFER IN CCP
  128.  054E CD6105        CALL    COPY        ;GO PUT MESSAGE IN CCP
  129.  0551 C37B05        JMP    EXIT        ;EXIT TO CPM OR SYSGEN
  130.                 
  131.                 ; THIS ROUTINE CLEARS THE INPUT BUFFER TO ALL ZEROS
  132.                 
  133.  0554 AF        ZLOOP:    XRA    A        ;CLEAR A
  134.  0555 0E20          MVI    C,BUFLEN    ;SET THE COUNT
  135.  0557 21E505        LXI    H,IBUF+1    ;POINT PAST THE MAX LENGTH
  136.  055A 77        ZLOOP1:    MOV    M,A        ;CLEAR THE BYTE
  137.  055B 23            INX    H        ;POINT TO NEXT
  138.  055C 0D            DCR    C        ;ONE LESS TO DO
  139.  055D C25A05        JNZ    ZLOOP1        ;LOOP TILL DONE
  140.  0560 C9            RET
  141.                 
  142.                 ; THIS ROUTINE COPIES THE INPUT BUFFER TO THE SPECIFIED
  143.                 ; SYSTEM BUFFER CLEARING ANY OLD COMMANDS PRESENT.
  144.                 
  145.  0561 11E505    COPY:    LXI    D,IBUF+1    ;POINT TO # OF CHARS INPUT
  146.  0564 0E20          MVI    C,BUFLEN    ;PUT COUNT IN C
  147.  0566 1A        COPY1:    LDAX    D        ;GET BYTE FROM INPUT BUFFER
  148.  0567 FE61          CPI    'A'+20H        ;LESS THAN LOWER CASE A
  149.  0569 DA7305        JC    CHROK        ;DON'T NEED CONVERT
  150.  056C FE7B          CPI    'Z'+20H+1    ;HIGHER THAN LOWER CASE Z
  151.  056E D27305        JNC    CHROK        ;DON'T NEED CONVERT
  152.  0571 E65F          ANI    05FH        ;CONVERT TO LOWER CASE
  153.  0573 77        CHROK:    MOV    M,A        ;PUT IN OUTPUT
  154.  0574 23            INX    H        ;BUMP OUTPUT
  155.  0575 13            INX    D        ;BUMP INPUT TOO
  156.  0576 0D            DCR    C        ;ONE LESS TO DO
  157.  0577 C26605        JNZ    COPY1        ;LOOP TILL DONE
  158.  057A C9            RET
  159.                 
  160.                     IF    ALONE
  161.                 
  162.                 ; THIS ROUTINE OUTPUTS A MESSAGE TO THE CONSOLE DEVICE
  163.                 ; BY CHARACTER UNTIL A ZERO IS ENCOUNTERED.
  164.                 ; ALSO INCLUDES STANDALONE EXIT ROUTINE.
  165.                 
  166.                 MSGOUT:    MOV    A,M        ;GET BYTE IN A
  167.                     ORA    A        ;SET Z FLAG IF END
  168.                     RZ            ;RETURN IF DONE
  169.                     PUSH    H        ;SAVE THE POINTER
  170.                     MOV    E,A        ;PUT CHAR IN E FOR BDOS
  171.                     MVI    C,CONOUT    ;GET FUNCTION IN C
  172.                     CALL    BDOS        ;GO PUT THE CHAR ON CONSOLE
  173.                     POP    H        ;RESTORE POINTER
  174.                     INX    H        ;POINT TO NEXT BYTE
  175.                     JMP    MSGOUT        ;LOOP TILL DONE
  176.                 
  177.                 EXIT:    JMP    WBOOT
  178.                 
  179.                     ENDIF
  180.                 
  181.                     IF    SYSGEN
  182.                 
  183.  057B 21E105    EXIT:    LXI    H,NEWLIN    ;POINT TO NEW LINE MESSAGE
  184.  057E CD9A01        CALL    MSGOUT        ;PRINT IT
  185.  0581 E1            POP    H        ;RESTORE H/L FROM SYSGEN
  186.  0582 C39A01        JMP    MSGOUT        ;JUMP BACK INTO SYSGEN
  187.                 
  188.                     ENDIF
  189.                 
  190.                 ; SYSTEM MESSAGES
  191.                 
  192.  0585 0D0A454E54CBOOTM:    DB    CR,LF,'ENTER COLD BOOT COMMAND',CR,LF,0
  193.                 
  194.  05A1 0D0A454E54WBOOTM:    DB    CR,LF,'ENTER WARM BOOT COMMAND',CR,LF,0
  195.                 
  196.  05BD 0D0A544F4FTOLONG:    DB    CR,LF,'TOO MANY CHARACTERS - TRY AGAIN',CR,LF,0
  197.                 
  198.  05E1 0D0A00    NEWLIN:    DB    CR,LF,0
  199.                 
  200.                 ; INPUT BUFFER STORAGE
  201.                 
  202.  05E4 20        IBUF:    DB    BUFLEN    ;BUFFER LENGTH FOR BDOS CALL
  203.  05E5               DS    BUFLEN    ;THE ACTUAL STORAGE LOCS
  204.                 
  205.                 ; STACK SPACE IF STANDALONE ONLY (USE SYSGEN STACK IF OK)
  206.                 
  207.                     IF    ALONE
  208.                 
  209.                     DS    31
  210.                 STACK:    DS    1
  211.                 
  212.                     ENDIF
  213.                 
  214.  0605               END
  215.