-
Notifications
You must be signed in to change notification settings - Fork 1
/
loader.asm
166 lines (131 loc) · 1.72 KB
/
loader.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
; load world from file
_load_world:
pusha
mov eax, 5
mov ebx, world_file
mov ecx, 0
int 0x80
mov [fd_in], eax
mov eax, 3
mov ebx, [fd_in]
mov ecx, world
mov edx, 6000
int 0x80
mov eax, 6
mov ebx, [fd_in]
int 0x80
popa
ret
_load_device:
pusha
mov eax, 5
mov ebx, deviceP_file
mov ecx, 0
int 0x80
mov [fd_in], eax
mov eax, 3
mov ebx, [fd_in]
mov ecx, device_path
mov edx, 256
int 0x80
mov eax, 6
mov ebx, [fd_in]
int 0x80
mov ecx, device_path
mov edx, 100
call _print_line
; get rid of new line
mov esi, device_path
mov ecx, 256
.loop:
cmp [esi], byte 0xA
jne .next
mov [esi], byte 0
jmp .end
.next:
inc esi
loop .loop
.end:
popa
ret
_load_lvl:
pusha
mov eax, 5
mov ebx, lvl
mov ecx, 0
int 0x80
mov [fd_in], eax
mov eax, 3
mov ebx, [fd_in]
mov ecx, lvl_buff
mov edx, 2048
int 0x80
mov eax, 6
mov ebx, [fd_in]
int 0x80
popa
ret
_scroll_src:
pusha
mov eax, 5
mov ebx, src0
mov ecx, 0
int 0x80
mov [fd_in], eax
mov eax, 3
mov ebx, [fd_in]
mov ecx, buff
mov edx, 32768
int 0x80
mov eax, 6
mov ebx, [fd_in]
int 0x80
; output src line by line
mov edi, buff
.loop:
mov eax, 4
mov ebx, 1
mov ecx, edi
mov edx, 1
int 0x80
add edi, 1
cmp [edi], byte 0
je .end
cmp [edi], byte 0xA
je .do_sleep
jmp .loop
.do_sleep:
mov eax, 0
mov ebx, 10000000
call _sleep
loop .loop
.end:
mov ecx, 10
.loop2:
call _new_line
loop .loop2
popa
ret
_load_start_screen:
pusha
mov eax, 5
mov ebx, logo
mov ecx, 0
int 0x80
mov [fd_in], eax
mov eax, 3
mov ebx, [fd_in]
mov ecx, screen
mov edx, 6000
int 0x80
mov eax, 6
mov ebx, [fd_in]
int 0x80
mov ecx, screen
mov edx, world_len
call _print_line
mov eax, 3
mov ebx, 0
call _sleep
popa
ret