総目次

記述規則

§1 概説

§2 PROASM-Ⅱ汎用ｱｾﾝﾌﾞﾗ
2.1  PROASM-Ⅱのｺﾏﾝﾄﾞ形式
 2.1.1 PROASM-Ⅱのｺﾏﾝﾄﾞ
 2.1.2 PROASM-Ⅱのｽｨｯﾁ
2.2  PROASM-Ⅱのｿｰｽ･ﾌｧｲﾙの形式
 2.2.1 ｽﾃｰﾄﾒﾝﾄ (行)
  2.2.1.1 ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ
  2.2.1.2 ﾛｰｶﾙ･ﾗﾍﾞﾙ
  2.2.1.3 ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞ
  2.2.1.4 ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞ
  2.2.1.5 ｺﾒﾝﾄ･ﾌｨｰﾙﾄﾞ
 2.2.2 式
  2.2.2.1 ｼﾝﾎﾞﾙ
  2.2.2.2 数値定数
  2.2.2.3 ASCII定数
  2.2.2.4 式演算子
  2.2.2.5 ﾓｰﾄﾞ (IR80のみ)
  2.2.2.6 外部参照記号 (IR80のみ)
 2.2.3 特殊文字、特殊文字列

2.3  擬似命令
 2.3.1  ASEG (lR80のみ)
 2.3.2  CSEG (lR80のみ)
 2.3.3  DSEG (lR80のみ)
 2.3.4  COMMON/<ﾌﾞﾛｯｸ名>/ (lR80のみ)
 2.3.5  ORG
 2.3.6  END
 2.3.7  DB/DEFB/DEFM/.BYTE (ﾊﾞｲﾄ定義)
 2.3.8  DC (文字定義)
 2.3.9  DW/DEFW/.WORD/.DBYTE (ﾜｰﾄﾞ定義)
 2.3.10 DS/DEFS (領域定義)
 2.3.11 NAME (IR80のみ)
 2.3.12 TITLE
 2.3.13 SUBTTL/$TITLE
 2.3.14 ENTRY/PUBLlC/INTERN/GLOBAL (IR80のみ)
 2.3.15 EXT/EXTRN/EXTERN (IR80のみ)
 2.3.16 EQU
 2.3.17 SET/DEFL
 2.3.18 .RADIX/RADIX
 2.3.19 PAGE/$EJECT/FORMLN
 2.3.20 .PRINTX/MESSG
 2.3.21 ERRCK/ERRCK1/ERRCK2
 2.3.22 .REQUEST (IR80のみ)
 2.3.23 条件付擬似命令
 2.3.24 ﾘｽﾄ制御擬似命令
 2.3.25 ﾏｸﾛ/Z80ｲﾝｽﾄﾗｸｼｮﾝ処理切換命令
 2.3.26 再配置(ﾘﾛｹｰｼｮﾝ)擬似命令 (IR80のみ)
 2.3.27 ﾛｰﾄﾞ前の再配置
 2.3.28 ﾏｸﾛ擬似命令
 2.3.29 その他の擬似命令

2.4  ﾏｸﾛ機能
 2.4.1 ﾘﾋﾟｰﾄ擬似命令
 2.4.2 ﾏｸﾛ定義
2.5  ﾘｽﾄの形式(.PRN)
2.6  ｼﾝﾎﾞﾙ･ﾃｰﾌﾞﾙ･ﾘｽﾄの形式 (.$SY)
2.7  汎用ｱｾﾝﾌﾞﾗ
 2.7.1 汎用ｱｾﾝﾌﾞﾗの使用方法
2.8  PROASM-Ⅱのｴﾗｰ
 2.8.1 ﾘｽﾄに出力されるｴﾗｰ
 2.8.2 ｺﾝｿｰﾙに出力される実行ｴﾗｰ
2.9  擬似命令一覧表
2.10 ｱｾﾝﾌﾞﾗの使用するﾊﾞｯﾌｧ及びﾜｰｸの領域

§3 LNK ﾘﾝｶ
3.1 ﾘﾝｶの動作概要
3.2 LNKのｺﾏﾝﾄﾞ
 3.2.1 ｺﾏﾝﾄﾞ形式
 3.2.2 ｽｨｯﾁ
 3.2.3 LNKのｺﾏﾝﾄﾞ例
 3.2.4 LNKの実行
 3.2.5 注意事項
3.3 ﾌｧｲﾙ形式
 3.3.1 ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ(拡張子'.REL')の形式
 3.3.2 COMﾌｧｲﾙの形式
 3.3.3 16進(HEX)ﾌｧｲﾙ
 3.3.4 ｼﾝﾎﾞﾙ･ﾌｧｲﾙ
 3.3.5 ﾏｯﾌﾟ･ﾌｧｲﾙ
3.4 LNKのｴﾗｰ･ﾒｯｾｰｼﾞ
3.5 ﾘﾝｶの使用するﾊﾞｯﾌｧ及びﾜｰｸ領域 (ｲﾝｽﾄｰﾙ)

§4 MS ﾒｲｸ･ｼﾝﾎﾞﾙ
4.1 ﾒｲｸ･ｼﾝﾎﾞﾙの動作概要
4.2 MSのｺﾏﾝﾄﾞ
 4.2.1 ｺﾏﾝﾄﾞ形式
 4.2.2 ｽｨｯﾁ
 4.2.3 MSのｺﾏﾝﾄﾞ例
4.3 出力ﾌｧｲﾙ形式
4.4 MSのｴﾗｰ･ﾒｯｾｰｼﾞ

§5 LIB ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬ
5.1 LIBの動作概要
5.2 LIBのｺﾏﾝﾄﾞ
 5.2.1 ｺﾏﾝﾄﾞ形式
 5.2.2 ｽｨｯﾁ
 5.2.3 LIBのｺﾏﾝﾄﾞ例
5.3 LIBのｴﾗｰ･ﾒｯｾｰｼﾞ

§6 INSTALL ｲﾝｽﾄｰﾙ･ﾕｰﾃｨﾘﾃｨ
6.1 INSTALLの動作概要
6.2 INSTALLの使用方法
 6.2.1 INSTALLのｺﾏﾝﾄﾞ形式
 6.2.2 ｽｨｯﾁ
 6.2.3 ｲﾝｽﾄｰﾙ項目
  6.2.3.1 ｱｾﾝﾌﾞﾗ
  6.2.3.2 ﾘﾝｶ
 6.2.4 INSTALLの使用例

§7 ﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成方法
7.1 MOV命令用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成
7.2 MOV命令以外のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成
7.3 その他の注意事項

§8 構造化ﾏｸﾛ
8.1 構造化ﾏｸﾛの動作概要
8.2 機能説明
 8.2.1 構文
 8.2.2 条件式
  8.2.2.1 変数、演算、数値
  8.2.2.2 ﾌﾗｸﾞ判定の場合
8.3 使用例

注意事項


記述規則

ｺﾏﾝﾄﾞの一般形などで表記の{ }で示されている内容は省略可能な部分を表します。通常の{ }と区別して下さい。…は項目などの繰り返しを表し、説明上で何かが存在しなければならないが、何でもよい場合などにも使用しています。 一般的に赤字の部分は、ﾎﾟｲﾝﾄとなる部分や、特定の記号で表示上判別し難い場合などに使用しています。


概説

§1 概説

PROASM-Ⅱの主な特長

■ | 汎用ｸﾛｽ･ﾏｸﾛ･ｱｾﾝﾌﾞﾗ。
■ | 新たなMPUに対応するためにﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成の方法を公開。
■ | 標準で7種のMPUのｱｾﾝﾌﾞﾗを装備。(Z80,8085,6809,8048,8051,630X,64180)
■ | PROASM-Ⅱに付属している7種のｱｾﾝﾌﾞﾗは、ﾆﾓﾆｯｸ･ｺｰﾄﾞでﾁｯﾌﾟ･ﾒｰｶに完全ｺﾝﾊﾟﾁﾌﾞﾙ。
■ | 用途に応じて選択できるように、ﾘﾛｹｰﾀﾌﾞﾙ形式とｱﾌﾞｿﾘｭｰﾄ形式のｱｾﾝﾌﾞﾗを用意。
■ | ﾘﾛｹｰﾀﾌﾞﾙ形式において、ﾛｰｶﾙ･ｼﾝﾎﾞﾙによるﾃﾞﾊﾞｯｸﾞを可能とするﾒｲｸ･ｼﾝﾎﾞﾙ･ﾌﾟﾛｸﾞﾗﾑを用意。
■ | 豊富な擬似命令を用意。
■ | ﾗﾍﾞﾙ(ｼﾝﾎﾞﾙ)は最大128文字長まで可。
■ | ﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ形式は、ﾏｲｸﾛｿﾌﾄ社のMACRO-80と上位ｺﾝﾊﾟﾁﾌﾞﾙ。
■ | 従来のｱｾﾝﾌﾞﾙに比ベて同等もしくは2～3倍の高速処理。
■ | CP/M-80、CP/M-86、MS-DOS、CP/M-68K、Unix、VMS等のDOSをｻﾎﾟｰﾄしているため、VAXからﾊﾟｰｿﾅﾙ･ｺﾝﾋﾟｭｰﾀまで開発環境を統一できる。
付属ﾏｸﾛ･ﾗｲﾌﾞﾗﾘ一覧
μPD7800/01/02
μPD7805/06
μPD7807/08/09
μPD7810/11
μPD7816
6305
6502


汎用ｱｾﾝﾌﾞﾗ目次

§2 汎用ｱｾﾝﾌﾞﾗ目次

2.1  PROASM-Ⅱのｺﾏﾝﾄﾞ形式
 2.1.1 PROASM-Ⅱのｺﾏﾝﾄﾞ
 2.1.2 PROASM-Ⅱのｽｨｯﾁ
2.2  PROASM-Ⅱのｿｰｽ･ﾌｧｲﾙの形式
 2.2.1 ｽﾃｰﾄﾒﾝﾄ (行)
  2.2.1.1 ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ
  2.2.1.2 ﾛｰｶﾙ･ﾗﾍﾞﾙ
  2.2.1.3 ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞ
  2.2.1.4 ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞ
  2.2.1.5 ｺﾒﾝﾄ･ﾌｨｰﾙﾄﾞ
 2.2.2 式
  2.2.2.1 ｼﾝﾎﾞﾙ
  2.2.2.2 数値定数
  2.2.2.3 ASCII定数
  2.2.2.4 式演算子
  2.2.2.5 ﾓｰﾄﾞ (IR80のみ)
  2.2.2.6 外部参照記号 (IR80のみ)
 2.2.3 特殊文字、特殊文字列

2.3  擬似命令
 2.3.1  ASEG (lR80のみ)
 2.3.2  CSEG (lR80のみ)
 2.3.3  DSEG (lR80のみ)
 2.3.4  COMMON/<ﾌﾞﾛｯｸ名>/ (lR80のみ)
 2.3.5  ORG
 2.3.6  END
 2.3.7  DB/DEFB/DEFM/.BYTE (ﾊﾞｲﾄ定義)
 2.3.8  DC (文字定義)
 2.3.9  DW/DEFW/.WORD/.DBYTE (ﾜｰﾄﾞ定義)
 2.3.10 DS/DEFS (領域定義)
 2.3.11 NAME (IR80のみ)
 2.3.12 TITLE
 2.3.13 SUBTTL/$TITLE
 2.3.14 ENTRY/PUBLlC/INTERN/GLOBAL (IR80のみ)
 2.3.15 EXT/EXTRN/EXTERN (IR80のみ)
 2.3.16 EQU
 2.3.17 SET/DEFL
 2.3.18 .RADIX/RADIX
 2.3.19 PAGE/$EJECT/FORMLN
 2.3.20 .PRINTX/MESSG
 2.3.21 ERRCK/ERRCK1/ERRCK2
 2.3.22 .REQUEST (IR80のみ)
 2.3.23 条件付擬似命令
 2.3.24 ﾘｽﾄ制御擬似命令
 2.3.25 ﾏｸﾛ/Z80ｲﾝｽﾄﾗｸｼｮﾝ処理切換命令
 2.3.26 再配置(ﾘﾛｹｰｼｮﾝ)擬似命令 (IR80のみ)
 2.3.27 ﾛｰﾄﾞ前の再配置
 2.3.28 ﾏｸﾛ擬似命令
 2.3.29 その他の擬似命令

2.4  ﾏｸﾛ機能
 2.4.1 ﾘﾋﾟｰﾄ擬似命令
 2.4.2 ﾏｸﾛ定義
2.5  ﾘｽﾄの形式(.PRN)
2.6  ｼﾝﾎﾞﾙ･ﾃｰﾌﾞﾙ･ﾘｽﾄの形式 (.$SY)
2.7  汎用ｱｾﾝﾌﾞﾗ
 2.7.1 汎用ｱｾﾝﾌﾞﾗの使用方法
2.8  PROASM-Ⅱのｴﾗｰ
 2.8.1 ﾘｽﾄに出力されるｴﾗｰ
 2.8.2 ｺﾝｿｰﾙに出力される実行ｴﾗｰ
2.9  擬似命令一覧表
2.10 ｱｾﾝﾌﾞﾗの使用するﾊﾞｯﾌｧ及びﾜｰｸの領域


PROASM-Ⅱのｺﾏﾝﾄﾞ形式

2.1 PROASM-Ⅱのｺﾏﾝﾄﾞ形式

2.1.1 PROASM-Ⅱのｺﾏﾝﾄﾞ
2.1.2 PROASM-Ⅱのｽｨｯﾁ


PROASM-Ⅱのｺﾏﾝﾄﾞ

2.1.1 PROASM-Ⅱのｺﾏﾝﾄﾞ

PROASM-Ⅱを動作させるには、CP/M-80、CP/M-86、MS-DOSのｺﾏﾝﾄﾞ･ﾚﾍﾞﾙにてIR80またはIA80に続いて次のｺﾏﾝﾄﾞ形式で入力を行います。
C:>IR80 ｿｰｽ･ﾌｧｲﾙ名 {/ｽｨｯﾁ}
ﾘﾛｹｰﾀﾌﾞﾙ版の場合
C:>IA80 ｿｰｽ･ﾌｧｲﾙ名 {/ｽｨｯﾁ}
ｱﾌﾞｿﾘｭｰﾄ版の場合
ｿｰｽ･ﾌｧｲﾙ名 | PROASM-Ⅱへの入力ｿｰｽ･ﾌｧｲﾙ
/ｽｨｯﾁ | /O /L /P /D /1 /S /6 /I /H /Fのｽｨｯﾁがあり、すべてｵﾌﾟｼｮﾝ (/H及び/FはIA80のみ)
注意: ｿｰｽ･ﾌｧｲﾙ名の拡張子が省略されるとPROASM-Ⅱは、.SRCの拡張子を選択します。Unix,VMS版は/の代わりに-を使用します。
例:
C:>IR80 TEST
TEST.SRCをｱｴﾝﾌﾞﾙし、TEST.REL(ﾘﾛｹｰﾀﾌﾞﾙ･ﾊﾞｲﾅﾘ)を作ります。
C:>IA80 PROASM.ASM/L
PROASM.ASMをｱｾﾝﾌﾞﾙし、PROASM.COM(ｱﾌﾞｿﾘｭｰﾄ、実行形式)とPROASM.PRN(ﾘｽﾄ･ﾌｧｲﾙ)を作ります。


PROASM-Ⅱのｽｨｯﾁ

2.1.2 PROASM-Ⅱのｽｨｯﾁ

PROASM-Ⅱは、次表に示すｽｨｯﾁ･ｵﾌﾟｼｮﾝがあります。各ｽｨｯﾁの前には/(ｽﾗｯｼｭ)または-(ﾊｲﾌﾝ)を置かなければなりません。
■ IA80/IR80ｽｨｯﾁ
ｽｨｯﾁ | 動作 | 備考
/Oﾄﾞﾗｲﾌﾞ名 | 指定したﾄﾞﾗｲﾌﾞにｵﾌﾞｼﾞｪｸﾄ(IR80の場合は、RELﾌｧｲﾙ、IA80の場合は、COMﾌｧｲﾙ)を作成します。(Unix,VMS版は無視)
/L{ﾄﾞﾗｲﾌﾞ名} | ﾘｽﾄ･ﾌｧｲﾙ(PRNﾌｧｲﾙ)を作成します。ﾄﾞﾗｲﾌﾞ名はｵﾌﾟｼｮﾝです。
/P | ﾌﾟﾘﾝﾀへﾘｽﾄを出力します。
/D | ｺﾝｿｰﾙへﾘｽﾄを出力します。
/1 | ﾊﾟｽ1の内容もﾘｽﾄ装置(ﾃﾞｨｽｸ、ﾌﾟﾘﾝﾀ or ｺﾝｿｰﾙ)へ出力します。
/S | ｼﾝﾎﾞﾙ･ﾌｧｲﾙ(IR80の場合は$SYﾌｧｲﾙ、IA80の場合はSYMﾌｧｲﾙ)を作成(SID、ZSIDで読み込み可能なﾌｫｰﾏｯﾄ)します。Unix、VMS版は$SYの代わりにSYとなります。
/6 | IR80のみ有効なｽｨｯﾁで外部ｼﾝﾎﾞﾙを6文字に制限します。(M80ｺﾝﾊﾟﾁﾌﾞﾙ)
/Iｺﾏﾝﾄﾞ | /Iｽｨｯﾁ以後の文字列はｱｾﾝﾌﾞﾙ･ｿｰｽの最初の行としてｱｾﾝﾌﾞﾙされます。
/H | ﾌﾟﾛｸﾞﾗﾑを16進形式('出力ﾌｧｲﾙ名.HEX')で出力します。このｽｨｯﾁが省略された時はCP/Mのｺﾏﾝﾄﾞ形式('出力ﾌｧｲﾙ名.COM')で出力されます。 | lA80のみ
/F | ﾌﾟﾛｸﾞﾗﾑをﾓﾄﾛｰﾗSﾌｫｰﾏｯﾄ形式で出力します。Hｵﾌﾟｼｮﾝと同時に使用はできません。 | lA80のみ
例:
C:>IR80 TEST/OB/LB
TEST.SRCをｱｾﾝﾌﾞﾙし、BﾄﾞﾗｲﾌﾞにTEST.RELとTEST.PRNを作成します。
C:>IA80 TEST48/I INCLUDE 8048.LIB
INCLUDE 8048.LIBにより8048用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘを読み込んだTEST48.SRCをｱｾﾝﾌﾞﾙします。


ｿｰｽ･ﾌｧｲﾙの形式

2.2 ｿｰｽ･ﾌｧｲﾙの形式

PROASM-Ⅱは各ﾏｲｸﾛﾌﾟﾛｾｯｻ･ﾒｰｶのｱｾﾝﾌﾞﾗと殆ど同じ形式のｿｰｽ･ﾌｧｲﾙを受け付けます。ｿｰｽの入力は1行について128文字までの長さの文字列を受けつけます。PROASM-Ⅱでは、'(引用符)で囲まれた文字列や、ｺﾒﾝﾄには英数字、ｶﾀｶﾅ、漢字(ｼﾌﾄJIS)が使用できます。それ以外の英字は全て大文字に変換されてから処理されます。
2.2.1 ｽﾃｰﾄﾒﾝﾄ (行)
 2.2.1.1 ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ
 2.2.1.2 ﾛｰｶﾙ･ﾗﾍﾞﾙ
 2.2.1.3 ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞ
 2.2.1.4 ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞ
 2.2.1.5 ｺﾒﾝﾄ･ﾌｨｰﾙﾄﾞ
2.2.2 式
 2.2.2.1 ｼﾝﾎﾞﾙ
 2.2.2.2 数値定数
 2.2.2.3 ASCII定数
 2.2.2.4 式演算子
 2.2.2.5 ﾓｰﾄﾞ (IR80のみ)
 2.2.2.6 外部参照記号 (IR80のみ)
2.2.3 特殊文字、特殊文字列


ｽﾃｰﾄﾒﾝﾄ(行)

2.2.1 ｽﾃｰﾄﾒﾝﾄ(行)

PROASM-Ⅱのｽﾃｰﾄﾒﾝﾄは次の形式をとっています。
{ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ{:{:}}} {ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞ} {ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞ} {;ｺﾒﾝﾄ･ﾌｨｰﾙﾄﾞ}
実際には、これらのいくつかは、使われないこともあります。すべてのｽﾃｰﾄﾒﾝﾄは、ｷｬﾘｯｼﾞﾘﾀｰﾝ(CR)、ﾗｲﾝﾌｨｰﾄﾞ(LF)で区切られています。各ﾌｨｰﾙﾄﾞ間は自由にｽﾍﾟｰｽ、ﾀﾌﾞを入れることができます。

 2.2.1.1 ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ

 ｿｰｽ･ﾌﾟﾛｸﾞﾗﾑ行の最初のﾌｨｰﾙﾄﾞはﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞと呼ばれます。空白でなければ、ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞは、ﾌﾟﾛｸﾞﾗﾑのﾛｹｰｼｮﾝを識別するﾗﾍﾞﾙであるか、それともMACRO、EQUあるいはDEFL擬似命令と共に使用されるｼﾝﾎﾞﾙです。ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞにあるどのようなｼﾝﾎﾞﾙも、後にｺﾛﾝあるいはｽﾍﾟｰｽが続かなければなりません。ｽﾍﾟｰｽではなく、ｺﾛﾝが後に続いた場合は、どのｶﾗﾑからｽﾀｰﾄしても構いません。もし、:(ｺﾛﾝ)が2つ続けば、そのｼﾝﾎﾞﾙが、PUBLICであるとして宣言されたものとなります。ﾗﾍﾞﾙは1文字以上128文字から成ります。次の文字がﾗﾍﾞﾙ内で使用できます。
A～Z 0～9 $ ? @ _(ｱﾝﾀﾞｰﾊﾞｰ)
注: ﾗﾍﾞﾙの最後に$は使用できません。
小文字は大文字に変換してから処理されます。また、ﾗﾍﾞﾙの最初の文字は数字で始まってはいけません。もし、ﾗﾍﾞﾙの後に#(ｼｬｰﾌﾟ記号)が2つ続けば外部参照ｼﾝﾎﾞﾙとして宣言されたものとして扱われます。

 2.2.1.2 ﾛｰｶﾙ･ﾗﾍﾞﾙ

 2.2.1.1で説明した型式のﾗﾍﾞﾙはﾊﾟｰﾏﾈﾝﾄ(恒久的)です。すなわちﾓｼﾞｭｰﾙ内のどの場所からも参照できます。また、一時的に、あるいは限られた場所からのみ参照できるﾛｰｶﾙ･ﾗﾍﾞﾙはnnn$の形で、その中のnnnは1～255の10進数です。ﾛｰｶﾙ･ﾗﾍﾞﾙはﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ内からのみ参照できます。

 ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸはﾊﾟｰﾏﾈﾝﾄ(ﾛｰｶﾙではない)ﾗﾍﾞﾙの次の行で始まり、次のﾊﾟｰﾏﾈﾝﾄ･ﾗﾍﾞﾙを含む行で終わります。すなわちﾊﾟｰﾏﾈﾝﾄ･ﾗﾍﾞﾙは、ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸの始まりを識別するために使用することができます。ﾛｰｶﾙ･ﾗﾍﾞﾙはﾌﾞﾗﾝﾁ(分岐)が起こるﾛｹｰｼｮﾝを識別するために、このﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ内で使用することができます。これによって、ﾗﾍﾞﾙ名の選択を簡素化することになり、有効ｾｸｼｮﾝの開始をより明白にさせることになります。同一名のﾛｰｶﾙ･ﾗﾍﾞﾙは同一ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ内での重複定義は許されませんが、異なったﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ内で使用することができます。
