Amiga Custom Chip Register Reference

Complete hardware register map for all three Amiga chip generations — OCS (Original Chip Set, 1985), ECS (Enhanced Chip Set, 1988–1990), and AGA (Advanced Graphics Architecture, 1992–1994). Sources: the OCS/ECS register table from the Amiga Hardware Reference Manual (Commodore-Amiga, 1992), the AGA additions from the AA chip set feature summary, and the per-register descriptions from the amiga-dev.wikidot.com community wiki (hardware:<NAME> pages, accessed 2026).

Detailed register descriptions

Click on any register name in the table above to jump to the corresponding detailed description. Registers that share the same hardware definition are documented together, with an anchor for every individual register name. The descriptions are aligned with the per-register pages linked from the amiga-dev hardware reference.

Register addresses are shown as offsets from $DFF000 for custom chips and $BFE000/$BFD000 for CIA chips. All custom-chip registers are 16-bit unless noted. Access modes: R = read-only, W = write-only, ER = early read (dummy), RW = read/write, S = strobe.

Note: The addresses shown here are used by the special custom chips (Paula, Agnus/Alice, and Denise/Lisa) for transferring data among themselves. The Copper uses these addresses for writing to the special chip registers.

OCS / ECS / AGA Custom Chip Registers

Address Name Access OCS ECS AGA Description
$DFF000 BLTDDAT ER Blitter dest. early read (dummy address)
$DFF002 DMACONR R Dma control (and blitter status) read
$DFF004 VPOSR R Read vertical most sig. bits (and frame flop)
$DFF006 VHPOSR R Read vert and horiz position of beam
$DFF008 DSKDATR ER Disk data early read (dummy address)
$DFF00A JOY0DAT R Joystick-mouse 0 data (vert, horiz)
$DFF00C JOY1DAT R Joystick-mouse 1 data (vert, horiz)
$DFF00E CLXDAT R Collision data reg. (read and clear)
$DFF010 ADKCONR R Audio,disk control register read
$DFF012 POT0DAT R Pot counter data left pair (vert, horiz)
$DFF014 POT1DAT R Pot counter data right pair (vert, horiz)
$DFF016 POTINP R Pot pin data read
$DFF018 SERDATR R Serial port data and status read
$DFF01A DSKBYTR R Disk data byte and status read
$DFF01C INTENAR R Interrupt enable bits read
$DFF01E INTREQR R Interrupt request bits read
$DFF020 DSKPTH W Disk pointer (high 5 bits, was 3 bits)
$DFF022 DSKPTL W Disk pointer (low 15 bits)
$DFF024 DSKLEN W Disk length
$DFF026 DSKDAT W Disk DMA data write
$DFF028 REFPTR W Refresh pointer
$DFF02A VPOSW W Write vert most sig. bits (and frame flop)
$DFF02C VHPOSW W Write vert and horiz pos of beam
$DFF02E COPCON W Coprocessor control
$DFF030 SERDAT W Serial port data and stop bits write
$DFF032 SERPER W Serial port period and control
$DFF034 POTGO W Pot count start,pot pin drive enable data
$DFF036 JOYTEST W Write to all 4 joystick-mouse counters at once
$DFF038 STREQU S Strobe for horiz sync with VB and EQU
$DFF03A STRVBL S Strobe for horiz sync with VB (vert blank)
$DFF03C STRHOR S Strobe for horiz sync
$DFF03E STRLONG S Strobe for identification of long horiz line
$DFF040 BLTCON0 W Blitter control register 0
$DFF042 BLTCON1 W Blitter control register 1
$DFF044 BLTAFWM W Blitter first word mask for source A
$DFF046 BLTALWM W Blitter last word mask for source A
$DFF048 BLTCPTH W Blitter pointer to source C (high 5 bits, was 3 bits)
$DFF04A BLTCPTL W Blitter pointer to source C (low 15 bits)
$DFF04C BLTBPTH W Blitter pointer to source B (high 5 bits, was 3 bits)
$DFF04E BLTBPTL W Blitter pointer to source B (low 15 bits)
$DFF050 BLTAPTH W Blitter pointer to source A (high 5 bits, was 3 bits)
$DFF052 BLTAPTL W Blitter pointer to source A (low 15 bits)
$DFF054 BLTDPTH W Blitter pointer to dest D (high 5 bits, was 3 bits)
$DFF056 BLTDPTL W Blitter pointer to dest D (low 15 bits)
$DFF058 BLTSIZE W Blitter start and size (win/width,height)
$DFF05A BLTCON0L W Blitter control 0, lower 8 bits (minterms)
$DFF05C BLTSIZV W Blitter V size (for 15 bit vertical size)
$DFF05E BLTSIZH W Blitter H size and start (for 11 bit H size)
$DFF060 BLTCMOD W Blitter modulo for source C
$DFF062 BLTBMOD W Blitter modulo for source B
$DFF064 BLTAMOD W Blitter modulo for source A
$DFF066 BLTDMOD W Blitter modulo for dest D
$DFF070 BLTCDAT W Blitter source C data register
$DFF072 BLTBDAT W Blitter source B data register
$DFF074 BLTADAT W Blitter source A data register
$DFF078 SPRHDAT W Ext. logic UHRES sprite pointer and data identifier
$DFF07A BPLHDAT W Ext. logic UHRES bit plane identifier
$DFF07C DENISEID R Chip revision level for Denise/Lisa (video out chip)
$DFF07E DSKSYNC W Disk sync pattern reg for disk read
$DFF080 COP1LCH W Coprocessor 1st location (high 5 bits,was 3 bits)
$DFF082 COP1LCL W Coprocessor 1st location (low 15 bits)
$DFF084 COP2LCH W Coprocessor 2nd location(high 5 bits,was 3 bits)
$DFF086 COP2LCL W Coprocessor 2nd location (low 15 bits)
$DFF088 COPJMP1 S Coprocessor restart at 1st location
$DFF08A COPJMP2 S Coprocessor restart at 2nd location
$DFF08C COPINS S Coprocessor inst fetch identify
$DFF08E DIWSTRT W Display window start (upper left vert,horiz pos)
$DFF090 DIWSTOP W Display window stop (lower right vert,horiz pos)
$DFF092 DDFSTRT W Display bit plane data fetch start,horiz pos
$DFF094 DDFSTOP W Display bit plane data fetch stop,horiz pos
$DFF096 DMACON W DMA control write (clear or set)
$DFF098 CLXCON W Collision control
$DFF09A INTENA W Interrupt enable bits (clear or set bits)
$DFF09C INTREQ W Interrupt request bits (clear or set bits)
$DFF09E ADKCON W Audio,disk,UART control
$DFF0A0 AUD0LCH W Audio channel 0 location (high 5 bits was 3 bits)
$DFF0A2 AUD0LCL W Audio channel 0 location (low 15 bits)
$DFF0A4 AUD0LEN W Audio channel 0 length
$DFF0A6 AUD0PER W Audio channel 0 period
$DFF0A8 AUD0VOL W Audio channel 0 volume
$DFF0AA AUD0DAT W Audio channel 0 data
$DFF0B0 AUD1LCH W Audio channel 1 location (high 5 bits was 3 bits)
$DFF0B2 AUD1LCL W Audio channel 1 location (low 15 bits)
$DFF0B4 AUD1LEN W Audio channel 1 length
$DFF0B6 AUD1PER W Audio channel 1 period
$DFF0B8 AUD1VOL W Audio channel 1 volume
$DFF0BA AUD1DAT W Audio channel 1 data
$DFF0C0 AUD2LCH W Audio channel 2 location (high 5 bits was 3 bits)
$DFF0C2 AUD2LCL W Audio channel 2 location (low 15 bits)
$DFF0C4 AUD2LEN W Audio channel 2 length
$DFF0C6 AUD2PER W Audio channel 2 period
$DFF0C8 AUD2VOL W Audio channel 2 volume
$DFF0CA AUD2DAT W Audio channel 2 data
$DFF0D0 AUD3LCH W Audio channel 3 location (high 5 bits was 3 bits)
$DFF0D2 AUD3LCL W Audio channel 3 location (low 15 bits)
$DFF0D4 AUD3LEN W Audio channel 3 length
$DFF0D6 AUD3PER W Audio channel 3 period
$DFF0D8 AUD3VOL W Audio channel 3 volume
$DFF0DA AUD3DAT W Audio channel 3 data
$DFF0E0 BPL1PTH W Bitplane pointer 1 (high 5 bits was 3 bits)
$DFF0E2 BPL1PTL W Bitplane pointer 1 (low 15 bits)
$DFF0E4 BPL2PTH W Bitplane pointer 2 (high 5 bits was 3 bits)
$DFF0E6 BPL2PTL W Bitplane pointer 2 (low 15 bits)
$DFF0E8 BPL3PTH W Bitplane pointer 3 (high 5 bits was 3 bits)
$DFF0EA BPL3PTL W Bitplane pointer 3 (low 15 bits)
$DFF0EC BPL4PTH W Bitplane pointer 4 (high 5 bits was 3 bits)
$DFF0EE BPL4PTL W Bitplane pointer 4 (low 15 bits)
$DFF0F0 BPL5PTH W Bitplane pointer 5 (high 5 bits was 3 bits)
$DFF0F2 BPL5PTL W Bitplane pointer 5 (low 15 bits)
$DFF0F4 BPL6PTH W Bitplane pointer 6 (high 5 bits was 3 bits)
$DFF0F6 BPL6PTL W Bitplane pointer 6 (low 15 bits)
$DFF0F8 BPL7PTH W Bitplane pointer 7 (high 5 bits was 3 bits)
$DFF0FA BPL7PTL W Bitplane pointer 7 (low 15 bits)
$DFF0FC BPL8PTH W Bitplane pointer 8 (high 5 bits was 3 bits)
$DFF0FE BPL8PTL W Bitplane pointer 8 (low 15 bits)
$DFF100 BPLCON0 W Bitplane control (miscellaneous control bits)
$DFF102 BPLCON1 W Bitplane control (scroll value)
$DFF104 BPLCON2 W Bitplane control (video priority control)
$DFF106 BPLCON3 W Bitplane control (enhanced features)
$DFF108 BPL1MOD W Bitplane modulo (odd planes)
$DFF10A BPL2MOD W Bitplane modulo (even planes)
$DFF10C BPLCON4 W Bitplane control (bitplane and sprite-masks)
$DFF10E CLXCON2 W Extended collision control
$DFF110 BPL1DAT W Bitplane 1 data (parallel to serial convert)
$DFF112 BPL2DAT W Bitplane 2 data (parallel to serial convert)
$DFF114 BPL3DAT W Bitplane 3 data (parallel to serial convert)
$DFF116 BPL4DAT W Bitplane 4 data (parallel to serial convert)
$DFF118 BPL5DAT W Bitplane 5 data (parallel to serial convert)
$DFF11A BPL6DAT W Bitplane 6 data (parallel to serial convert)
$DFF11C BPL7DAT W Bitplane 7 data (parallel to serial convert)
$DFF11E BPL8DAT W Bitplane 8 data (parallel to serial convert)
$DFF120 SPR0PTH W Sprite 0 pointer (high 5 bits was 3 bits)
$DFF122 SPR0PTL W Sprite 0 pointer (low 15 bits)
$DFF124 SPR1PTH W Sprite 1 pointer (high 5 bits was 3 bits)
$DFF126 SPR1PTL W Sprite 1 pointer (low 15 bits)
$DFF128 SPR2PTH W Sprite 2 pointer (high 5 bits was 3 bits)
$DFF12A SPR2PTL W Sprite 2 pointer (low 15 bits)
$DFF12C SPR3PTH W Sprite 3 pointer (high 5 bits was 3 bits)
$DFF12E SPR3PTL W Sprite 3 pointer (low 15 bits)
$DFF130 SPR4PTH W Sprite 4 pointer (high 5 bits was 3 bits)
$DFF132 SPR4PTL W Sprite 4 pointer (low 15 bits)
$DFF134 SPR5PTH W Sprite 5 pointer (high 5 bits was 3 bits)
$DFF136 SPR5PTL W Sprite 5 pointer (low 15 bits)
$DFF138 SPR6PTH W Sprite 6 pointer (high 5 bits was 3 bits)
$DFF13A SPR6PTL W Sprite 6 pointer (low 15 bits)
$DFF13C SPR7PTH W Sprite 7 pointer (high 5 bits was 3 bits)
$DFF13E SPR7PTL W Sprite 7 pointer (low 15 bits)
$DFF140 SPR0POS W Sprite 0 vert,horiz start pos data
$DFF142 SPR0CTL W Sprite 0 position and control data
$DFF144 SPR0DATA W Sprite 0 image data register A
$DFF146 SPR0DATB W Sprite 0 image data register B
$DFF148 SPR1POS W Sprite 1 vert,horiz start pos data
$DFF14A SPR1CTL W Sprite 1 position and control data
$DFF14C SPR1DATA W Sprite 1 image data register A
$DFF14E SPR1DATB W Sprite 1 image data register B
$DFF150 SPR2POS W Sprite 2 vert,horiz start pos data
$DFF152 SPR2CTL W Sprite 2 position and control data
$DFF154 SPR2DATA W Sprite 2 image data register A
$DFF156 SPR2DATB W Sprite 2 image data register B
$DFF158 SPR3POS W Sprite 3 vert,horiz start pos data
$DFF15A SPR3CTL W Sprite 3 position and control data
$DFF15C SPR3DATA W Sprite 3 image data register A
$DFF15E SPR3DATB W Sprite 3 image data register B
$DFF160 SPR4POS W Sprite 4 vert,horiz start pos data
$DFF162 SPR4CTL W Sprite 4 position and control data
$DFF164 SPR4DATA W Sprite 4 image data register A
$DFF166 SPR4DATB W Sprite 4 image data register B
$DFF168 SPR5POS W Sprite 5 vert,horiz start pos data
$DFF16A SPR5CTL W Sprite 5 position and control data
$DFF16C SPR5DATA W Sprite 5 image data register A
$DFF16E SPR5DATB W Sprite 5 image data register B
$DFF170 SPR6POS W Sprite 6 vert,horiz start pos data
$DFF172 SPR6CTL W Sprite 6 position and control data
$DFF174 SPR6DATA W Sprite 6 image data register A
$DFF176 SPR6DATB W Sprite 6 image data register B
$DFF178 SPR7POS W Sprite 7 vert,horiz start pos data
$DFF17A SPR7CTL W Sprite 7 position and control data
$DFF17C SPR7DATA W Sprite 7 image data register A
$DFF17E SPR7DATB W Sprite 7 image data register B
$DFF180 COLOR00 W Color table 0
$DFF182 COLOR01 W Color table 1
$DFF184 COLOR02 W Color table 2
$DFF186 COLOR03 W Color table 3
$DFF188 COLOR04 W Color table 4
$DFF18A COLOR05 W Color table 5
$DFF18C COLOR06 W Color table 6
$DFF18E COLOR07 W Color table 7
$DFF190 COLOR08 W Color table 8
$DFF192 COLOR09 W Color table 9
$DFF194 COLOR10 W Color table 10
$DFF196 COLOR11 W Color table 11
$DFF198 COLOR12 W Color table 12
$DFF19A COLOR13 W Color table 13
$DFF19C COLOR14 W Color table 14
$DFF19E COLOR15 W Color table 15
$DFF1A0 COLOR16 W Color table 16
$DFF1A2 COLOR17 W Color table 17
$DFF1A4 COLOR18 W Color table 18
$DFF1A6 COLOR19 W Color table 19
$DFF1A8 COLOR20 W Color table 20
$DFF1AA COLOR21 W Color table 21
$DFF1AC COLOR22 W Color table 22
$DFF1AE COLOR23 W Color table 23
$DFF1B0 COLOR24 W Color table 24
$DFF1B2 COLOR25 W Color table 25
$DFF1B4 COLOR26 W Color table 26
$DFF1B6 COLOR27 W Color table 27
$DFF1B8 COLOR28 W Color table 28
$DFF1BA COLOR29 W Color table 29
$DFF1BC COLOR30 W Color table 30
$DFF1BE COLOR31 W Color table 31
$DFF1C0 HTOTAL W Highest number count, horiz line (VARBEAMEN=1)
$DFF1C2 HSSTOP W Horizontal line position for HSYNC stop
$DFF1C4 HBSTRT W Horizontal line position for HBLANK start
$DFF1C6 HBSTOP W Horizontal line position for HBLANK stop
$DFF1C8 VTOTAL W Highest numbered vertical line (VARBEAMEN=1)
$DFF1CA VSSTOP W Vertical line position for VSYNC stop
$DFF1CC VBSTRT W Vertical line for VBLANK start
$DFF1CE VBSTOP W Vertical line for VBLANK stop
$DFF1D0 SPRHSTRT W UHRES sprite vertical start
$DFF1D2 SPRHSTOP W UHRES sprite vertical stop
$DFF1D4 BPLHSTRT W UHRES bit plane vertical start
$DFF1D6 BPLHSTOP W UHRES bit plane vertical stop
$DFF1D8 HHPOSW W DUAL mode hires H beam counter write
$DFF1DA HHPOSR R DUAL mode hires H beam counter read
$DFF1DC BEAMCON0 W Beam counter control register (SHRES,UHRES,PAL)
$DFF1DE HSSTRT W Horizontal sync start (VARHSY)
$DFF1E0 VSSTRT W Vertical sync start (VARVSY)
$DFF1E2 HCENTER W Horizontal position for Vsync on interlace
$DFF1E4 DIWHIGH W Display window - upper bits for start/stop
$DFF1E6 BPLHMOD W UHRES bit plane modulo
$DFF1E8 SPRHPTH W UHRES sprite pointer (high 5 bits)
$DFF1EA SPRHPTL W UHRES sprite pointer (low 15 bits)
$DFF1EC BPLHPTH W VRam (UHRES) bitplane pointer (hi 5 bits)
$DFF1EE BPLHPTL W VRam (UHRES) bitplane pointer (lo 15 bits)
$DFF1FC FMODE W Fetch mode register

