mirror of https://github.com/zeldaret/tmc.git
				
				
				
			
		
			
				
	
	
		
			495 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			495 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 	.set PSR_USR_MODE,  0x00000010
 | |
| 	.set PSR_FIQ_MODE,  0x00000011
 | |
| 	.set PSR_IRQ_MODE,  0x00000012
 | |
| 	.set PSR_SVC_MODE,  0x00000013
 | |
| 	.set PSR_ABT_MODE,  0x00000017
 | |
| 	.set PSR_UND_MODE,  0x0000001b
 | |
| 	.set PSR_SYS_MODE,  0x0000001f
 | |
| 	.set PSR_MODE_MASK, 0x0000001f
 | |
| 	.set PSR_T_BIT,     0x00000020
 | |
| 	.set PSR_F_BIT,     0x00000040
 | |
| 	.set PSR_I_BIT,     0x00000080
 | |
| 
 | |
| 	.set EWRAM_START, 0x2000000
 | |
| 	.set EWRAM_END,   EWRAM_START + 0x40000
 | |
| 	.set IWRAM_START, 0x3000000
 | |
| 	.set IWRAM_END,   IWRAM_START + 0x8000
 | |
| 
 | |
| 	.set PLTT,     0x5000000
 | |
| 	.set BG_PLTT,  PLTT
 | |
| 	.set OBJ_PLTT, PLTT + 0x200
 | |
| 
 | |
| 	.set VRAM,      0x6000000
 | |
| 	.set BG_VRAM,   VRAM
 | |
| 	.set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG
 | |
| 	.set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG
 | |
| 
 | |
| 	.set OAM, 0x7000000
 | |
| 
 | |
| 	.set SOUND_INFO_PTR, 0x3007FF0
 | |
| 	.set INTR_CHECK,     0x3007FF8
 | |
| 	.set INTR_VECTOR,    0x3007FFC
 | |
| 
 | |
| 	.set INTR_FLAG_VBLANK,  1 << 0
 | |
| 	.set INTR_FLAG_HBLANK,  1 << 1
 | |
| 	.set INTR_FLAG_VCOUNT,  1 << 2
 | |
| 	.set INTR_FLAG_TIMER0,  1 << 3
 | |
| 	.set INTR_FLAG_TIMER1,  1 << 4
 | |
| 	.set INTR_FLAG_TIMER2,  1 << 5
 | |
| 	.set INTR_FLAG_TIMER3,  1 << 6
 | |
| 	.set INTR_FLAG_SERIAL,  1 << 7
 | |
| 	.set INTR_FLAG_DMA0,    1 << 8
 | |
| 	.set INTR_FLAG_DMA1,    1 << 9
 | |
| 	.set INTR_FLAG_DMA2,    1 << 10
 | |
| 	.set INTR_FLAG_DMA3,    1 << 11
 | |
| 	.set INTR_FLAG_KEYPAD,  1 << 12
 | |
| 	.set INTR_FLAG_GAMEPAK, 1 << 13
 | |
| 
 | |
| 	.set VCOUNT_VBLANK, 160
 | |
| 	.set TOTAL_SCANLINES, 228
 | |
| 
 | |
| 	.set REG_BASE, 0x4000000 @ I/O register base address
 | |
| 
 | |
| @ I/O register offsets
 | |
| 	.set OFFSET_REG_DISPCNT,     0x0
 | |
| 	.set OFFSET_REG_DISPSTAT,    0x4
 | |
| 	.set OFFSET_REG_VCOUNT,      0x6
 | |
| 	.set OFFSET_REG_BG0CNT,      0x8
 | |
| 	.set OFFSET_REG_BG1CNT,      0xa
 | |
| 	.set OFFSET_REG_BG2CNT,      0xc
 | |
| 	.set OFFSET_REG_BG3CNT,      0xe
 | |
| 	.set OFFSET_REG_BG0HOFS,     0x10
 | |
| 	.set OFFSET_REG_BG0VOFS,     0x12
 | |
| 	.set OFFSET_REG_BG1HOFS,     0x14
 | |
| 	.set OFFSET_REG_BG1VOFS,     0x16
 | |
| 	.set OFFSET_REG_BG2HOFS,     0x18
 | |
| 	.set OFFSET_REG_BG2VOFS,     0x1a
 | |
| 	.set OFFSET_REG_BG3HOFS,     0x1c
 | |
| 	.set OFFSET_REG_BG3VOFS,     0x1e
 | |
| 	.set OFFSET_REG_BG2PA,       0x20
 | |
| 	.set OFFSET_REG_BG2PB,       0x22
 | |
| 	.set OFFSET_REG_BG2PC,       0x24
 | |
| 	.set OFFSET_REG_BG2PD,       0x26
 | |
| 	.set OFFSET_REG_BG2X_L,      0x28
 | |
| 	.set OFFSET_REG_BG2X_H,      0x2a
 | |
| 	.set OFFSET_REG_BG2Y_L,      0x2c
 | |