例:
GETNUM: …
1$:     …
ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸの開始
        …
        …
ADDNUM: …
ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸの終了
        …
新しいﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸの開始
1$:     …
このﾛｰｶﾙ･ﾗﾍﾞﾙは重複して定義されません。これは、1$と名付けられた前回のﾗﾍﾞﾙとは異なったﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ内にあるからです。
LOCAL擬似命令はﾌﾟﾛｸﾞﾗﾏがﾊﾟｰﾏﾈﾝﾄ･ﾗﾍﾞﾙを使用せずに新しいﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸを開始させることができます。

 ここでのﾛｰｶﾙ･ｼﾝﾎﾞﾙは、ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸに対してﾛｰｶﾙであるという意味です。6809、6301ではﾛｰｶﾙ･ﾗﾍﾞﾙは使用できません。通常のﾗﾍﾞﾙの最後に$を使用することはできません。

 2.2.1.3 ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞ

ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞにはｲﾝｽﾄﾗｸｼｮﾝ･ﾆﾓﾆｯｸか、ｱｾﾝﾌﾞﾘ擬似命令あるいは、ﾕｰｻﾞ定義ﾏｸﾛ(ﾏｸﾛ呼び出し)のいずれかを含んでいます。このﾌｨｰﾙﾄﾞは、後に少なくとも1つのｽﾍﾟｰｽ、ﾀﾌﾞあるいはｷｬﾘｯｼﾞﾘﾀｰﾝ、ﾗｲﾝﾌｨｰﾄﾞ(CR+LF)が続きます。また、このﾌｨｰﾙﾄﾞは、第1ｶﾗﾑから記述してはいけません。

 2.2.1.4 ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞ

 ｵﾍﾟﾗﾝﾄﾞ･ﾌｨｰﾙﾄﾞはｶﾝﾏで分離された1つあるいはそれ以上のｵﾍﾟﾗﾝﾄﾞから成り立っています。ｵﾍﾟﾗﾝﾄﾞはASCII定数、数式、文字列、ｼﾝﾎﾞﾙ名あるいはﾚｼﾞｽﾀの名前などです。このﾌｨｰﾙﾄﾞの内容は、ｲﾝｽﾄﾗｸｼｮﾝ･ﾌｨｰﾙﾄﾞに現れるｲﾝｽﾄﾗｸｼｮﾝ･ﾆﾓﾆｯｸ、擬似命令あるいはﾏｸﾛ名によって決まります。

 2.2.1.5 ｺﾒﾝﾄ･ﾌｨｰﾙﾄﾞ

 ｺﾒﾝﾄは;(ｾﾐｺﾛﾝ)で始まり、ｷｬﾘｯｼﾞﾘﾀｰﾝ、ﾗｲﾝﾌｨｰﾄﾞ(CR,LF)で終わります。ｺﾒﾝﾄはそれ自身で1行の場合もあり、また、ｽﾃｰﾄﾒﾝﾄを含む行に付けられている場合もあります。


式

2.2.2 式

式はﾕｰｻﾞ･ｼﾝﾎﾞﾙ、数字及びASCII定数から成り、これらは、多種の演算子によって結合することができます。演算はすべて16ﾋﾞｯﾄで行われます。符号付きの場合は-32768から32767(10進数)、符号無しの場合は、0から65535(10進数)の値をとります。また、ﾊﾞｲﾄ(8ﾋﾞｯﾄ)値は16ﾋﾞｯﾄ演算の結果の下位8ﾋﾞｯﾄとなります。

 2.2.2.1 ｼﾝﾎﾞﾙ

 ｽﾃｰﾄﾒﾝﾄ･ﾗﾍﾞﾙまたはEQU等の擬似命令によって定義されたｼﾝﾎﾞﾙは式で使用することができます。また、$(ﾄﾞﾙ記号)は、現在の命令の先頭のﾛｹｰｼｮﾝ(ｱﾄﾞﾚｽ)を示す特殊記号として使用できます。

 2.2.2.2 数値定数

 数値定数は2進、8進、10進あるいは16進定数が使えます。数字の後ろ又は前に基数を示す文字を続けることができます。各基数は以下のように表します。
形式 意味 例
nnnnB
2進数
1010B
%nnnn
2進数
%1010
nnnnO
8進数
12O
nnnnQ
8進数
12Q
nnnnD
10進数
10D
nnnnH
16進数
0AH
$nnnn
16進数
$A
Hを用いた16進定数はﾕｰｻﾞ･ｼﾝﾎﾞﾙとの区別をするために0～9の数字で始めなければなりません。従って、A～Fで始まる数字の前には1つｾﾞﾛ(0)をつける必要があります。基数を示す文字が省略されている数字は、標準で10進数とみなされます。ﾕｰｻﾞはRADIX擬似命令を用いて省略時の基数を変更することができます。

 2.2.2.3 ASCII定数

 ASCII定数は引用符'で囲まれた1つあるいは2つ以上の文字によって表されます。例えば、'A'、'AB'です。これらは文字に対応する8ﾋﾞｯﾄASCII値をとります。
例:
'A'
41Hと同じ
'AB'
4142Hと同じ
また、ASCII定数として小文字、ｶﾅ、漢字ｺｰﾄﾞ(ｼﾌﾄJIS)も使用することができます。

 2.2.2.4 式演算子

 PROASM-Ⅱでは以下の演算子を使用できます。
分類 形式 意味
単項演算子
+
正
-
負 (2の補数)
NOT
1の補数
\
NOTと同じ
HIGH
上位ﾊﾞｲﾄ (8ﾋﾞｯﾄ)
LOW
下位ﾊﾞｲﾄ (8ﾋﾞｯﾄ)
BYTE1
HIGHと同じ
BYTE0
LOWと同じ
2項演算子
+
加算
-
減算
*
乗算
/
除算
MOD
剰余 (除算による余り)
**
ベき乗
AND
論理AND
&
ANDと同じ
OR
論理OR
^
ORと同じ
!
ORと同じ
XOR
論理XOR
EQ
等しい
=
等しい
GT
より大きい
>
より大きい
LT
より小さい
<
より小さい
NE
等しくない
LE
等しいかあるいは小さい
GE
等しいかあるいは大きい
UGT
より大きい (符号なし)
ULT
より小さい (符号なし)
SHL
左ｼﾌﾄ (ｼﾌﾄ後の空白部には0が挿入されます)
SHR
右ｼﾌﾄ (ｼﾌﾄ後の空白部には0が挿入されます)
.
8051のﾋﾞｯﾄ･ｱﾄﾞﾚｽの計算
また、以下に示す優先順位があり、同じ優先順位の演算は左から右ヘと処理されます。
優先順位 | 演算子
1 | かっこで囲まれた式
2 | **
3 | SHL SHR * / MOD
4 | + -
5 | EQ NE LT LE GT GE ULT UGT = > <
6 | NOT \
7 | AND &
8 | OR ! ^
9 | BYTE0 BYTE1 LOW HIGH
10 | .
注意: +, -, /, *, **, =, <, >, \, &, !, ^, .以外の全演算子は、ｽﾍﾟｰｽ、ﾀﾌﾞ、ﾋﾟﾘｵﾄﾞで区切られていなければなりません。

2.2.2.5 ﾓｰﾄﾞ (lR80のみ)

 式の中でｵﾍﾟﾗﾝﾄﾞとして使われるあらゆるｼﾝﾎﾞﾙは、ｱﾌﾞｿﾘｭｰﾄ･ﾓｰﾄﾞ、ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞ、ｺｰﾄﾞ(ﾌﾟﾛｸﾞﾗﾑ)ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞ、COMMONﾓｰﾄﾞのいずれかになります。ASEG、CSEG(標準)、DSEG擬似命令の下でｱｾﾝﾌﾞﾙされたｼﾝﾎﾞﾙは各々ｱﾌﾞｿﾘｭｰﾄ･ﾓｰﾄﾞ、ｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞ、ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞになります。ﾌﾟﾛｸﾞﾗﾑ内のCOMMONﾓｰﾄﾞの数はCOMMON擬似命令で名付けられたCOMMONﾌﾟﾛｸﾞﾗﾑの数によって決定されます。2つのCOMMON内のｼﾝﾎﾞﾙは、それらが同じCOMMONﾌﾞﾛｯｸになければ同じﾓｰﾄﾞではありません。

 演算におけるｵﾍﾟﾗﾝﾄﾞのﾓｰﾄﾞは、次表の規則が適用されます。1つの式を評価していく中間の各段階においても表のﾓｰﾄﾞに対する規則に従わなければならず、規則に反した場合は、ｴﾗｰとなります。
■ lR80のPCﾓｰﾄﾞと演算子の関係 (REL.op.RELは同一ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞ)
演算子 | 単項ABS | 単項ﾘﾗﾃｨﾌﾞ
ABS op ABS | ABS op REL | REL op ABS | REL op REL | EXTを含む演算
HIGH
ABS ― ― REL EXT
L0W
ABS ― ― REL EXT
N0T
ABS ― ― REL EXT
-(単項) ABS ― ― REL EXT
-
ABS ｴﾗｰ REL ABS EXT
+
ABS REL REL ｴﾗｰ EXT
*
ABS ｴﾗｰ ｴﾗｰ ｴﾗｰ EXT
/
ABS ｴﾗｰ ｴﾗｰ ｴﾗｰ EXT
M0D
ABS ｴﾗｰ ｴﾗｰ ｴﾗｰ EXT
**
ABS ｴﾗｰ REL ｴﾗｰ EXT
SHL
ABS ｴﾗｰ REL ｴﾗｰ EXT
SHR
ABS ｴﾗｰ REL ｴﾗｰ EXT
AND
ABS ｴﾗｰ REL ｴﾗｰ EXT
0R
ABS ｴﾗｰ REL ｴﾗｰ EXT
X0R
ABS ｴﾗｰ REL ｴﾗｰ EXT
EQ
ABS ｴﾗｰ ｴﾗｰ ｴﾗｰ EXT
NE
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
LT
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
GT
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
GE
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
ULT
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
UGT
ABS ｴﾗｰ ｴﾗｰ ABS ｴﾗｰ
.(ﾋﾞｯﾄ)
ABS ｴﾗｰ ｴﾗｰ ｴﾗｰ ｴﾗｰ

2.2.2.6 外部参照記号 (lR80のみ)

 ﾓｰﾄﾞによる分類のほかに、記号は外部参照記号とそうでないものとに分けられます。式の中で外部参照記号を用いるとき、前表の規則が適用されます。もし式の中で外部参照記号が使われているなら、その式の結果も常に外部参照記号です。


特殊文字、特殊文字列

2.2.3 特殊文字、特殊文字列

■ 特殊文字

 ~(ﾁﾙﾀﾞ : 波形記号)はPROASM-Ⅱに対して特殊な意味を持っています。波形記号はそれに続く文字は単なる文字として処理されることを意味します。例えば、波形記号に引用符号などが続いてもそれは引用符号とみなしません。また、波形記号を文字として扱いたいときは、波形記号を2つ連続して記述して下さい。
例:
  DB 'This is a ~'PEN~'
This is a 'PEN'として処理

■ 特殊文字列

<文字列> {:{<xn>}{-}{<xn>}}
xはFまたはB
Fn | 前からn文字目
Bn | 後からn文字目
- | その部分を文字列の本体とする
<文字列>:{<xc>}{-}
xはFまたはB
Fc | 文宇'c'以降
Bc | 文字'c'以前
ﾏｸﾛ呼び出し、REPT、IRP、DB、DWの引数(ｵｰｷﾞｭﾒﾝﾄ)として用いられる場合は、<文字列>の中のすべての文字(指定された範囲のすべての文字)が1つの引数となります。たとえ<文字列>の中に,(ｶﾝﾏ)などの区切り文字がある場合でも1つの引数として扱うことができます。また、ｵﾌﾟｼｮﾝのﾊﾟﾗﾒｰﾀを<文字列>の後に付けることにより文字列の任意の範囲を引数とすることができます。文字列の両端の<>(角ｶｯｺ)は必ず必要です。
例:
  DW <#1234>:F1-
DW <1234>と同じ
  DW <0123456789>:F1-F5
  DW <0123456789>:F1-B5
  DW <0123456789>:B9-B5
  DB <123X4>:FX-
DB 4と同じ


擬似命令

2.3 擬似命令

2.3.1  ASEG (lR80のみ)
2.3.2  CSEG (lR80のみ)
2.3.3  DSEG (lR80のみ)
2.3.4  COMMON/<ﾌﾞﾛｯｸ名>/ (lR80のみ)
2.3.5  ORG
2.3.6  END
2.3.7  DB/DEFB/DEFM/.BYTE (ﾊﾞｲﾄ定義)
2.3.8  DC (文字定義)
2.3.9  DW/DEFW/.WORD/.DBYTE (ﾜｰﾄﾞ定義)
2.3.10 DS/DEFS (領域定義)
2.3.11 NAME (IR80のみ)
2.3.12 TITLE
2.3.13 SUBTTL/$TITLE
2.3.14 ENTRY/PUBLlC/INTERN/GLOBAL (IR80のみ)
2.3.15 EXT/EXTRN/EXTERN (IR80のみ)
2.3.16 EQU
2.3.17 SET/DEFL
2.3.18 .RADIX/RADIX
2.3.19 PAGE/$EJECT/FORMLN
2.3.20 .PRINTX/MESSG
2.3.21 ERRCK/ERRCK1/ERRCK2
2.3.22 .REQUEST (IR80のみ)
2.3.23 条件付擬似命令
2.3.24 ﾘｽﾄ制御擬似命令
2.3.25 ﾏｸﾛ/Z80ｲﾝｽﾄﾗｸｼｮﾝ処理切換命令
2.3.26 再配置(ﾘﾛｹｰｼｮﾝ)擬似命令 (IR80のみ)
2.3.27 ﾛｰﾄﾞ前の再配置
2.3.28 ﾏｸﾛ擬似命令
2.3.29 その他の擬似命令


ASEG,CSEG,DSEG,COMMON,ORG,END

2.3.1～6 ASEG,CSEG,DSEG,COMMON,ORG,END

2.3.1 ASEG (lR80のみ)

ASEGはﾒﾓﾘの絶対(ｱﾌﾞｿﾘｭｰﾄ)ｱﾄﾞﾚｽをﾛｹｰｼｮﾝ･ｶｳﾝﾀに設定します。ASEGの中でORG擬似命令によりﾛｹｰｼｮﾝ･ｶｳﾝﾀの値を変更しない限り、絶対ｱﾄﾞﾚｽのﾛｹｰｼｮﾝ･ｶｳﾝﾀの値は直前のASEGの最後と同じです。最初のASEGの場合は0となります。

 2.3.2 CSEG (lR80のみ)

CSEGはﾛｹｰｼｮﾝ･ｶｳﾝﾀにﾒﾓﾘのｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ番地を設定します。CSEGの後で、ORG擬似命令によってﾛｹｰｼｮﾝ･ｶｳﾝﾀの値を変更しない限り、ﾛｹｰｼｮﾝ･ｶｳﾝﾀの値は直前のCSEGの最後と同じです。最初のCSEGの場合は0となります。

 2.3.3 DSEG (lR80のみ)

DSEGはﾒﾓﾘ内のﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ番地をﾛｹｰｼｮﾝ･ｶｳﾝﾀに設定します。DSEGの後でORG擬似命令によってﾛｹｰｼｮﾝ･ｶｳﾝﾀの値を変更しない限り、ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞのﾛｹｰｼｮﾝ･ｶｳﾝﾀの番地は直前のDSEGの最後と同じです。最初のDSEGの場合は0となります。

 2.3.4 COMMON/<ﾌﾞﾛｯｸ名>/ (lR80のみ)

 COMMONはﾒﾓﾘ内の選択されたｺﾓﾝ･ﾌﾞﾛｯｸの番地をﾛｹｰｼｮﾝ･ｶｳﾝﾀに設定します。ﾛｹｰｼｮﾝは常に領域の初めに設定されます。もし<ﾌﾞﾛｯｸ名>が省略されているか、ｽﾍﾟｰｽであるならﾌﾞﾗﾝｸ･ｺﾓﾝであるとみなされます。

 2.3.5 ORG

ORG 式
ﾛｹｰｼｮﾝ･ｶｳﾝﾀに式の値を設定し、その値のｱﾄﾞﾚｽからｱｾﾝﾌﾞﾗは生成されたｺｰﾄﾞを割り当てます。式内で使われるすべてのｼﾝﾎﾞﾙはﾊﾟｽ1で値が定義されていなければなりません。そしてその値はｱﾌﾞｿﾘｭｰﾄであるか、ﾛｹｰｼｮﾝ･ｶｳﾝﾀと同じ領域内(CSEG, DSEG, COMMON)になければなりません。

 2.3.6 END

END {式}
式のｵﾌﾟｼｮﾝはIR80のみ
ENDはﾌﾟﾛｸﾞﾗﾑの終りを指定します。もし式があればそれはﾌﾟﾛｸﾞﾗﾑの開始番地とみなされます。(IR80からLNKに開始番地を渡します)


DB/DEFB/DEFM/.BYTE,DC,DW/DEFW/.WORD/.DBYTE,DS/DEFS

2.3.7～10 DB/DEFB/DEFM/.BYTE,DC,DW/DEFW/.WORD/.DBYTE,DS/DEFS

2.3.7 DB DEFB DEFM .BYTE (ﾊﾞｲﾄ定義)

      DB    式{,式,…}
      DEFB  式{,式,…}
      DEFM  式{,式,…}
      .BYTE 式{,式,…}
      DB    文字列{,文字列,…}
      DEFB  文字列{,文字列,…}
      DEFM  文字列{,文字列,…}
      .BYTE 文字列{,文字列,…}
      FCC   文字列{,文字列,…}
      FCB   文字列{,文字列,…}
DB, DEFB, DEFM, .BYTEの変数(ｵｰｷﾞｭﾒﾝﾄ)は式か文字列のいずれかです。DBは現在のﾛｹｰｼｮﾝ･ｶｳﾝﾀの番地から連続した番地に式の値または文字列の文字を格納します。式の計算結果は1ﾊﾞｲﾄでなければなりません。もし、計算結果の上位ﾊﾞｲﾄが0または0FFHであればｴﾗｰとならず、それ以外ではAｴﾗｰとなります。文字列内の文字は現れた順に格納されます。文字列の文字は、小文字、ｶﾅ、漢字(ｼﾌﾄJIS)も使用可能です。
例:
0000' 4142
  DB 'AB'
0002' 41424344
  DB 'ABCDEFG'
      454647

2.3.8 DC (文字定義)

      DC 文字列
DCは現在のﾛｹｰｼｮﾝ･ｶｳﾝﾀから始まる連続した番地に文字列内の文字を格納します。DBと同様に文字は現れた順に格納されます。しかしDCは文字列の最後の文字の最上位ﾋﾞｯﾄ(ﾋﾞｯﾄ7)を1にｾｯﾄした上で格納します。DCの変数が空文字列ならばｴﾗｰとなります。
2.3.9 DW DEFW .WORD .DBYTE (ﾜｰﾄﾞ定義)

      DW     式{,式,…}
      DEFW   式{,式,…}
      .WORD  式{,式,…}
      .DBYTE 式{,式,…}
      FDB    式{,式,…}
DW, DEFW, .WORD, .DBYTEは現在のﾛｹｰｼｮﾝ･ｶｳﾝﾀの番地から始まる連続した番地に式の値を格納します。式は2ﾊﾞｲﾄ(ﾜｰﾄﾞ)の値として計算されます。.DBYTE/FDBを用いた場合、式の値は上下ﾊﾞｲﾄが反転されずに格納されます。
例:
0000' 3412
  DW  1234H
0002' 1234
  FDB 1234H

2.3.10 DS DEFS (領域定義)
DS 式
DSはﾒﾓﾘ上の領域を確保します。式の値は割り当てられるﾊﾞｲﾄ数を示します。式内で使われているすべての名前は前もって定義されていなければなりません。(すなわちﾊﾟｽ1で定義されていること)もしそうでなければ、ﾊﾟｽ1の間にVｴﾗｰが出力されます。


NAME,TITLE,SUBTTL/$TITLE

2.3.11～13 NAME,TITLE,SUBTTL/$TITLE

2.3.11 NAME (IR80のみ)

      NAME {ﾓｼﾞｭｰﾙ名}
NAMEはﾓｼﾞｭｰﾙに対して名前を定義します。ﾓｼﾞｭｰﾙ名において最初の32文字(/6ｽｨｯﾁの時は6文字)が意味を持っています。NAMEが省略された時、ﾓｼﾞｭｰﾙ名は、TITLE擬似命令で定義されたものを使います。NAMEもTITLEも共に無い場合は、ﾓｼﾞｭｰﾙ名はｿｰｽ･ﾌｧｲﾙ名と同じになります。

 2.3.12 TITLE

      TITLE ﾃｷｽﾄ
TITLEは各ﾘｽﾄ･ﾍﾟｰｼﾞのﾍｯﾀﾞ部分に出力するﾀｲﾄﾙを指定します。もしNAME擬似命令が使われていなければﾀｲﾄﾙの最初の32文字(/6ｽｨｯﾁの時は6文字)がﾓｼﾞｭｰﾙ名として使われます。もしNAME,TITLEのどちらの擬似命令も使われていなければｿｰｽ･ﾌｧｲﾙ名からﾓｼﾞｭｰﾙ名が作られます。

 2.3.13 SUBTTL $TITLE

      SUBTTL ﾃｷｽﾄ
      $TITLE ﾃｷｽﾄ
SUBTTL, $TITLEは各ﾘｽﾄ･ﾍﾟｰｼﾞのﾍｯﾀﾞ部分に出力するﾀｲﾄﾙの後に続くｻﾌﾞﾀｲﾄﾙを指定します。ﾃｷｽﾄは20文字を越えるものは後が切られます。1つのﾌﾟﾛｸﾞﾗﾑに任意の数のSUBTTL, $TITLEを用いても構いません。


ENTRY/PUBLlC/INTERN/GLOBAL,EXT/EXTRN/EXTERN

2.3.14～15 ENTRY/PUBLlC/INTERN/GLOBAL,EXT/EXTRN/EXTERN

2.3.14 ENTRY PUBLlC INTERN GLOBAL (IR80のみ)

      ENTRY  ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
      PUBLIC ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
      INTERN ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
      GLOBAL ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
ENTRY, PUBLIC, INTERN, GLOBALはﾊﾟﾗﾒｰﾀの中のｼﾝﾎﾞﾙを内部参照記号であると宣言すると同時に一緒にﾘﾝｸされる外部ﾓｼﾞｭｰﾙのﾌﾟﾛｸﾞﾗﾑでも使用可能であることを宜言します。ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞのｼﾝﾎﾞﾙの後に::(ｺﾛﾝを2個続けること)によっても宣言できます。ﾗﾍﾞﾙ･ﾌｨｰﾙﾄﾞ参照 ﾊﾟﾗﾒｰﾀの中のすべてのｼﾝﾎﾞﾙがそのﾌﾟﾛｸﾞﾗﾑ内で定義されていなければなりません。もし、そのｼﾝﾎﾞﾙが外部参照記号ならｴﾗｰとなります。
2.3.15 EXT EXTRN EXTERN (IR80のみ)

      EXT    ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
      EXTRN  ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
      EXTERN ｼﾝﾎﾞﾙ{,ｼﾝﾎﾞﾙ,…}
