From: j8takagi Date: Thu, 16 Jul 2026 08:51:49 +0000 (+0900) Subject: docディレクトリの除外ファイルを設定 X-Git-Url: https://j8takagi.net/gitweb?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=casl2lib.git docディレクトリの除外ファイルを設定 --- diff --git a/.gitignore b/.gitignore index 5761abc..0be9610 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ *.o +doc/*.d +doc/*.html +doc/*.pdf diff --git a/doc/manual.d b/doc/manual.d deleted file mode 100644 index 33e32d6..0000000 --- a/doc/manual.d +++ /dev/null @@ -1 +0,0 @@ -manual.html manual_html manual.pdf manual.xml manual.info manual.txt manual.d: manual.texi diff --git a/doc/manual.html b/doc/manual.html deleted file mode 100644 index 779fbb1..0000000 --- a/doc/manual.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - - - -CASL2LIB - CASL II サブルーチンライブラリ - - - - - - - - - - - - - - - - - - - - - -
- -

CASL2LIB - CASL II サブルーチンライブラリ

- - - - -
-
- -

1 CASL2LIBの概要

- -

CASL2LIBは、CASL IIアセンブラ言語で記述されたサブルーチン -(副プログラム)のライブラリです。 -YACASL2のcasl2に、呼び出し元のCASLファイルと -あわせて指定することで、副プログラムとして呼び出せます。 -

-
-
$ casl2 addl_outl.casl casl2lib/outl.casl
-
- -

このドキュメントは、casl2lib.gitリポジトリのas/src -ディレクトリにあるソースファイルのヘッダコメントをもとに、 -各サブルーチンの入出力仕様をまとめたものです。 -掲載内容はソースコードから直接確認したものですが、 -ソース側のコメントに誤りや実装との食い違いがある場合は、 -既知の問題・要確認事項に記載しています。 -

-
-
-
- -

2 呼び出し規約

- -

CASL2LIBのサブルーチンは、CASL IIのCALL命令で呼び出します。 -多くのサブルーチンは、入力に使うレジスタ以外のレジスタを -RPUSH/RPOPまたは個別のPUSH/POPで -退避・復元しており、呼び出し元のレジスタの値を破壊しません。 -ただし、出力用のレジスタ(GR0やGR3など)は、退避・復元の対象外です。 -

-

このドキュメントでは、各サブルーチンについて次の項目を記載します。 -

-
-
概要
-

サブルーチンが行う処理 -

-
-
入力
-

呼び出し前に設定するレジスタとその意味 -

-
-
出力
-

呼び出し後に参照できるレジスタとその意味 -

-
-
依存サブルーチン
-

内部でCALLしている、CASL2LIB内の他のサブルーチン -

-
-
注意
-

オーバーフローの条件や、値の範囲などの制約 -

-
- -
-
-
- -

3 算術演算

- -
-

3.1 ABS

-
-
概要
-

GR1を符号付き整数とみなし、絶対値に変換する。 -

-
入力
-

GR1: -32768から32767の整数 -

-
出力
-

GR1: 入力された整数の絶対値 -

-
注意
-

入力が-32768の場合、絶対値は表現できないためOF(オーバーフロー)フラグが1になる。 -入力が負数(-32767〜-1)の場合、SFフラグが1になる。 -

-
- -
-
-

3.2 ADDL32

-
-
概要
-

連続する2語(32ビット)で表現された2つの値を加算する。 -

-
入力
-

GR1: 数値1の先頭アドレス
-GR2: 数値2の先頭アドレス -

-
出力
-

GR0: 和を格納した領域(内部変数A、2語)の先頭アドレス -

-
注意
-

最上位語で桁あふれが発生した場合、強制的にオーバーフローを発生させる。 -

-
- -
-
-

3.3 MULA

-
-
概要
-

-32767から32767の範囲にある符号付き整数どうしの乗算を、筆算方式で行う。 -

-
入力
-

GR1: 被乗数
-GR2: 乗数 -

-
出力
-

GR0: 積 -

-
依存サブルーチン
-

ABS, MULL -

-
注意
-

