console.c void consputc(int c)

トップページ
jupiteroak.hatenablog.com


console.c
https://github.com/mit-pdos/xv6-public/blob/master/console.c#L165

void consputc(int c)
{
  if(panicked){
    cli();
    for(;;)
      ;
  }

  if(c == BACKSPACE){
    uartputc('\b'); uartputc(' '); uartputc('\b');
  } else
    uartputc(c);
  cgaputc(c);
}

consputc関数は、引数cで指定された文字データを使って、UART(シリアル通信)やVGA(Video Graphics Array)による文字描写を行います。

引数 int c
描写処理で使用される文字データです。


処理の内容

 if(panicked){
    cli();
    for(;;)
      ;
  }

panickedが真となる場合→panic関数内の処理でフラグがセットされていた場合は、cli関数を呼び出してハードウェア割り込みを無効化し、無限ループの処理に入ります。

if(c == BACKSPACE){
    uartputc('\b'); uartputc(' '); uartputc('\b');
  } else
    uartputc(c);

c == BACKSPACEが真となる場合→文字データcがBACKSPACE(#define BACKSPACE 0x100)となる場合は、uartputc関数を呼び出して、バックスペースの特殊文字、空文字、バックスペースの特殊文字の順に、UARTによる送信を行います。
c == BACKSPACEが偽となる場合→文字データcがBACKSPACE(#define BACKSPACE 0x100)ではない場合は、uartputc関数を呼び出して、文字データをUARTで送信します。

cgaputc(c)

cgaputc関数を呼び出して、引数cで指定された文字データをVGA(Video Graphics Array)で描写します。