home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / NOCREW / MP2_0997.ZIP / mp2_0997 / src / dsp.s < prev    next >
Text File  |  1998-11-07  |  10KB  |  336 lines

  1. ;; dsp.s
  2. ;;
  3. ;; COPYRIGHT (c) 1998 by NoCrew Laboratories.
  4. ;;
  5. ;; Implements:
  6. ;;
  7. ;;     extern Int dsp_load_program(Byte *program, Int length);
  8. ;;
  9. ;; Where length is the number of DSP words (e.i. 3 byte tuples).
  10. ;; A return value of 1 means that the loading was sucessful. 0
  11. ;; means something went wrong.
  12. ;;
  13. ;; This module will always load the DSP program. It is compatible
  14. ;; with the Dsp_ExecProg loader. However, as it reloads the DSP
  15. ;; bootstrap code every time -- which the TOS version does not --
  16. ;; this one does not freeze up.
  17.  
  18.     export    dsp_load_program
  19.     export    dsp_send_timeout
  20.     export    dsp_receive_timeout
  21.     
  22.     text
  23. dsp_load_program:
  24.     move.l    a0,dsp_program
  25.     move.l    d0,dsp_length
  26.  
  27.     ;; Test for supervisor mode.
  28.     move    sr,d0
  29.     btst    #13,d0
  30.     bne.s    dsp_load
  31.  
  32.     move.l    #dsp_load,-(sp)
  33.     move.w    #$26,-(sp)
  34.     trap    #14
  35.     addq.w    #6,sp
  36.  
  37.     move.l    dsp_status,d0
  38.     rts
  39.  
  40. dsp_load:    bsr    dsp_reset
  41.     bsr    dsp_go
  42.     move.l    d0,dsp_status
  43.     rts
  44.  
  45. dsp_reset:    ; Power down.
  46.     move.b    #$e,$ffff8800.w
  47.     move.b    $ffff8800.w,d0
  48.     and.b    #$ef,d0
  49.     move.b    d0,$ffff8802.w
  50.     or.b    #$10,d0
  51.     move.b    d0,$ffff8802.w
  52.  
  53.     ; Wait for DSP to power down.
  54.     move.w    #10000-1,d0
  55. wait:    nop
  56.     dbra    d0,wait
  57.  
  58.     ; Power up.
  59.     move.b    #$e,$ffff8800.w
  60.     move.b    $ffff8800.w,d0
  61.     and.b    #$ef,d0
  62.     move.b    d0,$ffff8802.w
  63.     rts
  64.  
  65. dsp_go:
  66.     ; Load system startup code.
  67.     lea    dsp_bootstrap_code,a0
  68.     move.w    #512-1,d0
  69. next:    btst.b    #1,$ffffa202.w
  70.     beq.s    next
  71.     move.b    (a0)+,$ffffa205.w
  72.     move.b    (a0)+,$ffffa206.w
  73.     move.b    (a0)+,$ffffa207.w
  74.     dbra    d0,next
  75.  
  76.     ; Load DSP binary
  77.     move.l    dsp_program,a0
  78.     move.l    dsp_length,d0
  79.     subq.w    #1,d0
  80.     bmi.s    no_way
  81. copy:    btst.b    #1,$ffffa202.w
  82.     beq.s    copy
  83.     move.b    (a0)+,$ffffa205.w
  84.     move.b    (a0)+,$ffffa206.w
  85.     move.b    (a0)+,$ffffa207.w
  86.     dbra    d0,copy
  87.  
  88.     ; Launch DSP binary
  89. go:    btst.b    #1,$ffffa202.w
  90.     beq.s    go
  91.     move.l    #3,$ffffa204.w
  92.     
  93.     moveq    #1,d0
  94.     rts
  95. no_way:    moveq    #0,d0
  96.     rts
  97.  
  98. ;; Send a value with timeout
  99. dsp_send_timeout:
  100.     move.l    d0,dsp_value
  101.     ;; Test for supervisor mode.
  102.     move    sr,d0
  103.     btst    #13,d0
  104.     bne.s    send_timeout
  105.  
  106.     move.l    #send_timeout,-(sp)
  107.     move.w    #$26,-(sp)
  108.     trap    #14
  109.     addq.w    #6,sp
  110.  
  111.     move.l    dsp_status,d0
  112.     rts
  113.  
  114. send_timeout:
  115.     move.l    #333333-1,d0
  116. wait_send:
  117.     btst.b    #1,$ffffa202.w
  118.     bne.s    ok_to_send
  119.     subq.l    #1,d0
  120.     bne.s    wait_send
  121.     
  122.     move.l    #$80000000,d0
  123.     move.l    d0,dsp_status
  124.     rts
  125.     
  126. ok_to_send:
  127.     move.l    dsp_value,$ffffa204.w
  128.  
  129.     move.l    #$1,d0
  130.     move.l    d0,dsp_status
  131.     rts
  132.     
  133.     
  134. ;; Send a value with timeout
  135. dsp_receive_timeout:
  136.     ;; Test for supervisor mode.
  137.     move    sr,d0
  138.     btst    #13,d0
  139.     bne.s    receive_timeout
  140.  
  141.     move.l    #receive_timeout,-(sp)
  142.     move.w    #$26,-(sp)
  143.     trap    #14
  144.     addq.w    #6,sp
  145.  
  146.     move.l    dsp_status,d0
  147.     rts
  148.  
  149. receive_timeout:
  150.     move.l    #333333-1,d0
  151. wait_receive:
  152.     btst.b    #0,$ffffa202.w
  153.     bne.s    ok_to_receive
  154.     subq.l    #1,d0
  155.     bne.s    wait_receive
  156.     
  157.     move.l    #$80000000,d0
  158.     move.l    d0,dsp_status
  159.     rts
  160.     
  161. ok_to_receive:
  162.     move.l    $ffffa204.w,d0
  163.     btst.l    #23,d0
  164.     beq.s    no_ext
  165.     or.l    #$ff000000,d0
  166. no_ext:
  167.     move.l    d0,dsp_status
  168.     rts
  169.  
  170.  
  171.     
  172.     data
  173. dsp_bootstrap_code:
  174.     dc.b    $0c,$00,$40,$00,$00,$00,$00,$00,$00,$00
  175.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  176.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  177.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  178.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  179.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  180.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  181.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  182.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  183.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  184.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  185.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  186.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  187.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  188.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  189.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  190.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  191.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  192.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  193.     dc.b    $00,$00,$60,$f4,$00,$00,$00,$4f,$61,$f4
  194.     dc.b    $00,$00,$7e,$a9,$06,$2e,$80,$00,$00,$47
  195.     dc.b    $07,$d8,$84,$07,$59,$84,$08,$f4,$a8,$00
  196.     dc.b    $00,$04,$08,$f4,$bf,$00,$0c,$00,$00,$fe
  197.     dc.b    $b8,$0a,$f0,$80,$00,$7e,$a9,$08,$f4,$a0
  198.     dc.b    $00,$00,$01,$08,$f4,$be,$00,$00,$00,$0a
  199.     dc.b    $a9,$80,$00,$7e,$ad,$08,$4e,$2b,$44,$f4
  200.     dc.b    $00,$00,$00,$03,$44,$f4,$45,$00,$00,$01
  201.     dc.b    $0e,$a0,$00,$0a,$a9,$80,$00,$7e,$b5,$08
  202.     dc.b    $50,$2b,$0a,$a9,$80,$00,$7e,$b8,$08,$46
  203.     dc.b    $2b,$44,$f4,$45,$00,$00,$02,$0a,$f0,$aa
  204.     dc.b    $00,$7e,$c9,$20,$00,$45,$0a,$f0,$aa,$00
  205.     dc.b    $7e,$d0,$06,$c6,$00,$00,$7e,$c6,$0a,$a9
  206.     dc.b    $80,$00,$7e,$c4,$08,$58,$6b,$0a,$f0,$80
  207.     dc.b    $00,$7e,$ad,$06,$c6,$00,$00,$7e,$cd,$0a
  208.     dc.b    $a9,$80,$00,$7e,$cb,$08,$58,$ab,$0a,$f0
  209.     dc.b    $80,$00,$7e,$ad,$06,$c6,$00,$00,$7e,$d4
  210.     dc.b    $0a,$a9,$80,$00,$7e,$d2,$08,$58,$eb,$0a
  211.     dc.b    $f0,$80,$00,$7e,$ad,$00,$00,$00,$00,$00
  212.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  213.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  214.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  215.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  216.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  217.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  218.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  219.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  220.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  221.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  222.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  223.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  224.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  225.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  226.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  227.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  228.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  229.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  230.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  231.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  232.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  233.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  234.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  235.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  236.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  237.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  238.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  239.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  240.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  241.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  242.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  243.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  244.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  245.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  246.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  247.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  248.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  249.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  250.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  251.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  252.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  253.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  254.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  255.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  256.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  257.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  258.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  259.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  260.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  261.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  262.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  263.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  264.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  265.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  266.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  267.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  268.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  269.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  270.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  271.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  272.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  273.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  274.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  275.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  276.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  277.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  278.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  279.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  280.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  281.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  282.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  283.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  284.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  285.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  286.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  287.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  288.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  289.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  290.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  291.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  292.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  293.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  294.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  295.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  296.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  297.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  298.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  299.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  300.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  301.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  302.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  303.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  304.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  305.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  306.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  307.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  308.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  309.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  310.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  311.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  312.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  313.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  314.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  315.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  316.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  317.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  318.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  319.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  320.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  321.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  322.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  323.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  324.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  325.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  326.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  327.     dc.b    $00,$00,$00,$00,$00,$00
  328.  
  329.     bss
  330. dsp_program:    ds.l    1
  331. dsp_length:    ds.l    1
  332. dsp_status:    ds.l    1
  333. dsp_value:    ds.l    1
  334.  
  335.     end
  336.