ABCDEFGHIJKLMNOPQRSTUVWXYZAAAB
1
StageGary+ BTM / hardware noteA500/A1000/A2000
KS 1.3 (34.5)
A500+ (A500/A2000)
KS 2.04 (37.175)
A500/A600/A2000
KS 3.1 (40.63)
A1200
KS 3.1 (40.68)
A3000 boot ROM
V36 SuperKickstart
A3000
KS 2.04 (37.175)
A3000
KS 3.1 (40.55)
A4000
KS 3.1 (40.70)
2
ColdReset entry$FC00D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)$F800D0 RESET (one word)
3
ColdStart entry$FC00D2 LEA $40000,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP$F800D2 LEA $400,SP
4
Initial ROM-base load(falls through)$F800D6 LEA $F80000,A0 (abs.l)$F800D6 LEA pc@(-$D8),A0 (pc-rel)$F800D6 LEA pc@(-$D8),A0 (pc-rel)$F800D6 LEA $F80000,A0 (abs.l)$F800D6 LEA $F80000,A0 (abs.l)$F800D6 LEA pc@(-$D8),A0 (pc-rel)$F800D6 LEA pc@(-$D8),A0 (pc-rel)
5
Settle delay (no checksum)$FC00D8 MOVE.L #$20000,D0; SUBQ loop(replaced by checksum)(replaced by checksum)(replaced by checksum)(replaced by checksum)(replaced by checksum)(replaced by checksum)(replaced by checksum)
6
ROM checksum compute(absent - pure delay above)$F800DC MOVEQ #-1,D1; MOVEQ #1,D2; double-DBF, 512 KB$F800DA same as A3000$F800DA same as A3000$F800DC MOVE.L #$1FFFF,D1; swap-D2 double-DBF, 512 KB$F800DC same as A500+ 2.04 (MOVEQ #-1,D1; MOVEQ #1,D2; double-DBF, 512 KB)$F800DA same as 2.04 (saves 2 bytes via PC-rel LEA above)$F800DA same as A3000
7
Diagnostic cart intercept$FC00E2 read $F00000 for $1111$F800F0 AFTER checksum$F800F2 AFTER checksum$F800F2 AFTER checksum$F800F8 read $F00000 for $1111$F800F0 AFTER checksum$F800F2 AFTER checksum$F800F2 AFTER checksum
8
Inserted: $DA8000 + $A00000 probeA500/A1200 KS 3.1 only - accounts for ~88 bytes of extra code missing from A3000/A4000(absent)(absent)$F8010A-$F80164 write 0/1 to $DA8000; probe $A00000 for $91,$05,$23,$23 signature; if found JMP $600000+offset (external-Kickstart / CDTV-style redirect chain). Shifts all later addresses +$5C$F8010A-$F80164 same as A500(absent)(absent)(absent)(absent)
9
CIA-A overlay clearKS1.3 does DDRA *then* overlay clear (reverse of KS2.04+)$FC0106 MOVE.B #2,$BFE001 (AFTER DDRA, see below)$F8010C CLR.B $BFE001$F80166 CLR.B $BFE001$F80166 CLR.B $BFE001$F80114 MOVE.B #0,$BFE001$F8010C CLR.B $BFE001$F8010A CLR.B $BFE001$F8010A CLR.B $BFE001
10
CIA-A DDRA (PA bit 1 OUT for LED)$FC00FE MOVE.B #$3,$BFE201 (BEFORE overlay clear)$F80112 MOVE.B #$3,$BFE201$F8016C MOVE.B #3,$BFE201$F8016C MOVE.B #3,$BFE201$F8011C MOVE.B #3,$BFE201$F80112 MOVE.B #3,$BFE201$F80110 MOVE.B #$3,$BFE201$F80110 MOVE.B #$3,$BFE201
11
Custom-chip base load$FC010E LEA $DFF000,A4$F8011A LEA $DFF000,A4$F80174 LEA $DFF000,A4$F80174 LEA $DFF000,A4$F80124 LEA $DFF000,A4$F8011A LEA $DFF000,A4$F80118 LEA $DFF000,A4$F80118 LEA $DFF000,A4
12
Disable all interrupts (INTENA)yesyesyesyesyesyesyesyes
13
Clear pending INTREQ ($7FFF)yesyesyesyesyesyesyesyes
14
Disable all DMA (DMACON=$7FFF)yesyesyesyesyesyesyesyes
15
SERPER set (serial baud)(absent)$F80130 SERPER = $0174 (9600 8N1)$F8018A SERPER = $0174$F8018A SERPER = $0174$F8013A SERPER = $0174 (9600 8N1)$F80130 SERPER = $0174$F8012E SERPER = $0174$F8012E SERPER = $0174
16
BPLCON0 (display config)$FC0124 BPLCON0 = $0200$F80136 BPLCON0 = $0200$F80190 BPLCON0 = $0200$F80190 BPLCON0 = $0200$F80140 BPLCON0 = $0200$F80136 BPLCON0 = $0200$F80134 BPLCON0 = $0200$F80134 BPLCON0 = $0200
17
BPLCON1 / BPLDAT clearyesyesyesyes$F80146 BPLCON1 = 0yesyesyes
18
COLOR00 = boot indicator$FC0130 COLOR00 = $0444 dark grey$F80142 COLOR00 = $0444 dark grey$F8019C COLOR00 = $0111$F8019C COLOR00 = $0111$F8014C COLOR00 = $0444 dark grey$F80142 COLOR00 = $0444 dark grey (matches V36/2.04+ NOT KS3.1 $0111)$F80140 COLOR00 = $0111 near-black$F80140 COLOR00 = $0111
19
Gary+ TIMEOUT register initBTM=$00 = AUTO-DSACK mode; empty Z2/DMAC reads return $FF instead of /BERR(no Gary+ hardware)(no Gary+ in A500+ build)(no $DE0000 reference)(no $DE0000 reference)(no $DE0000 reference)$F8014A MOVE.B #$00,$DE0000$F80148 MOVE.B #$00,$DE0000$F80148 MOVE.B #$00,$DE0000
20
Gary+ TOENB* register initTOENB* off(absent)(absent)(absent)(absent)(absent)$F80150 MOVE.B #$00,$DE0001$F8014E MOVE.B #$00,$DE0001$F8014E MOVE.B #$00,$DE0001
21
68030 CACR enable (icache+IBE)A3000/A4000 ROMs touch CACR early in cold-start; A500/A1200/2.04 defer to TypeOfCPU(68000 only)(in TypeOfCPU at $F8061E)(in TypeOfCPU at $F806E8)(in TypeOfCPU at $F806E8)(no MOVEC in cold-start)$F80158 MOVEC D0,CACR$F80156 MOVEC D0,CACR$F80156 MOVEC D0,CACR
22
CACR readback → CPU≥020 detect(absent)(in TypeOfCPU)(in TypeOfCPU later)(in TypeOfCPU later)(absent in cold-start)$F8015C MOVEC CACR,D0$F8015A MOVEC CACR,D0$F8015A MOVEC CACR,D0
23
Check COLDSTART bit ($DE0002)set on power-on; cold path branches on this bit. V36 uses BCLR (test+clear in one op); KS3.1 uses separate BTST then BCLR(absent)(absent)(no $DE0002 reference)(no $DE0002 reference)$F80152 BCLR (combined test+clear); BEQ.S = warm path$F80164 BTST #7,$DE0002$F80162 BTST #7,$DE0002$F80162 BTST #7,$DE0002
24
68030 PMMU clear (TC/TT0/TT1)A3000 KS3.1 still does cold PMMU clear here; A4000 KS3.1 omits it entirely (relies on hw reset). KS2.04/A500/A1200 also omit.(absent)(absent)(no PMMU instruction in cold-start)(no PMMU instruction in cold-start)$F8016C PMOVE CRP+TC (own MMU init)$F80172 PMOVE 0,TC/TT0/TT1 (cold-only)$F80170 PMOVE 0,TC/TT0/TT1 (cold-only)(NO PMOVE in entire cold-start; only PMOVE in ROM is at $FF51D6 in mmu.library)
25
Clear ABSEXECBASE + loc $0deferred to ExecBase builddeferred to ExecBase build(deferred to ExecBase build)(deferred to ExecBase build)yes (cold path)$F8017E CLR.L $4 / CLR.L $0$F8017C CLR.L $4 / CLR.L $0$F8016C CLR.L $4 / CLR.L $0 (in cold path only)
26
Clear COLDSTART bitconsumes COLDSTART signal(absent)(absent)(no $DE0002 ref)(no $DE0002 ref)$F80152 BCLR #7,$DE0002$F8018C BCLR #7,$DE0002$F8018A BCLR #7,$DE0002$F80174 BCLR #7,$DE0002
27
ROM checksum verify(absent)$F8014C NOT.L D5; BNE error$F801A6 NOT.L D5; BNE error$F801A6 NOT.L D5; BNE error(in startup chain after MMU init)$F80198 NOT.L D5; BNE error$F80196 NOT.L D5; BNE error$F80180 NOT.L D5; BNE error
28
Exception vector fill ($08..$B4)$FC0136 fill 45 vectors$F80152 fill 45 vectors$F801AC fill 45 vectors$F801AC fill 45 vectorsyes (45 vectors at $F801CE)$F8019E fill 45 vectors$F8019C fill 45 vectors$F80186 fill 45 vectors
29
Exception vector verifymiscompare → COLOR00=$0F0 halt(absent - no smoke test)$F80164 CMPAL backward; BNE → green-screen halt$F801C6 CMPAL backward; BNE halt$F801C6 CMPAL backward; BNE haltyes$F801B0 CMPAL backward; BNE halt$F801AE same$F80198 CMPAL backward; BNE halt
30
CPU/FPU detection (TypeOfCPU)all KS3.1 variants share the same TypeOfCPU detection range; chipset-specific routing happens elsewhere(absent - assumed 68000)010/020/881 detection020/030/040/881/882020/030/040/881/882yes (for boot menu)010/020/030/881/882 (early A3000)020/030/040/881/882020/030/040/881/882
31
Ramsey memory controller initA4000 ships Ramsey-07; A3000 ships Ramsey-04/07 depending on rev. Both manage motherboard 32-bit fast RAM.(no Ramsey)(no Ramsey in A500+ build)(no Ramsey)(no Ramsey)(absent)$F86558 Ramsey CR init routine (LEA $DE0003,A2)$FC09EC Ramsey CR init routine (ORI #$700,SR; LEA $DE0003,A4; probe via $A4@(64); read/write CR)Ramsey rev 07 present but $DE0003 not written by ROM (0 refs) - left at hardware-reset state
32
Search for old ExecBaseyesyesyesyesyesyesyesyes
33
Chip RAM walkall variants do a similar 64KB-step chip-RAM walk; specific AGA/Z3 differences not verified$F2D4B689 magic, simple loopyes (with NOP for cache flush)yesyes(absent - loader)yes (with NOP for cache flush)yesyes
34
Build chip-RAM memlistyesyesyesyes(absent)yesyesyes
35
Allocate new ExecBaseA3000 KS3.1 was not re-spun in July 1993 with the other variantsexec 34.2 (28 Oct 1987)exec 37.132 (23.5.91)exec 40.10 (15.7.93)exec 40.10 (15.7.93)exec 36.84 (7.3.90) at $F800B6; staged image carries exec 36.90 (16.3.90) at $FF8E62exec 37.132 (23.5.91)exec 40.9 (24.5.93) - older than other 3.1 variantsexec 40.10 (15.7.93)
36
Allocate KickMem / save state(simple)preserved across warm rebootyesyes(loader stages KS image in shadow)preserved across warm rebootyesyes
37
Cache flush (CacheClearU)(absent)(absent on 020-only)after CACR changeafter CACR changeyes (after CACR change)after CACR changeafter CACR changeafter CACR change
38
Motherboard fast-RAM probeA3000 routine runs in DSACK mode so empty 1 MB chunks return $FF(only chip RAM)(absent in A500+ build)(no motherboard FAST -- ZorroII only)(no motherboard FAST)(absent - loader handles via Ramsey)(equivalent A3000 routine, addresses differ from KS3.1)$F86AA0 walks $08000000 down in 1 MB, skips $07F80000 shadow(0 refs to $08000000/$07F80000/$FF000000 constants - path not located, possibly through autoconfig only)
39
RAM verify (read-after-write)simple chip-only(040 flush claim not verified)(not verified)(not verified)yes(not verified)after $F86C42 BERR flip - verify continues in BERR mode(not verified)
40
Probe Z3 at $FF000000 (internal)(no Z3)(no Z3)(no Z3 hardware)(no Z3 hardware)(absent)1 direct reference (Z3 probe in A3000 2.04)$F86B1C internal probe(0 references to constant $FF000000 in ROM - accessed via different mechanism)
41
Gary+ TIMEOUT → BERR mode flip**A3000 is the only ROM that flips to BERR**. A4000 initializes Gary+ to DSACK (writes $00 at $F80148) but never flips to BERR. A500/A1200 don't touch Gary+ at all.(absent)(absent)(absent)(absent)(absent)$F83EDE MOVE.B #$80,$DE0000$F86C42 MOVE.B #$80,$DE0000(no $80 write - keeps DSACK mode for running system)
42
Add motherboard FAST to memlist(absent)(absent in A500+ build)(autoconfig FAST only)(autoconfig FAST only)(loader-only)AddMemList after verifyAddMemList after verifyAddMemList for motherboard 32-bit RAM
43
[exec.library Init via Resident]yesyesyesyesyes (loader has own exec stub)exec 37.132 (23.5.91)yesyes
44
[expansion.library Resident]expansion 34.1 (18 Aug 1987)expansion 37.44 (23.5.91)expansion 40.2 (9.3.93)expansion 40.2 (9.3.93)expansion 36.49 (7.3.90)expansion 37.44 (23.5.91)expansion 40.2 (9.3.93)expansion 40.2 (9.3.93)
45
Z2 autoconfig ($E80000)Buster handles empty-slot BERR independently of Gary+ watchdog1 direct reference1 direct reference1 direct reference1 direct reference1 direct reference (loader scan)0 direct refs (indirect via expansion.library)0 direct refs (indirect via expansion.library)0 direct refs (indirect)
46
Z3 autoconfig ($FF000000)(no Z3 in 1.3 era)(no Z3 in 2.04 A500+ build)(no Z3 hardware)(no Z3 hardware)(absent)1 direct reference1 direct reference0 direct refs (path not verified - A4000 has Z3 hw but ROM uses different constant or computed address)
47
Init Resident tags (RTF_COLDSTART)EXTROM range scan claim not verified from disassemblyResident scan from ExecOriginscan widenedResident scanResident scan(loader scans diagrom/kick image)Resident scanResident scanResident scan
48
Branch to InitCode(COLDSTART)yesyesyesyesJump to loaded KS or boot menuyesyesyes
49
--- ROM identity ---
50
ROM size256 KB512 KB512 KB512 KB512 KB512 KB512 KB512 KB
51
MD582a21c1890cae844b3df741f2762d48ddc10d7bdd1b6f450773dfb558477c230e40a5dfb3d017ba8779faba30cbd1c8e646773759326fbac3b2311fd8c8793ee7a220b3da82de67a31cf31e7dacba913c5fd2322c53d25c0972e6fc54b705d178b1afcdd8241493c3d9471f2d4a148ce6e2a13b268b0105584401b78a4f9c43b
52
Resident tag count (whole ROM)A4000 ROM bundles only half as many residents as other KS3.1 - likely depends on disk/expansion ROM for the rest2440434344424220
53
Whole-ROM grep: $DE0000 refs00000221
54
Whole-ROM grep: $DE0001 refs00000111
55
Whole-ROM grep: $DE0002 refs00002222
56
Whole-ROM grep: $DE0003 refs00000110
57
Whole-ROM grep: $DE1000 refs00220011
58
Whole-ROM grep: $BFE001 refs2628353535283926
59
Whole-ROM grep: $BFE201 refs33335332
60
Whole-ROM grep: $BFD000 refs44444442
61
Whole-ROM grep: $E80000 refs11111000
62
Whole-ROM grep: $FF000000 refs00000110
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100