読者です 読者をやめる 読者になる 読者になる

むずかしいことはわかりません

いろいろ書いてるみたいな

キーコードから #PC-6601SR のキーボードの信号らしきものに変換する

もりやさんが

という、キーボードの信号のビット列についての資料を出していたので、キーコードからビット列に直すやつ、C#で適当に書いといた。

namespace IRCnv

{
  public partial class Form1 : Form
  {
  public Form1()
  {
    InitializeComponent();
  }

  // 000_0000_0000_0_000_0000_0000_0_0 24+1
  private const int BITBUF_SIZ = 25; // #define BITBUF_SIZ 25
  private const int SIGNAL_START = 0; // #define SIGNAL_START
  private const int CHR_START = 3; // #define CHR_START 3
  private const int LOWER_BIT_FLAG = 11; // #define LOWER_BIT_FLAG 11
  private const int NEGATIVE_CHR_OFFSET = 12; // #define NEGATIVE_CHR_OFFSET 12
  private const int STOP_BIT = BITBUF_SIZ - 1; // #define STOP_BIT (BITBUF_SIZ - 1)

  private String IRCode(char keychar)
  {
    int code = (int)keychar & 0xff;
    int[] bitbuf = new int[BITBUF_SIZ]; // 1バイトを8ビットに変換する

    // 下位→上位
    for (int i = 0; i < 8; ++i)
    {
      // キーコード8bitを下位から
      bitbuf[i + CHR_START] = (code & 1);
      bitbuf[i + CHR_START + NEGATIVE_CHR_OFFSET] = ~(code & 1) & 1;

      code >>= 1;
    }

      bitbuf[SIGNAL_START] = bitbuf[SIGNAL_START + 1] = bitbuf[SIGNAL_START + 2] = 0;
      bitbuf[SIGNAL_START + 0 + NEGATIVE_CHR_OFFSET] =
      bitbuf[SIGNAL_START + 1 + NEGATIVE_CHR_OFFSET] =
      bitbuf[SIGNAL_START + 2 + NEGATIVE_CHR_OFFSET] = 1;

      bitbuf[LOWER_BIT_FLAG] = bitbuf[CHR_START];
      bitbuf[LOWER_BIT_FLAG + NEGATIVE_CHR_OFFSET] = ~bitbuf[CHR_START] & 1;

      bitbuf[STOP_BIT] = 0;

      return String.Join("", bitbuf);
    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      textBox1.AppendText(e.KeyChar + ":" + IRCode(e.KeyChar) + Environment.NewLine);
    }
  }
}

 

textBox1をForm1に貼って、Readonlyにして動かすとtextbox上で打ったキーを変換したものをtextboxに追加していきます。

 a:0001000011011110111100100
b:0000100011001111011100110
c:0001100011011110011100100
d:0000010011001111101100110
e:0001010011011110101100100
f:0000110011001111001100110
g:0001110011011110001100100
こんなかんじ。