IO Registers
[Memory Map]


IWRAM 'registers'

#define REG_IFBIOS   *(vu16*)(REG_BASE-0x0008)
 IRQ ack for IntrWait functions.
#define REG_RESET_DST   *(vu16*)(REG_BASE-0x0006)
 Destination for after SoftReset.
#define REG_ISR_MAIN   *(fnptr*)(REG_BASE-0x0004)
 IRQ handler address.

Display registers

#define REG_DISPCNT   *(vu32*)(REG_BASE+0x0000)
 Display control.
#define REG_DISPSTAT   *(vu16*)(REG_BASE+0x0004)
 Display status.
#define REG_VCOUNT   *(vu16*)(REG_BASE+0x0006)
 Scanline count.

Background control registers

#define REG_BGCNT   ((vu16*)(REG_BASE+0x0008))
 Bg control array.
#define REG_BG0CNT   *(vu16*)(REG_BASE+0x0008)
 Bg0 control.
#define REG_BG1CNT   *(vu16*)(REG_BASE+0x000A)
 Bg1 control.
#define REG_BG2CNT   *(vu16*)(REG_BASE+0x000C)
 Bg2 control.
#define REG_BG3CNT   *(vu16*)(REG_BASE+0x000E)
 Bg3 control.

Regular background scroll registers. (write only!)

#define REG_BG_OFS   ((BG_POINT*)(REG_BASE+0x0010))
 Bg scroll array.
#define REG_BG0HOFS   *(vu16*)(REG_BASE+0x0010)
 Bg0 horizontal scroll.
#define REG_BG0VOFS   *(vu16*)(REG_BASE+0x0012)
 Bg0 vertical scroll.
#define REG_BG1HOFS   *(vu16*)(REG_BASE+0x0014)
 Bg1 horizontal scroll.
#define REG_BG1VOFS   *(vu16*)(REG_BASE+0x0016)
 Bg1 vertical scroll.
#define REG_BG2HOFS   *(vu16*)(REG_BASE+0x0018)
 Bg2 horizontal scroll.
#define REG_BG2VOFS   *(vu16*)(REG_BASE+0x001A)
 Bg2 vertical scroll.
#define REG_BG3HOFS   *(vu16*)(REG_BASE+0x001C)
 Bg3 horizontal scroll.
#define REG_BG3VOFS   *(vu16*)(REG_BASE+0x001E)
 Bg3 vertical scroll.

Affine background parameters. (write only!)

#define REG_BG_AFFINE   ((BG_AFFINE*)(REG_BASE+0x0000))
 Bg affine array.
#define REG_BG2PA   *(vs16*)(REG_BASE+0x0020)
 Bg2 matrix.pa.
#define REG_BG2PB   *(vs16*)(REG_BASE+0x0022)
 Bg2 matrix.pb.
#define REG_BG2PC   *(vs16*)(REG_BASE+0x0024)
 Bg2 matrix.pc.
#define REG_BG2PD   *(vs16*)(REG_BASE+0x0026)
 Bg2 matrix.pd.
#define REG_BG2X   *(vs32*)(REG_BASE+0x0028)
 Bg2 x scroll.
#define REG_BG2Y   *(vs32*)(REG_BASE+0x002C)
 Bg2 y scroll.
#define REG_BG3PA   *(vs16*)(REG_BASE+0x0030)
 Bg3 matrix.pa.
#define REG_BG3PB   *(vs16*)(REG_BASE+0x0032)
 Bg3 matrix.pb.
#define REG_BG3PC   *(vs16*)(REG_BASE+0x0034)
 Bg3 matrix.pc.
#define REG_BG3PD   *(vs16*)(REG_BASE+0x0036)
 Bg3 matrix.pd.
#define REG_BG3X   *(vs32*)(REG_BASE+0x0038)
 Bg3 x scroll.
#define REG_BG3Y   *(vs32*)(REG_BASE+0x003C)
 Bg3 y scroll.

Windowing registers

#define REG_WIN0H   *(vu16*)(REG_BASE+0x0040)
 win0 right, left (0xLLRR)
#define REG_WIN1H   *(vu16*)(REG_BASE+0x0042)
 win1 right, left (0xLLRR)
#define REG_WIN0V   *(vu16*)(REG_BASE+0x0044)
 win0 bottom, top (0xTTBB)
#define REG_WIN1V   *(vu16*)(REG_BASE+0x0046)
 win1 bottom, top (0xTTBB)
#define REG_WININ   *(vu16*)(REG_BASE+0x0048)
 win0, win1 control
#define REG_WINOUT   *(vu16*)(REG_BASE+0x004A)
 winOut, winObj control

Alternate Windowing registers

#define REG_WIN0R   *(vu8*)(REG_BASE+0x0040)
 Win 0 right.
