home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv017.ark / 21BOOT.ASM < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.3 KB  |  123 lines

  1. ;
  2. ; TARBELL ELECTRONICS
  3. ; CP/M COLDSTART LOADER
  4. ; VERSION OF 3-22-'79.
  5. ;
  6. ; THIS PROGRAM IS LOADED AT LOCATION ZERO
  7. ; BY THE BOOTSTRAP PROGRAM, AND EXECUTED.
  8. ; ITS PURPOSE IS TO LOAD AND EXECUTE THE
  9. ; CP/M DISK OPERATING SYSTEM AT THE TOP
  10. ; OF THE MEMORY IN USE.
  11. ;
  12. FALSE    EQU  0        ;DEFINE VALUE OF FALSE.
  13. TRUE    EQU  NOT FALSE    ;DEFINE VALUE OF TRUE.
  14. ;
  15. ;********* THIS IS THE AREA TO MAKE CHANGES IN ***********
  16. ;********* FOR DIFFERENT SYSTEM CONFIGURATIONS ***********
  17. ;                            **
  18. MSIZE    EQU  61        ;MEMORY SIZE IN DECIMAL KB.    **
  19. DELTA    EQU  FALSE    ;TRUE IF DELTA PRODUCTS CPU    **
  20. PERSCI    EQU  FALSE    ;TRUE FOR PERSCI DRIVES.    **
  21. DUBSID    EQU  FALSE    ;TRUE FOR DOUBLE SIDED SYSTEMS.    **
  22. SPT    EQU  26        ;NUMBER OF SECTORS PER TRACK.    **
  23. DISK    EQU  0F8H    ;DISK PORT BASE ADDRESS.    **
  24. ;                            **
  25. ;*********************************************************
  26. ;*********************************************************
  27. ;
  28. DCOM    EQU  DISK    ;COMMAND PORT.
  29. DSTAT    EQU  DISK    ;STATUS PORT.
  30. TRACK    EQU  DISK+1    ;TRACK PORT.
  31. SECT    EQU  DISK+2    ;SECTOR PORT.
  32. DATA    EQU  DISK+3    ;DATA PORT.
  33. WAIT    EQU  DISK+4    ;WAIT PORT.
  34. DCONT    EQU  DISK+4    ;CONTROL PORT.
  35. CBASE    EQU  (MSIZE-20)*1024
  36. CPMB    EQU  CBASE+3400H;START OF CP/M.
  37. BDOS    EQU  CPMB+800H    ;START OF BDOS.
  38. BIOS    EQU  CPMB+1600H ;START OF BIOS.
  39. BOOTE    EQU  CPMB+1600H    ;COLD BOOT ENTRY POINT.
  40. NSECTS    EQU  51        ;SECTORS OF CP/M.
  41. RTCNT    EQU  10        ;NUMBER OF RETRYS.
  42.  
  43.     ORG  0        ;START OF LOADER.
  44.  
  45. BOOT:    MVI  E,RTCNT    ;GET RETRY COUNT.
  46.  
  47.     IF  DELTA    ;IF USING DELTA PRODUCTS CPU.
  48.     MVI  A,1    ;CODE TO KICK OUT ROM
  49.     OUT  9
  50.     ENDIF
  51.  
  52. BLOOP:    LXI  SP,100H    ;SET STACK POINTER.
  53.     LXI  H,BDOS    ;CP/M STARTS HERE.
  54.     MVI  D,NSECTS    ;NUMBER OF SECTORS TO READ.
  55.     MVI  C,2    ;SECTOR NUMBER.
  56. RNTRK:    MVI  B,4    ;FOR HEAD LOAD.
  57.     MOV  A,C    ;SECTOR IN A.
  58. RNSEC:    CALL READ    ;READ FIRST SECTOR.
  59.     DCR  D        ;IF DONE,
  60.     JZ   BOOTE    ;GO TO CP/M.
  61.     MVI  B,0    ;FOR NO HEAD LOAD.
  62.     INR  C        ;INCREMENT TRACK COUNT.
  63.     MOV  A,C    ;DONE WITH
  64.     CPI  SPT+1    ;THIS TRACK?
  65.     JC   RNSEC    ;IF NOT, READ NEXT SECTOR.
  66.  
  67.     IF   NOT PERSCI AND NOT DUBSID
  68.     MVI  A,53H    ;STEP COMMAND.
  69.     OUT  DCOM    ;ISSUE IT.
  70.     IN   WAIT    ;WAIT UNTIL DONE.
  71.     ENDIF
  72.  
  73.     IF   PERSCI AND NOT DUBSID
  74.     MVI  A,50H    ;INCREMENT TRACK
  75.     OUT  DCOM    ;REGISTER.
  76.     IN   WAIT    ;WAIT FOR INTRQ.
  77.     MVI  A,1    ;STEP
  78.     OUT  DCONT    ;PERSCI.
  79.     MVI  A,72H    ;SWITCH WAIT FOR
  80.     OUT  DCONT    ;SEEK COMPLETE.
  81.     IN   WAIT    ;WAIT.
  82.     MVI  A,0F2H    ;SWITCH WAIT
  83.     OUT  DCONT    ;BACK.
  84.     ENDIF
  85.  
  86.     IF   DUBSID    ;IF DOUBLE SIDED SYSTEM.
  87.     MVI  A,0B2H    ;SIDE SELECT COMMAND.
  88.     OUT  DCONT    ;ISSUE IT.
  89.     ENDIF
  90.  
  91.     MVI  C,1    ;SECTOR NUMBER.
  92.     JMP  RNTRK    ;READ NEXT TRACK.
  93.  
  94. READ:    OUT  SECT    ;SET SECTOR REGISTER.
  95.     CALL CHECK    ;CHECK FOR ERROR.
  96.     MVI  A,88H    ;COMMAND FOR READ.
  97.     ORA  B        ;GET HEAD LOAD BIT.
  98.     OUT  DCOM    ;ISSUE COMMAND.
  99. RLOOP:    IN   WAIT    ;WAIT FOR DRQ.
  100.     ORA  A        ;SET FLAGS.
  101.     JP   CHECK    ;JUMP IF DONE.
  102.     IN   DATA    ;READ DATA.
  103.     MOV  M,A    ;PUT IN MEMORY.
  104.     INX  H        ;INCREMENT POINTER.
  105.     JMP  RLOOP    ;LOOP UNTIL DONE.
  106.  
  107. CHECK:    IN   DSTAT    ;READ STATUS.
  108.     ANI  9DH    ;LOOK AT ERROR BITS.
  109.     RZ        ;OK IF ZERO.
  110.     DCR  E        ;DECREMENT RETRY COUNT.
  111.     JNZ  BLOOP    ;TRY AGAIN IF NOT ZERO.
  112.     STA  EC        ;SAVE ERROR CODE.
  113.     CMA        ;INVERT AND SEND
  114.     OUT  0FFH    ;TO FRONT PANEL.
  115. HERE:    JMP  HERE    ;LOOP.
  116.  
  117.     ORG  7DH    ;PUT JUMP HERE.
  118.     RST  0        ;JUMP INTO BOOT.
  119.     NOP
  120.     DB   020H    ;INDICATE SD/SS 128 BYTE
  121. ;             SECTORS.
  122. EC:    END        ;END OF BOOT.
  123.