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