ページアドレス | 機能 | |||
EDATA1 | EDATA2 | EDATA3 | EDATA4 | |
00H | 空白リスト | バッチ1 | バッチ2 | バッチ3 |
01H | バッチ4 | バッチ5 | バッチ6 | バッチ7 |
02H | バッチ8 | バッチ9 | バッチ10 | バッチ11 |
03H | バッチ12 | バッチ13 | バッチ14 | バッチ15 |
Squeakのタイルスクリプティング機能は、タイルを並べて作ったスクリプトプログラムを原則としてループ実行させるため、バッチ処理の実行もそれに倣い、基本的にループする仕様にした。ただし、ループしない実行命令も用意した。また、バッチ処理が他のバッチ処理を呼び出せるようにするため、バッチの処理中のアドレスをスタッキングする機能も設けた。スタックサイズは8で固定としたが、ユーザメモリの許す限り増やす事も可能である。さらに、スタッキングを行わない実行命令も用意した。これは、スタックにバッチが存在しない時、ループするバッチを変更することができるようにするためである。
終了判定および領域サイズの計算を行うため、バッチ処理の末尾にはターミネータ(Terminator)を必ず置くものとし、バッチを意図的に途中で終了させるコマンドはリターン(Return)として別に用意した。
バッチの登録に用いるメモリ割り当てアルゴリズムは、プログラムが簡単、実行速度が速いなどの理由から初適合を採用した。初適合とは、目的のサイズのデータを十分格納できるメモリをアドレス順に探し、最初に見つかった場所に格納するものである。また、Flashメモリは登録と消去を繰り返すと断片化する。よって、メモリ全体の空き領域は足りているが、断片化のためにバッチが格納できないと確認された時点でデフラグを行うプログラムを実装した。ただし、デフラグには非常に時間がかかり、Flashメモリに負荷をかけることにもなるため、登録済みのバッチを消しても良いならばメモリの全消去を行うべきである。
メモリの割り当てを行うには、メモリ中の空き領域を保持しておく必要があるが、これにはリスト方式を採用した。リスト方式とは、空き領域の先頭部に、連続する空き領域のサイズと、次の空き領域のアドレスを格納することで、空き領域を辿ることができるようにするものである。
よって、Flashメモリ内部は例として図7.4のようなイメージで構成される。