home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / sound / mp2 / src / gem / mp2boot.s < prev    next >
Encoding:
Text File  |  1996-10-17  |  2.0 KB  |  134 lines

  1. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. ;              - DSP loader -
  3. ;        a NoCrew production MCMXCV
  4. ;
  5. ;         (c) Copyright NoCrew 1995
  6. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  7.  
  8. ; Main module.
  9.  
  10.     import dsp_bootbin
  11.     import dsp_bootlen
  12.     import dsp_codebin
  13.     import dsp_codelen
  14.     export dsp_load
  15.  
  16.     text
  17.  
  18. dsp_load:
  19.     movem.l    d0-d7/a0-a6,-(sp)
  20.     bsr    DSP_allocate
  21.     bsr    DSP_reset
  22.     bsr    DSP_go
  23.     movem.l    (sp)+,d0-d7/a0-a6
  24.     rts
  25.  
  26. DSP_allocate:
  27.     move.l    dsp_bootbin,a0
  28.     lea    DSP_mem,a1
  29.     move.w    dsp_bootlen,d0
  30.  
  31.     move.l    #512,d1
  32.     moveq    #0,d2
  33. .next:    subq.w    #6,d0
  34.     bmi.s    .exit
  35.     addq.w    #4,a0    ; Must be program memory
  36.     move.w    (a0)+,d3    ; address
  37.     cmp.w    #$7ea9,d3
  38.     beq.s    .ok
  39.  
  40. .no:    sub.l    d2,d3
  41.     subq.w    #1,d3
  42.     bmi.s    .ok
  43.  
  44.     subq.w    #1,d1
  45.     bmi.s    .exit
  46. .zero:    clr.w    (a1)+
  47.     clr.b    (a1)+
  48.     addq.l    #1,d2
  49.     dbra    d3,.zero
  50.  
  51. .ok:    subq.w    #3,d0
  52.     bmi.s    .exit
  53.     moveq    #0,d3
  54.     move.w    (a0)+,d3
  55.     lsl.l    #8,d3
  56.     move.b    (a0)+,d3
  57. .copy:    subq.w    #1,d3
  58.     bmi.s    .next
  59.     subq.w    #3,d0
  60.     bmi.s    .exit
  61.     subq.w    #1,d1
  62.     bmi.s    .exit
  63.     move.w    (a0)+,(a1)+
  64.     move.b    (a0)+,(a1)+
  65.     addq.l    #1,d2
  66.     bra.s    .copy
  67. .exit:    move.l    d2,d0
  68.     rts
  69.  
  70. ; Power up 'n power down.
  71. DSP_reset:
  72.     move.w    sr,d2
  73.     move.w    #$2700,sr
  74.     move.b    #$e,$ffff8800.w
  75.     move.b    $ffff8800.w,d0
  76.     and.b    #$ef,d0
  77.     move.b    d0,$ffff8802.w
  78.     or.b    #$10,d0
  79.     move.b    d0,$ffff8802.w
  80.     move.w    d2,sr
  81.  
  82. ; Wait 0.04 sec for DSP power down.
  83.     move.l    $4ba.w,d0
  84.     addq.l    #2,d0
  85. .wait:
  86.     cmp.l    $4ba.w,d0
  87.     bgt.s    .wait
  88.  
  89. ; Power up again.
  90.     move.w    #$2700,sr
  91.     move.b    #$e,$ffff8800.w
  92.     move.b    $ffff8800.w,d0
  93.     and.b    #$ef,d0
  94.     move.b    d0,$ffff8802.w
  95.     move.w    d2,sr
  96.     rts
  97.  
  98. ; Load system startup code
  99. DSP_go:
  100.     lea    DSP_mem,a0
  101.     move.w    #512-1,d0
  102. .next:    btst.b    #1,$ffffa202.w
  103.     beq.s .next
  104.     move.b    (a0)+,$ffffa205.w
  105.     move.b    (a0)+,$ffffa206.w
  106.     move.b    (a0)+,$ffffa207.w
  107.     dbra    d0,.next
  108.  
  109.     ; Load DSP binary
  110.     move.l    dsp_codebin,a0
  111.     move.w    dsp_codelen,d0
  112.     subq.w    #1,d0
  113.     bmi.s    .no_way
  114. .copy:    btst.b    #1,$ffffa202.w
  115.     beq.s    .copy
  116.     move.b    (a0)+,$ffffa205.w
  117.     move.b    (a0)+,$ffffa206.w
  118.     move.b    (a0)+,$ffffa207.w
  119.     dbra    d0,.copy
  120.  
  121.     ; Launch DSP binary
  122. .go:    btst.b    #1,$ffffa202.w
  123.     beq.s    .go
  124.     move.l    #3,$ffffa204.w
  125. .no_way:    rts
  126.  
  127.     data
  128. DSP_mem:    ds.b    512*3
  129.  
  130.     end
  131.  
  132.     
  133.  
  134.