.bss Table DR 9 * 9 ; Table du jeu .data ; ; Les quelques textes qui seront affichés ; MsgTour1 DS "C'est au tour du joueur " MsgTour2 DS " de jouer\n" MsgGagne1 DS "Le joueur " MsgGagne2 DS " a gagné\n" MsgEgalite DS "Égalité\n" MsgDraw DS "| " MsgDrawJ1 DS "|\e[31mO\e[0m" MsgDrawJ2 DS "|\e[34mO\e[0m" MsgDrawWall DS "|\n" MsgsDraw DD MsgDraw, MsgDrawJ1, MsgDrawJ2, MsgDrawWall MsgDrawBegin DS "\e[2J 1 2 3 4 5 6 7\n" MsgDrawEnd DS "+-+-+-+-+-+-+-+\n" MsgEndl DS "\n" .text ; ; ; Registre globaux: R0 = 0, R1 = @Table, R2 = Joueur en cours, R3 = nombre de coups à jouer ; ; ; ; Initialisations ; InitP4: PUSH R4 PUSH R5 PUSH R6 MOV R1, Table MOV R2, 1 MOV R3, 7 * 7; ; On met tout à zéro. MOV R4, Table + (9 * 9); MOV R5, R1 BoucleInit1: MOV, [R5], R0 ADD R5, 1 JNE R5, R4, BoucleInit1 ; On met à 3 les 'murs' gauche et droite. MOV R5, R1 MOV R6, 3 BoucleInit2: MOV, [R5], R6 MOV, [R5 + 8], R6 ADD R5, 9 JNE R5, R4, BoucleInit2 ; On met à 3 les 'murs' haut et bas. MOV R4, Table + 9; MOV R5, R1 BoucleInit3: MOV, [R5], R6 MOV, [R5 + 8 * 9], R6 ADD R5, 1 JNE R5, R4, BoucleInit3 POP R6 POP R5 POP R4 RET ; ; Sert à lire un mot de la table du P4, coordonnées (R7, R8), et renvoie le résultat dans R9 ; LitMot: PUSH R4 MOV R4, 9 MUL R4, R8 ADD R4, Rd, R1 ADD R4, R7 MOV R9, [R4] POP R4 RET ; ; Sert à afficher la table ; AfficheP4: PUSH R4 PUSH R5 PUSH R6 PUSH R7 PUSH R8 PUSH R9 MOV, [0xffffff04], MsgDrawBegin MOV R8, 8 MOV R9, 9 ADD R4, R1, 10 MOV R5, 1 BoucleAffiche2: MOV R6, 1 BoucleAffiche1: MOV R7, [R4] MOV R7, MsgsDraw[R7] MOV, [0xffffff04], R7 ADD R4, 1 ADD R6, 1 JNE R6, R9, BoucleAffiche1 ADD R5, 1 ADD R4, 1 JNE R5, R8, BoucleAffiche2 MOV, [0xffffff04], MsgDrawEnd MOV, [0xffffff04], MsgTour1 MOV, [0xffffff06], R2 MOV, [0xffffff04], MsgTour2 POP R9 POP R8 POP R7 POP R6 POP R5 POP R4 RET ; ; Sert pour le debuggage lors du developpement de l'application. ; AfficheDebug: PUSH R4 PUSH R5 PUSH R6 PUSH R7 PUSH R9 MOV, [0xffffff04], MsgEndl MOV R9, 9 MOV R4, R1 MOV R5, R0 BoucleDebug2: MOV R6, R0 BoucleDebug1: MOV R7, [R4] MOV, [0xffffff06], R7 ADD R4, 1 ADD R6, 1 JNE R6, R9, BoucleDebug1 MOV, [0xffffff04], MsgEndl ADD R5, 1 JNE R5, R9, BoucleDebug2 POP R9 POP R7 POP R6 POP R5 POP R4 RET .start CALL InitP4 CALL AfficheP4 HALT