| 	.set OFFSET_REG_BG2Y_H,      0x2e
 | |
| 	.set OFFSET_REG_BG3PA,       0x30
 | |
| 	.set OFFSET_REG_BG3PB,       0x32
 | |
| 	.set OFFSET_REG_BG3PC,       0x34
 | |
| 	.set OFFSET_REG_BG3PD,       0x36
 | |
| 	.set OFFSET_REG_BG3X_L,      0x38
 | |
| 	.set OFFSET_REG_BG3X_H,      0x3a
 | |
| 	.set OFFSET_REG_BG3Y_L,      0x3c
 | |
| 	.set OFFSET_REG_BG3Y_H,      0x3e
 | |
| 	.set OFFSET_REG_WIN0H,       0x40
 | |
| 	.set OFFSET_REG_WIN1H,       0x42
 | |
| 	.set OFFSET_REG_WIN0V,       0x44
 | |
| 	.set OFFSET_REG_WIN1V,       0x46
 | |
| 	.set OFFSET_REG_WININ,       0x48
 | |
| 	.set OFFSET_REG_WINOUT,      0x4a
 | |
| 	.set OFFSET_REG_MOSAIC,      0x4c
 | |
| 	.set OFFSET_REG_BLDCNT,      0x50
 | |
| 	.set OFFSET_REG_BLDALPHA,    0x52
 | |
| 	.set OFFSET_REG_BLDY,        0x54
 | |
| 
 | |
| 	.set OFFSET_REG_SOUND1CNT,   0x60
 | |
| 	.set OFFSET_REG_SOUND1CNT_L, 0x60
 | |
| 	.set OFFSET_REG_NR10,        0x60
 | |
| 	.set OFFSET_REG_SOUND1CNT_H, 0x62
 | |
| 	.set OFFSET_REG_NR11,        0x62
 | |
| 	.set OFFSET_REG_NR12,        0x63
 | |
| 	.set OFFSET_REG_SOUND1CNT_X, 0x64
 | |
| 	.set OFFSET_REG_NR13,        0x64
 | |
| 	.set OFFSET_REG_NR14,        0x65
 | |
| 	.set OFFSET_REG_SOUND2CNT,   0x68
 | |
| 	.set OFFSET_REG_SOUND2CNT_L, 0x68
 | |
| 	.set OFFSET_REG_NR21,        0x68
 | |
| 	.set OFFSET_REG_NR22,        0x69
 | |
| 	.set OFFSET_REG_SOUND2CNT_H, 0x6c
 | |
| 	.set OFFSET_REG_NR23,        0x6c
 | |
| 	.set OFFSET_REG_NR24,        0x6d
 | |
| 	.set OFFSET_REG_SOUND3CNT,   0x70
 | |
| 	.set OFFSET_REG_SOUND3CNT_L, 0x70
 | |
| 	.set OFFSET_REG_NR30,        0x70
 | |
| 	.set OFFSET_REG_SOUND3CNT_H, 0x72
 | |
| 	.set OFFSET_REG_NR31,        0x72
 | |
| 	.set OFFSET_REG_NR32,        0x73
 | |
| 	.set OFFSET_REG_SOUND3CNT_X, 0x74
 | |
| 	.set OFFSET_REG_NR33,        0x74
 | |
| 	.set OFFSET_REG_NR34,        0x75
 | |
| 	.set OFFSET_REG_SOUND4CNT,   0x78
 | |
| 	.set OFFSET_REG_SOUND4CNT_L, 0x78
 | |
| 	.set OFFSET_REG_NR41,        0x78
 | |
| 	.set OFFSET_REG_NR42,        0x79
 | |
| 	.set OFFSET_REG_SOUND4CNT_H, 0x7c
 | |
| 	.set OFFSET_REG_NR43,        0x7c
 | |
| 	.set OFFSET_REG_NR44,        0x7d
 | |
| 	.set OFFSET_REG_SOUNDCNT,    0x80
 | |
| 	.set OFFSET_REG_SOUNDCNT_L,  0x80
 | |
| 	.set OFFSET_REG_NR50,        0x80
 | |
| 	.set OFFSET_REG_NR51,        0x81
 | |
| 	.set OFFSET_REG_SOUNDCNT_H,  0x82
 | |
| 	.set OFFSET_REG_SOUNDCNT_X,  0x84
 | |
| 	.set OFFSET_REG_NR52,        0x84
 | |
| 	.set OFFSET_REG_SOUNDBIAS,   0x88
 | |
| 	.set OFFSET_REG_WAVE_RAM,    0x90
 | |
| 	.set OFFSET_REG_WAVE_RAM0,   0x90
 | |
| 	.set OFFSET_REG_WAVE_RAM0_L, 0x90
 | |
| 	.set OFFSET_REG_WAVE_RAM0_H, 0x92
 | |
| 	.set OFFSET_REG_WAVE_RAM1,   0x94
 | |
| 	.set OFFSET_REG_WAVE_RAM1_L, 0x94
 | |
