Some indentation cleanups on the Mastermind game
[TD_IML.git] / project / mips1.asm
CommitLineData
f24104ee 1.data
93bb4f4c 2
f24104ee
JB
3welcome: .asciiz "Bienvenue dans le jeu de Mastermind.\nUne sequence de quatre chiffres de 1 à 8 a ete générée.\nA vous de la deviner !"
4play: .asciiz "Commencer à jouer:"
5lost_msg: .asciiz "Vous avez perdu !"
6win_msg: .asciiz "Vous avez gagné !"
7temp_msg: .asciiz " bien placé"
8exclamation_point: .asciiz "! "
9interrogation_point: .asciiz "? "
10newline: .asciiz "\n"
93bb4f4c 11
f24104ee
JB
12O: .ascii "O"
13X: .ascii "X"
14tiret: .ascii "-"
93bb4f4c 15
f24104ee
JB
16compare_buffer: .space 5
17input_value: .byte 0:5
18guess_value: .byte 0:5
93bb4f4c 19
f24104ee 20.text
93bb4f4c
JB
21
22main:
23
f24104ee
JB
24# show intro and rules
25display_welcome:
26 la $a0, newline
27 li $v0, 4
93bb4f4c 28 syscall
f24104ee
JB
29 la $a0, welcome
30 li $v0, 4
93bb4f4c 31 syscall
f24104ee
JB
32 la $a0, newline
33 li $v0, 4
93bb4f4c 34 syscall
f24104ee
JB
35 la $a0, play
36 li $v0, 4
93bb4f4c 37 syscall
f24104ee
JB
38 la $a0, newline
39 li $v0, 4
93bb4f4c 40 syscall
f24104ee
JB
41
42generate_sequence:
43 la $t0, guess_value
44
45 li $a1, 8
46 li $v0, 42
47 syscall
48 addi $a0, $a0, 1 # Put the integer into the [1-8] range
49
50 sb $a0, 0($t0)
51
52 li $a1, 8
53 li $v0, 42
54 syscall
55 addi $a0, $a0, 1 # Put the integer into the [1-8] range
56
57 sb $a0, 1($t0)
58
59 li $a1, 8
60 li $v0, 42
61 syscall
62 addi $a0, $a0, 1 # Put the integer into the [1-8] range
63
64 sb $a0, 2($t0)
65
66 li $a1, 8
67 li $v0, 42
68 syscall
69 addi $a0, $a0, 1 # Put the integer into the [1-8] range
70
71 sb $a0, 3($t0)
72
73generate_sequence_loop_end:
74
75 la $s0, ($zero) # Initialize loop counter to zero
76 la $s1, compare_buffer
77loop:
78 beq $s0, 10, lost
79# ask user for the next input
80input:
81 la $a0, newline
82 li $v0, 4
83 syscall
84
85 la $a0, ($s0)
86 li $v0, 1
87 syscall
88 la $a0, interrogation_point
89 li $v0, 4
90 syscall
91
92 la $a0, input_value # Store the answer
93 li $a1, 5
94 li $v0, 8 # Load syscall read_string
95 syscall # Make the syscall
96
97# check that each input values are in the right range
98check_input:
99 la $t7, input_value
100
101 lb $t5, 0($t7)
102 andi $t5, $t5, 0x0F # ASCII code to integer
103 beq $t5, $zero, input
104 addi $t5, $t5, -9
105 bgez $t5, input
106
107 lb $t5, 1($t7)
108 andi $t5, $t5, 0x0F # ASCII code to integer
109 beq $t5, $zero, input
110 addi $t5, $t5, -9
111 bgez $t5, input
112
113 lb $t5, 2($t7)
114 andi $t5, $t5, 0x0F # ASCII code to integer
115 beq $t5, $zero, input
116 addi $t5, $t5, -9
117 bgez $t5, input
118
119 lb $t5, 3($t7)
120 andi $t5, $t5, 0x0F # ASCII code to integer
121 beq $t5, $zero, input
122 addi $t5, $t5, -9
123 bgez $t5, input
124
433eeade 125 la $s2, ($zero) # Same counter
f24104ee
JB
126 la $s3 ($zero)
127compare_input:
128 la $t7, input_value
129 la $t6, guess_value
130 la $t5, O
131 la $t4, X
132 la $t3, tiret
133
134 lb $t0, 0($t7)
135 andi $t0, $t0, 0x0F # ASCII code to integer
136 lb $t1, 0($t6)
137 beq $t0, $t1, same1
138 j different1
139same1:
140 sb $0, 0($t7)
141 sb $t5, 0($s1)
142 addi $s2, $s2, 1
143different1:
144 lb $t0, 1($t7)
145 andi $t0, $t0, 0x0F # ASCII code to integer
146 lb $t1, 1($t6)
147 beq $t0, $t1, same2
148 j different2
149same2:
150 sb $zero, 1($t7)
151 sb $t5, 1($s1)
152 addi $s2, $s2, 1
153different2:
154 lb $t0, 2($t7)
155 andi $t0, $t0, 0x0F # ASCII code to integer
156 lb $t1, 2($t6)
157 beq $t0, $t1, same3
158 j different3
159same3:
160 sb $zero, 2($t7)
161 sb $t5, 2($s1)
162 addi $s2, $s2, 1
163different3:
164 lb $t0, 3($t7)
165 andi $t0, $t0, 0x0F # ASCII code to integer
166 lb $t1, 3($t6)
167 beq $t0, $t1, same4
168 j different4
169same4:
170 sb $zero, 3($t7)
171 sb $t5, 3($s1)
172 addi $s2, $s2, 1
173different4:
174 beq $s2, 4, won
175
176
177print_comp_result:
178 la $a0, newline
179 li $v0, 4
180 syscall
181 la $a0, ($s0)
182 li $v0, 1
183 syscall
184 la $a0, exclamation_point
185 li $v0, 4
186 syscall
187 la $a0, ($s2)
188 li $v0, 1
189 syscall
190 la $a0, temp_msg
191 li $v0, 4
192 syscall
193
194 addi $s0, $s0, 1
195 j loop
196
197won:
198 la $a0, newline
199 li $v0, 4
200 syscall
201 la $a0, win_msg
202 li $v0, 4
203 syscall
204
205 j exit
433eeade 206
f24104ee
JB
207lost:
208 la $a0, newline
209 li $v0, 4
210 syscall
211 la $a0, lost_msg
212 li $v0, 4
213 syscall
214
215 j exit
433eeade 216
f24104ee
JB
217exit:
218 li $v0, 10
433eeade 219 syscall