ADKCONR

Registers: ADKCONR $DFF010 (R), ADKCON $DFF09E (W)
Description: Audio, Disk, UART control (read/write pair)

ADKCONR reads the Audio/Disk/UART control state; ADKCON is the write-side register. Bit 15 selects set/clear semantics: bits written as zero are left unchanged.

Bit Function Description
15 SET/CLEAR Set/clear control bit
14-13 PRECOMP Precompensation: 00 none, 01 140 ns, 10 280 ns, 11 560 ns
12 MFMPREC 1 = MFM precomp, 0 = GCR precomp
11 UARTBRK Force UART break (clear TXD)
10 WORDSYNC Synchronize disk read on the word in DSKSYNC
09 MSBSYNC Synchronize disk read on the MSB (GCR)
08 FAST Disk clock rate: 1 = fast (2 us), 0 = slow (4 us)
07 USE3PN Audio channel 3 modulates no following channel period
06 USE2P3 Channel 2 modulates channel 3 period
05 USE1P2 Channel 1 modulates channel 2 period
04 USE0P1 Channel 0 modulates channel 1 period
03 USE3VN Audio channel 3 modulates no following channel volume
02 USE2V3 Channel 2 modulates channel 3 volume
01 USE1V2 Channel 1 modulates channel 2 volume
00 USE0V1 Channel 0 modulates channel 1 volume

