Merge pull request 'docs and changelog' (#27) from docs-and-changelog into main
Some checks failed
ci / Check build (push) Has been cancelled
ci / Check formatting (push) Has been cancelled
ci / Check Documentation Build (push) Has been cancelled
ci / Clippy (push) Has been cancelled

Reviewed-on: #27
This commit was merged in pull request #27.
This commit is contained in:
2025-11-28 16:00:58 +01:00
2 changed files with 17 additions and 6 deletions

View File

@@ -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.

View File

@@ -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