hello world!
This commit is contained in:
parent
07fc47c2c8
commit
ca2bdec5d4
7 changed files with 184 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
#include "elea_tipi.h"
|
||||
#include "conf_caratteri.h"
|
||||
#include "caratteri.h"
|
||||
|
||||
|
||||
/*
|
||||
|
|
38
elea.c
38
elea.c
|
@ -1,5 +1,43 @@
|
|||
#include "elea_tipi.h"
|
||||
#include "caratteri.h"
|
||||
#include "telescrivente.h"
|
||||
#include "memoria.h"
|
||||
#include "codifica_istruzioni.h"
|
||||
|
||||
/* main */
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
istruzione istr;
|
||||
/* TEST: memoria / phi */
|
||||
|
||||
/* Riempie la memoria 1:11 con "HELLO.WORLD" */
|
||||
mem_scrivi_carattere(1,CAR_H);
|
||||
mem_scrivi_carattere(2,CAR_E);
|
||||
mem_scrivi_carattere(3,CAR_L);
|
||||
mem_scrivi_carattere(4,CAR_L);
|
||||
mem_scrivi_carattere(5,CAR_O);
|
||||
mem_scrivi_carattere(6,CAR_PUNTO);
|
||||
mem_scrivi_carattere(7,CAR_W);
|
||||
mem_scrivi_carattere(8,CAR_O);
|
||||
mem_scrivi_carattere(9,CAR_R);
|
||||
mem_scrivi_carattere(10,CAR_L);
|
||||
mem_scrivi_carattere(11,CAR_D);
|
||||
|
||||
/* Costruisce una istruzione MS artificiale con indirizzo 0001 e lunghezza 11
|
||||
* per stampare il testo sulla telescrivente
|
||||
*/
|
||||
istr.gen.F = OP_MS;
|
||||
|
||||
istr.gen.I[0] = CAR_UNO;
|
||||
istr.gen.I[1] = CAR_ZERO;
|
||||
istr.gen.I[2] = CAR_ZERO;
|
||||
istr.gen.I[3] = CAR_ZERO;
|
||||
|
||||
istr.gen.L[0] = CAR_UNO;
|
||||
istr.gen.L[1] = CAR_UNO;
|
||||
istr.gen.Tm = CAR_DIESIS;
|
||||
|
||||
/* Esegue l'istruzione phi */
|
||||
op_ms(&istr);
|
||||
return 0;
|
||||
}
|
||||
|
|
92
governo.h
92
governo.h
|
@ -2,6 +2,7 @@
|
|||
#define GOVERNO_INCLUSO
|
||||
|
||||
#include "elea_tipi.h"
|
||||
#include "caratteri.h"
|
||||
|
||||
struct registri_sistema {
|
||||
istruzione *I; /* Indirizzo istruzione primo programma */
|
||||
|
@ -20,6 +21,97 @@ extern struct registri_sistema R; /* Globale, definito in governo.c */
|
|||
|
||||
typedef int(operazione)(istruzione *I);
|
||||
|
||||
static int estrai_cifra(carattere c)
|
||||
{
|
||||
/* c e` compresa tra ZERO e NOVE */
|
||||
switch(c & 0x3F) {
|
||||
case CAR_ZERO:
|
||||
return 0;
|
||||
case CAR_UNO:
|
||||
return 1;
|
||||
case CAR_DUE:
|
||||
return 2;
|
||||
case CAR_TRE:
|
||||
return 3;
|
||||
case CAR_QUATTRO:
|
||||
return 4;
|
||||
case CAR_CINQUE:
|
||||
return 5;
|
||||
case CAR_SEI:
|
||||
return 6;
|
||||
case CAR_SETTE:
|
||||
return 7;
|
||||
case CAR_OTTO:
|
||||
return 8;
|
||||
case CAR_NOVE:
|
||||
return 9;
|
||||
default:
|
||||
return -1; /* Errore */
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t estrai_indirizzo(carattere *ind)
|
||||
{
|
||||
uint32_t val = 0;
|
||||
int r;
|
||||
int gruppo_c, gruppo_m;
|
||||
/* ind. e` un array di 4 caratteri, 0 e 1 sono unita` e decine */
|
||||
|
||||
/* unita` */
|
||||
r = estrai_cifra(ind[0]);
|
||||
if (r < 0)
|
||||
return (uint32_t)-1; /* Errore */
|
||||
val += r;
|
||||
|
||||
/* decine */
|
||||
r = estrai_cifra(ind[1]);
|
||||
if (r < 0)
|
||||
return (uint32_t)-1; /* Errore */
|
||||
val += 10 * r;
|
||||
|
||||
gruppo_c = (ind[2] & 0x30) >> 4;
|
||||
/* Il gruppo delle centinaia condiziona incrementi di 40K */
|
||||
switch (gruppo_c) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
val += 40000;
|
||||
break;
|
||||
case 3:
|
||||
val += 80000;
|
||||
break;
|
||||
case 2:
|
||||
val += 120000;
|
||||
}
|
||||
gruppo_m = (ind[3] & 0x30) >> 4;
|
||||
/* il gruppo delle migliaia condiziona incrementi di 10K */
|
||||
switch (gruppo_m) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
val += 10000;
|
||||
break;
|
||||
case 3:
|
||||
val += 20000;
|
||||
break;
|
||||
case 2:
|
||||
val += 30000;
|
||||
}
|
||||
|
||||
r = estrai_cifra(ind[2] & 0x0f);
|
||||
if (r < 0)
|
||||
return (uint32_t)-1; /* Errore */
|
||||
val += r * 100;
|
||||
|
||||
r = estrai_cifra(ind[3] & 0x0f);
|
||||
if (r < 0)
|
||||
return (uint32_t)-1; /* Errore */
|
||||
|
||||
val += r * 1000;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void esegui_primo_programma(void);
|
||||
|
||||
#endif
|
||||
|
|
14
memoria.c
14
memoria.c
|
@ -1,5 +1,9 @@
|
|||
#include "elea_tipi.h"
|
||||
|
||||
#define L_MEMORIA (160000)
|
||||
|
||||
static carattere M[L_MEMORIA];
|
||||
|
||||
int op_mem(istruzione *i)
|
||||
{
|
||||
return 0;
|
||||
|
@ -25,3 +29,13 @@ int op_meno_mm(istruzione *i)
|
|||
return 0;
|
||||
}
|
||||
|
||||
carattere mem_leggi_carattere(uint32_t ind)
|
||||
{
|
||||
return M[ind];
|
||||
|
||||
}
|
||||
|
||||
void mem_scrivi_carattere(uint32_t ind, carattere c)
|
||||
{
|
||||
M[ind] = c;
|
||||
}
|
||||
|
|
|
@ -6,4 +6,9 @@ int op_piu_mm(istruzione *i);
|
|||
int op_cmm(istruzione *i);
|
||||
int op_pum(istruzione *i);
|
||||
int op_meno_mm(istruzione *i);
|
||||
|
||||
/* Accesso diretto alla memoria */
|
||||
carattere mem_leggi_carattere(uint32_t ind);
|
||||
void mem_scrivi_carattere(uint32_t ind, carattere c);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,14 @@
|
|||
#include <stdio.h>
|
||||
#include "elea_tipi.h"
|
||||
#include "governo.h"
|
||||
#include "memoria.h"
|
||||
|
||||
static const carattere mappa_caratteri[64][3] = {
|
||||
"0", "1", "~", "2", "4", "+", "#", "3", "5", "6", "/", "7", "9", "-", "÷", "8",
|
||||
"Φ", "A", "δ", "B", "D", "=", "α", "C", "E", "F", "%", "G", "I", ",", "γ", "H",
|
||||
".", "S", "θ", "T", "V", "!", ")", "U", "W", "X", "?", "Y", "\'", "&", "⊗", "Z",
|
||||
"ε", "J", "*", "K", "M", "(", "β", "L", "N", "O", "$", "η", "R", "P", "π", "Q"
|
||||
};
|
||||
|
||||
int op_cm(istruzione *i)
|
||||
{
|
||||
|
@ -7,6 +17,30 @@ int op_cm(istruzione *i)
|
|||
|
||||
int op_ms(istruzione *i)
|
||||
{
|
||||
struct istruzione_gen *ms = &i->gen;
|
||||
uint32_t ind;
|
||||
int len;
|
||||
int j;
|
||||
int r;
|
||||
carattere c, *stampabile;
|
||||
|
||||
r = estrai_cifra(ms->L[0]);
|
||||
if (r < 0)
|
||||
return -1; /* Errore */
|
||||
len = r;
|
||||
r = estrai_cifra(ms->L[1]);
|
||||
if (r < 0)
|
||||
return -1; /* Errore */
|
||||
len += 10 * r;
|
||||
len = estrai_cifra(ms->L[0]) + 10 * estrai_cifra(ms->L[1]);
|
||||
ind = estrai_indirizzo(ms->I);
|
||||
if (ind == (uint32_t)(-1))
|
||||
return -1; /* Errore */
|
||||
for (j = 0; j < len; j++) {
|
||||
c = mem_leggi_carattere(ind + j);
|
||||
printf("%s", mappa_caratteri[c]);
|
||||
}
|
||||
printf("\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue