diff --git a/sw/boot.s b/sw/boot.s index f71942c..269c5fd 100644 --- a/sw/boot.s +++ b/sw/boot.s @@ -1,15 +1,59 @@ - .import _main - - .export __STARTUP__ : absolute = 1 +; --------------------------------------------------------------------------- +; crt0.s +; --------------------------------------------------------------------------- +; +; Startup code for cc65 (Single Board Computer version) - .segment "VECTORS" - - .addr _init - .addr _init - .addr _init - - .segment "STARTUP" - -_init: jsr _main +.export _init, _exit +.import _main -end: jmp end +.export __STARTUP__ : absolute = 1 ; Mark as startup +.import __RAM_START__, __RAM_SIZE__ ; Linker generated + +.import copydata, zerobss, initlib, donelib + +.include "zeropage.inc" + +.segment "VECTORS" + +.addr _init +.addr _init +.addr _init + +; --------------------------------------------------------------------------- +; 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 #<(__RAM_START__ + __RAM_SIZE__) + STA sp + LDA #>(__RAM_START__ + __RAM_SIZE__) + STA sp+1 + +; --------------------------------------------------------------------------- +; Initialize memory storage + + JSR zerobss ; Clear BSS segment + JSR copydata ; Initialize DATA segment + JSR initlib ; Run constructors + +; --------------------------------------------------------------------------- +; Call main() + + JSR _main + +; --------------------------------------------------------------------------- +; Back from main (this is also the _exit entry): force a software break + +_exit: JSR donelib ; Run destructors + BRK diff --git a/sw/main.c b/sw/main.c index 77caeb0..a09a475 100644 --- a/sw/main.c +++ b/sw/main.c @@ -6,6 +6,6 @@ int main() { uint16_t* seven_seg; seven_seg = (uint16_t*)SEVEN_SEG; - *seven_seg = 0xa5a5; + *seven_seg = 0xbabe; return 0; }