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)で描写します。