忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/25 (Mon) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2008/09/01 (Mon) / 編集
FIFOは言わずもがなのFirst In First Outね

ようはキーボードから受け取ったデータを実際に使用するまでいったん保存しておかないといけないわけで、そのためにFIFOでバッファを作っとく(LIFOじゃない理由も言わずもがな)
キーボードからの割り込みはPICについて調べてもらうとして、以下はキーボードからの割り込みによって呼び出される関数(inthandler21)の説明

  1. PICに返事をする
  2. キーボードはIRQ1なので0x61という返事を送ればいい
  3. キーボードからのデータを取得
  4. 0x0060というところにおいてある値のbit0-6がキーコードらしい、詳細は[OS-Wiki](AT)keyboard
  5. キーボードからのデータをバッファに保存
    1. 実装はどう考えてもソースを見た方がわかりやすい

      //bootpack.h
      #define PIC0_OCW2 0x0020

      struct FIFO8 {
      unsigned char *buf;
      int p, q, size, free, flags;//書き込み位置,読み込み位置,サイズ,バッファの空き,フラグ
      };
      登録方法は省略して書き込むとこね
      //int.c
      #define PORT_KEYDAT 0x0060
      struct FIFO8 keyfifo;

      void inthandler21(int *esp) {
      unsigned char data;
      /* IRQ-01受付完了をPICに通知 */
      io_out8(PIC0_OCW2, 0x61);
      data = io_in8(PORT_KEYDAT);
      fifo8_put(&keyfifo, data);
      return;
      }
      なるほどね、おれが以前作ったのよりずっといいなこのFIFO(当たり前かw)、今後参考にしよう。


      拍手[0回]

      PR
/ 2008/08/30 (Sat) / 編集
今日の分も終わったのでニュースでも書いてみる

[痛いニュース]「裁判員の日当、3万円に」 国会議員団が提言
さんまんえん!?スゲー!!
ちなみに現行は1万円、これはこれでいいと思うんだがな、、、でもまぁ貰えるなら貰うさ! [沖縄タイムス]裁判員選任 格差は2・8倍によると那覇市民が選ばれる確率は「539人に1人」で、もし裁判員候補者名簿に記入されると12月上旬くらいに調査書がくるらしい、まぁそのあと事件がおこると事件の2ヶ月くらい前に通知が届く(一事件50~100人)、でもって裁判当日に裁判所で面接&抽選をして6人に絞り込む
大分絞り込まれるな、、、(詳細は裁判員フォーラムに参加してみるをみてねw)

拍手[0回]

/ 2008/08/30 (Sat) / 編集

GDT(Global (segment) Descriptor Table):大域セグメント記述子表

セグメントの情報(下の三つ)を書いたテーブル
  1. セグメントの開始位置(base)
  2. セグメントの属性(access)
  3. セグメントの大きさ(limit)
メモリ上に書いとく、でもってGDTRという特殊なレジスタにテーブルの先頭番地と設定したセグメント数を書けばおけ(LGTRという命令でできる)(SEGMENT_DESCRIPTER、set_segmdesc()、load_gdtr())

ここでめんどくさいこと発生、構造体をみるとlimitが20bitしか用意されてない、これだとセグメントの大きさが最大1MBしか指定できない、、、
というわけで「Gビット」というフラグが使われる、これが1だとlimitをbyte単位ではなくpage単位(4KB)だと判断してくれる
アクセス権(全部で16bitある)の上位4bitは拡張アクセス権、「GD00」という構造になっている、ちなみにDはセグメントのモードで1だと32bit、0だと16bit
アクセス権の9~12bitは0、アクセス権の下位8bitは以下、
  • 0x00:未使用のDescripter Table
  • 0x92:システム専用、読み書き可能だが実行不可
  • 0x9a:システム専用、実行と読み込みが可能、書き込み不可
  • 0xf2:アプリケーション用、読み書き可能だが実行不可
  • 0x9a:アプリケーション用、実行と読み込みが可能、書き込み不可

拍手[0回]

忍者ブログ [PR]