mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
ARM9のMG20EMU暫定対応。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@167 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
ec8097d404
commit
ffbf2be986
@ -21,10 +21,15 @@ void BromSpMain( void )
|
|||||||
osInitException();
|
osInitException();
|
||||||
osInitBROM();
|
osInitBROM();
|
||||||
|
|
||||||
|
osPrintf( "ARM9: start\n" );
|
||||||
|
|
||||||
osInitThread();
|
osInitThread();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
osSleep(1);
|
OSTick tick = osGetTick();
|
||||||
|
osSleep(1000);
|
||||||
|
tick = osGetTick() - tick;
|
||||||
|
osTPrintf( "sleep tick = %llu msec\n", OS_TICK_TO_MSEC(tick) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,12 +66,12 @@ asm void i_stupStartHandler( void )
|
|||||||
ldr r0, =HW_BROM_SYS_STACK_END
|
ldr r0, =HW_BROM_SYS_STACK_END
|
||||||
mov sp, r0
|
mov sp, r0
|
||||||
|
|
||||||
//---- initialize exceptions
|
|
||||||
bl stupInitExceptions
|
|
||||||
|
|
||||||
//---- initialize cp15
|
//---- initialize cp15
|
||||||
bl i_stupInitCP15
|
bl i_stupInitCP15
|
||||||
|
|
||||||
|
//---- initialize exceptions
|
||||||
|
bl stupInitExceptions
|
||||||
|
|
||||||
//---- clear wram
|
//---- clear wram
|
||||||
// DTCM (16KB)
|
// DTCM (16KB)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
@ -117,6 +117,9 @@ asm void i_stupInitCP15(void)
|
|||||||
| HW_C1_ITCM_LOAD_MODE | HW_C1_DTCM_LOAD_MODE \
|
| HW_C1_ITCM_LOAD_MODE | HW_C1_DTCM_LOAD_MODE \
|
||||||
| HW_C1_LD_INTERWORK_DISABLE \
|
| HW_C1_LD_INTERWORK_DISABLE \
|
||||||
| HW_C1_PROTECT_UNIT_ENABLE
|
| HW_C1_PROTECT_UNIT_ENABLE
|
||||||
|
#ifdef SDK_MG20EMU
|
||||||
|
bic r1, r1, #HW_C1_ITCM_ENABLE
|
||||||
|
#endif // SDK_MG20EMU
|
||||||
bic r0, r0, r1
|
bic r0, r0, r1
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
mcr p15, 0, r0, c1, c0, 0
|
||||||
|
|
||||||
@ -133,7 +136,7 @@ asm void i_stupInitCP15(void)
|
|||||||
; Region 0: MAIN_MEM: Base = 0x20000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 0: MAIN_MEM: Base = 0x20000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
; Region 1: IO_AXIRAM: Base = 0x10000000, Size = 256MB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 1: IO_AXIRAM: Base = 0x10000000, Size = 256MB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
; Region 2: PRV_WRAM: Base = 0x08000000, Size = 1MB, I:Cach Buf / D:Cach Buf, I:NA / D:RW
|
; Region 2: PRV_WRAM: Base = 0x08000000, Size = 1MB, I:Cach Buf / D:Cach Buf, I:NA / D:RW
|
||||||
; Region 3: RESERVED: Base = 0x20000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 3: PRV_WRAM_SYSRV:Base = 0x08000000, Size = 4MB, I:Cach Buf / D:Cach Buf, I:RO / D:RW
|
||||||
; Region 4: DTCM: Base = 0xfffe0000, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 4: DTCM: Base = 0xfffe0000, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
; Region 5: ITCM: Base = 0x07ff8000, Size = 32KB, I:Cach Buf / D:NC NB, I:RO / D:RW
|
; Region 5: ITCM: Base = 0x07ff8000, Size = 32KB, I:Cach Buf / D:NC NB, I:RO / D:RW
|
||||||
; Region 6: BIOS: Base = 0xffff0000, Size = 64KB, I:Cach NB / D:Cach NB, I:RO / D:RO
|
; Region 6: BIOS: Base = 0xffff0000, Size = 64KB, I:Cach NB / D:Cach NB, I:RO / D:RO
|
||||||
@ -163,9 +166,9 @@ asm void i_stupInitCP15(void)
|
|||||||
SET_PROTECTION_A( c2, HW_PRV_WRAM, 1MB )
|
SET_PROTECTION_A( c2, HW_PRV_WRAM, 1MB )
|
||||||
SET_PROTECTION_B( c2, HW_PRV_WRAM, 1MB )
|
SET_PROTECTION_B( c2, HW_PRV_WRAM, 1MB )
|
||||||
|
|
||||||
//---- —\–ń
|
//---- PRV_WRAM_SYSRV
|
||||||
SET_PROTECTION_A( c3, HW_MAIN_MEM_END, 4KB )
|
SET_PROTECTION_A( c3, HW_PRV_WRAM_SYSRV, 4KB )
|
||||||
SET_PROTECTION_B( c3, HW_MAIN_MEM_END, 4KB )
|
SET_PROTECTION_B( c3, HW_PRV_WRAM_SYSRV, 4KB )
|
||||||
|
|
||||||
//---- データ TCM
|
//---- データ TCM
|
||||||
ldr r0, =STUPi_HW_DTCM
|
ldr r0, =STUPi_HW_DTCM
|
||||||
@ -229,28 +232,30 @@ asm void i_stupInitCP15(void)
|
|||||||
// MAIN_MEM : NA
|
// MAIN_MEM : NA
|
||||||
// IO_AXIRAM : NA
|
// IO_AXIRAM : NA
|
||||||
// PRV_WRAM : NA
|
// PRV_WRAM : NA
|
||||||
|
// PRV_WRAM_SYSRV: RO
|
||||||
// DTCM : NA
|
// DTCM : NA
|
||||||
// ITCM : RO
|
// ITCM : RO
|
||||||
// BIOS : RO
|
// BIOS : RO
|
||||||
// SHARED : NA
|
// SHARED : NA
|
||||||
//
|
//
|
||||||
ldr r0, =REGION_ACC(NA,NA,NA,NA,NA,RO,RO,NA)
|
ldr r0, =REGION_ACC(NA,NA,NA,RO,NA,RO,RO,NA)
|
||||||
mcr p15, 0, r0, c5, c0, 3
|
mcr p15, 0, r0, c5, c0, 3
|
||||||
|
|
||||||
//
|
//
|
||||||
// データアクセス許可(リージョン設定)
|
// データアクセス許可(リージョン設定)
|
||||||
// MAIN_MEM : RW
|
// MAIN_MEM : RW
|
||||||
// IO_AXIRAM : RW
|
// IO_AXIRAM : RW
|
||||||
// PRV_WRAM : NA
|
// PRV_WRAM : RW
|
||||||
|
// PRV_WRAM_SYSRV: RW
|
||||||
// DTCM : RW
|
// DTCM : RW
|
||||||
// ITCM : RW
|
// ITCM : RW
|
||||||
// BIOS : RO
|
// BIOS : RO
|
||||||
// SHARED : NA
|
// SHARED : NA
|
||||||
//
|
//
|
||||||
#ifdef BROM_ENABLE_BOOTROM_WRITE
|
#ifdef BROM_ENABLE_BOOTROM_WRITE
|
||||||
ldr r0, =REGION_ACC(RW,RW,NA,NA,RW,RW,RW,NA)
|
ldr r0, =REGION_ACC(RW,RW,RW,RW,RW,RW,RW,NA)
|
||||||
#else // BROM_ENABLE_BOOTROM_WRITE
|
#else // BROM_ENABLE_BOOTROM_WRITE
|
||||||
ldr r0, =REGION_ACC(RW,RW,NA,NA,RW,RW,RO,NA)
|
ldr r0, =REGION_ACC(RW,RW,RW,RW,RW,RW,RO,NA)
|
||||||
#endif // BROM_ENABLE_BOOTROM_WRITE
|
#endif // BROM_ENABLE_BOOTROM_WRITE
|
||||||
mcr p15, 0, r0, c5, c0, 2
|
mcr p15, 0, r0, c5, c0, 2
|
||||||
|
|
||||||
@ -263,6 +268,9 @@ asm void i_stupInitCP15(void)
|
|||||||
| HW_C1_SB1_BITSET | HW_C1_EXCEPT_VEC_UPPER \
|
| HW_C1_SB1_BITSET | HW_C1_EXCEPT_VEC_UPPER \
|
||||||
| HW_C1_PROTECT_UNIT_ENABLE
|
| HW_C1_PROTECT_UNIT_ENABLE
|
||||||
orr r0, r0, r1
|
orr r0, r0, r1
|
||||||
|
#ifdef SDK_MG20EMU
|
||||||
|
bic r0, r0, #HW_C1_EXCEPT_VEC_UPPER
|
||||||
|
#endif // SDK_MG20EMU
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
mcr p15, 0, r0, c1, c0, 0
|
||||||
|
|
||||||
bx lr
|
bx lr
|
||||||
|
|||||||
@ -34,14 +34,22 @@ extern "C" {
|
|||||||
#define HW_BROM HW_BIOS
|
#define HW_BROM HW_BIOS
|
||||||
#endif
|
#endif
|
||||||
#define HW_BROM_END (HW_BROM + HW_BROM_SIZE)
|
#define HW_BROM_END (HW_BROM + HW_BROM_SIZE)
|
||||||
|
#ifdef SDK_MG20EMU
|
||||||
|
#define HW_BROM_SIZE 0x8000 // 32KB
|
||||||
|
#else // SDK_MG20EMU
|
||||||
#define HW_BROM_SIZE 0x10000 // 64KB
|
#define HW_BROM_SIZE 0x10000 // 64KB
|
||||||
|
#endif // SDK_MG20EMU
|
||||||
|
|
||||||
#define HW_BROM_NML HW_BROM
|
#define HW_BROM_NML HW_BROM
|
||||||
#define HW_BROM_NML_END (HW_BROM_NML + HW_BROM_NML_SIZE)
|
#define HW_BROM_NML_END (HW_BROM_NML + HW_BROM_NML_SIZE)
|
||||||
|
#ifdef SDK_MG20EMU
|
||||||
|
#define HW_BROM_NML_SIZE 0x4000 // 16KB
|
||||||
|
#else // SDK_MG20EMU
|
||||||
#define HW_BROM_NML_SIZE 0x8000 // 32KB
|
#define HW_BROM_NML_SIZE 0x8000 // 32KB
|
||||||
|
#endif // SDK_MG20EMU
|
||||||
#define HW_BROM_SEC HW_BROM_NML_END
|
#define HW_BROM_SEC HW_BROM_NML_END
|
||||||
#define HW_BROM_SEC_END (HW_BROM_SEC + HW_BROM_SEC_SIZE)
|
#define HW_BROM_SEC_END (HW_BROM_SEC + HW_BROM_SEC_SIZE)
|
||||||
#define HW_BROM_SEC_SIZE 0x8000 // 32KB
|
#define HW_BROM_SEC_SIZE HW_BROM_NML_SIZE
|
||||||
|
|
||||||
//------------------------------------- BROM_TEMP
|
//------------------------------------- BROM_TEMP
|
||||||
#define HW_BROM_TEMP (HW_BROM_TEMP_END - HW_BROM_TEMP_SIZE)
|
#define HW_BROM_TEMP (HW_BROM_TEMP_END - HW_BROM_TEMP_SIZE)
|
||||||
|
|||||||
@ -110,7 +110,13 @@ extern "C" {
|
|||||||
#define HW_AHBP_REG_SIZE 0x80000 // 512MB
|
#define HW_AHBP_REG_SIZE 0x80000 // 512MB
|
||||||
|
|
||||||
//----------------------------- System ROM
|
//----------------------------- System ROM
|
||||||
|
#ifdef SDK_MG20EMU
|
||||||
|
#define HW_BIOS_IMG 0x00000000
|
||||||
|
#define HW_BIOS 0x00000000
|
||||||
|
#else // SDK_MG20EMU
|
||||||
|
#define HW_BIOS_IMG 0xfffe0000
|
||||||
#define HW_BIOS 0xffff0000
|
#define HW_BIOS 0xffff0000
|
||||||
|
#endif // SDK_MG20EMU
|
||||||
#define HW_BIOS_END (HW_BIOS + HW_BIOS_SIZE)
|
#define HW_BIOS_END (HW_BIOS + HW_BIOS_SIZE)
|
||||||
#define HW_BIOS_SIZE 0x8000 // 32KB
|
#define HW_BIOS_SIZE 0x8000 // 32KB
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user