-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsnake.s
executable file
·217 lines (184 loc) · 2.54 KB
/
snake.s
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
; kernel.s
[BITS 16]
[ORG 0]
mov ax, 0x100
mov ds, ax
mov es, ax
mov ax, 0x8000
mov ss, ax
mov sp, 0xf000
jmp start
msg db '<-----------Snake----------->', 0
msg1 db ' GAME OVER', 0
dir equ 0
speed equ 0x99FF
x equ 1
y equ 2
_x equ 3
_y equ 4
lx equ 5
ly equ 6
%include "function.s"
gere_key :
left: cmp ax, 4B00h
jne right
mov byte [dir], 0
jmp _gerekey
right: cmp ax, 4D00h
jne up
mov byte [dir], 1
jmp _gerekey
up: cmp ax, 4800h
jne down
mov byte [dir], 2
jmp _gerekey
down: cmp ax, 5000h
jne n
mov byte [dir], 3
jmp _gerekey
n: cmp ax, 'n'
jne _gerekey
mov si, 0
_gerekey:
ret
move: ; dir dl, x al, y, bh
m_left: cmp dl, 0
jne m_right
dec al
jmp _move
m_right:cmp dl, 1
jne m_up
inc al
jmp _move
m_up: cmp dl, 2
jne m_down
dec ah
jmp _move
m_down: cmp dl, 3
jne _move
inc ah
jmp _move
_move:
ret
aff_snake:
mov dl, byte [x] ; aff '0'
mov dh, byte [y]
call putcurs
call getchar
push ax
mov al, 'O'
mov bl, 1
call putchar
mov dl, byte [lx] ; aff '#'
mov dh, byte [ly]
call putcurs
mov al, byte [dir]
add al, 23h
mov bl, 1
call putchar
mov al, byte [x]
mov byte [lx], al
mov al, byte [y]
mov byte [ly], al
pop ax
cmp al, '@'
je add_item
cmp al, ' '
jne game_over
mov dl, byte [_x] ; aff ' '
mov dh, byte [_y]
call putcurs
call getchar
mov dl, al
mov al, ' '
mov bl, 1
call putchar
sub dl, 23h
mov al, byte [_x]
mov ah, byte [_y]
call move
mov byte [_x], al
mov byte [_y], ah
_aff_snake:
ret
add_item:
mov si, 16
add_item_:
mov dx, [speed]
add dx, 3
mov [speed], dx
call random
mov dh, ah
push dx
call random
pop dx
mov dl, ah
call putcurs
mov al, '@'
mov bl, 0xA
call putchar
cmp si, 0
dec si
jne add_item_
ret
start:
mov ax, cs
mov ds, ax
mov es, ax
;mov ah, 1
;mov ch, 1
;mov cl, 1 sensed disable vursor
;int 10h
mov dx, 0
init: ; clear screen
call putcurs
mov al, ' '
mov ah, 9
mov bh, 0
mov cx, 0xFF
int 10h
inc dh
cmp dh, 0xFF
jne init
mov dl, 26
mov dh, 2
call putcurs
;mov si, msg
;call print
mov byte [x], 5
mov byte [y], 5
mov byte [lx], 4
mov byte [ly], 5
mov byte [_x], 4
mov byte [_y], 5
mov byte [dir], 1
call add_item
boucle:
call aff_snake
call getkey_
call gere_key
mov dl, byte [dir]
mov al, byte [x]
mov ah, byte [y]
call move
mov byte [x], al
mov byte [y], ah
mov cx, 1
mov dx, [speed]
call sleep
mov dl, 3
mov dh, 3
call putcurs
mov ax, [speed]
; call putnbr
jmp boucle
game_over:
mov dl, 30
mov dh, 11
call putcurs
mov si, msg1
call print
call getkey
cmp al, ' '
je start
jmp game_over