diff options
-rw-r--r-- | lib/simulator.c | 6 | ||||
-rw-r--r-- | po/ProjetArchi.pot | 2 | ||||
-rw-r--r-- | samples/Makefile.samples | 2 | ||||
-rw-r--r-- | samples/p4.s | 123 |
4 files changed, 128 insertions, 5 deletions
diff --git a/lib/simulator.c b/lib/simulator.c index f2749e0..c7c709c 100644 --- a/lib/simulator.c +++ b/lib/simulator.c @@ -228,14 +228,14 @@ void DecodeExec(Uint32 instruction) /* Pas de MOV conditionnel */ if (ValeurBit(Extension(instruction), 1) == 0) { /* Mov arg1 arg2 */ if (ValeurBit(Extension(instruction), 0) == 0) { /* arg2 = reg */ - if (champ(Champ1(instruction), 2) == 0) { /* r/m de arg1 = 0 */ + if (champ(Champ1(instruction), 4) == 0) { /* r/m de arg1 = 0 */ EcrireRegistre(Champ3(instruction), LireRegistre(Champ2(instruction))); } else { ST(Adresse (Champ1(instruction), instruction), LireRegistre(Champ2(instruction))); } } else { /* arg2 = imm32 */ - if (champ(Champ1(instruction), 2) == 0) { /* r/m de arg1 = 0 */ + if (champ(Champ1(instruction), 4) == 0) { /* r/m de arg1 = 0 */ EcrireRegistre(Champ3(instruction), LireInstruction()); IncrementeCompteurOrdinal(); } else { @@ -246,7 +246,7 @@ void DecodeExec(Uint32 instruction) } } else { /* mov arg2, arg1 */ if (ValeurBit(Extension(instruction), 0) == 0) { /* arg2 = reg */ - if (champ(Champ1(instruction), 2) == 0) { /* r/m de arg1 = 0 */ + if (champ(Champ1(instruction), 4) == 0) { /* r/m de arg1 = 0 */ EcrireRegistre(Champ2(instruction), LireRegistre(Champ3(instruction))); } else { EcrireRegistre(Champ2 diff --git a/po/ProjetArchi.pot b/po/ProjetArchi.pot index a27e071..a032bed 100644 --- a/po/ProjetArchi.pot +++ b/po/ProjetArchi.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2001-04-23 20:56+0200\n" +"POT-Creation-Date: 2001-04-23 23:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/samples/Makefile.samples b/samples/Makefile.samples index 978d9d0..6b1eac0 100644 --- a/samples/Makefile.samples +++ b/samples/Makefile.samples @@ -10,7 +10,7 @@ chmod 755 $@ rm tmp.o -all: helloworld hello recherche rechcara sommeentiers testtout boucle +all: helloworld hello recherche rechcara sommeentiers testtout boucle p4 helloworld: fichier1.s fichier2.s ../src/compilo fichier1.s fichier1.o diff --git a/samples/p4.s b/samples/p4.s new file mode 100644 index 0000000..28b79fd --- /dev/null +++ b/samples/p4.s @@ -0,0 +1,123 @@ +.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" +MsgDraw DS "| " +MsgDrawJ1 DS "|\e[31m;O\e[0m;" +MsgDrawJ2 DS "|\e[34m;O\e[0m;" +MsgDrawWall DS "|\n" +MsgsDraw DD MsgDraw, MsgDrawJ1, MsgDrawJ2, MsgDraw +MsgDrawBegin DS "\e[2J 1 2 3 4 5 6 7\n" +MsgDrawEnd 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, 1 + 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 R5, Table + 9; + ADD R4, R5, 7 * 9; + +BoucleAffiche: MOV R9, [R5] + MOV R6, Table[R9] + MOV, [0xffffff04], R6 + ADD R5, 1 + JNE R5, R4, BoucleAffiche + + MOV, [0xffffff04], MsgDrawEnd + + POP R9 + POP R8 + POP R7 + POP R6 + POP R5 + POP R4 + RET + +.start + CALL InitP4 + CALL AfficheP4 + HALT |