mirror of
https://github.com/cc65/cc65.git
synced 2024-11-18 00:07:21 +00:00
50 lines
1.1 KiB
ArmAsm
50 lines
1.1 KiB
ArmAsm
; Atari VCS 2600 startup code for cc65
|
|
;
|
|
; Florent Flament (contact@florentflament.com), 2017
|
|
|
|
.export _exit
|
|
.export __STARTUP__ : absolute = 1
|
|
|
|
.import __RAM_START__, __RAM_SIZE__
|
|
.import copydata
|
|
.import _main
|
|
|
|
.include "zeropage.inc"
|
|
|
|
|
|
.segment "STARTUP"
|
|
start:
|
|
; Clear decimal mode
|
|
cld
|
|
|
|
; Initialization Loop:
|
|
; * Clears Atari 2600 whole memory (128 bytes) including BSS segment
|
|
; * Clears TIA registers
|
|
; * Sets system stack pointer to $ff (i.e top of zero-page)
|
|
ldx #0
|
|
txa
|
|
clearLoop:
|
|
dex
|
|
txs
|
|
pha
|
|
bne clearLoop
|
|
|
|
; Initialize data
|
|
jsr copydata
|
|
|
|
; Initialize C stack pointer
|
|
lda #<(__RAM_START__ + __RAM_SIZE__)
|
|
ldx #>(__RAM_START__ + __RAM_SIZE__)
|
|
sta sp
|
|
stx sp+1
|
|
|
|
; Call main
|
|
jsr _main
|
|
_exit: jmp _exit
|
|
|
|
|
|
.segment "VECTORS"
|
|
.word start ; NMI
|
|
.word start ; Reset
|
|
.word start ; IRQ
|