1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef UDBTUI_CPUVIEW_HPP
#define UDBTUI_CPUVIEW_HPP

#include <final/final.h>

class CpuView final : public finalcut::FDialog
{
  public:
    CpuView(finalcut::FWidget *parent);
    void notify();

  private:
    class CuView : public finalcut::FScrollView
    {
      public:
        CuView(CpuView *cpu);
        void setGeometry(const finalcut::FPoint &p, const finalcut::FSize &s,
                         bool adj = true) override;
        void notify();

      private:
        finalcut::FLineEdit ip, ir, asmCode;
        finalcut::FLabel stage;
    };

    class AluView : public finalcut::FScrollView
    {
      public:
        AluView(CpuView *cpu);
        void setGeometry(const finalcut::FPoint &p, const finalcut::FSize &s,
                         bool adj = true) override;
        void notify();

      private:
        constexpr static int numRegs{ 256 };
        constexpr static int regWidth{ 2 + 16 }; // num hexdigits + 2
        constexpr static int regSep{ 3 + 3 };    // width of label + 3
        constexpr static int regRows{ 8 };
        constexpr static int regCols{ numRegs / regRows };
        std::unique_ptr<finalcut::FLineEdit> reg[numRegs];
        finalcut::FColor defaultForegroundColor, defaultBackgoundColor;

    };

    class StatusView : public finalcut::FScrollView
    {
      public:
        StatusView(CpuView *cpu);
        void setGeometry(const finalcut::FPoint &p, const finalcut::FSize &s,
                         bool adj = true) override;
        void notify();

      private:
        finalcut::FLineEdit zf, cf, of, sf;
    };

    CuView cuView;
    AluView aluView;
    StatusView statusView;
};

#endif // UDBTUI_CPUVIEW_HPP