]> git.sesse.net Git - pistorm/blobdiff - platforms/amiga/piscsi/device_driver_amiga/bootrom.s
Remove debug IRQ disable/enable from PiSCSI boot ROM
[pistorm] / platforms / amiga / piscsi / device_driver_amiga / bootrom.s
index 70f0af7efc2eaad14732bcea077141a7ab7fc0c1..8e883eeefa7b782cdfa1a8b0da4441725af5a2da 100644 (file)
@@ -66,6 +66,7 @@ CloseLibrary    EQU -414
 OpenResource    EQU -$1F2
 AddResource     EQU -$1E6
 Enqueue         EQU -$10E
+AddMemList      EQU -$26A
 
 ; Expansion stuff
 MakeDosNode     EQU -144
@@ -87,6 +88,8 @@ PiSCSINextFS    EQU $80000064
 PiSCSICopyFS    EQU $80000068
 PiSCSIFSSize    EQU $8000006C
 PiSCSISetFSH    EQU $80000070
+PiSCSILoadFS    EQU $80000084
+PiSCSIGetFSInfo EQU $80000088
 PiSCSIDbg1      EQU $80001010
 PiSCSIDbg2      EQU $80001014
 PiSCSIDbg3      EQU $80001018
@@ -257,12 +260,28 @@ Init:       ; After Diag patching, our romtag will point to this
             ;
             align 2
             move.l a6,-(a7)             ; Push A6 to stack
-            move.w #$00B8,$dff09a       ; Disable interrupts during init
+            ;move.w #$00B8,$dff09a       ; Disable interrupts during init
             move.l  #3,PiSCSIDebugMe
             move.l a3,PiSCSIAddr4
 
-            move.l  #11,PiSCSIDebugMe
             movea.l 4,a6
+
+            move.l $10000040,d1
+            move.l #$feffeeff,$10000040
+            move.l $10000040,d0
+            cmp.l #$feffeeff,d0
+            bne.s NoZ3
+            move.l d1,$10000040
+
+            move.l #$8000000,d0         ; Add some Z3 fast RAM if it hasn't been moved (Kick 1.3)
+            move.l #$405,d1
+            move.l #10,d2
+            move.l #$10000000,a0
+            move.l #0,a1
+            jsr AddMemList(a6)
+
+NoZ3:
+            move.l  #11,PiSCSIDebugMe
             lea LibName(pc),a1
             jsr FindResident(a6)
             move.l  #10,PiSCSIDebugMe
@@ -281,12 +300,12 @@ Init:       ; After Diag patching, our romtag will point to this
             move.l  d0,a1
             move.l  #0,d1
             movea.l  4,a6
-            add.l #$02c,a1
+            add.l #$028,a1
             jsr InitResident(a6)        ; Initialize the PiSCSI driver
 
 SkipDriverLoad:
             move.l  #9,PiSCSIDebugMe
-            bra.w LoadFileSystems
+            jsr LoadFileSystems(pc)
 
 FSLoadExit:
             lea ExpansionName(pc),a1
@@ -301,6 +320,16 @@ PartitionLoop:
             beq.w EndPartitions         ; If the next partition returns 0, there's no additional partitions
             move.l d0,a0
             jsr MakeDosNode(a6)
+            cmp.l #0,PiSCSIGetFSInfo
+            beq.s SkipLoadFS
+
+            move.l d0,PiSCSILoadFS        ; Attempt to load the file system driver from data/fs
+            cmp.l #$FFFFFFFF,PiSCSIAddr4
+            beq SkipLoadFS
+
+            jsr LoadFileSystems(pc)
+
+SkipLoadFS:
             move.l d0,PiSCSISetFSH
             move.l d0,PiSCSIAddr2       ; Put DeviceNode address in PiSCSIAddr2, because I'm useless
             move.l d0,a0
@@ -323,14 +352,14 @@ PartitionLoop:
 
 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 #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
@@ -372,7 +401,7 @@ EndPartitions:
             move.l (a7)+,a6             ; Pop A6 from stack
             move.l #803,PiSCSIDebugMe
 
-            move.w #$80B8,$dff09a       ; Re-enable interrupts
+            ;move.w #$80B8,$dff09a       ; Re-enable interrupts
             move.l #804,PiSCSIDebugMe
             moveq.l #1,d0               ; indicate "success"
             move.l #805,PiSCSIDebugMe
@@ -389,6 +418,7 @@ FSResource:     dc.l    $0
 LoadFileSystems:
             movem.l d0-d7/a0-a6,-(sp)       ; Push registers to stack
             move.l #30,PiSCSIDebugMe
+            movea.l 4,a6
 ReloadResource:
             lea FileSysName(pc),a1
             jsr OpenResource(a6)
@@ -415,7 +445,7 @@ ReloadResource:
             move.l a2,a1
             jsr -$f6(a6)                    ; AddTail
             move.l a2,a0
-            bra.s ReloadResource
+            move.l a0,d0
 
 FSRExists:  
             move.l d0,PiSCSIAddr2             ; PiSCSIAddr2 is now FileSystem.resource
@@ -424,7 +454,6 @@ FSRExists:
             move.l PiSCSIGetFS,d0
             cmp.l #0,d0
             beq.w FSDone
-            move.l d0,d7
 
 FSNext:     
             move.l #45,PiSCSIDebugMe
@@ -451,18 +480,19 @@ NoEntries:
             move.l #39,PiSCSIDebugMe
             move.l PiSCSIFSSize,d0
             move.l #40,PiSCSIDebugMe
-            move.l #0,d1
+            move.l #$10001,d1
             move.l #41,PiSCSIDebugMe
             jsr AllocMem(a6)
             move.l d0,PiSCSIAddr3
+            move.l d0,a0
             move.l #1,PiSCSICopyFS
+            move.b #NT_RESOURCE,LN_TYPE(a0)
 
 AlreadyLoaded:
             move.l #480,PiSCSIDebugMe
             move.l PiSCSIAddr2,a0
             move.l #1,PiSCSINextFS
             move.l PiSCSIGetFS,d0
-            move.l d0,d7
             cmp.l #0,d0
             bne.w FSNext
 
@@ -470,7 +500,7 @@ FSDone:     move.l #37,PiSCSIDebugMe
             move.l #32,PiSCSIDebugMe    ; Couldn't open FileSystem.resource, Kick 1.2/1.3?
 
             movem.l (sp)+,d0-d7/a0-a6   ; Pop registers from stack
-            bra.w FSLoadExit
+            rts
 
 FSRes
     dc.l    0