-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Apple II: Move _exit out of STARTUP segment
- Loading branch information
1 parent
b688cfa
commit 622793e
Showing
2 changed files
with
79 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
; | ||
; Ullrich von Bassewitz, 2003-03-07 | ||
; | ||
; Push arguments and call main() | ||
; | ||
|
||
|
||
.export callmain, _exit | ||
.export __argc, __argv | ||
|
||
.import _main, pushax, done, donelib | ||
.import zpsave, rvsave, reset | ||
|
||
.include "zeropage.inc" | ||
.include "apple2.inc" | ||
|
||
|
||
;--------------------------------------------------------------------------- | ||
; Setup the stack for main(), then jump to it | ||
|
||
callmain: | ||
lda __argc | ||
ldx __argc+1 | ||
jsr pushax ; Push argc | ||
|
||
lda __argv | ||
ldx __argv+1 | ||
jsr pushax ; Push argv | ||
|
||
ldy #4 ; Argument size | ||
jsr _main | ||
|
||
; Avoid a re-entrance of donelib. This is also the exit() entry. | ||
_exit: ldx #<exit | ||
lda #>exit | ||
jsr reset ; Setup RESET vector | ||
|
||
; Switch in LC bank 2 for R/O in case it was switched out by a RESET. | ||
bit $C080 | ||
|
||
; Call the module destructors. | ||
jsr donelib | ||
|
||
; Switch in ROM. | ||
bit $C082 | ||
|
||
; Restore the original RESET vector. | ||
exit: ldx #$02 | ||
: lda rvsave,x | ||
sta SOFTEV,x | ||
dex | ||
bpl :- | ||
|
||
; Copy back the zero-page stuff. | ||
ldx #zpspace-1 | ||
: lda zpsave,x | ||
sta sp,x | ||
dex | ||
bpl :- | ||
|
||
; ProDOS TechRefMan, chapter 5.2.1: | ||
; "System programs should set the stack pointer to $FF at the | ||
; warm-start entry point." | ||
ldx #$FF | ||
txs ; Re-init stack pointer | ||
|
||
; We're done | ||
jmp done | ||
|
||
;--------------------------------------------------------------------------- | ||
; Data | ||
|
||
.data | ||
__argc: .word 0 | ||
__argv: .addr 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters