2 ; Startup code for cc65 (ATARI version)
4 ; Contributing authors:
12 .export __STARTUP__ : absolute = 1 ; Mark as startup
14 .import initlib, donelib
15 .import callmain, zerobss
16 .import __STARTUP_LOAD__, __ZPSAVE_LOAD__
17 .import __RESERVED_MEMORY__
19 .include "zeropage.inc"
21 .include "save_area.inc"
23 ; ------------------------------------------------------------------------
30 .if .defined(__ATARIXL__)
34 .word __STARTUP_LOAD__
35 .word __ZPSAVE_LOAD__ - 1
37 ; ------------------------------------------------------------------------
42 rts ; fix for SpartaDOS / OS/A+
43 ; they first call the entry point from AUTOSTRT and
44 ; then the load addess (this rts here).
45 ; We point AUTOSTRT directly after the rts.
49 ; Save the zero page locations we need
66 .if .not .defined(__ATARIXL__)
71 sta appmsav ; remember old APPMHI value
77 sbc #<__RESERVED_MEMORY__
78 sta APPMHI ; initialize our APPMHI value
79 sta sp ; setup runtime stack part 1
81 sbc #>__RESERVED_MEMORY__
83 sta sp+1 ; setup runtime stack part 2
87 ; for now... needs to use value from linker script later
95 ; Call module constructors
99 ; Set left margin to 0
106 ; Set keyb to upper/lowercase mode
112 ; Initialize conio stuff
117 ; Push arguments and call main
121 ; Call module destructors. This is also the _exit entry.
123 _exit: jsr donelib ; Run module destructors
125 ; Restore system stuff
128 txs ; Restore stack pointer
130 ; Restore left margin
140 .if .not .defined(__ATARIXL__)
151 ; Atari XL target stuff...
166 ; Copy back the zero page stuff
183 ; *** end of main startup code
185 ; ------------------------------------------------------------------------
191 ; ------------------------------------------------------------------------
201 .word RUNAD ; defined in atari.h
203 .word __STARTUP_LOAD__ + 1