mirror of
https://github.com/alfishe/amiga-bootcamp.git
synced 2026-06-12 16:16:28 +00:00
3.7 KiB
3.7 KiB
AGA Display Modes
Overview
AGA introduces several new display modes and extends existing ones, enabled via the OS screenmode system (graphics/modeid.h) and OpenScreenTags().
Mode ID System
AmigaOS uses 32-bit ModeIDs to identify display modes. The format is:
[Monitor ID (16 bits)] | [Mode flags (16 bits)]
Key AGA monitor IDs:
#define PAL_MONITOR_ID 0x00000000
#define NTSC_MONITOR_ID 0x00010000
#define A2024_MONITOR_ID 0x00020000
#define VGA_MONITOR_ID 0x00031000 /* ECS productivity */
#define A2024_10HZ_ID 0x00040000
#define DBLPAL_MONITOR_ID 0x00420000 /* AGA double PAL */
#define DBLNTSC_MONITOR_ID 0x00400000 /* AGA double NTSC */
#define SUPER72_MONITOR_ID 0x00080000
Mode flags (lower 16 bits):
#define LORES_KEY 0x0000 /* 320 wide (PAL) */
#define HIRES_KEY 0x8000 /* 640 wide */
#define HAM_KEY 0x0800 /* HAM mode */
#define EXTRAHALFBRITE_KEY 0x0080 /* EHB */
#define LACE_KEY 0x0004 /* interlace */
Standard AGA Modes
| Mode ID | Resolution | Colors | H rate |
|---|---|---|---|
PAL_MONITOR_ID | LORES_KEY |
320×256 | 256 | 15.6 kHz |
PAL_MONITOR_ID | HIRES_KEY |
640×256 | 256 | 15.6 kHz |
PAL_MONITOR_ID | HIRES_KEY | LACE_KEY |
640×512 | 256 | 15.6 kHz (interlace) |
DBLPAL_MONITOR_ID | LORES_KEY |
320×512 | 256 | 31.25 kHz |
DBLPAL_MONITOR_ID | HIRES_KEY |
640×512 | 256 | 31.25 kHz |
PAL_MONITOR_ID | LORES_KEY | HAM_KEY |
320×256 | 262,144 (HAM8) | 15.6 kHz |
SUPER72_MONITOR_ID | HIRES_KEY |
800×600 (approx) | 256 | 28+ kHz |
Opening an AGA Screen (OS 3.1)
#include <intuition/screens.h>
#include <graphics/modeid.h>
#include <proto/intuition.h>
struct Screen *scr;
/* 256-color AGA screen, PAL, 320×256 */
scr = OpenScreenTags(NULL,
SA_DisplayID, PAL_MONITOR_ID | LORES_KEY,
SA_Width, 320,
SA_Height, 256,
SA_Depth, 8, /* 8 bitplanes = 256 colors */
SA_Colors32, (ULONG)color_table, /* LoadRGB32 format */
SA_Title, (ULONG)"My AGA Screen",
SA_Quiet, TRUE,
TAG_DONE);
HAM8 Screen
scr = OpenScreenTags(NULL,
SA_DisplayID, PAL_MONITOR_ID | LORES_KEY | HAM_KEY,
SA_Width, 320,
SA_Height, 256,
SA_Depth, 8,
TAG_DONE);
Note
HAM8 screens require 8 bitplanes. The display system automatically programmes BPLCON0 with HAM=1. The first 64 color registers are used as the HAM8 index palette.
BestModeID() — Querying Available Modes
#include <proto/graphics.h>
ULONG modeid = BestModeID(
BIDTAG_NominalWidth, 640,
BIDTAG_NominalHeight, 512,
BIDTAG_Depth, 8,
BIDTAG_MonitorID, DBLPAL_MONITOR_ID,
TAG_DONE);
if (modeid == INVALID_ID) {
/* Requested mode not available */
}
Double Scan Modes (DblPAL / DblNTSC)
DBLPAL and DBLNTSC modes use AGA's scan doubler to produce non-interlaced 31 kHz output from PAL/NTSC timing:
- DblPAL: 320×512 or 640×512, 31.25 kHz — compatible with VGA monitors
- DblNTSC: 320×400 or 640×400, 31.47 kHz
These require a multisync monitor and AGA chipset. The A1200 can drive a 1084S in scan-doubled mode.
Super72 Mode
Super72 provides approximately 800×600 resolution at ~28 kHz horizontal:
- Used by some Workbench productivity configurations
- Requires multisync monitor
- Available via
SUPER72_MONITOR_ID
References
- NDK39:
graphics/modeid.h— all monitor and mode ID definitions - ADCD 2.1:
Libraries_Manual_guide/— graphics.library OpenScreen - Autodocs:
BestModeID,OpenScreenTags - AmigaMail Vol. 2 — AGA display mode programming