Skip to content

Instantly share code, notes, and snippets.

@miniupnp
Last active April 19, 2016 08:52
Show Gist options
  • Save miniupnp/ea25f58e39872556c30a1c1a7c238b23 to your computer and use it in GitHub Desktop.
Save miniupnp/ea25f58e39872556c30a1c1a7c238b23 to your computer and use it in GitHub Desktop.
ICD boot sectors
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