mirror of
https://github.com/alfishe/amiga-bootcamp.git
synced 2026-06-13 00:26:28 +00:00
kickstart-boot-diagnostics: HTML color swatches, 12-bit conversion table, fix dead link
- Replace emoji color squares with HTML <span> swatches using exact Amiga 12-bit to 24-bit RGB conversion (nibble x 17) - Add 12-bit to 24-bit Color Conversion reference section with nibble lookup table, formula, and worked examples for all diagnostic colors - Include AGA 24-bit color note (LOCT bypass, diagnostics use 12-bit) - Remove emojis from Mermaid diagram node labels (incompatible) - Fix dead Big Book of Amiga Hardware link -> wordpress.hertell.nu - Add AmigaLove Boot Color Checklist as supplementary reference
This commit is contained in:
parent
97b4cb26cc
commit
9b1e170439
1 changed files with 45 additions and 22 deletions
|
|
@ -93,16 +93,39 @@ ExecOrigin: DC.W BIG_ROMS ; ROM identification ($1114)
|
||||||
|
|
||||||
All diagnostic color constants are defined in `exec/constants.i` (lines 13–23). They use the Amiga's native 12-bit RGB format (`$0RGB`), written directly to the COLOR00 register at `$DFF180`.
|
All diagnostic color constants are defined in `exec/constants.i` (lines 13–23). They use the Amiga's native 12-bit RGB format (`$0RGB`), written directly to the COLOR00 register at `$DFF180`.
|
||||||
|
|
||||||
|
#### 12-bit to 24-bit Color Conversion
|
||||||
|
|
||||||
|
The Amiga stores color as a 16-bit word, but only the low 12 bits are used in OCS/ECS: four bits per channel (`$0RGB`). To convert each 4-bit nibble (0–F) to its 8-bit equivalent (0–255), multiply by 17:
|
||||||
|
|
||||||
|
| 4-bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|
||||||
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||
|
| **8-bit** | `00` | `11` | `22` | `33` | `44` | `55` | `66` | `77` | `88` | `99` | `AA` | `BB` | `CC` | `DD` | `EE` | `FF` |
|
||||||
|
|
||||||
|
The formula: `8bit_value = nibble × $11` (or `nibble × 17` in decimal). For example:
|
||||||
|
|
||||||
|
| Amiga `$0RGB` | Breakdown | 24-bit `#RRGGBB` | Approximate Color |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `$0000` | R=0, G=0, B=0 | `#000000` | Black |
|
||||||
|
| `$0111` | R=1, G=1, B=1 | `#111111` | Dark Grey |
|
||||||
|
| `$0F00` | R=F, G=0, B=0 | `#FF0000` | Red |
|
||||||
|
| `$00F0` | R=0, G=F, B=0 | `#00FF00` | Green |
|
||||||
|
| `$0FE5` | R=F, G=E, B=5 | `#FFEE55` | Yellow |
|
||||||
|
| `$0F0F` | R=F, G=0, B=F | `#FF00FF` | Magenta |
|
||||||
|
| `$000F` | R=0, G=0, B=F | `#0000FF` | Blue |
|
||||||
|
| `$0FFF` | R=F, G=F, B=F | `#FFFFFF` | White |
|
||||||
|
|
||||||
|
> **AGA note:** The AGA chipset (A1200/A4000) extends COLOR00 to 24-bit (8 bits per channel) when `BPLCON3` bit `LOCT` = 1. In that mode the 12-bit conversion table above does not apply — each channel uses its full 8-bit value directly. Kickstart diagnostics always run in 12-bit mode since they execute before any AGA-specific setup.
|
||||||
|
|
||||||
### 2.1 Progress Indicators (Normal Boot)
|
### 2.1 Progress Indicators (Normal Boot)
|
||||||
|
|
||||||
These colors appear momentarily during a healthy boot, each signaling successful completion of a test phase. The grey intensifies as boot progresses — a deliberate design choice that gives the power-on sequence a visible "warming up" feel.
|
These colors appear momentarily during a healthy boot, each signaling successful completion of a test phase. The grey intensifies as boot progresses — a deliberate design choice that gives the power-on sequence a visible "warming up" feel.
|
||||||
|
|
||||||
| Constant | Value | Color | Meaning | When Set |
|
| Constant | Value | Color | Meaning | When Set |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| `OK_HARDWARE` | `$0111` | 🟫 Dark Grey | First software action after RESET | After disabling interrupts/DMA |
|
| `OK_HARDWARE` | `$0111` | <span style="display:inline-block;width:28px;height:14px;background:#111111;vertical-align:middle;border:1px solid #666"></span> Dark Grey | First software action after RESET | After disabling interrupts/DMA |
|
||||||
| `OK_SOFTWARE` | `$0888` | ⬜ Mid Grey | Chip RAM tests passed | After exception vector verify |
|
| `OK_SOFTWARE` | `$0888` | <span style="display:inline-block;width:28px;height:14px;background:#888888;vertical-align:middle;border:1px solid #666"></span> Mid Grey | Chip RAM tests passed | After exception vector verify |
|
||||||
| `OK_RESLIST` | `$0AAA` | ⬜ Light Grey | All resident modules found | After `FindCodeBefore` |
|
| `OK_RESLIST` | `$0AAA` | <span style="display:inline-block;width:28px;height:14px;background:#AAAAAA;vertical-align:middle;border:1px solid #666"></span> Light Grey | All resident modules found | After `FindCodeBefore` |
|
||||||
| `OK_RESSTART` | `$0CCC` | ⬜ Bright Grey | About to start resident chain | Just before `InitCode` |
|
| `OK_RESSTART` | `$0CCC` | <span style="display:inline-block;width:28px;height:14px;background:#CCCCCC;vertical-align:middle;border:1px solid #666"></span> Bright Grey | About to start resident chain | Just before `InitCode` |
|
||||||
|
|
||||||
> **Design note:** In the production V40 ROM, only `OK_HARDWARE` survives — the intermediate grey stages (`OK_SOFTWARE`, `OK_RESLIST`, `OK_RESSTART`) were present in earlier revisions (visible in the RCS history of `constants.i`) but consolidated. The screen transitions from dark grey directly through to whatever the boot menu or Workbench draws. On a healthy machine, the grey flash is barely perceptible — lasting only the time it takes to checksum 512KB of ROM and verify chip RAM.
|
> **Design note:** In the production V40 ROM, only `OK_HARDWARE` survives — the intermediate grey stages (`OK_SOFTWARE`, `OK_RESLIST`, `OK_RESSTART`) were present in earlier revisions (visible in the RCS history of `constants.i`) but consolidated. The screen transitions from dark grey directly through to whatever the boot menu or Workbench draws. On a healthy machine, the grey flash is barely perceptible — lasting only the time it takes to checksum 512KB of ROM and verify chip RAM.
|
||||||
|
|
||||||
|
|
@ -112,17 +135,17 @@ When any test fails, the color is loaded into `D0` and execution branches to `co
|
||||||
|
|
||||||
| Constant | Value | Color | Failure | Source Test |
|
| Constant | Value | Color | Failure | Source Test |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| `CC_BADROMSUM` | `$0F00` | 🟥 **Red** | Kickstart ROM checksum invalid | Additive wraparound-carry sum ≠ $FFFFFFFF |
|
| `CC_BADROMSUM` | `$0F00` | <span style="display:inline-block;width:28px;height:14px;background:#FF0000;vertical-align:middle;border:1px solid #666"></span> **Red** | Kickstart ROM checksum invalid | Additive wraparound-carry sum ≠ $FFFFFFFF |
|
||||||
| `CC_BADRAM` | `$00F0` | 🟩 **Green** | Chip memory not writable | Exception vector write-back verify failed |
|
| `CC_BADRAM` | `$00F0` | <span style="display:inline-block;width:28px;height:14px;background:#00FF00;vertical-align:middle;border:1px solid #666"></span> **Green** | Chip memory not writable | Exception vector write-back verify failed |
|
||||||
| `CC_EXCEPTION` | `$0FE5` | 🟨 **Yellow** | CPU exception before software setup | Bus/Address error or illegal instruction |
|
| `CC_EXCEPTION` | `$0FE5` | <span style="display:inline-block;width:28px;height:14px;background:#FFEE55;vertical-align:middle;border:1px solid #666"></span> **Yellow** | CPU exception before software setup | Bus/Address error or illegal instruction |
|
||||||
| `CC_NOMODULES` | `$0F0F` | 🟪 **Purple** | `InitCode(RTF_COLDSTART)` returned | No bootable resident modules found |
|
| `CC_NOMODULES` | `$0F0F` | <span style="display:inline-block;width:28px;height:14px;background:#FF00FF;vertical-align:middle;border:1px solid #666"></span> **Purple** | `InitCode(RTF_COLDSTART)` returned | No bootable resident modules found |
|
||||||
| `CC_BADCHIPS` | `$000F` | 🟦 **Blue** | Custom chip register test failed | *(Commented out in V40 — was for early hardware)* |
|
| `CC_BADCHIPS` | `$000F` | <span style="display:inline-block;width:28px;height:14px;background:#0000FF;vertical-align:middle;border:1px solid #666"></span> **Blue** | Custom chip register test failed | *(Commented out in V40 — was for early hardware)* |
|
||||||
|
|
||||||
### 2.3 Special Modes
|
### 2.3 Special Modes
|
||||||
|
|
||||||
| Constant | Value | Color | Meaning |
|
| Constant | Value | Color | Meaning |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `OK_DEBUG` | `$000F` | 🟦 Blue | Debug/development mode — fire button held at boot |
|
| `OK_DEBUG` | `$000F` | <span style="display:inline-block;width:28px;height:14px;background:#0000FF;vertical-align:middle;border:1px solid #666"></span> Blue | Debug/development mode — fire button held at boot |
|
||||||
| `COLORON` | `$0200` | *(control)* | Written to `BPLCON0` to enable color burst output |
|
| `COLORON` | `$0200` | *(control)* | Written to `BPLCON0` to enable color burst output |
|
||||||
|
|
||||||
### 2.4 Color Progression Diagram
|
### 2.4 Color Progression Diagram
|
||||||
|
|
@ -131,7 +154,7 @@ When any test fails, the color is loaded into `D0` and execution branches to `co
|
||||||
graph LR
|
graph LR
|
||||||
subgraph "Normal Boot Path"
|
subgraph "Normal Boot Path"
|
||||||
direction LR
|
direction LR
|
||||||
A["RESET<br/>⬛ Black"] --> B["OK_HARDWARE<br/>$0111<br/>🟫 Dark Grey"]
|
A["RESET<br/>Black"] --> B["OK_HARDWARE<br/>$0111<br/>Dark Grey"]
|
||||||
B --> C["ROM Checksum<br/>Computing..."]
|
B --> C["ROM Checksum<br/>Computing..."]
|
||||||
C --> D["Vector Verify<br/>Writing + Reading"]
|
C --> D["Vector Verify<br/>Writing + Reading"]
|
||||||
D --> E["ExecBase Built<br/>Modules Found"]
|
D --> E["ExecBase Built<br/>Modules Found"]
|
||||||
|
|
@ -139,13 +162,13 @@ graph LR
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph "Failure Branches"
|
subgraph "Failure Branches"
|
||||||
C -->|"Bad checksum"| R["CC_BADROMSUM<br/>$0F00<br/>🟥 RED"]
|
C -->|"Bad checksum"| R["CC_BADROMSUM<br/>$0F00<br/>RED"]
|
||||||
D -->|"Write failed"| G["CC_BADRAM<br/>$00F0<br/>🟩 GREEN"]
|
D -->|"Write failed"| G["CC_BADRAM<br/>$00F0<br/>GREEN"]
|
||||||
F -->|"No modules"| P["CC_NOMODULES<br/>$0F0F<br/>🟪 PURPLE"]
|
F -->|"No modules"| P["CC_NOMODULES<br/>$0F0F<br/>PURPLE"]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph "Exception Path"
|
subgraph "Exception Path"
|
||||||
B -->|"CPU fault"| Y["CC_EXCEPTION<br/>$0FE5<br/>🟨 YELLOW"]
|
B -->|"CPU fault"| Y["CC_EXCEPTION<br/>$0FE5<br/>YELLOW"]
|
||||||
end
|
end
|
||||||
|
|
||||||
R --> CRASH["coldCrash<br/>LED blink ×10<br/>→ RESET"]
|
R --> CRASH["coldCrash<br/>LED blink ×10<br/>→ RESET"]
|
||||||
|
|
@ -541,13 +564,13 @@ This section maps observable symptoms to the specific source code paths that pro
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart TD
|
flowchart TD
|
||||||
subgraph "Observable Symptoms"
|
subgraph "Observable Symptoms"
|
||||||
BLACK["⬛ Black Screen<br/>No brightness change"]
|
BLACK["Black Screen<br/>No brightness change"]
|
||||||
GREY["🟫 Grey Flash → Black"]
|
GREY["Grey Flash → Black"]
|
||||||
GREEN["🟩 Solid Green Screen<br/>+ LED blinks"]
|
GREEN["Solid Green Screen<br/>+ LED blinks"]
|
||||||
RED["🟥 Solid Red Screen<br/>+ LED blinks"]
|
RED["Solid Red Screen<br/>+ LED blinks"]
|
||||||
YELLOW["🟨 Yellow Screen<br/>+ LED blinks"]
|
YELLOW["Yellow Screen<br/>+ LED blinks"]
|
||||||
PURPLE["🟪 Purple Screen<br/>Hangs"]
|
PURPLE["Purple Screen<br/>Hangs"]
|
||||||
REDSYS["🟥 Red Screen with<br/>device listing + text"]
|
REDSYS["Red Screen with<br/>device listing + text"]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph "Source Code Path"
|
subgraph "Source Code Path"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue