Initial revision
[AROS-Contrib.git] / development / compilers / freepascal / rtl / aros / expansion.pas
blobaad9311de8ba9c9a32d6f95e6260dd1f48457496
2 This file is part of the Free Pascal run time library.
4 A file in Amiga system run time library.
5 Copyright (c) 1998 by Nils Sjoholm
6 member of the Amiga RTL development team.
8 See the file COPYING.FPC, included in this distribution,
9 for details about the copyright.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 **********************************************************************}
17 UNIT expansion;
19 INTERFACE
20 USES exec, configvars, amigados;
22 Const
23 EXPANSIONNAME : PChar = 'expansion.library';
25 { flags for the AddDosNode() call }
26 ADNB_STARTPROC = 0;
28 ADNF_STARTPROC = 1;
30 VAR ExpansionBase : pLibrary;
32 FUNCTION AddBootNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode; configDev : pConfigDev) : BOOLEAN;
33 PROCEDURE AddConfigDev(configDev : pConfigDev);
34 FUNCTION AddDosNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode) : BOOLEAN;
35 PROCEDURE AllocBoardMem(slotSpec : ULONG);
36 FUNCTION AllocConfigDev : pConfigDev;
37 FUNCTION AllocExpansionMem(numSlots : ULONG; slotAlign : ULONG) : POINTER;
38 PROCEDURE ConfigBoard(board : POINTER; configDev : pConfigDev);
39 PROCEDURE ConfigChain(baseAddr : POINTER);
40 FUNCTION FindConfigDev(oldConfigDev : pConfigDev; manufacturer : LONGINT; product : LONGINT) : pConfigDev;
41 PROCEDURE FreeBoardMem(startSlot : ULONG; slotSpec : ULONG);
42 PROCEDURE FreeConfigDev(configDev : pConfigDev);
43 PROCEDURE FreeExpansionMem(startSlot : ULONG; numSlots : ULONG);
44 FUNCTION GetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG) : ULONG;
45 FUNCTION MakeDosNode(parmPacket : POINTER) : pDeviceNode;
46 PROCEDURE ObtainConfigBinding;
47 FUNCTION ReadExpansionByte(board : POINTER; offset : ULONG) : BYTE;
48 PROCEDURE ReadExpansionRom(board : POINTER; configDev : pConfigDev);
49 PROCEDURE ReleaseConfigBinding;
50 PROCEDURE RemConfigDev(configDev : pConfigDev);
51 PROCEDURE SetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG);
52 PROCEDURE WriteExpansionByte(board : POINTER; offset : ULONG; byte : ULONG);
54 IMPLEMENTATION
56 FUNCTION AddBootNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode; configDev : pConfigDev) : BOOLEAN;
57 BEGIN
58 ASM
59 MOVE.L A6,-(A7)
60 MOVE.L bootPri,D0
61 MOVE.L flags,D1
62 MOVEA.L deviceNode,A0
63 MOVEA.L configDev,A1
64 MOVEA.L ExpansionBase,A6
65 JSR -036(A6)
66 MOVEA.L (A7)+,A6
67 TST.W D0
68 BEQ.B @end
69 MOVEQ #1,D0
70 @end: MOVE.B D0,@RESULT
71 END;
72 END;
74 PROCEDURE AddConfigDev(configDev : pConfigDev);
75 BEGIN
76 ASM
77 MOVE.L A6,-(A7)
78 MOVEA.L configDev,A0
79 MOVEA.L ExpansionBase,A6
80 JSR -030(A6)
81 MOVEA.L (A7)+,A6
82 END;
83 END;
85 FUNCTION AddDosNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode) : BOOLEAN;
86 BEGIN
87 ASM
88 MOVE.L A6,-(A7)
89 MOVE.L bootPri,D0
90 MOVE.L flags,D1
91 MOVEA.L deviceNode,A0
92 MOVEA.L ExpansionBase,A6
93 JSR -150(A6)
94 MOVEA.L (A7)+,A6
95 TST.W D0
96 BEQ.B @end
97 MOVEQ #1,D0
98 @end: MOVE.B D0,@RESULT
99 END;
100 END;
102 PROCEDURE AllocBoardMem(slotSpec : ULONG);
103 BEGIN
105 MOVE.L A6,-(A7)
106 MOVE.L slotSpec,D0
107 MOVEA.L ExpansionBase,A6
108 JSR -042(A6)
109 MOVEA.L (A7)+,A6
110 END;
111 END;
113 FUNCTION AllocConfigDev : pConfigDev;
114 BEGIN
116 MOVE.L A6,-(A7)
117 MOVEA.L ExpansionBase,A6
118 JSR -048(A6)
119 MOVEA.L (A7)+,A6
120 MOVE.L D0,@RESULT
121 END;
122 END;
124 FUNCTION AllocExpansionMem(numSlots : ULONG; slotAlign : ULONG) : POINTER;
125 BEGIN
127 MOVE.L A6,-(A7)
128 MOVE.L numSlots,D0
129 MOVE.L slotAlign,D1
130 MOVEA.L ExpansionBase,A6
131 JSR -054(A6)
132 MOVEA.L (A7)+,A6
133 MOVE.L D0,@RESULT
134 END;
135 END;
137 PROCEDURE ConfigBoard(board : POINTER; configDev : pConfigDev);
138 BEGIN
140 MOVE.L A6,-(A7)
141 MOVEA.L board,A0
142 MOVEA.L configDev,A1
143 MOVEA.L ExpansionBase,A6
144 JSR -060(A6)
145 MOVEA.L (A7)+,A6
146 END;
147 END;
149 PROCEDURE ConfigChain(baseAddr : POINTER);
150 BEGIN
152 MOVE.L A6,-(A7)
153 MOVEA.L baseAddr,A0
154 MOVEA.L ExpansionBase,A6
155 JSR -066(A6)
156 MOVEA.L (A7)+,A6
157 END;
158 END;
160 FUNCTION FindConfigDev(oldConfigDev : pConfigDev; manufacturer : LONGINT; product : LONGINT) : pConfigDev;
161 BEGIN
163 MOVE.L A6,-(A7)
164 MOVEA.L oldConfigDev,A0
165 MOVE.L manufacturer,D0
166 MOVE.L product,D1
167 MOVEA.L ExpansionBase,A6
168 JSR -072(A6)
169 MOVEA.L (A7)+,A6
170 MOVE.L D0,@RESULT
171 END;
172 END;
174 PROCEDURE FreeBoardMem(startSlot : ULONG; slotSpec : ULONG);
175 BEGIN
177 MOVE.L A6,-(A7)
178 MOVE.L startSlot,D0
179 MOVE.L slotSpec,D1
180 MOVEA.L ExpansionBase,A6
181 JSR -078(A6)
182 MOVEA.L (A7)+,A6
183 END;
184 END;
186 PROCEDURE FreeConfigDev(configDev : pConfigDev);
187 BEGIN
189 MOVE.L A6,-(A7)
190 MOVEA.L configDev,A0
191 MOVEA.L ExpansionBase,A6
192 JSR -084(A6)
193 MOVEA.L (A7)+,A6
194 END;
195 END;
197 PROCEDURE FreeExpansionMem(startSlot : ULONG; numSlots : ULONG);
198 BEGIN
200 MOVE.L A6,-(A7)
201 MOVE.L startSlot,D0
202 MOVE.L numSlots,D1
203 MOVEA.L ExpansionBase,A6
204 JSR -090(A6)
205 MOVEA.L (A7)+,A6
206 END;
207 END;
209 FUNCTION GetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG) : ULONG;
210 BEGIN
212 MOVE.L A6,-(A7)
213 MOVEA.L currentBinding,A0
214 MOVE.L bindingSize,D0
215 MOVEA.L ExpansionBase,A6
216 JSR -138(A6)
217 MOVEA.L (A7)+,A6
218 MOVE.L D0,@RESULT
219 END;
220 END;
222 FUNCTION MakeDosNode(parmPacket : POINTER) : pDeviceNode;
223 BEGIN
225 MOVE.L A6,-(A7)
226 MOVEA.L parmPacket,A0
227 MOVEA.L ExpansionBase,A6
228 JSR -144(A6)
229 MOVEA.L (A7)+,A6
230 MOVE.L D0,@RESULT
231 END;
232 END;
234 PROCEDURE ObtainConfigBinding;
235 BEGIN
237 MOVE.L A6,-(A7)
238 MOVEA.L ExpansionBase,A6
239 JSR -120(A6)
240 MOVEA.L (A7)+,A6
241 END;
242 END;
244 FUNCTION ReadExpansionByte(board : POINTER; offset : ULONG) : BYTE;
245 BEGIN
247 MOVE.L A6,-(A7)
248 MOVEA.L board,A0
249 MOVE.L offset,D0
250 MOVEA.L ExpansionBase,A6
251 JSR -096(A6)
252 MOVEA.L (A7)+,A6
253 MOVE.L D0,@RESULT
254 END;
255 END;
257 PROCEDURE ReadExpansionRom(board : POINTER; configDev : pConfigDev);
258 BEGIN
260 MOVE.L A6,-(A7)
261 MOVEA.L board,A0
262 MOVEA.L configDev,A1
263 MOVEA.L ExpansionBase,A6
264 JSR -102(A6)
265 MOVEA.L (A7)+,A6
266 END;
267 END;
269 PROCEDURE ReleaseConfigBinding;
270 BEGIN
272 MOVE.L A6,-(A7)
273 MOVEA.L ExpansionBase,A6
274 JSR -126(A6)
275 MOVEA.L (A7)+,A6
276 END;
277 END;
279 PROCEDURE RemConfigDev(configDev : pConfigDev);
280 BEGIN
282 MOVE.L A6,-(A7)
283 MOVEA.L configDev,A0
284 MOVEA.L ExpansionBase,A6
285 JSR -108(A6)
286 MOVEA.L (A7)+,A6
287 END;
288 END;
290 PROCEDURE SetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG);
291 BEGIN
293 MOVE.L A6,-(A7)
294 MOVEA.L currentBinding,A0
295 MOVE.L bindingSize,D0
296 MOVEA.L ExpansionBase,A6
297 JSR -132(A6)
298 MOVEA.L (A7)+,A6
299 END;
300 END;
302 PROCEDURE WriteExpansionByte(board : POINTER; offset : ULONG; byte : ULONG);
303 BEGIN
305 MOVE.L A6,-(A7)
306 MOVEA.L board,A0
307 MOVE.L offset,D0
308 MOVE.L byte,D1
309 MOVEA.L ExpansionBase,A6
310 JSR -114(A6)
311 MOVEA.L (A7)+,A6
312 END;
313 END;
315 END. (* UNIT EXPANSION *)