Last active
April 19, 2016 08:52
-
-
Save miniupnp/ea25f58e39872556c30a1c1a7c238b23 to your computer and use it in GitHub Desktop.
ICD boot sectors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
icd_bootsectorz.img: file format binary | |
; d7 = acsi_id << 5 ?? | |
Disassembly of section .data: | |
00000000 <.data>: | |
0: 2f0b movel %a3,%sp@- | |
2: 2f3c 000b ffff movel #786431,%sp@- ; BIOS 0x0b = Kbshift(0xffff) | |
8: 4e4d trap #13 ; reading or setting shift, control, alt, caps lock status | |
; -1 = reading | |
a: 588f addql #4,%sp | |
c: 0800 0003 btst #3,%d0 ;ALTERNATE | |
10: 664c bnes 0x5e ; alternatepressed | |
12: 41fa 01ae lea %pc@(0x1c2),%a0 ;0x12c = HD number of sectors | |
16: 4a98 tstl %a0@+ | |
18: 6744 beqs 0x5e ; return | |
1a: 7203 moveq #3,%d1 | |
;now a0 points to 0x1c6 = 1st 12byte partition | |
nextpartition: | |
1c: 0210 0081 andib #-127,%a0@ ; 0x1c6 = 0x81 | |
20: 0c10 0081 cmpib #-127,%a0@ ; active=bootable(bit 7) & exists (bit 0) | |
24: 6630 bnes 0x56 ; if (a0)&0x81 != 0x81 skipexecute | |
26: 49fa 01d8 lea %pc@(0x200),%a4 | |
2a: 7601 moveq #1,%d3 ; sector count | |
2c: 2c28 0004 movel %a0@(4),%d6 ; 0x1ca = 0x00000002 start sector | |
30: 2006 movel %d6,%d0 | |
32: 6142 bsrs 0x76 ; read disk / readacsi | |
34: 6620 bnes 0x56 ; if return != 0 GOTO skipexecute | |
; compute checksum : | |
36: 343c 00ff movew #255,%d2 | |
3a: 224c moveal %a4,%a1 | |
3c: 4240 clrw %d0 | |
checksumloop: | |
3e: d059 addw %a1@+,%d0 | |
40: 51ca fffc dbf %d2,0x3e ; checksumloop | |
44: b07c 1234 cmpw #4660,%d0 ; | |
48: 660c bnes 0x56 ; if checksum != $1234 GOTO skipexecute | |
4a: 4bfa 002a lea %pc@(0x76),%a5 | |
4e: 4e94 jsr %a4@ ; execute code from disk | |
50: 1e3c 00e0 moveb #-32,%d7 | |
54: 6008 bras 0x5e ; return | |
skipexecute: | |
56: d0fc 000c addaw #12,%a0 | |
5a: 51c9 ffc0 dbf %d1,0x1c ; LOOPx4 retry | |
return: | |
5e: 303c fde8 movew #-536,%d0 | |
62: 5340 subqw #1,%d0 | |
64: 66fc bnes 0x62 ; wait loop | |
66: 265f moveal %sp@+,%a3 | |
68: 4e75 rts | |
; 08 00 00 00 01 00 => ACSI command READ 1 sector | |
6a: 0800 0000 btst #0,%d0 | |
6e: 0100 btst %d0,%d0 | |
70: 8a8a .short 0x8a8a | |
72: 8a8a .short 0x8a8a | |
74: 8a00 orb %d0,%d5 | |
; d0/d6 = start sector | |
; d3 = sector count | |
; a4 = memory addr | |
readacsi: | |
76: 48e7 7fff moveml %d1-%sp,%sp@- | |
7a: 41f8 8604 lea 0xffff8604,%a0 ; Floppy/Hard Disk controller | |
7e: 43e8 0002 lea %a0@(2),%a1 ; a1 = FFFF8606 = DMA status | |
82: 4bf8 fa01 lea 0xfffffa01,%a5 ; MFP GP I/O | |
86: 4df8 8609 lea 0xffff8609,%fp ; DTA high byte | |
8a: 4a78 043e tstw 0x43e ; flock | |
8e: 66fa bnes 0x8a ; loop while flock != 0 | |
90: 50f8 043e st 0x43e ; set flock | |
94: 2238 04ba movel 0x4ba,%d1 ; _hz_200 Raw 200Hz timer | |
98: 5881 addql #4,%d1 | |
9a: b2b8 04ba cmpl 0x4ba,%d1 | |
9e: 64fa bccs 0x9a ; wait 20ms | |
a0: 2f0c movel %a4,%sp@- | |
a2: 1d6f 0003 0004 moveb %sp@(3),%fp@(4) ; DTA Low byte | |
a8: 1d6f 0002 0002 moveb %sp@(2),%fp@(2) ; DTA middle byte | |
ae: 1caf 0001 moveb %sp@(1),%fp@ ; DTA High byte | |
b2: 588f addql #4,%sp | |
b4: 45fa ffb4 lea %pc@(0x6a),%a2 | |
b8: 2480 movel %d0,%a2@ ; write start sector in command | |
ba: 7008 moveq #8,%d0 ; 8 = read command | |
bc: 8007 orb %d7,%d0 ; asci_id << 5 | 8 | |
be: 1480 moveb %d0,%a2@ | |
c0: 32bc 0190 movew #400,%a1@ ; Write HDC + NO_DMA + SC_REG | |
c4: 32bc 0090 movew #144,%a1@ ; HDC + NO_DMA + SC_REG | |
c8: 3083 movew %d3,%a0@ ; sector count | |
ca: 1543 0004 moveb %d3,%a2@(4) ; sector count | |
ce: 32bc 0088 movew #136,%a1@ ; HDC + NO_DMA ? | |
d2: 7205 moveq #5,%d1 ; | |
d4: 47ea 0006 lea %a2@(6),%a3 ; pointer to 0x70 | |
acsicommandloop: | |
d8: 4280 clrl %d0 | |
da: 101a moveb %a2@+,%d0 ; ACSI command byte | |
dc: 4840 swap %d0 | |
de: 101b moveb %a3@+,%d0 ; #$8a HDC / FDC/HDC register select / FDC pin A0 | |
e0: 2080 movel %d0,%a0@ ; write | |
e2: 4a41 tstw %d1 | |
e4: 6708 beqs 0xee | |
e6: 6138 bsrs 0x120 ; wait completion ? | |
e8: 6b18 bmis 0x102 ; timeout | |
ea: 51c9 ffec dbf %d1,0xd8 | |
ee: 203c 0006 ddd0 movel #450000,%d0 | |
f4: 6130 bsrs 0x126 ; wait interrupt | |
f6: 6b0a bmis 0x102 | |
f8: 32bc 008a movew #138,%a1@ ; #$8a HDC / FDC/HDC register select / FDC pin A0 | |
fc: 3010 movew %a0@,%d0 ; read DMA return code | |
fe: c07c 00ff andw #255,%d0 ; error code only : 0 = OK | |
acsitimeout: | |
102: 32bc 0080 movew #128,%a1@ ; HDC : reset | |
106: 4e71 nop | |
108: 4a50 tstw %a0@ | |
10a: 223c 0000 3a98 movel #15000,%d1 | |
110: 5381 subql #1,%d1 | |
112: 66fc bnes 0x110 | |
114: 4278 043e clrw 0x43e ; release flock | |
118: 4cdf fffe moveml %sp@+,%d1-%sp | |
11c: 4a40 tstw %d0 | |
11e: 4e75 rts | |
120: 203c 0000 3a98 movel #15000,%d0 | |
126: 0815 0005 btst #5,%a5@ ; test Interrupt ? | |
12a: 0815 0005 btst #5,%a5@ | |
12e: 0815 0005 btst #5,%a5@ | |
132: 0815 0005 btst #5,%a5@ | |
136: 6704 beqs 0x13c | |
138: 5380 subql #1,%d0 | |
13a: 6aea bpls 0x126 | |
13c: 4e75 rts | |
... | |
1b6: 0132 04ff btst %d0,%a2@(ffffffffffffffff,%d0:w:4) | |
1ba: 0132 0132 0102 btst %d0,%a2@(0000000001020117,%d0:w)@(0000000000000000) | |
1c0: 0117 0000 | |
1c4: 71c0 .short 0x71c0 | |
1c6: 8147 .short 0x8147 | |
1c8: 454d .short 0x454d | |
1ca: 0000 0002 orib #2,%d0 | |
1ce: 0000 71ad orib #-83,%d0 | |
;000001b0 00 00 00 00 00 00 01 32 04 ff 01 32 01 32 01 02 |.......2...2.2..| | |
;000001c0 01 17 00 00 71 c0 81 47 45 4d 00 00 00 02 00 00 |....q..GEM......| | |
;000001d0 71 ad 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |q...............| | |
; 01c2: 00 00 71 c0 ; hard disk size (sectors) | |
; 01c6: 1st partition | |
; 01c6+00: 81 47 45 4d "\x8GEM" : signature / type | |
; 01c6+04: 00 00 00 02 : start sector | |
; 01c6+08: 00 00 71 ad : partition size (sectors) | |
... | |
1fe: 0ac4 .short 0x0ac4 | |
400: 602c bras 0x42e | |
;00000400 60 2c 49 43 44 49 4e 43 aa 0d fb 00 02 02 01 00 |`,ICDINC........| | |
;00000410 02 00 01 ad 71 f8 39 00 00 00 00 00 01 00 00 02 |....q.9.........| | |
;00000420 00 00 49 43 44 42 4f 4f 54 20 53 59 53 00 2f 3c |..ICDBOOT SYS./<| | |
402: 4943 .short 0x4943 | |
404: 4449 .short 0x4449 | |
406: 4e43 trap #3 | |
408: aa0d .short 0xaa0d | |
40a: fb00 .short 0xfb00 | |
40c: 0202 0100 andib #0,%d2 | |
410: 0200 01ad andib #-83,%d0 | |
414: 71f8 .short 0x71f8 | |
416: 3900 movew %d0,%a4@- | |
418: 0000 0000 orib #0,%d0 | |
41c: 0100 btst %d0,%d0 | |
41e: 0002 0000 orib #0,%d2 | |
422: 4943 .short 0x4943 ; ICDBOOT SYS | |
424: 4442 negw %d2 | |
426: 4f4f .short 0x4f4f | |
428: 5420 addqb #2,%a0@- | |
42a: 5359 subqw #1,%a1@+ | |
42c: 5300 subqb #1,%d0 | |
42e: 2f3c 0000 0200 movel #512,%sp@- | |
434: 3f3c 0048 movew #72,%sp@- | |
438: 4e41 trap #1 ; Malloc(512) | |
43a: 5c8f addql #6,%sp | |
43c: 2c40 moveal %d0,%fp | |
43e: 1a3a ffcc moveb %pc@(0x40c),%d5 | |
442: 4885 extw %d5 | |
444: e245 asrw #1,%d5 | |
446: 343a ffc6 movew %pc@(0x40e),%d2 | |
44a: e15a rolw #8,%d2 | |
44c: 323a ffc8 movew %pc@(0x416),%d1 | |
450: ee59 rorw #7,%d1 | |
452: d242 addw %d2,%d1 | |
454: 4284 clrl %d4 | |
456: 183a ffba moveb %pc@(0x412),%d4 | |
45a: e144 aslw #8,%d4 | |
45c: 183a ffb3 moveb %pc@(0x411),%d4 | |
460: 88fc 0010 divuw #16,%d4 | |
464: 88c5 divuw %d5,%d4 | |
466: 4844 swap %d4 | |
468: 4a44 tstw %d4 | |
46a: 6700 0008 beqw 0x474 | |
46e: d8bc 0001 0000 addl #65536,%d4 | |
474: 4844 swap %d4 | |
476: d841 addw %d1,%d4 | |
478: c4c5 muluw %d5,%d2 | |
47a: c2c5 muluw %d5,%d1 | |
47c: c8c5 muluw %d5,%d4 | |
47e: d486 addl %d6,%d2 | |
480: d286 addl %d6,%d1 | |
482: d886 addl %d6,%d4 | |
484: 7601 moveq #1,%d3 | |
486: 2001 movel %d1,%d0 | |
488: 284e moveal %fp,%a4 | |
48a: 4e95 jsr %a5@ | |
48c: 6600 0034 bnew 0x4c2 | |
490: 7c0f moveq #15,%d6 | |
492: 4a14 tstb %a4@ | |
494: 6700 002c beqw 0x4c2 | |
498: 700a moveq #10,%d0 | |
49a: 41fa ff86 lea %pc@(0x422),%a0 ; ICDBOOT SYS | |
49e: 1630 0000 moveb %a0@(0000000000000000,%d0:w),%d3 | |
4a2: b634 0000 cmpb %a4@(0000000000000000,%d0:w),%d3 | |
4a6: 660e bnes 0x4b6 | |
4a8: 51c8 fff4 dbf %d0,0x49e | |
4ac: 4280 clrl %d0 | |
4ae: 302c 001a movew %a4@(26),%d0 | |
4b2: e158 rolw #8,%d0 | |
4b4: 660e bnes 0x4c4 | |
4b6: d8fc 0020 addaw #32,%a4 | |
4ba: 51ce ffd6 dbf %d6,0x492 | |
4be: 5281 addql #1,%d1 | |
4c0: 60c2 bras 0x484 | |
4c2: 70ff moveq #-1,%d0 | |
4c4: 6b00 0108 bmiw 0x5ce | |
4c8: 2c00 movel %d0,%d6 | |
4ca: 2f3c ffff ffff movel #-1,%sp@- | |
4d0: 3f3c 0048 movew #72,%sp@- | |
4d4: 4e41 trap #1 ; Malloc(-1) | |
4d6: 5c8f addql #6,%sp | |
4d8: 0280 ffff fffe andil #-2,%d0 | |
4de: 2f00 movel %d0,%sp@- | |
4e0: 2f00 movel %d0,%sp@- | |
4e2: 3f3c 0048 movew #72,%sp@- | |
4e6: 4e41 trap #1 ; Malloc(freespace !) | |
4e8: 5c8f addql #6,%sp | |
4ea: 285f moveal %sp@+,%a4 | |
4ec: 4a80 tstl %d0 | |
4ee: 6e06 bgts 0x4f6 | |
4f0: 70ff moveq #-1,%d0 | |
4f2: 6000 0054 braw 0x548 | |
4f6: 2f00 movel %d0,%sp@- | |
4f8: 2c40 moveal %d0,%fp | |
4fa: d9c0 addal %d0,%a4 | |
4fc: 4283 clrl %d3 | |
4fe: 163a ff16 moveb %pc@(0x416),%d3 | |
502: c6c5 muluw %d5,%d3 | |
504: 2003 movel %d3,%d0 | |
506: e180 asll #8,%d0 | |
508: e380 asll #1,%d0 | |
50a: 99c0 subal %d0,%a4 | |
50c: 264c moveal %a4,%a3 | |
50e: 2002 movel %d2,%d0 | |
510: 4e95 jsr %a5@ | |
512: 6632 bnes 0x546 | |
514: 2405 movel %d5,%d2 | |
516: e342 aslw #1,%d2 | |
518: bc7c ffff cmpw #-1,%d6 | |
51c: 6726 beqs 0x544 | |
51e: 4280 clrl %d0 | |
520: 3006 movew %d6,%d0 | |
522: e340 aslw #1,%d0 | |
524: 3c33 0800 movew %a3@(0000000000000000,%d0:l),%d6 | |
528: e15e rolw #8,%d6 | |
52a: 5940 subqw #4,%d0 | |
52c: c0c5 muluw %d5,%d0 | |
52e: d084 addl %d4,%d0 | |
530: 3602 movew %d2,%d3 | |
532: 284e moveal %fp,%a4 | |
534: 4e95 jsr %a5@ | |
536: 660e bnes 0x546 | |
538: 4280 clrl %d0 | |
53a: 3002 movew %d2,%d0 | |
53c: e180 asll #8,%d0 | |
53e: e380 asll #1,%d0 | |
540: ddc0 addal %d0,%fp | |
542: 60d4 bras 0x518 | |
544: 4280 clrl %d0 | |
546: 265f moveal %sp@+,%a3 | |
548: 6600 0084 bnew 0x5ce | |
54c: 204b moveal %a3,%a0 | |
54e: 0c58 601a cmpiw #24602,%a0@+ | |
552: 6632 bnes 0x586 | |
554: 43eb 001c lea %a3@(28),%a1 | |
558: d3d8 addal %a0@+,%a1 | |
55a: d3d8 addal %a0@+,%a1 | |
55c: d3e8 0004 addal %a0@(4),%a1 | |
560: 4a91 tstl %a1@ | |
562: 672e beqs 0x592 | |
564: 41eb 001c lea %a3@(28),%a0 | |
568: 4280 clrl %d0 | |
56a: 2208 movel %a0,%d1 | |
56c: d1d9 addal %a1@+,%a0 | |
56e: d390 addl %d1,%a0@ | |
570: 1019 moveb %a1@+,%d0 | |
572: 671e beqs 0x592 | |
574: b03c 0001 cmpb #1,%d0 | |
578: 6600 0008 bnew 0x582 | |
57c: d0fc 00fe addaw #254,%a0 | |
580: 60ee bras 0x570 | |
582: d1c0 addal %d0,%a0 | |
584: 60e8 bras 0x56e | |
586: 2f0b movel %a3,%sp@- | |
588: 3f3c 0049 movew #73,%sp@- | |
58c: 4e41 trap #1 ; Mfree | |
58e: 5c8f addql #6,%sp | |
590: 70ff moveq #-1,%d0 | |
592: 6600 003a bnew 0x5ce | |
596: 3c3a fe86 movew %pc@(0x41e),%d6 ; 2 = C: | |
59a: 3f06 movew %d6,%sp@- | |
59c: 3f3c 000e movew #14,%sp@- ; Dsetdrv() | |
5a0: 4e41 trap #1 | |
5a2: 588f addql #4,%sp | |
5a4: 9bcd subal %a5,%a5 | |
5a6: 3b46 0446 movew %d6,%a5@(1094) | |
5aa: 3b7a fe74 0482 movew %pc@(0x420),%a5@(1154) | |
5b0: 2f0b movel %a3,%sp@- | |
5b2: 203c 5742 4c42 movel #1463962690,%d0 | |
5b8: 4e93 jsr %a3@ | |
5ba: 265f moveal %sp@+,%a3 | |
5bc: 2f00 movel %d0,%sp@- | |
5be: 2f0b movel %a3,%sp@- | |
5c0: 2f3c 004a 0000 movel #4849664,%sp@- | |
5c6: 4e41 trap #1 ; Mshrink(a3, 0) | |
5c8: dffc 0000 000c addal #12,%sp | |
5ce: 4e75 rts | |
... | |
5fc: 0000 263e orib #62,%d0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment