mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 07:02:06 +00:00 
			
		
		
		
	 7f127d5ed0
			
		
	
	
		7f127d5ed0
		
	
	
	
	
		
			
			Signed-off-by: Jaswinder Singh <jaswinder@infradead.org> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ; Author: Frederik Noring <noring@nocrew.org>
 | |
| ;
 | |
| ; This file is subject to the terms and conditions of the GNU General Public
 | |
| ; License.  See the file COPYING in the main directory of this archive
 | |
| ; for more details.
 | |
| 
 | |
| ; DSP56k loader
 | |
| 
 | |
| ; Host Interface
 | |
| M_BCR   EQU     $FFFE           ; Port A Bus Control Register
 | |
| M_PBC   EQU     $FFE0           ; Port B Control Register
 | |
| M_PBDDR EQU     $FFE2           ; Port B Data Direction Register
 | |
| M_PBD   EQU     $FFE4           ; Port B Data Register
 | |
| M_PCC   EQU     $FFE1           ; Port C Control Register
 | |
| M_PCDDR EQU     $FFE3           ; Port C Data Direction Register
 | |
| M_PCD   EQU     $FFE5           ; Port C Data Register
 | |
| 
 | |
| M_HCR   EQU     $FFE8           ; Host Control Register
 | |
| M_HSR   EQU     $FFE9           ; Host Status Register
 | |
| M_HRX   EQU     $FFEB           ; Host Receive Data Register
 | |
| M_HTX   EQU     $FFEB           ; Host Transmit Data Register
 | |
| 
 | |
| ; SSI, Synchronous Serial Interface
 | |
| M_RX    EQU     $FFEF           ; Serial Receive Data Register
 | |
| M_TX    EQU     $FFEF           ; Serial Transmit Data Register
 | |
| M_CRA   EQU     $FFEC           ; SSI Control Register A
 | |
| M_CRB   EQU     $FFED           ; SSI Control Register B
 | |
| M_SR    EQU     $FFEE           ; SSI Status Register
 | |
| M_TSR   EQU     $FFEE           ; SSI Time Slot Register
 | |
| 
 | |
| ; Exception Processing
 | |
| M_IPR   EQU     $FFFF           ; Interrupt Priority Register
 | |
| 
 | |
|         org     P:$0
 | |
| start   jmp     <$40
 | |
| 
 | |
|         org     P:$40
 | |
| ;       ; Zero 16384 DSP X and Y words
 | |
| ;       clr     A #0,r0
 | |
| ;       clr     B #0,r4
 | |
| ;       do      #64,<_block1
 | |
| ;       rep     #256
 | |
| ;       move    A,X:(r0)+ B,Y:(r4)+
 | |
| ;_block1        ; Zero (32768-512) Program words
 | |
| ;       clr     A #512,r0
 | |
| ;       do      #126,<_block2
 | |
| ;       rep     #256
 | |
| ;       move    A,P:(r0)+
 | |
| ;_block2
 | |
| 
 | |
|         ; Copy DSP program control
 | |
|         move    #real,r0
 | |
|         move    #upload,r1
 | |
|         do      #upload_end-upload,<_copy
 | |
|         move    P:(r0)+,x0
 | |
|         move    x0,P:(r1)+
 | |
| _copy   movep   #>4,X:<<M_HCR
 | |
|         movep   #>$c00,X:<<M_IPR
 | |
|         and     #<$fe,mr
 | |
|         jmp     upload
 | |
| 
 | |
| real
 | |
|         org     P:$7ea9
 | |
| upload
 | |
|         movep   #>1,X:<<M_PBC
 | |
|         movep   #>0,X:<<M_BCR
 | |
| 
 | |
| next    jclr    #0,X:<<M_HSR,*
 | |
|         movep   X:<<M_HRX,A
 | |
|         move    #>3,x0
 | |
|         cmp     x0,A #>1,x0
 | |
|         jeq     <$0
 | |
| _get_address
 | |
|         jclr    #0,X:<<M_HSR,_get_address
 | |
|         movep   X:<<M_HRX,r0
 | |
| _get_length
 | |
|         jclr    #0,X:<<M_HSR,_get_length
 | |
|         movep   X:<<M_HRX,y0
 | |
|         cmp     x0,A #>2,x0
 | |
|         jeq     load_X
 | |
|         cmp     x0,A
 | |
|         jeq     load_Y
 | |
| 
 | |
| load_P  do      y0,_load
 | |
|         jclr    #0,X:<<M_HSR,*
 | |
|         movep   X:<<M_HRX,P:(r0)+
 | |
| _load   jmp     next
 | |
| load_X  do      y0,_load
 | |
|         jclr    #0,X:<<M_HSR,*
 | |
|         movep   X:<<M_HRX,X:(r0)+
 | |
| _load   jmp     next
 | |
| load_Y  do      y0,_load
 | |
|         jclr    #0,X:<<M_HSR,*
 | |
|         movep   X:<<M_HRX,Y:(r0)+
 | |
| _load   jmp     next
 | |
| 
 | |
| upload_end
 | |
|         end
 |