mirror of
https://github.com/cc65/cc65.git
synced 2024-12-24 11:31:31 +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
|