| 	.set OFFSET_REG_WAVE_RAM1_H, 0x96
 | |
| 	.set OFFSET_REG_WAVE_RAM2,   0x98
 | |
| 	.set OFFSET_REG_WAVE_RAM2_L, 0x98
 | |
| 	.set OFFSET_REG_WAVE_RAM2_H, 0x9a
 | |
| 	.set OFFSET_REG_WAVE_RAM3,   0x9c
 | |
| 	.set OFFSET_REG_WAVE_RAM3_L, 0x9c
 | |
| 	.set OFFSET_REG_WAVE_RAM3_H, 0x9e
 | |
| 	.set OFFSET_REG_FIFO,        0xa0
 | |
| 	.set OFFSET_REG_FIFO_A,      0xa0
 | |
| 	.set OFFSET_REG_FIFO_A_L,    0xa0
 | |
| 	.set OFFSET_REG_FIFO_A_H,    0xa2
 | |
| 	.set OFFSET_REG_FIFO_B,      0xa4
 | |
| 	.set OFFSET_REG_FIFO_B_L,    0xa4
 | |
| 	.set OFFSET_REG_FIFO_B_H,    0xa6
 | |
| 
 | |
| 	.set OFFSET_REG_DMA0,        0xb0
 | |
| 	.set OFFSET_REG_DMA0SAD,     0xb0
 | |
| 	.set OFFSET_REG_DMA0SAD_L,   0xb0
 | |
| 	.set OFFSET_REG_DMA0SAD_H,   0xb2
 | |
| 	.set OFFSET_REG_DMA0DAD,     0xb4
 | |
| 	.set OFFSET_REG_DMA0DAD_L,   0xb4
 | |
| 	.set OFFSET_REG_DMA0DAD_H,   0xb6
 | |
| 	.set OFFSET_REG_DMA0CNT,     0xb8
 | |
| 	.set OFFSET_REG_DMA0CNT_L,   0xb8
 | |
| 	.set OFFSET_REG_DMA0CNT_H,   0xba
 | |
| 	.set OFFSET_REG_DMA1,        0xbc
 | |
| 	.set OFFSET_REG_DMA1SAD,     0xbc
 | |
| 	.set OFFSET_REG_DMA1SAD_L,   0xbc
 | |
| 	.set OFFSET_REG_DMA1SAD_H,   0xbe
 | |
| 	.set OFFSET_REG_DMA1DAD,     0xc0
 | |
| 	.set OFFSET_REG_DMA1DAD_L,   0xc0
 | |
| 	.set OFFSET_REG_DMA1DAD_H,   0xc2
 | |
| 	.set OFFSET_REG_DMA1CNT,     0xc4
 | |
| 	.set OFFSET_REG_DMA1CNT_L,   0xc4
 | |
| 	.set OFFSET_REG_DMA1CNT_H,   0xc6
 | |
| 	.set OFFSET_REG_DMA2,        0xc8
 | |
| 	.set OFFSET_REG_DMA2SAD,     0xc8
 | |
| 	.set OFFSET_REG_DMA2SAD_L,   0xc8
 | |
| 	.set OFFSET_REG_DMA2SAD_H,   0xca
 | |
| 	.set OFFSET_REG_DMA2DAD,     0xcc
 | |
| 	.set OFFSET_REG_DMA2DAD_L,   0xcc
 | |
| 	.set OFFSET_REG_DMA2DAD_H,   0xce
 | |
| 	.set OFFSET_REG_DMA2CNT,     0xd0
 | |
| 	.set OFFSET_REG_DMA2CNT_L,   0xd0
 | |
| 	.set OFFSET_REG_DMA2CNT_H,   0xd2
 | |
| 	.set OFFSET_REG_DMA3,        0xd4
 | |
| 	.set OFFSET_REG_DMA3SAD,     0xd4
 | |
| 	.set OFFSET_REG_DMA3SAD_L,   0xd4
 | |
| 	.set OFFSET_REG_DMA3SAD_H,   0xd6
 | |
| 	.set OFFSET_REG_DMA3DAD,     0xd8
 | |
| 	.set OFFSET_REG_DMA3DAD_L,   0xd8
 | |
| 	.set OFFSET_REG_DMA3DAD_H,   0xda
 | |
| 	.set OFFSET_REG_DMA3CNT,     0xdc
 | |
| 	.set OFFSET_REG_DMA3CNT_L,   0xdc
 | |
| 	.set OFFSET_REG_DMA3CNT_H,   0xde
 | |
| 
 | |
| 	.set OFFSET_REG_TM0CNT,      0x100
 | |
| 	.set OFFSET_REG_TM0CNT_L,    0x100
 | |
| 	.set OFFSET_REG_TM0CNT_H,    0x102
 | |
| 	.set OFFSET_REG_TM1CNT,      0x104
 | |
| 	.set OFFSET_REG_TM1CNT_L,    0x104
 | |
| 	.set OFFSET_REG_TM1CNT_H,    0x106
 | |
| 	.set OFFSET_REG_TM2CNT,      0x108
 | |
| 	.set OFFSET_REG_TM2CNT_L,    0x108
 | |
| 	.set OFFSET_REG_TM2CNT_H,    0x10a
 | |
| 	.set OFFSET_REG_TM3CNT,      0x10c
 | |
| 	.set OFFSET_REG_TM3CNT_L,    0x10c
 | |
| 	.set OFFSET_REG_TM3CNT_H,    0x10e
 | |
| 
 | |
| 	.set OFFSET_REG_SIOCNT,      0x128
 | |
| 	.set OFFSET_REG_SIODATA8,    0x12a
 | |
| 	.set OFFSET_REG_SIODATA32,   0x120
 | |
| 	.set OFFSET_REG_SIOMLT_SEND, 0x12a
 | |
| 	.set OFFSET_REG_SIOMLT_RECV, 0x120
 | |
| 	.set OFFSET_REG_SIOMULTI0,   0x120
 | |
| 	.set OFFSET_REG_SIOMULTI1,   0x122
 | |
| 	.set OFFSET_REG_SIOMULTI2,   0x124
 | |
| 	.set OFFSET_REG_SIOMULTI3,   0x126
 | |
| 
 | |
| 	.set OFFSET_REG_KEYINPUT,    0x130
 | |
| 	.set OFFSET_REG_KEYCNT,      0x132
 | |
| 
 | |
| 	.set OFFSET_REG_RCNT,        0x134
 | |
| 
 | |
| 	.set OFFSET_REG_JOYCNT,      0x140
 | |
| 	.set OFFSET_REG_JOYSTAT,     0x158
 | |
| 	.set OFFSET_REG_JOY_RECV,    0x150
 | |
| 	.set OFFSET_REG_JOY_RECV_L,  0x150
 | |
| 	.set OFFSET_REG_JOY_RECV_H,  0x152
 | |
| 	.set OFFSET_REG_JOY_TRANS,   0x154
 | |
| 	.set OFFSET_REG_JOY_TRANS_L, 0x154
 | |
| 	.set OFFSET_REG_JOY_TRANS_H, 0x156
 | |
| 
 | |
| 	.set OFFSET_REG_IME,         0x208
 | |
| 	.set OFFSET_REG_IE,          0x200
 | |
| 	.set OFFSET_REG_IF,          0x202
 | |
| 
 | |
| 	.set OFFSET_REG_WAITCNT,     0x204
 | |
| 
 | |
| @ I/O register addresses
 | |
| 	.set REG_DISPCNT,     REG_BASE + OFFSET_REG_DISPCNT
 | |
| 	.set REG_DISPSTAT,    REG_BASE + OFFSET_REG_DISPSTAT
 | |
| 	.set REG_VCOUNT,      REG_BASE + OFFSET_REG_VCOUNT
 | |
| 	.set REG_BG0CNT,      REG_BASE + OFFSET_REG_BG0CNT
 | |
| 	.set REG_BG1CNT,      REG_BASE + OFFSET_REG_BG1CNT
 | |
| 	.set REG_BG2CNT,      REG_BASE + OFFSET_REG_BG2CNT
 | |
| 	.set REG_BG3CNT,      REG_BASE + OFFSET_REG_BG3CNT
 | |
| 	.set REG_BG0HOFS,     REG_BASE + OFFSET_REG_BG0HOFS
 | |
| 	.set REG_BG0VOFS,     REG_BASE + OFFSET_REG_BG0VOFS
 | |
| 	.set REG_BG1HOFS,     REG_BASE + OFFSET_REG_BG1HOFS
 | |
| 	.set REG_BG1VOFS,     REG_BASE + OFFSET_REG_BG1VOFS
 | |
| 	.set REG_BG2HOFS,     REG_BASE + OFFSET_REG_BG2HOFS
 | |
| 	.set REG_BG2VOFS,     REG_BASE + OFFSET_REG_BG2VOFS
 | |
| 	.set REG_BG3HOFS,     REG_BASE + OFFSET_REG_BG3HOFS
 | |
| 	.set REG_BG3VOFS,     REG_BASE + OFFSET_REG_BG3VOFS
 | |
| 	.set REG_BG2PA,       REG_BASE + OFFSET_REG_BG2PA
 | |
| 	.set REG_BG2PB,       REG_BASE + OFFSET_REG_BG2PB
 | |
| 	.set REG_BG2PC,       REG_BASE + OFFSET_REG_BG2PC
 | |
| 	.set REG_BG2PD,       REG_BASE + OFFSET_REG_BG2PD
 | |
| 	.set REG_BG2X_L,      REG_BASE + OFFSET_REG_BG2X_L
 | |
| 	.set REG_BG2X_H,      REG_BASE + OFFSET_REG_BG2X_H
 | |
| 	.set REG_BG2Y_L,      REG_BASE + OFFSET_REG_BG2Y_L
 | |
| 	.set REG_BG2Y_H,      REG_BASE + OFFSET_REG_BG2Y_H
 | |
