Add test/example programs for monolithium.
[monolithium.git] / tests / hello.asm
1 ;
2 ; hello.asm
3 ;
4 ; Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
5 ;
6 ; This program is free software: you can redistribute it and/or modify
7 ; it under the terms of the GNU Affero General Public License as
8 ; published by the Free Software Foundation, either version 3 of the
9 ; License, or (at your option) any later version.
10 ;
11 ; This program is distributed in the hope that it will be useful,
12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ; GNU Affero General Public License for more details.
15 ;
16 ; You should have received a copy of the GNU Affero General Public License
17 ; along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 ;
19
20 bits 32
21
22 section .text
23
24 start:                  push 0
25                         push 0
26                         push handle
27                         push name
28                         call open_file
29                         add esp, 16
30                         push 4
31                         push address
32                         push 12
33                         push framebuffer
34                         push 0xC9000004
35                         push dword [handle]
36                         call device_ioctl
37                         add esp, 24
38                         or eax, eax
39                         jnz .stop
40                         mov edi, dword [address]
41                         lea esi, [edi + 160]
42                         mov ecx, 960
43                         cld
44                         rep movsd
45                         mov eax, 0x07200720
46                         mov ecx, 40
47                         rep stosd
48                         sub edi, 160
49                         mov esi, message
50                         mov ecx, 13
51                         rep movsw
52 .stop:                  xor eax, eax
53                         not eax
54                         push eax
55                         push eax
56                         call sleep
57                         add esp, 8
58                         jmp .stop
59
60 %include "../library/src/syscall.asm"
61
62 section .data
63
64 handle:                 DD 0
65 name:                   DB '@Video0', 0
66 framebuffer:            DD 0x10000000
67                         DD 0
68                         DD 80 * 25 * 2
69 address:                DD 0
70 message:                DB 'H', 7, 'e', 7, 'l', 7, 'l', 7, 'o', 7, ',', 7, ' ',
71                         DB  7, 'w', 7, 'o', 7, 'r', 7, 'l', 7, 'd', 7, '!', 7