EXT, EXTRN, EXTERNはﾊﾟﾗﾒｰﾀ内のｼﾝﾎﾞﾙ(複数でもよい)が外部参照記号であると宣言します。(すなわち、そのｼﾝﾎﾞﾙは別のﾌﾟﾛｸﾞﾗﾑで定義されていなければなりません。)ﾊﾟﾗﾒｰﾀ内のｼﾝﾎﾞﾙのどれかがそのﾌﾟﾛｸﾞﾗﾑ内で定義されているｼﾝﾎﾞﾙと重複している場合はMｴﾗｰとなります。2つのｼｬｰﾌﾟ記号(##)がついているｼﾝﾎﾞﾙ(例えばNAME##)を参照することは、そのｼﾝﾎﾞﾙもまた外部参照記号として宣言していることになります。


EQU,SET/DEFL,.RADIX/RADIX

2.3.16～18 EQU,SET/DEFL,.RADIX/RADIX

2.3.16 EQU

ｼﾝﾎﾞﾙ EQU 式
EQUは式の値をｼﾝﾎﾞﾙに設定します。式が外部参照記号であったなら、ｴﾗｰとなります。またｼﾝﾎﾞﾙが既に定義されていたならばMｴﾗｰとなります。

 2.3.17 SET DEFL

ｼﾝﾎﾞﾙ SET  式
ｼﾝﾎﾞﾙ DEFL 式
SETはｼﾝﾎﾞﾙが既に定義されている場合にもｴﾗｰとならないということを除いてEQUと同じです。

 2.3.18 .RADIX RADIX

.RADIX 式
RADIX  式
基数の指定がないときはすベての定数に対して10進数が基数です。しかし、.RADIX, RADIXは基数を2, 8, 10および16の任意の基数に変更することができます。
例:
      LD     A,0FFH
      .RADIX 16
      LD     A,0FF
上の例で2つのLD命令は同じものです。.RADIX, RADIXの式は現在の基数に関係なく常に10進数です。


PAGE/$EJECT/FORMLN,.PRINTX/MESSG

2.3.19～20 PAGE/$EJECT/FORMLN,.PRINTX/MESSG

2.3.19 PAGE $EJECT FORMLN

      PAGE   {式}
      $EJECT {式}
      FORMLN {式}
PAGE, $EJECT, FORMLNによりｱｾﾝﾌﾞﾗのﾘｽﾄの出力は新しい(1ﾍﾟｰｼﾞ当りの行数で計られた)ﾍﾟｰｼﾞ･ｻｲｽﾞとなります。また、その値は10～255でなければなりません。標準のﾍﾟｰｼﾞ･ｻｲｽﾞは1ﾍﾟｰｼﾞ50行です。ｱｾﾝﾌﾞﾗはﾍﾟｰｼﾞの終わりに改頁ｺｰﾄﾞ(0CH)を出力します。

 2.3.20 .PRINTX MESSG

      .PRINTX
区切り記号 ﾃｷｽﾄ 区切り記号
      MESSG
区切り記号 ﾃｷｽﾄ 区切り記号
.PRINT, MESSGの後で最初に出てきたﾌﾞﾗﾝｸ以外の文字が区切り記号となります。それに続くﾃｷｽﾄはもう1つの区切り文字までであり、ｱｾﾝﾌﾞﾙの間にｺﾝｿｰﾙに出力します。.RRINTX, MESSGは長いｱｾﾝﾌﾞﾙの間の進行状態を表示したり、条件つきｱｾﾝﾌﾞﾙのｽｨｯﾁの値を表示するのに有効です。.PRINTXはﾊﾟｽ1とﾊﾟｽ2の両方で有効で、MESSGはﾊﾟｽ2のみ有効です。
例:
      IF    CPM
      MESSG /CPMﾊﾞｰｼﾞｮﾝ/
      ENDIF


ERRCK/ERRCK1/ERRCK2,.REQUEST

2.3.21～22 ERRCK/ERRCK1/ERRCK2,.REQUEST

2.3.21 ERRCK ERRCK1 ERRCK2

      ERRCK  式
      ERRCK1 式
      ERRCK2 式
汎用ｱｾﾝﾌﾞﾗのための命令で式の値が0(ｾﾞﾛ)以外なら何もせず、式の値が0の場合はAｴﾗｰ(ｼﾝﾀｯｸｽ･ｴﾗｰ)を出します。ERRCKはﾊﾟｽ1、ﾊﾟｽ2ともにｴﾗｰ･ﾁｪｯｸを行い、ERRCK1はﾊﾟｽ1のみ、ERRCK2はﾊﾟｽ2のみｴﾗｰ･ﾁｪｯｸを行います。

 2.3.22 .REQUEST (IR80のみ)

      .REQUEST ﾌｧｲﾙ名{,ﾌｧｲﾙ名,…}
.REQUESTはLNK(PROASM-Ⅱﾘﾝｶ)に対し次のように要求します。すなわち未定義参照記号を満たすために、ﾊﾟﾗﾒｰﾀのﾌｧｲﾙ名を探します。ﾊﾟﾗﾒｰﾀ内のﾌｧｲﾙ名はPROASM-Ⅱのﾘﾛｹｰﾀﾌﾞﾙ形式をしていなければなりません。ﾌｧｲﾙ名はﾌｧｲﾙ名の拡張子やﾃﾞｨｽｸ･ﾄﾞﾗｲﾌﾞの指定を含んでいてはなりません。LNKは、その標準として持っている拡張子(.REL)を付け、かつ現在使用しているﾃﾞｨｽｸ･ﾄﾞﾗｲﾌﾞを選択します。


条件付擬似命令

2.3.23 条件付擬似命令

条件付擬似命令には次のものがあります。文字列の両端の<>(角ｶｯｺ)は必要です。
      IF     式
式が0以外なら真
      IFN    式
式が0なら真
      IF1    {式}
ﾊﾟｽ1で式が0以外なら真 (式はｵﾌﾟｼｮﾝ)
      IF2    {式}
ﾊﾟｽ2で式が0以外なら真 (式はｵﾌﾟｼｮﾝ)
      IFLT   式
式が0より小さいなら真
      IFGT   式
式が0より大きいなら真
      IFLE   式
式が0か0より小さいなら真
      IFGE   式
式が0か0より大きいなら真
      IFDEF  ｼﾝﾎﾞﾙ
ｼﾝﾎﾞﾙが定義されているなら真
      IFNDEF ｼﾝﾎﾞﾙ
ｼﾝﾎﾞﾙが未定義なら真
      IFB    <文字列>
文字列が空白なら真
      IFNB   <文字列>
文字列が空白でないなら真
      IFIDN  <文字列1>,<文字列2>
文字列1と文字列2が同じなら真
      IFNIDN <文字列1>,<文字列2>
文字列1と文字列2が同じでないなら真
すべての条件付命令は次のような形で用いられます。
例:
   IFxx {変数,ｼﾝﾎﾞﾙ,<文字列>}{,<文字列>}
   …
  {ELSE
   …}
   ENDIF

■
IFxx {変数,ｼﾝﾎﾞﾙ,<文字列>}{,<文字列>}

条件付き命令は255ﾚﾍﾞﾙまで入れ子(nest)にすることができます。どの変数、ｼﾝﾎﾞﾙ、文字列もﾊﾟｽ1で既知になっていなけれぼなりません。評価に式を使用する場合、式は絶対値(ｱﾌﾞｿﾘｭｰﾄ)でなければなりません。

■
ELSE

各条件付擬似命令は、逆の条件が起こったとき、処理を行うELSE擬似命令を伴って使うこともできます。1つのIFに対して1つだけのELSEが許されます。そしてELSEはその最も近いIFに対して作用します。対応する条件付擬似命令のないELSEはCｴﾗｰとなります。

■
ENDIF

各IFはその条件付擬似命令を終わるために、対応するENDIFを持たなければなりません。もしそうでない時は'Unterminated Conditional'ﾒｯｾｰｼﾞがﾊﾟｽ1の最後に表示され、処理を中断します。対応するIFのないENDIFはCｴﾗｰとなります。


ﾘｽﾄ制御擬似命令

2.3.24 ﾘｽﾄ制御擬似命令

PROASM-Ⅱは下記に示す豊富なﾘｽﾄ制御用擬似命令を持っています。

 ■ 一般ﾘｽﾃｨﾝｸﾞ制御

      .LlST
ｱｾﾝﾌﾞﾙ･ﾘｽﾄの出力指定
      LlST
      .XLIST
ｱｾﾝﾌﾞﾙ･ﾘｽﾄの抑止指定
      NLIST
      GEN
ｵﾌﾞｼﾞｪｸﾄ･ｺｰﾄﾞ表示が2行以上の場合の2行目以後の出力指定
      N0GEN
ｵﾌﾞｼﾞｪｸﾄ･ｺｰﾄﾞ表示が2行以上の場合の2行目以後の出力抑止指定

■ 条件ﾘｽﾃｨﾝｸﾞ制御

      .LFC0ND
条件付ｱｾﾝﾌﾞﾙで為となった(ｺｰﾄﾞを生成されない)部分のﾘｽﾄ出力指定
      CLIST
      .SFC0ND
条件付ｱｾﾝﾌﾞﾙで為となった部分のﾘｽﾄ出力抑止指定
      NCLlST

■ ﾏｸﾛ･ﾘｽﾃｨﾝｸﾞ制御

      .LALL
ﾏｸﾛ展開部分のﾘｽﾄ出力指定
      MLIST
      .XALL
ﾏｸﾛ展開部分のｺｰﾄﾞ生成部のみのﾘｽﾄ出力指定
      BLIST
      .SALL
ﾏｸﾛ展開部分の出力抑止指定
      NMLIST

なお、PROASM-Ⅱの最初の状態はすベての出力が可能な状態になっています。(ﾘｽﾄ出力の抑止指定は、全くされていません。)


ﾏｸﾛ/Z80ｲﾝｽﾄﾗｸｼｮﾝ処理切換命令

2.3.25 ﾏｸﾛ/Z80ｲﾝｽﾄﾗｸｼｮﾝ処理切換命令

■ BACK

 ｵﾍﾟﾚｰｼｮﾝ及びｵﾍﾟﾗﾝﾄﾞ部分がZ80のｲﾝｽﾄﾗｸｼｮﾝならびに擬似命令に無い場合、ﾏｸﾛ処理をします(ﾏｸﾛ･ﾃｰﾌﾞﾙの検索を行い、あればﾏｸﾛ展開を行います)。最初はこの状態です。

 ■ FRONT

 BACKとは逆に、まずﾏｸﾛ処理を行い検索できなかった場合、Z80のｲﾝｽﾄﾗｸｼｮﾝならびに擬似命令の処理を行います。

この2つの擬似命令は汎用ｱｾﾝﾌﾞﾗのために設けられた命令で、例えば他のCPUでZ80と同じﾆﾓﾆｯｸを持っている場合にも、FRONT擬似命令を用いることにより、正しくｱｾﾝﾌﾞﾙすることができます。BACK, FRONT擬似命令は汎用ｱｾﾝﾌﾞﾗのためのPROASM-Ⅱ独自の擬似命令です。
例: 8048のRET命令を実現
ｵﾌﾞｼﾞｪｸﾄ ｿｰｽ
RET MACRO
8048のRET命令のﾏｸﾛ定義
    DB    22H
    ENDM

C9
    RET
Z80のRETｺｰﾄﾞを生成
    FRONT
    RET
ﾏｸﾛ定義により8048のRETｺｰﾄﾞを生成
22+
    DB      22H
    END


再配置(ﾘﾛｹｰｼｮﾝ)擬似命令

2.3.26 再配置(ﾘﾛｹｰｼｮﾝ)擬似命令 (IR80のみ)

ﾘﾛｹｰﾀﾌﾞﾙ･ﾓｼﾞｭｰﾙを作る機能は、PROASM-ⅡのIR80の1つの優れた特長です。ﾘﾛｹｰﾀﾌﾞﾙ･ﾓｼﾞｭｰﾙの有利な点はｺｰﾃﾞｨﾝｸﾞがしやすいこと、ﾓｼﾞｭｰﾙ単位で開発できること、大きなｵﾌﾞｼﾞｪｸﾄでも迅速なﾃｽﾄとﾃﾞﾊﾞｯｸﾞと修正ができることにあります。ﾘﾛｹｰﾀﾌﾞﾙ領域を選ぶ擬似命令はCSEGとDSEGです。ASEG擬似命令はﾘﾛｹｰﾀﾌﾞﾙでない(ｱﾌﾞｾﾘｭｰﾄ:絶対)ｺｰﾄﾞをつくるために使われます。COMMON擬似命令はそのﾌﾟﾛｸﾞﾗﾑ内で名付けられたすベてのｺﾓﾝ･ﾌﾞﾛｯｸに対して、ｺﾓﾝ･ﾃﾞｰﾀ領域をつくります。

 PROASM-Ⅱ(IR80)は標準ﾓｰﾄﾞでﾘﾛｹｰﾀﾌﾞﾙなｺｰﾄﾞをつくります。つまり、ｱｾﾝﾌﾞﾙは自動的にCSEGが実行された状態で始まり、ｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞ内におけるﾛｹｰｼｮﾝ･ｶｳﾝﾀは、ﾒﾓﾘのｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄ内ﾛｹｰｼｮﾝ0を指しています。その後に続くすべての命令はDSEGまたは、COMMON擬似命令のいずれかが実行されるまでｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄ内にｱｾﾝﾌﾞﾙされます。例えば、DSEGに出会うとﾛｹｰｼｮﾝ･ｶｳﾝﾀにはﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄ内のﾛｹｰｼｮﾝ0がｾｯﾄされます。そしてそれに続くｺｰﾄﾞはﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞにｱｾﾝﾌﾞﾙされます。つまりﾒﾓﾘ内のﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄ内に割り付けられます。もしその続きにCSEGがあれば、ﾛｹｰｼｮﾝ･ｶｳﾝﾀはｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄ内の次のﾛｹｰｼｮﾝに戻ります。ASEG, DSEG, CSEG擬似命令はｵﾍﾟﾗﾝﾄﾞを持ちません。現在のﾛｹｰｼｮﾝ･ｶｳﾝﾀの値を変えるためにはORG擬似命令を使います。

 ■ ORG擬似命令

 どんな時点でも、ORGの使用によってﾛｹｰｼｮﾝ･ｶｳﾝﾀの値を変えることができます。ORGｽﾃｰﾄﾒﾝﾄの形式を次に示します。
      ORG 式
式の値は現在のﾓｰﾄﾞでのﾛｹｰｼｮﾝ･ｶｳﾝﾀの新しい値です。式で使われるすべてのｼﾝﾎﾞﾙはﾊﾟｽ1で既知になっていなければなりません。そして式の値はｱﾌﾞｿﾘｭｰﾄでなければなりません。
例:
      DSEG
      ORG  50
この例は、ﾒﾓﾘ内のﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ｾｸﾞﾒﾝﾄの開始点から相対的に50番目にﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ﾛｹｰｼｮﾝ･ｶｳﾝﾀをｾｯﾄすることを意味しています。


ﾛｰﾄﾞ前の再配置

2.3.27 ﾛｰﾄﾞ前の再配置

■ .PHASE .DEPHASE

 2つの擬似命令.PHASEと.DEPHASEは実際のﾛｹｰｼｮﾝと異なったﾛｹｰｼｮﾝにｺｰﾄﾞを生成することができます。
ｱｾﾝﾌﾞﾙ･ﾘｽﾄ ｿｰｽ
0000'
     .PHASE 100H
0100 CD0106
FOO: CALL   BAZ
0103 C30007
     JMP    ZOO
0106 C9
BAZ: RET
     .DEPHASE
0007'C30005
ZOO: JMP    5
.PHASEﾌﾞﾛｯｸ内のすべてのﾗﾍﾞﾙはﾌｪｰｽﾞ領域の先頭番号からのｱﾌﾞｿﾘｭｰﾄな値として処理(定義)されます。しかしながら、ｺｰﾄﾞは現在割付け中の領域(すなわちこの例では0から)に生成されます。そのﾌﾞﾛｯｸ内のｺｰﾄﾞは100Hからの実行形式となっています。但し、ASEG以外で使用すると再配置ｴﾗｰ(Rｴﾗｰ)となります。


ﾏｸﾛ擬似命令

2.3.28 ﾏｸﾛ擬似命令

ﾏｸﾛ擬似命令には次のものがあり、その詳細については、2.4 ﾏｸﾛ機能を参照して下さい。ﾊﾟﾗﾒｰﾀ付きﾏｸﾛ及び値のﾏｸﾛは汎用ｱｾﾝﾌﾞﾗのためのPROASM-Ⅱ独自のﾏｸﾛ命令です。

 ■ ﾘﾋﾟｰﾄ擬似命令

REPT～ENDR
指定された回数だけ繰り返し展開
IRP ～ENDR
引数の数だけ繰り返し展開
IRPC～ENDR
引数の文字数だけ繰り返し展開

■ ﾏｸﾛ定義
ﾏｸﾛ名
 MACRO～ENDM
通常のﾏｸﾛ定義
ﾏｸﾛ名 引数,…
 MACRO～ENDM
ﾊﾟﾗﾒｰﾀ(引数)付きﾏｸﾛ定義
{ﾏｸﾛ名}
 MACRO～ENDM
値のﾏｸﾛ定義


その他の擬似命令

2.3.29 その他の擬似命令

■ INCLUDE

      INCLUDE ﾌｧｲﾙ名
INCLUDE擬似命令は、ﾌｧｲﾙ名で指定したｿｰｽ･ﾌﾟﾛｸﾞﾗﾑ･ﾌｧｲﾙを挿入します。挿入されたｿｰｽ･ﾌﾟﾛｸﾞﾗﾑはそのままｱｾﾝﾌﾞﾙされ、初めからｿｰｽ･ﾌﾟﾛｸﾞﾗﾑに含まれていたかのようにｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙに出力されます。INCLUDE擬似命令は、単にｿｰｽ･ﾌﾟﾛｸﾞﾗﾑを分割するために用いられるだけでなく、ﾌﾟﾛｸﾞﾗﾑの記述を簡略化するためもに利用されます。あらかじめ作成された標準的な各種の定義やﾏｸﾛ定義ﾌｧｲﾙをINCLUDE擬似命令によって挿入すれば、個々のﾌﾟﾛｸﾞﾗﾑではいろいろな定義を省略することができます。また、複数のﾓｼﾞｭｰﾙで共通な各種の定義を1つのﾌｧｲﾙとして共有しておけば、ﾓｼﾞｭｰﾙの管理を容易にすることもできます。 さらにPROASM-Ⅱでは、INCLUDE擬似命令によってZ80以外のCPU(標準で8085, 8048, 8051, 630X, 6809, HD64180)ﾏｸﾛ･ﾗｲﾌﾞﾗﾘを読み込むことにより汎用ﾏｸﾛ･ｱｾﾝﾌﾞﾗとして機能することができます。

 ■ LOCAL (ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ･ｺﾝﾄﾛｰﾙ)

 LOCAL擬似命令は、あるﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸへの範囲を定めたいときに使用します。LOCAL擬似命令によって以前に定義されたすべてのﾛｰｶﾙ･ｼﾝﾎﾞﾙは無効となり、新しいﾛｰｶﾙ･ｼﾝﾎﾞﾙが定義可能となります。つまり、LOCAL擬似命令によって、ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸを変更することができます。下記にﾛｰｶﾙ･ｼﾝﾎﾞﾙとLOCAL擬似命令の使用法を示します。
例:
AAA:
新ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ
1$:  JP    2$
2$は同じﾌﾞﾛｯｸ内存在
2$:  JP    1$
最初の1$ヘｼﾞｬﾝﾌﾟ
     LOCAL
新ﾛｰｶﾙ･ｼﾝﾎﾞﾙ･ﾌﾞﾛｯｸ
     JP    1$
2番目の1$ヘｼﾞｬﾝﾌﾟ
1$:  JP    2$
ｴﾗｰ (2$はこのﾌﾞﾛｯｸ内では定義されていない)
BBB: JP    1$
ｴﾗｰ (新ﾌﾞﾛｯｸがここで開始し1$は定義されていない)

■ DB09擬似命令

      DB09	lmm,Direct,lndex,Extend{,SW}
lmm | 6809/630Xのｲﾐﾃﾞｨｴｲﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ | 16進形式
Direct | 6809/630Xのﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ | 16進形式
Index | 6809/630Xのｲﾝﾃﾞｯｸｽ･ｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ | 16進形式
Extend | 6809/630Xのｴｸｽﾃﾝﾄﾞ･ｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ | 16進形式
SW
なし | 6809の 8ﾋﾞｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
1 | 6809の16ﾋﾞｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
2 | 630Xの 8ﾋﾞｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
3 | 630Xの16ﾋﾞｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
6809/630Xの4種のｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞにより変化するｵﾌﾞｼﾞｪｸﾄをｻﾎﾟｰﾄしています。6809の多くの命令をPROASM-Ⅱのﾏｸﾛのみで記述すると非常に膨大なﾏｸﾛ･ﾗｲﾌﾞﾗﾘを必要とし、十分な速度を期待できません。そこで本命令が、6809/630Xのために使用されます。
例: DB09による6809の全ｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ
0000		adca	macro	x,y
0000			db09	89,99,a9,b9
0000			endm
0000
0000			blist
0000
0080		Imm	EQU	$80
FFFF		Disp	EQU	-$1
1234		Extnd	EQU	$1234
00F0		Direct	EQU	$f0
0000
0000  8980    +		ADCA	#lmm
0002  A98D0000+		ADCA	$+4,PCR
0006  A98C00  +		ADCA	!$+3,PCR
0009  A98CFD  +		ADCA	!$,PCR
000C  A97F    +		ADCA	!!Disp,S
000E  A95F    +		ADCA	!!Disp,U
0010  A91F    +		ADCA	!!Disp,X
0012  A93F    +		ADCA	!!Disp,Y
0014  99F0    +		ADCA	!Direct
0016  A9E8FF  +		ADCA	!Disp,S
0019  A9C8FF  +		ADCA	!Disp,U
001C  A988FF  +		ADCA	!Disp,X
001F  A9A8FF  +		ADCA	!Disp,Y
0022  A9E4    +		ADCA	,S
0024  A9C4    +		ADCA	,U
0026  A984    +		ADCA	,X
0028  A9A4    +		ADCA	,Y
002A  A9E3    +		ADCA	--S
002C  A9C3    +		ADCA	--U
002E  A983    +		ADCA	--X
0030  A9A3    +		ADCA	--Y
0032  A9E2    +		ADCA	-S
0034  A9C2    +		ADCA	-U
0036  A982    +		ADCA	-X
0038  A9A2    +		ADCA	-Y
003A  A9E6    +		ADCA	A,S
003C  A9C6    +		ADCA	A,U
003E  A986    +		ADCA	A,X
0040  A9A6    +		ADCA	A,Y
0042  A9E5    +		ADCA	B,S
0044  A9C5    +		ADCA	B,U
0046  A985    +		ADCA	B,X
0048  A9A5    +		ADCA	B,Y
004A  A9EB    +		ADCA	D,S
004C  A9CB    +		ADCA	D,U
004E  A98B    +		ADCA	D,X
0050  A9AB    +		ADCA	D,Y
0052  B91234  +		ADCA	Extnd
0055  A98Dl1DB+		ADCA	Extnd,PCR
0059  A9E91234+		ADCA	Extnd,S
005D  A9C91234+		ADCA	Extnd,U
0061  A9891234+		ADCA	Extnd,X
0065  A9A91234+		ADCA	Extnd,Y
0069  A9E0    +		ADCA	S+
006B  A9E1    +		ADCA	S++
006D  A9C0    +		ADCA	U+
006F  A9C1    +		ADCA	U++
0071  A980    +		ADCA	X+
0073  A981    +		ADCA	X++
0075  A9A0    +		ADCA	Y+
0077  A9A1    +		ADCA	Y++
0079  A99D0000+		ADCA	[$+4,PCR]
007D  A99C00  +		ADCA	[!$+3,PCR]
0080  A99CFD  +		ADCA	[!$,PCR]
0083  A9F8FF  +		ADCA	[!Disp,S]
0086  A9D8FF  +		ADCA	[!Disp,U]
0089  A998FF  +		ADCA	[!Disp,X]
008C  A9B8FF  +		ADCA	[!Disp,Y]
008F  A9F4    +		ADCA	[,S]
0091  A9D4    +		ADCA	[,U]
0093  A994    +		ADCA	[,X]
0095  A9B4    +		ADCA	[,Y]
0097  A9F3    +		ADCA	[--S]
0099  A9D3    +		ADCA	[--U]
009B  A993    +		ADCA	[--X]
009D  A9B3    +		ADCA	[--Y]
009F  A9F6    +		ADCA	[A,S]
00A1  A9D6    +		ADCA	[A,U]
00A3  A996    +		ADCA	[A,X]
00A5  A9B6    +		ADCA	[A,Y]
00A7  A9F5    +		ADCA	[B,S]
00A9  A9D5    +		ADCA	[B,U]
00AB  A995    +		ADCA	[B,X]
00AD  A9B5    +		ADCA	[B,Y]
00AF  A9FB    +		ADCA	[D,S]
00B1  A9DB    +		ADCA	[D,U]
00B3  A99B    +		ADCA	[D,X]
00B5  A9BB    +		ADCA	[D,Y]
00B7  A99D1179+		ADCA	[Extnd,PCR]
00BB  A9F91234+		ADCA	[Extnd,S]
00BF  A9D91234+		ADCA	[Extnd,U]
00C3  A9991234+		ADCA	[Extnd,X]
00C7  A9B91234+		ADCA	[Extnd,Y]
00CB  A99F1234+		ADCA	[Extnd]
00CF  A9F1    +		ADCA	[S++]
00D1  A9D1    +		ADCA	[U++]
00D3  A991    +		ADCA	[X++]
00D5  A9B1    +		ADCA	[Y++]
00D7			end

■ KILL疑似命令

 Z80のﾆﾓﾆｯｸ(例LD A,B、N0P等)の検索を行いません。もう一度KILL命令を書くと検索を行います。他のｱｾﾝﾌﾞﾗを作成するときに使用します。8085.LIB,64180.LIB使用時は、ﾏｸﾛ中でZ80の命令に展開しているためにKILL疑似命令を指定しないで下さい。

 ■ 文字の置換

 ﾏｸﾛのﾊﾟﾗﾒｰﾀと一致するﾏｸﾛ内の文字は、すベてﾏｸﾛ展開時に置換されます。一致する文字列はすべて置換されてしまうので、1文字のﾊﾟﾗﾒｰﾀは、避けるようにして下さい。
例:
TEST    MACRO NX
TESTNX: PUSH  B
        LXI   B,NX
        JMP   ERROR
        ENDM
この例でTEST STARTは次のように展開されます。
TESTSTART: PUSH    B
           LXI     B,START
           JMP     ERROR
           ENDM

■ &

 &は、続くｼﾝﾎﾞﾙを10進数に変換します。
例:
LABEL MACRO NX
LABELのﾏｸﾛ定義
ZZNX: DB    NX
      ENDM
DEF   MACRO NX
LAB   SET   0
      REPT  NX
LAB   SET   LAB+1
      LABEL &LAB
LABの値を10進規制
      ENDR
      ENDM
この例でDEF 3は、次のように展開されます。
ZZ1: DB 1
ZZ2: DB 2
ZZ3: DB 3


ﾏｸﾛ機能

2.4 ﾏｸﾛ機能

PROASM-Ⅱは非常に柔軟性に富み、強力なﾏｸﾛ機能を持っています。PROASM-Ⅱではﾏｸﾛ機能の働きに2つの大きな意味があります。そのひとつは、ﾌﾟﾛｸﾞﾗﾏがｱｾﾝﾌﾞﾗのﾌﾟﾛｸﾞﾗﾐﾝｸﾞ環境を整えることができる機能を提供することです。このことによりｱｾﾝﾌﾞﾗの核をﾏｸﾛにより包み隠し、より高いﾚﾍﾞﾙでのﾌﾟﾛｸﾞﾗﾐﾝｸﾞを可能とし、ｿﾌﾄｳｪｱ開発の能率を上げることができます。もうひとつは、PROASM-Ⅱ独自のﾏｸﾛ機能でZ80以外のCPU(8048, 8051, 8085, 6809等)のｱｾﾝﾌﾞﾗとして(つまり、汎用ﾏｸﾛ･ｱｾﾝﾌﾞﾗとして)利用するためのﾏｸﾛです。それは、ﾊﾟﾗﾒｰﾀ付きﾏｸﾛ、値のﾏｸﾛ、柔軟な文字列操作であり、各CPUの命令ｾｯﾄを記述することができます。
2.4.1 ﾘﾋﾟｰﾄ擬似命令
2.4.2 ﾏｸﾛ定義


ﾘﾋﾟｰﾄ擬似命令

2.4.1 ﾘﾋﾟｰﾄ擬似命令

PROASM-Ⅱには次の3種類のﾘﾋﾟｰﾄ擬似命令があります。
REPT ～ ENDR
指定された回数だけ繰り返して展開します。
IRP  ～ ENDR
引数の数だけ繰り返して展開します。
IRPC ～ ENDR
引数の文字数だけ繰り返して展開します。
これらのﾘﾋﾟｰﾄ擬似命令は、単独でも、ﾏｸﾛ定義のなかでも自由に用いることができます。ﾏｸﾛは最大15ﾚﾍﾞﾙまでﾈｽﾃｨﾝｸﾞすることが可能です。

 ■ REPT

      REPT 式
      …
      ENDR
REPT(REPEAT)擬似命令は引数のない単純な繰り返しに用いられ、REPT～ENDRの間にあるｿｰｽ行を式の回数だけ繰り返しｱｾﾝﾌﾞﾙします。また、式はﾘﾛｹｰﾀﾌﾞﾙ、外部参照のｼﾝﾎﾞﾙが含まれてはいけません。式の結果はｱﾌﾞｿﾘｭｰﾄでなければなりません。
例:
  REPT 5
連続する5ﾊﾞｲﾄに0を入れます。
  DEFB 0
  ENDR

■ IRP

      IRP  ﾀﾞﾐｰ,<{引数}{,…}>
      …
      ENDR
IRP擬似命令は複数の文字列を引数として持つ繰り返しに用いられ、IRP～ENDRの間にあるｿｰｽ行をすべての引数がﾀﾞﾐｰと置き換わるまで繰り返しｱｾﾝﾌﾞﾙします。引数は<>(角ｶｯｺ)でくくられていなければなりません。また、引数は最大10引数まで使用できます。
例:
  IRP  ARG,<HEL,LO>
  DB   'ARG'
  ENDR
は次の行を生成します。
  DB ' HEL'
  DB ' LO'

■ IRPC

      IRPC ﾀﾞﾐｰ,文字列
      …
      ENDR
IRPC擬似命令は文字列を引数として持ち、その1文字ずつが操作の対象となります。IRPC～ENDRの間にあるﾌﾞﾛｯｸを文字列の文字を1文字ずつ文字回数繰り返してﾀﾞﾐｰと置き換えｱｾﾝﾌﾞﾙを行います。
例:
  IRPC ARG,ABCD
  DB   'ARG'
  ENDR
は次の行を生成します。
  DB 'A'
  DB 'B'
  DB 'C'
  DB 'D'


ﾏｸﾛ定義

2.4.2 ﾏｸﾛ定義

ﾕｰｻﾞ･ﾏｸﾛを作成するためには次のような命令があります。
ﾏｸﾛ名
 MACRO～ENDM
通常のﾏｸﾛ定義
ﾏｸﾛ名 引数,…
 MACRO～ENDM
ﾊﾟﾗﾒｰﾀ(引数)付きﾏｸﾛ定義
{ﾏｸﾛ名}
 MACRO～ENDM
値のﾏｸﾛ定義
ﾕｰｻﾞがﾏｸﾛを使用する場合、前もってﾏｸﾛ定義をしておかなければなりません。このため、通常、ﾏｸﾛ定義ﾌｧｲﾙをINCLUDE命令で取り込んでおく必要があります。ﾏｸﾛは最大15ﾚﾍﾞﾙまでﾈｽﾃｨﾝｸﾞすることができます。ﾊﾟﾗﾒｰﾀ付きﾏｸﾛ、値のﾏｸﾛはPROASM-Ⅱ独自のﾏｸﾛで汎用ﾏｸﾛ･ｱｾﾝﾌﾞﾗとして利用する場合に有効な擬似命令です。

■ 通常のﾏｸﾛ

 ﾏｸﾛ定義は次のように行います。
ﾏｸﾛ名
 MACRO {仮引数,…}
 ENDM
ﾏｸﾛ名 | ﾏｸﾛ定義すべきﾏｸﾛ名
仮引数 | ﾀﾞﾐｰの引数でﾏｸﾛ展開を行うことによりﾏｸﾛ本体部で実引数に置き換えられる。
ﾏｸﾛ定義はMACRO擬似命令で始まりENDM擬似命令で終わります。その間の命令の集まりをﾏｸﾛ本体部と呼びます。MACRO擬似命令とENDM擬似命令とは1対1で対応していなければなりません。通常のﾏｸﾛの呼び出し方法は次の形式です。
ﾏｸﾛ名
 {実引数,…}
この時、実引数はﾏｸﾛ定義の仮引数と左から順に対応し、ﾏｸﾛ本体部で使用している仮引数はすベて対応する実引数と置き換えられます。もし、実引数が仮引数より少ない場合は、ﾇﾙ(空白)と置き換えられます。ｶﾝﾏやｽﾍﾟｰｽ等を含んだ文字列を渡すには特殊文字列を用いることにより可能です。
      ABC 1,2,3,4,5
実引数が5つ
      ABC <1,2,3>,<4,5>
実引数が2つ
例: ﾏｸﾛ定義、ﾏｸﾛ展開
0000'           mac1 macro %a,%b,%c
ﾏｸﾛ定義
0000'                DB    '名前 %a'
0000'                DB    '住所 %b'
0000'                DB    '電話 %c'
0000'                endm
0000'
0000'                mac1  ｷｮｳﾄﾏｲｸﾛｺﾝﾋﾟｭｰﾀ,ｷｮｳﾄｼ,(075)632-0592
ﾏｸﾛ呼出し
0000' 96BC914F+      DB    '名前 ｷｮｳﾄﾏｲｸﾛｺﾝﾋﾟｭｰﾀ'
ﾏｸﾛ展開
0004' 20B7AEB3+
0008' C4CFB2B8+
000C' DBBADDCB+
0010' DFADB0C0+
0014' 8F5A8F8A+      DB     '住所 ｷｮｳﾄｼ'
0018' 20B7AEB3+
001C' DBBC    +
001E' 93644F43+      DB     '電話 (075)632-0592'
0021' 20283037+
0025' 35293633+
0029' 32B03035+
002D' 3932    +
002F'                end
注意: PROASM-Ⅱは漢字、ｶﾀｶﾅも使用できます。
例: ﾏｸﾛのﾈｽﾃｨﾝｸﾞ
0000'
0000'      iwasaki macro
0000'              kmc
0000'              kmc
0060'              endm
0000'
0000'      kmc     macro
0000'              hal
0000'              hal
0000'              endm
0000'
0000'      hal     macro
0000'              nop
0000'              endm
0000'
0000'              iwasaki
iwasakiﾏｸﾛ展開
0000'    +         kmc
kmcﾏｸﾛ展開
0000'    +         hal
halﾏｸﾛ展開
0000'00  +         nop
0001'    +         hal
0001'00  +         nop
0002'    +         kmc
0002'    +         hal
0002'00  +         nop
0003'    +         hal
0003'00  +         nop
0004'
0004'              end
注意: ﾏｸﾛは最大15ﾚﾍﾞﾙまでﾈｽﾃｨﾝｸﾞ可能です。
例: ﾏｸﾛの再定義
0000'           abc macro
abcのﾏｸﾛ定義
0000'               DB    'ABC macro set'
0000'               endm
0000'
0000'               abc
abcのﾏｸﾛ展開
0000' 41424320+     DB      'ABC macro set'
0004' 6D616372+
0008' 6F207365+
000C' 74      +
000D'
000D'           abc macro
新しいabcのﾏｸﾛ定義
000D'               DB    'NEW ABC macro set'
000D'               endm
000D'
000D'               abc
新しいabcのﾏｸﾛ展開
000D' 4E455720+     DB    'NEW ABC macro set'
0011' 41424320+
0015' 6D616372+
0019' 6F207365+
001D' 74      +
001E'
001E'               end

■ 値のﾏｸﾛ

 値のﾏｸﾛ定義は次のように行います。
{ﾏｸﾛ名}
 MACRO
文字列1
 =
 式
文字列2
 =
 式
 ENDM
ﾏｸﾛ名 | 値のﾏｸﾛ名
文字列 | 値のﾏｸﾛのﾊﾟﾀｰﾝﾁｪｯｸ用の文宇列(空白でも可)
式 | 各文字列に対する値(16ﾋﾞｯﾄ)この値はﾊﾟｽ1で決まらなければいけません。
値のﾏｸﾛで定義されたものはｱｾﾝﾌﾞﾗの式の処理のどこに現れてもかまいません。値のﾏｸﾛの呼び出し方法は2種類あり、次の形式で行います。
{ﾏｸﾛ名=文字列}
{ﾏｸﾛ名:文宇列}
文宇列が値のﾏｸﾛで定義された文宇列と一致する場合その式の値を返します。文宇列が一致しなかった時、ｲｺｰﾙ記号=によるﾏｸﾛ呼び出しの場合はｱｾﾝﾌﾞﾗがｼﾝﾀｯｸｽ･ｴﾗｰ(Aｴﾗｰ)を出します。:(ｺﾛﾝ)によるﾏｸﾛ呼び出しの場合は、-1(0FFFFH)の値を返します。
例:
0000,       {r1} macro
値のﾏｸﾛ定義
0000'       b    =     0

0000'       c    =     8h

0000'       d    =     10h

0000'       e    =     18h

0000'       h    =     20h

0000'       l    =     28h

0000'       m    =     30h

0000'       a    =     38h

0000'            endm

0000'

0000'            inr   macrox
8051のINR命令のﾏｸﾛ定義
0000'            DB    4+{r1=x}

0000'            endm

0000'

0000'            inr   a

0000' 3C  +      DB    4+{r1=A}
値のﾏｸﾛにより38Hが帰り、その結果3CHのｺｰﾄﾞを生成
0001'

0001'            blist

0001'

0001'            inr   b

0001' 04  +

0002'            inr   c

0002' 0C  +

0003'            inr   d

0003' 14  +

0004'            inr   e

0004' 1C  +

0005'            inr   h

0005' 24  +

0006'            inr   l

0006' 2C  +

0007'            inr   m

0007' 34  +

0008'

0008'            end

■ ﾊﾟﾗﾒｰﾀ(引数)付ﾏｸﾛ

 ﾊﾟﾗﾒｰﾀ付ﾏｸﾛのﾏｸﾛ定義は次のように行います。
<ﾏｸﾛ名 {引数,…}>
 MACRO {仮引数,…}
 ENDM
ﾏｸﾛ名 | ﾊﾟﾗﾒｰﾀ付ﾏｸﾛ名
引数 | ﾊﾟﾀｰﾝ一致検査用のﾊﾟﾗﾒｰﾀ。ただし、ｱｽﾀﾘｽｸ(*)は全ﾊﾟﾀｰﾝと一致します。また、ﾊﾟﾗﾒｰﾀ付ﾏｸﾛを引数の中に書くことができます。そのときは、ﾊﾟﾗﾒｰﾀ付ﾏｸﾛ内のﾗﾍﾞﾙと一致したときのみﾏｸﾛを展開します。
仮引数 | ﾏｸﾛの仮引数で少なくとも引数の数より多くなければいけません。
従来のﾏｸﾛ定義では、ﾏｸﾛ名の部分だけしかﾏｸﾛとして定義できませんでした。このﾊﾟﾗﾒｰﾀ付ﾏｸﾛは引数もﾏｸﾛ名の一部として定義することが可能となっています。このことにより同じﾏｸﾛ名で引数が変化するような場合にも対応できるようになっています。ﾊﾟﾗﾒｰﾀ付ﾏｸﾛの呼び出し方法は、通常のﾏｸﾛと同じく次の形式です。ただし、引数部のﾊﾟﾀｰﾝ検査も行います。
ﾏｸﾛ名
{実引数,…}
注意: ﾊﾟﾗﾒｰﾀ付ﾏｸﾛまたは通常のﾏｸﾛにて、同じﾏｸﾛ名で複数個ﾏｸﾛ定義する場合は、先に定義したものより一致の検査を行います。
8051のMOV命令をﾊﾟﾗﾒｰﾀ付ﾏｸﾛで実現した例を次に示します。
例:
0000'       {reg0} macro
0000'       R0     =     0
0000'       R1     =     1
0000'       R2     =     2
0000'       R3     =     3
0000'       R4     =     4
0000'       R5     =     5
0000'       R6     =     6
0000'       R7     =     7
0000'              endm
0000'
0000'       <mov a,reg0> macro x,y
8051のMOV命令の一部
0000'              DB    0E8H={reg0=y}
0000'              endm
0000'
0000'       <mov reg0,a> macro x,y
0000'              DB    0E8H+{reg0=x}
0000'              endm
0000'
0000'              MOV   R0,A
ﾏｸﾛ展開
0000' F8  +        DB    0F8H+{reg0=R0}
0001'
0001'              MOV   A,R7
0001' EF  +        DB    0E8H+{reg0=R7}
0002'
0002'              end
注意: <mov a,{reg0}>の部分を<mov a,r*>としても可能ですが、mov a,directの命令においてrを使用するﾗﾍﾞﾙは使えなくなります。


ﾘｽﾄの形式

2.5 ﾘｽﾄの形式(.PRN)

PROASM-Ⅱは、ﾘｽﾄの各ﾍﾟｰｼﾞに関して最初の2行は次の形式です。
{TITLEﾃｷｽﾄ}  IA80 Ver X.X 1985 by lWASAKI/K.M.C PAGE x
{SUBTTLﾃｷｽﾄ}
・ | TITLEﾃｷｽﾄは、もしｿｰｽ･ﾌﾟﾛｸﾞﾗﾑの中でTITLEが与えられていれば、TITLE擬似命令で与えられた方のﾃｷｽﾄです。
・ | xはﾍﾟｰｼﾞ数で、これはｿｰｽ･ﾌｧｲﾙで改頁がなされたときに1つ増えます。
・ | SUBTTLﾃｷｽﾄは、ｿｰｽ･ﾌｧｲﾙ中で1つのｻﾌﾞﾀｲﾄﾙが指定してあればSUBTTL擬似命令によって与えられるﾃｷｽﾄです。
上記の最初の行に続いて次に空白がﾌﾟﾘﾝﾄされます。PROASM-Ⅱのﾘｽﾄの出力の行は、次の形式です。
{ｴﾗｰ} ﾛｹｰｼｮﾝ XX  XXXX…  ｿｰｽ行
もしその行にｴﾗｰがある場合は、先頭に1桁のｴﾗｰ･ｺｰﾄﾞ、その後に1空白が表示されます。ｴﾗｰがなけれぼ空白がﾌﾟﾘﾝﾄされます。次にﾛｹｰｼｮﾝ･ｶｳﾝﾀの値がﾌﾟﾘﾝﾄされます。IR80ではﾛｹｰｼｮﾝ･ｶｳﾝﾀの最後の桁はﾓｰﾄﾞを表しています。それは次の記号の1つです。
'
ｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ
"
ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ
!
ｺﾓﾝ･ﾘﾗﾃｨﾌﾞ
<空白>
ｱﾌﾞｿﾘｭｰﾄ
次に1つの空白を置いてｱｾﾝﾌﾞﾙされたｺｰﾄﾞがﾌﾟﾘﾝﾄされます。残りは入力されたｿｰｽ行です。


ｼﾝﾎﾞﾙ･ﾃｰﾌﾞﾙ･ﾘｽﾄの形式

2.6 ｼﾝﾎﾞﾙ･ﾃｰﾌﾞﾙ･ﾘｽﾄの形式(.$SY)

ｼﾝﾎﾞﾙ･ﾃｰﾌﾞﾙ･ﾘｽﾄでは、ｼﾝﾎﾞﾙの値に続きｼﾝﾎﾞﾙ名が各ｾｸﾞﾒﾝﾄ別にｱﾙﾌｧﾍﾞｯﾄ順でﾘｽﾄされます。ｼﾝﾎﾞﾙ値は、4桁でﾘｽﾄされ、その後に1桁のﾓｰﾄﾞを示す記号が付加されます。それは、次の記号の1つです。
*
外部参照記号
<空白>
ｱﾌﾞｿﾘｭｰﾄ
'
ｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ
"
ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ
!
ｺﾓﾝ･ﾘﾗﾃｨﾌﾞ
また、ｺﾓﾝ･ﾌﾞﾛｯｸには、ｺﾓﾝ名がﾘｽﾄされます。


汎用ｱｾﾝﾌﾞﾗ

2.7 汎用ｱｾﾝﾌﾞﾗ

PROASM-Ⅱは、Z80のｱｾﾝﾌﾞﾗとしての機能だけでなく、非常に強力なPROASM-Ⅱ独自のﾏｸﾛ機能や文字列操作機能などにより、Z80以外のCPUのｱｾﾝﾌﾞﾗとして使用できるように設計されています。(PROASM-Ⅱには8085, 8048, 8051, 630X, 6809, HD64180用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘが用意されています)

 Z80以外のCPUのｱｾﾝﾌﾞﾗとして使用するためには、各CPUの命令をﾏｸﾛ定義しておき、命令ｺｰﾄﾞの生成はすべてﾏｸﾛ展開によって行います。この方法は、従来のｱｾﾝﾌﾞﾗでも行われてきました。しかし次に示すような問題点がありました。
■ | ｱｾﾝﾌﾞﾗの本来もっている命令と同じﾆﾓﾆｯｸでは、ﾏｸﾛ定義できない。例えばRET命令は、8080,Z80が0C9H、8048,8051が22Hとなり問題が生じますが、PROASM-Ⅱでは、FRONT, BACK命令またはKILL疑似命令によりこの問題を解決しています。
■ | 同じﾆﾓﾆｯｸで引数のﾊﾟﾀｰﾝにより生成ｺｰﾄﾞを変えることができない。例えばMOV A,R0とMOV A,@R0を区別できないがあります。PROASM-Ⅱでは、値のﾏｸﾛ、ﾊﾟﾗﾒｰﾀ付ﾏｸﾛ命令によりこの問題を解決しています。
■ | 文字列の扱いが貧弱で文字列を分離して扱えない。例えばADP A,#15の場合、#と15を分離して処理する必要があります。PROASM-Ⅱでは、特殊文字列により柔軟な文字列操作を行うことができます。
■ | ﾏｸﾛの処理が遅すぎてあまり実用的でない。PROASM-Ⅱでは、ﾗﾍﾞﾙ、ﾏｸﾛ、ﾆﾓﾆｯｸの検索として非常に高速な条件付きﾊｯｼｭ法を使用しており、従来のｸﾛｽ･ｱｾﾝﾌﾞﾗと同等またはそれ以上の高速処理を実現しています。

2.7.1 汎用ｱｾﾝﾌﾞﾗの使用方法

ここではPROASM-Ⅱに標準装備されている5種類のCPU用ﾏｸﾛ･ﾗｲﾌﾞﾗﾘの使用方法と注意事項をあげます。PROASM-Ⅱは8085, 8048, 8051, 6809, 630X用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘが用意されています。各ﾏｸﾛ･ﾗｲﾌﾞﾗﾘをINCLUDE命令により各ｿｰｽ･ﾌｧｲﾙをｱｾﾝﾌﾞﾙする時に読み込むことによりPROASM-Ⅱは各CPUのｸﾛｽ･ﾏｸﾛ･ｱｾﾝﾌﾞﾗとして機能します。
C:>IA80 SAMPLE /I INCLUDE 6809.LIB
この起動方法で、ｱｾﾝﾌﾞﾗのIｵﾌﾟｼｮﾝによりINCLUDE 6809を実行することで、6809のｸﾛｽ･ｱｾﾝﾌﾞﾗとして機能します。また、SAMPLE.SRCのｿｰｽ･ﾌｧｲﾙの最初にINCLUDE 6809.LIBの行を記述し、次の形式による起動でも、SAMPLEは6809のｿｰｽとみなしｱｾﾝﾌﾞﾙされます。
C:>IA80 SAMPLE
従って、汎用ﾏｸﾛ･ｱｾﾝﾌﾞﾗとしてはFRONT, BACK命令以外のすべての擬似命令は、ﾏｸﾛ機能を含めてすべてZ80のｱｾﾝﾌﾞﾗとして同様に使用することができます。各ﾏｸﾛ･ﾗｲﾌﾞﾗﾘについて説明します。

■ 8085.LIB

 ｲﾝﾃﾙ8085用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。ﾆﾓﾆｯｸはｲﾝﾃﾙ社のｱｾﾝﾌﾞﾗに準拠しています。

 ■ 8048.LIB (IA80のみ)

 ｲﾝﾃﾙの1ﾁｯﾌﾟCPU 8048用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。ﾆﾓﾆｯｸはｲﾝﾃﾙ社のｱｾﾝﾌﾞﾗに準拠しています。また、8048の性質上(条件ｼﾞｬﾝﾌﾟは同一ﾍﾟｰｼﾞ内にしかｼﾞｬﾝﾌﾟできない)ｱﾌﾞｿﾘｭｰﾄでしかｱｾﾝﾌﾞﾙできません。従って、IR80を利用する場合は、必ずASEGを指定する必要があります。

 ■ 8051.LIB

 ｲﾝﾃﾙの1ﾁｯﾌﾟCPU 8051用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。ﾆﾓﾆｯｸはｲﾝﾃﾙ社のｱｾﾝﾌﾞﾗに準拠しています。8051のｼﾞｬﾝﾌﾟ命令のｵﾌﾟﾃｨﾏｲｽﾞは行いません。つまり、CALL,JMPはLCALL,LJMPと同じｺｰﾄﾞを生成します。また、8051のﾋﾞｯﾄ･ｱﾄﾞﾚｽはｱｾﾝﾌﾞﾗの演算子としてｻﾎﾟｰﾄしています。
例:
 ABC EQU 20
.
1
ﾋﾞｯﾄ･ｱﾄﾞﾚｽ演算子

■ 6809.LIB

 ﾓﾄﾛｰﾗ6809用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。ﾆﾓﾆｯｸはﾓﾄﾛｰﾗ社のｱｾﾝﾌﾞﾗに準拠しています。PROASM-Ⅱは2ﾊﾟｽ方式のｱｾﾝﾌﾞﾗであるために、ｵﾍﾟﾗﾝﾄﾞの前に特殊記号'!'を付加することによって、明示的にﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞあるいは8ﾋﾞｯﾄ及び5ﾋﾞｯﾄ･ｵﾌｾｯﾄであることを示さなければなりません。以下にﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ、5ﾋﾞｯﾄ及び8ﾋﾞｯﾄ･ｵﾌｾｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞの例を次に示します。
0000                 INCLUDE 6809.LIB
0000                 List
0000
0000                 List
0000
00F0          Direct EQU     $f0
FFFF          Disp   EQU     -1
0000
0000  99F0  +        ADCA    !Direct
ﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
0002  A988FF+        ADACA   !Disp.X
8ﾋﾞｯﾄ･ｵﾌｾｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
0005  A91F  +        ADACA   !!Disp.X
5ﾋﾞｯﾄ･ｵﾌｾｯﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
0007
0007                 END
6809.LIBの中でPROASM-Ⅱ独自の擬似命令として、次のものがあります。
■ ﾚｼﾞｽﾀに対応するﾋﾞｯﾄ処理を行う擬似命令
ﾗﾍﾞﾙ名
 EQUREG
ﾚｼﾞｽﾀ･ﾘｽﾄ
ﾗﾍﾞﾙ名 | pshs, pshu, puls, puluなどに用いるﾗﾍﾞﾙ
ﾚｼﾞｽﾀ･ﾘｽﾄ | pshs, pshu, puls, puluﾚｼﾞｽﾀ･ﾘｽﾄの定義
例:
REG EQUREG A,B,X
    PSHS   REG
PSHS A,B,Xと等価
■ ﾀﾞｲﾚｸﾄ･ﾍﾟｰｼﾞ指定
      SETDP 式
式 ﾀﾞｲﾚｸﾄ･ﾍﾟｰｼﾞ･ｱﾄﾞﾚｽ
ﾀﾞｲﾚｸﾄ･ﾍﾟｰｼﾞの位置をｱｾﾝﾌﾞﾗに通知します。またﾀﾞｲﾚｸﾄ･ﾍﾟｰｼﾞ、ｴｸｽﾃﾝﾄの自動判別を前方参照に限って行います。Xｵﾌﾟｼｮﾝにより最適化の検査を行い、警告を出力することができます。最適化及び検査は、630Xの時にも使用できます。IR80において6809のﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ、5ﾋﾞｯﾄ、8ﾋﾞｯﾄ･ｵﾌｾｯﾄの値はすべてｱﾌﾞｿﾘｭｰﾄである必要があります。

 ■ 630X.LIB

 日立1ﾁｯﾌﾟCPU 630X用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。ﾆﾓﾆｯｸは日立社のｱｾﾝﾌﾞﾗに準拠しています。6809と同じように明示的にﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞであることを示す必要があります。 IR80を使用する場合630Xのﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞはｱﾌﾞｿﾘｭｰﾄである必要があります。前方参照に限って最適化を行います。
0000               INCLUDE 630X.LIB
0000               list
0000
0000               LIST
0000
00F0        Direct EQU     $F0
0000
0000  99F0+        ADCA    !Direct
ﾀﾞｲﾚｸﾄ･ｱﾄﾞﾚｯｼﾝｸﾞ
0002
0002               END

■ 64180.LIB

 日立HD64180用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘです。このCPUはZ80と上位ｺﾝﾊﾟﾁﾌﾞﾙであるため、64180で拡張された命令のみが定義されています。また、HD64180の64Kﾊﾞｲﾄを超えるｱﾄﾞﾚｽ空間はｻﾎﾟｰﾄされていません。


PROASM-Ⅱのｴﾗｰ

2.8 PROASM-Ⅱのｴﾗｰ

2.8.1 ﾘｽﾄに出力されるｴﾗｰ

PROASM-Ⅱのｴﾗｰはｴﾗｰ行、ｿｰｽ･ﾌｧｲﾙ名、ｴﾗｰ･ｷｬﾗｸﾀを表示します。ｺﾝｿｰﾙにはｴﾗｰがあった場合、ﾘｽﾃｨﾝｸﾞ指定がなされていなくても表示されます。以下にPROASM-Ⅱのｴﾗｰ･ｷｬﾗｸﾀを示します。
ｴﾗｰ･ｷｬﾗｸﾀ | 意味 | 補足
A | 変数ｴﾗｰ、文法的ｴﾗｰ | 擬似命令に対する変数の指定形式が不正か、範囲を超えている。又は、文法的ｴﾗｰ。
C | 条件文の入れｴﾗｰ | .IFのないELSEとか、IFのないENDIFとか、1つのIFに2つのELSEがあるなど。
D | 二重に定義されている記号 | 重複して指定されている記号を参照しようとした。
E | 外部参照記号ｴﾗｰ | 文中で外部参照記号を誤って使っている。
M | 重複して指定された記号 | 重複して記号を定義している。
N | 数のｴﾗｰ | 数の中にｴﾗｰがある。誤った桁がある。
O | 誤ったｵﾍﾟﾚｰｼｮﾝ･ｺｰﾄﾞか疑義のある文法 | ﾌﾞﾛｯｸ外のENDM、LOCAL、名前を持たないSET、EQU及びMACRO。
P | ﾌｪｰｽﾞ･ｴﾗｰ | ﾗﾍﾞﾙまたはEQUの値がﾊﾟｽ1とﾊﾟｽ2で異なっている。
R | 再配置ｴﾗｰ | 例えば、絶対値-相対値のように式の中で誤った再配置の用い方をしている。ﾃﾞｰﾀ、ｺｰﾄﾞおよびｺﾓﾝ領域はﾘﾛｹｰﾀﾌﾞﾙである。
U | 未定義記号 | 式中参照されている記号が未定義である。
V | 値のｴﾗｰ | ﾊﾟｽ1では擬似命令は決まった値を持たねばならないにもかかわらず(例えば、.RADIX, .PAGE, DS, IF, IFEなど)未定義の値を持っている。

2.8.2 ｺﾝｿｰﾙに出力される実行ｴﾗｰ

表示 意味
Could not open source {ﾌｧｲﾙ名}
INCLUDE文で指定したﾌｧｲﾙは無かった。
Directory full
ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ、ﾘｽﾄ･ﾌｧｲﾙあるいはｼﾝﾎﾞﾙ･ﾌｧｲﾙを書き込み時にﾃﾞｨﾚｸﾄﾘが一杯で書き込めなかった。
Error reading source file
ｿｰｽ･ﾌｧｲﾙあるいはINCLUDEﾌｧｲﾙを読み込もうとした時にｴﾗｰが発生した。(ﾌｧｲﾙが無い等)
Error writing source file
ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ、ﾘｽﾄ･ﾌｧｲﾙあるいはｼﾝﾎﾞﾙ･ﾌｧｲﾙを書き込み時にｴﾗｰが発生した。(ﾃﾞｨｽｸが一杯等)
Include nested error (max 3 level)
INCLUDEによるｿｰｽ･ﾌｧｲﾙの読み込みが3ﾚﾍﾞﾙを越えた。
Label buffer full
ﾗﾍﾞﾙ･ﾊﾞｯﾌｧが一杯になった。INSTALLｺﾏﾝﾄﾞによりﾗﾍﾞﾙ･ﾊﾞｯﾌｧ領域を大きくする(CP/M80版)。
Macro buffer full
ﾏｸﾛ･ﾊﾞｯﾌｧが一杯になった。INSTALLｺﾏﾝﾄﾞによりﾏｸﾛ･ﾊﾞｯﾌｧ領域を大きくする(CP/M80版)。
Macro nested error (max 15 level)
ﾏｸﾛのﾈｽﾃｨﾝｸﾞが15ﾚﾍﾞﾙを越えた。
0ut of memory !!
TPAが狭いのでPROASM-Ⅱが実行できない。INSTALLｺﾏﾝﾄﾞによりﾒﾓﾘの使用領域を小さくする。
Untermineted conditional
条件文(if～{else～}endif)が完了していない。
Unterminated REPT/lRP/IRPC/MACR0
ﾏｸﾛのﾌﾞﾛｯｸが完了していない。
{XX} {No} Fatal error(s) {.?? warning(s)}
致命的なｴﾗｰがXX個ある、警告が??個ある。


擬似命令一覧表

2.9 擬似命令一覧表

注意: *はlR80(ﾘﾛｹｰﾀﾌﾞﾙ版)のみｻﾎﾟｰﾄの命令
擬似命令 記述形式 説明
ｱｾﾝﾌﾞﾗ制御
ASEG*
     ASEG
PCﾓｰﾄﾞをｱﾌﾞｿﾘｭｰﾄ･ﾓｰﾄﾞに指定
CSEG*
     CSEG
PCﾓｰﾄﾞをｺｰﾄﾞ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞに指定
DSEG*
     DSEG
PCﾓｰﾄﾞをﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞに指定
C0MM0N*
     C0MM0N   名前
PCﾓｰﾄﾞをｺﾓﾝ･ﾘﾗﾃｨﾌﾞ･ﾓｰﾄﾞに指定
ORG
     ORG      式
ﾛｹｰｼｮﾝ･ｶｳﾝﾀ番地の設定(更新)
.PHASE
     .PHASE   式
.PHASEから.DEPHASEの間のﾌﾟﾛｸﾞﾗﾑを式で指定したｱﾌﾞｿﾘｭｰﾄ番地からのﾌﾟﾛｸﾞﾗﾑとしてｱｾﾝﾌﾞﾙ
.DEPHASE
     .DEPHASE
INCLUDE
     INCLUDE  ﾌｧｲﾙ名
指定ﾌｧｲﾙの読込みを指定
.RADIX/RADIX
     .RADIX   式
式による基数(2,8,10,16進)指定
KILL
     KILL
Z80のﾆﾓﾆｯｸに検索を禁止する/しない
END
     END     {ｼﾝﾎﾞﾙ名}
ﾌﾟﾛｸﾞﾗﾑの終了指定
ｼﾝﾎﾞﾙ定義
EQU
ﾗﾍﾞﾙ EQU      式
ﾗﾍﾞﾙ値の設定
SET/DEFL
ﾗﾍﾞﾙ SET      式
ﾗﾍﾞﾙ値の設定(更新)
LOCAL
     LOCAL
ﾛｰｶﾙ･ﾗﾍﾞﾙの区切り指定
ﾃﾞｰﾀ定義及び領域指定
DB/DEFB/DEFM/.BYTE
     DB       式,式,…
現在番地から、式のﾊﾞｲﾄ数のﾒﾓﾘ領域確保
     DB       '文字列'
現在番地から文字列のﾊﾞｲﾄ数のﾒﾓﾘ領域確保
DC
     DC       '文字列'
DW/DEFW/.WORD/.DBYTE
     DW       式,式,…
現在番地から、式のﾜｰﾄﾞ数のﾒﾓﾘ領域確保
ﾘｽﾄ出力制御
PAGE/$EJECT/FORMLN
     PAGE     式
ﾍﾟｰｼﾞ制御
TITLE
     TITLE    ﾀｲﾄﾙ名
ﾀｲﾄﾙ指定
SUBTTL/$TITLE
     SUBTTL   ｻﾌﾞﾀｲﾄﾙ名
ｻﾌﾞﾀｲﾄﾙ指定
LIST/.LIST
     LIST
ｱｾﾝﾌﾞﾙ･ﾘｽﾄ出力指定
NLIST/.XLIST
     NLIST
ｱｾﾝﾌﾞﾙ･ﾘｽﾄ出力の抑止指定
CLIST/.LFCOND
     CLIST
条件付ｱｾﾝﾌﾞﾙの偽の部分の出力指定
NCLIST/.SFCOND
     NCLIST
条件付ｱｾﾝﾌﾞﾙの偽の部分の出力抑止指定
MLlST/.LALL
     MLIST
ﾏｸﾛ展開部分のﾘｽﾄ出力指定
BLIST/.XALL
     BLIST
ﾏｸﾛ展開部分のｺｰﾄﾞ生成部のみのﾘｽﾄ出力指定
NMLIST/.SALL
     NMLIST
ﾏｸﾛ展開部分のﾘｽﾄ出力の抑止指定
GEN
     GEN
ｵﾌﾞｼﾞｪｸﾄ･ｺｰﾄﾞが2行以上のﾘｽﾄ出力指定
NOGEN
     NOGEN
ｵﾌﾞｼﾞｪｸﾄ･ｺｰﾄﾞが2行以降のﾘｽﾄ出力の抑止指定
ﾘﾝｶ制御
NAME*
     NAME     ﾓｼﾞｭｰﾙ名
ﾓｼﾞｭｰﾙ名の指定
.REQUEST*
     .REQUEST ﾗｲﾌﾞﾗﾘ名
ﾘﾝｸ時に参照するﾗｲﾌﾞﾗﾘ名(ﾘﾛｹｰﾀﾌﾞﾙ･ﾌｧｲﾙ)の指定
EXT/EXTRN/EXTERN*
     EXT      ｼﾝﾎﾞﾙ名,ｼﾝﾎﾞﾙ名,…
外部参照ｼﾝﾎﾞﾙ指定
lNTERN/ENTRY/PUBLIC/GLOBAL
     INTERN   ｼﾝﾎﾞﾙ名,ｼﾝﾎﾞﾙ名,…
外部ﾓｼﾞｭｰﾙから参照可能ｼﾝﾎﾞﾙ指定
条件付ｱｾﾝﾌﾞﾙ
IF/IFN
     IF       式
式が0以外なら真
IFE
     IFE      式
式が0なら真
IF1
     IF1     {式}
ﾊﾟｽ1で式が0以外なら真(式はｵﾌﾟｼｮﾝ)
IF2
     IF2     {式}
ﾊﾟｽ2で式が0以外なら真(式はｵﾌﾟｼｮﾝ)
IFLT
     IFLT     式
式が0より小さいなら真
IFGT
     IFGT     式
式が0=り大きいなら真
IFLE
     IFLE     式
式が0より小さいか等しければ真
IFGE
     IFGE     式
式が0より大きいか等しければ真
IFDEF
     IFDEF    ｼﾝﾎﾞﾙ名
ｼﾝﾎﾞﾙ名が定義されていれば真
IFNDEF
     IFNDEF   ｼﾝﾎﾞﾙ名
ｼﾝﾎﾞﾙ名が未定義なら真
IFB
     IFB      <文字列>
文字列が空白なら真
IFNB
     IFNB     <文字列>
文字列が空白でないなら真
IFIDN
     IFIDN    ;<文字列>,<文字列>
2つの文字列が等しいなら真
IFNIDN
     IFNIDN   ;<文字列>,<文字列>
2つの文字列が等しくなければ真
ﾏｸﾛ及びﾏｸﾛ制御
MACRO
 名前  MACRO    引数,…
通常のﾏｸﾛ定義
<名前 引数,…> MACRO 引数,…
ﾊﾟﾗﾒｰﾀ付きﾏｸﾛ定義(PROASM-Ⅱ独自のﾏｸﾛ)
{名前} MACRO
値のﾏｸﾛ定義(PROASM-Ⅱ独自のﾏｸﾛ)
ENDM
     ENDM
ﾏｸﾛ定義の終了指定
REPT
     REPT     式
式の回数だけ繰り返してﾏｸﾛ展開
IRP
     IRP      ﾀﾞﾐｰ,<引数,…>
引数の数だけ繰り返し展開
IRPC
     IPC      ﾀﾞﾐｰ,<文字列>
文字列の文字数だけ繰り返して展開する
ENDR
     ENDR
REPT, IRP, IRPCのﾘﾋﾟｰﾄ定義の終了指定
その他制御 (すべてPROASM-Ⅱ独自の命令)
FRONT
     FRONT
ﾏｸﾛ処理→Z80のｲﾝｽﾄﾗｸｼｮﾝ処理指定
BACK
     BACK
Z80のｲﾝｽﾄﾗｸｼｮﾝ処理→ﾏｸﾛ処理指定
ERRCK/ERRCKl/ERRCK2
     ERRCK    式
式の値が0の時ｴﾗｰ(ｼﾝﾀｯｸｽ･ｴﾗｰ)
DB09
     DB09     ｺｰﾄﾞ1,…,ｺｰﾄﾞ4
6809,630Xのｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞ処理


ｱｾﾝﾌﾞﾗの使用するﾊﾞｯﾌｧ及びﾜｰｸの領域

2.10 ｱｾﾝﾌﾞﾗの使用するﾊﾞｯﾌｧ及びﾜｰｸの領域

ｱｾﾝﾌﾞﾙ処理中に使用されるﾊﾞｯﾌｧ及びﾜｰｸ領域は、CP/M-80版では次表、CP/M-86版及びMS-DOS版では下表に示される値になっています。これらの領域に関するｴﾗｰが発生した時又は必要に応じてこれらの領域の大きさをINSTALLﾕｰﾃｨﾘﾃｨを使用して可変することができます。
 ■
lA80/lR80の使用するﾊﾞｯﾌｧ領域 (CP/M-80版)
項目名 | 使用目的 | 標準値 | 変更範囲 | 備考
S0RC | ｿｰｽ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ | 4Kﾊﾞｲﾄ | 128～32Kﾊﾞｲﾄ | 大きい方がﾃﾞｨｽｸ読み出し時間の短縮
INCLUDE[1] | 第1ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ | 1Kﾊﾞｲﾄ | 128～32Kﾊﾞｲﾄ | 大きい方がﾃﾞｨｽｸ読み出し時間の短縮
INCLUDE[2] | 第2ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 | 128ﾊﾞｲﾄ
INCLUDE[3] | 第3ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 | 128ﾊﾞｲﾄ
C0M/REL file | COM及びRELﾌｧｲﾙの書込み用ﾊﾞｯﾌｧ | 2Kﾊﾞｲﾄ | 128～32Kﾊﾞｲﾄ | 大きい方がﾃﾞｨｽｸ書込み時間の短縮
PRN file | ﾘｽﾄ(PRN)ﾊﾞｯﾌｧの書込み用ﾊﾞｯﾌｧ | 1Kﾊﾞｲﾄ | 128～32Kﾊﾞｲﾄ
MACR0 buff | ﾏｸﾛ登録用ﾊﾞｯﾌｧ | 256個 | 0～1K個 | 使用するﾏｸﾛ定義の数、大きさによる
LABEL buff | ﾗﾍﾞﾙ登録用のﾊﾞｯﾌｧ | 1K個 | 128～2K個 | ﾗﾍﾞﾙ数によって設定する
 ■
lA80/lR80の使用するﾊﾞｯﾌｧ領域 (MS-D0S版及びCP/M-86版)
項目名 | 使用目的 | 容量
S0RC | ｿｰｽ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ | 4Kﾊﾞｲﾄ
INCLUDE[1] | 第1ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ | 1Kﾊﾞｲﾄ
INCLUDE[2] | 第2ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 | 1Kﾊﾞｲﾄ
INCLUDE[3] | 第3ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 | 1Kﾊﾞｲﾄ
C0M/REL file | COM及びRELﾌｧｲﾙの書込み用ﾊﾞｯﾌｧ | 4Kﾊﾞｲﾄ
PRN file | ﾘｽﾄ(PRN)ﾊﾞｯﾌｧの書込み用ﾊﾞｯﾌｧ | 1Kﾊﾞｲﾄ
MACR0 buff | ﾏｸﾛ登録用ﾊﾞｯﾌｧ | 512個
LABEL buff | ﾗﾍﾞﾙ登録用のﾊﾞｯﾌｧ | 2K個


LNKﾘﾝｶ

§3 LNKﾘﾝｶ

3.1 ﾘﾝｶの動作概要

 このﾘﾝｶ(LNK)は、ﾘﾛｹ-ﾀﾌﾞﾙ･ｱｾﾝﾌﾞﾗ(IR80)によって作成されたﾘﾛｹ-ﾀﾌﾞﾙなｵﾌﾞｼﾞｪｸﾄ･ﾓｼﾞｭ-ﾙ(拡張子'.REL')を結合したり、ﾗｲﾌﾞﾗﾘ･ﾏﾈ-ｼﾞｬ(LIB)によってﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙ(拡張子'.REL')に登録されたﾗｲﾌﾞﾗﾘ･ﾙ-ﾁﾝを検索して結合し、COMﾌｧｲﾙ又はHEXﾌｧｲﾙを出力します。また、各ﾓｼﾞｭｰﾙ別にｾｸﾞﾒﾝﾄのﾛｹ-ｼｮﾝ情報(ﾏｯﾌﾟ･ﾌｧｲﾙ)とｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ情報(ｼﾝﾎﾞﾙ･ﾌｧｲﾙ)を出力します。
3.1 ﾘﾝｶの動作概要
3.2 LNKのｺﾏﾝﾄﾞ
 3.2.1 ｺﾏﾝﾄﾞ形式
 3.2.2 ｽｨｯﾁ
 3.2.3 LNKのｺﾏﾝﾄﾞ例
 3.2.4 LNKの実行
 3.2.5 注意事項
3.3 ﾌｧｲﾙ形式
 3.3.1 ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ(拡張子'.REL')の形式
 3.3.2 COMﾌｧｲﾙの形式
 3.3.3 16進(HEX)ﾌｧｲﾙ
 3.3.4 ｼﾝﾎﾞﾙ･ﾌｧｲﾙ
 3.3.5 ﾏｯﾌﾟ･ﾌｧｲﾙ
3.4 LNKのｴﾗｰ･ﾒｯｾｰｼﾞ
3.5 ﾘﾝｶの使用するﾊﾞｯﾌｧ及びﾜｰｸ領域 (ｲﾝｽﾄｰﾙ)


LNKのｺﾏﾝﾄﾞ

3.2 LNKのｺﾏﾝﾄﾞ

3.2.1 ｺﾏﾝﾄﾞ形式

 ﾘﾝｶを起動するためには、ｺﾏﾝﾄﾞ名LNKに続いて<Enter>をﾀｲﾌﾟ･ｲﾝします。これによってﾘﾝｶは、*をﾀｲﾌﾞ･ｱｳﾄします。この後、ｺﾏﾝﾄﾞ群を受け付けることが可能です。また、ｺﾏﾝﾄﾞが複数行に渡る時は、行末に&を付加することによって、ﾘﾝｶはさらに*をﾀｲﾌﾞ･ｱｳﾄし続けてｺﾏﾝﾄﾞを入力できます。LNKのｺﾏﾝﾄﾞは、ﾌｧｲﾙ名とそれに付随するｽｨｯﾁ及び単独で動作するｽｨｯﾁをｶﾝﾏで区切ったものから構成されています。
C:>LNK
* ﾌｧｲﾙ名1,ﾌｧｲﾙ名2/ｽｨｯﾁ,/単独ｽｨｯﾁ,…
以上のｺﾏﾝﾄﾞがﾀｲﾌﾟ･ｲﾝされると、ﾘﾝｶは、指定されたﾓｼﾞｭ-ﾙ･ﾌｧｲﾙのﾘﾝｸ動作を開始します。また、ｺﾏﾝﾄﾞ名LNKに続けてｺﾏﾝﾄﾞをﾀｲﾌﾟ･ｲﾝすることもできます。
例:
C:>LNK ﾌｧｲﾙ名1,ﾌｧｲﾙ名2,…
ﾌｧｲﾙ名の先頭にはﾄﾞﾗｲﾌﾞ名を付加(例 B:ﾌｧｲﾙ名)することもでき、ﾄﾞﾗｲﾌﾞ名が省略されたﾌｧｲﾙは、ｶﾚﾝﾄ･ﾄﾞﾗｲﾌﾞが指定されます。

 3.2.2 ｽｨｯﾁ

 いくつかのｽｨｯﾁをｺﾏﾝﾄﾞ中に指定することによって、ﾘﾝｶの処理方法を指定できます。各ｽｨｯﾁの前には/を付けなければなりません。また、単独に動作するｽｨｯﾁはｶﾝﾏで区切らなければなりません。次表に各ｽｨｯﾁの動作を示します。Unix,VMS版は/の代わりに-を使用して下さい。
■ LNKのｽｨｯﾁ
ｽｲｯﾁ 動作
ﾌｧｲﾙ名/S
指定したﾌｧｲﾙ中に未定義ｼﾝﾎﾞﾙを含むﾓｼﾞｭｰﾙがあるか検索し、そのﾓｼﾞｭｰﾙをﾘﾝｸします。このｽｲｯﾁは一般にﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬによって登録されたﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙに対して付けられ、必要なﾓｼﾞｭｰﾙのみを抜き出してﾘﾝｸするために使用されます。
ﾌｧｲﾙ名/N
ﾘﾝｶの出力するﾌｧｲﾙ(COM,HEX,SYM,MAP)のﾌｧｲﾙ名を指定します。このｽｨｯﾁが省略された時は、最初に指定されているﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙの名前が出力ﾌｧｲﾙ名となります。
/P:ｱﾄﾞﾚｽ
/D:ｱﾄﾞﾚｽ
/Pｽｨｯﾁによりﾛｰﾄﾞされるﾌﾟﾛｸﾞﾗﾑのｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ(CSEG)の開始ｱﾄﾞﾚｽを指定します。/Dｽｨｯﾁによりﾛｰﾄﾞされるﾌﾞﾛｸﾞﾗﾑのﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄ(DSEG)及びｺﾓﾝ･ｴﾘｱ(COMMON)の開始ｱﾄﾞﾚｽを指定します。両方のｽｲｯﾁが省略された場合、ｺ-ﾄﾞ及びﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄは103H番地よりﾛｰﾄﾞされます。/Dｽｨｯﾁが省略された場合、ｺｰﾄﾞ及びﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄは/Pで指定されたｱﾄﾞﾚｽよりﾛｰﾄﾞされます。/Pｽｨｯﾁが省略された場合、ｺｰﾄﾞ･ｾｸﾞﾒﾝﾄは103H番地よりﾛｰﾄﾞされます。
/S
ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙのﾘｽﾄ･ﾌｧｲﾙ('出力ﾌｧｲﾙ名.SYM')を出力します。
/M
ﾘﾝｸされた各ﾓｼﾞｭｰﾙのｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ、ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄ、ｺﾓﾝ･ｴﾘｱの開始ｱﾄﾞﾚｽ情報を示すﾏｯﾌﾟ･ﾌｧｲﾙ('出力ﾌｧｲﾙ名.MAP')を出力します。
/H
ﾘﾝｸされたﾌﾟﾛｸﾞﾗﾑを16進形式('出力ﾌｧｲﾙ名.HEX')で出力します。このｽｨｯﾁが省略された時はCP/Mのｺﾏﾝﾄﾞ形式('出力ﾌｧｲﾙ名.COM')で出力されます。
/G:ｼﾝﾎﾞﾙ名
ﾌﾟﾛｸﾞﾗﾑの実行を開始すべきﾗﾍﾞﾙ･ｼﾝﾎﾞﾙ名(ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ)を指定します。このｽｨｯﾁによって、ﾘﾝｶは100H～102Hへ指定されたｼﾝﾎﾞﾙへのｼﾞｬﾝﾌﾟ命令(C3H,ｱﾄﾞﾚｽ下位,ｱﾄﾞﾚｽ上位)を挿入します。このｽｨｯﾁで指定した実行開始ｱﾄﾞﾚｽは、ｱｾﾝﾌﾞﾗ(IR80)のEND命令で指定されたものより優先します。
/F
ﾘﾝｸされたﾌﾟﾛｸﾞﾗﾑをﾓﾄﾛｰﾗSﾌｫｰﾏｯﾄ形式で出力します。Hｵﾌﾟｼｮﾝと同時に使用できません。

3.2.3 LNKのｺﾏﾝﾄﾞ例
例1:
C:>LNK D:FILE1,FILE2,E:FILE3/S,&
* D:FILE4/N,/S,/M,/G:START
DﾄﾞﾗｲﾌﾞのFILE1.RELとCﾄﾞﾗｲﾌﾞのFILE2.RELとEﾄﾞﾗｲﾌﾞのﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙFILE3.RELの必要なﾓｼﾞｭｰﾙをﾘﾝｸし、DﾄﾞﾗｲﾌﾞにFILE4.COMを出力すると同時にｼﾝﾎﾞﾙ･ﾌｧｲﾙFILE4.SYMとﾏｯﾌﾟ･ﾌｧｲﾙFILE4.MAPを出力します。
例2:
C:>LNK
* MAIN,SUB1,SUB2,D:MYLIBl/S,D:MYLlB2/S,&
* E:EXAMPL/N,/P:0,/D:8000,/H,/S,/M
CﾄﾞﾗｲﾌﾞMAIN.REL、SUB1.REL、SUB2.RELと、Dﾄﾞﾗｲﾌﾞのﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙMYLIB1.REL、MYLIB2.RELをｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ開始ｱﾄﾞﾚｽOH、ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄ開始ｱﾄﾞﾚｽ8000Hとしてﾘﾝｸし、ﾄﾞﾗｲﾌﾞEに16進形式でEXAMPL.HEXを出力すると同時にｼﾝﾎﾞﾙ･ﾌｧｲﾙEXAMPL.SYM、ﾏｯﾌﾟ･ﾌｧｲﾙEXAMPL.MAPを出力します。

 3.2.4 LNKの実行

 LNKの実行例を次に示します。
例:
C:>LNK MAIN,SUB1,SUB2,LIB1/S,&
* SAMPLE/N,/P:0,/D:8000,/M,/S
  LINKER (8bit) Ver1.0 (C) 1985 by IWASAKI/K.M.C.
UNDEFlND SYMB0L
未定義ｼﾝﾎﾞﾙがあれば出力される
0 UNDEFIND SYMB0L(S)
未定義で残っているｼﾝﾎﾞﾙはない
L0CATI0N  0000 - 8456
全ｾｸﾞﾒﾝﾄ(ASEG,CSEG,DSEG)のﾛｰﾄﾞされたｱﾄﾞﾚｽ
PR0GRAM   0000 - 1234
ｺｰﾄﾞ･ｾｸﾞﾒﾝﾄのﾛｰﾄﾞされたｱﾄﾞﾚｽ
DATA      8000 - 8456
ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄのﾛｰﾄﾞされたｱﾄﾞﾚｽ
12345 Byte Free
ﾘﾝｸ･ﾒﾓﾘの残りｴﾘｱ

3.2.5 注意事項

■ | 全ｾｸﾞﾒﾝﾄのﾛｹｰｼｮﾝで表示されたｱﾄﾞﾚｽ間のｵﾌﾞｼﾞｪｸﾄがすべてﾌｧｲﾙに出力されます。従って、ORG等で間のｱﾄﾞﾚｽが離れていても、同様に出力されるので注意して下さい。
■ | ASEGが先にﾛｰﾄﾞされていて、次にCSEG、DSEGがﾛｰﾄﾞされた場合は、重複ﾁｪｯｸができません。従って重複の可能性がある場合にはASEGを含んだﾓｼﾞｭｰﾙを最後にﾘﾝｸして下さい。
■ | ﾗｲﾌﾞﾗﾘを作成する場合、ﾓｼﾞｭｰﾙ間の参照が前方向であるようにﾓｼﾞｭｰﾙを並ﾍﾞる必要があります。すなわちｸﾞﾛｰﾊﾞﾙ記号の参照を含むﾓｼﾞｭｰﾙは物理的にｴﾝﾄﾘ･ﾎﾟｲﾝﾄを持つﾓｼﾞｭｰﾙの先になければなりません。さもないとLNKは、ﾗｲﾌﾞﾗﾘを1回だけ探索するだけなので、すべてのｸﾞﾛｰﾊﾞﾙ記号の参照を解決することはできません。


ﾌｧｲﾙ形式

3.3 ﾌｧｲﾙ形式

3.3.1 ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ(拡張子.REL)の形式

このﾘﾝｶ(LNK)のｻﾎﾟｰﾄするﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄの形式は、ﾏｲｸﾛｿﾌﾄ社のｵﾌﾞｼﾞｪｸﾄ形式に対し上位互換性があります。このﾘﾝｶのｵﾌﾞｼﾞｪｸﾄ形式は、128文字長までのｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ及び32文字長までのﾓｼﾞｭｰﾙ名、ｺﾓﾝ名を許し、また、いくつかの演算子に対して拡張がなされています。従って、IR80で出力したｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙとﾏｲｸﾛｿﾌﾄ形式のｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙと混在して、ﾘﾝｸすることが可能です。

 次に、ﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ概要を述ﾍﾞます。LNKのｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙは一連のﾋﾞｯﾄ(ﾋﾞｯﾄ･ｽﾄﾘｰﾑ)より構成されています。ﾋﾞｯﾄ･ｽﾄﾘｰﾑの中の個々のﾌｨｰﾙﾄﾞは次に述べるものを除いてﾊﾞｲﾄ･ﾊﾞｳﾝﾀﾞﾘになっていません。ﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙに対しﾋﾞｯﾄ･ｽﾘﾄｰﾑを用いることによって、ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙのｻｲｽﾞが最小になります。それによりﾃﾞｨｽｸに対する読み出し/書き込みを減ずることができます。ﾛｰﾄﾞ･ｱｲﾃﾑには、2つの基本的なﾀｲﾌﾞがあります。すなわち、ｱﾌﾞｿﾘｭｰﾄとﾘﾛｹｰﾀﾌﾞﾙです。

 ｱｲﾃﾑの最初のﾋﾞｯﾄがこれらの2つのﾀｲﾌﾟのいずれかを指しています。最初のﾋﾞｯﾄが0であれば次の8ﾋﾞｯﾄはｱﾌﾞｿﾘｭｰﾄとしてﾛｰﾄﾞされます。1であれば、次に続く2ﾋﾞｯﾄがﾘﾛｹｰﾀﾌﾞﾙ･ｱｲﾃﾑの次の4つのﾀｲﾌﾞのいずれかを指すために使われます。
値 | 意味 | 備考
00 | 特別LINKｱｲﾃﾑ | 下記参照
01 | ﾌﾟﾛｸﾞﾗﾑ･ﾘﾗﾃｨﾌﾞ | 当該ﾌﾟﾛｸﾞﾗﾑ(ｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ)のﾍﾞｰｽ･ｱﾄﾞﾚｽを加えた後、(それに続く)16ﾋﾞｯﾄをﾛｰﾄﾞしてくる。
10 | ﾃﾞｰﾀ･ﾘﾗﾃｨﾌﾞ | 当該ﾃﾞｰﾀ(ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄ)のﾍﾞｰｽ･ｱﾄﾞﾚｽを加えた後(それに続く)16ﾋﾞｯﾄをﾛｰﾄﾞする。
11 | COMMONﾘﾗﾃｨﾌﾞ | 当該ｺﾓﾝのﾍﾞｰｽ･ｱﾄﾞﾚｽを加えた後、16ﾋﾞｯﾄをﾛｰﾄﾞする。

特別LINKｱｲﾃﾑはﾋﾞｯﾄ･ｽﾄﾘｰﾑ100より成っており、次のものを伴っています。

 ① 制御ﾌｨｰﾙﾄﾞ (4ﾋﾞｯﾄ) ② Aﾌｨｰﾙﾄﾞ (ｵﾌﾟｼｮﾝ)
これは上記の00以外のﾋﾞｯﾄ･ﾌｨｰﾙﾄﾞが絶対番地を指すと同じで、2ﾋﾞｯﾄ番地ﾀｲﾌﾟで構成されています。

 ③ Bﾌｨｰﾙﾄﾞ (ｵﾌﾟｼｮﾝ)
ｼﾝﾎﾞﾙの長さが6文字以下の時は、ｼﾝﾎﾞﾙ(記号)の長さを示す3ﾋﾞｯﾄとそのｼﾝﾎﾞﾙの各文字からなります。ｼﾝﾎﾞﾙの長さが6文字を越える時は、010の3ﾋﾞｯﾄ、7FHの8ﾋﾞｯﾄとそのｼﾝﾎﾞﾙの長さを示す8ﾋﾞｯﾄとそのｼﾝﾎﾞﾙの各文字からなります。

 特別LINKｱｲﾃﾑの一般形式は次のようになります。
1 00 XXXX YY AA
ZZZ ｼﾝﾎﾞﾙ名の文字
特別LINKｱｲﾃﾑ 制御ﾌｨｰﾙﾄﾞ Aﾌｨｰﾙﾄﾞ
Bﾌｨｰﾙﾄﾞ ↑6文字以下
↓7文字以上
010 7FH L ｼﾝﾎﾞﾙ名の文字
XXXX | 4ﾋﾞｯﾄ | 制御ﾌｨｰﾙﾄﾞ(0～15の意味は下記)
YY | 2ﾋﾞｯﾄ | ｱﾄﾞﾚｽ･ﾀｲﾌﾟ･ﾌｨｰﾙﾄﾞ
AA | 16ﾋﾞｯﾄ | 値
ZZZ | 3ﾋﾞｯﾄ | ｼﾝﾎﾞﾙの長さ
L | 8ﾋﾞｯﾄ | ｼﾝﾎﾞﾙの長さ
次に示す制御ﾌｨｰﾙﾄﾞの値により、以降のﾌｨｰﾙﾄﾞ種別を指定します。0～8は次がBﾌｨｰﾙﾄﾞを意味し、9～14は同様にAﾌｨｰﾙﾄﾞを、15は最後を意味します。
0 | ｴﾝﾄﾘ･ｼﾝﾎﾞﾙ (探索のための名前)
1 | ｺﾓﾝ･ﾌﾞﾛｯｸの選択
2 | ﾌﾟﾛｸﾞﾗﾑ名
3 | ﾗｲﾌﾞﾗﾘ探索の要求
4 | 将来の拡張のための予備
5 | ｺﾓﾝのｻｲｽﾞの定義
6 | 外部参照記号へのﾁｪｲﾝ (Aはｱﾄﾞﾚｽ･ﾁｪｲﾝの先頭、Bは外部参照記号の名前)
7 | ｴﾝﾄﾘ･ﾎﾟｲﾝﾄの指定 (Aは番地、Bは名前)
8 | 将来の拡張のための予備
9 | 外部参照記号+ｵﾌｾｯﾄ (Aの値は実行に先立って現ﾛｹｰｼｮﾝ･ｶｳﾝﾀの2ﾊﾞｲﾄに加えられます。)
10 | ﾃﾞｰﾀ領域の大きさを定義 (Aはｻｲｽﾞ)
11 | ﾛｰﾃﾞｨﾝｸﾞするﾛｹｰｼｮﾝ･ｶｳﾝﾀをAにｾｯﾄします。
12 | ﾁｪｲﾝ･ｱﾄﾞﾚｽ (Aはﾁｪｲﾝの先頭番地であり、ﾁｪｲﾝづけられている全てのｴﾝﾄﾘをﾛｹｰｼｮﾝ･ｶｳﾝﾀの現在の値で置き換えます。ﾁｪｲﾝの最後のｴﾝﾄﾘは絶対番地で0のｱﾄﾞﾚｽ･ﾌｨｰﾙﾄﾞを持っています。)
13 | ﾌﾟﾛｸﾞﾗﾑ･ｻｲｽﾞの定義 (Aﾌｨｰﾙﾄﾞはｻｲｽﾞ)
14 | ﾌﾟﾛｸﾞﾗﾑの最後 (ﾊﾞｲﾄ境界にされます)
15 | ﾌｧｲﾙの終わり

3.3.2 COMﾌｧｲﾙの形式

 COMﾌｧｲﾙは拡張子に.COMが付加されｾｰﾌﾞされたCP/Mの実行形式のﾌｧｲﾙであり、ﾘﾝｸされた結果ﾌﾟﾛｸﾞﾗﾑが100H番地以降にﾛｰﾄﾞされた場合、100H番地からﾌﾟﾛｸﾞﾗﾑの最後までｾｰﾌﾞされます。100H番地より前にﾛｰﾄﾞされた場合は、そのﾌﾟﾛｸﾞﾗﾑの開始番地から最後までがｾｰﾌﾞされます。

3.3.3 16進(HEX)ﾌｧｲﾙ

16進ﾌｧｲﾙはｽｨｯﾁHが指定された時に出力され、拡張子に.HEXが付加されて、ｾｰﾌﾞされます。ｲﾝﾃﾙ16進形式のﾌｧｲﾙであり、ﾘﾝｸされたﾌﾟﾛｸﾞﾗﾑ開始番地ｱﾄﾞﾚｽから最後の番地までがｾｰﾌﾞされます。

3.3.4 ｼﾝﾎﾟﾙ･ﾌｧｲﾙ

 ｼﾝﾎﾞﾙ･ﾌｧｲﾙは、ｽｨｯﾁSが指定された時に出力されるﾌｧｲﾙです。このﾌｧｲﾙには、ﾘﾝｸされた結果決定された全ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙの情報をｿｰﾄしたものが納められています。

3.3.5 ﾏｯﾌﾟ･ﾌｧｲﾙ

 ﾏｯﾌﾟ･ﾌｧｲﾙは、ｽｨｯﾁMが指定された時出力されるﾌｧｲﾙです。このﾌｧｲﾙには、ﾘﾝｸされたすべてのﾓｼﾞｭｰﾙの名前とそのﾓｼﾞｭｰﾙのｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ、ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄのﾛｹｰｼｮﾝおよびｺﾓﾝ･ｴﾘｱのﾛｹｰｼｮﾝに関する情報が納められています。


LNKのｴﾗｰ･ﾒｯｾｰｼﾞ

3.4 LNKのｴﾗｰ･ﾒｯｾｰｼﾞ

表示 意味
? Command Error
入力されたｺﾏﾝﾄﾞ形式に誤りがある。
? Toomany linking file
ﾘﾝｸするﾌｧｲﾙの数が多すぎる。(20個までのｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ、ﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙをﾘﾝｸできる)ﾌｧｲﾙの数が20個を越える時はﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬでｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙをﾗｲﾌﾞﾗﾘに登録すること。
? DlSK Full
ﾃﾞｨｽｸの容量が足りない。出力ﾌｧｲﾙの名前に誤りがある。ﾒｲﾝ･ﾒﾓﾘが不足している。INSTALLﾕｰﾃｨﾘﾃｨを使っていずれかのﾜｰｸ･ｴﾘｱを縮小する(CP/M-80版)。
? lnvalid Hex-data
/P又は/Dｽｨｯﾁに続いて入力する16進ｱﾄﾞﾚｽに誤りがある。
? Link Memory Empty
ﾘﾝｸ･ﾒﾓﾘが不足している。INSTALLﾕｰﾃｨﾘﾃｨを便用してﾘﾝｸ･ﾒﾓﾘを拡大する(CP/M-80版)。
? No Memory Space
ﾒｲﾝ･ﾒﾓﾘが不足している。INSTALLﾕｰﾃｨﾘﾃｨを使用していずれかのﾜｰｸ･ｴﾘｱを縮小する(CP/M-80版)。
? Loading Error
入力されたﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙの形式に異常がある。
? 2nd Common <XXX> is Large
最初に定義されたｺﾓﾝ･ﾌﾞﾛｯｸ<XXXX>が最大のものではなかった。最初に定義されるｺﾓﾝ･ﾌﾞﾛｯｸのｻｲｽﾞを変えるか、ﾛｰﾃﾞｨﾝｸﾞするﾓｼﾞｭｰﾙの順序を変えること。
% 0verlaying Program Area
既にﾛｰﾄﾞされているﾌﾟﾛｸﾞﾗﾑ領域(ｺｰﾄﾞ･ｾｸﾞﾒﾝﾄ)にｱﾌﾞｿﾘｭｰﾄ･ｾｸﾞﾒﾝﾄ(ASEG)の内容が重なった。
% 0verlaying DataArea
既にﾛｰﾄﾞされているﾃﾞｰﾀ領域(ﾃﾞｰﾀ･ｾｸﾞﾒﾝﾄ)にｱﾌﾞｿﾘｭｰﾄ･ｾｸﾞﾒﾝﾄ(ASEG)の内容が重なった。
? Link ltem-12 Not Supported
現在ﾘﾝｸ･ｱﾃｲﾑNo.12は使用されていない。
? Start Symbol Undefined - XXX
ﾌﾟﾛｸﾞﾗﾑの実行開始ｼﾝﾎﾞﾙXXXが指定されたが未定である。
? File 'XXX.REL' Not Found
ﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ'XXX.REL'が存在しない。
% Mult. Def. Global<XXX>
ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ<XXX>が複数定義されている。
? Label Buffer Full
登録されたｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ(ﾗﾍﾞﾙ)の数が多すぎる。INSTALLﾕｰﾃｨﾘﾃｨを使ってﾗﾍﾞﾙ数を増やすこと。
? Not Supported 0perator
ｻﾎﾟｰﾄされていない演算子が使われた。
? Empty Work Area
ﾘﾝｶが使用するﾜｰｸ･ｴﾘｱの容量が不足した。INSTALLﾕｰﾃｨﾘﾃｨを使用してWorkAreaを拡大する(CP/M-80版)。
注意: ?で始まるｴﾗｰ･ﾒｯｾｰｼﾞはﾘﾝｸ処理を続行することが不可能であり、LNKは中断します。%で始まるｴﾗｰ･ﾒｯｾ^ｼﾞは警告であり、ﾘﾝｸ処理は続行されます。


ﾘﾝｶの使用するﾊﾞｯﾌｧ及びﾜｰｸ領域

3.5 ﾘﾝｶの使用するﾊﾞｯﾌｧ及びﾜｰｸ領域 (ｲﾝｽﾄｰﾙ)

ﾘﾝｸ処理中に使用されるﾊﾞｯﾌｧ及びﾜｰｸ領域は、CP/M-80版では次表、CP/M-86版及びMS-DOS版では下表に示される値になっています。CP/M-80版では、これらの領域に関するｴﾗｰが発生した時、又は必要に応じてこれらの領域の大きさをINSTALLﾕｰﾃｨﾘﾃｨを使用して可変することができます。

 ■
ﾘﾝｶの使用するﾊﾞｯﾌｧ領域 (CP/M-80版)
名前 | 使用目的 | 初期値 | 可変範囲 | 備考
ﾘﾝｸ･ﾒﾓﾘ | ﾘﾝｸ作業用のﾊﾞｯﾌｧで、この値でﾘﾝｸできるﾌﾟﾛｸﾞﾗﾑ･ｻｲｽﾞが決まる。 | 8000H(32K) | 1000H(4K)～C000H(48K)
ﾗﾍﾞﾙ･ﾊﾞｯﾌｧ(ﾗﾍﾞﾙ数) | ｸﾞﾛｰﾊﾞﾙ･ﾗﾍﾞﾙ用のﾊﾞｯﾌｧで、この値でﾗﾍﾞﾙ登録の最大数が決まる。 | 512 | 128～2048
ﾘｰﾄﾞ･ﾊﾞｯﾌｧ | ﾃﾞｨｽｸ･ﾘｰﾄﾞ用ﾊﾞｯﾌｧ | 2Kﾊﾞｲﾄ | 128～32Kﾊﾞｲﾄ | 大きい方がﾃﾞｨｽｸI/Oが高速
ﾗｲﾄ･ﾊﾞｯﾌｧ | ﾃﾞｨｽｸ･ﾗｲﾄ用ﾊﾞｯﾌｧ | 1Kﾊﾞｲﾄ | 同上
ﾜｰｸ･ｴﾘｱ | ﾘﾝｶが使用するﾜｰｸ･ｴﾘｱ | 1Kﾊﾞｲﾄ | 同上

 ■
ﾘﾝｶの使用するﾊﾞｯﾌｧ領域 (CP/M-86版及びMS-D0S版)
項目名 使用目的 大きさ
Link Memory
ﾘﾝｸ作業中にﾘﾝｶがｵﾌﾞｼﾞｪｸﾄをﾛｰﾄﾞする領域で、このｻｲｽﾞのﾌﾟﾛｸﾞﾗﾑがﾘﾝｸできる。 64Kﾊﾞｲﾄ
Label Buff
ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ(ﾗﾍﾞﾙ)の登録用ﾊﾞｯﾌｧ 2K個
Read Buff
ﾃﾞｨｽｸ読み出し用ﾊﾞｯﾌｧ 1Kﾊﾞｲﾄ
Write Buff
ﾃﾞｨｽｸ書き込み用ﾊﾞｯﾌｧ 1Kﾊﾞｲﾄ
Work Area
ﾘﾝｶの使用するﾜｰｸ領域 2Kﾊﾞｲﾄ


MS ﾒｲｸ･ｼﾝﾎﾞﾙ

§4 MS ﾒｲｸ･ｼﾝﾎﾞﾙ

4.1 ﾒｲｸ･ｼﾝﾎﾞﾙの動作概要

ﾒｲｸ･ｼﾝﾎﾞﾙ(MS)は、ﾘﾝｶの出力するｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ･ﾌｧｲﾙ(.SYM)とﾏｯﾌﾟ･ﾌｧｲﾙ(.MAP)及び、ｱｾﾝﾌﾞﾗの出力する中間ｼﾝﾎﾞﾙ･ﾌｧｲﾙ(.$SY)を読み込み、ﾘﾝｶの出力したｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ･ﾌｧｲﾙにｱｾﾝﾌﾞﾗの出力した再配置されていない中間ｼﾝﾎﾞﾙ･ﾌｧｲﾙを再配置追加して、ｸﾞﾛｰﾊﾞﾙ(ﾊﾞﾌﾞﾘｯｸ)宣言されていないｼﾝﾎﾞﾙも含んだｼﾝﾎﾞﾙ･ﾌｧｲﾙを作成します。これによってｼﾝﾎﾞﾘｯｸ･ﾃﾞﾊﾞｯｶﾞ等でｸﾞﾛｰﾊﾞﾙ(ﾊﾞﾌﾞﾘｯｸ)宣言されていないｼﾝﾎﾞﾙも扱うことができるようになります。

 4.2 MSのｺﾏﾝﾄﾞ

 4.2.1 ｺﾏﾝﾄﾞ形式

 ﾒｲｸ･ｼﾝﾎﾞﾙを起動するためには、ｺﾏﾝﾄﾞ名MSに続いて<Enter>をﾀｲﾌﾟ･ｲﾝします。これによって、MSは*をﾀｲﾌﾟ･ｱｳﾄしてきます。この後ｺﾏﾝﾄﾞ群を受け付けることが可能です。ｺﾏﾝﾄﾞが複数行に渡る時は、行末に&を追加することによって、MSはさらに*をﾀｲﾌﾟ･ｱｳﾄし、続けてｺﾏﾝﾄﾞを入力できます。MSのｺﾏﾝﾄﾞはﾌｧｲﾙ名及び、それに付随するｽｨｯﾁをｶﾝﾏで区切ったものから構成されています。また、最初のﾌｧｲﾙ名はﾘﾝｶの出力したｼﾝﾎﾞﾙ･ﾌｧｲﾙ、ﾏｯﾌﾟ･ﾌｧｲﾙの名前を指定します。
C:>MS
* ﾌｧｲﾙ名1,ﾌｧｲﾙ名2,ﾌｧｲﾙ名3/ｽｨｯﾁ
また、ｺﾏﾝﾄﾞ名MSに続けてｺﾏﾝﾄﾞをﾀｲﾌﾟ･ｲﾝすることもできます。ﾌｧｲﾙ名の先頭には、ﾄﾞﾗｲﾌﾞ名を追加(例 B:ﾌｧｲﾙ名)することもでき、ﾄﾞﾗｲﾌﾞ名が省略された時は、ｶﾚﾝﾄ･ﾄﾞﾗｲﾌﾞが指定されます。

 4.2.2 ｽｨｯﾁ

 MSのｽｨﾁは、/N(-N)の1つだけです。これは、出力するｼﾝﾎﾞﾙ･ﾌｧｲﾙ名を指定するために使用されます。このｽｨｯﾁが省略された時は、出力するｼﾝﾎﾞﾙ･ﾌｧｲﾙ名は、最初のｵｰｷﾞｭﾒﾝﾄで指定したﾘﾝｶの出力するｼﾝﾎﾞﾙ･ﾌｧｲﾙ、ﾏｯﾌﾟ･ﾌｧｲﾙと同じ名前になります。

 4.2.3 MSのｺﾏﾝﾄﾞ例
例1:
C:>MS MAIN,D:SUB1
ﾄﾞﾗｲﾌﾞCのMAIN.SYM,MAIN.MAPとﾄﾞﾗｲﾌﾞDのSUB1.$SYを読み込みSUB1.$SYに含まれているｸﾞﾛｰﾊﾞﾙ宣言されていないｼﾝﾎﾞﾙをﾏｯﾌﾟ･ﾌｧｲﾙを基に再配置しMAIN.SYMに追加して出力します。Unix,VMS版の場合、ﾄﾞﾗｲﾌﾞ指定は使用できません。
例2:
C:>MS
* MAIN,D:SUB2,D:SYMBOL/N
例1に続いてこの操作を行うことによって、ﾄﾞﾗｲﾌﾞDのSUB2.$SYに含まれているｸﾞﾛｰﾊﾞﾙ(ﾊﾞﾌﾞﾘｯｸ)宣言されていないｼﾝﾎﾞﾙを再配置し、例1で作ったMAIN.SYMに追加してDﾄﾞﾗｲﾌﾞにSYMBOL.SYMという名前で出力します。

 4.3 出力ﾌｧｲﾙ形式

 MSによって出力されるｼﾝﾎﾞﾙ･ﾌｧｲﾙは、以下に示すような順序でｼﾝﾎﾞﾙ情報が納められています。
① | ｸﾞﾛｰﾊﾞﾙ宣言されたｼﾝﾎﾞﾙ名とその値
② | ﾓｼﾞｭｰﾙ名 (値は常に0)
③ | そのﾓｼﾞｭｰﾙ中の全ｼﾝﾎﾞﾙ名とその値
④ | ②～③の繰り返し
例:
1001 ABC    1012XYZ
ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ名
0000 SUB1
ﾓｼﾞｭｰﾙ名
1050 SUBLP  1056L00P
SUB1中のｼﾝﾎﾞﾙ
また、MSで作られるｼﾝﾎﾞﾙはSID、ZSID等のｼﾝﾎﾞﾘｯｸ･ﾃﾞﾊﾞｯｶﾞで使用できる形式になっており、ｸﾞﾛｰﾊﾞﾙなｼﾝﾎﾞﾙに対しては従来通りの方法で、ﾛｰｶﾙなｼﾝﾎﾞﾙに対してはﾓｼﾞｭｰﾙ名/ｼﾝﾎﾞﾙ名の形で使用することによって同じ名前のﾛｰｶﾙなｼﾝﾎﾞﾙが復数ある時でも正しく参照することができます。

 ﾓｼﾞｭｰﾙ名は、ｿｰｽ中に書かれたNAME擬似命令により定義されたﾓｼﾞｭｰﾙ名になりますが、定義されていない場合には、TITLE擬似命令で定義されたものを使用します。その場合ｼﾝﾎﾞﾙ名に許されない文字を含むことができますが、ICE等のﾃﾞﾊﾞｯｶﾞで読み込みができないことがあります。

 4.4 MSのｴﾗｰ･ﾒｯｾｰｼﾞ
表示 意味
? Command Error
入力されたｺﾏﾝﾄﾞ形式に誤りがある。
? lnvalid Hex-data
入力されたｼﾝﾎﾞﾙ･ﾌｧｲﾙまたは、ﾏｯﾌﾟ･ﾌｧｲﾙ等の16進数または、ﾌｧｲﾙ形式に誤りがある。
? Map File Not Found
ﾏｯﾌﾟ･ﾌｧｲﾙ(～.MAP)が存在しない。(LINK時に/Mｽｨｯﾁを使用していない)
? $SY File Not Found
ｱｾﾝﾌﾞﾗが出力するｼﾝﾎﾞﾙ･ﾌｧｲﾙ(～.$SY)が存在しない。(LINKで/Sｽｨｯﾁを使用していない)
? Disk Full
ﾃﾞｨｽｸ容量が足りない。出力ﾌｧｲﾙの名前に誤りがある。
? Not Found Common - XXX
ｺﾓﾝ名XXXがﾏｯﾌﾟ･ﾌｧｲﾙに存在しない。
? Not Found Module - XXX
ﾓｼﾞｭｰﾙ名XXXがﾏｯﾌﾟ･ﾌｧｲﾙに存在しない。


ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬ

§5 ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬ

5.1 LIBの動作概要

 LIB(ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬ)はﾘﾛｹｰﾀﾌﾞﾙ･ｱｾﾝﾌﾞﾗ(IR80)によって作成された複数個のﾘﾛｹｰﾀﾌﾞﾙ･ｵﾌﾞｼﾞｪｸﾄ･ﾓｼﾞｭｰﾙを組合わせて、ﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙを作成します。また、ﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙの編集やﾗｲﾌﾞﾗﾘに含まれるﾓｼﾞｭｰﾙの情報をﾘｽﾄすることができます。LIBの持つ機能は次の通りです。
◆ 追加機能:
ﾗｲﾌﾞﾗﾘにﾓｼﾞｭｰﾙを追加登録する。
◆ 削除機能: ﾗｲﾌﾞﾗﾘに登録されたﾓｼﾞｭｰﾙを削除する。
◆ 複写機能: ﾗｲﾌﾞﾗﾘに登録されたﾓｼﾞｭｰﾙをｺﾋﾟｰし.RELﾌｧｲﾙを作る。
◆ 表示機能: ﾗｲﾌﾞﾗﾘに登録されている各ﾓｼﾞｭｰﾙの名前、そのﾓｼﾞｭｰﾙに含まれるｸﾞﾛｰﾊﾞﾙ、ｴｸｽﾀｰﾅﾙ･ｼﾝﾎﾞﾙに関する情報を出力する。

5.2 LIBのｺﾏﾝﾄﾞ

 5.2.1 ｺﾏﾝﾄﾞ形式

 ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬを起動するためには、ｺﾏﾝﾄﾞ名LIBに続いて<』>をﾀｲﾌﾟ･ｲﾝします。これによってLIBは、*をﾀｲﾌﾟ･ｱｳﾄしてきます。この後、ｺﾏﾝﾄﾞ群を受け付けることが可能です。ｺﾏﾝﾄﾞが複数行に渡る時は、行末に&を追加することによってLIBはさらに*をﾀｲﾌﾟ･ｱｳﾄし、続けてｺﾏﾝﾄﾞを入力できます。LIBのｺﾏﾝﾄﾞは、ﾌｧｲﾙ名又はﾓｼﾞｭｰﾙ名とそれに付随するｽｨｯﾁ及び単独で動作するｽｨｯﾁをｺﾏﾝﾄﾞで区切ったものから構成されています。また最初のｵｰｷﾞｭﾒﾝﾄは、作成、編集しようとするﾗｲﾌﾞﾗﾘのﾌｧｲﾙ名です。つまり次のようになります。
C:>LlB
* ﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙ名,ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙ名,ﾓｼﾞｭｰﾙ名/ｽｨｯﾁ,/ｽｨｯﾁ
また、ｺﾏﾝﾄﾞ名LIBに続けてｺﾏﾝﾄﾞをﾀｲﾌﾟすることもできます。ﾌｧｲﾙ名の先頭には、ﾄﾞﾗｲﾌﾞ名を付加(例 D:ﾌｧｲﾙ名)することもでき、ﾄﾞﾗｲﾌﾞ名が省略された時は、ｶﾚﾝﾄ･ﾄﾞﾗｲﾌﾞが指定されます。

 5.2.2 ｽｨｯﾁ

 いくつかのｽｨｯﾁをｺﾏﾝﾄﾞ中に指定することによってﾗｲﾌﾞﾗﾘ･ﾏﾈ-ｼｬの処理方法を指定できます。各ｽｨｯﾁの前には(-)/を付けなけれはなりません。また、単独に動作するｽｨｯﾁはｶﾝﾏで区切らなければなりません。次表に各ｽｨｯﾁの動作を示します。
■ LlBのｽｨｯﾁ
ｽｨｯﾁ 動作
ﾓｼﾞｭｰﾙ名/D
指定されたﾓｼﾞｭｰﾙをﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙから削除する。
[ﾄﾞﾗｲﾌﾞ名:]ﾓｼﾞｭｰﾙ名/C
指定されたﾓｼﾞｭｰﾙをﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙからｺﾋﾟｰし、指定されたﾄﾞﾗｲﾌﾞにﾓｼﾞｭｰﾙ名と同じ名前のﾌｧｲﾙを作る。ﾄﾞﾗｲﾌﾞ名省略時はｶﾚﾝﾄ･ﾄﾞﾗｲﾌﾞが指定される。(Unix,VMS版は無効)
/M
編集中のﾗｲﾌﾞﾗﾘに登録されたすべてのﾓｼﾞｭｰﾙ名を表示する。
/P
編集中のﾗｲﾌﾞﾗﾘに登録されたすべてのﾓｼﾞｭｰﾙ名とそのﾓｼﾞｭｰﾙに含まれるｸﾞﾛｰﾊﾞﾙ(ﾊﾟﾌﾞﾘｯｸ)ｼﾝﾎﾞﾙ名を表示する。
/E
編集中のﾗｲﾌﾞﾗﾘに登録されたすべてのﾓｼﾞｭｰﾙ名とそのﾓｼﾞｭｰﾙに含まれるｸﾞﾛｰﾊﾞﾙ(ﾊﾟﾌﾞﾘｯｸ)ｼﾝﾎﾞﾙ名、及ひｴｸｽﾀｰﾅﾙ･ｼﾝﾎﾞﾙ名を表示する。

5.2.3 LlBのｺﾏﾝﾄﾞ例
例1:
C:>LlB D:MYLlB,M0D1,D:M0D2,/M
Dﾄﾞﾗｲﾌﾞのﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙMYLIB.RELにCﾄﾞﾗｲﾌﾞのMOD1.REL、DﾄﾞﾗｲﾌﾞのMOD2.RELを追加登録します。また、MYLIBに含まれる全ﾓｼﾞｭｰﾙ名を表示します。この時、ﾄﾞﾗｲﾌﾞDにMYLIB.RELが存在しなければ新しくﾌｧｲﾙが作られます。
例2:
C:>LlB
* D:MYLlB,M0D1/D,D:M0D2/C,D:M0D1,&
* D:MYLlB2,/E
Dﾄﾞﾗｲﾌﾞのﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙMYLIB.REL中のﾓｼﾞｭｰﾙMOD1を削除し、ﾓｼﾞｭｰﾙMOD2をﾄﾞﾗｲﾌﾞDにｺﾋﾟｰし、DﾄﾞﾗｲﾌﾞのMOD1.RELとMYLIB2.RELを追加登録します。またMYLIBに含まれるﾓｼﾞｭｰﾙの名前はそのﾓｼﾞｭｰﾙに含まれます。ｸﾞﾛｰﾊﾞﾙ･ｼﾝﾎﾞﾙ、ｴｸｽﾀｰﾅﾙ･ｼﾝﾎﾞﾙを表示します。

 5.3 LlBのｴﾗｰ･ﾒｯｾｰｼﾞ
表示 意味
? No Memory Space
CP/MのTPAｻｲｽﾞが小さすぎで、ﾜｰｸ用のﾒﾓﾘ･ｽﾍﾟｰｽが不足してしています。
? Command Error
入力されたｺﾏﾝﾄﾞ形式に誤りがあります。
? Too many append module !
追加、削除、ｺﾋﾟｰするﾓｼﾞｭｰﾙの数が多すぎます。1回で処理できるﾓｼﾞｭｰﾙ数は、各々32個までです。
? Too many delete module !
? Too many copy module !
? Disk Full
ﾃﾞｨｽｸの容量が足りない。
% Copy Module <XXX> Not Found !
ｺﾋﾟｰまたは削除指定されたﾓｼﾞｭｰﾙ<XXX>が見つかりません。
% Delete Module <XXX> Not Found !
? File <XXX> Not found
追加指定されたﾌｧｲﾙ<XXX>が存在しません。
? Read Error
ﾗｲﾌﾞﾗﾘ･ﾌｧｲﾙまたは、ｵﾌﾞｼﾞｪｸﾄ･ﾌｧｲﾙのﾌｧｲﾙ形式に誤りがあります。
注意: ?で始まるｴﾗｰ･ﾒｯｾｰｼﾞは、処理を続行することが不可能であり、LIBは中断します。%で始まるｴﾗｰ･ﾒｯｾｰｼﾞは警告であり、処理は続行されます。


INSTALL ｲﾝｽﾄｰﾙ･ﾕｰﾃｨﾘﾃｨ

§6 INSTALL ｲﾝｽﾄｰﾙ･ﾕｰﾃｨﾘﾃｨ (CP/M-80,CP/M-86,MS-D0S版のみ)

6.1 lNSTALLの動作概要

 INSTALLは、CP/M-80,CP/M-86,MS-DOS版のｱｾﾝﾌﾞﾗ(IA80,IR80)、及びCP/M-80版のﾘﾝｶ(LNK)が使用しているﾜ-ｸ領域、ﾊﾞｯﾌｧ領域の大きさを変更又は、表示するために使用します。これによって、ﾕｰｻﾞ･ｼｽﾃﾑのTPAｻｲｽﾞに応じて、または、使用状態(ﾏｸﾛ定義の数、ﾗﾍﾞﾙの数等)に応じて最適な状態にｲﾝｽﾄｰﾙできます。

 6.2 INSTALLの使用方法

 6.2.1 INSTALLのｺﾏﾝﾄﾞ形式

INSTALLを起動するためには、ｺﾏﾝﾄﾞ名INSTALLに続いてｽｨｯﾁをﾀｲﾌﾟ･ｲﾝします。
C:>INSTALL ｽｨｯﾁ
INSTALLを実行するためには、ｶﾚﾝﾄ･ﾄﾞﾗｲﾌﾞにｲﾝｽﾄｰﾙしようとするｱｾﾝﾌﾞﾗ(IR80又は、IA80)又は、ﾘﾝｶ(LNK)が存在しなければなりません。INSTALLを起動すると、ｲﾝｽﾄｰﾙ項目とそのｻｲｽﾞが表示されます。そこで、ｽﾍﾟｰｽｷｰをﾀｲﾌﾟするとｻｲｽﾞが順次変化しますので希望のｻｲｽﾞが表示された時に』ｷｰをﾀｲﾌﾟします。すると、次の項目に移ります。最後にYををｷｰ･ｲﾝすると、所定のｻｲｽﾞにｲﾝｽﾄｰﾙされます。この時、ｲﾝｽﾄｰﾙ前のｺﾏﾝﾄﾞ･ﾌｧｲﾙ(IR80.COM, IA80.COM, LNK.COM)は拡張子.BAKにﾘﾈｰﾑされます。

 6.2.2 ｽｨｯﾁ

 INSTALLのｽｨｯﾁには、次表に示す6種類が使用できます。
■ lNSTALLのｽｨｯﾁ
ｽｲｯﾁ 内容
A
ｱﾌﾞｿﾘｭｰﾄ版ｱｾﾝﾌﾞﾗ IA80のｲﾝｽﾄｰﾙを行います。
AD
ｱﾌﾞｿﾘｭｰﾄ版ｱｾﾝﾌﾞﾗ IA80のｲﾝｽﾄｰﾙ状況を表示します。
R
ﾘﾛｹｰﾀﾌﾞﾙ版ｱｾﾝﾌﾞﾗ IR80のｲﾝｽﾄｰﾙを行います。
RD
ﾘﾛｹｰﾀﾌﾞﾙ版ｱｾﾝﾌﾞﾗ IR80のｲﾝｽﾄｰﾙ状況を表示します。
L
ﾘﾝｶ LNKのｲﾝｽﾄｰﾙを行います。
LD
ﾘﾝｶ LNKのｲﾝｽﾄｰﾙ状況を表示します。

6.2.3 ｲﾝｽﾄｰﾙ項目

 6.2.3.1 ｱｾﾝﾌﾞﾗ

 次表にｱｾﾝﾌﾞﾗ(IR80,IA80)のｲﾝｽﾄｰﾙ可能な項目を示します。
■ ｱｾﾝﾌﾞﾗのｲﾝｽﾄｰﾙ項目
項目名 使用目的 標準値 変更範囲 備考
S0RC
ｿｰｽ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ 4Kﾊﾞｲﾄ 128～32Kﾊﾞｲﾄ 大きい方がﾃﾞｨｽｸ読み出し時間の短縮
INCLUDE[1]
第1ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ･ﾌｧｲﾙの読み込み用ﾊﾞｯﾌｧ 1Kﾊﾞｲﾄ 128～32Kﾊﾞｲﾄ
INCLUDE[2]
第2ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 1Kﾊﾞｲﾄ(128ﾊﾞｲﾄ)
INCLUDE[3]
第3ﾚﾍﾞﾙのｲﾝｸﾙｰﾄﾞ用 1Kﾊﾞｲﾄ(128ﾊﾞｲﾄ)
C0M/REL file
COM及びRELﾌｧｲﾙの書込み用ﾊﾞｯﾌｧ 4Kﾊﾞｲﾄ(2Kﾊﾞｲﾄ) 128～32Kﾊﾞｲﾄ 大きい方がﾃﾞｨｽｸ書込み時間の短縮
PRN file
ﾘｽﾄ(PRN)ﾊﾞｯﾌｧの書込み用ﾊﾞｯﾌｧ 1Kﾊﾞｲﾄ 128～32Kﾊﾞｲﾄ
MACR0 buff
ﾏｸﾛ登録用ﾊﾞｯﾌｧ 512個(256個) 0～1K個 使用するﾏｸﾛ定義の数、大きさによる
LABEL buff
ﾗﾍﾞﾙ登録用のﾊﾞｯﾌｧ 1K個 128～2K個 ﾗﾍﾞﾙ数によって設定する
注意: ( )内はCP/M-80版です。

6.2.3.2 ﾘﾝｶ

 次表にﾘﾝｶのｲﾝｽﾄｰﾙ項目を示します。
 ■
ﾘﾝｶのｲﾝｽﾄｰﾙ項目 (CP/M-80版のみ)
名前 使用目的 初期値 可変範囲 備考
Link Memory
ﾘﾝｸ作業用のﾊﾞｯﾌｧで、この値でﾘﾝｸできるﾌﾟﾛｸﾞﾗﾑ･ｻｲｽﾞが決まります。 8000H(32K) 1000H(4K)～C000H(48K)
Label Buff
ｸﾞﾛｰﾊﾞﾙ･ﾗﾍﾞﾙ用のﾊﾞｯﾌｧで、この値でﾗﾍﾞﾙ登録の最大数が決まります。 512 128～2048
Read Buff
ﾃﾞｨｽｸ･ﾘｰﾄﾞ用ﾊﾞｯﾌｧ 2Kﾊﾞｲﾄ 128～32Kﾊﾞｲﾄ 大きい方がﾃﾞｨｽｸI/Oが高速
Write Buff
ﾃﾞｨｽｸ･ﾗｲﾄ用ﾊﾞｯﾌｧ 1Kﾊﾞｲﾄ 同上
Work Area
ﾘﾝｶが使用するﾜｰｸ･ｴﾘｱ 1Kﾊﾞｲﾄ 同上

6.2.4 lNSTALLの使用例

 次にﾘﾛｹｰﾀﾌﾞﾙ版ｱｾﾝﾌﾞﾗ(IR80)のｲｿｽﾄｰﾙ例を示します。
C:>INSTALL
INSTALL (IR80.C0M) Ver. X.X 1985 by lWASAKl/K.M.C.
S0RC ----------- 128 byte
INCLUDE[1] ----- 256 byte
INCLUDE[2] ----- 128 byte
INCLUDE[3] ----- 128 byte
C0M/REL file --- 512 byte
PRN file ------- 512 byte
MACR0 buff ----- 512 macros
LABEL buff -----  2K labels
Write new lR80.C0M (Y/N) ? Y


ﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成方法

§7 ﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成方法

PROASM-Ⅱは独自の強力なﾏｸﾛ機能や柔軟な文字列操作命令を用いてﾏｸﾛ･ﾗｲﾌﾞﾗﾘを作成することにより、Z80以外のCPUの汎用ﾏｸﾛ･ｱｾﾝﾌﾞﾗとして機能することができます。ここでは8048用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成を例にとってﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成手順について詳しく説明します。但し、ある程度ｱｾﾝﾌﾞﾘ言語についての知識を持たれた方を対象にしています。
7.1 MOV命令用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成
7.2 MOV命令以外のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成
7.3 その他の注意事項


MOV命令用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成

7.1 MOV命令用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成

MOV命令には8048の中で最も複雑なｱﾄﾞﾚｯｼﾝｸﾞ･ﾓｰﾄﾞの変化があります。従ってMOV命令をうまくﾏｸﾛ･ﾗｲﾌﾞﾗﾘ化することができれば、その他の命令のほとんどはMOV命令の形式のﾊﾞﾘｪｰｼｮﾝによってﾏｸﾛ･ﾗｲﾌﾞﾗﾘ化することが出来ます。次表は8048の全MOV命令のｺｰﾄﾞ･ﾊﾞﾀｰﾝを示したものです。
■ 8048のMOV命令
命令記号 | 命令ｺｰﾄﾞ
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 16進
M0V A,#n
0 0 1 0 0 0 1 1 23
n7 | n6 | n5 | n4 | n3 | n2 | n1 | n0 | n
M0V A,PSW
1 1 0 0 0 1 1 1 C7
M0V A,Rr
1 1 1 1 1 r2 r1 r0 F8+r
MOV A,@Rr
1 1 1 1 0 0 0 r0 F0+r
M0V PSW,A
1 1 0 1 0 1 1 1 D7
M0V Rr,A
1 0 1 0 1 r2 r1 r0 A8+r
M0V Rr,#n
1 0 1 1 1 r2 r1 r0 B8+r
n7 | n6 | n5 | n4 | n3 | n2 | n1 | n0 | n
M0V @Rr,A
1 0 1 0 0 0 0 r0 A0+r
M0V @Rr,#n
1 0 1 1 0 0 0 r0 B0+r
n7 | n6 | n5 | n4 | n3 | n2 | n1 | n0 | n
M0V A,T
0 1 0 0 0 0 1 0 42
M0V T,A
0 1 1 0 0 0 1 0 62
表のはじめのMOV命令であるMOV A,#nは、MOV A,#部分と一致するﾊﾟﾗﾒｰﾀ付ﾏｸﾛを使用します。
<M0V A,#*> MACR0  X,Y
ここで、Xが第1ﾊﾟﾗﾒｰﾀ、Yが第2ﾊﾟﾗﾒｰﾀ、*はすべてのﾊﾟﾀｰﾝに一致のﾏｸﾛ定義となります。次にﾏｸﾛの展開の部分の記述は、1ﾊﾞｲﾄ目が23H、2ﾊﾞｲﾄ目はMOV A,#nのnの値となります。しかし、第2ﾊﾞﾗﾒｰﾀのYは#n(n:数値)となっています。ここでは特殊文字列を使用することにより、#とnの部分を分けて処理します。
前から1文字目以降
      DB   023H,
<Y> :f1-
      ENDM
#nのnの部分の切り出し
これでMOV A,#nのﾏｸﾛ定義の完了です。MOV A,PSWは先に説明したﾊﾞﾗﾒｰﾀ付ﾏｸﾛにより、次のように記述できます。
<MOV A,PSW> MACRO X,Y
            DB    0C7H
            ENDM
MOV A,Rrも同じく、ﾏｸﾛ定義部分はﾊﾟﾗﾒｰﾀ付ﾏｸﾛによって定義します。
<MOV A,R*> MACRO X,Y
ﾏｸﾛ展開部分のRn(ﾚｼﾞｽﾀR0～R7)の部分を値のﾏｸﾛによって記述します。
ﾚｼﾞｽﾀ名
      DB   0F8H+
{REG0= Y }
      ENDM
値のﾏｸﾛ
ここでREG0は以下のように定義しておかなければいけません。
{REG0}  MACRO
R0      =       0
R1      =       1
R2      =       2
R3      =       3
R4      =       4
R5      =       5
R6      =       6
R7      =       7
        ENDM
このように値のﾏｸﾛを使用することにより、特定の文字列を使った定数値(ここではﾚｼﾞｽﾀ名に対応した0～7値)に変更することが可能になっています。以上の手順を用いて、すべてのMOV命令のﾏｸﾛ定義した例を次に示します。
例: 8048のすべてのMOV命令のﾏｸﾛ定義例
{REG0}       MACRO
値のﾏｸﾛ定義
r0           =     0
r1           =     1
r2           =     2
r3           =     3
r4           =     4
r5           =     5
r6           =     6
r7           =     7
             ENDM
{@REG0}      MACRO
@R0          =     0
@R1          =     1
             ENDM
<MOV A,#*>   MACRO X,Y
ﾊﾟﾗﾒｰﾀ付きﾏｸﾛ
             DB    023H,<Y>:F1-
特殊文字列
             ENDM
<MOV A,PSW>  MACRO X,Y
             DB    0C7H
             ENDM
<MOV A,R*>   MACRO X,Y
             DB    0F8H+{REG0=Y}
値のﾏｸﾛの呼出し
             ENDM
<MOV A,@R*>  MACRO X,Y
             DB    0F0H,{@REG0=Y}
             ENDM
<MOV PSW,A>  MACRO X,Y
             DB    0D7h
             ENDM
<MOV R*,A>   MACRO X,Y
             DB    0A8H+{REG0=X}
             ENDM
<MOV R*,#*>  MACRO X,Y
             DB    0B8H+{REG0=X},<Y>:F1-
             ENDM
<MOV @R*,A>  MACRO X,Y
             DB    0A0H+{@REG0=X}
             ENDM
<MOV @R*,#*> MACRO X,Y
             DB    0B0H+{@REG0=X},<Y>:F1-
             ENDM
<MOV A,T>    MACRO X,Y
             DB    042H
             ENDM
<MOV T,A>    MACRO X,Y
             DB    062H
             ENDM


MOV命令以外のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成

7.2 MOV命令以外のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ作成

MOV以外のADD, ANL, ORL, XRL, DEC, INC, …等のほとんどの命令は先に示したﾊﾞﾗﾒｰﾀ付ﾏｸﾛ、値のﾏｸﾛ、特殊文字列を利用することにより、ﾏｸﾛ定義することができます。しかし、JB0～JB7, JC, JZなどの条件ｼﾞｬﾝﾌﾟ命令は以下のような注意が必要です。ここでは、JC命令を例に説明します。
■ 8048のJC命令
命令記号 | 命令ｺｰﾄﾞ
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 16進
JC m
1 1 1 1 0 1 1 0 F6
m7 | m6 | m5 | m4 | m3 | m2 | m1 | m0 | m
JC命令のﾏｸﾛ定義を次のように考えます。
JC MACRO X
   DB    0F6H,LOW X
   ENDM
しかし、この場合、8048CPUの性質である、現在のﾛｹｰｼｮﾝの上位(8～10ﾋﾞｯﾄ)ｱﾄﾞﾚｽがｼﾞｬﾝﾌﾟ先のﾛｹｰｼｮﾝと同じでなければならないということで、問題が起きます。従って現在のﾛｹｰｼｮﾝとｼﾞｬﾝﾌﾟ先のﾛｹｰｼｮﾝが同じであることを検査しなければいけません。そこでその検査を行うためにERRCK命令を用いて、以下のようなJC命令と記述しなければなりません。
JC MACRO  X
   ERRCK2 (HIGH $+1) EQ (HIGH X)
   DB     0F6H,LOW X
   ENDM
ここでERRCK2はﾊﾟｽ2のみ検査することを意味します。また、(HIGH $+1)は現在のﾛｹｰｼｮﾝの上位ﾊﾞｲﾄ、(HIGH X)はｼﾞｬﾝﾌﾟ先のﾛｹｰｼｮﾝの上位ﾊﾞｲﾄで、これらの値が一致することを検査しています。
参考: 8048が本質的にﾘﾛｹｰﾀﾌﾞﾙにならないのは条件ｼﾞｬﾝﾌﾟと現在のﾛｹｰｼｮﾝの関係がｱﾌﾞｿﾘｭｰﾄ(絶対的)でなければならないからです。


その他の注意事項

7.3 その他の注意事項

ﾏｸﾛ･ﾗｲﾌﾞﾗﾘの作成において先に説明したこと以外に次のことに注意して下さい。
■ PROASM-Ⅱは2ﾊﾟｽ方式のｱｾﾝﾌﾞﾗのため、ﾊﾟｽ1時にはﾗﾍﾞﾙを参照しても不定の値しか返ってきません。従って値の検査は、IF1, IF2, ERRCK/1/2,命令を利用して、できるだけﾊﾟｽ2で行うようにして下さい。
■ PROASM-Ⅱのﾘﾛｹｰﾀﾌﾞﾙ版(IR80)には、ﾘﾛｹｰﾀﾌﾞﾙ、ｴｸｽﾀｰﾅﾙ、ｱﾌﾞｿﾘｭｰﾄのﾓｰﾄﾞがあり、演算によってはｴﾗｰになる場合がありますので、演算ﾓｰﾄﾞに注意が必要です。
■ 同じ名前でのﾏｸﾛ定義(例えば8048のMOV命令など)を複数個行った場合、ﾏｸﾛ･ﾃｰﾌﾞﾙの検索は先に定義したものから順に検索します。従ってﾏｸﾛ定義の順番に注意が必要です。例えば次のような例では下のﾏｸﾛ展開は絶対に検索されないことになります。
MOV       MACRO X,Y
ﾏｸﾛ1
          DB    X,Y
          ENDM
<MOV A,B> MACRO X,Y
ﾏｸﾛ1
          DB    10H
          ENDM
          MOV   A,B
先に定義されているﾏｸﾛ1に一致
          DB    A,B
■ 特殊文字列を用いたDB, DWに対して演算子を使用出来ません。
      DB LOW <#1234>:F1-
使用できない
この場合は次のように記述します。
IMDAT MACRO X
      DB    HIGH X,LOW X
      ENDM
      IMDAT <#1234>:F1-
上記のようにIMADTというﾏｸﾛを作成し、このﾏｸﾛ内で演算して下さい。
■ 相対ｼﾞｬﾝﾌﾟ命令を定義する場合、ｼﾞｬﾝﾌﾟ先のﾛｹｰｼｮﾝと現在のﾛｹｰｼｮﾝの差が相対ｱﾄﾞﾚｽの範囲内であるか検査しなければいけません。検査の方法の例として630XのBCC命令(1ﾊﾞｲﾄ相対)を以下に示します。他の相対ｱﾄﾞﾚｽを用いる命令についても同様の方法で検査して下さい。
BCC MACRO  X

    ERRCK2 ((X-$)<130) AND ((X-$)>-127)
((X-$-2)<128) AND ((X-$-2)>-129)と等価
$-2
命令の先頭のﾛｹｰｼｮﾝ


構造化ﾏｸﾛ

§8 構造化ﾏｸﾛ

8.1 構造化ﾏｸﾛの動作概要

 ｱｾﾝﾌﾞﾗの記述をよりわかりやすく、効率よくするために、構造化ﾏｸﾛを利用すると便利です。PROASM-Ⅱには、8085用及びZ80用のﾏｸﾛ･ﾗｲﾌﾞﾗﾘ(STRMAC.MAC, STRMACZ.MAC)が付属しています。他のCPUについてはｻﾎﾟｰﾄしていませんが、付属のものを参考にして作成して下さい。

 8.2 機能説明

 8.2.1 構文

 ■ IF THEN ELSE

      $IF    条件式
     {$ELSE}
      $ENDIF
■ REPEAT

      $REPEAT
     {$DOEXET  条件式}
      $UNTIL  {条件式}
条件式省略時は無条件ﾙｰﾌﾟ
■ DOWHILE

      $DOWHILE 条件式
     {$DOEXIT  条件式}
      $END     WHILE
■ DOCASE

      $DOCASE  変数
      $CASE    N1
      $CASE    N2
      $CASE   {Nn}
Nn省略時は無条件実行
      $ENDCASE
注意: ﾈｽﾄの深さは5ﾚﾍﾞﾙまでです。

8.2.2 条件式

 8.2.2.1 変数、演算、数値

■ 変数

A, B, C, D, E, H, L, M | ﾚｼﾞｽﾀ
*ﾗﾍﾞﾙ | ﾗﾍﾞﾙで示されるｱﾄﾞﾚｽの内容
■ 演算

EQまたは= | 等しい
NE | 等しくない
GT | より大きい
LT | より小さい
GE | より大きいか等しい
LE | より小さいか等しい
■ 数値
1ﾊﾞｲﾄの絶対値とします。
例: 変数、演算、数値の使用例
      $IF    A,EQ,1
      CALL   A1
      $ELSE
      CALL   A1
      $ENDIF

8.2.2.2 ﾌﾗｸﾞ判定の場合

Z
ZeroﾌﾗｸﾞONの時
NZ
ZeroﾌﾗｸﾞOFFの時
C
CarryﾌﾗｸﾞONの時
NC
CarryﾌﾗｸﾞOFFの時
PO
Odd Parityの時
PE
Even Parityの時
M
Minusの時
P
Plusの時
例: ﾌﾗｸﾞ使用例
      $REPEAT
      …
      AND    01H
      $UNTIL Z

8.3 使用例

0000'             .LIST
0000          ;
0000              .%ALL
0000  FE01  +     $IF      A,EQ,1
0002  C20700+
0005  3E01        LD       A,1
0007              $ENDIF
0007          ;
0007  3A3700+     $DOCASE  *GG
000A  FE01  +     $CASE    1
000C  C21400+
000F  3E01        LD       A,1
0011  C30300+     $CASE    2
0014  FE02  +
0016  C21B00+
0019  3E02        LD       A,2
001B              $ENDCASE
001B          ;
001B              $REPEAT
001B  0E02        LD       C,2
001D  3A3700+     $DOEXIT  *GG,LT,3
0020  FE03  +
0022  DA3000+
0025  3A3700+     $UNTIL   *GG,GT,5
0028  FE05  +
002A  DA1B00+
002D  CA1B00+
0030          ;
0030              $DOCASE  A
0030  FE03  +     $CASE    3
0032  C23700+
0035  1E02        LD       E,2
0037              $ENDCASE
0037          ;
0037          GG: DS       1
0038              END


注意事項

■ CP/M-80版についての注意
PROASM-ⅡのCP/M-80版は、64KCP/Mｼｽﾃﾑを基本にして作成されています。従って64K CP/Mよりｻｲｽﾞの小さいｼｽﾃﾑを使用する場合には、第6章 ｲﾝｽﾄｰﾙ･ﾕｰﾃｨﾘﾃｨの項に従ってｱｾﾝﾌﾞﾗ及びﾘﾝｶの使用するﾜｰｸｴﾘｱ及びﾊﾞｯﾌｧの大きさを小さくする必要があります。この操作によって56K～64K CP/Mでは動作可能となりますが、56K CP/Mよりｻｲｽﾞの小さいｼｽﾃﾑでは動作しませんので、あらかじめ御了承下さい。
■ MS-DOS版の階層ﾃﾞｨﾚｸﾄﾘのｻﾎﾟｰﾄについて
PROASM-Ⅱ MS-DOS版のｱｾﾝﾌﾞﾗ(IA80,IR80)、ﾘﾝｶ(LNK)、ﾒｲｸ･ｼﾝﾎﾞﾙ(MS)、ﾗｲﾌﾞﾗﾘ･ﾏﾈｰｼﾞｬ(LIB)には、それぞれ2種類のﾌﾟﾛｸﾞﾗﾑが収められています。このうち、IA802.EXE、IR802.EXE、LNK2.EXE、MS2.EXE、LIB2.EXEはMS-DOSのﾊﾞｰｼﾞｮﾝ2.0以上で使用できます。これらは階層ﾃﾞｨﾚｸﾄﾘをｻﾎﾟｰﾄしており、ｺﾏﾝﾄﾞ内のﾌｧｲﾙ名にﾊﾟｽ名の指定ができます。

 また、IA80.EXE、IR80.EXE、LNK.EXE、MS.EXE、LIB.EXEはMS-DOSのﾊﾞｰｼﾞｮﾝ1.0以上で使用でき、階層ﾃﾞｨﾚｸﾄﾘはｻﾎﾟｰﾄしていません。使用するMS-DOSのﾊﾞｰｼﾞｮﾝに応じてこれらを使い分けて下さい。
■ ﾊﾟｽ名の指定について
C:>IA802 IWASAKI\KMC
ﾃﾞｨﾚｸﾄﾘIWASAKIのKMCﾌｧｲﾙをｱｾﾝﾌﾞﾙ。