#define REG_WIN0L   *(vu8*)(REG_BASE+0x0041)
 Win 0 left.
#define REG_WIN1R   *(vu8*)(REG_BASE+0x0042)
 Win 1 right.
#define REG_WIN1L   *(vu8*)(REG_BASE+0x0043)
 Win 1 left.
#define REG_WIN0B   *(vu8*)(REG_BASE+0x0044)
 Win 0 bottom.
#define REG_WIN0T   *(vu8*)(REG_BASE+0x0045)
 Win 0 top.
#define REG_WIN1B   *(vu8*)(REG_BASE+0x0046)
 Win 1 bottom.
#define REG_WIN1T   *(vu8*)(REG_BASE+0x0047)
 Win 1 top.
#define REG_WIN0CNT   *(vu8*)(REG_BASE+0x0048)
 window 0 control
#define REG_WIN1CNT   *(vu8*)(REG_BASE+0x0049)
 window 1 control
#define REG_WINOUTCNT   *(vu8*)(REG_BASE+0x004A)
 Out window control.
#define REG_WINOBJCNT   *(vu8*)(REG_BASE+0x004B)
 Obj window control.

Graphic effects

#define REG_MOSAIC   *(vu32*)(REG_BASE+0x004C)
 Mosaic control.
#define REG_BLDCNT   *(vu16*)(REG_BASE+0x0050)
 Alpha control.
#define REG_BLDALPHA   *(vu16*)(REG_BASE+0x0052)
 Fade level.
#define REG_BLDY   *(vu16*)(REG_BASE+0x0054)
 Blend levels.

Channel 1: Square wave with sweep

#define REG_SND1SWEEP   *(vu16*)(REG_BASE+0x0060)
 Channel 1 Sweep.
#define REG_SND1CNT   *(vu16*)(REG_BASE+0x0062)
 Channel 1 Control.
#define REG_SND1FREQ   *(vu16*)(REG_BASE+0x0064)
 Channel 1 frequency.

Channel 2: Simple square wave

#define REG_SND2CNT   *(vu16*)(REG_BASE+0x0068)
 Channel 2 control.
#define REG_SND2FREQ   *(vu16*)(REG_BASE+0x006C)
 Channel 2 frequency.

Channel 3: Wave player

#define REG_SND3SEL   *(vu16*)(REG_BASE+0x0070)
 Channel 3 wave select.
#define REG_SND3CNT   *(vu16*)(REG_BASE+0x0072)
 Channel 3 control.
#define REG_SND3FREQ   *(vu16*)(REG_BASE+0x0074)
 Channel 3 frequency.

Channel 4: Noise generator

#define REG_SND4CNT   *(vu16*)(REG_BASE+0x0078)
 Channel 4 control.
#define REG_SND4FREQ   *(vu16*)(REG_BASE+0x007C)
 Channel 4 frequency.

Sound control

#define REG_SNDCNT   *(vu32*)(REG_BASE+0x0080)
 Main sound control.
#define REG_SNDDMGCNT   *(vu16*)(REG_BASE+0x0080)
 DMG channel control.
#define REG_SNDDSCNT   *(vu16*)(REG_BASE+0x0082)
 Direct Sound control.
#define REG_SNDSTAT   *(vu16*)(REG_BASE+0x0084)
 Sound status.
#define REG_SNDBIAS   *(vu16*)(REG_BASE+0x0088)
 Sound bias.

Sound buffers

#define REG_WAVE_RAM   (vu32*)(REG_BASE+0x0090)
 Channel 3 wave buffer.
#define REG_WAVE_RAM0   *(vu32*)(REG_BASE+0x0090)
 Channel 3 wave buffer.
#define REG_WAVE_RAM1   *(vu32*)(REG_BASE+0x0094)
 Channel 3 wave buffer.
#define REG_WAVE_RAM2   *(vu32*)(REG_BASE+0x0098)
 Channel 3 wave buffer.
#define REG_WAVE_RAM3   *(vu32*)(REG_BASE+0x009C)
 Channel 3 wave buffer.
#define REG_FIFO_A   *(vu32*)(REG_BASE+0x00A0)
 DSound A FIFO.
#define REG_FIFO_B   *(vu32*)(REG_BASE+0x00A4)
 DSound B FIFO.

DMA registers

#define REG_DMA   ((volatile DMA_REC*)(REG_BASE+0x00B0))
 DMA as DMA_REC array.
#define REG_DMA0SAD   *(vu32*)(REG_BASE+0x00B0)
 DMA 0 Source address.
#define REG_DMA0DAD   *(vu32*)(REG_BASE+0x00B4)
 DMA 0 Destination address.
#define REG_DMA0CNT   *(vu32*)(REG_BASE+0x00B8)
 DMA 0 Control.
