per-line scrolling test
[mdlife] / src / startup.s
1 | vi:filetype=gas68k:
2         .text
3         .extern main
4
5         .global start
6         .global halt_cpu
7 start:
8         jsr disable_intr
9
10         move.b 0xa10001, %d0
11         and.b #0xf, %d0
12         beq.s skip_tmss
13         | write SEGA to 0xa14000 to convince the TMSS to run us
14         move.l #0x53454741, 0xa14000
15 skip_tmss:
16
17         | copy .data section from ROM to RAM
18         move.l #_data_lma, %a0
19         move.l #_data_start, %a1
20         move.l #_data_end, %a2
21         cmp.l %a1, %a2
22         beq.s 1f        | skip data copy if the section is empty
23 0:      move.l (%a0)+, (%a1)+
24         cmp.l %a1, %a2
25         bne.s 0b
26 1:
27
28         | zero the .bss section
29         move.l #_bss_start, %a0
30         move.l #_bss_end, %a1
31         cmp.l %a0, %a1
32         beq.s 1f        | skip bss zeroing if the section is empty
33 0:      clr.l (%a0)+
34         cmp.l %a0, %a1
35         bne.s 0b
36 1:
37
38         | setup the stack pointer stack
39         move.l #_stacktop, %sp
40         | now that we have a stack, we can enable interrupts
41         jsr enable_intr
42
43         jsr main
44 halt_cpu:
45         stop #0x2700