; Mark Keates
; Freddy Offenga
; Christian Groessler
-;
-; This must be the *first* file on the linker command line
;
.export _exit
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
.constructor initsp, 26
.import initlib, donelib, callmain
.import zerobss, pushax
.import _main, __filetab, getfd
- .import __LOWCODE_LOAD__, __BSS_LOAD__
+ .import __STARTUP_LOAD__, __ZPSAVE_LOAD__
+ .import __RESERVED_MEMORY__
.ifdef DYNAMIC_DD
.import __getdefdev
.endif
.segment "EXEHDR"
.word $FFFF
- .word __LOWCODE_LOAD__
- .word __BSS_LOAD__ - 1
+ .word __STARTUP_LOAD__
+ .word __ZPSAVE_LOAD__ - 1
; ------------------------------------------------------------------------
; Actual code
- .segment "LOWCODE"
+ .segment "STARTUP"
rts ; fix for SpartaDOS / OS/A+
; they first call the entry point from AUTOSTRT and
lda APPMHI+1
sta appmsav+1
+ sec
lda MEMTOP
+ sbc #<__RESERVED_MEMORY__
sta APPMHI ; initialize our APPMHI value
- ldx MEMTOP+1
- stx APPMHI+1
+ lda MEMTOP+1
+ sbc #>__RESERVED_MEMORY__
+ sta APPMHI+1
; Call module constructors
sta sp+1
rts
- .data
+.segment "ZPSAVE"
zpsave: .res zpspace
old_lmargin: .res 1
.segment "AUTOSTRT"
- .word $02E0
- .word $02E1
- .word __LOWCODE_LOAD__ + 1
+ .word RUNAD ; defined in atari.h
+ .word RUNAD+1
+ .word __STARTUP_LOAD__ + 1