sh-ipl+g

ネタも無いので sh-ipl+g BIOS call の仕方。r0 に機能番号、r4-r7 に引数を設定して trapa 0x3f で起動する。処理結果は r0 に設定される。破壊されるレジスタは r0 のみ。まあ、trap なんであたりまえって言えばあたりまえだけど。
またソースを見るのも嫌なので、よく使うと思われる機能とその引数、戻り値を書き出しておいてみる。

  • 機能番号 0: バッファをシリアルへ出力
    • r4: 出力バッファアドレス
    • r5: 出力サイズ
    • 戻り値
      • 常に 0
  • 機能番号 1: シリアルから一文字入力
    • r4: 入力待ちタイムアウト時間(単位は不明)。
    • 戻り値
      • -1: タイムアウト発生
      • それ以外: 下位 8 ビットに入力キャラクタが設定されている
  • 機能番号 2: 二次記憶からのセクター読みだし
    • r4: デバイス指定(ATA コントローラの Device/Head レジスタに設定される)
    • r5: LBA 番号
    • r6: 読み出し先バッファアドレス
    • r7: 読み出しセクタ数
    • 戻り値
      • -1: 読み出しエラー発生
      • 0: 読み出し処理正常終了
  • 機能番号 6: キャッシュ制御。キャッシュ有効時にこの機能を呼び出すとキャッシュのライトバックを行うので、キャッシュのライトバックにも使用可能。
    • r4: キャッシュ制御。1 = キャッシュ無効、それ以外の場合、キャッシュ有効。
    • 戻り値
      • 常に 0
  • 機能番号 31: シリアルへ 1 文字出力
    • r4: 出力文字(下位 8 ビットのみ有効)
    • 戻り値
      • 常に 0
  • 機能番号 32: 文字列(NUL 終端)をシリアルに出力
    • r4: 出力文字列アドレス
    • 戻り値
      • 常に 0

sh-ipl+g にはこれについてのドキュメント無いんですよね…。