4 ; Originally by Bastian Schick
5 ; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
7 ; Ported to cc65 (http://www.cc65.org) by
8 ; Shawn Jefferson, June 2004
12 ; Startup code for cc65 (Lynx version). Based on the Atari 8-bit startup
13 ; code structure. The C stack is located at the end of the RAM memory
14 ; segment, and grows downward. Bastian Schick's executable header is put
15 ; on the front of the fully linked binary (see EXEHDR segment.)
19 .export __STARTUP__ : absolute = 1 ; Mark as startup
21 .import initlib, donelib
25 .import __MAIN_START__, __MAIN_SIZE__, __STACKSIZE__
27 .include "zeropage.inc"
31 ; ------------------------------------------------------------------------
32 ; Mikey and Suzy init data, reg offsets and data
36 SuzyInitReg: .byte $28,$2a,$04,$06,$92,$83,$90
37 SuzyInitData: .byte $7f,$7f,$00,$00,$24,$f3,$01
39 MikeyInitReg: .byte $00,$01,$08,$09,$20,$28,$30,$38,$44,$50,$8a,$8b,$8c,$92,$93
40 MikeyInitData: .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$29
42 ; ------------------------------------------------------------------------
54 ; Init the bank switching.
59 ; Disable all timer interrupts.
70 ; Disable the TX/RX IRQ; set to 8E1.
75 ; Clear all pending interrupts.
82 lda #<(__MAIN_START__ + __MAIN_SIZE__ + __STACKSIZE__)
83 ldx #>(__MAIN_START__ + __MAIN_SIZE__ + __STACKSIZE__)
89 ldx #.sizeof(MikeyInitReg)-1
90 mloop: ldy MikeyInitReg,x
96 ; These are RAM-shadows of read-only regs.
107 ldx #.sizeof(SuzyInitReg)-1
108 sloop: ldy SuzyInitReg,x
118 ; Clear the BSS data.
122 ; Call the module constructors.
126 ; Push the command-line arguments; and, call main().
130 ; Call the module destructors. This is also the exit() entry.
132 _exit: jsr donelib ; Run module destructors