From bc89f53b140e8d8c4be6434343e52db47350ccfd Mon Sep 17 00:00:00 2001 From: beeanyew Date: Sun, 23 May 2021 06:12:07 +0200 Subject: [PATCH] Working AddDosNode/Enqueue for PiSCSI Still doesn't work on Kickstart 1.3, needs additional handling for the FileSystem.resource stuff --- .../amiga/piscsi/device_driver_amiga/bootrom | Bin 1824 -> 1996 bytes .../piscsi/device_driver_amiga/bootrom.s | 109 +++++++++--------- platforms/amiga/piscsi/piscsi.rom | Bin 16384 -> 16384 bytes 3 files changed, 57 insertions(+), 52 deletions(-) diff --git a/platforms/amiga/piscsi/device_driver_amiga/bootrom b/platforms/amiga/piscsi/device_driver_amiga/bootrom index fe3d33a7be850f347fcb8d7203d478fb2d29b1be..5058e9a19cd70fc5d6b1647ded0ff7ef65a82e00 100644 GIT binary patch delta 869 zcmX|IhI za`0tRh2!%bP$B5sn~%d>gbZq+%3X!f`T=B(!SSJQECdYO$s$ZN?<*^MYf4sOXS|Mb zJD}p#v)&iwDtqMpRxWV?;05{fJ877HLEM!g#uz~4d?+$OFm?d=0oHheJ`u-AVq`Ej zBm(}&8}gMUUU`YyO2aH9t;YSfZBmyZdf~;ydp7d+#9cP_mIDRMJAtik4f`TzmCEUA z&CItOuDRVnMCO2}^VCVTsxDT*p5Y=kN{(A~t5!W{SvFx{Z-}Srpbz8QXv#8O9H5Pn_AC#||XB$j-EVYcLL`9rL^VWsM>Q#GeUKKh#f YSLgHqV!ej;%58covy1?b9m);&6FC*ka{vGU delta 677 zcmX|7O=uHA6n-s<;=zN6$DWIb^yDcBf_NxJjo<8Uy33oH@0;(v`QAG?-#gd7G|^`> z;vx~vB5oj#JF^Ye@4TG9>}(JJ+{vKk><@Zo*1S)XPP_AcX5tUDXLpIrOp^=A) zhmLY5{|5o7@s%h2^=xPi51>Ag#GZ;{QodySL zm#?3p(@!07n-i&wSQvxd4OCRVxX$jVu9#w6y%&$yeh<~-IPiHyo=Ch%SkWCPXB+qj zu#s|Y;OB@gqL*?%pCHjH-FCx-V1N(RBjd^(fAaFpL_0{UgEq1J4kCbsXMmJea`JBvMpf8AWt0sjPz dvA6|0)t2tqy;cQ-yd}M)ZqtDa{h+3Q{Ri{2o3sD` diff --git a/platforms/amiga/piscsi/device_driver_amiga/bootrom.s b/platforms/amiga/piscsi/device_driver_amiga/bootrom.s index 2194a1e..23b0aef 100644 --- a/platforms/amiga/piscsi/device_driver_amiga/bootrom.s +++ b/platforms/amiga/piscsi/device_driver_amiga/bootrom.s @@ -162,7 +162,7 @@ DiagEntry: nop nop nop - move.l #1,PiSCSIDebugMe + move.l #1,PiSCSIDebugMe move.l a3,PiSCSIAddr1 nop nop @@ -209,18 +209,16 @@ endpatches: BootEntry: align 2 - move.l #2,PiSCSIDebugMe - nop - nop - nop - nop - nop - - lea DosName(PC),a1 ; 'dos.library',0 - jsr FindResident(a6) ; find the DOS resident tag - move.l d0,a0 ; in order to bootstrap - move.l RT_INIT(A0),a0 ; set vector to DOS INIT - jsr (a0) ; and initialize DOS + move.l #2,PiSCSIDebugMe + lea DosName(pc),a1 + jsr FindResident(a6) + tst.l d0 + beq.b .End + move.l d0,a0 + move.l RT_INIT(a0),a0 + jmp (a0) +.End + moveq.l #1,d0 ; indicate "success" rts * @@ -261,6 +259,7 @@ Init: ; After Diag patching, our romtag will point to this move.l a6,-(a7) ; Push A6 to stack move.w #$00B8,$dff09a ; Disable interrupts during init move.l #3,PiSCSIDebugMe + move.l a3,PiSCSIAddr4 move.l #11,PiSCSIDebugMe movea.l 4,a6 @@ -303,54 +302,60 @@ PartitionLoop: move.l d0,a0 jsr MakeDosNode(a6) move.l d0,PiSCSISetFSH + move.l d0,PiSCSIAddr2 ; Put DeviceNode address in PiSCSIAddr2, because I'm useless move.l d0,a0 move.l PiSCSIGetPrio,d0 move.l #0,d1 move.l PiSCSIAddr1,a1 * Uncomment these lines to test AddDosNode/Enqueue stuff -* cmp.l #-128,d0 -* bne.s EnqueueNode -* -** BOOL AddDosNode( LONG bootPri, ULONG flags, struct DeviceNode *deviceNode ); -** amicall(ExpansionBase, 0x96, AddDosNode(d0,d1,a0)) -* move.l #38,PiSCSIDebugMe -* jsr AddDosNode(a6) -* bra.w SkipEnqueue -** VOID Enqueue( struct List *list, struct Node *node ); -** amicall(SysBase, 0x10e, Enqueue(a0,a1)) -* -*EnqueueNode: -* exg a6,a4 -* move.l #35,PiSCSIDebugMe -* move.l #BootNode_SIZEOF,PiSCSIDebugMe -* move.l #NT_BOOTNODE,PiSCSIDebugMe -* move.l #LN_TYPE,PiSCSIDebugMe -* move.l #LN_PRI,PiSCSIDebugMe -* move.l #LN_NAME,PiSCSIDebugMe -* move.l #eb_MountList,PiSCSIDebugMe -* move.l #35,PiSCSIDebugMe -* -* move.l #BootNode_SIZEOF,d0 -* move.l #$10001,d1 -* jsr AllocMem(a6) ; Allocate memory for the BootNode -* -* move.l d0,a1 -* move.b #NT_BOOTNODE,LN_TYPE(a1) -* move.b PiSCSIGetPrio,LN_PRI(a1) -* move.l a0,bn_DeviceNode(a1) -* move.l PiSCSIAddr1,LN_NAME(a1) -* -* lea eb_MountList(a4),a0 -* jsr Enqueue(a6) -* exg a6,a4 -* -*SkipEnqueue: +* Or comment them out all the way down to and including SkipEnqueue: to use the AddBootNode method instead. + cmp.l #-128,d0 + bne.s EnqueueNode + +* BOOL AddDosNode( LONG bootPri, ULONG flags, struct DeviceNode *deviceNode ); +* amicall(ExpansionBase, 0x96, AddDosNode(d0,d1,a0)) + move.l #38,PiSCSIDebugMe + jsr AddDosNode(a6) + bra.w SkipEnqueue +* VOID Enqueue( struct List *list, struct Node *node ); +* amicall(SysBase, 0x10e, Enqueue(a0,a1)) + +EnqueueNode: + exg a6,a4 + move.l #35,PiSCSIDebugMe + move.l #BootNode_SIZEOF,PiSCSIDebugMe + move.l #NT_BOOTNODE,PiSCSIDebugMe + move.l #LN_TYPE,PiSCSIDebugMe + move.l #LN_PRI,PiSCSIDebugMe + move.l #LN_NAME,PiSCSIDebugMe + move.l #eb_MountList,PiSCSIDebugMe + move.l #35,PiSCSIDebugMe + + move.l #BootNode_SIZEOF,d0 + move.l #$10001,d1 + jsr AllocMem(a6) ; Allocate memory for the BootNode + + move.l d0,PiSCSIAddr3 + move.l #36,PiSCSIDebugMe + + move.l d0,a1 + move.b #NT_BOOTNODE,LN_TYPE(a1) + move.l PiSCSIGetPrio,d0 + move.b d0,LN_PRI(a1) + move.l PiSCSIAddr2,bn_DeviceNode(a1) + move.l PiSCSIAddr1,LN_NAME(a1) + + lea eb_MountList(a4),a0 + jsr Enqueue(a6) + exg a6,a4 + +SkipEnqueue: * BOOL AddBootNode( LONG bootPri, ULONG flags, struct DeviceNode *deviceNode, struct ConfigDev *configDev ); * amicall(ExpansionBase, 0x24, AddBootNode(d0,d1,a0,a1)) * Comment out the line below to test AddDosNode/Enqueue stuff - jsr AddBootNode(a6) +* jsr AddBootNode(a6) move.l #1,PiSCSINextPart ; Switch to the next partition bra.w PartitionLoop @@ -451,7 +456,7 @@ FSDone: move.l #37,PiSCSIDebugMe movem.l (sp)+,d0-d7/a0-a6 ; Pop registers from stack bra.w FSLoadExit -FileSysRes +FSRes dc.l 0 dc.l 0 dc.b NT_RESOURCE diff --git a/platforms/amiga/piscsi/piscsi.rom b/platforms/amiga/piscsi/piscsi.rom index 481af1df80249f92fdad974f3878fbe9aec3cca8..127f666f7a1cfe0c03351371e6b83d931738c0ab 100644 GIT binary patch delta 873 zcmX|_~Jek%&nt?$XFa0wlif26TvrD4i=Px!cGMn z%B`4&S1$x#l}qeV@LM_01wf$k=eKh({8ZePJ&XZ>C`M4^RWR29_&(Nnf<9qjWH9m= zOA-P96YTMsDPDVt+FHw6&e*McUB{v>L-Zn;7av$Z*b#TwAefFVW4;kv?KQA3igu-% zt2eAtx8+%DEktAvc&usxTnRb=Duw7!M)w&b$9zn$=I5c2Z)+F0QCWb8SS{2VGm3$je(rq_aq7oGP7oyR- zR?BX?kL7(iHHe|}mKT}fS4b>%)CCdM_e&YODG!OMNMKqWd0YMvYi`=vrsvkJ;gC;} h=Ks|>J%CtjpuK9Bp315sz+(s7`nj9xwxS(fJ_dSm&lLaw delta 681 zcmX|7L1+^}6#X-^ZG&D~kP5ZRVk!0zYLE70+9XTBWhthIqK7n?wQg*)+uaQ$qI99q zg9k|%4>^bw^yHzJig@rK;?c8+NKc-E;Kf5J+W2O7(_Q||yf^RvdH+Wdiz3#!IMHXb z;sO!PA#Na!yK_y}@4j4^vbKkR{$x!RY4Alx zeEl4qee#H#oJeNH%`w>BKt<_^YwV8fiOY=3_u|RjKSOl}2flzP5Q!HFD|#8Swt;^E zYbn>>YMzSUl_zFZr*#g66ckqXY*=tEYQ-st2GUxiK>Wz((JiY+IMvszfSm8u^)q2o48 z*Yy-l?3v<=joR5&;*5O;FAQhXF1G`#x}~00U6Yn_dEc&vt`COPB#7smzEM_i2W?=3 z0kr8h{d=)(zLIiq6oknmd=DJPQE(fvM${8**{#?#f1`3Nx7Y}MCmorH=dYSeI^dt6 j(Uvx0r`A>-+tW2L$XixR>NXv?*gMoO^)rWj{Pg;Ne*>Qa