From ddf2b6ac409afdd3fa8a2c15a53d66a89e55ad39 Mon Sep 17 00:00:00 2001 From: Daniele Lacamera Date: Sun, 22 Dec 2019 22:15:38 +0100 Subject: [PATCH] Import iniziale --- accumulatore.c | 41 +++++++++++++++++++++++++++++++++++++++++ elea_tipi.h | 13 +++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 accumulatore.c create mode 100644 elea_tipi.h diff --git a/accumulatore.c b/accumulatore.c new file mode 100644 index 0000000..099d542 --- /dev/null +++ b/accumulatore.c @@ -0,0 +1,41 @@ +#include "elea_tipi.h" + +statico carattere Accumulatore[100]; +statico int REG_DA = 0; +statico segno REG_SEGNO_A = 0; + +/* Da accumulatore a memoria */ +int AoM(carattere *mem, int lun) +{ + int i; + int pos; + for (i = 0; i < lun; i++) { + pos = (REG_DA + lun - (i + 1)); + mem[i] = (Accumulatore[pos] & 0x7F); + Accumulatore[pos] = 0x80; + } + return 0; +} + +/* Da memoria a accumulatore */ +int MA(const carattere *mem, int lun) +{ + int i; + int pos; + + for (i = 0; i < lun; i++) { + pos = (lun - (i + 1)); + Accumulatore[REG_DA + i] = (mem[pos] & 0x7F); + Accumulatore[REG_DA + i] &= ~0x80; + } + /* accende gA nell'ultimo carattere */ + Accumulatore[REG_DA + lun - 1] |= 0x80; +} + +int DA(const int disp) +{ + if (disp < 0 || disp > 99) + return -1; + REG_DA = disp; + return REG_DA; +} diff --git a/elea_tipi.h b/elea_tipi.h new file mode 100644 index 0000000..0477803 --- /dev/null +++ b/elea_tipi.h @@ -0,0 +1,13 @@ +#define statico static +typedef uint8_t carattere; +typedef int8_t segno; + + + +/* bit gA: valido solo se il carattere e` letto da Accumulatore. + * Nelle operazioni aritmetiche le cifre che lo seguono sono zeri + * Nei trasferisferimento a mem principale il bit e` ignorato i + */ +#define gA(x) ((x >> 7) & 0x01) + +