home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / A / AUTO.ARK / AUTO.MAC < prev   
Text File  |  1989-09-27  |  3KB  |  124 lines

  1.     .Z80
  2. ;
  3. ; AUTO - SET UP CP/M INITIAL COMMAND
  4. ;
  5. ;    (THE "LOOK - NO HANDS" APPROACH TO COMPUTING)
  6. ;
  7. ; DOC:    THIS PROGRAM INSERTS AN INITIAL COMMAND INTO THE CCP COMMAND LINE
  8. ;    BUFFER ON THE DEFAULT DRIVE SYSTEM TRACKS. BEFORE INSTALLING,
  9. ;    CHECK THAT THE SECTOR ADDRESSES USED MATCH YOUR SYSTEM.  SOME
  10. ;    SYSTEMS RESERVE A PHYSICAL SECTOR FOR THE COLD BOOT ROUTINE, THIS
  11. ;    VERSION OF THE CODE ASSUMES ONE LOGICAL SECTOR IS USED.
  12. ;
  13. INIT    EQU    $
  14.     LD    HL,0
  15.     ADD    HL,SP        ;SAVE STACK PTR IN HL
  16.     LD    SP,8000H    ;SET NEW STACK PTR
  17.     PUSH    HL        ;SAVE OLD STACK POINTER ON NEW STACK
  18. ;
  19. ;    COPY BIOS JUMP TABLE SO THAT WE CAN USE IT
  20. ;
  21.     LD    HL,(1)        ;BIOS JUMP TABLE ADDRESS
  22.     LD    DE,BIOSTB    ;OUR JUMP TABLE ADDRESS
  23.     LD    BC,TABLEN    ;LENGTH OF TABLE
  24.     LDIR            ;COPY IT
  25. ;
  26. ;    CALL BIOS TO SET UP AND READ DISK
  27. ;
  28.     LD    BC,0        ;SET DISK TO 0
  29.     CALL    $SELDK        ;CALL BIOS
  30.     CALL    $HOME        ;HOME IT TO CLEAR OUTSTANDING I/O
  31.     LD    C,1
  32.     CALL    $SETSC        ;SET SECTOR 1
  33.     LD    BC,0
  34.     CALL    $SETTK        ;SET TRACK 0
  35.     LD    BC,SECTR1
  36.     CALL    $SETDA        ;SET BUFFER ADDRESS
  37. ;
  38.     CALL    $READ        ;READ SECTOR 1
  39. ;
  40.     LD    C,2
  41.     CALL    $SETSC        ;SET SECTOR 2
  42.     LD    BC,SECTR2
  43.     CALL    $SETDA        ;SET BUFFER ADDRESS
  44. ;
  45.     CALL    $READ        ;READ SECTOR 2
  46. ;
  47. ;    UPDATE CCP COMMAND BUFFER WITH CONTENTS OF COMMAND LINE
  48. ;    NOTE WE MUST CLEAR UNWANTED SPACES FROM START OF LINE
  49. ;
  50.     LD    HL,080H        ;DEFAULT COMMAND LINE
  51.     LD    A,(HL)
  52.     LD    C,A        ;GET LENGTH OF COMMAND
  53. SKIPSP    EQU    $        ;LOOP - SKIP LEADING SPACES
  54.     INC    HL
  55.     LD    A,(HL)        ;LOOK AT FIRST CHARACTER
  56.     CP    ' '
  57.     JR    NZ,SKIP1    ;EXIT IF NOT SPACE
  58.     DEC    C        ;DECREMENT LENGTH
  59.     JR    NZ,SKIPSP    ;UNTIL END OF COMMAND
  60. SKIP1    EQU    $
  61.     LD    DE,SECTR1+6    ;DEFAULT CCP COMMAND AREA
  62. POS0    EQU    $        ;LOOP - LOCATE BUFFER LENGTH BYTE
  63.     LD    A,(DE)
  64.     CP    07FH
  65.     JP    Z,POS1        ;EXIT IF FOUND
  66.     INC    DE
  67.     INC    DE
  68.     INC    DE        ;INC PAST JUMP
  69.     JP    POS0
  70. POS1    EQU    $
  71.     INC    DE
  72.     LD    A,C        ;GET FINAL LENGTH OF COMMAND
  73.     LD    (DE),A        ;PUT LENGTH INTO BUFFER
  74.     INC    C        ;COPY CMD + TRAILING NULL
  75.     LD    B,0        
  76.     INC    DE        ;DE POINTS TO START OF COMMAND
  77.     LDIR            ;MOVE COMMAND TO DISK BUFFER
  78. ;
  79. ;    NOW WRITE OUT THE UPDATED SECTORS AGAIN
  80. ;
  81.     LD    C,1
  82.     CALL    $SETSC        ;SET SECTOR 1
  83.     LD    BC,SECTR1
  84.     CALL    $SETDA        ;SET BUFFER ADDRESS
  85.     CALL    $WRITE        ;WRITE SECTOR 1
  86. ;
  87.     LD    C,2
  88.     CALL    $SETSC        ;SET SECTOR 2
  89.     LD    BC,SECTR2
  90.     CALL    $SETDA        ;SET BUFFER ADDRESS
  91.     CALL    $WRITE        ;WRITE SECTOR 2
  92. ;
  93.     CALL    $HOME        ;CALL HOME TO ENSURE BUFFER IS WRITTEN
  94.     POP    HL
  95.     LD    SP,HL        ;RESTORE OLD STACK POINTER
  96.     RET            ;RETURN TO CCP
  97. ;
  98. ;    BIOS INDIRECT CALLS
  99. ;    WILL BE FILLED IN BY COPYING IN BIOS JUMP TABLE
  100. ;
  101. BIOSTB    EQU    $
  102. $WBOOT:    DS    3    ;JP    WBOOT
  103. $CONST:    DS    3    ;JP    CONST
  104. $CONIN:    DS    3    ;JP    CONIN
  105. $CONOT:    DS    3    ;JP    CONOUT
  106. $LIST:    DS    3    ;JP    LIST
  107. $PUNCH:    DS    3    ;JP    PUNCH
  108. $READR:    DS    3    ;JP    READER
  109. $HOME:    DS    3    ;JP    HOME
  110. $SELDK:    DS    3    ;JP    SELDSK
  111. $SETTK:    DS    3    ;JP    SETTRK
  112. $SETSC:    DS    3    ;JP    SETSEC
  113. $SETDA:    DS    3    ;JP    SETDMA
  114. $READ:    DS    3    ;JP    READ
  115. $WRITE:    DS    3    ;JP    WRITE
  116. $LSTST:    DS    3    ;JP    LISTST
  117. $SECTR:    DS    3    ;JP    SECTRN
  118. ;
  119. TABLEN    EQU    $-BIOSTB    ;COMPUTE LENGTH TO COPY
  120. ;
  121. SECTR1    EQU    $
  122. SECTR2    EQU    $+128
  123.     END    INIT
  124.