uncart/source/misc.h
archshift de5f58b7a0 Move gamecart files to their own folder
Preparation for splitting them up into multiple files
2015-05-10 00:31:52 -07:00

177 lines
7.0 KiB
C

#pragma once
#include "common.h"
#define READ 1
#define WRITE 2
#define CREATE 4
#define REG_CARDCONF (*(vu16*)0x1000000C)
#define REG_CARDCONF2 (*(vu8*)0x10000010)
#define REG_CTRCARDCNT (*(vu32*)0x10004000)
#define REG_CTRCARDBLKCNT (*(vu32*)0x10004004)
#define REG_CTRCARDSECCNT (*(vu32*)0x10004008)
#define REG_CTRCARDSECSEED (*(vu32*)0x10004010)
#define REG_CTRCARDCMD ((vu32*)0x10004020)
#define REG_CTRCARDFIFO (*(vu32*)0x10004030)
#define KEYS (*(vu32*)0x10146000)
#define PXICNT (*(vu32*)0x10163004)
#define IE (*(vu32*)0x10001000)
#define IF (*(vu32*)0x10001004)
#define TM0VAL (*(vu16*)0x10003000)
#define TM0CNT (*(vu16*)0x10003002)
#define TM1VAL (*(vu16*)0x10003004)
#define TM1CNT (*(vu16*)0x10003006)
#define TM2VAL (*(vu16*)0x10003008)
#define TM2CNT (*(vu16*)0x1000300A)
#define TM3VAL (*(vu16*)0x1000300C)
#define TM3CNT (*(vu16*)0x1000300E)
#define NDMAGCNT (*(vu32*)0x10002000)
#define NDMACNT(n) (*(vu32*)(0x1000201C+n*0x1c))
#define REG_AESCNT (*(vu32*)0x10009000)
#define REG_AESBLKCNT (*(vu32*)0x10009004)
#define REG_AESBLKCNTH1 (*(vu16*)0x10009004)
#define REG_AESBLKCNTH2 (*(vu16*)0x10009006)
#define REG_AESWRFIFO (*(vu32*)0x10009008)
#define REG_AESRDFIFO (*(vu32*)0x1000900C)
#define REG_AESKEYSEL (*(vu8*)0x10009010)
#define REG_AESKEYCNT (*(vu8*)0x10009011)
#define REG_AESCTR ((vu32*)0x10009020) //16
#define REG_AESMAC ((vu32*)0x10009030) //16
#define REG_AESKEY0 ((vu32*)0x10009040) //48
#define REG_AESKEY1 ((vu32*)0x10009070) //48
#define REG_AESKEY2 ((vu32*)0x100090A0) //48
#define REG_AESKEY3 ((vu32*)0x100090D0) //48
#define REG_AESKEYFIFO (*(vu32*)0x10009100)
#define REG_AESKEYXFIFO (*(vu32*)0x10009104)
#define REG_AESKEYYFIFO (*(vu32*)0x10009108)
#define AES_WRITE_FIFO_COUNT ((REG_AESCNT>>0) & 0x1F)
#define AES_READ_FIFO_COUNT ((REG_AESCNT>>5) & 0x1F)
#define AES_BUSY (1<<31)
#define AES_FLUSH_READ_FIFO (1<<10)
#define AES_FLUSH_WRITE_FIFO (1<<11)
#define AES_BIT12 (1<<12)
#define AES_BIT13 (1<<13)
#define AES_MAC_SIZE(n) ((n&7)<<16)
#define AES_MAC_REGISTER_SOURCE (1<<20)
#define AES_UNKNOWN_21 (1<<21)
#define AES_OUTPUT_BIG_ENDIAN (1<<22)
#define AES_INPUT_BIG_ENDIAN (1<<23)
#define AES_OUTPUT_NORMAL_ORDER (1<<24)
#define AES_INPUT_NORMAL_ORDER (1<<25)
#define AES_UNKNOWN_26 (1<<26)
#define AES_MODE(n) ((n&7)<<27)
#define AES_INTERRUPT_ENABLE (1<<30)
#define AES_ENABLE (1<<31)
#define AES_MODE_CCM_DECRYPT (0)
#define AES_MODE_CCM_ENCRYPT (1)
#define AES_MODE_CTR (2)
#define AES_MODE_UNK3 (3)
#define AES_MODE_CBC_DECRYPT (4)
#define AES_MODE_CBC_ENCRYPT (5)
#define AES_MODE_UNK6 (6)
#define AES_MODE_UNK7 (7)
#define REG_NTRCARDMCNT (*(vu16*)0x10164000)
#define REG_NTRCARDMDATA (*(vu16*)0x10164002)
#define REG_NTRCARDROMCNT (*(vu32*)0x10164004)
#define REG_NTRCARDCMD ((vu8*)0x10164008)
#define REG_NTRCARDSEEDX_L (*(vu32*)0x10164010)
#define REG_NTRCARDSEEDY_L (*(vu32*)0x10164014)
#define REG_NTRCARDSEEDX_H (*(vu16*)0x10164018)
#define REG_NTRCARDSEEDY_H (*(vu16*)0x1016401A)
#define REG_NTRCARDFIFO (*(vu32*)0x1016401C)
#define NTRCARD_PAGESIZE_0 (0<<24)
#define NTRCARD_PAGESIZE_4 (7<<24)
#define NTRCARD_PAGESIZE_512 (1<<24)
#define NTRCARD_PAGESIZE_1K (2<<24)
#define NTRCARD_PAGESIZE_2K (3<<24)
#define NTRCARD_PAGESIZE_4K (4<<24)
#define NTRCARD_PAGESIZE_8K (5<<24)
#define NTRCARD_PAGESIZE_16K (6<<24)
#define CTRCARD_PAGESIZE_0 (0<<16)
#define CTRCARD_PAGESIZE_4 (1<<16)
#define CTRCARD_PAGESIZE_16 (2<<16)
#define CTRCARD_PAGESIZE_64 (3<<16)
#define CTRCARD_PAGESIZE_512 (4<<16)
#define CTRCARD_PAGESIZE_1K (5<<16)
#define CTRCARD_PAGESIZE_2K (6<<16)
#define CTRCARD_PAGESIZE_4K (7<<16)
#define CTRCARD_PAGESIZE_16K (8<<16)
#define CTRCARD_PAGESIZE_64K (9<<16)
#define CTRCARD_CRC_ERROR (1<<4)
#define CTRCARD_ACTIVATE (1<<31) // when writing, get the ball rolling
#define CTRCARD_IE (1<<30) // Interrupt enable
#define CTRCARD_WR (1<<29) // Card write enable
#define CTRCARD_nRESET (1<<28) // value on the /reset pin (1 = high out, not a reset state, 0 = low out = in reset)
#define CTRCARD_BLK_SIZE(n) (((n)&0xF)<<16) // Transfer block size
#define CTRCARD_BUSY (1<<31) // when reading, still expecting incomming data?
#define CTRCARD_DATA_READY (1<<27) // when reading, REG_CTRCARDFIFO has another word of data and is good to go
#define NTRCARD_ACTIVATE (1<<31) // when writing, get the ball rolling
#define NTRCARD_WR (1<<30) // Card write enable
#define NTRCARD_nRESET (1<<29) // value on the /reset pin (1 = high out, not a reset state, 0 = low out = in reset)
#define NTRCARD_SEC_LARGE (1<<28) // Use "other" secure area mode, which tranfers blocks of 0x1000 bytes at a time
#define NTRCARD_CLK_SLOW (1<<27) // Transfer clock rate (0 = 6.7MHz, 1 = 4.2MHz)
#define NTRCARD_BLK_SIZE(n) (((n)&0x7)<<24) // Transfer block size, (0 = None, 1..6 = (0x100 << n) bytes, 7 = 4 bytes)
#define NTRCARD_SEC_CMD (1<<22) // The command transfer will be hardware encrypted (KEY2)
#define NTRCARD_DELAY2(n) (((n)&0x3F)<<16) // Transfer delay length part 2
#define NTRCARD_SEC_SEED (1<<15) // Apply encryption (KEY2) seed to hardware registers
#define NTRCARD_SEC_EN (1<<14) // Security enable
#define NTRCARD_SEC_DAT (1<<13) // The data transfer will be hardware encrypted (KEY2)
#define NTRCARD_DELAY1(n) ((n)&0x1FFF) // Transfer delay length part 1
// 3 bits in b10..b8 indicate something
// read bits
#define NTRCARD_BUSY (1<<31) // when reading, still expecting incomming data?
#define NTRCARD_DATA_READY (1<<23) // when reading, REG_NTRCARDFIFO has another word of data and is good to go
// Card commands
#define NTRCARD_CMD_DUMMY 0x9F
#define NTRCARD_CMD_HEADER_READ 0x00
#define NTRCARD_CMD_HEADER_CHIPID 0x90
#define NTRCARD_CMD_ACTIVATE_BF 0x3C // Go into blowfish (KEY1) encryption mode
#define NTRCARD_CMD_ACTIVATE_SEC 0x40 // Go into hardware (KEY2) encryption mode
#define NTRCARD_CMD_SECURE_CHIPID 0x10
#define NTRCARD_CMD_SECURE_READ 0x20
#define NTRCARD_CMD_DISABLE_SEC 0x60 // Leave hardware (KEY2) encryption mode
#define NTRCARD_CMD_DATA_MODE 0xA0
#define NTRCARD_CMD_DATA_READ 0xB7
#define NTRCARD_CMD_DATA_CHIPID 0xB8
#define NTRCARD_CR1_ENABLE 0x8000
#define NTRCARD_CR1_IRQ 0x4000
//REG_AUXSPICNT
#define CARD_ENABLE (1<<15)
#define CARD_SPI_ENABLE (1<<13)
#define CARD_SPI_BUSY (1<<7)
#define CARD_SPI_HOLD (1<<6)
#define KEY_PARAM 0x3F1FFF
#define CTRKEY_PARAM 0x1000000
#define LATENCY 0x822C
#define KEY_A (1<<0)
#define KEY_B 1<<1
#define KEY_SELECT 1<<2
#define KEY_START 1<<3
#define KEY_RIGHT 1<<4
#define KEY_LEFT 1<<5
#define KEY_UP 1<<6
#define KEY_DOWN 1<<7
#define KEY_R 1<<8
#define KEY_L 1<<9
#define KEY_X 1<<10
#define KEY_Y 1<<11