|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.9 root 7: //
8: // LCD (HD44780)
9: //
10:
1.1 root 11: #pragma once
12:
13: #include "device.h"
14:
1.1.1.14! root 15: class UIMessage;
! 16:
1.1 root 17: class LCDDevice : public Device
18: {
1.1.1.3 root 19: using inherited = Device;
1.1 root 20: public:
21: LCDDevice();
1.1.1.11 root 22: ~LCDDevice() override;
1.1 root 23:
1.1.1.14! root 24: bool Init() override;
1.1.1.9 root 25: void ResetHard(bool poweron) override;
26: void PowerOff() override;
1.1 root 27:
28: // リセット信号はない
29:
1.1.1.8 root 30: // R/~W を val にセットする。true=R、false=W
1.1 root 31: void SetRW(bool val);
32:
1.1.1.3 root 33: // RS を val にセットする。
1.1.1.8 root 34: // false=コマンド(W)/ステータス(R)レジスタ
35: // true=データレジスタ
36: void SetRS(bool val);
1.1 root 37:
1.1.1.3 root 38: // E を val にセットする。
1.1.1.8 root 39: void SetE(bool val);
1.1 root 40:
41: // E, RS, R/W 線の状態を取得する。
42: // PIO1 のポートC 読み込み用。
43: uint8 Get() const;
44:
1.1.1.3 root 45: // 読み込む。
1.1 root 46: uint8 Read();
47:
1.1.1.3 root 48: // 書き込む。
1.1 root 49: void Write(uint8 data);
50:
1.1.1.2 root 51: // PIO1 のポートA ピーク用
52: uint8 Peek() const;
53:
1.1.1.4 root 54: // バッファを取得 (内容表示用)
55: const uint8 *GetDDRAM() const { return ddram; }
56:
57: // フォントを取得
1.1.1.12 root 58: const uint8 *GetFont(uint ch) const;
1.1.1.4 root 59:
1.1 root 60: private:
1.1.1.7 root 61: DECLARE_MONITOR_CALLBACK(MonitorUpdate);
62:
1.1.1.8 root 63: // 現在のアドレスでデータレジスタにラッチ
64: void LatchData();
65: // アドレスカウンタ設定
1.1.1.12 root 66: void SetAddr(uint addr, bool is_cgram);
1.1.1.8 root 67: // アドレスカウンタを次へ進める
68: void NextAddr();
69:
70: // 信号線
1.1.1.5 root 71: bool en {}; // Enable
1.1.1.8 root 72: bool rw {}; // true=R false=W
73: bool rs {}; // レジスタセレクト true=Data false=Command/Status
1.1.1.5 root 74:
1.1.1.8 root 75: bool addr_inc {}; // アドレス・インクリメント true=inc false=dec
1.1.1.5 root 76: bool disp_char {}; // 文字表示をするか
1.1.1.4 root 77:
1.1.1.8 root 78: // データレジスタ
79: uint8 data_reg {};
80:
81: // アドレスカウンタ
1.1.1.12 root 82: uint addr_counter {};
1.1.1.8 root 83: bool addr_is_cgram {}; // addr が CGRAM アドレスなら true
84:
85: uint8 ddram[0x80] {};
86: uint8 cgram[0x40] {};
1.1.1.4 root 87:
1.1.1.13 root 88: Monitor *monitor {};
1.1.1.7 root 89:
1.1.1.14! root 90: UIMessage *uimessage {};
! 91:
1.1.1.4 root 92: static const uint8 CGROM[12 * 16 * 8];
1.1 root 93: };
94:
1.1.1.10 root 95: static inline LCDDevice *GetLCDDevice() {
96: return Object::GetObject<LCDDevice>(OBJ_LCD);
97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.