summaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorPixel <>2001-04-17 02:20:40 +0000
committerPixel <>2001-04-17 02:20:40 +0000
commit58dbd2ed918bb9e6f93aed076f8f3de92d41d2f9 (patch)
tree5a0333f391b042c2b25932fdc7fa2daed12140eb /samples
parent17d89e026ee39bd30f8604ab397708d9bceb2fbf (diff)
Grou
Diffstat (limited to 'samples')
-rw-r--r--samples/Makefile.am2
-rw-r--r--samples/Makefile.samples4
-rw-r--r--samples/instructions.txt26
-rw-r--r--samples/testtout.s33
4 files changed, 56 insertions, 9 deletions
diff --git a/samples/Makefile.am b/samples/Makefile.am
index 2e54d6a..2427d6a 100644
--- a/samples/Makefile.am
+++ b/samples/Makefile.am
@@ -1,3 +1,3 @@
-EXTRA_DIST = rechcara.s recherche.s sommeentiers.s Makefile.samples instructions.txt
+EXTRA_DIST = rechcara.s recherche.s sommeentiers.s testtout.s Makefile.samples instructions.txt
TESTS = make -f Makefile.samples
diff --git a/samples/Makefile.samples b/samples/Makefile.samples
index 4b1f8f3..35913b2 100644
--- a/samples/Makefile.samples
+++ b/samples/Makefile.samples
@@ -9,7 +9,7 @@
../src/linker tmp.o $@
rm tmp.o
-all: recherche rechcara sommeentiers
+all: recherche rechcara sommeentiers testtout
clean:
- rm -f recherche rechcara sommeenters *.o
+ rm -f recherche rechcara sommeenters testtout *.o
diff --git a/samples/instructions.txt b/samples/instructions.txt
index 9b70685..6034e0d 100644
--- a/samples/instructions.txt
+++ b/samples/instructions.txt
@@ -33,6 +33,10 @@ I:ADD c1=.Pr,c2=.Pr,c3=.Pr;op=0x0;e=0x0
I:ADD c1=.Pr,c2=.Pr,.I=.C;op=0x0;e=0x1
I:ADU c1=.Pr,c2=.Pr,c3=.Pr;op=0x0;e=0x2
I:ADU c1=.Pr,c2=.Pr,.I=.C;op=0x0;e=0x3
+I:ADD c2=.Pr,c3=.Pr;op=0x0;e=0x0;c1=c2
+I:ADD c2=.Pr,.I=.C;op=0x0;e=0x1;c1=c2
+I:ADU c2=.Pr,c3=.Pr;op=0x0;c1=c2;e=0x2
+I:ADU c2=.Pr,.I=.C;op=0x0;c1=c2;e=0x3
p:ADS=ADD
@@ -40,6 +44,10 @@ I:SUB c1=.Pr,c2=.Pr,c3=.Pr;op=0x1;e=0x0
I:SUB c1=.Pr,c2=.Pr,.I=.C;op=0x1;e=0x1
I:SBU c1=.Pr,c2=.Pr,c3=.Pr;op=0x1;e=0x2
I:SBU c1=.Pr,c2=.Pr,.I=.C;op=0x1;e=0x3
+I:SUB c2=.Pr,c3=.Pr;op=0x1;e=0x0;c1=c2
+I:SUB c2=.Pr,.I=.C;op=0x1;e=0x1;c1=c2
+I:SBU c2=.Pr,c3=.Pr;op=0x1;e=0x2;c1=c2
+I:SBU c2=.Pr,.I=.C;op=0x1;e=0x3;c1=c2
p:SBS=SUB
@@ -64,11 +72,11 @@ I:SHR c1=.Pr,c2=.Pr,.I=.C;op=0x7;e=0x1
# Transferts
-I:MOV c1=.Pr,rm=.Pm;op=8;e=0;c2=.Fa;c3=regop
-I:MOV c1=.Pr,c3=.Pr;op=8;e=0;c2=0
-I:MOV c1=.Pr,.I=.C;op=8;e=1
-I:MOV rm=.Pm,c2=.Pr;op=8;e=2;c1=.Fa;c3=regop
-I:MOV rm=.Pm,.I=.C;op=8;e=3;c1=.Fa;c3=regop
+I:MOV c2=.Pr,rm=.Pm;op=8;e=2;c1=.Fa;c3=regop
+I:MOV c2=.Pr,c3=.Pr;op=8;e=2
+I:MOV c3=.Pr,.I=.C;op=8;e=1
+I:MOV rm=.Pm,c2=.Pr;op=8;e=0;c1=.Fa;c3=regop
+I:MOV rm=.Pm,.I=.C;op=8;e=1;c1=.Fa;c3=regop
p:MV=MOV
@@ -111,10 +119,16 @@ I:JNZ .I=.O;op=0xa;e=0x34
I:JNS .I=.O;op=0xa;e=0x38
I:JNP .I=.O;op=0xa;e=0x3c
-I:JMP .I=.O;op=0x0c;e=0x2
+I:JMP .I=.O;op=0xa;e=0x0
I:HALT;op=0x7f
I:RESET;op=0x7f;e=1
I:RET;op=0xc
I:RET c1=.C;op=0xc
+
+I:CALL .I=.O;op=0xc;e=3
+
+I:PUSH c1=.Pr;op=0xe
+I:PUSH .I=.C;op=0xe;e=1
+I:POP c1=.Pr;op=0xf
diff --git a/samples/testtout.s b/samples/testtout.s
new file mode 100644
index 0000000..0c1350e
--- /dev/null
+++ b/samples/testtout.s
@@ -0,0 +1,33 @@
+.data
+PROG1 DS "sommeentiers"
+PROG2 DS "rechcara"
+PROG3 DS "recherche"
+
+MSG1 DS "Exécution du programme numéro "
+MSG2 DS " appelé "
+MSG3 DS "...\n"
+MSGTERM DS "Le programme s'est terminé!\n"
+MSGFIN DS "Tout est terminé, bye!\n"
+
+PROGS DD PROG1, PROG2, PROG3, 0
+
+.text
+.start
+ MOV R1, R0 ; R1 sera notre compteur de programme
+BOUCLE: MOV R2, PROGS[R0] ; On lit l'adresse du nom du prochain programme
+ JE R2, R0, FIN ; Si c'est l'adresse nulle, on sort
+ MOV, [0xffffff04], MSG1 ; On affiche le premier morceau de la chaîne
+ MOV, [0xffffff06], R1 ; On affiche le numéro du programme
+ MOV, [0xffffff04], MSG2 ; On affiche le deuxième morceau de la chaîne
+ MOV, [0xffffff04], R2 ; On affiche le nom du programe
+ MOV, [0xffffff04], MSG3 ; On affiche la dernière chaîne
+
+ PUSH R1 ; On sauvegarde R1 avant
+ MOV, [0xffffff0a], R1 ; On appelle le miniOS pour lui demander
+ ; de charger un autre programme.
+ POP R1 ; Et on récupère R1
+
+ MOV, [0xffffff04], MSGTERM ; On affiche la chaîne pour dire que l'on vient de sortir
+ JMP BOUCLE ; et on boucle
+FIN: MOV, [0xffffff04], MSGFIN ; On affiche en dernier le message de fin.
+ HALT