mirror of
https://github.com/cc65/cc65.git
synced 2024-11-19 06:31:31 +00:00
8216bf1d6a
main() is encountered. Define this symbol in the startup code. This will automatically force linking of the startup code which can then reside inside the standard library as any other object file. git-svn-id: svn://svn.cc65.org/cc65/trunk@3988 b7a2c559-68d2-44c3-8de9-860c34a00d81
152 lines
3.0 KiB
ArmAsm
152 lines
3.0 KiB
ArmAsm
; ***
|
|
; CC65 Lynx Library
|
|
;
|
|
; Originally by Bastian Schick
|
|
; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
|
|
;
|
|
; Ported to cc65 (http://www.cc65.org) by
|
|
; Shawn Jefferson, June 2004
|
|
;
|
|
; ***
|
|
;
|
|
; Startup code for cc65 (Lynx version). Based on Atari 8-bit startup
|
|
; code structure. The C stack is located at the end of the RAM memory
|
|
; segment and grows downward. Bastian Schick's executable header is put
|
|
; on the front of the fully linked binary (see EXEHDR segment.)
|
|
;
|
|
|
|
.include "lynx.inc"
|
|
.export _exit
|
|
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
|
|
|
.import initlib, donelib
|
|
.import zerobss
|
|
.import callmain
|
|
.import _main
|
|
.import __BSS_LOAD__
|
|
.import __RAM_START__, __RAM_SIZE__
|
|
|
|
.include "zeropage.inc"
|
|
.include "extzp.inc"
|
|
|
|
|
|
; ------------------------------------------------------------------------
|
|
; EXE header (BLL header)
|
|
|
|
.segment "EXEHDR"
|
|
.word $0880
|
|
.dbyt __RAM_START__
|
|
.dbyt __BSS_LOAD__ - __RAM_START__ + 10
|
|
.byte $42,$53
|
|
.byte $39,$33
|
|
|
|
|
|
; ------------------------------------------------------------------------
|
|
; Mikey and Suzy init data, reg offsets and data
|
|
|
|
.rodata
|
|
|
|
SuzyInitReg: .byte $28,$2a,$04,$06,$92,$83,$90
|
|
SuzyInitData: .byte $7f,$7f,$00,$00,$24,$f3,$01
|
|
|
|
MikeyInitReg: .byte $00,$01,$08,$09,$20,$28,$30,$38,$44,$50,$8a,$8b,$8c,$92,$93
|
|
MikeyInitData: .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$29
|
|
|
|
|
|
; ------------------------------------------------------------------------
|
|
; Actual code
|
|
|
|
.segment "STARTUP"
|
|
|
|
; set up system
|
|
|
|
sei
|
|
cld
|
|
ldx #$FF
|
|
txs
|
|
|
|
; init bank switching
|
|
|
|
lda #$C
|
|
sta MAPCTL ; $FFF9
|
|
|
|
; disable all timer interrupts
|
|
|
|
lda #$80
|
|
trb TIM0CTLA
|
|
trb TIM1CTLA
|
|
trb TIM2CTLA
|
|
trb TIM3CTLA
|
|
trb TIM5CTLA
|
|
trb TIM6CTLA
|
|
trb TIM7CTLA
|
|
|
|
; disable TX/RX IRQ, set to 8E1
|
|
|
|
lda #%11101
|
|
sta SERCTL
|
|
|
|
; clear all pending interrupts
|
|
|
|
lda INTSET
|
|
sta INTRST
|
|
|
|
; setup the stack
|
|
|
|
lda #<(__RAM_START__ + __RAM_SIZE__)
|
|
sta sp
|
|
lda #>(__RAM_START__ + __RAM_SIZE__)
|
|
sta sp+1
|
|
|
|
; Init Mickey
|
|
|
|
ldx #.sizeof(MikeyInitReg)-1
|
|
mloop: ldy MikeyInitReg,x
|
|
lda MikeyInitData,x
|
|
sta $fd00,y
|
|
dex
|
|
bpl mloop
|
|
|
|
; these are RAM-shadows of read only regs
|
|
|
|
ldx #$1b
|
|
stx __iodat
|
|
dex ; $1A
|
|
stx __iodir
|
|
ldx #$d
|
|
stx __viddma
|
|
|
|
; Init Suzy
|
|
|
|
ldx #.sizeof(SuzyInitReg)-1
|
|
sloop: ldy SuzyInitReg,x
|
|
lda SuzyInitData,x
|
|
sta $fc00,y
|
|
dex
|
|
bpl sloop
|
|
|
|
lda #$24
|
|
sta __sprsys
|
|
|
|
; Clear the BSS data
|
|
|
|
jsr zerobss
|
|
|
|
; Call module constructors
|
|
|
|
jsr initlib
|
|
|
|
; Push arguments and call main
|
|
|
|
jsr callmain
|
|
|
|
; Call module destructors. This is also the _exit entry.
|
|
|
|
_exit: jsr donelib ; Run module destructors
|
|
|
|
; Endless loop
|
|
|
|
noret: bra noret
|
|
|
|
|