; Mark Keates
; Freddy Offenga
; Christian Groessler
-;
-; This must be the *first* file on the linker command line
;
.export _exit
- .constructor initsp,26
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
+ .constructor initsp, 26
- .import getargs, argc, argv
- .import initlib, donelib
+ .import initlib, donelib, callmain
.import zerobss, pushax
- .import _main,__filetab,getfd
- .import __CODE_LOAD__, __BSS_LOAD__
+ .import _main, __filetab, getfd
+ .import __STARTUP_LOAD__, __ZPSAVE_LOAD__
+ .import __RESERVED_MEMORY__
+.ifdef DYNAMIC_DD
+ .import __getdefdev
+.endif
.include "zeropage.inc"
.include "atari.inc"
.segment "EXEHDR"
.word $FFFF
- .word __CODE_LOAD__
- .word __BSS_LOAD__ - 1
+ .word __STARTUP_LOAD__
+ .word __ZPSAVE_LOAD__ - 1
; ------------------------------------------------------------------------
; Actual code
-.code
+ .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
jsr initlib
+.ifdef DYNAMIC_DD
+ jsr __getdefdev
+.endif
; set left margin to 0
lda #0
jsr getfd
- sta __filetab + (0 * _FILE_size) ; setup stdin
+ sta __filetab + (0 * .sizeof(_FILE)); setup stdin
lda #0
jsr getfd
- sta __filetab + (1 * _FILE_size) ; setup stdout
+ sta __filetab + (1 * .sizeof(_FILE)); setup stdout
lda #0
jsr getfd
- sta __filetab + (2 * _FILE_size) ; setup stderr
-
-; Pass command line if present
-
- jsr getargs
+ sta __filetab + (2 * .sizeof(_FILE)); setup stderr
- lda argc
- ldx argc+1
- jsr pushax ; argc
- lda #<argv
- ldx #>argv
- jsr pushax ; argv
+; Push arguments and call main
- ldy #4 ; Argument size
- jsr _main ; call the users code
+ jsr callmain
; Call module destructors. This is also the _exit entry.
dex
bpl L2
+; turn on cursor
+
+ inx
+ stx CRSINH
+
; Back to DOS
rts
; setup sp
+.segment "INIT"
+
initsp:
lda APPMHI
sta sp
sta sp+1
rts
- .data
+.segment "ZPSAVE"
zpsave: .res zpspace
old_lmargin: .res 1
.segment "AUTOSTRT"
- .word $02E0
- .word $02E1
- .word __CODE_LOAD__ + 1
+ .word RUNAD ; defined in atari.h
+ .word RUNAD+1
+ .word __STARTUP_LOAD__ + 1