Programming Exercise I: Showing a One-Player Gomoku Game


Absolutely no copying others’ works
(Unlike other languages, using others’ assembly code is obvious.)

Development Requirements
When start developing the exercise, follow the two requirements below:

Soft Due Date and Submission Method
On or before Thursday, February 13, 2025 and upload the source code (no documentation needed) to the section of “COVID-19 Exams, Homeworks, & Programming Exercises” of Blackboard.

Since related topics may not be covered completely by the due date, no penalty will be applied if submitted after the due date. However, you may lag behind if you are not able to submit it by then. In addition, the Exam I will cover the materials from the Programming Exercise I.





Objective
Design and implement a MIPS assembly program, which displays a 6×6 Gomoku game of one player. The final program is about 125 lines, many of which are for I/O. The purpose of this exercise is to get students ready for assembly programming and the second exercise, playing a Gomoku game against computer.


An example of an 8×8 Gomoku game, whose winning combination is five pieces in a row

Rules of a Free-Style Gomoku Game
It is a board game for two players who take turns in putting the pieces X and O on empty intersections of a board. Each player’ goal is to create an unbroken row of certain pieces horizontally, vertically, or diagonally. The game ends when either the goal is achieved or winning by either player is not possible such as the board being full. The winner of the game is the player achieving the goal first. Note that the online game on the right side is for demonstration only, and is not exact the game we want to implement.

Requirements
The 6×6, for-display-only Gomoku game includes the following requirements:

Programming Hints
The four essential components of software are (i) algorithms, (ii) data structures, (iii) programming languages, and (iv) code, where algorithms are the most critical one. In addition, using appropriate data structures could save a great deal of coding work, especially for assembly coding. The following hints are from the instructor and you do not necessarily have to use them:
Execution Examples
The following list shows some execution examples, where the italic, white text with a navy background color is entered by users:

Examples of Exercise I Execution
Start Showing a One-Player Gomoku Game.
 
     . . . . . .      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  5 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  y 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  p 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . . . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  y 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . . . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  r 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . X . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  y 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . X . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  5 
***** Duplicate move! *****

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . X . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  / 
***** Wrong move! *****

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . O . X . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  k 

     . . . . . X      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . O . . .      i j k l m n
     . O . X . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  n 
New game? (y/n)  y 

Start Showing a One-Player Gomoku Game.

     . . . . . .      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . . .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  g 

     . . . . . .      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . X .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  y 

     . . . . . .      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . X .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Enter the next move: (0..z)  0 

     O . . . . .      0 1 2 3 4 5
     . . . . . .      6 7 8 9 a b
     . . . . X .      c d e f g h
     . . . . . .      i j k l m n
     . . . . . .      o p q r s t
     . . . . . .      u v w x y z

Continue? (y/n)  n 
New game? (y/n)  n 
-- program is finished running --


Possible Instructions to Be Used
The following directives and instructions may be used in this exercise, but you are not limited to them. For instruction syntax, check
MIPS Instruction Reference.

No. Directive Description
1 .ascii "string" Allocating space for string
2 .asciiz "string" Allocating space for string, NULL terminated
3 .byte Allocating space for a byte
4 .data Beginning of data section
5 .globl name Making the following name be a global symbol
6 .half Allocating space for a half word (two bytes)
7 .space n Allocating n bytes of space
8 .text Beginning of text section
No. Instruction Operation Description
1 add rd, rs, rt rd = rs + rt Add;
rd: destination register, rs: first source register, and rt: second source register or immediate value.
Check MIPS Registers and Usage Convention.
2 addu rd, rs, rt rd = rs + rt (no overflow) Add unsigned
3 beq rs, rt, label if rs==rt then goto label Branch if equal to
4 bgt rs, rt, label if rs>rt then goto label Branch if greater than
5 blt rs, rt, label if rs<rt then goto label Branch if less than
6 j label jump to label Jump
7 jal label jump to label and save the return address in $31 or $ra Jump and link
8 jr rs jump to [rs]; [ ]: contents of Jump and link
9 la rd, mem rd = address( mem ) Load address
10 lb rd, mem rd = mem Load byte
11 lh rd, mem rd = mem Load half word
12 li rd, imm rd = imm Load immediate
13 lw rd, mem rd = mem Load word
14 mul rd, rs, rt rd = rs × rt Multiply
15 sb rs, mem mem = rs Store byte
16 sub rd, rs, rt rd = rs - rt Subtract
17 subu rd, rs, rt rd = rs - rt (no overflow) Subtract unsigned
18 sw rs, mem mem = rs Store word
19 syscall   System call; check System Services.

The following table lists some System Services provided by the MARS:

Service Code in $v0 Arguments Result
print_int 1 $a0 = integer to be printed  
print_float 2 $f12 = float to be printed  
print_double 3 $f12 = double to be printed  
print_string 4 $a0 = address of string in memory  
read_int 5   integer returned in $v0
read_float 6   float returned in $v0
read_double 7   double returned in $v0
read_string 8 $a0 = address of string input buffer
$a1 = length of string buffer (n)
 
malloc 9 $a0 = amount address in $v0
exit 10    
print character 11 $a0 = character to be printed  
read character 12   character returned in $v0

Evaluations
The following features will be considered when grading: