69ff0381205ff514affd92eb5b73789a670dea9c
[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
44 @detailmenu
45  --- The Detailed Node Listing ---
46
47 YACASL2の使用例
48
49 * Simple output::               実行結果の出力だけを表示
50 * Assemble result::             アセンブル結果の確認
51 * Register and memory::         実行時のレジスタとメモリを表示
52 * Only assemble::               アセンブルと実行を別に行う
53 * Analyze word::                1語の解析
54 * Use CASL2LIB::                CASL2ライブラリの使用
55
56 実行時のレジスタとメモリを表示
57
58 * Register specify::            特定のレジスタを表示
59 * End value::
60 * Step count::                  プログラムのステップ数を表示
61
62 @end detailmenu
63 @end menu
64
65 @contents
66
67 @node Overview, Sample usage, Top, Top
68 @chapter YACASL2の概要
69
70 YACASL2は、UNIXやLinuxのコマンドラインインターフェイスで
71 動作するオープンソースのCASL II処理システムです。
72 CASL IIは情報処理試験で用いられるアセンブラ言語で、
73 次の資料により仕様が公開されています。
74
75 @iftex
76 @cartouche
77 @end iftex
78 @quotation
79 @uref{http://www.jitec.jp/1_13download/shiken_yougo_ver2_2.pdf, 試験で使用する情報処理用語・プログラム言語など Ver 2.2(平成24年5月22日)}[PDFファイル]
80 別紙 1 アセンブラ言語の仕様
81 @end quotation
82 @iftex
83 @end cartouche
84 @end iftex
85
86 YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
87 仮想マシンCOMET II上で実行します。
88 アセンブルと実行は、連続で行うこともできますし、
89 アセンブル結果をファイルに保存してあとから実行することもできます。
90 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
91 はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
92 そのままアセンブルして実行できます。
93 また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
94
95 YACASL2は、「ふつうの処理系」として動作します。
96 YACASL2の操作は、端末上のコマンドラインインターフェイス(CLI)で操作します。
97 YACASL2は、次のような動作内容をすべてテキストで出力します。
98
99 @itemize @bullet
100
101 @item
102 ラベルとアドレスの対応
103
104 @item
105 アセンブル結果
106
107 @item
108 実行時のレジスタの内容
109
110 @item
111 実行時のメモリの内容
112 @end itemize
113
114 YACASL2では、機械コードモニターを使い、動作中のCPUやメモリーを調べたりデバッグしたりすることもできます。
115
116 また、出力された動作内容は、GNU/Linuxのさまざまなコマンド、
117 たとえば、@command{cat}、@command{less}、@command{grep}、@command{wc}などを使って解析できます。
118
119
120
121 @node Sample usage, casl2 invocation, Overview, Top
122 @chapter YACASL2の使用例
123 YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。
124 以下の例で用いられるCASLプログラムのファイルは、
125 テキストエディタなどで作成するか、インストールしたディレクトリの
126 中にある@file{as}ディレクトリからコピーしてください。
127
128 @menu
129 * Simple output::               実行結果の出力だけを表示
130 * Assemble result::             アセンブル結果の確認
131 * Register and memory::         実行時のレジスタとメモリを表示
132 * Only assemble::               アセンブルと実行を別に行う
133 * Analyze word::                1語の解析
134 * Use CASL2LIB::                CASL2ライブラリの使用
135 @end menu
136
137 @node Simple output, Assemble result, Sample usage, Sample usage
138 @section 実行結果の出力だけを表示
139
140 インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。
141 CASL IIのマクロ命令OUTは、文字列を出力します。
142
143 @example
144 $ @kbd{cat hello.casl}
145 MAIN     START
146          OUT     OBUF,LEN
147          RET
148 OBUF     DC      'Hello, World!'
149 LEN      DC      13
150          END
151 @end example
152
153 次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
154
155 @example
156 $ @kbd{casl2 hello.casl}
157 Hello, World!
158 @end example
159
160 @file{addl.casl}は、3と1の和を求めます。
161
162 @example
163 $ @kbd{cat addl.casl}
164 ;;; ADDL r,adr
165 MAIN     START
166          LD      GR1,A
167          ADDL    GR1,B
168          RET
169 A        DC      3
170 B        DC      1
171          END
172 @end example
173
174 このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
175
176 @example
177 $ @kbd{casl2 addl.casl}
178 $
179 @end example
180
181 実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
182
183 @node Assemble result, Register and memory, Simple output, Sample usage
184 @section アセンブル結果の確認
185
186 casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。
187 また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
188
189 次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。
190 OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
191
192 @example
193 $ @kbd{casl2 -a -l hello.casl}
194
195 Assemble hello.casl (0)
196
197 Label::::
198 MAIN.LEN ---> #0020
199 MAIN ---> #0000
200 MAIN.OBUF ---> #0013
201
202 Assemble hello.casl (1)
203 hello.casl:    1:MAIN    START
204 hello.casl:    2:        OUT     OBUF,LEN
205     #0000   #7001
206     #0001   #0000
207     #0002   #7002
208     #0003   #0000
209     #0004   #1210
210     #0005   #0013
211     #0006   #1220
212     #0007   #0020
213     #0008   #F000
214     #0009   #0002
215     #000A   #1210
216     #000B   #0021
217     #0021   #000A
218     #000C   #1220
219     #000D   #0022
220     #0022   #0001
221     #000E   #F000
222     #000F   #0002
223     #0010   #7120
224     #0011   #7110
225 hello.casl:    3:        RET
226     #0012   #8100
227 hello.casl:    4:OBUF    DC      'Hello, World!'
228     #0013   #0048
229     #0014   #0065
230     #0015   #006C
231     #0016   #006C
232     #0017   #006F
233     #0018   #002C
234     #0019   #0020
235     #001A   #0057
236     #001B   #006F
237     #001C   #0072
238     #001D   #006C
239     #001E   #0064
240     #001F   #0021
241 hello.casl:    5:LEN     DC      13
242     #0020   #000D
243 hello.casl:    6:        END
244 Hello, World!
245 @end example
246
247 @file{addl.casl}の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
248
249 @example
250 $ @kbd{casl2 -a -l addl.casl}
251
252 Assemble addl.casl (0)
253
254 Label::::
255 MAIN.A ---> #0005
256 MAIN.B ---> #0006
257 MAIN ---> #0000
258
259 Assemble addl.casl (1)
260 addl.casl:    1:;;; ADDL r,adr
261 addl.casl:    2:MAIN    START
262 addl.casl:    3:        LD      GR1,A
263     #0000   #1010
264     #0001   #0005
265 addl.casl:    4:        ADDL    GR1,B
266     #0002   #2210
267     #0003   #0006
268 addl.casl:    5:        RET
269     #0004   #8100
270 addl.casl:    6:A       DC      3
271     #0005   #0003
272 addl.casl:    7:B       DC      1
273     #0006   #0001
274 addl.casl:    8:        END
275 @end example
276
277 なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。
278 仮想マシンCOMET II での実行は行われません。
279
280 @node Register and memory, Only assemble, Assemble result, Sample usage
281 @section 実行時のレジスタとメモリを表示
282
283 YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
284
285 また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。
286 小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
287
288 @menu
289 * Register specify::            特定のレジスタを表示
290 * End value::
291 * Step count::                  プログラムのステップ数を表示
292 @end menu
293
294 @file{addl.casl}に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
295
296 @example
297 $ @kbd{casl2 -t -d -M8 addl.casl | less}
298
299 Assemble addl.casl (0)
300
301 Assemble addl.casl (1)
302
303 Executing machine codes
304 #0000: Register::::
305 #0000: GR0:      0 = #0000 = 0000000000000000
306 #0000: GR1:      0 = #0000 = 0000000000000000
307 #0000: GR2:      0 = #0000 = 0000000000000000
308 #0000: GR3:      0 = #0000 = 0000000000000000
309 #0000: GR4:      0 = #0000 = 0000000000000000
310 #0000: GR5:      0 = #0000 = 0000000000000000
311 #0000: GR6:      0 = #0000 = 0000000000000000
312 #0000: GR7:      0 = #0000 = 0000000000000000
313 #0000: SP:       8 = #0008 = 0000000000001000
314 #0000: PR:       0 = #0000 = 0000000000000000
315 #0000: FR (OF SF ZF): 000
316 #0000: Memory::::
317 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
318 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
319 #0002: Register::::
320 #0002: GR0:      0 = #0000 = 0000000000000000
321 #0002: GR1:      3 = #0003 = 0000000000000011
322 #0002: GR2:      0 = #0000 = 0000000000000000
323 #0002: GR3:      0 = #0000 = 0000000000000000
324 #0002: GR4:      0 = #0000 = 0000000000000000
325 #0002: GR5:      0 = #0000 = 0000000000000000
326 #0002: GR6:      0 = #0000 = 0000000000000000
327 #0002: GR7:      0 = #0000 = 0000000000000000
328 #0002: SP:       8 = #0008 = 0000000000001000
329 #0002: PR:       2 = #0002 = 0000000000000010
330 #0002: FR (OF SF ZF): 000
331 #0002: Memory::::
332 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
333 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
334 #0004: Register::::
335 #0004: GR0:      0 = #0000 = 0000000000000000
336 #0004: GR1:      4 = #0004 = 0000000000000100
337 #0004: GR2:      0 = #0000 = 0000000000000000
338 #0004: GR3:      0 = #0000 = 0000000000000000
339 #0004: GR4:      0 = #0000 = 0000000000000000
340 #0004: GR5:      0 = #0000 = 0000000000000000
341 #0004: GR6:      0 = #0000 = 0000000000000000
342 #0004: GR7:      0 = #0000 = 0000000000000000
343 #0004: SP:       8 = #0008 = 0000000000001000
344 #0004: PR:       4 = #0004 = 0000000000000100
345 #0004: FR (OF SF ZF): 000
346 #0004: Memory::::
347 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
348 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
349 @end example
350
351 @node Register specify, End value, Register and memory, Register and memory
352 @subsection 特定のレジスタを表示
353
354 @file{addl.casl}のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。
355 こうした場合は、@command{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
356
357 @example
358 $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
359 #0000: GR1:      0 = #0000 = 0000000000000000
360 #0002: GR1:      3 = #0003 = 0000000000000011
361 #0004: GR1:      4 = #0004 = 0000000000000100
362 @end example
363
364 この内容を、先に出力したアセンブル結果と引き比べてください。
365 次の表のように、PRとGR1、命令行が対応していることがわかります。
366
367 @multitable @columnfractions .3 .3 .4
368 @item PR @tab GR1 @tab 命令行
369 @item #0000
370 @tab #0000
371 @item #0002
372 @tab #0003
373 @tab @code{LD GR1,A}
374 @item #0004
375 @tab #0004
376 @tab @code{ADDL GR1,B}
377 @end multitable
378
379 @node End value, Step count, Register specify, Register and memory
380 @subsection プログラム終了時の値を表示
381
382 @command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
383
384 @file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
385
386 @example
387 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
388 #0004: GR1:      4 = #0004 = 0000000000000100
389 @end example
390
391 @file{sum_10.casl}は、1から10までの整数の和を求めます。
392
393 @example
394 $ @kbd{cat sum_10.casl}
395 ;;; sum_10.casl
396 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
397 MAIN    START
398         PUSH    0,GR1
399         LAD     GR0,0           ; GR0を初期化
400         LD      GR1,FST         ; GR1に初項を転送
401 LOOP    ADDL    GR0,GR1         ; ループ先頭
402         ADDL    GR1,STEP        ; GR1 <- GR1 + 公差
403         CPL     GR1,LST         ; GR1が末項より大きい場合は終了
404         JPL     FIN             ; ↓
405         JUMP    LOOP            ; ループ終端
406 FIN     POP     GR1
407         RET
408 FST     DC      1               ; 初項
409 LST     DC      10              ; 末項
410 STEP    DC      1               ; 公差
411         END
412 @end example
413
414 @file{sum_10.casl}でファイル終了時の値を確認するには、次のようにします。
415
416 @example
417 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
418 #0010: GR0:     55 = #0037 = 0000000000110111 = '7'
419 @end example
420
421 @node Step count,  , End value, Register and memory
422 @subsection プログラムのステップ数を表示
423
424 @command{grep}と@command{wc}を組み合わせれば、プログラムのステップ数を表示できます。
425
426 @example
427 $ @kbd{casl2 -t hello.casl | grep 'GR1:' | wc -l}
428 11
429 @end example
430
431 @example
432 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
433 3
434 @end example
435
436 @file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
437
438 @example
439 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
440 54
441 @end example
442
443 @node Only assemble, Analyze word, Register and memory, Sample usage
444 @section アセンブルと実行を別に行う
445
446 @command{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
447
448 @example
449 $ @kbd{casl2 -Ohello.o hello.casl}
450 @end example
451
452 作成されたオブジェクトファイルの内容は、@command{od}を使って確認できます。
453 テキストファイルではないため、@command{cat}などでは確認できません。
454
455 @example
456 $ @kbd{od -t x2 hello.o}
457 0000000 7001 0000 7002 0000 1210 0013 1220 0020
458 0000020 f000 0002 1210 0021 1220 0022 f000 0002
459 0000040 7120 7110 8100 0048 0065 006c 006c 006f
460 0000060 002c 0020 0057 006f 0072 006c 0064 0021
461 0000100 000d 000a 0001
462 0000106
463 @end example
464
465 オブジェクトファイルの実行には、@command{comet2}を使います。
466
467 @example
468 $ @kbd{comet2 hello.o}
469 Hello, World!
470 @end example
471
472 @node Analyze word, Use CASL2LIB, Only assemble, Sample usage
473 @section 1語の解析
474
475 CASL IIでは、1語(1 word、16ビット)を単位としてデータが処理されます。
476 @command{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
477
478 @example
479 $ @kbd{dumpword 72}
480     72:     72 = #0048 = 0000000001001000 = 'H'
481 @end example
482
483 @node Use CASL2LIB,  , Analyze word, Sample usage
484 @section CASL2ライブラリの使用
485
486 YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
487
488 このフォルダには、たとえば次のようなプログラムが含まれています。
489
490 @table @option
491 @item OUTL
492 @file{outl.casl}。
493 GR1に格納された値を、0以上65535以下の整数として出力します。
494
495 @item OUTA
496 @file{outa.casl}。
497 GR1に格納された値を、-32767以上32767以下の整数として出力します。
498
499 @item MULL
500 @file{mull.casl}。
501 GR1とGR2に格納された値を0以上65535以下の整数と見なし、積をGR3に格納します。
502
503 @item DIVL
504 @file{divl.casl}。
505 GR1とGR2に格納された値を0以上65535以下の整数と見なし、商をGR3、剰余をGR0に格納します。
506 @end table
507
508 @subsection 数値を出力する
509
510 3と1の和を求める@file{addl.casl}で演算結果を出力するには、まず@file{addl.casl}を編集します。
511 CASL IIの@command{CALL}命令で@command{OUTL}を副プログラムとして呼び出します。
512
513 @example
514 $ @kbd{cat addl_outl.casl}
515 MAIN    START
516         LD      GR1,A
517         ADDL    GR1,B
518         @emph{CALL    OUTL}
519         RET
520 A       DC      3
521 B       DC      1
522         END
523 @end example
524
525 変更したら@command{casl2}を、複数のファイルを指定して実行します。
526
527 @example
528 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
529 4
530 @end example
531
532 @node casl2 invocation, comet2 invocation, Sample usage, Top
533 @chapter @command{casl2}の呼び出し
534
535 @pindex casl2
536 @cindex casl2
537 @cindex invoking
538 @cindex options
539 @cindex usage
540 @cindex help
541
542 @command{casl2}は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。
543 CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。
544 引数が指定されない場合は、エラーメッセージを表示して終了します。
545
546 @example
547 $ @kbd{casl2 hello.casl}
548 @end example
549
550 複数のCASLファイルを指定することで、副プログラムを呼び出すこともできます。
551
552 @example
553 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
554 @end example
555
556 @unnumberedsec オプション
557
558 @command{casl2}は、次のオプションを指定できます。
559
560 @table @option
561 @item -s
562 @itemx --source
563 CASLファイルの内容を表示します。
564
565 @item -l
566 @itemx --label
567 ラベルの一覧を次の形式で表示します。
568 表示後、ほかの作業を続行します。
569
570 @example
571 <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
572 @end example
573
574 @item -L
575 @itemx --labelonly
576 @option{-l}と同じ形式でラベルの一覧を表示します。
577 表示後、ほかの作業は続行せず、終了します。
578
579 @item -a
580 @itemx --assembledetail
581 アセンブル詳細結果を表示し、ほかの作業を続行します。
582
583 @item -A
584 @itemx --assembledetailonly
585 アセンブル詳細結果を表示して終了します。
586
587 @item -o<OBJECTFILE>
588 @itemx --assembleout<OBJECTFILE>
589 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。
590 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
591 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
592 オブジェクトファイルは1つだけ指定できます。
593
594 @item -O[<OBJECTFILE>]
595 @itemx --assembleoutonly[<OBJECTFILE>]
596 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。
597 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
598 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
599 オブジェクトファイルは1つだけ指定できます。
600
601 @item -t
602 @itemx --trace
603 @itemx --tracearithmetic
604 プログラム実行中のレジスタの値を次の形式で表示します。
605
606 @example
607 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
608 <値の16進数表現> = <値の2進数表現>[ ='文字']
609 @end example
610
611 @itemize
612 @item
613 @code{<PR値の16進数表現>}と@code{<レジスタ>}、@code{<値の16進数表現>}は、4けたの16進数で表されます。
614 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}には、先頭に@code{#}が付きます。
615 範囲は@code{#0000}から@code{#FFFF}です
616
617 @item
618 @code{<値の10進数表現>}は符号の付いた10進数です。
619 範囲は-32768から32767です。
620
621 @item
622 @code{<値の2進数表現>}は、16けたの2進数で表されます。
623 範囲は、@code{0000000000000000}から@code{1111111111111111}です
624
625 @item
626 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
627 @end itemize
628
629 表示されるレジスタには、次の種類があります。
630
631 @table @code
632 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
633 汎用レジスタ
634
635 @item SP
636 スタックポインタ
637
638 @item PR
639 プログラムレジスタ
640
641 @item FR
642 フラグレジスタ
643 @end table
644
645 例えば、次のように表示されます。
646
647 @example
648 #0002: GR1:      3 = #0003 = 0000000000000011
649 @end example
650
651 @item -T
652 @itemx --tracelogical
653 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
654 ただし@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
655 値の範囲は0から65535です。
656
657 @item -d
658 @itemx --dump
659 メモリの内容をすべて表示します。
660
661 @item -M <MEMORYSIZE>
662 @itemx --memorysize <MEMORYSIZE>
663 アセンブルおよび実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
664 指定しない場合、512です。
665
666 @item -C <CLOCKS>
667 @itemx --clocks <CLOCKS>
668 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
669 指定しない場合、クロック周波数は5000000です。
670
671 @item -v
672 @itemx --version
673 @command{casl2}のバージョンを表示して終了します。
674
675 @item -h
676 @itemx --help
677 @command{casl2}の使用方法を表示して終了します。
678 @end table
679
680 @node comet2 invocation, dumpword invocation, casl2 invocation, Top
681 @chapter @command{comet2}の呼び出し
682
683 @pindex comet2
684 @cindex comet2
685 @cindex invoking
686 @cindex options
687 @cindex usage
688 @cindex help
689
690 @command{comet2}は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。
691 オブジェクトファイルは、@command{casl}に@option{-o}または@option{-O}を指定して出力します。
692
693 @example
694 $ @kbd{comet2 hello.o}
695 @end example
696
697 引数で指定できるオブジェクトファイルは1つだけです。
698 引数が指定されない場合は、エラーメッセージを表示して終了します。
699 複数の引数を指定した場合、2番目以降の引数は無視されます。
700
701 @unnumberedsec オプション
702
703 @command{comet2}は、次のオプションを指定できます。
704
705 @table @option
706
707 @item -t
708 @itemx --trace
709 @itemx --tracearithmetic
710 プログラム実行中のレジスタの値を次の形式で表示します。
711 @code{<値の10進数表現>}は符号の付いた10進数です。
712 範囲は-32768から32767です。
713
714 @example
715 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
716 @end example
717
718 @itemize
719 @item
720 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。
721 範囲は、@code{#0000}から@code{#FFFF}です
722
723 @item
724 @code{<値の2進数表現>}は、16けたの2進数で表されます。
725 範囲は、@code{0000000000000000}から@code{1111111111111111}です
726
727 @item
728 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
729 @end itemize
730
731 例えば、次のように表示されます。
732
733 @example
734 #0002: GR1:      3 = #0003 = 0000000000000011
735 @end example
736
737 表示されるレジスタには、次の種類があります。
738
739 @table @code
740 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
741 汎用レジスタ
742
743 @item SP
744 スタックポインタ
745
746 @item PR
747 プログラムレジスタ
748
749 @item FR
750 フラグレジスタ
751 @end table
752
753 @item -T
754 @itemx --tracelogical
755 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
756 ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
757 値の範囲は0から65535です。
758
759 @item -d
760 @itemx --dump
761 メモリの内容をすべて表示します。
762
763 @item -M <MEMORYSIZE>
764 @itemx --memorysize <MEMORYSIZE>
765 実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
766 指定しない場合、512です。
767
768 @item -C <CLOCKS>
769 @itemx --clocks <CLOCKS>
770 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
771 指定しない場合、5000000です。
772
773 @item -v
774 @itemx --version
775 @command{comet2}のバージョンを表示して終了します。
776
777 @item -h
778 @itemx --help
779 @command{comet2}の使用方法を表示して終了します。
780 @end table
781
782 @node dumpword invocation, , comet2 invocation, Top
783 @chapter @command{dumpword}の呼び出し
784
785 @pindex dumpword
786 @cindex dumpword
787 @cindex invoking
788 @cindex options
789 @cindex usage
790 @cindex help
791
792 @command{dumpword}は引数として指定された数値を、整数、#0000から#FFFFまでの範囲の16進数、2進数で表示します。
793 文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。
794 引数は、10進数または先頭に「#」の付いた16進数で指定します。
795 表示される整数は、オプションにより符号付きか符号なしかを指定します。
796 オプションなしの場合は符号付きです。
797 整数の範囲は、符号付きの場合は-32768以上32767以下、符号なしの場合は0以上65535以下です。
798
799 @example
800 $ @kbd{dumpword 10}
801     10:     10 = #000A = 0000000000001010 = '\n'
802 @end example
803
804 引数が指定されない場合は、使い方を表示して終了します。
805 複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
806
807 @unnumberedsec 注意
808
809 マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
810
811 マイナスの数を指定するときは、次のように@option{--}を付けます。
812
813 @example
814 $ @kbd{dumpword -- -72}
815    -72:    -72 = #FFB8 = 1111111110111000
816 @end example
817
818 先頭に「#」を付けて16進数を指定するときは、次のように「'」で囲みます。
819
820 @example
821 $ @kbd{dumpword '#0048'}
822  #0048:     72 = #0048 = 0000000001001000 = 'H'
823 @end example
824
825 @unnumberedsec オプション
826
827 @command{dumpword}は、次のオプションを指定できます。
828
829 @table @option
830
831 @item -a
832 @itemx --arithmetic
833 出力される整数の範囲を-32,768以上32,767以下にします。
834 オプションなしの場合と同じです。
835
836 @item -l
837 @itemx --logical
838 出力される整数の範囲を0以上65,535以下にします。
839
840 @item -v
841 @itemx --version
842 @command{dumpword}のバージョンを表示して終了します。
843
844 @item -h
845 @itemx --help
846 @command{dumpword}の使用方法を表示して終了します。
847 @end table
848
849 @bye