Eventually I want the kernel to be loaded from the SD card as well, but it still needs to separate from user programs. At some point there should be a folder just for the BIOS, which should read from the boot block of the SD card and start executing, and thats it.
54 lines
1.7 KiB
ArmAsm
54 lines
1.7 KiB
ArmAsm
; ---------------------------------------------------------------------------
|
|
; crt0.s
|
|
; ---------------------------------------------------------------------------
|
|
;
|
|
; Startup code for cc65 (Single Board Computer version)
|
|
|
|
.export _init, _exit
|
|
.import _main
|
|
|
|
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
|
.import __SDRAM_START__, __SDRAM_SIZE__ ; Linker generated
|
|
|
|
.import copydata, zerobss, initlib, donelib
|
|
|
|
.include "zeropage.inc"
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Place the startup code in a special segment
|
|
|
|
.segment "STARTUP"
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; A little light 6502 housekeeping
|
|
|
|
_init: LDX #$FF ; Initialize stack pointer to $01FF
|
|
TXS
|
|
CLD ; Clear decimal mode
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Set cc65 argument stack pointer
|
|
|
|
LDA #<(__SDRAM_START__ + __SDRAM_SIZE__)
|
|
STA sp
|
|
LDA #>(__SDRAM_START__ + __SDRAM_SIZE__)
|
|
STA sp+1
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Initialize memory storage
|
|
|
|
JSR zerobss ; Clear BSS segment
|
|
JSR copydata ; Initialize DATA segment
|
|
JSR initlib ; Run constructors
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Call main()
|
|
cli
|
|
JSR _main
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Back from main (this is also the _exit entry): force a software break
|
|
|
|
_exit: JSR donelib ; Run destructors
|
|
BRK
|