Merge pull request 'docs and changelog' (#27) from docs-and-changelog into main
Reviewed-on: #27
This commit was merged in pull request #27.
This commit is contained in:
@@ -10,6 +10,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
|
|
||||||
Bugfixes in startup assembler code.
|
Bugfixes in startup assembler code.
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- `.data` initialization is skipped if it is already in place, which is usually the default
|
||||||
|
case because it is flashed to RAM.
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- Stack initialization was bugged and stack was not properly initialized for some of the
|
||||||
|
processor modes (all modes except system mode and IRQ mode).
|
||||||
|
- MMU is enabled after the MMU table was copied (which is done in the `.data` coping step).
|
||||||
|
|
||||||
# [v0.1.1] 2025-10-10
|
# [v0.1.1] 2025-10-10
|
||||||
|
|
||||||
Documentation fixes.
|
Documentation fixes.
|
||||||
|
|||||||
@@ -96,42 +96,42 @@ initialize:
|
|||||||
// Set up stacks first.
|
// Set up stacks first.
|
||||||
ldr r3, =_stack_top
|
ldr r3, =_stack_top
|
||||||
|
|
||||||
// IRQ mode
|
// Set stack pointer (right after) and mask interrupts for IRQ mode (Mode 0x12)
|
||||||
msr cpsr_c, {irq_mode}
|
msr cpsr_c, {irq_mode}
|
||||||
// IRQ stack pointer
|
// IRQ stack pointer
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
ldr r1, =_irq_stack_size
|
ldr r1, =_irq_stack_size
|
||||||
sub r3, r3, r1
|
sub r3, r3, r1
|
||||||
|
|
||||||
// Supervisor mode
|
// Set stack pointer (right after) and mask interrupts for Supervisor/SVC mode (Mode 0x13)
|
||||||
msr cpsr_c, {svc_mode}
|
msr cpsr_c, {svc_mode}
|
||||||
// Supervisor stack pointer
|
// Supervisor stack pointer
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
ldr r1, =_svc_stack_size
|
ldr r1, =_svc_stack_size
|
||||||
sub r3, r3, r1
|
sub r3, r3, r1
|
||||||
|
|
||||||
// Abort mode
|
// Set stack pointer (right after) and mask interrupts for Abort/ABT mode (Mode 0x17)
|
||||||
msr cpsr_c, {abt_mode}
|
msr cpsr_c, {abt_mode}
|
||||||
// Abort stack pointer
|
// Abort stack pointer
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
ldr r1, =_abt_stack_size
|
ldr r1, =_abt_stack_size
|
||||||
sub r3, r3, r1
|
sub r3, r3, r1
|
||||||
|
|
||||||
// FIQ mode
|
// Set stack pointer (right after) and mask interrupts for FIQ mode (Mode 0x11)
|
||||||
msr cpsr_c, {fiq_mode}
|
msr cpsr_c, {fiq_mode}
|
||||||
// FIQ stack pointer
|
// FIQ stack pointer
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
ldr r1, =_fiq_stack_size
|
ldr r1, =_fiq_stack_size
|
||||||
sub r3, r3, r1
|
sub r3, r3, r1
|
||||||
|
|
||||||
// Undefined mode
|
// Set stack pointer (right after) and mask interrupts for Undefined/UND mode (Mode 0x1B)
|
||||||
msr cpsr_c, {und_mode}
|
msr cpsr_c, {und_mode}
|
||||||
// Undefined stack pointer
|
// Undefined stack pointer
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
ldr r1, =_und_stack_size
|
ldr r1, =_und_stack_size
|
||||||
sub r3, r3, r1
|
sub r3, r3, r1
|
||||||
|
|
||||||
// System mode
|
// Set stack pointer (right after) and mask interrupts for System/SYS mode (Mode 0x1F)
|
||||||
msr cpsr_c, {sys_mode}
|
msr cpsr_c, {sys_mode}
|
||||||
// System stack pointer (main stack)
|
// System stack pointer (main stack)
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
|
|||||||
Reference in New Issue
Block a user