home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / SUPERBIOS.ZIP / QUAD-SBC / SBCBOOT.MAC < prev    next >
Text File  |  1999-03-13  |  2KB  |  107 lines

  1.     .z80
  2. ;
  3. ;
  4. ;COLD BOOT LOADER FOR CP/M 2.2
  5. ; FOR THE Z80 SBC
  6. ;LAST UPDATE 5/15/82
  7. ;
  8.  
  9. false    equ    0            ;logical equates
  10. true    equ    not false
  11.  
  12. MINI    EQU    false            ;set to true for mini
  13. trk0dd    equ    true            ;true = track 00 double density
  14. dsd    equ    true            ;true = double sided for double density use
  15. ;
  16. RTYN    EQU    10            ; disk io retries
  17. SEEKRT    EQU    1            ; rate 0=3ms, 1=6ms, 2=10ms, 3=20ms
  18. CDISK    EQU    4            ; last disk selected by the ccp
  19. BELL    EQU    07            ; ding
  20. MAXDSK    EQU    1            ; largest disk number
  21. MONIT    EQU    0F033H            ; monitor boot error entry point
  22. LOADER    EQU    100H
  23.  
  24. CMDSTATUS EQU    100H-4
  25. SECTORS EQU    100H-2
  26. ;
  27. CMD    EQU    0CH            ; fdc command & fdc status register    
  28. TK    EQU    CMD+1            ; fdc track register
  29. SECMD    EQU    CMD+2            ; fdc sector register
  30. DAL    EQU    CMD+3            ; fdc data port
  31. WAIT    EQU    014H            ; hardware wait for fdc intrq + drq
  32.                     ;  & drive select - restore latch
  33. ;
  34. ;
  35. BUFF    EQU    80H            ; default dma buffer
  36.  
  37. ;
  38. ;
  39.  
  40. BOOT:    
  41.     LD    A,01101111B        ;enable memory, turn prom and power on jump off
  42.     OUT    (16H),A    
  43.     LD    A,(NSECTS)        ;get sectors to load
  44.     LD    D,A
  45.  
  46.     LD    HL,80H            ;start loading at 80h
  47.     LD    E,1            ;start with sector 1
  48. RBLK1:    
  49.     LD    BC,DAL            ; no status checks and data port into C
  50.     LD    A,E            ; get sector
  51.     OUT    (SECMD),A        ; set sector
  52.     LD    A,088H            ; get operation
  53.     OUT    (CMD),A
  54.     NOP    
  55.  
  56. READLOOP: 
  57.     IN    A,(WAIT)        ; wait for drq or intrq
  58.     OR    A            ; was it intrq ?
  59.     JP    P,IODONE        ; if so leave
  60.     INI                ;  otherwise get data
  61.     JR    READLOOP        ;   and go do more
  62.  
  63. IODONE:    
  64.     IN    A,(CMD)            ;get status
  65.     LD    C,A
  66.     LD    (CMDSTATUS),BC        ;and save it
  67.     AND    9CH            ;any errors
  68.     JR    NZ,BOOTERROR        ;leave if so
  69.  
  70.     DEC    D            ; one less block to get
  71.     JP    Z,LOADER        ; if zero must be done
  72.  
  73.     INC    E            ;  otherwise increment sector
  74.     LD    A,26+1
  75.     CP    E            ;past end of track
  76.     JR    NZ,RBLK1        ;if not go read more
  77.  
  78.  
  79. BOOTERROR: 
  80.     PUSH    AF            ;Save errors for monitor reporting
  81.     LD    (SECTORS),DE        ;save error sector
  82.     LD    A,01001111B        ;turn prom on
  83.     OUT    (16H),A
  84.     JP    MONIT            ;and go back to monitor
  85.  
  86.  
  87.     ORG    07EH
  88. NSECTS:
  89.     IF    trk0dd
  90.     DB    4            ;if track o double density get 4 1024b sectors
  91.     ELSE
  92.     DB    24            ; else get 24
  93.     ENDIF
  94.  
  95. dens:
  96.     if    trk0dd
  97.     if    dsd
  98.     db    0e7h            ;double density double sided flag
  99.     else
  100.     db    0e6h            ;double density single sided flag
  101.     endif
  102.     else
  103.     DB    0E5H            ;density flag patched by sysgen
  104.     endif
  105.     END    
  106.  
  107.