If both period and volume modulation are enabled for the same channel, successive AUDxDAT words alternate between volume and period data.

AUDxDAT

Registers: AUD0DAT $DFF0AA (W), AUD1DAT $DFF0BA (W), AUD2DAT $DFF0CA (W), AUD3DAT $DFF0DA (W)
Description: Audio channel x DMA data buffer

This register family is the audio channel x (x = 0..3) DMA data buffer. Each word contains two signed 8-bit samples, output sequentially through the D/A converter. Audio DMA normally loads the register from Chip RAM, but the processor can also write it directly. When the programmed DMA length has been exhausted and the buffered data has been consumed, the corresponding audio-channel interrupt request is set.

AUDxLCH / AUDxLCL

Registers: AUD0LCH $DFF0A0 (W), AUD0LCL $DFF0A2 (W), AUD1LCH $DFF0B0 (W), AUD1LCL $DFF0B2 (W), AUD2LCH $DFF0C0 (W), AUD2LCL $DFF0C2 (W), AUD3LCH $DFF0D0 (W), AUD3LCL $DFF0D2 (W)
Description: Audio channel x DMA location (high/low pointer words)

Each AUDxLCH/AUDxLCL pair contains the starting address of audio channel x DMA data. The high register supplies the upper address bits and the low register the low 15 bits. Unlike a running DMA pointer, this location value only needs to be reloaded when the sample data is moved to a different memory address.

AUDxLEN

Registers: AUD0LEN $DFF0A4 (W), AUD1LEN $DFF0B4 (W), AUD2LEN $DFF0C4 (W), AUD3LEN $DFF0D4 (W)
Description: Audio channel x DMA length

AUDxLEN contains the length, in words, of the DMA data for audio channel x.

AUDxPER

Registers: AUD0PER $DFF0A6 (W), AUD1PER $DFF0B6 (W), AUD2PER $DFF0C6 (W), AUD3PER $DFF0D6 (W)
Description: Audio channel x period

AUDxPER contains the period (rate) for audio channel x DMA data transfer. The documented minimum period is 124 clocks; smaller programmed values should not be used.

AUDxVOL

Registers: AUD0VOL $DFF0A8 (W), AUD1VOL $DFF0B8 (W), AUD2VOL $DFF0C8 (W), AUD3VOL $DFF0D8 (W)
Description: Audio channel x volume

AUDxVOL sets the volume for audio channel x. Bits 5-0 select one of 64 linear levels; bit 6 forces maximum volume. Bits 15-7 are unused.

Bits Function
15-07 Not used
06 Force maximum volume
05-00 Linear volume level (000000 = off, 111111 = level 63)

BEAMCON0

Registers: BEAMCON0 $DFF1DC (W)
Description: Beam counter control register (SHRES,UHRES,PAL)

BEAMCON0 controls programmable beam timing, synchronization polarity and use of the alternate high-resolution beam counter.

Bit Function
15 Unused
14 HARDDIS
13 LPENDIS
12 VARVBEN
11 LOLDIS
10 CSCBEN
09 VARVSYEN
08 VARHSYEN
07 VARBEAMEN
06 DUAL
05 PAL
04 VARCSYEN
03 Unused (formerly BLANKEN)
02 CSYTRUE
01 VSYTRUE
00 HSYTRUE

HARDDIS disables the hardwired display-window limits. LPENDIS selects whether beam-position reads use the light-pen latch. VARVBEN, VARVSYEN, VARHSYEN, VARBEAMEN and VARCSYEN enable the programmable blank/sync/beam comparators. DUAL selects the alternate horizontal beam counter, PAL selects PAL timing in normal mode, and the three *TRUE bits select sync polarities.

BLTAFWM

Registers: BLTAFWM $DFF044 (W), BLTALWM $DFF046 (W)
Description: Blitter first/last word masks for source A

The patterns in the two registers are "anded" with the first and last words of each line of data from Source A into the Blitter. A zero in any bit overrides data from Source A. These registers should be set to all "ones" for fill mode or for line drawing mode.

BLTCON0

Registers: BLTCON0 $DFF040 (W), BLTCON1 $DFF042 (W), BLTCON0L $DFF05A (W)
Description: Blitter control registers

These two control registers are used together to control blitter operations. There are 2 basic modes, are and line, which are selected by bit 0 of BLTCON1, as show below.

Bit BLTCON0 (AREA MODE) BLTCON1 (AREA MODE) Bit BLTCON0 (LINE MODE) BLTCON1 (LINE MODE)
15 ASH3 BSH3 15 ASH3 BSH3
14 ASH2 BSH2 14 ASH2 BSH2
13 ASH1 BSH1 13 ASH1 BSH1
12 ASA0 BSH0 12 ASH0 BSH0
11 USEA 0 11 1 0
10 USEB 0 10 0 0
09 USEC 0 09 1 0
08 USED 0 08 1 0
07 LF7 DOFF 07 LF7 DPFF
06 LF6 0 06 LF6 SIGN
05 LF5 0 05 LF5 OVF
04 LF4 EFE 04 LF4 SUD
03 LF3 IFE 03 LF3 SUL
02 LF2 FCI 02 LF2 AUL
01 LF1 DESC 01 LF1 SING
00 LF0 LINE(=0) 00 LF0 LINE(=1)
Function Description
ASH3-0 Shift value of A source
BSH3-0 Shift value of B source and line texture
USEA Mode control bit to use source A
USEB Mode control bit to use source B
USEC Mode control bit to use source C
USED Mode control bit to use destination D
LF7-0 Logic function minterm select lines
EFE Exclusive fill enable
IFE Inclusive fill enable
FCI Fill carry input
DESC Descending (dec address)control bit
LINE Line mode control bit
SIGN Line draw sign flag
OVF Line/draw r/l word overflow flag
SUD Line draw, Sometimes up or down (=AUD)
SUL Line draw, Sometimes up or left
AUL Line draw, Always up or left
SING Line draw, Single bit per horiz line. Disables the D output- for external ALUs
DOFF The cycle occurs normally, but the data bus is tristate (hires chips only)

BLTDDAT

Registers: BLTDDAT $DFF000 (ER)
Description: Blitter dest. early read (dummy address)

This register holds the data resulting from each word of Blitter operation until it is sent to a RAM destination. This is a dummy address and cannot be read by the microprocessor. The transfer is automatic during Blitter operation.

BLTSIZE

Registers: BLTSIZE $DFF058 (W)
Description: Blitter start and size (win/width,height)

This register contains the width and height of the blitter operation (in line mode width must = 2, height = line length). Writing to this register will start the Blitter, and should be done last, after all pointers and control registers have been initialized.

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value H9 H8 H7 H6 H5 H4 H3 H2 H1 H0 W5 W4 W3 W2 W1 W0

H = Height = Vertical lines (10 bits = 1024 lines max) W = Width = Horiz pixels (6 bits = 64 words = 1024 pixels max)

