Adapt changes from b9s/next
This commit is contained in:
@@ -27,7 +27,10 @@
|
||||
#include "types.h"
|
||||
#include "memory.h"
|
||||
|
||||
static volatile Arm11Operation *operation = (volatile Arm11Operation *)0x1FFFFFF0;
|
||||
void prepareForFirmlaunch(void);
|
||||
extern u32 prepareForFirmlaunchSize;
|
||||
|
||||
extern volatile Arm11Operation operation;
|
||||
|
||||
static void initScreensSequence(u32 brightnessLevel)
|
||||
{
|
||||
@@ -160,23 +163,16 @@ static void deinitScreens(void)
|
||||
*(vu32 *)0x10202014 = 0;
|
||||
}
|
||||
|
||||
static void prepareForFirmlaunch(void)
|
||||
{
|
||||
*ARM11_CORE0_MAILBOX_ENTRYPOINT = 0;
|
||||
while(*ARM11_CORE0_MAILBOX_ENTRYPOINT == 0);
|
||||
((void (*)(void))*ARM11_CORE0_MAILBOX_ENTRYPOINT)();
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
*operation = NO_ARM11_OPERATION;
|
||||
operation = ARM11_READY;
|
||||
|
||||
while(true)
|
||||
{
|
||||
switch(*operation)
|
||||
switch(operation)
|
||||
{
|
||||
case NO_ARM11_OPERATION:
|
||||
break;
|
||||
case ARM11_READY:
|
||||
continue;
|
||||
case INIT_SCREENS_SEQUENCE:
|
||||
initScreensSequence(*(vu32 *)ARM11_PARAMETERS_ADDRESS);
|
||||
break;
|
||||
@@ -196,12 +192,13 @@ void main(void)
|
||||
deinitScreens();
|
||||
break;
|
||||
case PREPARE_ARM11_FOR_FIRMLAUNCH:
|
||||
memcpy((void *)0x1FFFFC00, (void *)prepareForFirmlaunch, 0x2C);
|
||||
*operation = NO_ARM11_OPERATION;
|
||||
memcpy((void *)0x1FFFFC00, (void *)prepareForFirmlaunch, prepareForFirmlaunchSize);
|
||||
*(vu32 *)0x1FFFFFFC = 0;
|
||||
operation = ARM11_READY;
|
||||
((void (*)(void))0x1FFFFC00)();
|
||||
break;
|
||||
}
|
||||
|
||||
*operation = NO_ARM11_OPERATION;
|
||||
operation = ARM11_READY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,35 @@
|
||||
@ Additional Terms 7.b of GPLv3 applies to this file: Requiring preservation of specified
|
||||
@ reasonable legal notices or author attributions in that material or in the Appropriate Legal
|
||||
@ Notices displayed by works containing it.
|
||||
|
||||
|
||||
.section .text.start
|
||||
.align 4
|
||||
.global _start
|
||||
.type _start, %function
|
||||
_start:
|
||||
b start
|
||||
|
||||
.global operation
|
||||
operation:
|
||||
.word 0
|
||||
|
||||
start:
|
||||
cpsid aif
|
||||
ldr sp, =0x1FFFE000
|
||||
ldr sp, =__stack_top__
|
||||
b main
|
||||
|
||||
.global prepareForFirmlaunch
|
||||
.type prepareForFirmlaunch, %function
|
||||
prepareForFirmlaunch:
|
||||
mov r0, #0x20000000
|
||||
|
||||
_wait_for_core0_entrypoint_loop:
|
||||
ldr r1, [r0, #-4] @ check if core0's entrypoint is 0
|
||||
cmp r1, #0
|
||||
beq _wait_for_core0_entrypoint_loop
|
||||
|
||||
bx r1 @ jump to core0's entrypoint
|
||||
prepareForFirmlaunchEnd:
|
||||
|
||||
.global prepareForFirmlaunchSize
|
||||
prepareForFirmlaunchSize: .word prepareForFirmlaunchEnd - prepareForFirmlaunch
|
||||
|
||||
@@ -40,8 +40,7 @@ typedef volatile u64 vu64;
|
||||
#define SCREEN_HEIGHT 240
|
||||
#define SCREEN_TOP_FBSIZE (3 * SCREEN_TOP_WIDTH * SCREEN_HEIGHT)
|
||||
#define SCREEN_BOTTOM_FBSIZE (3 * SCREEN_BOTTOM_WIDTH * SCREEN_HEIGHT)
|
||||
#define ARM11_CORE0_MAILBOX_ENTRYPOINT ((vu32 *)0x1FFFFFFC)
|
||||
#define ARM11_PARAMETERS_ADDRESS 0x1FFFC000
|
||||
#define ARM11_PARAMETERS_ADDRESS 0x1FFFF000
|
||||
|
||||
struct fb {
|
||||
u8 *top_left;
|
||||
@@ -51,12 +50,12 @@ struct fb {
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NO_ARM11_OPERATION = 0,
|
||||
INIT_SCREENS_SEQUENCE,
|
||||
INIT_SCREENS_SEQUENCE = 0,
|
||||
SETUP_FRAMEBUFFERS,
|
||||
CLEAR_SCREENS,
|
||||
SWAP_FRAMEBUFFERS,
|
||||
UPDATE_BRIGHTNESS,
|
||||
DEINIT_SCREENS,
|
||||
PREPARE_ARM11_FOR_FIRMLAUNCH,
|
||||
ARM11_READY,
|
||||
} Arm11Operation;
|
||||
|
||||
Reference in New Issue
Block a user