accumulatore.c 856 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "elea_tipi.h"
  2. statico carattere Accumulatore[100];
  3. statico int REG_DA = 0;
  4. statico segno REG_SEGNO_A = 0;
  5. /* Da accumulatore a memoria */
  6. int AoM(carattere *mem, int lun)
  7. {
  8. int i;
  9. int pos;
  10. for (i = 0; i < lun; i++) {
  11. pos = (REG_DA + lun - (i + 1));
  12. mem[i] = (Accumulatore[pos] & 0x7F);
  13. Accumulatore[pos] = 0x80;
  14. }
  15. return 0;
  16. }
  17. /* Da memoria a accumulatore */
  18. int MA(const carattere *mem, int lun)
  19. {
  20. int i;
  21. int pos;
  22. for (i = 0; i < lun; i++) {
  23. pos = (lun - (i + 1));
  24. Accumulatore[REG_DA + i] = (mem[pos] & 0x7F);
  25. Accumulatore[REG_DA + i] &= ~0x80;
  26. }
  27. /* accende gA nell'ultimo carattere */
  28. Accumulatore[REG_DA + lun - 1] |= 0x80;
  29. }
  30. int DA(const int disp)
  31. {
  32. if (disp < 0 || disp > 99)
  33. return -1;
  34. REG_DA = disp;
  35. return REG_DA;
  36. }