BLTSIZH

Registers: BLTSIZH $DFF05E (W)
Description: Blitter H size and start (for 11 bit H size)

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 0 0 0 W10 W9 W8 W7 W6 W5 W4 W3 W2 W1 W0

BLTSIZV

Registers: BLTSIZV $DFF05C (W)
Description: Blitter V size (for 15 bit vertical size)

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 H14 H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1 H0

These are the blitter size regs for blits larger than the earlier chips could accept. The original commands are retained for compatibility. BLTSIZV should be written first, followed by BLTSIZH, which starts the blitter. BLTSIZV need not be rewritten for subsequent bits if the vertical size is the same. Max size of blit 32k pixels * 32k lines.

BLTxDAT

Registers: BLTCDAT $DFF070 (W), BLTBDAT $DFF072 (W), BLTADAT $DFF074 (W)
Description: Blitter source x data registers

These registers hold source x data (x = A, B, C) for the Blitter. They are normally loaded by the Blitter DMA channels, but they may also be preloaded by the processor. In line mode, BLTADAT is used as an index register and BLTBDAT provides the line texture.

BLTxMOD

Registers: BLTCMOD $DFF060 (W), BLTBMOD $DFF062 (W), BLTAMOD $DFF064 (W), BLTDMOD $DFF066 (W)
Description: Blitter modulo registers

Each Blitter source (A, B, C) and destination (D) has its own modulo. The signed modulo value is added to that channel's address at the end of each line so the pointer advances to the start of the next line. Separate modulos allow source and destination rasters to have different row strides.

BLTxPTH / BLTxPTL

Registers: BLTCPTH $DFF048 (W), BLTCPTL $DFF04A (W), BLTBPTH $DFF04C (W), BLTBPTL $DFF04E (W), BLTAPTH $DFF050 (W), BLTAPTL $DFF052 (W), BLTDPTH $DFF054 (W), BLTDPTL $DFF056 (W)
Description: Blitter source/destination pointer registers

Each BLTxPTH/BLTxPTL pair contains the DMA address for Blitter source x (A, B, C) or destination D. The pointer must be initialized to the start of the data before a blit. When the Blitter finishes, it contains the final data address after the normal increments and modulo adjustments.

BPLCON0

Registers: BPLCON0 $DFF100 (W)
Description: Bitplane control (miscellaneous control bits)

BPLCON0 selects the main display modes and several video-control functions.

Bit Function Description
15 HIRES High-resolution display mode
14-12 BPUx Number of bitplanes in use
11 HAM Hold-And-Modify mode
10 DPF Dual-playfield mode; with 6 planes, HAM=0 and DPF=0, selects Extra-Halfbrite behavior
09 COLOR Enable color-burst output
08 GAUD Genlock audio enable on the ZD pin during blanking
07 UHRES Enable Ultra-Hi-Res pointers; also disables hard display-window stops
06 SHRES Super-hi-res mode (35 ns pixel width)
05 BYPASS Bypass the color table and output 8-bit bitplane data directly
04 BPU3 Additional bitplane-count bit
03 LPEN Light-pen enable
02 LACE Interlace enable
01 ERSY External resync; HSYNC/VSYNC pads become inputs
00 ECSENA Enable ECS-dependent BPLCON3 functions

When ECSENA is low, BRDRBLNK, BRDNTRAN, ZDCLKEN, BRDSPRT and EXTBLKEN in BPLCON3 are inhibited even if programmed.

BPLCON1

Registers: BPLCON1 $DFF102 (W)
Description: Bitplane control (scroll value)

BPLCON1 contains the horizontal scroll values for playfield 1 and playfield 2. On the enhanced chip sets the scroll range is extended for 32- and 64-bit fetch modes, with the least-significant scroll increment corresponding to a 35 ns SHRES pixel.

Bit Function
15 PF2H7
14 PF2H6
13 PF2H1
12 PF2H0
11 PF1H7
10 PF1H6
09 PF1H1
08 PF1H0
07-04 PF2H5-PF2H2
03-00 PF1H5-PF1H2

BPLCON2

Registers: BPLCON2 $DFF104 (W)
Description: Bitplane control (video priority control)

BPLCON2 controls playfield/sprite priority and several AGA/ECS video and genlock functions.

Bit Function Description
15 x Don't care; write 0 for upward compatibility
14-12 ZDBPSELx Select bitplane mirrored to ZD when ZDBPEN is enabled
11 ZDBPEN Mirror the selected bitplane on ZD
10 ZDCTEN Mirror bit 15 of the active high color-table entry on ZD
09 KILLEHB Disable Extra-Halfbrite mode
08 RDRAM Select color-table read instead of write
07 SOGEN Force SOG output high
06 PF2PRI Give playfield 2 priority over playfield 1
05-03 PF2P2-PF2P0 Playfield 2 priority relative to sprites
02-00 PF1P2-PF1P0 Playfield 1 priority relative to sprites

BPLCON3

Registers: BPLCON3 $DFF106 (W)
Description: Bitplane control (enhanced features)

BPLCON3 contains enhanced palette, sprite-resolution, border and genlock controls.

Bit Function Description
15-13 BANKx Select one of eight color-register banks
12-10 PF2OFx Color-table offset for playfield 2 in dual-playfield mode
09 LOCT Select low-order RGB palette bits for subsequent color writes
08 x Don't care; write 0 for upward compatibility
07-06 SPRESx Sprite resolution: ECS default, LORES, HIRES or SHRES
05 BRDRBLNK Blank the border instead of displaying color 0
04 BRDNTRAN Make border non-transparent for genlock
03 x Don't care; write 0 for upward compatibility
02 ZDCLKEN Output a 14 MHz clock on ZD; overrides other ZD functions
01 BRDSPRT Enable sprites outside the display window
00 EXTBLKEN Make BLANK output programmable

PF2OFx encodes offsets 0, 2, 4, 8, 16, 32, 64, 128. The border and external-blank functions are inhibited while BPLCON0.ECSENA is low.

BPLCON4

Registers: BPLCON4 $DFF10C (W)
Description: Bitplane control (bitplane and sprite-masks)

BPLCON4 is an AGA register used to modify bitplane palette addressing and to select sprite palette bases.

Bits Function Description
15-08 BPLAMx 8-bit value XORed with the bitplane color address before palette lookup
07-04 ESPRMx Four high-order color-table address bits for even sprites (SPR0,2,4,6); default 0001
03-00 OSPRMx Four high-order color-table address bits for odd sprites (SPR1,3,5,7); default 0001

BPLHDAT

Registers: BPLHDAT $DFF07A (W)
Description: External UHRES bitplane cycle identifier

This register identifies the external UHRES bitplane cycle on the RGA bus. When the UHRES bitplane pointer address is valid, BPLHDAT is emitted as the cycle identifier so external logic can recognize the special VRAM access.

BPLHMOD

Registers: BPLHMOD $DFF1E6 (W)
Description: UHRES bit plane modulo

This is the number (sign extended) that is added to the UHRES bitplane pointer (BPLHPTx) every line, and then another 2 is added, just like the other modulos.

BPLHPTH

Registers: BPLHPTH $DFF1EC (W), BPLHPTL $DFF1EE (W)
Description: UHRES (VRAM) bitplane pointer

When UHRES is enabled, this pointer comes out on the 2nd 'free' cycle after the start of each horizontal line. It‘s modulo is added every time it comes out. ’free' means priority above the copper and below the fixed stuff (audio,sprites….). BPLHDAT comes out as an identifier on the RGA lines when the pointer address is valid so that external detectors can use this to do the special cycle for the VRAMs, The SPRHDAT gets the first and third free cycles.

BPLHSTOP

Registers: BPLHSTOP $DFF1D6 (W)
Description: UHRES bit plane vertical stop

Bit Name
15 BPLHWRM
14-11 Unused
10-0 V10-V0

BPLHWRM = Swaps the polarity of ARW* when the BPLHDAT comes out so that external devices can detect the RGA and put things into memory (ECS and later versions).

BPLHSTRT

Registers: BPLHSTRT $DFF1D4 (W)
Description: UHRES bit plane vertical start

This controls the line when the data fetch starts for the BPLHPTx pointers. V10-V0 on DB10-0.

BPLxDAT

Registers: BPL1DAT $DFF110 (W), BPL2DAT $DFF112 (W), BPL3DAT $DFF114 (W), BPL4DAT $DFF116 (W), BPL5DAT $DFF118 (W), BPL6DAT $DFF11A (W), BPL7DAT $DFF11C (W), BPL8DAT $DFF11E (W)
Description: Bitplane data registers

These registers receive bitplane DMA data fetched from RAM. They may also be written by the processor. Together they form the parallel-to-serial buffers for up to eight bitplanes; writing bitplane 1 triggers the parallel-to-serial conversion for the current word group. The most-significant bit is displayed first, so it appears at the left.