| 	.set REG_BG3PA,       REG_BASE + OFFSET_REG_BG3PA
 | |
| 	.set REG_BG3PB,       REG_BASE + OFFSET_REG_BG3PB
 | |
| 	.set REG_BG3PC,       REG_BASE + OFFSET_REG_BG3PC
 | |
| 	.set REG_BG3PD,       REG_BASE + OFFSET_REG_BG3PD
 | |
| 	.set REG_BG3X_L,      REG_BASE + OFFSET_REG_BG3X_L
 | |
| 	.set REG_BG3X_H,      REG_BASE + OFFSET_REG_BG3X_H
 | |
| 	.set REG_BG3Y_L,      REG_BASE + OFFSET_REG_BG3Y_L
 | |
| 	.set REG_BG3Y_H,      REG_BASE + OFFSET_REG_BG3Y_H
 | |
| 	.set REG_WIN0H,       REG_BASE + OFFSET_REG_WIN0H
 | |
| 	.set REG_WIN1H,       REG_BASE + OFFSET_REG_WIN1H
 | |
| 	.set REG_WIN0V,       REG_BASE + OFFSET_REG_WIN0V
 | |
| 	.set REG_WIN1V,       REG_BASE + OFFSET_REG_WIN1V
 | |
| 	.set REG_WININ,       REG_BASE + OFFSET_REG_WININ
 | |
| 	.set REG_WINOUT,      REG_BASE + OFFSET_REG_WINOUT
 | |
| 	.set REG_MOSAIC,      REG_BASE + OFFSET_REG_MOSAIC
 | |
| 	.set REG_BLDCNT,      REG_BASE + OFFSET_REG_BLDCNT
 | |
| 	.set REG_BLDALPHA,    REG_BASE + OFFSET_REG_BLDALPHA
 | |
| 	.set REG_BLDY,        REG_BASE + OFFSET_REG_BLDY
 | |
| 
 | |
| 	.set REG_SOUND1CNT,   REG_BASE + OFFSET_REG_SOUND1CNT
 | |
| 	.set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L
 | |
| 	.set REG_NR10,        REG_BASE + OFFSET_REG_NR10
 | |
| 	.set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H
 | |
| 	.set REG_NR11,        REG_BASE + OFFSET_REG_NR11
 | |
| 	.set REG_NR12,        REG_BASE + OFFSET_REG_NR12
 | |
| 	.set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X
 | |
| 	.set REG_NR13,        REG_BASE + OFFSET_REG_NR13
 | |
| 	.set REG_NR14,        REG_BASE + OFFSET_REG_NR14
 | |
| 	.set REG_SOUND2CNT,   REG_BASE + OFFSET_REG_SOUND2CNT
 | |
| 	.set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L
 | |
| 	.set REG_NR21,        REG_BASE + OFFSET_REG_NR21
 | |
| 	.set REG_NR22,        REG_BASE + OFFSET_REG_NR22
 | |
| 	.set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H
 | |
| 	.set REG_NR23,        REG_BASE + OFFSET_REG_NR23
 | |
| 	.set REG_NR24,        REG_BASE + OFFSET_REG_NR24
 | |
| 	.set REG_SOUND3CNT,   REG_BASE + OFFSET_REG_SOUND3CNT
 | |
| 	.set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L
 | |
| 	.set REG_NR30,        REG_BASE + OFFSET_REG_NR30
 | |
| 	.set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H
 | |
| 	.set REG_NR31,        REG_BASE + OFFSET_REG_NR31
 | |
| 	.set REG_NR32,        REG_BASE + OFFSET_REG_NR32
 | |
| 	.set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X
 | |
| 	.set REG_NR33,        REG_BASE + OFFSET_REG_NR33
 | |
| 	.set REG_NR34,        REG_BASE + OFFSET_REG_NR34
 | |
| 	.set REG_SOUND4CNT,   REG_BASE + OFFSET_REG_SOUND4CNT
 | |
| 	.set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L
 | |
| 	.set REG_NR41,        REG_BASE + OFFSET_REG_NR41
 | |
| 	.set REG_NR42,        REG_BASE + OFFSET_REG_NR42
 | |
| 	.set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H
 | |
| 	.set REG_NR43,        REG_BASE + OFFSET_REG_NR43
 | |
| 	.set REG_NR44,        REG_BASE + OFFSET_REG_NR44
 | |
| 	.set REG_SOUNDCNT,    REG_BASE + OFFSET_REG_SOUNDCNT
 | |
| 	.set REG_SOUNDCNT_L,  REG_BASE + OFFSET_REG_SOUNDCNT_L
 | |
| 	.set REG_NR50,        REG_BASE + OFFSET_REG_NR50
 | |
| 	.set REG_NR51,        REG_BASE + OFFSET_REG_NR51
 | |
| 	.set REG_SOUNDCNT_H,  REG_BASE + OFFSET_REG_SOUNDCNT_H
 | |
