|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // Goldfish 割り込みコントローラ
9: //
10:
11: #pragma once
12:
13: #include "interrupt.h"
14:
15: class GFPICDevice : public InterruptDevice
16: {
17: using inherited = InterruptDevice;
18: friend class Virt68kInterrupt;
19:
1.1.1.2 root 20: static const uint32 STATUS = 0x00U >> 2;
21: static const uint32 PENDING = 0x04U >> 2; // was NUMBER
22: static const uint32 CLEAR_ALL = 0x08U >> 2; // was DISABLE_ALL
23: static const uint32 DISABLE = 0x0cU >> 2;
24: static const uint32 ENABLE = 0x10U >> 2;
1.1 root 25:
26: public:
1.1.1.2 root 27: explicit GFPICDevice(uint id_);
1.1 root 28: ~GFPICDevice() override;
29:
30: bool Init() override;
31: void ResetHard(bool poweron) override;
32:
33: busdata InterruptAcknowledge(int lv) override;
34:
35: // IRQ の登録。子デバイスが呼ぶ。irq は 1-32。
36: void RegistIRQ(int irq, const char *name, Device *source);
37:
38: // Virt68kInterrupt の下請け
1.1.1.3 ! root 39: void MonitorScreenSummary(TextScreen& screen, int x, int y);
! 40: int MonitorScreenDetail(TextScreen& screen, int y, int lv);
1.1 root 41:
42: protected:
1.1.1.2 root 43: // BusIO インタフェース
44: static const uint32 NPORT = 0x1000 >> 2;
45: busdata ReadPort(uint32 offset);
46: busdata WritePort(uint32 offset, uint32 data);
47: busdata PeekPort(uint32 offset);
48:
49: private:
50: uint32 GetSTATUS() const;
51: uint32 GetPENDING() const;
52:
1.1 root 53: void ChangeInterrupt() override;
54:
55: InterruptDevice *interrupt {};
56: };
57:
1.1.1.3 ! root 58: inline GFPICDevice *GetGFPICDevice(int id_) {
1.1 root 59: return Object::GetObject<GFPICDevice>(OBJ_GFPIC(id_));
60: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.