被乗数または乗数が-32768の場合はオーバーフロー。 -積が-32767未満または32767より大きい場合、GR0には積の下位16ビットが入り、オーバーフロー。 -

-
- -
-
-

3.4 MULL

-
-
概要
-

0から65535の範囲にある符号なし整数どうしの乗算を、筆算方式で行う。 -

-
入力
-

GR1: 被乗数
-GR2: 乗数 -

-
出力
-

GR3: 積 -

-
注意
-

積が65535より大きい場合はオーバーフロー。 -

-
- -
-
-

3.5 DIVA

-
-
概要
-

符号付き整数の除算を筆算方式で行う。 -

-
入力
-

GR1: 被除数
-GR2: 除数 -

-
出力
-

GR0: 商
-GR3: 剰余 -

-
依存サブルーチン
-

ABS, DIVL -

-
注意
-

GR1が-32768、GR2が-32768、またはGR2が0の場合はオーバーフロー。 -

-
- -
-
-

3.6 DIVL

-
-
概要
-

0から65535の範囲にある符号なし整数の除算を筆算方式で行う。 -

-
入力
-

GR1: 被除数
-GR2: 除数 -

-
出力
-

GR0: 商
-GR3: 剰余 -

-
注意
-

GR2が0の場合、GR0・GR3ともに0になり、オーバーフロー。 -

-
- -
-
-
-
- -

4 最大値・最小値

- -
-

4.1 MAX

-
-
概要
-

連続する複数のWORDを符号付き整数とみなし、最大値を返す。 -

-
入力
-

GR1: WORD値を格納したアドレス
-GR2: 値の個数 -

-
出力
-

GR0: 最大値 -

-
- -
-
-

4.2 MINIM

-
-
概要
-

連続する複数のWORDを符号付き整数とみなし、最小値を返す。 -

-
入力
-

GR1: WORD値を格納したアドレス
-GR2: 値の個数 -

-
出力
-

GR0: 最小値 -

-
- -
-
-
-
- -

5 数値と文字列の変換

- -
-

5.1 L2STR

-
-
概要
-

符号なし整数を10進数の文字列に変換する。 -

-
入力
-

GR1: 符号なし整数
-GR2: 変換した文字列を格納するメモリーの先頭アドレス -

-
出力
-

GR0: 文字列の長さ
-GR2の指すメモリー領域: 変換された文字列 -

-
依存サブルーチン
-

DIVL, REV -

-
- -
-
-

5.2 STR2L

-
-
概要
-

10進数の整数を表す文字列を数値に変換する。 -

-
入力
-

GR1: 文字列を格納するメモリーの先頭アドレス
-GR2: 文字列の長さ(最大5けた) -

-
出力
-

GR3: 数値(範囲は0から65535) -

-
依存サブルーチン
-

MULL -

-
注意
-

文字列が最大長(5けた)より大きい場合、または数字以外の文字を含む場合は、 -GR3は#FFFF、OFフラグが1になる。 -

-
- -
-
-

5.3 REV

-
-
概要
-

メモリー上の指定されたアドレス・長さの文字列を、逆順に並べ替える。 -

-
入力
-

GR1: 文字列のアドレス
-GR2: 文字列の長さ -

-
出力
-

(入力と同一のアドレスに、逆順の文字列を上書き) -

-
- -
-
-
-
- -

6 出力

- -
-

6.1 OUTL

-
-
概要
-

GR1に格納された値を、10進数の整数値(0〜65535)として画面に出力する。 -

-
入力
-

GR1: 出力する値 -

-
依存サブルーチン
-

DIVL, REV -

-
- -
-
-

6.2 OUTA

-
-
概要
-

GR1に格納された値を、10進数の符号付き整数値(-32768〜32767)として画面に出力する。 -

-
入力
-

GR1: 出力する値 -

-
依存サブルーチン
-

ABS, DIVL, REV -

-
- -
-
-

6.3 OUTAQ15

-
-
概要
-

GR1に格納された値をQ15形式(符号付き固定小数点)とみなし、10進数の小数値として画面に出力する。 -

-
入力
-

