aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/dsp56k/bootstrap.asm
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/dsp56k/bootstrap.asm')
-rw-r--r--firmware/dsp56k/bootstrap.asm98
1 files changed, 98 insertions, 0 deletions
diff --git a/firmware/dsp56k/bootstrap.asm b/firmware/dsp56k/bootstrap.asm
new file mode 100644
index 000000000000..10d891929cd3
--- /dev/null
+++ b/firmware/dsp56k/bootstrap.asm
@@ -0,0 +1,98 @@
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 move P:(r0)+,x0
56 move 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
85 jclr #0,X:<<M_HSR,*
86 movep X:<<M_HRX,P:(r0)+
87_load jmp next
88load_X do y0,_load
89 jclr #0,X:<<M_HSR,*
90 movep X:<<M_HRX,X:(r0)+
91_load jmp next
92load_Y do y0,_load
93 jclr #0,X:<<M_HSR,*
94 movep X:<<M_HRX,Y:(r0)+
95_load jmp next
96
97upload_end
98 end