うさちゃんと一緒(9) HTTP Serverになってもらう、Rabbit4000

Joseph Halfmoon

Z80上位互換のCPUは数あれど、うさちゃん印のRabbitはEthernetインタフェースまで搭載した強力なものであります(コマケーことを言うと完全な上位互換ではないようです。)ともあれ8ビットのZ80の64kバイトのメモリ空間の制約をバンクスイッチ的なハードで大拡張しているところは他の拡張CPU同様かもしれません。

このところ「うさちゃん」Rabbit4000機は、ネットワーク通信実験時の対向機というお役目を果たすことが多く、通信プロトコルのサンプルプログラムをビルドして載せてRunという「いつもの手順」ばかり。時折電源入れられて、フラッシュにプログラムを書き込まれるのだけれど、手の届きにくい奥の方に鎮座して日の目も見ませぬ。

今回もまだその流れではあるのですが、次回以降、「自主的」なプログラム作成に入りたいものだ、と考えとります。ようやくうさちゃん独立か?久しぶりに手前の方に引き出したうさちゃんボードの御近影が上のアイキャッチ画像に。

今回使用のプログラム

今回使用のプログラムも Dynamic Cのサンプルプログラムです。TCPフォルダ内の以下のファイルです。

POST.C

いつものとおり、ネットワークアドレスなどの設定は追加する必要があります。こんな感じ。

NetworkSettings

HTTPサーバーとしての動作なので、所定のURLにアクセスされたときに返すHTMLファイルが必要です。現在のRabbit4000機にはファイルシステム等が接続されていないので、xmem(拡張メモリ空間)のFlashメモリにファイルを取り込んで配置しないとなりません。

その指定は以下のようにいたしました。普通のCにはない、Dynamic C特有の「プリプロセッサ命令」です。こんな感じ。
ximport

 

元はsampleフォルダ内のファイルを指していたのですが、後で改造することを考えて作業フォルダ側にコピーしました。ファイルパスは絶対でも相対でも良いみたいです。

上記のような独特の命令を調べるためには、以下のDynamic Cホームページからマニュアルファイルをダウンロードしないとなりません。

DC_UsersManual

#ximport文の形式は以下のようです。

#ximport "filename" symbol

この命令により、xmem flash領域にfilenameで指定されるファイルをファイル長を示すlong型変数とそれに続くバイナリとして配置してくれるようです。そして、コンパイラはその先頭アドレスを与えるsymbolをマクロとして定義すると。ただHTTPサーバ内でのファイルアクセスはいろいろマクロが用意されているようなので、コマケー事を自分で書く必要はないみたいです。

ビルドして実行

サンプルプログラムに僅かに記述を追加しただけなので、まったく問題なくビルドして実行できます。Dynamic Cから実行をかけて標準出力画面を開いたところが以下に。

DC_00

この状態で、外部PCのブラウザからうさちゃんのIPアドレスにhttpアクセスすると以下のようなページが現れます。上記の#ximport文で取り込んだサンプルhtmlファイルです。

samplePage

適当に入力フィールドに入力してみました。こんな感じ。

samplePage01

そして Register ボタン押してサブミット。すると以下のようなお返事が返ってきます。cgiといって裏でperlやPHPが動いているようなことはなく、Dynamic Cの関数でしかないですが。

samplePage02

とりあえずHTTPサーバー的な動作はしているみたい。これを出発点に機能をつ以下していったら、うさちゃんの「いろいろ」を外部のブラウザで制御できるようになるかな?大丈夫か?

うさちゃんと一緒(8) HTTP clientでNode-REDとお話、Rabbit4000 へ戻る

うさちゃんと一緒(10) Rabbit4000(RCM4010)のメモリマップ(仮)へ進む