diff --git a/Makefile b/Makefile index 37e9e6d..ba5b2f9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC=gcc -elea: elea.o governo.o accumulatore.o +elea: elea.o governo.o accumulatore.o memoria.o ricerca.o algebra.o telescrivente.o clean: FORCE @rm -f elea *.o tags diff --git a/accumulatore.c b/accumulatore.c index ed56dfe..cafcbf9 100644 --- a/accumulatore.c +++ b/accumulatore.c @@ -39,3 +39,48 @@ int DA(const int disp) R.P = disp; return R.P; } + +int op_da(istruzione *i) +{ + return 0; +} + +int op_fam(istruzione *i) +{ + return 0; +} + +int op_aom(istruzione *i) +{ + return 0; +} +int op_piu_ma(istruzione *i) +{ + return 0; +} + +int op_cma(istruzione *i) +{ + return 0; +} + +int op_ma(istruzione *i) +{ + return 0; +} + +int op_am(istruzione *i) +{ + return 0; +} + +int op_piu_am(istruzione *i) +{ + return 0; +} + +int op_meno_ma(istruzione *i) +{ + return 0; +} + diff --git a/accumulatore.h b/accumulatore.h new file mode 100644 index 0000000..3e67c53 --- /dev/null +++ b/accumulatore.h @@ -0,0 +1,14 @@ +#ifndef ACCUMULATORE_INCLUSO +#define ACCUMULATORE_INCLUSO + +int op_da(istruzione *i); +int op_fam(istruzione *i); +int op_aom(istruzione *i); +int op_piu_ma(istruzione *i); +int op_cma(istruzione *i); +int op_ma(istruzione *i); +int op_am(istruzione *i); +int op_piu_am(istruzione *i); +int op_meno_ma(istruzione *i); + +#endif diff --git a/algebra.c b/algebra.c new file mode 100644 index 0000000..0d454c3 --- /dev/null +++ b/algebra.c @@ -0,0 +1,85 @@ +#include "elea_tipi.h" +int op_ct(istruzione *i) +{ + return 0; +} + +int op_meno_ct(istruzione *i) +{ + return 0; +} + +int op_piu_ct(istruzione *i) +{ + return 0; +} + +int op_cct(istruzione *i) +{ + return 0; +} + +int op_piu_x(istruzione *i) +{ + return 0; +} +int op_meno_x(istruzione *i) +{ + return 0; +} + +int op_ftm(istruzione *i) +{ + return 0; +} + +int op_tom(istruzione *i) +{ + return 0; +} + +int op_piu_ld(istruzione *i) +{ + return 0; +} + +int op_xld(istruzione *i) +{ + return 0; +} + +int op_piu_mt(istruzione *i) +{ + return 0; +} + +int op_cmt(istruzione *i) +{ + return 0; +} + +int op_mt(istruzione *i) +{ + return 0; +} + +int op_tm(istruzione *i) +{ + return 0; +} + +int op_xln(istruzione *i) +{ + return 0; +} + +int op_piu_tm(istruzione *i) +{ + return 0; +} + +int op_meno_mt(istruzione *i) +{ + return 0; +} + diff --git a/algebra.h b/algebra.h new file mode 100644 index 0000000..20cf6d9 --- /dev/null +++ b/algebra.h @@ -0,0 +1,22 @@ +#ifndef ALGEBRA_INCLUSO +#define ALGEBRA_INCLUSO + +int op_ct(istruzione *i); +int op_meno_ct(istruzione *i); +int op_piu_ct(istruzione *i); +int op_cct(istruzione *i); +int op_piu_x(istruzione *i); +int op_meno_x(istruzione *i); +int op_ftm(istruzione *i); +int op_tom(istruzione *i); +int op_piu_ld(istruzione *i); +int op_xld(istruzione *i); +int op_piu_mt(istruzione *i); +int op_cmt(istruzione *i); +int op_mt(istruzione *i); +int op_tm(istruzione *i); +int op_xln(istruzione *i); +int op_piu_tm(istruzione *i); +int op_meno_mt(istruzione *i); +#endif + diff --git a/conf_caratteri.h b/conf_caratteri.h index 5f89d28..62c55a3 100644 --- a/conf_caratteri.h +++ b/conf_caratteri.h @@ -16,7 +16,7 @@ #define CAR_PIU 5 /* '+' */ #define CAR_DIESIS 6 /* '#' */ #define CAR_BARRA 10 /* '/' */ -#define CAR_MENO 11 /* '-' */ +#define CAR_MENO 13 /* '-' */ #define CAR_DIVISO 14 /* '÷' */ /* e f = 0 1 */ #define CAR_PHI 16 /* 'φ' */ @@ -33,7 +33,7 @@ #define CAR_UGUALE 21 /* '=' */ #define CAR_ALFA 22 /* 'α' */ #define CAR_PERCENTO 26 /* '%' */ -#define CAR_VIRGOLA 27 /* ',' */ +#define CAR_VIRGOLA 29 /* ',' */ #define CAR_GAMMA 30 /* 'γ' */ /* e f = 1 1 */ #define CAR_EPSILON 48 /* 'ε' */ @@ -50,7 +50,7 @@ #define CAR_APERTA_PARENTESI 53 /* '(' */ #define CAR_BETA 54 /* 'β' */ #define CAR_DOLLARO 58 /* '$' */ -#define CAR_ETA 59 /* 'η' */ +#define CAR_ETA 61 /* 'η' */ #define CAR_PI 62 /* 'π' */ /* e f = 1 0 */ @@ -68,5 +68,5 @@ #define CAR_ESCLAMATIVO 37 /* '!' */ #define CAR_CHIUSA_PARENTESI 38 /* ')' */ #define CAR_INTERROGATIVO 42 /* '?' */ -#define CAR_E_COMMERCIALE 43 /* '&' */ +#define CAR_E_COMMERCIALE 45 /* '&' */ #define CAR_MOLTIPLICATO_PER 46 /* '⊗' */ diff --git a/governo.c b/governo.c index c51ef26..e8b2a49 100644 --- a/governo.c +++ b/governo.c @@ -1,9 +1,84 @@ #include "elea_tipi.h" #include "governo.h" +#include "memoria.h" +#include "ricerca.h" +#include "algebra.h" +#include "accumulatore.h" +#include "telescrivente.h" struct registri_sistema R; -static operazione *OP[64] = { }; +int op_salto(istruzione *i) +{ + return 0; +} + +static operazione *OP[64] = { + /* 0 = OP_SALTO */ op_salto, + /* 1 = OP_MEM */ op_mem, + /* 2 = NO OP! */ (operazione *)0, + /* 3 = OP_RIa */ op_ria, + /* 4 = OP_-CT */ op_meno_ct, + /* 5 = OP_+CT */ op_piu_ct, + /* 6 = OP_CCT */ op_cct, + /* 7 = OP_+MM */ op_piu_mm, + /* 8 = NO OP! */ (operazione *)0, + /* 9 = NO OP! */ (operazione *)0, + /* 10 = OP_CMM */ op_cmm, + /* 11 = OP_RIi */ op_rii, + /* 12 = OP_CT */ op_ct, + /* 13 = NO OP! */ (operazione *)0, + /* 14 = OP_PUM */ op_pum, + /* 15 = OP_-MM */ op_meno_mm, + /* 16 = OP_MS */ op_ms, + /* 17 = OP_DA */ op_da, + /* 18 = OP_FAM */ op_fam, + /* 19 = OP_AoM */ op_aom, + /* 20 = NO OP! */ (operazione *)0, + /* 21 = OP_+X */ op_piu_x, + /* 22 = NO OP! */ (operazione *)0, + /* 23 = OP_+MA */ op_piu_ma, + /* 24 = OP_CMA */ op_cma, + /* 25 = OP_MA */ op_ma, + /* 26 = OP_CM */ op_cm, + /* 27 = OP_AM */ op_am, + /* 28 = NO OP! */ (operazione *)0, + /* 29 = OP_-X */ op_meno_x, + /* 30 = OP_+AM */ op_piu_am, + /* 31 = OP_-MA */ op_meno_ma, + /* 32 = NO OP! */ (operazione *)0, + /* 33 = NO OP! */ (operazione *)0, + /* 34 = OP_FTM */ op_ftm, + /* 35 = OP_ToM */ op_tom, + /* 36 = OP_+LD */ op_piu_ld, + /* 37 = OP_XLD */ op_xld, + /* 38 = NO OP! */ (operazione *)0, + /* 39 = OP_+MT */ op_piu_mt, + /* 40 = OP_CMT */ op_cmt, + /* 41 = OP_MT */ op_mt, + /* 42 = NO OP! */ (operazione *)0, + /* 43 = OP_TM */ op_tm, + /* 44 = NO OP! */ (operazione *)0, + /* 45 = OP_XLN */ op_xln, + /* 46 = OP_+TM */ op_piu_tm, + /* 47 = OP_-MT */ op_meno_mt, + /* 48 = NO OP! */ (operazione *)0, + /* 49 = NO OP! */ (operazione *)0, + /* 50 = NO OP! */ (operazione *)0, + /* 51 = NO OP! */ (operazione *)0, + /* 52 = NO OP! */ (operazione *)0, + /* 53 = NO OP! */ (operazione *)0, + /* 54 = NO OP! */ (operazione *)0, + /* 55 = NO OP! */ (operazione *)0, + /* 56 = NO OP! */ (operazione *)0, + /* 57 = NO OP! */ (operazione *)0, + /* 59 = NO OP! */ (operazione *)0, + /* 60 = NO OP! */ (operazione *)0, + /* 61 = NO OP! */ (operazione *)0, + /* 62 = NO OP! */ (operazione *)0, + /* 63 = NO OP! */ (operazione *)0, + /* 64 = NO OP! */ (operazione *)0 +}; static booleano CanaleInternoOcc = NO; static booleano CanaleEsternoOcc = NO; @@ -23,6 +98,7 @@ booleano canale_esterno_occupato(void) void esegui_primo_programma(void) { istruzione *i = R.I; + R.I += sizeof(istruzione); carattere F = *((carattere *)i); if (OP[F] != (operazione *)0) { (*OP[F])(i); diff --git a/governo.h b/governo.h index 548a7be..c8fb1eb 100644 --- a/governo.h +++ b/governo.h @@ -18,7 +18,7 @@ struct registri_sistema { extern struct registri_sistema R; /* Globale, definito in governo.c */ -typedef int(*operazione)(istruzione *I); +typedef int(operazione)(istruzione *I); void esegui_primo_programma(void); diff --git a/memoria.c b/memoria.c new file mode 100644 index 0000000..1f2af91 --- /dev/null +++ b/memoria.c @@ -0,0 +1,27 @@ +#include "elea_tipi.h" + +int op_mem(istruzione *i) +{ + return 0; +} + +int op_piu_mm(istruzione *i) +{ + return 0; +} + +int op_cmm(istruzione *i) +{ + return 0; +} + +int op_pum(istruzione *i) +{ + return 0; +} + +int op_meno_mm(istruzione *i) +{ + return 0; +} + diff --git a/memoria.h b/memoria.h new file mode 100644 index 0000000..9c243af --- /dev/null +++ b/memoria.h @@ -0,0 +1,9 @@ +#ifndef MEMORIA_INCLUSO +#define MEMORIA_INCLUSO + +int op_mem(istruzione *i); +int op_piu_mm(istruzione *i); +int op_cmm(istruzione *i); +int op_pum(istruzione *i); +int op_meno_mm(istruzione *i); +#endif diff --git a/ricerca.c b/ricerca.c new file mode 100644 index 0000000..ed0b873 --- /dev/null +++ b/ricerca.c @@ -0,0 +1,10 @@ +#include "elea_tipi.h" +int op_ria(istruzione *i) +{ + return 0; +} + +int op_rii(istruzione *i) +{ + return 0; +} diff --git a/ricerca.h b/ricerca.h new file mode 100644 index 0000000..52c6c3f --- /dev/null +++ b/ricerca.h @@ -0,0 +1,7 @@ + +#ifndef RICERCA_INCLUSO +#define RICERCA_INCLUSO +int op_ria(istruzione *i); +int op_rii(istruzione *i); + +#endif diff --git a/telescrivente.c b/telescrivente.c new file mode 100644 index 0000000..d401072 --- /dev/null +++ b/telescrivente.c @@ -0,0 +1,13 @@ +#include "elea_tipi.h" + +int op_cm(istruzione *i) +{ + return 0; +} + +int op_ms(istruzione *i) +{ + return 0; +} + + diff --git a/telescrivente.h b/telescrivente.h new file mode 100644 index 0000000..4756883 --- /dev/null +++ b/telescrivente.h @@ -0,0 +1,8 @@ +#ifndef TELESCRIVENTE_INCLUSO +#define TELESCRIVENTE_INCLUSO + +int op_cm(istruzione *i); +int op_ms(istruzione *i); + +#endif +