Code cleanups.
[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:"
aa71919b 5lost_msg: .asciiz "Vous avez perdu !"
f24104ee 6win_msg: .asciiz "Vous avez gagné !"
aa71919b
JB
7temp_msg: .asciiz " bien placé"
8exclamation_point: .asciiz "! "
f24104ee
JB
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
aa71919b 41
f24104ee
JB
42generate_sequence:
43 la $t0, guess_value
aa71919b 44
f24104ee
JB
45 li $a1, 8
46 li $v0, 42
47 syscall
48 addi $a0, $a0, 1 # Put the integer into the [1-8] range
aa71919b 49
f24104ee 50 sb $a0, 0($t0)
aa71919b 51
f24104ee
JB
52 li $a1, 8
53 li $v0, 42
54 syscall
55 addi $a0, $a0, 1 # Put the integer into the [1-8] range
aa71919b 56
f24104ee 57 sb $a0, 1($t0)
aa71919b 58
f24104ee
JB
59 li $a1, 8
60 li $v0, 42
61 syscall
62 addi $a0, $a0, 1 # Put the integer into the [1-8] range
aa71919b 63
f24104ee 64 sb $a0, 2($t0)
aa71919b 65
f24104ee
JB
66 li $a1, 8
67 li $v0, 42
68 syscall
69 addi $a0, $a0, 1 # Put the integer into the [1-8] range
aa71919b 70
f24104ee 71 sb $a0, 3($t0)
aa71919b 72
f24104ee
JB
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
aa71919b 84
f24104ee
JB
85 la $a0, ($s0)
86 li $v0, 1
87 syscall
88 la $a0, interrogation_point
89 li $v0, 4
90 syscall
aa71919b 91
f24104ee
JB
92 la $a0, input_value # Store the answer
93 li $a1, 5
94 li $v0, 8 # Load syscall read_string
aa71919b 95 syscall # Make the syscall
f24104ee 96
aa71919b 97# check that each input values are in the right range
f24104ee
JB
98check_input:
99 la $t7, input_value
aa71919b 100
f24104ee
JB
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
aa71919b 106
f24104ee
JB
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
aa71919b 112
f24104ee
JB
113 lb $t5, 2($t7)
114 andi $t5, $t5, 0x0F # ASCII code to integer
115 beq $t5, $zero, input
116 addi $t5, $t5, -9
aa71919b
JB
117 bgez $t5, input
118
f24104ee
JB
119 lb $t5, 3($t7)
120 andi $t5, $t5, 0x0F # ASCII code to integer
121 beq $t5, $zero, input
122 addi $t5, $t5, -9
aa71919b
JB
123 bgez $t5, input
124
433eeade 125 la $s2, ($zero) # Same counter
aa71919b 126 la $s3 ($zero)
f24104ee
JB
127compare_input:
128 la $t7, input_value
129 la $t6, guess_value
130 la $t5, O
131 la $t4, X
aa71919b
JB
132 la $t3, tiret
133
f24104ee
JB
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)
aa71919b
JB
142 addi $s2, $s2, 1
143different1:
f24104ee
JB
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
aa71919b 163different3:
f24104ee
JB
164 lb $t0, 3($t7)
165 andi $t0, $t0, 0x0F # ASCII code to integer
166 lb $t1, 3($t6)
167 beq $t0, $t1, same4
aa71919b
JB
168 j different4
169same4:
f24104ee
JB
170 sb $zero, 3($t7)
171 sb $t5, 3($s1)
172 addi $s2, $s2, 1
173different4:
aa71919b
JB
174 beq $s2, 4, won
175
176
177print_comp_result:
f24104ee
JB
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
aa71919b 193
f24104ee 194 addi $s0, $s0, 1
aa71919b
JB
195 j loop
196
f24104ee
JB
197won:
198 la $a0, newline
199 li $v0, 4
200 syscall
201 la $a0, win_msg
202 li $v0, 4
aa71919b
JB
203 syscall
204
f24104ee 205 j exit
aa71919b 206
f24104ee
JB
207lost:
208 la $a0, newline
209 li $v0, 4
aa71919b 210 syscall
f24104ee
JB
211 la $a0, lost_msg
212 li $v0, 4
aa71919b
JB
213 syscall
214
f24104ee 215 j exit
aa71919b 216
f24104ee
JB
217exit:
218 li $v0, 10
433eeade 219 syscall