GR1: Q15形式の値 -

-
依存サブルーチン
-

ABS, MULL -

-
注意
-

GR1が#8000(-1.0に相当)の場合は特別に「-1」を出力する。 -

-
- -
-
-

6.4 OUTLQ15

-
-
概要
-

GR1に格納された値をQ15形式(符号なし固定小数点)とみなし、10進数の小数値として画面に出力する。 -

-
入力
-

GR1: Q15形式の値 -

-
依存サブルーチン
-

MULL -

-
- -
-
-

6.5 OUTB

-
-
概要
-

GR1に格納された値を、2進数値として画面に出力する。 -

-
入力
-

GR1: 出力する値 -

-
依存サブルーチン
-

DIVL, REV -

-
注意
-

16けたに満たない上位けたは「0」で埋める。 -

-
- -
-
-

6.6 OUTBW

-
-
概要
-

GR1に格納された値を、4ビットごとに空白区切りをつけた2進数値として画面に出力する。 -

-
入力
-

GR1: 出力する値 -

-
依存サブルーチン
-

DIVL, REV -

-
- -
-
-
-
- -

7 入力

- -
-

7.1 INL

-
-
概要
-

0から65535の範囲にある整数の入力を、キーボードなどから受け付ける。 -

-
入力
-

(IN命令による標準入力) -

-
出力
-

GR1: 入力された数値
-GR2: 入力された文字列の長さ -

-
依存サブルーチン
-

STR2L -

-
注意
-

入力が数字以外の場合はSFフラグが1になる。 -65535を超える数値の場合はOFフラグが1になる。 -最大5けたまでの入力に対応。 -

-
- -
-
-
-
- -

8 画像出力(PBM)

- -
-

8.1 OUTPBM

-
-
概要
-

PBM形式(モノクロ画像、P1形式)の画像ファイルのヘッダーを出力する。 -

-
入力
-

GR1: 画像ビット列の先頭アドレス
-GR2: 画像の幅
-GR3: 画像の高さ -

-
依存サブルーチン
-

L2STR -

-
注意
-

既知の問題・要確認事項を参照。画素データを出力する部分がソース上で -確認できておらず、ヘッダー(幅・高さ)の出力のみを行っている可能性があります。 -

-
- -
-
-

8.2 PBM16

-
-
概要
-

GR1で指定されたアドレス以降のメモリーを16×16の白黒ビットマップ画像データ -(白:0 黒:1)とみなし、PBM画像ファイルとして出力する。 -

-
入力
-

GR1: 画像データの先頭アドレス(1語につき1画素、下位1ビットで白黒を判定) -

-
依存サブルーチン
-

OUTB -

-
- -
-
-
-
- -

9 既知の問題・要確認事項

- -

このドキュメントを作成するにあたりソースを確認したところ、 -既存のYACASL2マニュアル(yacasl2.info)の記載や、 -ソース内のコメントと実装の間に、次のような食い違いが見つかりました。 -独立ドキュメント化の際にあわせて修正するかどうか、確認をお願いします。 -

-
-
DIVLの出力レジスタ
-

現行のYACASL2マニュアル 2.8節には「商をGR3、剰余をGR0に格納」とありますが、 -実際のソース(divl.casl)のヘッダコメントおよび実装は逆で、 -商がGR0、剰余がGR3です。OUTL/OUTA/OUTB/OUTBWなど、 -DIVLを呼び出す他のサブルーチンはいずれも「商をGR0、剰余をGR3」という -前提で実装されているため、マニュアル側の記載ミスの可能性が高いです。 -

-
-
mull0.caslの内容
-

mull0.caslのヘッダコメントには「入力 GR0:被乗数 GR1:乗数」 -とありますが、実装本体はGR0を一切使用せず、GR1(被乗数)とGR2(乗数) -を使っています。mull.caslと機能・アルゴリズムがほぼ同じであり、 -開発中の実験版が残っているか、削除漏れの可能性があります。 -

-
-
outpbm.caslの完全性
-

