;;
;; PrimaryINIT - Thunder II 1360 ROM v3.0.0
;;
;; Inputs:
;; a0 = seBlock
;;
;; Key Data:
;; -56(a6): spBlock
;; -64(a6): sPRAMRec
;; -68(a6): 4 bytes
;;
;; Map:
;; 00000000,00000148,code
;; 00000148,00000158,data
;; 00000158,000003d6,code
;; 000003d6,0000043a,data
;; 0000043a,00000558,code
;; 00000558,00000596,data
;; 00000596,000006b6,code
;;
00000000 : 48e7 fffe MOVEM.L D0-D7,A0-A6,-(A7)
00000004 : 4e56 ffbc LINK A6,#-68
00000008 : 2648 MOVEA.L A0,A3 ; a3 = seBlock
0000000a : 317c 0001 0002 MOVE.W #$0001,+2(A0)
00000010 : 7800 MOVEQ #$00,D4
00000012 : 1810 MOVE.B (A0),D4
00000014 : e89c ROL.L #4,D4
00000016 : 2444 MOVEA.L D4,A2 ; a2 = slot base address
00000018 : 6100 00ae BSR $000000c8 ; branch to Load_PRAM_and_Check_Slot_Manager
0000001c : 3038 0b22 MOVE.W $00000b22,D0
00000020 : 0240 0200 ANDI.W #$0200,D0
00000024 : 6706 BEQ $0000002c
00000026 : 002e 0060 ffc7 ORI.B #$60,-57(A6)
0000002c : 7001 MOVEQ #$01,D0
0000002e : a05d _SwapMMUMode
00000030 : 2d40 ffbc MOVE.L D0,-68(A6)
00000034 : d5fc 0c00 0000 ADDA.L #$0c000000,A2 ; a2 = slot base address + $0c000000
0000003a : 257c 0000 8009 005c MOVE.L #$00008009,+92(A2)
00000042 : 95fc 0c00 0000 SUBA.L #$0c000000,A2
00000048 : 6100 00ea BSR $00000134 ; branch to Delay_13
0000004c : d5fc 0010 0000 ADDA.L #$00100000,A2 ; a2 = slot base address + $00100000
00000052 : 257c 0000 8010 005c MOVE.L #$00008010,+92(A2)
0000005a : 6100 00e8 BSR $00000144 ; branch to Delay_00
0000005e : 257c 0000 e0c0 0068 MOVE.L #$0000e0c0,+104(A2)
00000066 : 95fc 0010 0000 SUBA.L #$00100000,A2
0000006c : 002e 0004 ffc7 ORI.B #$04,-57(A6)
00000072 : 6100 00e4 BSR $00000158 ; branch to Check_SPRAM
00000076 : 6100 0496 BSR $0000050e ; branch to Function_9
0000007a : 284a MOVEA.L A2,A4
0000007c : d9fc 0020 0000 ADDA.L #$00200000,A4 ; a4 = slot base address + $00200000
00000082 : 6100 03b6 BSR $0000043a ; branch to Empty_Function_1
00000086 : 6100 02cc BSR $00000354 ; branch to Setup_Video_Default
0000008a : 6100 0086 BSR $00000112 ; branch to Save_PRAM
0000008e : 6100 0234 BSR $000002c4 ; branch to Function_3
00000092 : 6100 01fc BSR $00000290 ; branch to Function_2
00000096 : 6100 009c BSR $00000134 ; branch to Delay_13
0000009a : 6100 0172 BSR $0000020e ; branch to Function_1
0000009e : d5fc 0c00 0000 ADDA.L #$0c000000,A2 ; a2 = slot base address + $0c000000
000000a4 : 6100 03fe BSR $000004a4 ; branch to Empty_Function_2
000000a8 : 00aa 0000 0800 0060 ORI.L #$00000800,+96(A2)
000000b0 : 95fc 0c00 0000 SUBA.L #$0c000000,A2
000000b6 : 6100 0078 BSR $00000130 ; branch to Delay_64
000000ba : 202e ffbc MOVE.L -68(A6),D0
000000be : a05d _SwapMMUMode
000000c0 : 4e5e UNLK A6
000000c2 : 4cdf 7fff MOVEM.L (A7)+,D0-D7,A0-A6
000000c6 : 4e75 RTS
;;
;; Load PRAM and check if board ID is $0523.
;; Check Slot Manager version.
;; Called from: PrimaryINIT
;;
Load_PRAM_and_Check_Slot_Manager:
000000c8 : 41ee ffc8 LEA -56(A6),A0 ; a0 = address of spBlock
000000cc : 1153 0031 MOVE.B (A3),+49(A0)
000000d0 : 43ee ffc0 LEA -64(A6),A1 ; a1 = address of sPRAMRec
000000d4 : 2089 MOVE.L A1,(A0)
000000d6 : 7011 MOVEQ #$11,D0
000000d8 : a06e _SlotManager ; SReadPRAMRec
000000da : 4a40 TST D0
000000dc : 660c BNE $000000ea
000000de : 302e ffc0 MOVE.W -64(A6),D0
000000e2 : 0c6e 0523 ffc0 CMPI.W #$0523,-64(A6)
000000e8 : 6704 BEQ $000000ee
000000ea : 422e ffc3 CLR.B -61(A6)
000000ee : 022e 0003 ffc7 ANDI.B #$03,-57(A6)
000000f4 : 4228 0033 CLR.B +51(A0)
000000f8 : 7008 MOVEQ #$08,D0
000000fa : a06e _SlotManager ; SVersion
000000fc : 0c90 0000 0002 CMPI.L #$00000002,(A0)
00000102 : 6606 BNE $0000010a
00000104 : 002e 0020 ffc7 ORI.B #$20,-57(A6)
0000010a : 002e 0010 ffc7 ORI.B #$10,-57(A6)
00000110 : 4e75 RTS
;;
;; Save SPRAM record.
;; Called from: PrimaryINIT
;;
Save_PRAM:
00000112 : 48e7 c0c0 MOVEM.L D0,D1,A0,A1,-(A7)
00000116 : 41ee ffc8 LEA -56(A6),A0 ; a0 = address of spBlock
0000011a : 1153 0031 MOVE.B (A3),+49(A0)
0000011e : 43ee ffc0 LEA -64(A6),A1 ; a1 = address of sPRAMRec
00000122 : 2149 0004 MOVE.L A1,+4(A0)
00000126 : 7012 MOVEQ #$12,D0
00000128 : a06e _SlotManager ; SPutPRAMRec
0000012a : 4cdf 0303 MOVEM.L (A7)+,D0,D1,A0,A1
0000012e : 4e75 RTS
;;
;; Looks like a delay function.
;; Called from: various.
;;
Delay_64:
00000130 : 7264 MOVEQ #$64,D1
00000132 : 6002 BRA $00000136
Delay_13:
00000134 : 7213 MOVEQ #$13,D1
00000136 : 3038 0d00 MOVE.W $00000d00,D0
0000013a : 51c8 fffe DBF D0,$0000013a
0000013e : 51c9 fff6 DBF D1,$00000136
00000142 : 4e75 RTS
Delay_00:
00000144 : 7200 MOVEQ #$00,D1
00000146 : 60ee BRA $00000136
;;
;; Data Table 1
;;
00000148 : 0f 07 05 11 00 07 06 00 ........
;;
;; Data Table 2
;;
00000150 : 80 80 80 80 00 80 80 00 ........
;;
;; Validate SPRAM Record.
;; Called from: PrimaryINIT
;;
Check_SPRAM:
00000158 : 0c6e 0523 ffc0 CMPI.W #$0523,-64(A6)
0000015e : 660e BNE $0000016e
00000160 : 4a2e ffc5 TST -59(A6)
00000164 : 6708 BEQ $0000016e
00000166 : 4a2e ffc3 TST -61(A6)
0000016a : 6600 006c BNE $000001d8
0000016e : 022e 007f ffc6 ANDI.B #$7F,-58(A6)
00000174 : 3d7c 0523 ffc0 MOVE.W #$0523,-64(A6)
0000017a : d5fc 0d0e 0000 ADDA.L #$0d0e0000,A2 ; a2 = slot base address + $0d0e0000
00000180 : 4292 CLR.L (A2)
00000182 : 2012 MOVE.L (A2),D0
00000184 : 95fc 0d0e 0000 SUBA.L #$0d0e0000,A2
0000018a : 0240 0007 ANDI.W #$0007,D0
0000018e : 123b 00b8 MOVE.B -72(PC,D0.W),D1 ; Accessing data table 1
00000192 : 1d41 ffc3 MOVE.B D1,-61(A6)
00000196 : 0601 0080 ADDI.B #$80,D1
0000019a : 1d41 ffc5 MOVE.B D1,-59(A6)
0000019e : 123b 00b0 MOVE.B -80(PC,D0.W),D1 ; Accessing data table 2
000001a2 : 832e ffc6 OR.B D1,-58(A6)
000001a6 : 122e ffc6 MOVE.B -58(A6),D1
000001aa : 0201 0080 ANDI.B #$80,D1
000001ae : 6628 BNE $000001d8
000001b0 : 303c aa57 MOVE.W #$aa57,D0
000001b4 : a746 _trap ; GetOSTrapAddress for $aa57 (docking dispatch ??)
000001b6 : 2208 MOVE.L A0,D1
000001b8 : 303c a89f MOVE.W #$a89f,D0
000001bc : a746 _trap ; GetOSTrapAddress for $a89f (unimplemented trap)
000001be : b1c1 CMPA.L D1,A0
000001c0 : 6710 BEQ $000001d2
000001c2 : 122e ffc6 MOVE.B -58(A6),D1
000001c6 : 0201 0004 ANDI.B #$04,D1
000001ca : 6606 BNE $000001d2
000001cc : 002e 0080 ffc6 ORI.B #$80,-58(A6)
000001d2 : 002e 0004 ffc6 ORI.B #$04,-58(A6)
000001d8 : 4e75 RTS
;;
;; Read SRec
;; Called from: Function_9
;;
Read_SResource:
000001da : 48e7 f080 MOVEM.L D0-D3,A0,-(A7)
000001de : 3600 MOVE.W D0,D3
000001e0 : 41ee ffc8 LEA -56(A6),A0 ; a0 = address of spBlock
000001e4 : 1153 0031 MOVE.B (A3),+49(A0)
000001e8 : 117c 0001 0032 MOVE.B #$01,+50(A0)
000001ee : 4228 0033 CLR.B +51(A0)
000001f2 : 7016 MOVEQ #$16,D0
000001f4 : a06e _SlotManager ; SRsrcInfo
000001f6 : 4a40 TST D0
000001f8 : 660e BNE $00000208
000001fa : 1143 0032 MOVE.B D3,+50(A0)
000001fe : 7005 MOVEQ #$05,D0
00000200 : a06e _SlotManager ; SGetBlock
00000202 : 4a40 TST D0
00000204 : 6602 BNE $00000208
00000206 : 2250 MOVEA.L (A0),A1
00000208 : 4cdf 010f MOVEM.L (A7)+,D0-D3,A0
0000020c : 4e75 RTS
;;
;; Called from: PrimaryINIT
;;
Function_1:
0000020e : 204a MOVEA.L A2,A0
00000210 : d1fc 0d0b 0000 ADDA.L #$0d0b0000,A0
00000216 : 20bc 0606 0606 MOVE.L #$06060606,(A0)
0000021c : 217c 0043 4343 0008 MOVE.L #$00434343,+8(A0)
00000224 : 20bc 0505 0505 MOVE.L #$05050505,(A0)
0000022a : 42a8 0008 CLR.L +8(A0)
0000022e : 20bc 0404 0404 MOVE.L #$04040404,(A0)
00000234 : 217c ffff ffff 0008 MOVE.L #$ffffffff,+8(A0)
0000023c : 20bc 0707 0707 MOVE.L #$07070707,(A0)
00000242 : 42a8 0008 CLR.L +8(A0)
00000246 : 4290 CLR.L (A0)
00000248 : 323c 00ff MOVE.W #$00ff,D1
0000024c : 42a8 0004 CLR.L +4(A0)
00000250 : 42a8 0004 CLR.L +4(A0)
00000254 : 42a8 0004 CLR.L +4(A0)
00000258 : 51c9 fff2 DBF D1,$0000024c
0000025c : 4290 CLR.L (A0)
0000025e : 217c 0000 00d8 0004 MOVE.L #$000000d8,+4(A0)
00000266 : 217c 0000 0008 0004 MOVE.L #$00000008,+4(A0)
0000026e : 217c 0000 0008 0004 MOVE.L #$00000008,+4(A0)
00000276 : 217c 0000 00a8 0004 MOVE.L #$000000a8,+4(A0)
0000027e : 217c 0000 00a8 0004 MOVE.L #$000000a8,+4(A0)
00000286 : 217c 0000 00a8 0004 MOVE.L #$000000a8,+4(A0)
0000028e : 4e75 RTS
;;
;; Loading the S drawing in the ROM before the PrimaryINIT
;; Called from: PrimaryINIT
;;
Function_2:
00000290 : 204c MOVEA.L A4,A0
00000292 : 3029 004e MOVE.W +78(A1),D0
00000296 : 0440 0090 SUBI.W #$0090,D0
0000029a : e648 LSR.W #3,D0
0000029c : d0c0 ADDA.W D0,A0
0000029e : 3029 0050 MOVE.W +80(A1),D0
000002a2 : 0440 005a SUBI.W #$005A,D0
000002a6 : c0c4 MULU D4,D0
000002a8 : d1c0 ADDA.L D0,A0
000002aa : 0444 0010 SUBI.W #$0010,D4
000002ae : 7249 MOVEQ #$49,D1
000002b0 : 43fa f8ae LEA -1874(PC) {$fffffb60},A1 ; Access "S" in ROM before PrimaryINIT
000002b4 : 700f MOVEQ #$0F,D0
000002b6 : 10d9 MOVE.B (A1)+,(A0)+
000002b8 : 51c8 fffc DBF D0,$000002b6
000002bc : d0c4 ADDA.W D4,A0
000002be : 51c9 fff4 DBF D1,$000002b4
000002c2 : 4e75 RTS
;;
;; Some type of memory fill function?
;; Called from: PrimaryINIT
;;
Function_3:
000002c4 : 2f09 MOVE.L A1,-(A7)
000002c6 : 383c 0200 MOVE.W #$0200,D4
000002ca : 122e ffc7 MOVE.B -57(A6),D1
000002ce : 0201 0020 ANDI.B #$20,D1
000002d2 : 6604 BNE $000002d8
000002d4 : 383c 0100 MOVE.W #$0100,D4
000002d8 : 70ff MOVEQ #$FF,D0
000002da : 2200 MOVE.L D0,D1
000002dc : 363c 12c0 MOVE.W #$12c0,D3
000002e0 : 224c MOVEA.L A4,A1
000002e2 : 2049 MOVEA.L A1,A0
000002e4 : 3404 MOVE.W D4,D2
000002e6 : 20c0 MOVE.L D0,(A0)+
000002e8 : 20c0 MOVE.L D0,(A0)+
000002ea : 20c0 MOVE.L D0,(A0)+
000002ec : 20c0 MOVE.L D0,(A0)+
000002ee : 20c0 MOVE.L D0,(A0)+
000002f0 : 20c0 MOVE.L D0,(A0)+
000002f2 : 20c0 MOVE.L D0,(A0)+
000002f4 : 20c0 MOVE.L D0,(A0)+
000002f6 : 0442 0020 SUBI.W #$0020,D2
000002fa : 6eea BGT $000002e6
000002fc : c141 AND.W D0,D1
000002fe : d2c4 ADDA.W D4,A1
00000300 : 51cb ffe0 DBF D3,$000002e2
00000304 : 225f MOVEA.L (A7)+,A1
00000306 : 4e75 RTS
;;
;; Some type of communication with an IC
;; Called from: Setup_Video_Default
;;
Function_4:
00000308 : 200a MOVE.L A2,D0
0000030a : 0680 0008 0000 ADDI.L #$00080000,D0
00000310 : 2840 MOVEA.L D0,A4
00000312 : d5fc 0c00 0000 ADDA.L #$0c000000,A2 ; a2 = slot base address + $0c000000
00000318 : 257c 0000 b564 006c MOVE.L #$0000b564,+108(A2)
00000320 : 257c 0000 0080 0040 MOVE.L #$00000080,+64(A2)
00000328 : 42aa 0044 CLR.L +68(A2)
0000032c : 257c 0000 0080 0074 MOVE.L #$00000080,+116(A2)
00000334 : 42aa 0078 CLR.L +120(A2)
00000338 : 202a 0050 MOVE.L +80(A2),D0
0000033c : e288 LSR.L #1,D0
0000033e : 2540 0050 MOVE.L D0,+80(A2)
00000342 : 202a 007c MOVE.L +124(A2),D0
00000346 : e288 LSR.L #1,D0
00000348 : 2540 007c MOVE.L D0,+124(A2)
0000034c : 95fc 0c00 0000 SUBA.L #$0c000000,A2
00000352 : 4e75 RTS