out call to ports with inline asm + c variables
[swan-dev] / src / entry.S
1 # File              : entry.S
2 # Author            : Robin Krens <robin@robinkrens.nl>
3 # Date              : 07.06.2022
4 # Last Modified Date: 07.06.2022
5 # Last Modified By  : Robin Krens <robin@robinkrens.nl>
6
7 .org    0
8 .code16
9
10 .extern main
11 .extern _stext
12 .extern _etext
13 .extern _sdata
14 .extern _edata
15 .global _start
16
17 _start:
18         # reset flags and registers
19         cli
20         cld
21         xor %ax,%ax
22         mov %ax,%bx
23         mov %ax,%bp
24         mov %ax,%ss
25
26         # set stack pointer for wonderswan
27         # color
28         mov $0xFE00 - 2,%ax
29         mov %ax,%sp
30         
31 copy_to_ram:
32         mov $_etext, %ax
33         # set data segment to ROM bank
34         mov $0x2000, %bx
35         mov %bx, %ds
36         mov %ax, %si
37         mov $_sdata, %bx
38         mov %bx, %di
39         # calculate size
40         mov $_edata, %ax
41         mov $_sdata, %bx
42         sub %bx, %ax
43         mov %ax, %cx
44         rep movsb
45         # reset data segment to RAM
46         xor %ax, %ax
47         mov %ax, %ds
48
49         # jump to C
50         call main
51
52         # should not be here
53 loop:   nop
54         jmp loop