| 	.set REG_SOUNDCNT_X,  REG_BASE + OFFSET_REG_SOUNDCNT_X
 | |
| 	.set REG_NR52,        REG_BASE + OFFSET_REG_NR52
 | |
| 	.set REG_SOUNDBIAS,   REG_BASE + OFFSET_REG_SOUNDBIAS
 | |
| 	.set REG_WAVE_RAM,    REG_BASE + OFFSET_REG_WAVE_RAM
 | |
| 	.set REG_WAVE_RAM0,   REG_BASE + OFFSET_REG_WAVE_RAM0
 | |
| 	.set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L
 | |
| 	.set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H
 | |
| 	.set REG_WAVE_RAM1,   REG_BASE + OFFSET_REG_WAVE_RAM1
 | |
| 	.set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L
 | |
| 	.set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H
 | |
| 	.set REG_WAVE_RAM2,   REG_BASE + OFFSET_REG_WAVE_RAM2
 | |
| 	.set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L
 | |
| 	.set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H
 | |
| 	.set REG_WAVE_RAM3,   REG_BASE + OFFSET_REG_WAVE_RAM3
 | |
| 	.set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L
 | |
| 	.set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H
 | |
| 	.set REG_FIFO,        REG_BASE + OFFSET_REG_FIFO
 | |
| 	.set REG_FIFO_A,      REG_BASE + OFFSET_REG_FIFO_A
 | |
| 	.set REG_FIFO_A_L,    REG_BASE + OFFSET_REG_FIFO_A_L
 | |
| 	.set REG_FIFO_A_H,    REG_BASE + OFFSET_REG_FIFO_A_H
 | |
| 	.set REG_FIFO_B,      REG_BASE + OFFSET_REG_FIFO_B
 | |
| 	.set REG_FIFO_B_L,    REG_BASE + OFFSET_REG_FIFO_B_L
 | |
| 	.set REG_FIFO_B_H,    REG_BASE + OFFSET_REG_FIFO_B_H
 | |
| 
 | |
| 	.set REG_DMA0,        REG_BASE + OFFSET_REG_DMA0
 | |
| 	.set REG_DMA0SAD,     REG_BASE + OFFSET_REG_DMA0SAD
 | |
| 	.set REG_DMA0SAD_L,   REG_BASE + OFFSET_REG_DMA0SAD_L
 | |
| 	.set REG_DMA0SAD_H,   REG_BASE + OFFSET_REG_DMA0SAD_H
 | |
| 	.set REG_DMA0DAD,     REG_BASE + OFFSET_REG_DMA0DAD
 | |
| 	.set REG_DMA0DAD_L,   REG_BASE + OFFSET_REG_DMA0DAD_L
 | |
| 	.set REG_DMA0DAD_H,   REG_BASE + OFFSET_REG_DMA0DAD_H
 | |
| 	.set REG_DMA0CNT,     REG_BASE + OFFSET_REG_DMA0CNT
 | |
| 	.set REG_DMA0CNT_L,   REG_BASE + OFFSET_REG_DMA0CNT_L
 | |
| 	.set REG_DMA0CNT_H,   REG_BASE + OFFSET_REG_DMA0CNT_H
 | |
| 	.set REG_DMA1,        REG_BASE + OFFSET_REG_DMA1
 | |
| 	.set REG_DMA1SAD,     REG_BASE + OFFSET_REG_DMA1SAD
 | |
| 	.set REG_DMA1SAD_L,   REG_BASE + OFFSET_REG_DMA1SAD_L
 | |
| 	.set REG_DMA1SAD_H,   REG_BASE + OFFSET_REG_DMA1SAD_H
 | |
| 	.set REG_DMA1DAD,     REG_BASE + OFFSET_REG_DMA1DAD
 | |
| 	.set REG_DMA1DAD_L,   REG_BASE + OFFSET_REG_DMA1DAD_L
 | |
| 	.set REG_DMA1DAD_H,   REG_BASE + OFFSET_REG_DMA1DAD_H
 | |
| 	.set REG_DMA1CNT,     REG_BASE + OFFSET_REG_DMA1CNT
 | |
| 	.set REG_DMA1CNT_L,   REG_BASE + OFFSET_REG_DMA1CNT_L
 | |
| 	.set REG_DMA1CNT_H,   REG_BASE + OFFSET_REG_DMA1CNT_H
 | |
| 	.set REG_DMA2,        REG_BASE + OFFSET_REG_DMA2
 | |
| 	.set REG_DMA2SAD,     REG_BASE + OFFSET_REG_DMA2SAD
 | |
| 	.set REG_DMA2SAD_L,   REG_BASE + OFFSET_REG_DMA2SAD_L
 | |
| 	.set REG_DMA2SAD_H,   REG_BASE + OFFSET_REG_DMA2SAD_H
 | |
| 	.set REG_DMA2DAD,     REG_BASE + OFFSET_REG_DMA2DAD
 | |
| 	.set REG_DMA2DAD_L,   REG_BASE + OFFSET_REG_DMA2DAD_L
 | |
