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
63
64
65
#ifndef UDB_TUI_ULMAPP_HPP
#define UDB_TUI_ULMAPP_HPP

#include <cstdint>
#include <final/final.h>

#include "codeview.hpp"
#include "cpuview.hpp"
#include "memview.hpp"
#include "ioview.hpp"

class UlmApp final : public finalcut::FApplication
{
  public:
    UlmApp(const int &, char *[]);

    void openCpuView(finalcut::FWidget *);
    void openCodeView(finalcut::FWidget *);
    void openMemView(finalcut::FWidget *);
    void openIOView(finalcut::FWidget *);
    void step();
    void run();
    void terminate();
    void notify();

  private:
    void onTimer(finalcut::FTimerEvent *);

    finalcut::FMenuBar menuBar;
    finalcut::FStatusBar statusbar;

    // menu group 'ULM Debug'
    finalcut::FMenu ulm;
    finalcut::FMenuItem ulmAbout;
    finalcut::FMenuItem ulmLine1;
    finalcut::FMenuItem ulmPref;
    finalcut::FMenuItem ulmLine2;
    finalcut::FMenuItem ulmQuit;

    // menu group 'File'
    finalcut::FMenu file;
    finalcut::FMenuItem filePrg;

    // menu group 'View'
    finalcut::FMenu view;
    finalcut::FMenuItem viewCpu;
    finalcut::FMenuItem viewPrg;
    finalcut::FMenuItem viewMem;
    finalcut::FMenuItem viewIO;

    // menu group 'Debug'
    finalcut::FMenu debug;
    finalcut::FMenuItem debugRun;
    finalcut::FMenuItem debugStep;
    finalcut::FMenuItem debugTerminate;

    std::unique_ptr<CpuView> cpuView{ nullptr };
    std::unique_ptr<CodeView> codeView{ nullptr };
    std::unique_ptr<MemView> memView{ nullptr };
    std::unique_ptr<IOView> ioView{ nullptr };

    int timerId{0};
};

#endif // UDB_TUI_ULMAPP_HPP