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