BPL1MOD / BPL2MOD

Registers: BPL1MOD $DFF108 (W), BPL2MOD $DFF10A (W)
Description: Bitplane modulo registers

BPL1MOD and BPL2MOD contain the modulos for odd and even bitplanes. At the end of each display line the appropriate signed modulo is added to the bitplane pointer so it addresses the first word of the next line. Separate odd/even modulos allow the two groups of planes to have different row strides.

BPLxPTH / BPLxPTL

Registers: BPL1PTH $DFF0E0 (W), BPL1PTL $DFF0E2 (W), BPL2PTH $DFF0E4 (W), BPL2PTL $DFF0E6 (W), BPL3PTH $DFF0E8 (W), BPL3PTL $DFF0EA (W), BPL4PTH $DFF0EC (W), BPL4PTL $DFF0EE (W), BPL5PTH $DFF0F0 (W), BPL5PTL $DFF0F2 (W), BPL6PTH $DFF0F4 (W), BPL6PTL $DFF0F6 (W), BPL7PTH $DFF0F8 (W), BPL7PTL $DFF0FA (W), BPL8PTH $DFF0FC (W), BPL8PTL $DFF0FE (W)
Description: Bitplane pointer registers

Each BPLxPTH/BPLxPTL pair contains the DMA pointer for bitplane x. The pointers are dynamic: during display DMA they advance as words are fetched, and at the end of the fetch line the corresponding bitplane modulo is added to position the pointer for the next line.

CLXCON

Registers: CLXCON $DFF098 (W)
Description: Collision control

This register controls which bitplanes are included (enabled) in collision detection, and their required state if included. It also controls the individual inclusion of odd numbered sprites in the collision detection, by logically ORing them with their correspond- ing even numbered sprite. Writing to this register resets the bits in CLXCON2.

Bit Function Description
15 ENSP7 Enable Sprite 7 (ORed with Sprite 6)
14 ENSP5 Enable Sprite 5 (ORed with Sprite 4)
13 ENSP3 Enable Sprite 3 (ORed with Sprite 2)
12 ENSP1 Enable Sprite 1 (ORed with Sprite 0)
11 ENSP6 Enable bit plane 6 (match reqd. for collision)
10 ENSP5 Enable bit plane 5 (match reqd. for collision)
09 ENSP4 Enable bit plane 4 (match reqd. for collision)
08 ENSP3 Enable bit plane 3 (match reqd. for collision)
07 ENSP2 Enable bit plane 2 (match reqd. for collision)
06 ENSP1 Enable bit plane 1 (match reqd. for collision)
05 ENSP6 Match value for bit plane 6 collision
04 ENSP5 Match value for bit plane 5 collision
03 ENSP4 Match value for bit plane 4 collision
02 ENSP3 Match value for bit plane 3 collision
01 ENSP2 Match value for bit plane 2 collision
00 ENSP1 Match value for bit plane 1 collision

CLXCON2

Registers: CLXCON2 $DFF10E (W)
Description: Extended collision control

This reg controls when bit planes 7 and 8 are included in collision detection, and there required state if included. Contents of this register are reset by a write to CLXCON.

BITS INITIALIZED BY RESET

Bit Function Description
15-08 Unused
07 ENBP8 Enable bit plane 8 (match reqd. for collision)
06 ENBP7 Enable bit plane 7 (match reqd. for collision)
05-02 Unused
01 MVBP8 Match value for bit plane 8 collision
00 MVBP7 Match value for bit plane 7 collision

Note: Disable bit planes cannot prevent collisions. Therefore if all bitplanes are disabled, collision will be continuous, regardless of the match values.

CLXDAT

Registers: CLXDAT $DFF00E (R)
Description: Collision data reg. (read and clear)

This address reads (and clears) the collision detection reg. The bit assignments are :

Note:
Playfield 1 is all odd numbered enabled bit planes.
Playfield 2 is all even numbered enabled bit planes.
Bit Collision registered
15 Not used
14 Sprite 4 (or 5) to Sprite 6 (or 7)
13 Sprite 2 (or 3) to Sprite 6 (or 7)
12 Sprite 2 (or 3) to Sprite 4 (or 5)
11 Sprite 0 (or 1) to Sprite 6 (or 7)
10 Sprite 0 (or 1) to Sprite 4 (or 5)
09 Sprite 0 (or 1) to Sprite 2 (or 3)
08 Playfield 2 to Sprite 6 (or 7)
07 Playfield 2 to Sprite 4 (or 5)
06 Playfield 2 to Sprite 2 (or 3)
05 Playfield 2 to Sprite 0 (or 1)
04 Playfield 1 to Sprite 6 (or 7)
03 Playfield 1 to Sprite 4 (or 5)
02 Playfield 1 to Sprite 2 (or 3)
01 Playfield 1 to Sprite 0 (or 1)
00 Playfield 1 to Playfield 2

COLORxx

Registers: COLOR00 $DFF180 (W), COLOR01 $DFF182 (W), COLOR02 $DFF184 (W), COLOR03 $DFF186 (W), COLOR04 $DFF188 (W), COLOR05 $DFF18A (W), COLOR06 $DFF18C (W), COLOR07 $DFF18E (W), COLOR08 $DFF190 (W), COLOR09 $DFF192 (W), COLOR10 $DFF194 (W), COLOR11 $DFF196 (W), COLOR12 $DFF198 (W), COLOR13 $DFF19A (W), COLOR14 $DFF19C (W), COLOR15 $DFF19E (W), COLOR16 $DFF1A0 (W), COLOR17 $DFF1A2 (W), COLOR18 $DFF1A4 (W), COLOR19 $DFF1A6 (W), COLOR20 $DFF1A8 (W), COLOR21 $DFF1AA (W), COLOR22 $DFF1AC (W), COLOR23 $DFF1AE (W), COLOR24 $DFF1B0 (W), COLOR25 $DFF1B2 (W), COLOR26 $DFF1B4 (W), COLOR27 $DFF1B6 (W), COLOR28 $DFF1B8 (W), COLOR29 $DFF1BA (W), COLOR30 $DFF1BC (W), COLOR31 $DFF1BE (W)
Description: Color table registers 0 through 31

There are 32 color registers (COLOR00-COLOR31). With AGA color banking they address the 256-entry palette. BPLCON3.LOCT selects whether writes update the high or low four bits of each RGB component; writing the high-order set also preserves backward-compatible 12-bit color behavior.

LOCT Bits 15-12 Bits 11-8 Bits 7-4 Bits 3-0
0 T000 R7-R4 G7-G4 B7-B4
1 0000 R3-R0 G3-G0 B3-B0

T is the transparency/genlock bit; R, G, and B are the red, green, and blue component bits.

COP1LCH

Registers: COP1LCH $DFF080 (W), COP1LCL $DFF082 (W)
Description: Copper first location pointer

These registers contain a jump address. See COPINS for a complete description.

COP2LCH

Registers: COP2LCH $DFF084 (W), COP2LCL $DFF086 (W)
Description: Copper second location pointer

These registers contain a jump address. See COPINS for a complete description.

COPCON

Registers: COPCON $DFF02E (W)
Description: Coprocessor control

This is a-1 bit register that when set true, allows the coprocessor to access the blitter hardware. This bit is cleared power on reset, so that the coprocessor cannot access the blitter hardware.

BIT# NAME FUNCTION Coprocessor danger mode. Allows coprocessor access to all RGA registers if true. 01 CDANG (if 0, access to RGA>DFF07E) (On old chips access to only RGA>DFF03E if CDANG=1) (see VPOSR)

COPINS

Registers: COPINS $DFF08C (S)
Description: Coprocessor inst fetch identify

This is a dummy address that is generated by the coprocessor whenever it is loading instructions into its own instruction register. This actually occurs every coprocessor cycle except for the second (IR2) cycle of the MOVE instruction. The three types of instructions are shown below.

MOVE Move immediate to dest Wait until beam counter is equal to, or greater than. WAIT (Keeps coprocessor off of bus until beam position has been reached) Skip if beam counter is equal to, or greater than. SKIP (Skips following MOVE inst. unless beam position has been reached)

