mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ブートの調整。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@131 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
ce18a42739
commit
6fc039c857
@ -1,6 +1,6 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - components - hyena.TWL
|
||||
# Project: TwlIPL
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
@ -41,7 +41,10 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
|
||||
|
||||
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -DCRT0_O='$(CRT0_O)'
|
||||
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' \
|
||||
-DADDRESS_FLXMAIN='0x02280000' \
|
||||
-DADDRESS_BOOTCORE='0x0380f100' \
|
||||
-DCRT0_O='$(CRT0_O)'
|
||||
MAKELCF_FLAGS += -DISDBG_LIBS='$(ISDBG_LIBS)'
|
||||
|
||||
#--------------------------------
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#---------------------------------------------------------------------------
|
||||
# Project: TwlSDK - components - racoon.TWL
|
||||
# File: racoon.lcf.template
|
||||
# Project: TwlIPL
|
||||
# File: hyena.lcf.template
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - components - racoon.TWL
|
||||
# File: racoon.lsf
|
||||
# Project: TwlIPL
|
||||
# File: hyena.lsf
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
@ -20,7 +20,7 @@
|
||||
#--------
|
||||
Static $(TARGET_NAME)
|
||||
{
|
||||
Address 0x02280000
|
||||
Address $(ADDRESS_FLXMAIN)
|
||||
Library $(CRT0_O)
|
||||
StackSize 1024 1024
|
||||
}
|
||||
@ -55,8 +55,7 @@ Autoload WRAM
|
||||
librtc_sp.TWL$(CODEGEN).a \
|
||||
libwvr_sp.TWL$(CODEGEN).a \
|
||||
libaes_sp.TWL$(CODEGEN).a \
|
||||
libboot_sp.TWL$(CODEGEN).a \
|
||||
$(ISDBG_LIBS)
|
||||
$(ISTD_LIBS)
|
||||
|
||||
Library libsdio_hcd_twl.TWL$(CODEGEN).a \
|
||||
libsdio_busdriver.TWL$(CODEGEN).a \
|
||||
@ -68,6 +67,13 @@ Autoload WRAM
|
||||
Object $(OBJDIR)/main.o
|
||||
}
|
||||
|
||||
Autoload BOOT_CORE
|
||||
{
|
||||
Address $(ADDRESS_BOOTCORE)
|
||||
|
||||
Library libboot_sp.TWL$(CODEGEN).a
|
||||
}
|
||||
|
||||
#--------
|
||||
Ltdautoload LTDMAIN
|
||||
{
|
||||
|
||||
@ -83,7 +83,14 @@ TwlSpMain(void)
|
||||
PrintDebugInfo();
|
||||
|
||||
// ヒープ領域設定
|
||||
OS_SetSubPrivArenaHi( (void*)0x02380000 ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ!!
|
||||
{
|
||||
void *wram = OS_GetWramSubPrivArenaHi();
|
||||
void *mmem = OS_GetSubPrivArenaHi();
|
||||
OS_SetSubPrivArenaHi( (void*)0x02380000 ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ!!
|
||||
OS_SetWramSubPrivArenaHi( (void*)BOOTCORE_ARM7_ADDR );
|
||||
OS_TPrintf( "MMEM SUBPRV ARENA HI : %08x -> %08x\n", mmem, OS_GetSubPrivArenaHi() );
|
||||
OS_TPrintf( "WRAM SUBPRV ARENA HI : %08x -> %08x\n", wram, OS_GetWramSubPrivArenaHi() );
|
||||
}
|
||||
heapHandle = InitializeAllocateSystem();
|
||||
|
||||
// ボタン入力サーチ初期化
|
||||
|
||||
@ -53,17 +53,20 @@ static void _ISDbgLib_OnLoadChildBinary( void );
|
||||
static asm void ClearMemory( void )
|
||||
{
|
||||
mov r11, lr
|
||||
|
||||
// ldr r0, = IPL2_ADDR_TOP // IPL2-ARM9 & ARM7プログラムのクリア
|
||||
// ldr r1, = MB_BSSDESC_ADDRESS
|
||||
// bl CpuClear32Byte
|
||||
|
||||
ldr r0, = HW_WRAM // ARM7WRAMのクリア
|
||||
ldr r1, = RETURN_FROM_MAIN_ARM7_FUNCP
|
||||
#if 0
|
||||
ldr r0, = 0x02280000 // SYSMENU-ARM7 MMEMのクリア
|
||||
ldr r1, = 0x02380000
|
||||
bl CpuClear32Byte
|
||||
|
||||
// ldr r0, = 0x02800000 // SYSMENU-ARM9 MMEMのクリア
|
||||
// ldr r1, = 0x02e80000
|
||||
// bl CpuClear32Byte
|
||||
|
||||
@1 bx r11
|
||||
ldr r0, = HW_WRAM_A_LTD // ARM7-WRAMのクリア( LTDのマッピング )
|
||||
ldr r1, = BOOTCORE_ARM7_ADDR
|
||||
bl CpuClear32Byte
|
||||
#endif
|
||||
bx r11
|
||||
}
|
||||
|
||||
|
||||
@ -117,15 +120,9 @@ static asm void ClearBankREG_Stack( void )
|
||||
add r1, r2, #0x800
|
||||
bl CpuClear32Byte
|
||||
|
||||
#ifndef ISDBG_MB_CHILD_
|
||||
add r0, r2, #0xd80 // HW_BIOS_EXCP_STACK_MAIN (MAINPデバッガモニタ例外ハンドラ)
|
||||
add r1, r0, #0x80
|
||||
bl CpuClear32Byte
|
||||
#else // ISDBG_MB_CHILD_
|
||||
add r0, r2, #0xda0 // HW_ARENA_INFO_BUF (アリーナ情報構造体) ※mb_childビルド時には、デバッガモニタ用ハンドラはクリアしない。
|
||||
add r0, r2, #0xda0 // HW_ARENA_INFO_BUF (アリーナ情報構造体) ※デバッガモニタ用ハンドラはクリアしない。
|
||||
add r1, r0, #0x60
|
||||
bl CpuClear32Byte
|
||||
#endif // ISDBG_MB_CHILD_
|
||||
|
||||
add r0, r2, #0xf80
|
||||
add r1, r0, #0x80
|
||||
@ -156,6 +153,30 @@ asm void BOOT_Core( void )
|
||||
//---------------------------------------
|
||||
bl ClearMemory
|
||||
|
||||
//---------------------------------------
|
||||
// ARM9との同期をとる(subp_stateを3にしてから、mainp_stateが3になるのを待つ。)
|
||||
//---------------------------------------
|
||||
ldr r1, =REG_MAINPINTF_ADDR
|
||||
mov r0, #0x0300
|
||||
strh r0, [r1] // メインプロセッサインターフェースレジスタ
|
||||
@1 ldrh r0, [r1]
|
||||
and r0, r0, #0x000f
|
||||
cmp r0, #0x0003
|
||||
bne @1
|
||||
|
||||
//---------------------------------------
|
||||
// ARM7 WRAMバンク設定 MBK6-MBK9 ※ARM7がMBK9でWRAMロックをする前にARM9でWRAM設定を済ませておく必要がある。
|
||||
//---------------------------------------
|
||||
ldr r0, =HW_TWL_ROM_HEADER_BUF
|
||||
add r10, r0, #0x1a0 // rom_header->s.sub_wram_config_data
|
||||
// r10- => r9-r2
|
||||
ldr r9, =REG_MBK6_ADDR
|
||||
add r2, r9, #15
|
||||
@2 ldr r3, [r10], #4
|
||||
str r3, [r9], #4
|
||||
cmp r9, r2
|
||||
blt @2
|
||||
|
||||
//---------------------------------------
|
||||
// 無線マルチブート用ローダー起動
|
||||
//---------------------------------------
|
||||
@ -176,10 +197,10 @@ asm void BOOT_Core( void )
|
||||
ldr r1, =REG_MAINPINTF_ADDR
|
||||
mov r0, #0x0100
|
||||
strh r0, [r1] // メインプロセッサインターフェースレジスタ
|
||||
@1 ldrh r0, [r1]
|
||||
@3 ldrh r0, [r1]
|
||||
and r0, r0, #0x000f
|
||||
cmp r0, #0x0001
|
||||
bne @1
|
||||
bne @3
|
||||
|
||||
//---------------------------------------
|
||||
// ISデバッガでのDL子機プログラムのデバッグ情報設定
|
||||
@ -201,9 +222,9 @@ asm void BOOT_Core( void )
|
||||
ldr r1, =REG_MAINPINTF_ADDR
|
||||
mov r0, #0
|
||||
strh r0, [r1] // メインプロセッサインターフェースレジスタ
|
||||
@2 ldrh r0, [r1]
|
||||
@4 ldrh r0, [r1]
|
||||
cmp r0, #0x0001
|
||||
beq @2
|
||||
beq @4
|
||||
|
||||
//---------------------------------------
|
||||
// R11の値をもとにブートアドレス取得
|
||||
|
||||
@ -55,6 +55,7 @@ BOOL BOOT_WaitStart( void )
|
||||
}
|
||||
*/
|
||||
BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
||||
reg_MI_MBK9 = 0; // 全WRAMのロック解除
|
||||
reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。
|
||||
BOOT_Core(); // never return
|
||||
}
|
||||
@ -78,6 +79,7 @@ static void BOOTi_ClearREG_RAM( void )
|
||||
reg_GX_DISPSTAT = 0;
|
||||
reg_SPI_SPICNT = 0;
|
||||
reg_PXI_MAINP_FIFO_CNT = 0x4008;
|
||||
|
||||
// クリアしていないレジスタは、VCOUNT, JOY, PIFCNT, MC-, EXMEMCNT, IME, PAUSE, POWLCDCNT, 他セキュリティ系です。
|
||||
(void)OS_ResetRequestIrqMask((u16)~0);
|
||||
}
|
||||
|
||||
@ -56,13 +56,7 @@ static void _ISDbgLib_OnLoadChildBinary(void);
|
||||
asm void BOOT_Core( void )
|
||||
{
|
||||
//---------------------------------------
|
||||
// データキャッシュを全て無効に。(DC_InvalidateAllを抜き出して実装)
|
||||
//---------------------------------------
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c6, 0
|
||||
|
||||
//---------------------------------------
|
||||
// ARM7との同期をとる(subp_stateが2になるのを待って、mainp_stateを2にする。)
|
||||
// ARM7との同期をとる(subp_stateが2になるのを待って、mainp_stateを2にする)
|
||||
//---------------------------------------
|
||||
ldr r1, =REG_SUBPINTF_ADDR
|
||||
@0 ldrh r0, [r1]
|
||||
@ -72,6 +66,40 @@ asm void BOOT_Core( void )
|
||||
mov r0, #0x0200
|
||||
strh r0, [r1]
|
||||
|
||||
//---------------------------------------
|
||||
// データキャッシュを全て無効に。(DC_InvalidateAllを抜き出して実装)
|
||||
//---------------------------------------
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c6, 0
|
||||
|
||||
//---------------------------------------
|
||||
// ARM7との同期をとる(subp_stateが3になるのを待つ)
|
||||
//---------------------------------------
|
||||
ldr r1, =REG_SUBPINTF_ADDR
|
||||
@1 ldrh r0, [r1]
|
||||
and r0, r0, #0x000f
|
||||
cmp r0, #0x0003
|
||||
bne @1
|
||||
|
||||
//---------------------------------------
|
||||
// ARM9 WRAMバンクの設定 MBK1-MBK8 ※WRAMバンクの設定をする時には、ARM7はARM7専用WRAMのBOOT_Coreにいる必要がある。
|
||||
//---------------------------------------
|
||||
ldr r0, =HW_TWL_ROM_HEADER_BUF
|
||||
add r0, r0, #0x180 // rom_header->s.main_wram_config_data
|
||||
// r0- => r9-r2
|
||||
ldr r9, =REG_MBK1_ADDR
|
||||
add r2, r9, #32
|
||||
@2 ldr r3, [r0], #4
|
||||
str r3, [r9], #4
|
||||
cmp r9, r2
|
||||
blt @2
|
||||
|
||||
//---------------------------------------
|
||||
// ARM7との同期をとる(mainp_stateを3にする。)
|
||||
//---------------------------------------
|
||||
mov r0, #0x0300
|
||||
strh r0, [r1]
|
||||
|
||||
//---------------------------------------
|
||||
// ISデバッガ動作フラグの格納
|
||||
//---------------------------------------
|
||||
@ -84,10 +112,10 @@ asm void BOOT_Core( void )
|
||||
// ARM7との同期をとる(subp_stateが1になるのを待って、mainp_stateを1にする。)
|
||||
//---------------------------------------
|
||||
ldr r1, =REG_SUBPINTF_ADDR
|
||||
@1 ldrh r0, [r1]
|
||||
@3 ldrh r0, [r1]
|
||||
and r0, r0, #0x000f
|
||||
cmp r0, #0x0001
|
||||
bne @1
|
||||
bne @3
|
||||
mov r0, #0x0100
|
||||
strh r0, [r1]
|
||||
|
||||
@ -115,10 +143,10 @@ asm void BOOT_Core( void )
|
||||
// ARM7との最終同期をとる(subp_stateが0になるのを待って、mainp_stateを0にする)
|
||||
//---------------------------------------
|
||||
ldr r1, =REG_SUBPINTF_ADDR
|
||||
@2 ldrh r0, [r1]
|
||||
@4 ldrh r0, [r1]
|
||||
and r0, r0, #0x000f
|
||||
cmp r0, #0x0001
|
||||
beq @2
|
||||
beq @4
|
||||
mov r0, #0
|
||||
strh r0, [r1]
|
||||
|
||||
|
||||
@ -16,7 +16,9 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include <twl/os/common/format_rom.h>
|
||||
#include <sysmenu/boot/common/boot.h>
|
||||
#include <firm/format/wram_regs.h>
|
||||
//#include <nitro/mb.h>
|
||||
//#include "IPL2_work.h"
|
||||
//#include "define.h"
|
||||
@ -76,6 +78,15 @@ void BOOT_Ready( void )
|
||||
(void)OS_SetIrqMask( 0 );
|
||||
(void)OS_ResetRequestIrqMask( (u16)~0 );
|
||||
|
||||
// WRAM‚Ì”z’u
|
||||
{
|
||||
ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
MIHeader_WramRegs *pWRAMREGS = (MIHeader_WramRegs *)pROMH->main_wram_config_data;
|
||||
reg_GX_VRAMCNT_C = pWRAMREGS->main_vrambnk_c;
|
||||
reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d;
|
||||
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
|
||||
}
|
||||
|
||||
BOOT_Core(); // never return
|
||||
}
|
||||
|
||||
|
||||
@ -469,6 +469,9 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||
|
||||
(void)FS_CloseFile(file);
|
||||
}
|
||||
|
||||
// ROMヘッダバッファをコピー
|
||||
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
|
||||
// 起動。
|
||||
BOOT_Ready();
|
||||
|
||||
@ -16,7 +16,9 @@
|
||||
# $Author: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
SUBDIRS = ../../../libraries_sysmenu/sysmenu \
|
||||
../../../libraries_sysmenu/boot \
|
||||
../../../components/hyena.TWL
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ SUBDIRS = ../../../libraries_sysmenu/sysmenu
|
||||
|
||||
TARGET_FIRM = SYSTEMMENU
|
||||
TARGET_PLATFORM = TWL
|
||||
TWL_ARCHGEN = LIMITED
|
||||
#TWL_ARCHGEN = LIMITED
|
||||
|
||||
TARGET_BIN = main.srl
|
||||
|
||||
|
||||
@ -167,6 +167,12 @@ int MachineSettingMain( void )
|
||||
}
|
||||
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
|
||||
DrawMenu( s_csr, &s_settingParam );
|
||||
|
||||
#if 0
|
||||
if( pad.trg & PAD_BUTTON_START ) {
|
||||
PM_ForceToResetHardware();
|
||||
}
|
||||
#endif
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||
if( s_settingPos[ s_csr ].enable ) {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -25,6 +25,7 @@ extern "C" {
|
||||
/*---------------------------------------------------------------------------*
|
||||
Type definition
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define BOOTCORE_ARM7_ADDR 0x0380f100
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
functions
|
||||
|
||||
Loading…
Reference in New Issue
Block a user