home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol019 / autoboot.asm < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  234 lines

  1. ; TITLE    'INSTALL OR REMOVE AUTO BOOT SEQUENCE.  3/4/80'
  2.  
  3. ;    WRITTEN BY JOHN MOORHEAD
  4.  
  5.  
  6. ;    THIS PROGRAM WILL INSTALL OR REMOVE AN AUTO BOOT
  7. ;    MESSAGE OR COMMAND FILE NAME TO/FROM THE USER
  8. ;    INPUT BUFFER AT LOCATION 80 HEX.  THIS MODIFICATION
  9. ;    IS PERMANANTLY STORED ON THE CURRENTLY LOGGED DISK.
  10. ;
  11. ;NAME:    AUTOBOOT.ASM
  12. ;
  13. ;    THIS PROGRAM WORKS WITH BOTH CP/M VERSIONS 1.4 AND 2.0.
  14. ;    IT LOADS THE FIRST 128 BYTES OF THE CP/M CCP MODULE
  15. ;    INTO RAM AT 80 HEX.  THIS IS ASSUMED TO BE ON TRACK
  16. ;    ZERO, SECTOR 2.  IF THE USER TYPES 'I' TO INSTALL THE
  17. ;    AUTO BOOT FILE NAME OR COMMAND, THE PROGRAM WILL PROMPT
  18. ;    THE USER FOR SAID ITEM.  THE PROGRAM WILL INSERT THAT
  19. ;    TEXT STRING INTO THE CCP CONSOLE BUFFER ALONG WITH THE
  20. ;    LENGTH.  IT THEN WRITES THIS MODIFIED SECTOR OF THE CCP
  21. ;    BACK TO THE DISK.  'REMOVE' WORKS THE SAME WAY, EXCEPT
  22. ;    THAT IT SETS THE LENGTH OF THE INPUT BUFFER STRING TO
  23. ;    ZERO AT HEX 987, AND WRITES 16 HEX 20'S (ASCII SPACE)
  24. ;    STARTING AT 988 HEX.  THIS IS THEN RE-WRITTEN OUT TO
  25. ;    THE DISK.
  26. ;
  27. ;    WHEN CP/M WARM BOOTS IT CHECKS THE CONSOLE BUFFER TO
  28. ;    SEE IF IT HAS ANYTHING IN IT.  IF IT DOES, CP/M READS
  29. ;    IT AND PERFORMS THE FUNCTION.  
  30.  
  31.  
  32.     ORG 100H
  33. BDOS    EQU    5
  34.  
  35. CR    EQU    0DH    ;ASCII CARRIAGE RETURN
  36.  
  37.  
  38.     JMP    START
  39.  
  40.  
  41. ;THE CBIOS JUMP TABLE IS MOVED HERE
  42.  
  43.  
  44. BOOT:    DS    3
  45. WBOOT:    DS    3
  46. CONST:    DS    3
  47. CONIN:    DS    3
  48. CONOUT:    DS    3
  49. LIST:    DS    3
  50. PUNCH:    DS    3
  51. READER:    DS    3
  52. HOME:    DS    3
  53. SELDSK:    DS    3
  54. SETTRK:    DS    3
  55. SETSEC:    DS    3
  56. SETDMA:    DS    3
  57. READ:    DS    3
  58. WRITE:    DS    3
  59. LISTST:    DS    3    ;ABOVE 15 FOR CP/M 1.4; LAST 2 FOR
  60. SECTRAN:DS    3    ;CP/M 2.0 COMPATIBILITY.
  61.  
  62. START:    LXI    SP,STACK
  63.     LHLD    1    ;GET WARM BOOT ADDRESS
  64.     DCX    H
  65.     DCX    H
  66.     DCX    H
  67.     LXI    D,BOOT    ;DESTINATION ADDRESS
  68.     MVI    B,17*3    ;NUMBER OF BYTES TO MOVE
  69.     CALL    MOVE    ;MOVE THE CBIOS JUMP TABLE 
  70.     LXI    B,80H
  71.     CALL    SETDMA    ;SET DMA ADDRESS TO 80H
  72.     MVI    C,0
  73.     CALL    SETTRK    ;SET TRACK TO 0
  74.     MVI    C,2
  75.     CALL    SETSEC    ;SET SECTOR TO 2
  76.     CALL    READ    ;READ IN FIRST SECTOR OF CPM
  77. QQ:    CALL    CRLF
  78.     CALL    PRINT
  79.     DB    ' INSTALL OR REMOVE AUTO BOOT SEQUENCE ON',CR
  80.     CALL    PRINT
  81.     DB    ' CURRENTLY LOGGED DISK? (I OR R)',CR
  82.     CALL    CRLF
  83.     CALL    PRINT
  84.     DB    ' NOTE - IT IS IMPOSSIBLE TO INSTALL A',CR
  85.     CALL    PRINT
  86.     DB    ' SUBMIT COMMAND, AS THE SUBMIT PROGRAM',CR
  87.     CALL    PRINT
  88.     DB    ' WILL LOOK AT THE BUFFER AND RE-SUBMIT',CR
  89.     CALL    PRINT
  90.     DB    ' ITSELF AD-INFINITUM...',CR
  91.     CALL    CRLF
  92.     CALL    INPUT    ;GET REPLY
  93.     CPI    'I'
  94.     JZ    INSTALL
  95.     CPI    'R'
  96.     JZ    REMOVE
  97.     JMP    QQ
  98.  
  99.  
  100. ;CONSOLE INPUT ROUTINE
  101.  
  102. INPUT:    PUSH    H
  103.     PUSH    D
  104.     PUSH    B
  105.     MVI    C,1    ;GET CONSOLE INPUT
  106.     CALL    5
  107.     CPI    60H
  108.     JC    IN1
  109.     SUI    20H    ;CONVERT TO UPPER CASE
  110. IN1:    POP    B
  111.     POP    D
  112.     POP    H
  113.     RET
  114.  
  115. CRLF:    CALL    PRINT
  116.     DB    CR
  117.     RET
  118.  
  119.  
  120. ;PRINTS ASCII STRINGS POINTED TO BY TOP OF STACK
  121. ;TO CONSOLE.
  122.  
  123. PRINT:    XTHL        ;GET STRING POINTER
  124.     PUSH    PSW
  125.     PUSH    B
  126. PO1:    MOV    A,M
  127.     INX    H
  128.     CPI    '@'    ;NO CR IF @ IS END OF STRING
  129.     JZ    NOCR
  130.     CALL    COUT
  131.     CPI    CR    ;CARRIAGE RET?
  132.     JZ    THEEND
  133.     JMP    PO1
  134. THEEND:    CALL    PRINT
  135.     DB    0AH,0,0,0,0,'@'
  136. NOCR:    POP    B
  137.     POP    PSW
  138.     XTHL
  139.     RET
  140.  
  141. ;CONSOLE OUTPUT ROUTINE
  142.  
  143. COUT:    PUSH    PSW
  144.     PUSH    B
  145.     PUSH    D
  146.     PUSH    H
  147.     MOV    E,A
  148.     MVI    C,2    ;WRITE CONSOLE
  149.     CALL    5
  150.     POP    H
  151.     POP    D
  152.     POP    B
  153.     POP    PSW
  154.     RET
  155.  
  156.  
  157. ;GENERAL PURPOSE MEMORY TO MEMORY BLOCK MOVE ROUTINE
  158. ;HL POINT TO THE SOURCE,  DE POINT TO THE DESTINATION
  159. ;THE B REGISTER HAS THE COUNT.
  160.  
  161.  
  162. MOVE:    MOV    A,M
  163.     STAX    D
  164.     INX    H
  165.     INX    D
  166.     DCR    B
  167.     JNZ    MOVE
  168.     RET
  169.  
  170.  
  171.  
  172. ;THIS ROUTINE GETS THE TEXT STRING FOR THE AUTO BOOT
  173. ;SEQUENCE AND THEN MOVES IT INTO THE CCP CONSOLE BUFFER.
  174.  
  175. INSTALL:    
  176.     CALL    CRLF
  177.     CALL    CRLF
  178.     CALL    PRINT
  179.     DB    ' ENTER COMMAND STRING YOU WISH TO AUTO EXECUTE',CR
  180.     CALL    PRINT
  181.     DB    ' EXACTLY AS DESIRED - NO BACKSPACES ALLOWED!',CR
  182.     CALL    CRLF
  183.     LXI    H,INSTL    ;LOCATION OF ENTERED STRING
  184.     MVI    B,0    ;COUNT FOR MOVE ROUTINE
  185. INST1:    CALL    INPUT
  186.     CPI    CR
  187.     JZ    INST2
  188.     MOV    M,A
  189.     INX    H
  190.     INR    B
  191.     JMP    INST1    ;DIDN'T TYPE CR YET, SO GET MORE STUFF
  192. INST2:    MVI    M,0    ;WAS A CR, SO LAST BYTE IS A 00
  193.     INR    B
  194.     MOV    A,B
  195.     STA    87H    ;INDICATE LENGTH OF STRING
  196.     LXI    D,88H
  197.     LXI    H,INSTL    ;MOVE TYPED TEXT STRING TO 88H
  198.     CALL    MOVE
  199.     CALL    WRITE    ;WRITE SECTOR TO DISK
  200.     CALL    CRLF
  201.     CALL    PRINT
  202.     DB    ' CP/M AUTO BOOT SEQUENCE INSTALLED',CR
  203.     JMP    0
  204.  
  205. ;THIS ROUTINE CLEARS THE CCP CONSOLE BUFFER
  206.  
  207.  
  208. REMOVE:    LXI    H,REMV
  209.     LXI    D,87H
  210.     MVI    B,11H
  211.     CALL    MOVE
  212.     CALL    WRITE
  213.     CALL    CRLF
  214.     CALL    PRINT
  215.     DB    ' CP/M AUTO BOOT SEQUENCE REMOVED',CR
  216.     JMP    0
  217.  
  218. ;THESE ARE THE STRINGS WHICH ARE PUT IN THE
  219. ;CCP CONSOLE BUFFER
  220.  
  221. INSTL:    DS    16
  222.  
  223. REMV:    DB    0,'                '
  224.  
  225.  
  226.  
  227.  
  228.     DS    256
  229. STACK:
  230.  
  231.  
  232.     END    100H
  233.  
  234.