mirror of
https://github.com/cc65/cc65.git
synced 2024-12-26 08:32:00 +00:00
72 lines
2.0 KiB
ArmAsm
72 lines
2.0 KiB
ArmAsm
.export _zonecounter
|
|
.export __STARTUP__ : absolute = 1
|
|
.export _exit
|
|
.import __ROM_START__
|
|
.import __RAM3_START__, __RAM3_SIZE__
|
|
.import initlib, donelib
|
|
.import zerobss, copydata
|
|
.import IRQStub
|
|
.import push0, _main
|
|
.include "atari7800.inc"
|
|
.include "zeropage.inc"
|
|
|
|
INPTCTRL = $01
|
|
|
|
.segment "STARTUP"
|
|
start:
|
|
; Startup sequence recommended by Atari.
|
|
; See the 7800 standards document.
|
|
sei ; Initialize 6502
|
|
cld
|
|
lda #$07 ; Lock machine in 7800 mode
|
|
sta INPTCTRL
|
|
lda #$7f ; DMA off
|
|
sta CTRL
|
|
ldx #0 ; OFFSET must always be 0
|
|
stx OFFSET
|
|
stx INPTCTRL ; Make sure joysticks don't freeze
|
|
dex ; Stack pointer = $ff
|
|
txs
|
|
|
|
; Set up parameter stack
|
|
lda #<(__RAM3_START__ + __RAM3_SIZE__)
|
|
sta sp
|
|
lda #>(__RAM3_START__ + __RAM3_SIZE__)
|
|
sta sp+1
|
|
|
|
jsr copydata
|
|
jsr zerobss
|
|
jsr initlib
|
|
|
|
; Call main program (pass empty command line)
|
|
jsr push0 ; argc
|
|
jsr push0 ; argv
|
|
ldy #4 ; Argument size
|
|
jsr _main
|
|
|
|
_exit:
|
|
jsr donelib
|
|
jmp start
|
|
|
|
NMIHandler:
|
|
inc _zonecounter
|
|
jmp IRQStub
|
|
|
|
IRQHandler:
|
|
rti
|
|
|
|
.segment "DATA"
|
|
_zonecounter:
|
|
.byte 0
|
|
|
|
.segment "ENCRYPTION"
|
|
.res 126, $ff ; Reserved for encryption
|
|
Lfff8: .byte $ff ; Region verification (always $ff)
|
|
Lfff9: .byte $f7 ; Use last 4096 bytes only for encryption
|
|
;;;Lfff9: .byte <(((__ROM_START__/4096)<<4) | 7)
|
|
|
|
.segment "VECTORS"
|
|
.word NMIHandler
|
|
.word start
|
|
.word IRQHandler
|