| 	.set REG_DMA2DAD_H,   REG_BASE + OFFSET_REG_DMA2DAD_H
 | |
| 	.set REG_DMA2CNT,     REG_BASE + OFFSET_REG_DMA2CNT
 | |
| 	.set REG_DMA2CNT_L,   REG_BASE + OFFSET_REG_DMA2CNT_L
 | |
| 	.set REG_DMA2CNT_H,   REG_BASE + OFFSET_REG_DMA2CNT_H
 | |
| 	.set REG_DMA3,        REG_BASE + OFFSET_REG_DMA3
 | |
| 	.set REG_DMA3SAD,     REG_BASE + OFFSET_REG_DMA3SAD
 | |
| 	.set REG_DMA3SAD_L,   REG_BASE + OFFSET_REG_DMA3SAD_L
 | |
| 	.set REG_DMA3SAD_H,   REG_BASE + OFFSET_REG_DMA3SAD_H
 | |
| 	.set REG_DMA3DAD,     REG_BASE + OFFSET_REG_DMA3DAD
 | |
| 	.set REG_DMA3DAD_L,   REG_BASE + OFFSET_REG_DMA3DAD_L
 | |
| 	.set REG_DMA3DAD_H,   REG_BASE + OFFSET_REG_DMA3DAD_H
 | |
| 	.set REG_DMA3CNT,     REG_BASE + OFFSET_REG_DMA3CNT
 | |
| 	.set REG_DMA3CNT_L,   REG_BASE + OFFSET_REG_DMA3CNT_L
 | |
| 	.set REG_DMA3CNT_H,   REG_BASE + OFFSET_REG_DMA3CNT_H
 | |
| 
 | |
| 	.set REG_TM0CNT,      REG_BASE + OFFSET_REG_TM0CNT
 | |
| 	.set REG_TM0CNT_L,    REG_BASE + OFFSET_REG_TM0CNT_L
 | |
| 	.set REG_TM0CNT_H,    REG_BASE + OFFSET_REG_TM0CNT_H
 | |
| 	.set REG_TM1CNT,      REG_BASE + OFFSET_REG_TM1CNT
 | |
| 	.set REG_TM1CNT_L,    REG_BASE + OFFSET_REG_TM1CNT_L
 | |
| 	.set REG_TM1CNT_H,    REG_BASE + OFFSET_REG_TM1CNT_H
 | |
| 	.set REG_TM2CNT,      REG_BASE + OFFSET_REG_TM2CNT
 | |
| 	.set REG_TM2CNT_L,    REG_BASE + OFFSET_REG_TM2CNT_L
 | |
| 	.set REG_TM2CNT_H,    REG_BASE + OFFSET_REG_TM2CNT_H
 | |
| 	.set REG_TM3CNT,      REG_BASE + OFFSET_REG_TM3CNT
 | |
| 	.set REG_TM3CNT_L,    REG_BASE + OFFSET_REG_TM3CNT_L
 | |
| 	.set REG_TM3CNT_H,    REG_BASE + OFFSET_REG_TM3CNT_H
 | |
| 
 | |
| 	.set REG_SIOCNT,      REG_BASE + OFFSET_REG_SIOCNT
 | |
| 	.set REG_SIODATA8,    REG_BASE + OFFSET_REG_SIODATA8
 | |
| 	.set REG_SIODATA32,   REG_BASE + OFFSET_REG_SIODATA32
 | |
| 	.set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND
 | |
| 	.set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV
 | |
| 	.set REG_SIOMULTI0,   REG_BASE + OFFSET_REG_SIOMULTI0
 | |
| 	.set REG_SIOMULTI1,   REG_BASE + OFFSET_REG_SIOMULTI1
 | |
| 	.set REG_SIOMULTI2,   REG_BASE + OFFSET_REG_SIOMULTI2
 | |
| 	.set REG_SIOMULTI3,   REG_BASE + OFFSET_REG_SIOMULTI3
 | |
| 
 | |
| 	.set REG_KEYINPUT,    REG_BASE + OFFSET_REG_KEYINPUT
 | |
| 	.set REG_KEYCNT,      REG_BASE + OFFSET_REG_KEYCNT
 | |
| 
 | |
| 	.set REG_RCNT,        REG_BASE + OFFSET_REG_RCNT
 | |
| 
 | |
| 	.set REG_JOYCNT,      REG_BASE + OFFSET_REG_JOYCNT
 | |
| 	.set REG_JOYSTAT,     REG_BASE + OFFSET_REG_JOYSTAT
 | |
| 	.set REG_JOY_RECV,    REG_BASE + OFFSET_REG_JOY_RECV
 | |
| 	.set REG_JOY_RECV_L,  REG_BASE + OFFSET_REG_JOY_RECV_L
 | |
| 	.set REG_JOY_RECV_H,  REG_BASE + OFFSET_REG_JOY_RECV_H
 | |
| 	.set REG_JOY_TRANS,   REG_BASE + OFFSET_REG_JOY_TRANS
 | |