Bit MOVE IR1 MOVE IR2 WAIT UNTIL IR1 WAIT UNTIL IR2 SKIP IF IR1 SKIP IF IR2
15 0 RD15 VP7 BFD VP7 BFD
14 0 RD14 VP6 VE6 VP6 VE6
13 0 RD13 VP5 VE5 VP5 VE5
12 0 RD12 VP4 VE4 VP4 VE4
11 0 RD11 VP3 VE3 VP3 VE3
10 0 RD10 VP2 VE2 VP2 VE2
09 0 RD09 VP1 VE1 VP1 VE1
08 DA8 RD08 VP0 VE0 VP0 VE0
07 DA7 RD07 HP8 HE8 HP8 HE8
06 DA6 RD06 HP7 HE7 HP7 HE7
05 DA5 RD05 HP6 HE6 HP6 HE6
04 DA4 RD04 HP5 HE5 HP5 HE5
03 DA3 RD03 HP4 HE4 HP4 HE4
02 DA2 RD02 HP3 HE3 HP3 HE3
01 DA1 RD01 HP2 HE2 HP2 HE2
00 0 RD00 1 0 1 1
Symbol Description
IR1 First instruction register
IR2 Second instruction register
DA Destination address for MOVE instruction. Fetched during IR1 time, used during IR2 time on RGA bus
RD RAM Data moved by MOVE instruction at IR2 time directly from RAM to the address given by the DA field
VP Vertical beam position comparison bit
HP Horizontal beam position comparison bit
VE Enable comparison (mask bit)
HE Enable comparison (mask bit)
Note:
BFD = Blitter finished disable. When this bit is true, the blitter
finished flag will have no effect on the coprocessor. When this
bit is zero the blitter finished flag must be true (in addition
to the rest of the bit comparisons) before the coprocessor can
exit from it`s wait state, or skip over an instruction. Note
that the V7 comparison cannot be masked.

The coprocessor is basically a 2 cycle machine that requests the bus only during odd memory cycles. (4 memory cycles per in)

It has priority over the blitter and microprocessor.

There are only three types of instructions, MOVE immediate, WAIT UNTIL, and SKIP IF. All instructions require 2 bus cycles (and two instruction words). Since only the odd bus cycles are requested, 4 memory cycle times are required per instruction. (memory cycles are 280 ns).

There are two indirect jump registers COP1LC and COP2LC. These are 20 bit pointer registers whose contents are used to modify program counter for initialization or jumps.

They are transfered to the program counter whenever strobe address COPJMP1 or COPJMP2 are written. In addition COP1LC is automatically used at the beginning of each vertical blank time.

It is important that one of the jump registers be initialized and it`s jump strobe address hit, after power up but before coprocessor DMA is initialized. This insures a determined startup address, and state.

COPJMP1 / COPJMP2

Registers: COPJMP1 $DFF088 (S), COPJMP2 $DFF08A (S)
Description: Copper jump strobe registers

COPJMP1 and COPJMP2 are strobe addresses. Writing either one reloads the Copper program counter indirectly from COP1LC or COP2LC, respectively. The Copper itself may write these strobe addresses, allowing a Copper list to perform an indirect jump.

DDFSTRT

Registers: DDFSTRT $DFF092 (W), DDFSTOP $DFF094 (W)
Description: Display data-fetch start/stop

These registers control the horizontal timing of the beginning and end of the bit plane DMA timing display data fetch. The vertical bit plane DMA timing is identical to the display windows described above. The bit plane Modulos are dependent on the bit plane horizontal size, and on this data fetch window size.

Register bit assignment :

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 0 0 0 0 0 0 H8 H7 H6 H5 H4 H3 H2 0

The tables below show the start and stop timing for different register contents

DDFSTRT (Left edge of display data fetch) :

PURPOSE H8 H7 H6 H5 H4
Extra wide (max) 0 0 1 0 1
wide 0 0 1 1 0
normal 0 0 1 1 1
narrow 0 1 0 0 0

DDFSTOP (Right edge of display data fetch) :

PURPOSE H8 H7 H6 H5 H4
narrow 1 1 0 0 1
normal 1 1 0 1 0
wide (max) 1 1 0 1 1

Note that these numbers will vary with variable beam counter mode set: (The maxes and mins, that is).

DENISEID

Registers: DENISEID $DFF07C (R)
Description: Chip revision level for Denise/Lisa (video out chip)

The original Denise (8362) does not have this register, so whatever value is left over on the bus from the last cycle will be there. ECS Denise (8373) returns hex (fc) in the lower 8 bits.Lisa returns hex (f8). The upper 8 bits of this Register are loaded from the serial mouse bus, and are reserved for future hardware implentation.

The 8 low-order bits are encoded as follows :

Bit Description
7-4 Lisa/Denise/ECS Denise Revision level (decrement to bump revision level, hex F represents 0th rev. level).
3 Maintain as a 1 for future generation
2 When low indicates AA feature set (LISA)
1 When low indicates ECS feature set (LISA or ECS DENISE)
0 Maintain as a 1 for future generation

A proposed way to detect chip's revision through hardware poking :

is_AGA: move.w 0xdff07c,d0 moveq #31-1,d2 and.w #0xff,d0 check_loop: move.w 0xdff07C,d1 and.w #0xff,d1 cmp.b d0,d1 bne.b not_AGA dbf d2,check_loop or.b #0xf0,d0 cmp.b #0xf8,d0 bne.b not_AGA moveq #1,d0 rts not_AGA: moveq #0,d0 rts

DIWHIGH

Registers: DIWHIGH $DFF1E4 (W)
Description: Display window - upper bits for start/stop

This is an added register for Hires chips, and allows larger start & stop ranges. If it is not written, (DIWSTRT, DIWSTOP) description holds. If this register is written, direct start & stop positions anywhere on the screen. It doesn't affect the UHRES pointers.

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 H10 H1 H0 V10 V9 V8 0 0 H10 H1 H0 V10 V9 V8
Field stop stop stop stop stop stop stop stop start start start start start start start start

H1 and H0 values define 70ns and 35ns increments respectively, and new LISA bits.

Note:
In all 3 display window registers, horizontal bit positions have been
renamed to reflect HIRES pixel increments, e.g. what used to be
called H0 is now referred to as H2.

DIWSTRT

Registers: DIWSTRT $DFF08E (W), DIWSTOP $DFF090 (W)
Description: Display window start/stop

These registers control the display window size and position, by locating the upper left and lower right corners.

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value V7 V6 V5 V4 V3 V2 V1 V0 H9 H8 H7 H6 H5 H4 H3 H2

DIWSTRT is vertically restricted to the upper 2/3 of the display (V8=0), and horizontally restricted to the left 3/4 of the display (H8=0).

See DIWHIGH for exceptions.

DMACONR

Registers: DMACONR $DFF002 (R), DMACON $DFF096 (W)
Description: DMA control and status

This register controls all of the DMA channels, and contains blitter DMA status bits.

Bit Function Description
15 SET/CLR written with a 1 get set or cleared Bits written with a zero are unchanged
14 BBUSY Blitter busy status bit (read only)
13 BZERO Blitter logic zero status bit (read only)
12 X
11 X Blitter DMA priority (over CPU micro) (also called "blitter nasty")
10 BLTPRI (disables /BLS pin, preventing micro from stealing any bus cycles while blitter DMA is running)
09 DMAEN Enable all DMA below (also UHRES DMA)
08 BPLEN Bit plane DMA enable
07 COPEN Coprocessor DMA enable
06 BLTEN Blitter DMA enable
05 SPREN Sprite DMA enable
04 DSKEN Disk DMA enable
03 AUD3EN Audio channel 3 DMA enable
02 AUD2EN Audio channel 2 DMA enable
01 AUD1EN Audio channel 1 DMA enable
00 AUD0EN Audio channel 0 DMA enable

DSKBYTR

Registers: DSKBYTR $DFF01A (R)
Description: Disk data byte and status read

This register is the Disk-Microprocessor data buffer. Data from the disk (in read mode) is loaded into this register one byte at a time, and bit 15 (DSKBYT) is set true.

Bit Function Description
15 DSKBYT Disk byte ready (reset on read)
14 DMAON DMAEN (DSKLEN) & DMAEN (DMACON) & DSKEN (DMACON)
13 DISKWRITE Mirror of bit 14 (WRITE) in DSKLEN
12 WORDEQUAL This bit true only while DSKSYNC register equals the data from disk
11-08 0 Not used
07-00 DATA Disk byte data

DSKDATR

Registers: DSKDATR $DFF008 (ER), DSKDAT $DFF026 (W)
Description: Disk DMA data register

This register is the disk-DMA data buffer.It contains 2 bytes of data that are either sent to (write) or received from (read) the disk. The DMA controller automatically transfers data to or from this register and RAM, and when the DMA data is finished (length=0) it causes a disk block interrupt.

DSKLEN

Registers: DSKLEN $DFF024 (W)
Description: Disk length

