4.4 KiB
ECS Sprite Enhancements
Overview
ECS Denise (MOS 8373) extends the OCS sprite hardware with three register-level enhancements while maintaining full backward compatibility. All eight sprite DMA channels, data formats, and color mapping rules remain identical to OCS — ECS adds control over where sprites appear and at what resolution they render.
What Changed from OCS
| Feature | OCS (Denise 8362) | ECS (Denise 8373) | Register |
|---|---|---|---|
| Border visibility | Sprites clipped to display window | Sprites visible in border area | BPLCON3 bit 3 |
| Pixel resolution | Tied to playfield mode | Independent: lores/hires/shres | BPLCON3 bits 7-6 |
| Color bank select | Fixed: COLOR16–COLOR31 | Upper bits selectable (AGA prep) | BPLCON3 bits 15-13 |
BPLCON3 Sprite Bits ($DFF106)
All ECS sprite enhancements are controlled through the BPLCON3 register. On OCS hardware, this register does not exist — writes are silently ignored.
bit 15-13: BANK2:0 Sprite color bank select (upper bits of color index)
bit 7-6: SPRES1:0 Sprite resolution
bit 3: BRDSPRT Enable sprites in border area
SPRES — Independent Sprite Resolution
ECS decouples sprite pixel width from the playfield display mode. This allows sprites to have a different pixel clock than the background:
| SPRES1:0 | Pixel Width | Pixel Clock | Use Case |
|---|---|---|---|
00 |
Follow playfield | — | OCS-compatible default |
01 |
Lores (140ns) | ~7.09 MHz | Large, chunky sprites on hires backgrounds |
10 |
Hires (70ns) | ~14.18 MHz | Fine-detail sprites on lores backgrounds |
11 |
Super-hires (35ns) | ~28.37 MHz | Maximum resolution sprites (productivity modes) |
; Set sprites to hires resolution independent of playfield
move.w #$0080, $DFF106 ; BPLCON3: SPRES1:0 = %10 (hires)
Note
SPRES affects the horizontal pixel resolution of all 8 sprite channels globally. Individual per-sprite resolution is not possible.
BRDSPRT — Border Sprite Enable
On OCS, sprites outside the display window boundaries (DIWSTRT/DIWSTOP) are clipped. ECS allows sprites to appear in the overscan border area:
; Enable sprites in border region
move.w #$0008, $DFF106 ; BPLCON3: BRDSPRT = 1
This is useful for status bars, score displays, or HUD elements positioned outside the scrolling playfield.
BANK — Sprite Color Bank (AGA Preparation)
BPLCON3 bits 15-13 provide upper bits for the sprite color register index. On ECS hardware these bits have limited practical use (only 32 color registers exist), but they establish the register interface that AGA's 256-color sprite palette builds upon.
"Half-ECS" Trap
Warning
Many Amigas shipped with ECS Agnus (Super Agnus 8372A) but OCS Denise (8362). This configuration — common in late A500 boards and some A2000 revisions — provides 2 MB Chip RAM addressing but no sprite enhancements. Writing to
BPLCON3on these machines has no effect.Always check for ECS Denise specifically:
if (GfxBase->ChipRevBits0 & (1 << GFXB_HR_DENISE)) { /* Safe to use BPLCON3 sprite features */ }
Programming Notes
- All ECS sprite changes are backward-compatible: leaving
BPLCON3at$0000gives identical behavior to OCS SPRESonly affects horizontal resolution — vertical resolution is always 1 pixel per scanlineBRDSPRTworks with both standard and attached sprites- Sprite DMA format, pointer registers, and collision detection (
CLXCON/CLXDAT) are unchanged from OCS
See Also
- OCS Sprite Hardware — base register reference (SPRxPOS/CTL/DATA, color mapping)
- AGA Sprite Enhancements — wider sprites, FMODE, 256-color palette banks
- Sprites — Graphics Programming Guide — OS API, techniques, antipatterns
- ECS Chipset Internals — Super Agnus and ECS Denise overview
- ECS Register Deltas — complete BPLCON3 bit definition
References
- Amiga Hardware Reference Manual 3rd ed. — Appendix F (ECS extensions)
- ADCD 2.1 Hardware Manual — ECS Denise sprite section
- NDK39:
hardware/custom.h— BPLCON3 definition