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