Aggiunto modulo governo, makefile, main.
This commit is contained in:
parent
b643ea57cf
commit
88f85bc8a5
7 changed files with 102 additions and 10 deletions
8
Makefile
Normal file
8
Makefile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
elea: elea.o governo.o accumulatore.o
|
||||||
|
|
||||||
|
clean: FORCE
|
||||||
|
@rm -f elea *.o tags
|
||||||
|
|
||||||
|
.PHONY: FORCE
|
|
@ -1,8 +1,8 @@
|
||||||
#include "elea_tipi.h"
|
#include "elea_tipi.h"
|
||||||
|
#include "governo.h"
|
||||||
|
|
||||||
statico carattere Accumulatore[100];
|
static carattere Accumulatore[100];
|
||||||
statico int REG_DA = 0;
|
static segno REG_SEGNO_A = 0;
|
||||||
statico segno REG_SEGNO_A = 0;
|
|
||||||
|
|
||||||
/* Da accumulatore a memoria */
|
/* Da accumulatore a memoria */
|
||||||
int AoM(carattere *mem, int lun)
|
int AoM(carattere *mem, int lun)
|
||||||
|
@ -10,7 +10,7 @@ int AoM(carattere *mem, int lun)
|
||||||
int i;
|
int i;
|
||||||
int pos;
|
int pos;
|
||||||
for (i = 0; i < lun; i++) {
|
for (i = 0; i < lun; i++) {
|
||||||
pos = (REG_DA + lun - (i + 1));
|
pos = (R.P + lun - (i + 1));
|
||||||
mem[i] = (Accumulatore[pos] & 0x7F);
|
mem[i] = (Accumulatore[pos] & 0x7F);
|
||||||
Accumulatore[pos] = 0x80;
|
Accumulatore[pos] = 0x80;
|
||||||
}
|
}
|
||||||
|
@ -25,17 +25,17 @@ int MA(const carattere *mem, int lun)
|
||||||
|
|
||||||
for (i = 0; i < lun; i++) {
|
for (i = 0; i < lun; i++) {
|
||||||
pos = (lun - (i + 1));
|
pos = (lun - (i + 1));
|
||||||
Accumulatore[REG_DA + i] = (mem[pos] & 0x7F);
|
Accumulatore[R.P + i] = (mem[pos] & 0x7F);
|
||||||
Accumulatore[REG_DA + i] &= ~0x80;
|
Accumulatore[R.P + i] &= ~0x80;
|
||||||
}
|
}
|
||||||
/* accende gA nell'ultimo carattere */
|
/* accende gA nell'ultimo carattere */
|
||||||
Accumulatore[REG_DA + lun - 1] |= 0x80;
|
Accumulatore[R.P + lun - 1] |= 0x80;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DA(const int disp)
|
int DA(const int disp)
|
||||||
{
|
{
|
||||||
if (disp < 0 || disp > 99)
|
if (disp < 0 || disp > 99)
|
||||||
return -1;
|
return -1;
|
||||||
REG_DA = disp;
|
R.P = disp;
|
||||||
return REG_DA;
|
return R.P;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "elea_tipi.h"
|
#include "elea_tipi.h"
|
||||||
|
#include "conf_caratteri.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
5
elea.c
Normal file
5
elea.c
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/* main */
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
23
elea_tipi.h
23
elea_tipi.h
|
@ -1,6 +1,14 @@
|
||||||
#define statico static
|
#ifndef ELEA_TIPI_INCLUSO
|
||||||
|
#define ELEA_TIPI_INCLUSO
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
typedef uint8_t carattere;
|
typedef uint8_t carattere;
|
||||||
typedef int8_t segno;
|
typedef int8_t segno;
|
||||||
|
typedef uint8_t booleano;
|
||||||
|
#define SI (1)
|
||||||
|
#define NO (0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +18,9 @@ typedef int8_t segno;
|
||||||
*/
|
*/
|
||||||
#define gA(x) ((x >> 7) & 0x01)
|
#define gA(x) ((x >> 7) & 0x01)
|
||||||
|
|
||||||
|
typedef carattere * indirizzo;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct __attribute__((packed)) istruzione_gen {
|
struct __attribute__((packed)) istruzione_gen {
|
||||||
carattere F; /* Tipo di funzione */
|
carattere F; /* Tipo di funzione */
|
||||||
|
@ -48,3 +59,13 @@ struct __attribute__((packed)) istruzione_n {
|
||||||
carattere n; /* Unita` nastro */
|
carattere n; /* Unita` nastro */
|
||||||
carattere X; /* Non utilizzato */
|
carattere X; /* Non utilizzato */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef union u_istruzione {
|
||||||
|
struct istruzione_gen gen;
|
||||||
|
struct istruzione_t t;
|
||||||
|
struct istruzione_c c;
|
||||||
|
struct istruzione_s s;
|
||||||
|
struct istruzione_n n;
|
||||||
|
} istruzione;
|
||||||
|
|
||||||
|
#endif /* ELEA_TIPI_INCLUSO */
|
||||||
|
|
32
governo.c
Normal file
32
governo.c
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include "elea_tipi.h"
|
||||||
|
#include "governo.h"
|
||||||
|
|
||||||
|
struct registri_sistema R;
|
||||||
|
|
||||||
|
static operazione *OP[64] = { };
|
||||||
|
|
||||||
|
static booleano CanaleInternoOcc = NO;
|
||||||
|
static booleano CanaleEsternoOcc = NO;
|
||||||
|
|
||||||
|
static uint32_t N_Cicli = 0;
|
||||||
|
|
||||||
|
booleano canale_interno_occupato(void)
|
||||||
|
{
|
||||||
|
return CanaleInternoOcc;
|
||||||
|
}
|
||||||
|
|
||||||
|
booleano canale_esterno_occupato(void)
|
||||||
|
{
|
||||||
|
return CanaleEsternoOcc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void esegui_primo_programma(void)
|
||||||
|
{
|
||||||
|
istruzione *i = R.I;
|
||||||
|
carattere F = *((carattere *)i);
|
||||||
|
if (OP[F] != (operazione *)0) {
|
||||||
|
(*OP[F])(i);
|
||||||
|
} else {
|
||||||
|
/* TODO: fault */
|
||||||
|
}
|
||||||
|
}
|
25
governo.h
Normal file
25
governo.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef GOVERNO_INCLUSO
|
||||||
|
#define GOVERNO_INCLUSO
|
||||||
|
|
||||||
|
#include "elea_tipi.h"
|
||||||
|
|
||||||
|
struct registri_sistema {
|
||||||
|
istruzione *I; /* Indirizzo istruzione primo programma */
|
||||||
|
istruzione *O; /* Indirizzo operando in memoria */
|
||||||
|
istruzione *M; /* Indirizzo istruzione secondo programma */
|
||||||
|
int P; /* Indice accumulatore */
|
||||||
|
indirizzo Q; /* Indirizzo di accum. in moltipl. */
|
||||||
|
indirizzo R; /* Indirizzo moltiplic. in To */
|
||||||
|
istruzione *H; /* Indirizzo istruzione terzo programma */
|
||||||
|
int N; /* Memorizzatore di W per telescrivente */
|
||||||
|
int S; /* Memorizzatore di R per telescrivente */
|
||||||
|
int Z; /* ? */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct registri_sistema R; /* Globale, definito in governo.c */
|
||||||
|
|
||||||
|
typedef int(*operazione)(istruzione *I);
|
||||||
|
|
||||||
|
void esegui_primo_programma(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue