home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug040.ark / NSBOOT.ASM < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.5 KB  |  115 lines

  1. ;
  2. ; TITLE        COLD BOOT LOADER FOR NATIONAL SEMICONDUCTIOR 8221
  3. ; FILENAME    NSBOOT.ASM
  4. ; AUTHOR    Robert A. Van Valzah   2/24/79
  5. ;
  6. ;
  7. ;
  8. ;    CONDITIONAL ASSEMBLY EQUATES
  9. ;
  10. FALSE    EQU    0
  11. TRUE    EQU    NOT FALSE
  12. ;
  13. REL    EQU    FALSE    ;TRUE TO GENERATE RELOCATABLE CODE
  14. ;
  15. MSIZE    EQU    32    ;MEMORY AND CPM SYSTEM SIZE
  16. ;
  17. ;    COMPUTE BASE OF CCP (START OF LOAD)
  18. ;
  19.     IF    REL
  20. BIAS    EQU    0    ;RELOCATOR ASSUMES CCP STARTS AT ZERO
  21.     ENDIF
  22. ;
  23.     IF    NOT REL
  24. BIAS    EQU    (MSIZE-16)*1024+2900H
  25.     ENDIF
  26. ;
  27. ;    COMPUTE OTHER CPM ENTEY POINTS
  28. ;
  29. CPMB    EQU    BIAS        ;START OF CCP
  30. CBOOT    EQU    BIAS+1500H    ;COLD BOOT ENTRY OF CBIOS (BASE OF CBIOS)
  31. DOSEND    EQU    BIAS+1700H    ;FIRST BYTE PAST END OF CBIOS
  32. ;
  33. ;    CONTROLLER PORT EQUATES
  34. ;
  35. BASE    EQU    70H
  36. ;
  37. ; OUTPUT PORTS
  38. ;
  39. ILOW    EQU    BASE+1
  40. IHIGH    EQU    BASE+2
  41. ;
  42. ; INPUT PORTS
  43. ;
  44. READY    EQU    BASE+1
  45. ERRBITS    EQU    BASE
  46. ;
  47. ; STATUS MASKS
  48. ;
  49. BUSY    EQU  1000$0000B    ;CONTROLLER BUSY FLAG
  50. ;
  51. ; DISK COMMANDS
  52. ;
  53. READCMD    EQU    8    ;READ A SECTOR COMMAND
  54. ;
  55. MON80    EQU    0F800H    ;MON 80 ENTRY
  56. ;
  57.     ORG    3000H    ;LOADED HERE BY BOOT ROM AND GIVEN CONTROL
  58. ;
  59.     LXI    SP,80H    ;SETUP TEMP STACK IN LOW MEM
  60. ;
  61. ; SEND ADDRESS OF FIRST IOPB TO CONTROLLER
  62. ;
  63.  
  64.     MVI    B,2    ;NUMBER OF IOPBS TO SEND
  65.     LXI    H,BTIOPB1
  66. SENDADR:
  67.     MOV    A,L
  68.     OUT    ILOW
  69.     MOV    A,H
  70.     OUT    IHIGH
  71. BTWAIT:            ;WAIT FOR CONTROLLER TO FINISH
  72.     IN    READY
  73.     ANI    BUSY
  74.     JNZ    BTWAIT
  75.     IN    ERRBITS    ;GET ERROR BITS FROM CONTROLLER
  76.     ORA    A    ;ANY ERRORS?
  77.     JNZ    MON80    ;NO - BACK TO MON80
  78.     DCR    B    ;DONE WITH BOTH IOPB'S?
  79.     JZ    CBOOT    ;YES - ENTER CBIOS TO BRING UP SYSTEM
  80.     LXI    H,BTIOPB2 ;NO - SEND SECOND IOPB
  81.     JMP    SENDADR
  82. ;
  83. ; FIRST BOOT IOPB, READS TRACK 0 STARTING WITH SECTOR 2 INTO CPMB
  84. ;
  85. BTIOPB1:
  86.     DB    READCMD    ;READ WITH NO INTERRUPTS
  87.     DB    26-1    ;READ ALL OF TRACK 0 BUT SECTOR 1 (WHICH HOLDS BOOT)
  88.     DB    0    ;TRACK 0
  89.     DB    2    ;STARTING WITH SECTOR 2
  90.     DW    CPMB    ;START LOADING AT CPMB
  91.     DB    1    ;SECTOR LENGTH = 128 BYTES
  92.     DB    0FFH    ;NORMAL DATA MARK, 3 RETRYS, IBM FORMAT
  93.             ;AND 128 BYTE TRANSFER
  94.     DB    0    ;IGNORE BLOCK TAG
  95.     DB    100B    ;SIDE 0, UNBUFFERED, SINGLE DENSITY, LAST IOPB
  96.     DW    0    ;NO NEXT IOPB
  97. ;
  98. ; SECOND BOOT IOPB, READ REMAINDER OF DOS FROM TRACK 1 INTO FOLLOWING
  99. ; MEMORY ADDRESSES
  100. ;
  101. BTIOPB2:
  102.     DB    READCMD    ;READ WITH NO INTERRUPTS
  103.     DB    (DOSEND-CPMB)/128-(26-1) ;NUMBER OF SECTORS ON TRACK 1
  104.     DB    1    ;TRACK 1
  105.     DB    1    ;STARTING WITH SECTOR 1
  106.     DW    CPMB+(26-1)*128 ;ADDRESS FOLLOWING READ OF FIRST IOPB
  107.     DB    1    ;SECTOR LENGTH = 128 BYTES
  108.     DB    0FFH    ;NORMAL DATA MARK, 3 RETRYS, IBM FORMAT,
  109.             ;AND 128 BYTE TRANSFER
  110.     DB    0    ;IGNORE BLOCK TAG
  111.     DB    100B    ;SIDE 0, UNBUFFERED, SINGLE DENSITY, LAST IOPB
  112.     DW    0    ;NO NEXT IOPB ADDRESS
  113. ;
  114.     END
  115.