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