### 9-2　システムBIOSとアプリケーションの連携

前述のサンプルフローチャートにおいて、フラッシュメモリのアプリケーションが実行中であると仮定し、OSプログラムの呼び出しからその復帰までの流れを説明します。

1. アプリケーション実行中、OSプログラムを使用したい場合にos_intサブルーチンをCALLします。
   OSプログラムにジャンプする必要がある割り込み処理ルーチンには、割り込み処理ルーチン内にos_intサブルーチンを呼び出すよう記述します。
2. os_intサブルーチン内のCHANGE命令により、ROM内のOSプログラム呼び出しルーチン（os_CALL）にジャンプします。
3. OSプログラム呼び出しルーチンから、OSプログラム本体のサブルーチン（os_main）をCALLします。
   この時点から、OSプログラムの処理が開始されます。
4. OSプログラムの処理が終了すると、RET命令により、OSプログラム呼び出しルーチン内のCALL命令の次のアドレスにジャンプします。OSプログラム呼び出しルーチンでは、OSプログラムのCALL命令の次は、必ずフラッシュメモリ領域に処理を移行するためのCHANGE命令が記述されています。
5. OSプログラムのサブルーチンから復帰後、CHANGE命令によりフラッシュメモリへと処理を移行します。
   アプリケーションには、ROMから復帰の際に呼び出されるサブルーチン（os_ret）を用意します。
   このサブルーチンの配置場所は固定されており、このプログラムはアプリケーション開発者にライブラリの形で提供されます。このプログラムのことをヘッダといいます（本例では、os_intとos_retがヘッダに含まれます）。
6. 上記の復帰ルーチンから、os_intサブルーチンに戻り、その後RET命令によってメインプログラム（main）に復帰します。

CHANGE命令 CHANGE命令は、フラッシュメモリ空間からROM空間へ、またはROM空間からフラッシュメモリへと処理を移行する際に使用する命令です。CHANGE命令を実行することで、現在ROM空間（またはフラッシュメモリ空間）でプログラムが動作している時は、フラッシュメモリ空間（またはROM空間）へ処理を移行し、ラベル（またはアドレス）で指定されたアドレスにプログラムカウンタがセットされます。

[←] | [INDEX] | [→]