GR-PEACHでxputc

GR-PEACHNetBSD載せらんねーかなという実験の手始めとしてブートローダのところを見ていると、どうもシリアルコンソールにデバッグ出力としてxputcというサブルーチンで行っているものがある。実態はおそらくsrc/sys/arch/arm/cortex/a9_mpsubr.SっぽいけどどうもRZ/A1Hでそのまま使えるかというとなんか微妙な気がする…ということでRZ/A1H向けのxputcを実装してみた。xputc以外はビルドを通すために用意しただけので空関数だったりと超適当。

なおRZ/A1Hのシリアル出力は最大16文字分のバッファがあるので、正しくシリアル出力ができているかを確認したい場合は16文字以上の文字列を出す必要がある。それと文字化けや欠けが発生してもわかるよう、それなりの意味のある文字列が望ましい。…ということで10秒くらい考えた結果こうなった。

	.section .start,"ax",%progbits

	.global	_C_LABEL(grpeach_start)
_C_LABEL(grpeach_start):
	PRINT("hey, favstar! ban stop me premiamu! -- @toshi_a")

loop:
	b loop

と、こんなておくれプログラムでとりあえずxputcでシリアル出力ができることは確認できた。

ただこれでできたnetbsd.binをGR-PEACHに読ませようとしたときに気がついたんだけど、今のところ3MBはあるnetbsd.binをGR-PEACHのメモリに配置する方法がない。というのも、

  • シリアル(xmodem等) → なぜか600KiBほど転送した段階で固まる
  • USB → microUSB端子に刺さるものを持っていない
  • Ethernet → u-bootで対応しているようだけどコネクタを付けていない、ついでにHUBのポートも足りない
  • microSD → まさかのu-boot未対応

という状況。ちなみにxputcの確認はどうせコードは手前の領域だろうということで、xmodem転送中にフリーズしたらリセットして何食わぬ顔で実行、という手段で良かったんだけども。ぐぬぬ