linux/firmware/dsp56k/bootstrap.asm
<<
>>
Prefs
   1; Author: Frederik Noring <noring@nocrew.org>
   2;
   3; This file is subject to the terms and conditions of the GNU General Public
   4; License.  See the file COPYING in the main directory of this archive
   5; for more details.
   6
   7; DSP56k loader
   8
   9; Host Interface
  10M_BCR   EQU     $FFFE           ; Port A Bus Control Register
  11M_PBC   EQU     $FFE0           ; Port B Control Register
  12M_PBDDR EQU     $FFE2           ; Port B Data Direction Register
  13M_PBD   EQU     $FFE4           ; Port B Data Register
  14M_PCC   EQU     $FFE1           ; Port C Control Register
  15M_PCDDR EQU     $FFE3           ; Port C Data Direction Register
  16M_PCD   EQU     $FFE5           ; Port C Data Register
  17
  18M_HCR   EQU     $FFE8           ; Host Control Register
  19M_HSR   EQU     $FFE9           ; Host Status Register
  20M_HRX   EQU     $FFEB           ; Host Receive Data Register
  21M_HTX   EQU     $FFEB           ; Host Transmit Data Register
  22
  23; SSI, Synchronous Serial Interface
  24M_RX    EQU     $FFEF           ; Serial Receive Data Register
  25M_TX    EQU     $FFEF           ; Serial Transmit Data Register
  26M_CRA   EQU     $FFEC           ; SSI Control Register A
  27M_CRB   EQU     $FFED           ; SSI Control Register B
  28M_SR    EQU     $FFEE           ; SSI Status Register
  29M_TSR   EQU     $FFEE           ; SSI Time Slot Register
  30
  31; Exception Processing
  32M_IPR   EQU     $FFFF           ; Interrupt Priority Register
  33
  34        org     P:$0
  35start   jmp     <$40
  36
  37        org     P:$40
  38;       ; Zero 16384 DSP X and Y words
  39;       clr     A #0,r0
  40;       clr     B #0,r4
  41;       do      #64,<_block1
  42;       rep     #256
  43;       move    A,X:(r0)+ B,Y:(r4)+
  44;_block1        ; Zero (32768-512) Program words
  45;       clr     A #512,r0
  46;       do      #126,<_block2
  47;       rep     #256
  48;       move    A,P:(r0)+
  49;_block2
  50
  51        ; Copy DSP program control
  52        move    #real,r0
  53        move    #upload,r1
  54        do      #upload_end-upload,_copy
  55        movem    P:(r0)+,x0
  56        movem    x0,P:(r1)+
  57_copy   movep   #4,X:<<M_HCR
  58        movep   #$c00,X:<<M_IPR
  59        and     #<$fe,mr
  60        jmp     upload
  61
  62real
  63        org     P:$7ea9
  64upload
  65        movep   #1,X:<<M_PBC
  66        movep   #0,X:<<M_BCR
  67
  68next    jclr    #0,X:<<M_HSR,*
  69        movep   X:<<M_HRX,A
  70        move    #>3,x0
  71        cmp     x0,A #>1,x0
  72        jeq     <$0
  73_get_address
  74        jclr    #0,X:<<M_HSR,_get_address
  75        movep   X:<<M_HRX,r0
  76_get_length
  77        jclr    #0,X:<<M_HSR,_get_length
  78        movep   X:<<M_HRX,y0
  79        cmp     x0,A #>2,x0
  80        jeq     load_X
  81        cmp     x0,A
  82        jeq     load_Y
  83
  84load_P  do      y0,_load_P
  85        jclr    #0,X:<<M_HSR,*
  86        movep   X:<<M_HRX,P:(r0)+
  87_load_P jmp     next
  88load_X  do      y0,_load_X
  89        jclr    #0,X:<<M_HSR,*
  90        movep   X:<<M_HRX,X:(r0)+
  91_load_X jmp     next
  92load_Y  do      y0,_load_Y
  93        jclr    #0,X:<<M_HSR,*
  94        movep   X:<<M_HRX,Y:(r0)+
  95_load_Y jmp     next
  96
  97upload_end
  98        end
  99