| 	.set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L
 | |
| 	.set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H
 | |
| 
 | |
| 	.set REG_IME,         REG_BASE + OFFSET_REG_IME
 | |
| 	.set REG_IE,          REG_BASE + OFFSET_REG_IE
 | |
| 	.set REG_IF,          REG_BASE + OFFSET_REG_IF
 | |
| 
 | |
| 	.set REG_WAITCNT,     REG_BASE + OFFSET_REG_WAITCNT
 | |
| 
 | |
| @ DMA register constants
 | |
| 
 | |
| 	.set DMA_DEST_INC,      0x0000
 | |
| 	.set DMA_DEST_DEC,      0x0020
 | |
| 	.set DMA_DEST_FIXED,    0x0040
 | |
| 	.set DMA_DEST_RELOAD,   0x0060
 | |
| 	.set DMA_SRC_INC,       0x0000
 | |
| 	.set DMA_SRC_DEC,       0x0080
 | |
| 	.set DMA_SRC_FIXED,     0x0100
 | |
| 	.set DMA_REPEAT,        0x0200
 | |
| 	.set DMA_16BIT,         0x0000
 | |
| 	.set DMA_32BIT,         0x0400
 | |
| 	.set DMA_DREQ_ON,       0x0800
 | |
| 	.set DMA_START_NOW,     0x0000
 | |
| 	.set DMA_START_VBLANK,  0x1000
 | |
| 	.set DMA_START_HBLANK,  0x2000
 | |
| 	.set DMA_START_SPECIAL, 0x3000
 | |
| 	.set DMA_INTR_ENABLE,   0x4000
 | |
| 	.set DMA_ENABLE,        0x8000
 | |
| 
 | |
| @ OAM attribute constants
 | |
| 
 | |
| 	.set OAM_OBJ_NORMAL,         0x00000000
 | |
| 	.set OAM_OBJ_BLEND,          0x00000400
 | |
| 	.set OAM_OBJ_WINDOW,         0x00000800
 | |
| 
 | |
| 	.set OAM_AFFINE_NONE,        0x00000000
 | |
| 	.set OAM_AFFINE_NORMAL_SIZE, 0x00000100
 | |
| 	.set OAM_OBJ_DISABLED,       0x00000200
 | |
| 	.set OAM_AFFINE_DOUBLE_SIZE, 0x00000300
 | |
| 
 | |
| 	.set OAM_MOSAIC_OFF,         0x00000000
 | |
| 	.set OAM_MOSAIC_ON,          0x00001000
 | |
| 
 | |
| 	.set OAM_4BPP,               0x00000000
 | |
| 	.set OAM_8BPP,               0x00002000
 | |
| 
 | |
| 	.set OAM_H_FLIP,             0x10000000
 | |
| 	.set OAM_V_FLIP,             0x20000000
 | |
| 
 | |
| 	.set OAM_SQUARE,             0x00000000
 | |
| 	.set OAM_H_RECTANGLE,        0x00004000
 | |
| 	.set OAM_V_RECTANGLE,        0x00008000
 | |
| 	.set OAM_SIZE_0,             0x00000000
 | |
| 	.set OAM_SIZE_1,             0x40000000
 | |
| 	.set OAM_SIZE_2,             0x80000000
 | |
| 	.set OAM_SIZE_3,             0xc0000000
 | |
| 
 | |
| 	.set OAM_SIZE_8x8,           OAM_SIZE_0 | OAM_SQUARE
 | |
| 	.set OAM_SIZE_16x16,         OAM_SIZE_1 | OAM_SQUARE
 | |
| 	.set OAM_SIZE_32x32,         OAM_SIZE_2 | OAM_SQUARE
 | |
| 	.set OAM_SIZE_64x64,         OAM_SIZE_3 | OAM_SQUARE
 | |
| 
 | |
| 	.set OAM_SIZE_16x8,          OAM_SIZE_0 | OAM_H_RECTANGLE
 | |
| 	.set OAM_SIZE_32x8,          OAM_SIZE_1 | OAM_H_RECTANGLE
 | |
| 	.set OAM_SIZE_32x16,         OAM_SIZE_2 | OAM_H_RECTANGLE
 | |
| 	.set OAM_SIZE_64x32,         OAM_SIZE_3 | OAM_H_RECTANGLE
 | |
| 
 | |
| 	.set OAM_SIZE_8x16,          OAM_SIZE_0 | OAM_V_RECTANGLE
 | |
| 	.set OAM_SIZE_8x32,          OAM_SIZE_1 | OAM_V_RECTANGLE
 | |
| 	.set OAM_SIZE_16x32,         OAM_SIZE_2 | OAM_V_RECTANGLE
 | |
| 	.set OAM_SIZE_32x64,         OAM_SIZE_3 | OAM_V_RECTANGLE
 | |
| 
 | |
| @ SIO constants
 | |
| 
 | |
| 	.set SIO_ENABLE,             0x80
 |