casl2lib無視ファイルの設定ミスを修正
[YACASL2.git] / doc / manual.texi
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3 @ifnottex
4 @documentlanguage ja_JP
5 @end ifnottex
6 @setfilename yacasl2.info
7 @documentencoding UTF-8
8 @settitle YACASL2 - CASL II 処理システム
9 @firstparagraphindent insert
10 @paragraphindent 1
11 @ifhtml
12 @exampleindent 0
13 @end ifhtml
14 @c %**end of header
15
16 @copying
17 Copyright @copyright{} 2010-2018 j8takagi
18 @end copying
19
20 @dircategory Programming
21 @direntry
22 * YACASL2: (yacasl2.info).                     CASL II 処理システム
23 * casl2: (yacasl2.info)casl2 invocation.       casl2の呼び出し
24 * comet2: (yacasl2.info)comet2 invocation.     comet2の呼び出し
25 * dumpword: (yacasl2.info)dumpword invocation. dumpwordの呼び出し
26 @end direntry
27
28 @titlepage
29 @title YACASL2
30 @subtitle コマンドラインインターフェイスで動作するオープンソースのCASL II処理システム
31 @author j8takagi
32 @insertcopying
33 @end titlepage
34
35 @node Top, Overview, (dir), (dir)
36
37 @menu
38 * Overview::                    YACASL2の概要
39 * Sample usage::                YACASL2の使用例
40 * casl2 invocation::            casl2の呼び出し
41 * comet2 invocation::           comet2の呼び出し
42 * dumpword invocation::         dumpwordの呼び出し
43 * CASL2LIB Manual::             CASL2LIBマニュアル
44 @end menu
45
46 @contents
47
48 @node Overview, Sample usage, Top, Top
49 @chapter YACASL2の概要
50
51 YACASL2は、UNIXやLinuxのコマンドラインインターフェイスで
52 動作するオープンソースのCASL II処理システムです。
53 CASL IIは情報処理試験で用いられるアセンブラ言語で、
54 次の資料により仕様が公開されています。
55
56 @iftex
57 @cartouche
58 @end iftex
59 @quotation
60 @uref{http://www.jitec.jp/1_13download/shiken_yougo_ver2_2.pdf, 試験で使用する情報処理用語・プログラム言語など Ver 2.2(平成24年5月22日)}[PDFファイル]
61 別紙 1 アセンブラ言語の仕様
62 @end quotation
63 @iftex
64 @end cartouche
65 @end iftex
66
67 YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
68 仮想マシンCOMET II上で実行します。
69 アセンブルと実行は、連続で行うこともできますし、
70 アセンブル結果をファイルに保存してあとから実行することもできます。
71 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
72 はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
73 そのままアセンブルして実行できます。
74 また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
75
76 YACASL2は、「ふつうの処理系」として動作します。
77 ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、
78 コンピュータ内部の模式図を表示したりすることはありません。
79 そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
80
81 @itemize @bullet
82
83 @item
84 ラベルとアドレスの対応
85
86 @item
87 アセンブル結果
88
89 @item
90 実行時のレジスタの内容
91
92 @item
93 実行時のメモリの内容
94 @end itemize
95
96 出力された動作内容は、GNU/Linuxのさまざまなコマンド、
97 たとえば、@command{cat}、@command{less}、@command{grep}、@command{wc}などを使って解析できます。
98
99 YACASL2の操作は、端末上のコマンドラインインターフェイスで行います。
100
101 @node Sample usage, casl2 invocation, Overview, Top
102 @chapter YACASL2の使用例
103 YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。
104 以下の例で用いられるCASLプログラムのファイルは、
105 テキストエディタなどで作成するか、インストールしたディレクトリの
106 中にある@file{as}ディレクトリからコピーしてください。
107
108 @menu
109 * Simple output::               実行結果の出力だけを表示
110 * Assemble result::             アセンブル結果の確認
111 * Register and memory::         実行時のレジスタとメモリを表示
112 * Only assemble::               アセンブルと実行を別に行う
113 * Analyze word::                1語の解析
114 * Use CASL2LIB::                CASL2ライブラリの使用
115 @end menu
116
117 @node Simple output, Assemble result, Sample usage, Sample usage
118 @section 実行結果の出力だけを表示
119
120 インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。
121 CASL IIのマクロ命令OUTは、文字列を出力します。
122
123 @example
124 $ @kbd{cat hello.casl}
125 MAIN     START
126          OUT     OBUF,LEN
127          RET
128 OBUF     DC      'Hello, World!'
129 LEN      DC      13
130          END
131 @end example
132
133 次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
134
135 @example
136 $ @kbd{casl2 hello.casl}
137 Hello, World!
138 @end example
139
140 @file{addl.casl}は、3と1の和を求めます。
141
142 @example
143 $ @kbd{cat addl.casl}
144 ;;; ADDL r,adr
145 MAIN     START
146          LD      GR1,A
147          ADDL    GR1,B
148          RET
149 A        DC      3
150 B        DC      1
151          END
152 @end example
153
154 このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
155
156 @example
157 $ @kbd{casl2 addl.casl}
158 $
159 @end example
160
161 実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
162
163 @node Assemble result, Register and memory, Simple output, Sample usage
164 @section アセンブル結果の確認
165
166 casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。
167 また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
168
169 次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。
170 OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
171
172 @example
173 $ @kbd{casl2 -a -l hello.casl}
174
175 Assemble hello.casl (0)
176
177 Label::::
178 MAIN.LEN ---> #0020
179 MAIN ---> #0000
180 MAIN.OBUF ---> #0013
181
182 Assemble hello.casl (1)
183 hello.casl:    1:MAIN    START
184 hello.casl:    2:        OUT     OBUF,LEN
185     #0000   #7001
186     #0001   #0000
187     #0002   #7002
188     #0003   #0000
189     #0004   #1210
190     #0005   #0013
191     #0006   #1220
192     #0007   #0020
193     #0008   #F000
194     #0009   #0002
195     #000A   #1210
196     #000B   #0021
197     #0021   #000A
198     #000C   #1220
199     #000D   #0022
200     #0022   #0001
201     #000E   #F000
202     #000F   #0002
203     #0010   #7120
204     #0011   #7110
205 hello.casl:    3:        RET
206     #0012   #8100
207 hello.casl:    4:OBUF    DC      'Hello, World!'
208     #0013   #0048
209     #0014   #0065
210     #0015   #006C
211     #0016   #006C
212     #0017   #006F
213     #0018   #002C
214     #0019   #0020
215     #001A   #0057
216     #001B   #006F
217     #001C   #0072
218     #001D   #006C
219     #001E   #0064
220     #001F   #0021
221 hello.casl:    5:LEN     DC      13
222     #0020   #000D
223 hello.casl:    6:        END
224 Hello, World!
225 @end example
226
227 @file{addl.casl}の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
228
229 @example
230 $ @kbd{casl2 -a -l addl.casl}
231
232 Assemble addl.casl (0)
233
234 Label::::
235 MAIN.A ---> #0005
236 MAIN.B ---> #0006
237 MAIN ---> #0000
238
239 Assemble addl.casl (1)
240 addl.casl:    1:;;; ADDL r,adr
241 addl.casl:    2:MAIN    START
242 addl.casl:    3:        LD      GR1,A
243     #0000   #1010
244     #0001   #0005
245 addl.casl:    4:        ADDL    GR1,B
246     #0002   #2210
247     #0003   #0006
248 addl.casl:    5:        RET
249     #0004   #8100
250 addl.casl:    6:A       DC      3
251     #0005   #0003
252 addl.casl:    7:B       DC      1
253     #0006   #0001
254 addl.casl:    8:        END
255 @end example
256
257 なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。
258 仮想マシンCOMET II での実行は行われません。
259
260 @node Register and memory, Only assemble, Assemble result, Sample usage
261 @section 実行時のレジスタとメモリを表示
262
263 YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
264
265 また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。
266 小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
267
268 @menu
269 * Register specify::            特定のレジスタを表示
270 * End value::
271 * Step count::                  プログラムのステップ数を表示
272 @end menu
273
274 @file{addl.casl}に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
275
276 @example
277 $ @kbd{casl2 -t -d -M8 addl.casl | less}
278
279 Assemble addl.casl (0)
280
281 Assemble addl.casl (1)
282
283 Executing machine codes
284 #0000: Register::::
285 #0000: GR0:      0 = #0000 = 0000000000000000
286 #0000: GR1:      0 = #0000 = 0000000000000000
287 #0000: GR2:      0 = #0000 = 0000000000000000
288 #0000: GR3:      0 = #0000 = 0000000000000000
289 #0000: GR4:      0 = #0000 = 0000000000000000
290 #0000: GR5:      0 = #0000 = 0000000000000000
291 #0000: GR6:      0 = #0000 = 0000000000000000
292 #0000: GR7:      0 = #0000 = 0000000000000000
293 #0000: SP:       8 = #0008 = 0000000000001000
294 #0000: PR:       0 = #0000 = 0000000000000000
295 #0000: FR (OF SF ZF): 000
296 #0000: Memory::::
297 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
298 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
299 #0002: Register::::
300 #0002: GR0:      0 = #0000 = 0000000000000000
301 #0002: GR1:      3 = #0003 = 0000000000000011
302 #0002: GR2:      0 = #0000 = 0000000000000000
303 #0002: GR3:      0 = #0000 = 0000000000000000
304 #0002: GR4:      0 = #0000 = 0000000000000000
305 #0002: GR5:      0 = #0000 = 0000000000000000
306 #0002: GR6:      0 = #0000 = 0000000000000000
307 #0002: GR7:      0 = #0000 = 0000000000000000
308 #0002: SP:       8 = #0008 = 0000000000001000
309 #0002: PR:       2 = #0002 = 0000000000000010
310 #0002: FR (OF SF ZF): 000
311 #0002: Memory::::
312 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
313 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
314 #0004: Register::::
315 #0004: GR0:      0 = #0000 = 0000000000000000
316 #0004: GR1:      4 = #0004 = 0000000000000100
317 #0004: GR2:      0 = #0000 = 0000000000000000
318 #0004: GR3:      0 = #0000 = 0000000000000000
319 #0004: GR4:      0 = #0000 = 0000000000000000
320 #0004: GR5:      0 = #0000 = 0000000000000000
321 #0004: GR6:      0 = #0000 = 0000000000000000
322 #0004: GR7:      0 = #0000 = 0000000000000000
323 #0004: SP:       8 = #0008 = 0000000000001000
324 #0004: PR:       4 = #0004 = 0000000000000100
325 #0004: FR (OF SF ZF): 000
326 #0004: Memory::::
327 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
328 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
329 @end example
330
331 @node Register specify, End value, Register and memory, Register and memory
332 @subsection 特定のレジスタを表示
333
334 @file{addl.casl}のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。
335 こうした場合は、@command{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
336
337 @example
338 $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
339 #0000: GR1:      0 = #0000 = 0000000000000000
340 #0002: GR1:      3 = #0003 = 0000000000000011
341 #0004: GR1:      4 = #0004 = 0000000000000100
342 @end example
343
344 この内容を、先に出力したアセンブル結果と引き比べてください。
345 次の表のように、PRとGR1、命令行が対応していることがわかります。
346
347 @multitable @columnfractions .3 .3 .4
348 @item PR @tab GR1 @tab 命令行
349 @item #0000
350 @tab #0000
351 @item #0002
352 @tab #0003
353 @tab @code{LD GR1,A}
354 @item #0004
355 @tab #0004
356 @tab @code{ADDL GR1,B}
357 @end multitable
358
359 @node End value, Step count, Register specify, Register and memory
360 @subsection プログラム終了時の値を表示
361
362 @command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
363
364 @file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
365
366 @example
367 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
368 #0004: GR1:      4 = #0004 = 0000000000000100
369 @end example
370
371 @file{sum_10.casl}は、1から10までの整数の和を求めます。
372
373 @example
374 $ @kbd{cat sum_10.casl}
375 ;;; sum_10.casl
376 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
377 MAIN    START
378         PUSH    0,GR1
379         LAD     GR0,0           ; GR0を初期化
380         LD      GR1,FST         ; GR1に初項を転送
381 LOOP    ADDL    GR0,GR1         ; ループ先頭
382         ADDL    GR1,STEP        ; GR1 <- GR1 + 公差
383         CPL     GR1,LST         ; GR1が末項より大きい場合は終了
384         JPL     FIN             ; ↓
385         JUMP    LOOP            ; ループ終端
386 FIN     POP     GR1
387         RET
388 FST     DC      1               ; 初項
389 LST     DC      10              ; 末項
390 STEP    DC      1               ; 公差
391         END
392 @end example
393
394 @file{sum_10.casl}でファイル終了時の値を確認するには、次のようにします。
395
396 @example
397 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
398 #0010: GR0:     55 = #0037 = 0000000000110111 = '7'
399 @end example
400
401 @node Step count,  , End value, Register and memory
402 @subsection プログラムのステップ数を表示
403
404 @command{grep}と@command{wc}を組み合わせれば、プログラムのステップ数を表示できます。
405
406 @example
407 $ @kbd{casl2 -t hello.casl | grep 'GR1:' | wc -l}
408 11
409 @end example
410
411 @example
412 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
413 3
414 @end example
415
416 @file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
417
418 @example
419 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
420 54
421 @end example
422
423 @node Only assemble, Analyze word, Register and memory, Sample usage
424 @section アセンブルと実行を別に行う
425
426 @command{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
427
428 @example
429 $ @kbd{casl2 -Ohello.o hello.casl}
430 @end example
431
432 作成されたオブジェクトファイルの内容は、@command{od}を使って確認できます。
433 テキストファイルではないため、@command{cat}などでは確認できません。
434
435 @example
436 $ @kbd{od -t x2 hello.o}
437 0000000 7001 0000 7002 0000 1210 0013 1220 0020
438 0000020 f000 0002 1210 0021 1220 0022 f000 0002
439 0000040 7120 7110 8100 0048 0065 006c 006c 006f
440 0000060 002c 0020 0057 006f 0072 006c 0064 0021
441 0000100 000d 000a 0001
442 0000106
443 @end example
444
445 オブジェクトファイルの実行には、@command{comet2}を使います。
446
447 @example
448 $ @kbd{comet2 hello.o}
449 Hello, World!
450 @end example
451
452 @node Analyze word, Use CASL2LIB, Only assemble, Sample usage
453 @section 1語の解析
454
455 CASL IIでは、1語(1 word、16ビット)を単位としてデータが処理されます。
456 @command{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
457
458 @example
459 $ @kbd{dumpword 72}
460     72:     72 = #0048 = 0000000001001000 = 'H'
461 @end example
462
463 @node Use CASL2LIB,  , Analyze word, Sample usage
464 @section CASL2ライブラリの使用
465
466 YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
467
468 このフォルダには、たとえば次のようなプログラムが含まれています。
469
470 @table @option
471 @item OUTL
472 @file{outl.casl}。
473 GR1に格納された値を、0以上65535以下の整数として出力します。
474
475 @item OUTA
476 @file{outa.casl}。
477 GR1に格納された値を、-32767以上32767以下の整数として出力します。
478
479 @item MULL
480 @file{mull.casl}。
481 GR1とGR2に格納された値を0以上65535以下の整数と見なし、積をGR3に格納します。
482
483 @item DIVL
484 @file{divl.casl}。
485 GR1とGR2に格納された値を0以上65535以下の整数と見なし、商をGR3、剰余をGR0に格納します。
486 @end table
487
488 @subsection 数値を出力する
489
490 3と1の和を求める@file{addl.casl}で演算結果を出力するには、まず@file{addl.casl}を編集します。
491 CASL IIの@command{CALL}命令で@command{OUTL}を副プログラムとして呼び出します。
492
493 @example
494 $ @kbd{cat addl_outl.casl}
495 MAIN    START
496         LD      GR1,A
497         ADDL    GR1,B
498         @emph{CALL    OUTL}
499         RET
500 A       DC      3
501 B       DC      1
502         END
503 @end example
504
505 変更したら@command{casl2}を、複数のファイルを指定して実行します。
506
507 @example
508 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
509 4
510 @end example
511
512 @node casl2 invocation, comet2 invocation, Sample usage, Top
513 @chapter @command{casl2}の呼び出し
514
515 @pindex casl2
516 @cindex casl2
517 @cindex invoking
518 @cindex options
519 @cindex usage
520 @cindex help
521
522 @command{casl2}は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。
523 CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。
524 引数が指定されない場合は、エラーメッセージを表示して終了します。
525
526 @example
527 $ @kbd{casl2 hello.casl}
528 @end example
529
530 複数のCASLファイルを指定することで、副プログラムを呼び出すこともできます。
531
532 @example
533 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
534 @end example
535
536 @unnumberedsec オプション
537
538 @command{casl2}は、次のオプションを指定できます。
539
540 @table @option
541 @item -s
542 @itemx --source
543 CASLファイルの内容を表示します。
544
545 @item -l
546 @itemx --label
547 ラベルの一覧を次の形式で表示します。
548 表示後、ほかの作業を続行します。
549
550 @example
551 <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
552 @end example
553
554 @item -L
555 @itemx --labelonly
556 @option{-l}と同じ形式でラベルの一覧を表示します。
557 表示後、ほかの作業は続行せず、終了します。
558
559 @item -a
560 @itemx --assembledetail
561 アセンブル詳細結果を表示し、ほかの作業を続行します。
562
563 @item -A
564 @itemx --assembledetailonly
565 アセンブル詳細結果を表示して終了します。
566
567 @item -o<OBJECTFILE>
568 @itemx --assembleout<OBJECTFILE>
569 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。
570 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
571 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
572 オブジェクトファイルは1つだけ指定できます。
573
574 @item -O[<OBJECTFILE>]
575 @itemx --assembleoutonly[<OBJECTFILE>]
576 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。
577 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
578 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
579 オブジェクトファイルは1つだけ指定できます。
580
581 @item -t
582 @itemx --trace
583 @itemx --tracearithmetic
584 プログラム実行中のレジスタの値を次の形式で表示します。
585
586 @example
587 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
588 <値の16進数表現> = <値の2進数表現>[ ='文字']
589 @end example
590
591 @itemize
592 @item
593 @code{<PR値の16進数表現>}と@code{<レジスタ>}、@code{<値の16進数表現>}は、4けたの16進数で表されます。
594 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}には、先頭に@code{#}が付きます。
595 範囲は@code{#0000}から@code{#FFFF}です
596
597 @item
598 @code{<値の10進数表現>}は符号の付いた10進数です。
599 範囲は-32768から32767です。
600
601 @item
602 @code{<値の2進数表現>}は、16けたの2進数で表されます。
603 範囲は、@code{0000000000000000}から@code{1111111111111111}です
604
605 @item
606 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
607 @end itemize
608
609 表示されるレジスタには、次の種類があります。
610
611 @table @code
612 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
613 汎用レジスタ
614
615 @item SP
616 スタックポインタ
617
618 @item PR
619 プログラムレジスタ
620
621 @item FR
622 フラグレジスタ
623 @end table
624
625 例えば、次のように表示されます。
626
627 @example
628 #0002: GR1:      3 = #0003 = 0000000000000011
629 @end example
630
631 @item -T
632 @itemx --tracelogical
633 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
634 ただし@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
635 値の範囲は0から65535です。
636
637 @item -d
638 @itemx --dump
639 メモリの内容をすべて表示します。
640
641 @item -M <MEMORYSIZE>
642 @itemx --memorysize <MEMORYSIZE>
643 アセンブルおよび実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
644 指定しない場合、512です。
645
646 @item -C <CLOCKS>
647 @itemx --clocks <CLOCKS>
648 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
649 指定しない場合、クロック周波数は5000000です。
650
651 @item -v
652 @itemx --version
653 @command{casl2}のバージョンを表示して終了します。
654
655 @item -h
656 @itemx --help
657 @command{casl2}の使用方法を表示して終了します。
658 @end table
659
660 @node comet2 invocation, dumpword invocation, casl2 invocation, Top
661 @chapter @command{comet2}の呼び出し
662
663 @pindex comet2
664 @cindex comet2
665 @cindex invoking
666 @cindex options
667 @cindex usage
668 @cindex help
669
670 @command{comet2}は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。
671 オブジェクトファイルは、@command{casl}に@option{-o}または@option{-O}を指定して出力します。
672
673 @example
674 $ @kbd{comet2 hello.o}
675 @end example
676
677 引数で指定できるオブジェクトファイルは1つだけです。
678 引数が指定されない場合は、エラーメッセージを表示して終了します。
679 複数の引数を指定した場合、2番目以降の引数は無視されます。
680
681 @unnumberedsec オプション
682
683 @command{comet2}は、次のオプションを指定できます。
684
685 @table @option
686
687 @item -t
688 @itemx --trace
689 @itemx --tracearithmetic
690 プログラム実行中のレジスタの値を次の形式で表示します。
691 @code{<値の10進数表現>}は符号の付いた10進数です。
692 範囲は-32768から32767です。
693
694 @example
695 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
696 @end example
697
698 @itemize
699 @item
700 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。
701 範囲は、@code{#0000}から@code{#FFFF}です
702
703 @item
704 @code{<値の2進数表現>}は、16けたの2進数で表されます。
705 範囲は、@code{0000000000000000}から@code{1111111111111111}です
706
707 @item
708 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
709 @end itemize
710
711 例えば、次のように表示されます。
712
713 @example
714 #0002: GR1:      3 = #0003 = 0000000000000011
715 @end example
716
717 表示されるレジスタには、次の種類があります。
718
719 @table @code
720 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
721 汎用レジスタ
722
723 @item SP
724 スタックポインタ
725
726 @item PR
727 プログラムレジスタ
728
729 @item FR
730 フラグレジスタ
731 @end table
732
733 @item -T
734 @itemx --tracelogical
735 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
736 ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
737 値の範囲は0から65535です。
738
739 @item -d
740 @itemx --dump
741 メモリの内容をすべて表示します。
742
743 @item -M <MEMORYSIZE>
744 @itemx --memorysize <MEMORYSIZE>
745 実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
746 指定しない場合、512です。
747
748 @item -C <CLOCKS>
749 @itemx --clocks <CLOCKS>
750 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
751 指定しない場合、5000000です。
752
753 @item -v
754 @itemx --version
755 @command{comet2}のバージョンを表示して終了します。
756
757 @item -h
758 @itemx --help
759 @command{comet2}の使用方法を表示して終了します。
760 @end table
761
762 @node dumpword invocation, CASL2LIB Manual, comet2 invocation, Top
763 @chapter @command{dumpword}の呼び出し
764
765 @pindex dumpword
766 @cindex dumpword
767 @cindex invoking
768 @cindex options
769 @cindex usage
770 @cindex help
771
772 @command{dumpword}は引数として指定された数値を、整数、#0000から#FFFFまでの範囲の16進数、2進数で表示します。
773 文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。
774 引数は、10進数または先頭に「#」の付いた16進数で指定します。
775 表示される整数は、オプションにより符号付きか符号なしかを指定します。
776 オプションなしの場合は符号付きです。
777 整数の範囲は、符号付きの場合は-32768以上32767以下、符号なしの場合は0以上65535以下です。
778
779 @example
780 $ @kbd{dumpword 10}
781     10:     10 = #000A = 0000000000001010 = '\n'
782 @end example
783
784 引数が指定されない場合は、使い方を表示して終了します。
785 複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
786
787 @unnumberedsec 注意
788
789 マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
790
791 マイナスの数を指定するときは、次のように@option{--}を付けます。
792
793 @example
794 $ @kbd{dumpword -- -72}
795    -72:    -72 = #FFB8 = 1111111110111000
796 @end example
797
798 先頭に「#」を付けて16進数を指定するときは、次のように「'」で囲みます。
799
800 @example
801 $ @kbd{dumpword '#0048'}
802  #0048:     72 = #0048 = 0000000001001000 = 'H'
803 @end example
804
805 @unnumberedsubsec オプション
806
807 @command{dumpword}は、次のオプションを指定できます。
808
809 @table @option
810
811 @item -a
812 @itemx --arithmetic
813 出力される整数の範囲を-32,768以上32,767以下にします。
814 オプションなしの場合と同じです。
815
816 @item -l
817 @itemx --logical
818 出力される整数の範囲を0以上65,535以下にします。
819
820 @item -v
821 @itemx --version
822 @command{dumpword}のバージョンを表示して終了します。
823
824 @item -h
825 @itemx --help
826 @command{dumpword}の使用方法を表示して終了します。
827 @end table
828
829 @node CASL2LIB Manual,  , dumpword invocation, Top
830 @chapter CASL2LIBマニュアル
831
832 @menu
833 * ABS::                         @kbd{ABS} - @file{abs.casl}
834 * DIVA::                        @kbd{DIVA} - @file{diva.casl}
835 * DIVL::                        @kbd{DIVL} - @file{divl.casl}
836 * INL::                         @kbd{INL} - @file{inl.casl}
837 * L2STR::                       @kbd{L2STR} - @file{l2str.casl}
838 * MAX::                         @kbd{MAX} - @file{max.casl}
839 * MINIM::                       @kbd{MINIM} - @file{minim.casl}
840 * MULA::                        @kbd{MULA} - @file{mula.casl}
841 * MULL::                        @kbd{MULL} - @file{mull.casl}
842 * OUTA::                        @kbd{OUTA} - @file{outa.casl}
843 * OUTB::                        @kbd{OUTB} - @file{outb.casl}
844 * OUTD_Q15::                    @kbd{OUTD_Q15} - @file{outd_q15.casl}
845 * OUTL::                        @kbd{OUTL} - @file{outl.casl}
846 * REV::                         @kbd{REV} - @file{rev.casl}
847 * STR2L::                       @kbd{STR2L} - @file{str2l.casl}
848 @end menu
849
850 @node ABS, DIVA, CASL2LIB Manual, CASL2LIB Manual
851 @section @kbd{ABS} - @file{abs.casl}
852 GR1を符号付き整数とみなし、絶対値に変換
853
854 @unnumberedsubsec 入力
855 @table @code
856 @item GR1
857 符号付き整数
858 @end table
859
860 @unnumberedsubsec 出力
861 @table @code
862 @item GR1
863 入力された値の絶対値
864
865 @item OF
866 入力された値が-32768の場合、1
867
868 @item SF
869 入力された値が負数(-32767から-1)の場合、1
870 @end table
871
872 @unnumberedsubsec 依存する副プログラム
873 なし
874
875 @unnumberedsubsec 使用例
876 @example
877 @verbatiminclude casl2lib/abs/call_abs.casl
878 @end example
879
880 @example
881 $ @kbd{casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
882   $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
883 1
884 @end example
885
886 @node DIVA, DIVL, ABS, CASL2LIB Manual
887 @section @kbd{DIVA} - @file{diva.casl}
888 符号付き整数の割算を筆算方式で行う
889
890 @unnumberedsubsec 入力
891 @table @code
892 @item GR1
893 被除数
894
895 @item GR2
896 除数
897 @end table
898
899 @unnumberedsubsec 出力
900 @table @code
901 @item GR0
902
903
904 @item GR3
905 剰余
906
907 @item OF
908 次の場合、1
909 @itemize
910 @item
911 GR2が0
912
913 @item
914 GR1が-32768
915
916 @item
917 GR2が-32768
918 @end itemize
919
920 @item SF
921 商が負数(-32767から-1)の場合、1
922
923 @item ZF
924 商が0の場合、1
925 @end table
926
927 @unnumberedsubsec 依存する副プログラム
928 @itemize
929 @item @code{DIVL}
930 @end itemize
931
932 @unnumberedsubsec 使用例
933 @example
934 @verbatiminclude casl2lib/diva/call_diva.casl
935 @end example
936
937 @example
938 $ @kbd{casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
939   $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl}
940 -128
941 -127
942 @end example
943
944 @node DIVL, INL, DIVA, CASL2LIB Manual
945 @section @kbd{DIVL} - @file{divl.casl}
946 符号なし整数の割算を筆算方式で行う
947
948 @unnumberedsubsec 入力
949 @table @code
950 @item GR1
951 被除数
952
953 @item GR2
954 除数
955 @end table
956
957 @unnumberedsubsec 出力
958 @table @code
959 @item GR0
960
961
962 @item GR3
963 剰余
964
965 @item OF
966 GR2が0の場合、1
967
968 @item SF
969 商が32768から65535の場合、1
970
971 @item ZF
972 商が0の場合、1
973 @end table
974
975 @unnumberedsubsec 依存する副プログラム
976 なし
977
978 @unnumberedsubsec 使用例
979 @example
980 @verbatiminclude casl2lib/divl/call_divl.casl
981 @end example
982
983 @example
984 $ @kbd{casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
985   $CASL2LIB/rev.casl}
986 256
987 254
988 @end example
989
990 @node INL, L2STR, DIVL, CASL2LIB Manual
991 @section @kbd{INL} - @file{inl.casl}
992
993 符号なし整数の入力を受け付ける
994
995 @unnumberedsubsec 入力
996 @table @code
997 @item 標準入力
998 符号なし整数
999 @end table
1000
1001 @unnumberedsubsec 出力
1002 @table @code
1003 @item GR1
1004 入力された符号なし整数
1005
1006 @item GR0
1007 文字列の長さ。
1008 数字以外が入力された場合は@code{#FFFF}
1009 @end table
1010
1011 @unnumberedsubsec 依存する副プログラム
1012 @itemize
1013 @item
1014 @code{STR2L}
1015 @end itemize
1016
1017 @unnumberedsubsec 使用例
1018 次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
1019
1020 @example
1021 @verbatiminclude casl2lib/inl/call_inl.casl
1022 @end example
1023
1024 @example
1025 $ @kbd{casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
1026   $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
1027 @end example
1028
1029 @node L2STR, MAX, INL, CASL2LIB Manual
1030 @section @kbd{L2STR} - @file{l2str.casl}
1031
1032 符号なし整数を文字列に変換する
1033
1034 @unnumberedsubsec 入力
1035 @table @code
1036 @item GR1
1037 符号なし整数
1038
1039 @item GR2
1040 変換した文字列を格納するアドレス
1041 @end table
1042
1043 @unnumberedsubsec 出力
1044 @table @code
1045 @item GR0
1046 文字列の長さ
1047 @end table
1048
1049 @unnumberedsubsec 依存する副プログラム
1050 @itemize
1051 @item
1052 @code{DIVL}
1053 @end itemize
1054
1055 @node MAX, MINIM, L2STR, CASL2LIB Manual
1056 @section @kbd{MAX} - @file{max.casl}
1057
1058 連続した複数のWORDを符号付き整数とみなして最大値を返す
1059
1060 @unnumberedsubsec 入力
1061 @table @code
1062 @item GR1
1063 WORD値を格納したアドレス
1064
1065 @item GR2
1066 値の個数
1067 @end table
1068
1069 @unnumberedsubsec 出力
1070 @table @code
1071 @item GR0
1072 最大値
1073 @end table
1074
1075 @unnumberedsubsec 依存する副プログラム
1076 なし
1077
1078 @node MINIM, MULA, MAX, CASL2LIB Manual
1079 @section @kbd{MINIM} - @file{minim.casl}
1080
1081 連続した複数のWORDを符号付き整数とみなして最小値を返す
1082
1083 @unnumberedsubsec 入力
1084 @table @code
1085 @item GR1
1086 WORD値を格納したアドレス
1087
1088 @item GR2
1089 値の個数
1090 @end table
1091
1092 @unnumberedsubsec 出力
1093 @table @code
1094 @item GR0
1095 最小値
1096 @end table
1097
1098 @unnumberedsubsec 依存する副プログラム
1099 なし
1100
1101 @node MULA, MULL, MINIM, CASL2LIB Manual
1102 @section @kbd{MULA} - @file{mula.casl}
1103
1104 @node MULL, OUTA, MULA, CASL2LIB Manual
1105 @section @kbd{MULL} - @file{mull.casl}
1106
1107 @node OUTA, OUTB, MULL, CASL2LIB Manual
1108 @section @kbd{OUTA} - @file{outa.casl}
1109
1110 @node OUTB, OUTD_Q15, OUTA, CASL2LIB Manual
1111 @section @kbd{OUTB} - @file{outb.casl}
1112
1113 @node OUTD_Q15, OUTL, OUTB, CASL2LIB Manual
1114 @section @kbd{OUTD_Q15} - @file{outd_q15.casl}
1115
1116 @node OUTL, REV, OUTD_Q15, CASL2LIB Manual
1117 @section @kbd{OUTL} - @file{outl.casl}
1118
1119 @node REV, STR2L, OUTL, CASL2LIB Manual
1120 @section @kbd{REV} - @file{rev.casl}
1121
1122 @node STR2L,  , REV, CASL2LIB Manual
1123 @section @kbd{STR2L} - @file{str2l.casl}
1124
1125 @bye