1999-06-23 serial
「consinit() は kern/init_main.c の main() の中で出てくるのに、
それ以前に panic() とか printf() した場合どうやって文字が出てんの?」
と聞いたら、
「consinit() は二回以上呼ばれてもおっけーなように作って、
machdep.c の中とかで呼べばいい」と msaitoh 師匠がおっしゃられた。
あっそ。そゆこと。
というわけでシリアル周りをしらべる。
console に文字を出すのは、APBUS SYSTEM MONITOR ROM
routine を使うとすごく簡単(/usr/include/apbus/ap*.h 参照)である、
とうことは先日書いた通りなのだが、まぁ、NEWS5000 の serial (esccf) も、
文字出すだけならたぶんタイミングとって port にキャラクタ書くだけ
だろうから、sccfputc とか作っても簡単なはずだ。(きっと)
ということで後者でゆく。なんとなく I/O 叩きたい年頃だし。
いやしかし、apcall できる仕組をつくっとくのも重要なのだな。
なんてったってドライバ書かずに ether しゃべれるし、:-)
よく見ると、すげーおいしそうな ioctl
#define APIOC_SYS (APIOC_CIO+200) #define APSIOCGNLEDS (APIOC_SYS+0) #define APSIOCLEDON (APIOC_SYS+1) #define APSIOCLEDOFF (APIOC_SYS+2) #define APSIOCGLEDSTAT (APIOC_SYS+3) #define APSIOCSHUTDOWN (APIOC_SYS+4) #define APSIOCEXIT (APIOC_SYS+5) #define APEXIT_REBOOT 0x00000000 #define APEXIT_HALT 0x00000008 #define APEXIT_POWOFF 0x00000080
がたくさんあるし...
それにはメモリの最後 1M を残しとかなきゃいけないのか...?
EOF