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 / SIMTEL / CPMUG / CPMUG038.ARK / BVBOOT.ASM < prev    next >
Assembly Source File  |  1985-02-10  |  5KB  |  183 lines

  1. ;
  2. ; TITLE        TARBELL DISK CONTROLLER COLD BOOT LOADER
  3. ; FILENAME    BVBOOT.ASM
  4. ; AUTHOR    ROBERT A. VAN VALZAH   2/22/79
  5. ; LAST REVISED    R. A. V.   4/07/79
  6. ; REASON    ADDED IF PASCAL ASSEMBLY SWITCH
  7. ;
  8. ;
  9. ; THIS PROGRAM IS LOADED AT LOCATION ZERO
  10. ; BY THE BOOTSTRAP PROM, AND RUN.  IT'S PURPOSE
  11. ; IS TO LOAD AND RUN THE CCP, BDOS AND CBIOS (CP/M) OR
  12. ; PINIT AND CBIOS (PASCAL) AT THE TOP OF THE MEMORY IN USE.
  13. ;
  14. ; THE FIRST SECTOR LOADED IS TRACK 0, SECTOR 2 (SECTOR
  15. ; 1 IS USED FOR THIS PROGRAM).  THIS SECTOR IS LOADED
  16. ; AT THE ADDRESS EQUATED AS LOADPNT.  SEQUENTIALLY FOLLOWING
  17. ; SECTORS ARE LOADED AT INCREASING ADDRESSES WITH AS
  18. ; MANY INWARD TRACK STEPS AS ARE NECESSARY TO READ
  19. ; A TOTAL OF DOSSECT SECTORS.  UPON COMPLETION OF THE
  20. ; LOAD, CONTROL IS TRANSFERED TO THE EQUATE DOSNTRY.
  21. ;
  22. ;
  23. ;    CONDITIONAL ASSEMBLY EQUATES
  24. ;
  25. FALSE    EQU    0
  26. TRUE    EQU    NOT FALSE
  27. ;
  28. REL    EQU    FALSE    ;TRUE TO GENERATE RELOCATABLE CODE
  29. PASCAL    EQU    FALSE    ;TRUE TO GENERATE PASCAL 'PBOOT'
  30. MSIZE    EQU    47    ;MEMORY AND CP/M SYSTEM SIZE
  31. ;
  32. ;    BASE OF CCP COMPUTATION
  33. ;
  34.     IF    REL
  35. BIAS      EQU    0100H    ;FOR RELOCATION, ASSUME CCP STARTS AT 0
  36.     ENDIF
  37. ;
  38.     IF    NOT REL    ;OTHERWISE USE REAL CCP STARTING ADDR.
  39. BIAS      EQU    (MSIZE-16)*1024+2900H
  40.     ENDIF
  41. ;
  42. ;    OTHER ENTRY CP/M ENTRY POINTS
  43. ;
  44. CPMB    EQU    BIAS        ;CCP START
  45. CBIOS    EQU    CPMB+1500H    ;CBIOS START
  46. DOSEND    EQU    CPMB+1980H    ;END OF DOS LOAD +1
  47. ;
  48. ;    COMPUTE NUMBER OF SECTORS TO LOAD
  49. ;
  50.     IF    PASCAL
  51. DOSSECT      EQU    12    ;LOAD JUST 12 SECTORS FOR PASCAL BOOT
  52.     ELSE
  53. DOSSECT      EQU    (DOSEND-CPMB)/128
  54.     ENDIF
  55. ;
  56. ;    EQUATE DOS LOAD AND ENTRY POINTS
  57. ;
  58.     IF    PASCAL
  59. LOADPNT      EQU    (MSIZE-48)*1024+0BA00H
  60. DOSNTRY      EQU    LOADPNT    ;JUMP TO LOAD POINT FOR PASCAL
  61.     ELSE
  62. LOADPNT      EQU    CPMB    ;START LOADING AT CCP BASE IN CP/M
  63. DOSNTRY      EQU    CBIOS    ;ENTER AT BASE OF CBIOS (COLD BOOT)
  64.     ENDIF
  65. ;
  66. ;    DISK I/O PORT NUMBERS
  67. ;
  68. DBASE    EQU    0F8H    ;BASE ADDRESS OF CONTROLLER CARD
  69. COMMAND    EQU    DBASE    ;FD1771 COMMAND OUTPUT
  70. STATUS    EQU    DBASE    ;FD1771 STATUS INPUT
  71. SECT    EQU    DBASE+2    ;SECTOR OUTPUT
  72. DATA    EQU    DBASE+3    ;DATA INPUT & OUTPUT
  73. WAIT    EQU    DBASE+4    ;DATA SYNCRONIZATION & INTRQ INPUT
  74. ;
  75. ;    FD1771 COMMANDS
  76. ;
  77. STEPICMD EQU    48H    ;STEP IN WITH HEAD LOAD
  78. READCMD     EQU    88H    ;READ IBM FORMAT
  79. ;
  80. ;    OPTION BITS WITHIN COMMANDS
  81. ;
  82. UPDTTRK    EQU    10H    ;UPDATE TRACK REGISTER FLAG
  83. LOADHEAD EQU    04H    ;LOAD HEAD & DELAY BEFORE READ/WRITE
  84. VERIFY    EQU    04H    ;VERIFY AFTER SEEK/STEP
  85. RATE    EQU    10B    ;STEP RATE OF 10MS.
  86. ;
  87. ;    FD1771 STATUS BITS
  88. ;
  89. ; TYPE II STATUS BITS
  90. ;
  91. NOTREADY EQU    80H    ;DRIVE NOT READY
  92. NOTFOUND EQU    10H    ;SECTOR NOT FOUND
  93. CRCERR     EQU    08H    ;READ CRC ERROR
  94. LOSTDATA EQU    04H    ;DATA LOAD, CPU TOO SLOW, DISK TOO FAST
  95. BUSY     EQU    01H    ;CURRENTLY EXECUTING A COMMAND
  96. ;
  97. ; TYPE 1 STATUS BITS
  98. ;
  99. SEEKERR    EQU    10H    ;DESIRED TRACK WAS NOT VERIFIED
  100. ;
  101. ;
  102. ;    BEGIN CODE GENERATION
  103. ;
  104.     ORG    0
  105. ENTRY:
  106.     LXI    H,LOADPNT ;MEMORY ADDRESS BEING LOADED IN REG HL
  107.             ;REG B WILL HOLD THE NEXT SECTOR NUMBER
  108.             ;TO READ, AND
  109.             ;REG C WILL HOLD THE NUMBER OF SECTORS
  110.             ;LEFT TO LOAD.
  111.             ;LOAD BOTH WITH ONE LXI
  112.     LXI    B,(2 SHL 8) + DOSSECT
  113.             ;REG E WILL HOLD THE COMMNAD TO BE
  114.             ;SENT TO THE FD1771.  INITIALLY, USE
  115.             ;READ WITH HEAD LOAD, BUT THEREAFTER
  116.             ;USE READ WITHOUT HEAD LOAD
  117.     MVI    E,READCMD + LOADHEAD
  118. READSEC:
  119.     MOV    A,B    ;GET SECTOR NUBMER
  120.     OUT    SECT    ;SEND TO CONTROLLER
  121.     MOV    A,E    ;GET COMMAND
  122.     MVI    E,READCMD ;NEXT TIME, USE READ WO/ HEAD LOAD
  123.     OUT    COMMAND ;SEND COMMAND
  124. READBYTE:
  125.     IN    WAIT    ;WAIT FOR A BYTE OR INTRQ
  126.     ORA    A    ;INTRQ (INDICATING END OF SECTOR OR ERROR) ?
  127.     JP    SECDONE    ;YES - EXIT READ LOOP
  128.     IN    DATA    ;NO - MUST BE DATA - GO GET IT
  129.     MOV    M,A    ;LOAD IT
  130.     INX    H    ;ON TO NEXT ADDRESS TO LOAD
  131.     JMP    READBYTE
  132. SECDONE:
  133.     IN    STATUS    ;CHECK FOR ERRORS LOADING THIS SECTOR
  134.             ;LOOK AT THE FOLLOWING ERROR BITS
  135.             ;NOT READY
  136.             ;NOT FOUND
  137.             ;CRC ERROR
  138.             ;LOST DATA
  139.             ;BUSY
  140.     ANI    NOTREADY+NOTFOUND+CRCERR+LOSTDATA+BUSY
  141.     JNZ    ERROR    ;TAKE ERROR EXIT IF ANY ARE HIGH
  142.     DCR    C    ;HAVE ALL SECTORS BEEN LOADED?
  143.     JZ    LODDONE    ;YES - ENTER DOS TO BRING UP SYSTEM
  144.     INR    B    ;NO - INCREMENT SECTOR NUMBER
  145.     MOV    A,B    ;AT THE END OF A TRACK?
  146.     CPI    26 + 1
  147.     JC    READSEC    ;NO - JUST READ THE NEXT SECTOR
  148.     MVI    B,1    ;YES - SET SECTOR BACK TO 1, AND
  149.             ;STEP IN TO THE NEXT TRACK
  150.     MVI    A,STEPICMD+UPDTTRK+VERIFY+RATE
  151.     OUT    COMMAND
  152.     IN    WAIT    ;WAIT FOR STEP COMMAND COMPLETION
  153.     IN    STATUS    ;SEE IF STEP WENT OK
  154.             ;LOOK AT THE FOLLOWING ERROR BITS
  155.             ;NOT READY
  156.             ;SEEK ERROR
  157.             ;CRC ERROR
  158.             ;BUSY
  159.     ANI    NOTREADY+SEEKERR+CRCERR+BUSY
  160.     JZ    READSEC    ;STEP WENT OK - READ NEXT SECTOR
  161. ERROR:
  162.     STA    0CC00H    ;STORE ERROR BITS ON VDM SCREEN
  163.     HLT
  164. ;
  165. ;    COME HERE AFTER ALL SECTORS HAVE BEEN LOADED.
  166. ;    NOW INITIALIZE HARDWARE I/O PORTS AND SUCH.
  167. ;
  168. LODDONE:
  169.     ;
  170.     ; YOUR I/O INIT CODE GOES HERE
  171.     ;
  172.     JMP    DOSNTRY    ;DONE BOOTING - ENTER DOS
  173. ;
  174. ;
  175. ;    AFTER LOADING THIS CODE AT ZERO, THE BOOTSTRAP PROM
  176. ;    JUMPS TO ADDRESS 7DH WHICH DISABLES IT.  THE NET
  177. ;    EFFECT IS THAT THE REAL ENTRY P╧INT IS 7DH.
  178. ;
  179.     ORG    7DH
  180.     JMP    ENTRY    ;VECTOR TO START OF LOAD
  181. ;
  182.     END    ENTRY
  183.