|
|
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:
7: #pragma once
8:
9: #include "device.h"
10:
11: class LCDDevice : public Device
12: {
1.1.1.3 root 13: using inherited = Device;
1.1 root 14: public:
15: LCDDevice();
1.1.1.3 root 16: ~LCDDevice() override;
1.1 root 17:
1.1.1.3 root 18: bool PowerOff() override;
1.1.1.5 ! root 19: void ResetHard() override;
1.1.1.4 root 20: void MonitorUpdate(TextScreen&) override;
1.1 root 21:
22: // リセット信号はない
23:
1.1.1.3 root 24: // R/~W を val にセットする。%1=R、%0=W
1.1 root 25: void SetRW(bool val);
26:
1.1.1.3 root 27: // RS を val にセットする。
1.1 root 28: // %0=コマンド(W)/ステータス(R)レジスタ
29: // %1=データレジスタ
30: void SetRS(int);
31:
1.1.1.3 root 32: // E を val にセットする。
1.1 root 33: void SetE(bool);
34:
35: // E, RS, R/W 線の状態を取得する。
36: // PIO1 のポートC 読み込み用。
37: uint8 Get() const;
38:
1.1.1.3 root 39: // 読み込む。
1.1 root 40: uint8 Read();
41:
1.1.1.3 root 42: // 書き込む。
1.1 root 43: void Write(uint8 data);
44:
1.1.1.2 root 45: // PIO1 のポートA ピーク用
46: uint8 Peek() const;
47:
1.1.1.4 root 48: // バッファを取得 (内容表示用)
49: const uint8 *GetDDRAM() const { return ddram; }
50:
51: // フォントを取得
52: const uint8 *GetFont(int ch) const;
53:
54: // 更新カウンタ取得
55: uint32 GetCounter() const { return update; }
56:
1.1 root 57: private:
1.1.1.5 ! root 58: bool en {}; // Enable
! 59: bool rw {}; // R/~W
! 60: int rs {}; // レジスタセレクト
! 61:
! 62: bool addr_inc {}; // アドレス・インクリメント
! 63: bool disp_char {}; // 文字表示をするか
! 64: int addr {}; // アドレスカウンタ
1.1.1.4 root 65:
66: // CGRAM と DDRAM はコマンドでのアドレス指定と同じ位置にマップさせておく。
67: // そのため先頭の 64(0x40)バイトは使わず肥やしにする。
68: union {
69: struct {
70: uint8 unused[0x40];
71: uint8 cgram[0x40];
72: uint8 ddram[0x80];
73: };
74: uint8 ram[256] {};
75: };
76:
77: // RAM 更新カウンタ。
78: // CGRAM や DDRAM など表示内容が変化するごとに 1 ずつ上がるカウンタ。
79: // GUI 側にて前回描画時のカウンタと比較して異なっていれば前回から
80: // 何かしらの更新があったものとして再描画する。どこがどう変化したかの
81: // 情報は持っていない。
82: // XXX もうちょっといい方法
83: // XXX 電源オフどうするか
1.1.1.5 ! root 84: uint32 update {};
1.1.1.4 root 85:
86: static const uint8 CGROM[12 * 16 * 8];
1.1 root 87: };
88:
1.1.1.2 root 89: extern std::unique_ptr<LCDDevice> gLCD;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.