|
HomeCore 0.1.3 (07b5544)
Bare-metal personal computer firmware for Cortex-M
|
HomeCore builds for three boards.
Each one selects an architecture, SoC, and board port at configure time through HOMECORE_BOARD; the portable kernel, shell, VFS, and G2BASIC code is the same on all of them. Only QEMU runs are validated. No board has been validated on physical hardware yet.
| Core | Cortex-M3 |
|---|---|
| Flash / RAM | 256 KB / 64 KB |
| Clock | 12.5 MHz (QEMU reset clock) |
| Console | UART0, QEMU serial |
| Role | Development and regression target |
| Core | Cortex-M4F (soft float) |
|---|---|
| Flash / RAM | 1 MB / 128 KB |
| Clock | 16 MHz HSI |
| Console | USART2, PA2/PA3 |
| Role | Largest target |
| Core | Cortex-M3 |
|---|---|
| Flash / RAM | 128 KB / 8 KB |
| Clock | 24 MHz PLL |
| Console | USART1, PA9/PA10 |
| Role | Smallest target; STM32 code in QEMU |
| Status | Meaning |
|---|---|
| QEMU tested in CI | CI builds Debug and Release, then runs tests/qemu_files_test.py against the emulated board: system and file commands, sessions, create/remove cycles, and BASIC at the nesting limit. |
| Builds in CI | CI cross-compiles Debug and Release. Nothing executes the firmware. |
| Hardware pending | The port targets a physical board but has not been run on one. A successful build does not show that clocks, pins, or the UART work. |
| Emulator only | The port relies on QEMU's reset state and does not configure real hardware. |
Every board runs the same firmware features. The differences are in clocking, console wiring, memory limits, and how each board is validated.
| Feature | LM3S6965EVB | STM32F4DISCOVERY | STM32VLDISCOVERY |
|---|---|---|---|
| Shell, sessions, RAM files, G2BASIC | Yes | Yes | Yes (BASIC nesting 4, files up to 1 KB) |
| LEDs (LEDs) | led0, console stand-in | led0 to led3 on PD12-PD15 | led0, led1 on PC9, PC8; console stand-ins in QEMU |
| Mounted filesystems (Files and storage) | /ram: littlefs, 32 KB ramdisk | /ram: FAT, 64 KB; /lfs: littlefs, 16 KB | None (8 KB RAM) |
| 1 kHz SysTick uptime | Yes, guest time | Yes, HSI accuracy | Yes |
| Console | UART0 (IRQ receive) | USART2 (IRQ receive) | USART1 (IRQ receive) |
| VFS device nodes | /dev/uart0 to /dev/uart2 | /dev/uart0 | /dev/uart0 |
| Clock setup | None (QEMU reset state) | HSI, 16 MHz | PLL to 24 MHz (skipped in the QEMU build) |
| Main stack | 3 KB | 3 KB | 2 KB |
| Buffered stdio | Yes | Yes | No (saves about 2 KB of heap) |
| QEMU machine | lm3s6965evb | None | stm32vldiscovery |
| CI | Build + QEMU regression | Build | Build both presets + QEMU regression |
| Physical hardware | Not covered | Pending | Pending |
No board has a scheduler, privilege separation, authentication, or persistent storage; mounted volumes are ramdisks formatted at boot. The SVC and PendSV handlers panic on all targets.
The 8 KB STM32VLDISCOVERY sets the lower bound for shell and VFS memory use. Its defconfig reduces the stack, file size, and BASIC nesting limits; see its memory budget.
Configure and build a preset from the repository root with the project venv, as described in the development guide:
| Preset | Board | Defconfig |
|---|---|---|
lm3s6965evb | LM3S6965EVB | configs/homecore_defconfig |
lm3s6965evb-release | LM3S6965EVB, Release | configs/homecore_defconfig |
stm32f4discovery | STM32F4DISCOVERY | configs/homecore_defconfig |
stm32vldiscovery | STM32VLDISCOVERY | configs/stm32vldiscovery_defconfig |
stm32vldiscovery-qemu | STM32VLDISCOVERY in QEMU | configs/stm32vldiscovery_defconfig + overlay src/board/stm32vldiscovery/qemu.yaml |
Each preset builds into build/<preset>/, writing the ELF homecore and the raw image homecore.bin. A board uses configs/<board>_defconfig when that file exists and configs/homecore_defconfig otherwise.
New boards, SoCs, and CPUs follow the porting guide. Add a page for the new board here, alongside its Markdown guide in docs/boards/.