.. _z3: ===================== Zadanie 3: Kalkulator ===================== Data ogłoszenia: 14.11.2018 Termin oddania: 09.01.2019 Napisać prosty kalkulator operujący na odwrotnej notacji polskiej. Kalkulator ma operować na 512-elementowym stosie 32-bitowych liczb ze znakiem. Po resecie, stos ma być pusty. Kalkulator w każdej chwili ma wyświetlać na wyświetlaczu liczbę na górze stosu. Jeśli ``btn0`` jest naciśnięty, ma wyświetlać górne 16 bitów tej liczby, w przeciwnym wypadku ma wyświetlać niskie 16 bitów. Jeśli stos jest pusty, wyświetlacz ma wyświetlać ``----``. Naciśnięcie ``btn1`` ma wrzucić na stos 8-bitową liczbę wybraną przez ``sw``, rozszerzoną z lewej zerami. Naciśnięcie ``btn2`` ma zdjąć ze stosu liczbę, przesunąć ją w lewo o 8 bitów, zapisać 8 bitów wybranych przez ``sw`` w niskich bitach, po czym wrzucić z powrotem na stos (pozwalając na wpisanie dłuższych liczb niż 8-bitowe). Naciśniecie ``btn3`` ma wykonać operację wybraną przez ``sw[2:0]``: - ``000``: zdejmij dwie liczby ze stosu, dodaj je, wrzuć na stos - ``001``: jak wyżej, odejmij dwie liczby (później wpisaną od wcześniej wpisanej) - ``010``: jak wyżej, pomnóż dwie liczby - ``011``: jak wyżej, podziel dwie liczby - ``100``: jak wyżej, policz resztę z dzielenia dwóch liczb - ``101``: zdejmij liczbę ze stosu - ``110``: skopiuj liczbę na górze stosu (odłóż ją jeszcze raz) - ``111``: zamień miejscami dwa górne miejsca na stosie Naciśnięcie ``btn3`` i ``btn0`` jednocześnie ma zresetować cały układ do stanu początkowego. Na ``led[6:0]`` należy wyświetlać, ile liczb jest obecnie na stosie (modulo 128). W razie wystąpienia jakiegokolwiek błędu, należy zignorować żądaną operację i ustawić flagę błędu. Flagę błędu należy czyścić po wykonaniu jakiejkolwiek udanej operacji. Flagę błędu należy wystawić na ``led[7]``. Błędy, które powinny być wykrywane, to: - przepełnienie stosu - zdjęcie liczby z pustego stosu - dzielenie przez 0 Operacje dodawania, odejmowania oraz mnożenia powinny być wykonywane modulo 2**32.