HSP : Hot Soup Processor ver3.6 / onion software 1997-2020(c)

# HSP3 for Linux/Raspberry Pi

## はじめに

HSP3 for Linux/Raspberry Piは、LinuxのGUI環境(X Window System)及びRaspberry Pi(Raspbian)で動作するHot Soup Processor(HSP)の開発環境です。
安価で幅広く環境が整備されているLinux上で、HSP3の開発環境を含むサポートを目指して開発が進められています。 Raspberry Piは、その中でも非常にコンパクトで安価なデバイスとして、IoTやプログラミング教育の分野でも注目されています。
いままでも、Windowsだけでなく、HSP3Dishというランタイムを通してAndroid,iOS,WebGL(html5)などの実行環境を整備してきましたが、 新たに、Linux及びRaspbian(Raspberry Pi上のOS)環境でも利用できるよう、整備を行なっていきます。
最初のバージョンとして、簡易スクリプトエディタとHSP3Dish/HGIMG4実行環境を含むプレビュー版を公開しています。 Windows版HSP3とともにサポートを広げていく予定ですので、どうぞご期待ください。
最新版は、githubにてソースコードとともに公開されています。
Raspberry Piをご使用の方は、JBOYSOFT様の「初心者入門 HSPプログラミング ラズベリーパイ版」のページにて導入が説明されています。

| 初心者入門 HSPプログラミング ラズベリーパイ版 by JBOYSOFT

## Linuxインストール

LinuxのGUI環境(X Window System)で動作します。一部の機能は、OpenGL及びSDLライブラリを使用して動作します。 ネットワークに接続できる場合は、gitコマンドで直接リポジトリを取得してください。

    	git clone http://github.com/onitama/OpenHSP

アーカイブがある場合は、内容を任意のディレクトリに展開して、ソースをコンパイルしてください。コンパイルには、gcc及びmakeを実行できる環境が必要になります。 コンパイルの際には、以下のライブラリが必要になりますので、あらかじめ確認を行なって下さい。

    	OpenGLES2.0以降 / EGL
    	SDL1.2
    	gtk+-2

Debian(Ubuntu)の場合は、パッケージマネージャから以下のようにライブラリをインストールできます。

    	sudo apt-get update
    	sudo apt-get install libgtk2.0-dev
    	sudo apt-get install libglew-dev
    	sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
    	sudo apt-get install libgles2-mesa-dev libegl1-mesa-dev

リポジトリにはソースのみが含まれていますので、makeによってコンパイルする必要があります。 (Linuxのバージョンやディストリビューションによって正しくコンパイルされない場合は、修正が必要になります。)

    	cd OpenHSP
    	make

必要なツールのコンパイルが行なわれ、HSP3が使用できる状態になります。

## Raspberry Piインストール

Raspberry Pi, Raspberry Pi2, Raspberry Pi3, Raspberry Pi4, Raspberry Pi zeo上で動作します。
Raspbian OS上で動作します。(推奨バージョンは、September 2017 Kernel version4.9以降です)
あらかじめ、Raspbianが動作してキーボード、マウスが接続されている状態でご使用ください。
hsp3dish及びhsp3gp(HGIMG4)、hsed(スクリプトエディタ)は、GUI環境でのみ動作します。
githubから最新版を任意のディレクトリに展開して、ソースをコンパイルしてください。コンパイルには、gcc及びmakeを実行できる環境が必要になります。

    	git clone http://github.com/onitama/OpenHSP
    	cd OpenHSP

コンパイルの際には、追加のライブラリが必要になります。ネットワークに接続されている状態で以下のコマンドを実行することでセットアップが実行されます。

    	./pisetup.sh

アーカイブにはソースのみが含まれていますので、makeによってコンパイルする必要があります。 (Raspbianのバージョンやディストリビューションによって正しくコンパイルされない場合は、修正が必要になります。)

    	make -f makefile.raspbian

アーカイブの内容が展開されたディレクトリでmakeコマンドを実行してください。 必要なツールのコンパイルが行なわれ、HSP3が使用できる状態になります。

    ※ Raspberry Pi4の場合は、Linuxと同様の方法でmakeによるインストールを行ってください
    ※ Raspberry Pi4ではフルスクリーンによる実行はサポートされません

## 使用方法

インストールを行なうと、以下のコマンドが生成されます。

    	hsed		スクリプトエディタ(簡易版)
    	hspcmp		HSP3コードコンパイラ
    	hsp3cl		HSP3コマンドラインランタイム
    	hsp3dish	HSP3Dishランタイム
    	hsp3gp		HGIMG4ランタイム

スクリプトエディタ(簡易版)は、HSP3のスクリプトを記述して、実行することのできるGUIアプリケーションです。 基本的なスクリプトの編集、及びロード・セーブ機能を持っています。 以下のコマンドで起動することができます。

    	./hsed

[F5]キー、または「HSP」メニューから「Run」を選択することで編集しているスクリプトを実行できます。 現在のバージョンでは、標準ランタイムとしてhsp3dishが使用されます。 HSP3Dishに対応するサンプルコードがsampleフォルダに含まれていますので、お試しください。 スクリプトの文字コードはUTF-8として扱われます。Windowsが使用する文字コード(SJIS)とは異なりますので注意してください。
コマンドラインからスクリプトの実行を行なう場合は、hspcmpによりHSPオブジェクトファイルを作成する必要があります。

    	./hspcmp -d -i -u test.hsp

上の例では、「test.hsp」ファイルからオブジェクトファイル「test.ax」を生成します。 生成されたオブジェクトファイルを、ランタイムに渡して実行を行ないます。

    	./hsp3cl test.ax

上の例では、「test.ax」をHSP3コマンドラインランタイムで実行します。 同様に、「hsp3dish」「hsp3gp」などのランタイムに合わせたスクリプトを実行させることができます。 (「hsp3dish」「hsp3gp」の実行は、GUI環境が必要になります。)
Raspberry Pi版では、フルスクリーンで実行を行ないます。 実行の中断は、[ctrl]+[C]か[esc]キーを押してください。 キーボードだ正しく認識されていない場合など、中断ができなくなることがありますので注意してください。 GUIエディタだけでなく、コマンドラインから「./hsp3dish ****.ax」の形で実行を行なうことも可能です。

| HSP3Dishのページへ
| HSP3Dishオンラインマニュアル

## exec、devprm命令について

Linux版、Raspberry Pi版ともにexec命令により、シェルのコマンドを呼び出すことができます。 また、devprm命令によりファイルシステム上のデバイスに文字列を出力することが可能です。

    	devprm "/sys/class/gpio/export", "2"

のように記述した場合は、「/sys/class/gpio/export」に「2」が出力されます。 シェルから「echo 2 > /sys/class/gpio/export」を実行するのと同じ動作になります。

## Raspberry PiのGPIO入出力

Raspberry Pi版では、devcontrol(gpio)命令によりGPIO入出力を行なう拡張が行われています。
GPIO出力を制御する場合は、以下のように記述します。

    	devcontrol "gpio", ポート番号, 出力値
    	( 「gpio ポート番号, 出力値」と記述することも可能 )

ポート番号は、GPIOのポートを数値で指定します。 出力値は、1(ON)か0(OFF)を数値で指定することで、デジタルポートの出力を制御します。 入力を行う場合は、以下のように記述します。

    	devcontrol "gpioin", ポート番号
    	( 関数として「gpioin(ポート番号)」と記述することも可能 )

命令の実行後にシステム変数statに0か1が代入されます。 (エラーが発生した場合は、マイナス値が代入されます)
GPIO入出力は、hsp3dishだけでなくhsp3clからも使用することが可能です。

## Raspberry PiのI2C入出力

Raspberry Pi版では、devcontrol(i2c〜)命令によりI2Cデバイスとの入出力を行なう拡張が行われています。
I2C制御を行う場合は、RaspberryPiのオプション設定でI2CをEnableにする必要があります。(I2C制御を行なわない場合は、設定の必要ありません) I2C制御を行う場合は、以下のように記述します。

    	devcontrol "i2copen", スレーブアドレス, チャンネル
    	( 「i2copen スレーブアドレス, チャンネル」と記述することも可能 )

    	「チャンネル」は複数のデバイスを同時に指定する場合に識別を行う番号です。(0〜31の整数値)
    	単一のデバイスを制御する場合は省略(0)して構いません。
    	i2copenにより指定されたアドレスのデバイスを制御できる状態になります。
    	結果がシステム変数statに返ります。0の場合は成功、それ以外はエラーになります。

データを出力する場合は、以下のように記述します。

    	devcontrol "i2cwrite", データ値, データサイズ, チャンネル
    	( 「i2cwrite データ値, データサイズ, チャンネル」と記述することも可能 )

    	データ値は、HSPが扱う32bitの整数値になります。
    	データサイズが0または省略した場合は、8bit(1byte)のみ出力されます。
    	データサイズは、1,2,3,4が指定できます。それぞれ、1〜4byteのサイズが出力されます。

データを入力する場合は、以下のように記述します。

    	devcontrol "i2cread", チャンネル
    	( 関数として「i2cread(チャンネル)」と記述することも可能 )

    	devcontrol "i2creadw", チャンネル
    	( 関数として「i2creadw(チャンネル)」と記述することも可能 )

命令の実行後にシステム変数statに結果が代入されます。 i2creadは、8bit(1byte)の値、i2creadwは、16bit(2byte)の値を取得します。 (エラーが発生した場合は、マイナス値が代入されます) I2C制御は、hsp3dishだけでなくhsp3clからも使用することが可能です。

## 著作権とライセンス

HSP3 for Linux/Raspberry Piは、OpenHSPの派生物として取り扱い、ライセンスもOpenHSP/HSP3に準拠した修正BSDライセンスとなります。

    -------------------------------------------------------------------------------
    Hot Soup Processor (HSP)
    Copyright (C) 1997-2020, Onion Software/onitama, all rights reserved.
    Made with base technology of OpenHSP.

    OpenHSP
    Copyright (C) 1997-2020, Onion Software/onitama, all rights reserved.

    These softwares are provided by the copyright holders and contributors "as is" and
    any express or implied warranties, including, but not limited to, the implied
    warranties of merchantability and fitness for a particular purpose are disclaimed.