outpbm.caslは、ヘッダー(P1、幅、高さ)を出力する -部分までは確認できましたが、END文が見当たらず、画素データ本体を -出力する処理が見当たりませんでした。ファイルが不完全か、 -画素データの出力は呼び出し側プログラムの責務としている可能性があります。 -

-
- -
-
-
- -

10 追加候補(設計欄)

- -

以下は、既存のサブルーチンとの対称性や、CASL II教材としての -利用実績をもとに提案する追加候補です。まだ実装されていません。 -入出力レジスタの案は、既存の命名規則・呼び出し規約に合わせています。 -

-
-

10.1 SUBL32

-
-
概要(案)
-

連続する2語(32ビット)で表現された2つの値を減算する。ADDL32との対称。 -

-
入力(案)
-

GR1: 被減数の先頭アドレス
-GR2: 減数の先頭アドレス -

-
出力(案)
-

GR0: 差を格納した領域の先頭アドレス -

-
実装方針
-

ADDL32と同様に、下位語から借り(ボロー)を伝搬しながら2語分を処理する。 -

-
- -
-
-

10.2 CMPL

-
-
概要(案)
-

連続する2語(32ビット)で表現された2つの値を、符号なし整数として比較する。 -

-
入力(案)
-

GR1: 値1の先頭アドレス
-GR2: 値2の先頭アドレス -

-
出力(案)
-

FR(フラグレジスタ): 上位語→下位語の順に比較し、CPL相当の結果を設定 -

-
実装方針
-

上位語をCPLで比較し、等しい場合のみ下位語をCPLで比較する。 -

-
- -
-
-

10.3 NEGL

-
-
概要(案)
-

連続する2語(32ビット)の値を、2の補数で符号反転する。 -

-
入力(案)
-

GR1: 値の先頭アドレス -

-
出力(案)
-

GR0: 符号反転した値を格納した領域の先頭アドレス -

-
実装方針
-

全ビット反転後、下位語に1を加算し、桁上がりを上位語に伝搬する -(SUBL32を実装後は、0からのSUBL32として実現することも可能)。 -

-
- -
-
-

10.4 STRLEN

-
-
概要(案)
-

文字列の長さを取得する。 -

-
入力(案)
-

GR1: 文字列の先頭アドレス
-GR2: 終端文字(省略時は呼び出し側で長さを明示する方式との整理が必要) -

-
出力(案)
-

GR0: 文字列の長さ -

-
検討事項
-

CASL IIには終端文字による可変長文字列の慣習がないため、 -「終端文字方式」と「長さ明示方式」のどちらに合わせるか、 -既存のREV/L2STR/STR2Lとの一貫性を踏まえて設計する必要があります。 -

-
- -
-
-

10.5 STRCPY

-
-
概要(案)
-

文字列をコピーする。 -

-
入力(案)
-

GR1: コピー元の先頭アドレス
-GR2: コピー先の先頭アドレス
-GR3: 文字列の長さ -

-
出力(案)
-

(GR2の指す領域にコピー結果) -

-
- -
-
-

10.6 STRCMP

-
-
概要(案)
-

2つの文字列を比較する。 -

-
入力(案)
-

GR1: 文字列1の先頭アドレス
-GR2: 文字列2の先頭アドレス
-GR3: 比較する長さ -

-
出力(案)
-

GR0: 一致した場合0、不一致の場合、最初に異なった文字の位置(1から) -

-
- -
-
-

10.7 SQRT

-
-
概要(案)
-

0から65535の範囲にある整数の平方根(整数部)を求める。 -

-
入力(案)
-

GR1: 値 -

-
出力(案)
-

GR0: 平方根の整数部 -

-
実装方針
-

二分探索、またはニュートン法で実装する。教材としては二分探索の方が -CASL II向けの説明がしやすい。 -

-
- -
-
-

10.8 GCD

-
-
概要(案)
-

2つの整数の最大公約数を求める(ユークリッドの互除法)。 -

-
入力(案)
-

GR1: 値1
-GR2: 値2 -

-
出力(案)
-

GR0: 最大公約数 -

-
依存サブルーチン(案)
-

DIVL -

-
- -
-
-
- - - - -