#define REG_DMA1SAD   *(vu32*)(REG_BASE+0x00BC)
 DMA 1 Source address.
#define REG_DMA1DAD   *(vu32*)(REG_BASE+0x00C0)
 DMA 1 Destination address.
#define REG_DMA1CNT   *(vu32*)(REG_BASE+0x00C4)
 DMA 1 Control.
#define REG_DMA2SAD   *(vu32*)(REG_BASE+0x00C8)
 DMA 2 Source address.
#define REG_DMA2DAD   *(vu32*)(REG_BASE+0x00CC)
 DMA 2 Destination address.
#define REG_DMA2CNT   *(vu32*)(REG_BASE+0x00D0)
 DMA 2 Control.
#define REG_DMA3SAD   *(vu32*)(REG_BASE+0x00D4)
 DMA 3 Source address.
#define REG_DMA3DAD   *(vu32*)(REG_BASE+0x00D8)
 DMA 3 Destination address.
#define REG_DMA3CNT   *(vu32*)(REG_BASE+0x00DC)
 DMA 3 Control.

Timer registers

#define REG_TM   ((volatile TMR_REC*)(REG_BASE+0x0100))
 Timers as TMR_REC array.
#define REG_TM0D   *(vu16*)(REG_BASE+0x0100)
 Timer 0 data.
#define REG_TM0CNT   *(vu16*)(REG_BASE+0x0102)
 Timer 0 control.
#define REG_TM1D   *(vu16*)(REG_BASE+0x0104)
 Timer 1 data.
#define REG_TM1CNT   *(vu16*)(REG_BASE+0x0106)
 Timer 1 control.
#define REG_TM2D   *(vu16*)(REG_BASE+0x0108)
 Timer 2 data.
#define REG_TM2CNT   *(vu16*)(REG_BASE+0x010A)
 Timer 2 control.
#define REG_TM3D   *(vu16*)(REG_BASE+0x010C)
 Timer 3 data.
#define REG_TM3CNT   *(vu16*)(REG_BASE+0x010E)
 Timer 3 control.

Serial communication

#define REG_SIOCNT   *(vu16*)(REG_BASE+0x0128)
 Serial IO control (Normal/MP/UART).
#define REG_SIODATA   ((vu32*)(REG_BASE+0x0120))
 Serial IO control (Normal/MP/UART).
#define REG_SIODATA32   *(vu32*)(REG_BASE+0x0120)
 Normal/UART 32bit data.
#define REG_SIODATA8   *(vu16*)(REG_BASE+0x012A)
 Normal/UART 8bit data.
#define REG_SIOMULTI   ((vu16*)(REG_BASE+0x0120))
 Multiplayer data array.
#define REG_SIOMULTI0   *(vu16*)(REG_BASE+0x0120)
 MP master data.
#define REG_SIOMULTI1   *(vu16*)(REG_BASE+0x0122)
 MP Slave 1 data.
#define REG_SIOMULTI2   *(vu16*)(REG_BASE+0x0124)
 MP Slave 2 data.
#define REG_SIOMULTI3   *(vu16*)(REG_BASE+0x0126)
 MP Slave 3 data.
#define REG_SIOMLT_RECV   *(vu16*)(REG_BASE+0x0120)
 MP data receiver.
#define REG_SIOMLT_SEND   *(vu16*)(REG_BASE+0x012A)
 MP data sender.

Keypad registers

#define REG_KEYINPUT   *(vu16*)(REG_BASE+0x0130)
 Key status (read only??).
#define REG_KEYCNT   *(vu16*)(REG_BASE+0x0132)
 Key IRQ control.

Joybus communication

#define REG_RCNT   *(vu16*)(REG_BASE+0x0134)
 SIO Mode Select/General Purpose Data.
#define REG_JOYCNT   *(vu16*)(REG_BASE+0x0140)
 JOY bus control.
#define REG_JOY_RECV   *(vu32*)(REG_BASE+0x0150)
 JOY bus receiever.
#define REG_JOY_TRANS   *(vu32*)(REG_BASE+0x0154)
 JOY bus transmitter.
#define REG_JOYSTAT   *(vu16*)(REG_BASE+0x0158)
 JOY bus status.

Interrupt / System registers

#define REG_IE   *(vu16*)(REG_BASE+0x0200)
 IRQ enable.
#define REG_IF   *(vu16*)(REG_BASE+0x0202)
 IRQ status/acknowledge.
#define REG_WAITCNT   *(vu16*)(REG_BASE+0x0204)
 Waitstate control.
#define REG_IME   *(vu16*)(REG_BASE+0x0208)
 IRQ master enable.
#define REG_PAUSE   *(vu16*)(REG_BASE+0x0300)
 Pause system (?).

Detailed Description


Generated on Mon Aug 25 17:03:57 2008 for libtonc by  doxygen 1.5.3