]> git.sur5r.net Git - cc65/blob - libsrc/atari/cartstart.s
remove TABs
[cc65] / libsrc / atari / cartstart.s
1 ; Cartridge start routine
2 ;
3 ; Christian Groessler, 06-Jan-2014
4
5 .ifndef __ATARIXL__
6
7 .export         cartstart
8
9 .import         start
10 .import         __DATA_LOAD__, __DATA_SIZE__, __DATA_RUN__
11 .importzp       ptr1, ptr2, tmp1, tmp2
12
13 .include        "atari.inc"
14
15 .segment         "STARTUP"
16
17 ; start routine of cartridge
18 ; copy data segment to RAM and chain to entry point of crt0.s
19
20 cartstart:      lda     #<__DATA_LOAD__
21                 sta     ptr1
22                 lda     #>__DATA_LOAD__
23                 sta     ptr1+1
24                 lda     #<__DATA_RUN__
25                 sta     ptr2
26                 lda     #>__DATA_RUN__
27                 sta     ptr2+1
28                 lda     #>__DATA_SIZE__
29                 sta     tmp2
30                 lda     #<__DATA_SIZE__
31                 sta     tmp1
32                 jsr     memcopy
33                 jsr     start                   ; run program
34                 jmp     (DOSVEC)                ; return to DOS
35
36
37 ; routine taken from http://www.obelisk.demon.co.uk/6502/algorithms.html
38 ;
39 ; copy memory
40 ; ptr1      - source
41 ; ptr2      - destination
42 ; tmp2:tmp1 - len
43
44 .proc   memcopy
45
46                 ldy     #0
47                 ldx     tmp2
48                 beq     last
49 pagecp:         lda     (ptr1),y
50                 sta     (ptr2),y
51                 iny
52                 bne     pagecp
53                 inc     ptr1+1
54                 inc     ptr2+1
55                 dex
56                 bne     pagecp
57 last:           cpy     tmp1
58                 beq     done
59                 lda     (ptr1),y
60                 sta     (ptr2),y
61                 iny
62                 bne     last
63 done:           rts
64
65 .endproc
66
67 .endif  ; .ifndef __ATARIXL__