1 /* ConfigDev passed in a3 */
4 struct Node cd_Node; // 0 2ptr,2byte,1ptr = 14byte
7 struct ExpansionRom cd_Rom; // 16 16bytes
8 APTR cd_BoardAddr; // 32
13 .set CloseLibrary,-414
26 movea.l SysBase,a6 /* allocate RAM for loading ourselves to */
28 moveq #0,d1 /* MEMF_ANY */
33 move.l d0, a4 /* load addr */
35 move.l (a7)+,a3 /* restore configdev address from stack */
36 jmp 0x24(a4) /* jmp to handover at new memory location (0x20+0x04) */
44 /* we will arrive here in our copy in amiga RAM */
45 /* a0 contains board addr, a3 contains configdev addr */
49 move.l a3,(a1) /* store configdev pointer */
51 move.l a4, a0 /* board addr not needed anymore, keep loadaddr in a0 */
53 /* add resident ---------------------- */
55 /* mntsd.device is at loadaddr + 0x400 (skip 2 blocks) */
58 /* relocate the binary (hunk) */
60 move.l (a7)+, a0 /* address of loaded mntsd.device */
62 move.l a4, a1 /* restore board addr */
64 add.l #0x400+0x180, a1 /* start of mntsd.device + $180 = romtag FIXME */
65 move.l #0, d1 /* no seglist */
67 jsr -102(a6) /* InitResident */
68 /* object = InitResident(resident, segList) */
71 /* make dos node --------------------- */
87 move.l 8(a0), d4 /* number of hunks */
91 a0: executable base addr
100 /* hunk 0 address in memory */
103 move.l d6, a2 /* addr of first hunk */
104 move.l d6, (a1) /* store pointer to this hunk in segptrs[1] */
108 move.l 0x14(a0), d0 /* ptr to first hunk size */
110 lsl.l #2, d0 /* firsthunk + first size */
111 add.l d0, a3 /* end of first hunk, start of reloc table */
115 add.l #4, a3 /* skip hunk_end */
116 add.l #4, a3 /* skip hunk_data */
117 move.l (a3)+, d0 /* size of data hunk */
120 move.l a3, 4(a1) /* store pointer to this hunk in segptrs[1] */
121 move.l a3, d6 /* save current hunk ptr for patching CHECKME */
122 add.l d0, a3 /* arrive at reloc tables of data hunk */
131 move.l a2, d6 /* addr of first hunk */
139 move.l (a3)+, d2 /* skip 0000 03ec marker */
141 move.l (a3)+, d2 /* number of relocs to process */
144 beq relocdone /* done if zero */
146 move.l (a3)+, d1 /* segment number to point to */
149 move.l (a1,d1), d1 /* offset to add to target slots */
155 tst.w d5 /* pass = 0? */
158 /* pass = 1, so patch */
159 add.l d6, a4 /* add current hunk address */
160 add.l d1, (a4) /* the actual patching */
172 lea expansionname(pc),a1
175 jsr OpenLibrary(a6) /* open expansion.library */
180 /*movem.l a0-a6/d0-d6,-(a7)
182 lea.l fmtdebug(pc),a1
184 movem.l (a7)+,a0-a6/d0-d6*/
188 move.l a1,(a0) /* store in parmpkt */
189 lea devicename(pc),a1
190 move.l a1,4(a0) /* store in parmpkt */
192 jsr -144(a6) /* MakeDosNode */
193 move.l d0, a0 /* fresh device node */
195 /* add boot node --------------------- */
199 move.l configdev(pc),a1
200 /*move.l #0, a1*/ /* later put ConfigDev here (a3) */
201 jsr -36(a6) /* AddBootNode */
203 move.l a6,a1 /* close expansion library */
224 .asciz "pi-scsi.device"
227 .asciz "expansion.library"
230 .long 0 /* dos disk name */
231 .long 0 /* device file name */
234 .long 16 /* length of node? */
235 .long 128 /* longs in a block */
237 .long 4 /* surfaces */
238 .long 1 /* sectors per block */
239 .long 256 /* blocks per track */
240 .long 2 /* reserved bootblocks 256 = 128KB */
243 .long 2 /* lowcyl FIXME */
244 /*.long 2047*/ /* hicyl */
246 .long 10 /* buffers */
247 .long 0 /* MEMF_ANY */
248 .long 0x0001fe00 /* MAXTRANS */
249 .long 0x7ffffffe /* Mask */
250 .long -1 /* boot prio */
251 .long 0x444f5303 /* dostype: DOS3 */