]> git.sur5r.net Git - cc65/blob - libsrc/supervision/crt0.s
6a3614476f3f25b376861f40aef4ea8e061b98c2
[cc65] / libsrc / supervision / crt0.s
1 ;
2 ; Startup code for cc65 (supervision version)
3 ;
4
5         .export         _exit
6         .export         __STARTUP__ : absolute = 1      ; Mark as startup
7
8         .import         _main
9         .import         initlib, donelib, copydata
10         .import         zerobss
11         .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
12
13         .include "zeropage.inc"
14         .include "supervision.inc"
15
16         .export _sv_irq_timer_counter, _sv_irq_dma_counter
17         .export _sv_nmi_counter
18
19 .bss
20
21 _sv_irq_dma_counter:    .byte 0
22 _sv_irq_timer_counter:  .byte 0
23 _sv_nmi_counter:        .byte 0
24
25 .code
26
27 reset:
28         jsr     zerobss
29
30         ; initialize data
31         jsr     copydata
32
33         lda     #>(__RAM_START__ + __RAM_SIZE__)
34         sta     sp+1            ; Set argument stack ptr
35         stz     sp              ; #<(__RAM_START__ + __RAM_SIZE__)
36         jsr     initlib
37         jsr     _main
38 _exit:  jsr     donelib
39 exit:   jmp     exit
40
41
42 .proc   irq
43         pha
44         lda     sv_irq_source
45         and     #SV_IRQ_REQUEST_TIMER
46         beq     not_timer
47         lda     sv_timer_quit
48         inc     _sv_irq_timer_counter
49 not_timer:
50         lda     sv_irq_source
51         and     #SV_IRQ_REQUEST_DMA
52         beq     not_dma
53         lda     sv_dma_quit
54         inc     _sv_irq_dma_counter
55 not_dma:
56         pla
57         rti
58 .endproc
59
60 .proc   nmi
61         inc     _sv_nmi_counter
62         rti
63 .endproc
64
65 ; removing this segment gives only a warning
66         .segment "FFF0"
67 .proc reset32kcode
68         lda     #(6<<5)
69         sta     sv_bank
70 ; now the 32kbyte image can reside in the top of 64kbyte, 128kbyte roms
71         jmp     reset
72 .endproc
73
74         .segment "VECTOR"
75
76 .word   nmi
77 .word   reset32kcode
78 .word   irq
79
80