Bit Function Description
15 DMAEN Disk DMA enable
14 WRITE Disk write (RAM or disk) if 1
13-0 LENGTH Length (# of words) of DMA data.

DSKPTH

Registers: DSKPTH $DFF020 (W), DSKPTL $DFF022 (W)
Description: Disk DMA pointer

This pair of registers contains the 20 bit address of disk DMA data. These address registers must be initialized by the processor or coprocessor before disk DMA is enabled.

DSKSYNC

Registers: DSKSYNC $DFF07E (W)
Description: Disk sync pattern reg for disk read

FMODE

Registers: FMODE $DFF1FC (W)
Description: Fetch mode register

FMODE controls the AGA Chip RAM fetch mechanism for bitplanes and sprites.

Bit Function Description
15 SSCAN2 Global sprite scan-doubling enable
14 BSCAN2 Use the second playfield modulo on alternate lines for bitplane scan-doubling
13-04 Unused
03 SPAGEM Sprite page mode (double CAS)
02 SPR32 32-bit sprite fetch mode
01 BPAGEM Bitplane page mode (double CAS)
00 BPL32 32-bit bitplane fetch mode
PAGEM 32-bit Fetch increment Memory cycle Bus width
0 0 2 bytes normal CAS 16
0 1 4 bytes normal CAS 32
1 0 4 bytes double CAS 16
1 1 8 bytes double CAS 32

The same four combinations apply independently to bitplanes (BPAGEM/BPL32) and sprites (SPAGEM/SPR32).

HBSTRT

Registers: HBSTRT $DFF1C4 (W), HBSTOP $DFF1C6 (W)
Description: Horizontal blanking start/stop

Bits 7-0 contain the stop and start positions, respectively, for programmed horizontal blanking in 280ns increments. Bits 10-8 provide a fine position control in 35ns increments.

Bit Function Description
15-11 0 Unused
10 H1 140ns
09 H1 70ns
08 H0 35ns
07 H10 35840ns
06 H9 17920ns
05 H8 8960ns
04 H7 4480ns
03 H6 2240ns
02 H5 1120ns
01 H4 560ns
00 H3 280ns

HCENTER

Registers: HCENTER $DFF1E2 (W)
Description: Horizontal position for Vsync on interlace

This is necessary for interlace mode with variable beam counters. See BEAMCON0 for when it affects chip outputs. See HTOTAL for bits.

HHPOSW

Registers: HHPOSW $DFF1D8 (W), HHPOSR $DFF1DA (R)
Description: DUAL-mode high-resolution horizontal beam counter

This the secondary beam counter for the faster mode, triggering the UHRES pointers & doing the comparisons for HBSTRT, HBSTOP, HTOTAL, HSSTRT, HSSTOP (See HTOTAL for bits)

HSSTOP

Registers: HSSTOP $DFF1C2 (W)
Description: Horizontal line position for HSYNC stop

Sets # of colour clocks for sync stop (HTOTAL for bits).

HSSTRT

Registers: HSSTRT $DFF1DE (W)
Description: Horizontal sync start (VARHSY)

Set # of colour clocks for sync start (HTOTAL for bits) See BEAMCON0 for details of when these 2 are active.

HTOTAL

Registers: HTOTAL $DFF1C0 (W)
Description: Highest number count, horiz line (VARBEAMEN=1)

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 0 0 0 0 0 0 H8 H7 H6 H5 H4 H3 H2 H1

Horizontal line has these many + 1 280nS increments. If the pal bit & LOLDIS are not high, long line/short line toggle will occur, and there will be this many +2 every other line. Active if VARBEAMEN=1 or DUAL+1.

INTENAR

Registers: INTENAR $DFF01C (R), INTENA $DFF09A (W)
Description: Interrupt enable control

This register contains interrupt enable bits. The bit assignment for both the request, and enable registers is given below.

Bit Function Level Description
15 SET/CLR Set/clear control bit. Determines if bits written with a 1 get set or cleared. Bits written with a zero are always unchanged.
14 INTEN Master interrupt (enable only, no request)
13 EXTER 6 External interrupt
12 DSKSYN 5 Disk sync register (DSKSYNC) matches disk
11 RBF 5 Serial port receive buffer full
10 AUD3 4 Audio channel 3 block finished
09 AUD2 4 Audio channel 2 block finished
08 AUD1 4 Audio channel 1 block finished
07 AUD0 4 Audio channel 0 block finished
06 BLIT 3 Blitter has finished
05 VERTB 3 Start of vertical blank
04 COPER 3 Coprocessor
03 PORTS 2 I/O Ports and timers
02 SOFT 1 Reserved for software initiated interrupt.
01 DSKBLK 1 Disk block finished
00 TBE 1 Serial port transmit buffer empty

INTREQR

Registers: INTREQR $DFF01E (R), INTREQ $DFF09C (W)
Description: Interrupt request control

This register contains interrupt request bits (or flags). These bits may be polled by the processor, and if enabled by the bits listed in the next register, they may cause processor interrupts. Both a set and clear operation are required to load arbitrary data into this register.

Bit Function Level Description
15 SET/CLR Set/clear control bit. Determines if bits written with a 1 get set or cleared. Bits written with a zero are always unchanged.
14 INTEN Master interrupt (enable only, no request)
13 EXTER 6 External interrupt
12 DSKSYN 5 Disk sync register (DSKSYNC) matches disk
11 RBF 5 Serial port receive buffer full
10 AUD3 4 Audio channel 3 block finished
09 AUD2 4 Audio channel 2 block finished
08 AUD1 4 Audio channel 1 block finished
07 AUD0 4 Audio channel 0 block finished
06 BLIT 3 Blitter has finished
05 VERTB 3 Start of vertical blank
04 COPER 3 Coprocessor
03 PORTS 2 I/O Ports and timers
02 SOFT 1 Reserved for software initiated interrupt.
01 DSKBLK 1 Disk block finished
00 TBE 1 Serial port transmit buffer empty

JOY0DAT

Registers: JOY0DAT $DFF00A (R), JOY1DAT $DFF00C (R)
Description: Joystick/mouse counter data

These addresses each read a 16 bit register. These in turn are loaded from the MDAT serial stream and are clocked in on the rising edge of SCLK. MLD output is used to parallel load the external parallel-to- serial converter.This in turn is loaded with the 4 quadrature inputs from each of two game controller ports (8 total) plus 8 miscellaneous control bits which are new for LISA and can be read in upper 8 bits of LISAID.

Register bits are as follows:

Mouse counter usage (pins 1,3 = Yclock, pins 2,4 = Xclock)

Register / Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
JOY0DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
JOY1DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0

0 = LEFT CONTROLLER PAIR, 1 = RIGHT CONTROLLER PAIR. (4 counters total).The bit usage for both left and right addresses is shown below. Each 6 bit counter (Y7-Y2,X7-X2) is clocked by 2 of the signals input from the mouse serial stream.

Starting with first bit received:

Serial Bit Name Description
0 M0H JOY0DAT Horizontal Clock
1 M0HQ JOY0DAT Horizontal Clock (quadrature)
2 M0V JOY0DAT Vertical Clock
3 M0VQ JOY0DAT Vertical Clock (quadrature)
4 M1V JOY1DAT Horizontall Clock
5 M1VQ JOY1DAT Horizontall Clock (quadrature)
6 M1V JOY1DAT Vertical Clock
7 M1VQ JOY1DAT Vertical Clock (quadrature)

Bits 1 and 0 of each counter (Y1-Y0,X1-X0) may be read to determine the state of the related input signal pair. This allows these pins to double as joystick switch inputs. Joystick switch closures can be deciphered as follows:

Direction Pin Counter bits
Forward 1 Y1 xor Y0 (BIT#09 xor BIT#08)
Left 3 Y1
Back 2 X1 xor X0 (BIT#01 xor BIT#00)
Right 4 X1

JOYTEST

Registers: JOYTEST $DFF036 (W)
Description: Write to all 4 joystick-mouse counters at once

Mouse counter write test data:

Register / Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
JOY0DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
JOY1DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0

POT0DAT

Registers: POT0DAT $DFF012 (R), POT1DAT $DFF014 (R)
Description: Potentiometer counter data

These addresses each read a pair of 8 bit pot counters. (4 counters total). The bit assignment for both addresses is shown below. The counters are stopped by signals from 2 controller connectors (left-right) with 2 pins each.

Register / Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
RIGHT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
LEFT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
Loc. Dir. Sym. Connector Pin Paula Pin
RIGHT Y RX 9 33
RIGHT X RX 5 32
LEFT Y LY 9 36
LEFT X LX 5 35

With normal (NTSC or PAL) horiz. line rate, the pots will give a full scale (FF) reading with about 500kohms in one frame time. With proportionally faster horiz line times, the counters will count proportionally faster. This should be noted when doing variable beam displays.

POTGO

Registers: POTGO $DFF034 (W)
Description: Pot count start,pot pin drive enable data

POTINP

Registers: POTINP $DFF016 (R)
Description: Pot pin data read

This register controls a 4-bit bidirectional I/O port that shares the same four pins as the potentiometer counters.

Bit Function Description
15 OUTRY Output enable for Paula pin 33
14 DATRY I/O data, Paula pin 33
13 OUTRX Output enable for Paula pin 32
12 DATRX I/O data, Paula pin 32
11 OUTLY Output enable for Paula pin 36
10 DATLY I/O data, Paula pin 36
09 OUTLX Output enable for Paula pin 35
08 DATLX I/O data, Paula pin 35
07-01 Not used
00 START Start pots (dump capacitors, start counters)

REFPTR

Registers: REFPTR $DFF028 (W)
Description: Refresh pointer

This register is used as a dynamic RAM refresh address generator. It's writable for test purposes only, and should never be written by the microprocessor.

SERDAT

Registers: SERDAT $DFF030 (W)
Description: Serial port data and stop bits write

This address writes data to a transmit data buffer. Data from this buffer is moved into a serial shift register for output transmission whenever it is empty. This sets the interrupt request TBE (transmit buffer empty).

A stop bit must be provided as part of the data word. The length of the data word is set by the position of the stop bit.

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 0 0 0 0 S D8 D7 D6 D5 D4 D3 D2 D1 D0

SERDATR

Registers: SERDATR $DFF018 (R)
Description: Serial port data and status read

This address reads data from a recive data buffer. Data in this buffer is loaded from a receiving shift register whenever it is full. Several interrupt request bits are also read at this address, along with the data as shown below.

Bit Function Description
15 OVRUN Serial port receiver overun
14 RBF Serial port receive buffer full (mirror)
13 TBE Serial port transmit buffer empty (mirror)
12 TSRE Serial port transmit shift reg. empty
11 RXD RXD pin receives UART serial data for direct bit test by the micro.
10 X Not used.
09 STP Stop bit
08 STP-DB8 Stop bit if LONG, data bit if not.
07 DB7 Data bit.
06 DB6 Data bit.
05 DB5 Data bit.
04 DB4 Data bit.
03 DB3 Data bit.
02 DB2 Data bit.
01 DB1 Data bit.
00 DB0 Data bit.

SERPER

Registers: SERPER $DFF032 (W)
Description: Serial port period and control

This register contains the control bit LONG referred to above, and a 15 bit number defining the serial port Baud rate. If this number is N,then the baud rate is 1 bit every (N+1)*.2794 microseconds.

Bit Function Description
15 LONG Defines serial receive as 9 bit word.
14-00 RATE Defines baud rate=1/((N+1)*.2794 microseconds)

SPRHDAT

Registers: SPRHDAT $DFF078 (W)
Description: Ext. logic UHRES sprite pointer and data identifier

This identifies the cycle when this pointer address is on the bus accessing the memory.

SPRHPTH

Registers: SPRHPTH $DFF1E8 (W), SPRHPTL $DFF1EA (W)
Description: UHRES sprite pointer

This pointer is activated in the 1st and 3rd 'free' cycles (see BPLHPTx) after horizontal line start. It increments for the next line.

SPRHSTOP

Registers: SPRHSTOP $DFF1D2 (W)
Description: UHRES sprite vertical stop

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value SPRHWRM 0 0 0 0 0 V10 V9 V8 V7 V6 V5 V4 V3 V2 V1

SPRHWRM = Swaps the polarity of ARW* when the SPRHDAT comes out so that external devices can detect the RGA and put things into memory. (ECS and later chips only)

SPRHSTRT

Registers: SPRHSTRT $DFF1D0 (W)
Description: UHRES sprite vertical start

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value 0 0 0 0 0 V10 V9 V8 V7 V6 V5 V4 V3 V2 V1 V0

SPRxCTL

Registers: SPR0CTL $DFF142 (W), SPR1CTL $DFF14A (W), SPR2CTL $DFF152 (W), SPR3CTL $DFF15A (W), SPR4CTL $DFF162 (W), SPR5CTL $DFF16A (W), SPR6CTL $DFF172 (W), SPR7CTL $DFF17A (W)
Description: Sprite position/control registers

Bit Function Description
15-08 EV7-EV0 End (stop) vertical value. Low 8 bits
07 ATT Sprite attach control bit (odd sprites only)
06 SV9 Start vertical value 10th bit
05 EV9 End (stop) vertical value 10th bit
04 SH1=0 Start horizontal value, 70nS increment
03 SH0=0 Start horizontal value 35nS increment
02 SV8 Start vertical value 9th bit
01 EV8 End (stop) vertical value 9th bit
00 SH2 Start horizontal value, 140nS increment

SPRxDATA / SPRxDATB

Registers: SPR0DATA $DFF144 (W), SPR0DATB $DFF146 (W), SPR1DATA $DFF14C (W), SPR1DATB $DFF14E (W), SPR2DATA $DFF154 (W), SPR2DATB $DFF156 (W), SPR3DATA $DFF15C (W), SPR3DATB $DFF15E (W), SPR4DATA $DFF164 (W), SPR4DATB $DFF166 (W), SPR5DATA $DFF16C (W), SPR5DATB $DFF16E (W), SPR6DATA $DFF174 (W), SPR6DATB $DFF176 (W), SPR7DATA $DFF17C (W), SPR7DATB $DFF17E (W)
Description: Sprite image data registers

SPRxDATA and SPRxDATB buffer the two bitplanes of sprite x image data. They are normally filled by sprite DMA, but may also be written by the processor. At the programmed horizontal position the buffers are loaded into shift registers and serialized to the display, most-significant bit first. Writing the A (DATA) buffer arms the sprite; writing SPRxCTL disables it.

SPRxPOS

Registers: SPR0POS $DFF140 (W), SPR1POS $DFF148 (W), SPR2POS $DFF150 (W), SPR3POS $DFF158 (W), SPR4POS $DFF160 (W), SPR5POS $DFF168 (W), SPR6POS $DFF170 (W), SPR7POS $DFF178 (W)
Description: Sprite start-position registers

Bit Function Description
15-08 SV7-SV0 Start vertical value.High bit (SV8) is in SPRxCTL registers.
07-00 SH10-SH3 Sprite horizontal start value. Low order 3 bits are in SPRxCTL registers. If SSCAN2 bit in FMODE is set, then disable SH10 horizontal coincidence detect.This bit is then free to be used by ALICE as an individual scan double enable.

SPRxPTH / SPRxPTL

Registers: SPR0PTH $DFF120 (W), SPR0PTL $DFF122 (W), SPR1PTH $DFF124 (W), SPR1PTL $DFF126 (W), SPR2PTH $DFF128 (W), SPR2PTL $DFF12A (W), SPR3PTH $DFF12C (W), SPR3PTL $DFF12E (W), SPR4PTH $DFF130 (W), SPR4PTL $DFF132 (W), SPR5PTH $DFF134 (W), SPR5PTL $DFF136 (W), SPR6PTH $DFF138 (W), SPR6PTL $DFF13A (W), SPR7PTH $DFF13C (W), SPR7PTL $DFF13E (W)
Description: Sprite DMA pointer registers

Each SPRxPTH/SPRxPTL pair contains the DMA address of sprite x data. The pointer registers must be initialized by the processor or Copper for each vertical field in which the sprite DMA data is to be used.

STREQU

Registers: STREQU $DFF038 (S), STRVBL $DFF03A (S), STRHOR $DFF03C (S), STRLONG $DFF03E (S)
Description: Refresh/synchronization strobe registers

One of the first 3 strobe addresses above, it is placed on the RGA bus during the first refresh time slot of every other line, to identify lines with long counts (228- NTSC, HTOTAL+2- VARBEAMEN=1 hires chips only).There are 4 refresh time slots and any not used for strobes will leave a null (1FE) address on the RGA bus.

VBSTRT

Registers: VBSTRT $DFF1CC (W), VBSTOP $DFF1CE (W)
Description: Vertical blanking start/stop

(V10-0 <- D10-0) Affects CSY pin if BLAKEN=1 and VSY pin if CSCBEN=1 (see BEAMCON0)

VHPOSR

Registers: VHPOSR $DFF006 (R), VHPOSW $DFF02C (W)
Description: Vertical/horizontal beam position read/write

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value V7 V6 V5 V4 V3 V2 V1 V0 H8 H7 H6 H5 H4 H3 H2 H1

Resolution = 1/160 of screen width (280 ns).

VPOSR

Registers: VPOSR $DFF004 (R), VPOSW $DFF02A (W)
Description: Vertical position/frame state read/write

Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Value LOF I6 I5 I4 I3 I2 I1 I0 LOL xx xx xx xx V10 V9 V8

LOF = Long frame(auto toggle control bit in BPLCON0)

I0-I6 Chip identification:

VSSTRT

Registers: VSSTRT $DFF1E0 (W), VSSTOP $DFF1CA (W)
Description: Vertical sync start/stop

VTOTAL

Registers: VTOTAL $DFF1C8 (W)
Description: Highest numbered vertical line (VARBEAMEN=1)

Its the line number to reset the counter, so theres this many + 1 in a field. The exception is if the LACE bit is set (BPLCON0), in which case every other field is this many + 2 and the short field is this many + 1.