rasl 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f28e254a458b927537a28066daaad2e236470c38
4
+ data.tar.gz: d0855f2fca98b41b4b407081be6fb8c7423c399f
5
+ SHA512:
6
+ metadata.gz: 9102a4f9be9a05aba9234c95f4320d46c8db1ed4d8807d325f696c5828694195d8b004541961f591e9228160f47c896853865a37c915c980cdca5fea64c6770a
7
+ data.tar.gz: 06171b2e84528f26ca78d054a5f2e420216532d05a01f256f67efff7136a02e25e3e13ec4c1247a4ffb5a14eaab27b6b3d101406e248093ad7e6b8554c66fa71
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.0
4
+ script: bundle exec rake
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 akicho8
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,221 @@
1
+ * CASL Assembler / Simulator
2
+
3
+ - [[http://tk2-221-20341.vs.sakura.ne.jp/casl-simulator][DEMO]] http://tk2-221-20341.vs.sakura.ne.jp/casl-simulator
4
+
5
+ - [[https://travis-ci.org/akicho8/rasl][Travis]] [[https://travis-ci.org/akicho8/rasl.png]]
6
+ - [[https://gemnasium.com/akicho8/rasl/][Gemnasium]] [[https://gemnasium.com/akicho8/rasl.png]]
7
+ - [[https://codeclimate.com/github/akicho8/rasl][Code Climate]] [[https://codeclimate.com/github/akicho8/rasl.png]]
8
+
9
+ #+BEGIN_SRC ruby
10
+ require "rasl"
11
+
12
+ app = Rasl::Processor.new
13
+ app.assemble <<-SOURCE
14
+ MAIN START
15
+ LD GR0,=1
16
+ LD GR1,=2
17
+ ADDA GR0,GR1
18
+ ST GR0,RESULT
19
+ RET
20
+ RESULT DS 1
21
+ END
22
+ SOURCE
23
+ app.go
24
+ app.gr[:gr0].value # => 3
25
+ app.labels["MAIN"] # => {"RESULT"=>8}
26
+ app.memory[app.labels["MAIN"]["RESULT"]] # => 3
27
+ puts app.disassemble
28
+ # >> 0000 1000 0009 LD GR0, #0009
29
+ # >> 0002 1010 000A LD GR1, #000A
30
+ # >> 0004 2401 ADDA GR0, GR1
31
+ # >> 0005 1100 0008 ST GR0, #0008
32
+ # >> 0007 8100 RET
33
+ # >> 0008 0003 DC 3
34
+ # >> 0009 0001 DC 1
35
+ # >> 000A 0002 DC 2
36
+ #+END_SRC
37
+
38
+ ** 仕様
39
+
40
+ - プロシージャ
41
+ - START〜END は複数定義可
42
+ - START に前置するラベルは必須ではない
43
+ - START と END は省略可
44
+ - 最初に登場した START の引数をブートアドレスにする
45
+ - ラベル
46
+ - STARTに前置したラベルはグローバルラベル
47
+ - STARTのあとからENDまではローカルラベル
48
+ - ラベルの文字数制限なし
49
+ - ラベルの最後にコロンをつけてもよい (ラベルに含まない)
50
+ - ラベルの最後にコロンをつけると必ずラベルになる (NOP: と書いたら NOP は命令ではなくラベルとみなす)
51
+ - ラベルの先頭に $ や @ をつけてもよい (ラベルに含む)
52
+ - $ で始まるラベルは必ずグローバルラベルになる
53
+ - ラベルだけの行を書いてもよい
54
+ - ラベルは大小文字を区別する
55
+ - START〜ENDを書かなかった場合のラベルはすべてグローバルラベル
56
+ - 構文
57
+ - スペースを空けずに命令を書いてもよい (Rasl.config.bol_order = false で無効になる)
58
+ - 引数のセパレーターはスペースでもいい
59
+ - インライン即値の部分は "= 1" のようにスペースを空けてもよい
60
+ - 文字列はダブルクォーテーションで囲んでもいい
61
+ - 行頭からだけ # でコメントにできる。shebang 用
62
+ - その他
63
+ - CASL1 と CASL2 に対応
64
+ - インライン即値はENDの直前に定義する。END がなければコードの最後に定義する
65
+ - EXIT で終了してもよい
66
+ - GRn を n とは書けない (CASL2ではアドレスとレジスタの区別がつかないため)
67
+ - NOP は #00 にはしてない (データなのか命令なのかまぎらわしいので)
68
+ - GRn の他に FR PC SP レジスタを指定できる (例: addl SP, 1 など)
69
+ - Rasl.config.spec = 1 にすると GR4 が SP になる
70
+ - 注意
71
+ - 文字コードは UTF-8 なので DC 'あ' は DS 3 の領域を使う
72
+ - 文字列リテラルの中だろうとセミコロン以降をぶっちぎる。
73
+ 'a;b' の場合 'a となるため \ でエスケープして 'a\;b' と書く
74
+
75
+ ** コマンドラインで使う例
76
+
77
+ *** --help
78
+
79
+ : $ rasl --help
80
+ : CASL Assembler / Simulator rasl 0.0.1
81
+ : 使い方: rasl [OPTIONS] [ファイル]
82
+ : -s, --simulator シミュレータ起動
83
+ : -p, --print-map MAP情報の標準出力
84
+ : -m, --output-map MAP情報のファイル出力。-g オプションがあるときは実行後に出力する
85
+ : -g, --go 実行
86
+ : -e, --eval=CODE 指定コードの評価。指定があると標準入力からは読み込まない
87
+ : --memory-size=SIZE メモリサイズの指定(デフォルト:65536)
88
+ : --spec=NUMBER 1:レジスタ数5個でGR4==SP 2:レジスタ数8 GR4!=SP
89
+ : --ds-init-value=VAL DSで領域確保したときの初期値(デフォルト:0)
90
+ : --memory-defval=VAL メモリの初期値(デフォルト:0)
91
+ : --[no-]bol-order 命令の前に空白を書かなくてよいことにする(デフォルト:true)
92
+ : -i, --register 実行後レジスタ一覧表示
93
+
94
+ *** MAP情報の標準出力 (-p)
95
+
96
+ : $ rasl -p hello.csl
97
+ : 0000 7001 0000 PUSH #0000, GR1
98
+ : 0002 7002 0000 PUSH #0000, GR2
99
+ : 0004 1210 000D LAD GR1, #000D
100
+ : 0006 1220 0018 LAD GR2, #0018
101
+ : 0008 F000 0001 SVC #0001
102
+ : 000A 7120 POP GR2
103
+ : 000B 7110 POP GR1
104
+ : 000C 8100 RET
105
+ : 000D 0048 DC 72 ; 'H'
106
+ : 000E 0065 DC 101 ; 'e'
107
+ : 000F 006C DC 108 ; 'l'
108
+ : 0010 006C DC 108 ; 'l'
109
+ : 0011 006F DC 111 ; 'o'
110
+ : 0012 000B DC 5
111
+
112
+ *** MAP情報のファイル出力 (-m)
113
+
114
+ : $ rasl -m hello.csl
115
+ : $ cat hello.map
116
+ : 0000 7001 0000 PUSH #0000, GR1
117
+ : 0002 7002 0000 PUSH #0000, GR2
118
+ : 0004 1210 000D LAD GR1, #000D
119
+ : 0006 1220 0018 LAD GR2, #0018
120
+ : 0008 F000 0001 SVC #0001
121
+ : 000A 7120 POP GR2
122
+ : 000B 7110 POP GR1
123
+ : 000C 8100 RET
124
+ : 000D 0048 DC 72 ; 'H'
125
+ : 000E 0065 DC 101 ; 'e'
126
+ : 000F 006C DC 108 ; 'l'
127
+ : 0010 006C DC 108 ; 'l'
128
+ : 0011 006F DC 111 ; 'o'
129
+ : 0012 000B DC 5
130
+
131
+ *** 指定コードの評価 (-e)
132
+
133
+ : $ rasl -p -e 'LEA GR1,1,GR1'
134
+ : 0000 1F11 0001 LEA GR1, #0001, GR1
135
+
136
+ 標準入力から渡してもよい
137
+
138
+ : $ echo 'LEA GR1,1,GR1' | rasl -p
139
+ : 0000 1F11 0001 LEA GR1, #0001, GR1
140
+
141
+ *** 実行 (-g)
142
+
143
+ : $ rasl -g hello.csl
144
+ : Hello
145
+
146
+ *** Simulator (-s)
147
+
148
+ : $ rasl -s hello.csl
149
+ : -?
150
+ : D[address] memory-dump
151
+ : U[address] unassemble
152
+ : G[address] go
153
+ : T[address] trace
154
+ : R[reg=n] register
155
+ : ? or H usage
156
+ : I init
157
+ : Q quit
158
+ : -r
159
+ : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0000 SP=FFFF FR=___(+)
160
+ : 0000 7001 0000 PUSH #0000, GR1
161
+ : -t
162
+ : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0002 SP=FFFE FR=___(+)
163
+ : 0002 7002 0000 PUSH #0000, GR2
164
+ : -t
165
+ : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0004 SP=FFFD FR=___(+)
166
+ : 0004 1210 000D LAD GR1, #000D
167
+ : -u
168
+ : 0000 7001 0000 PUSH #0000, GR1
169
+ : 0002 7002 0000 PUSH #0000, GR2
170
+ : 0004 1210 000D LAD GR1, #000D
171
+ : 0006 1220 0012 LAD GR2, #0012
172
+ : 0008 F000 0001 SVC #0001
173
+ : 000A 7120 POP GR2
174
+ : 000B 7110 POP GR1
175
+ : 000C 8100 RET
176
+ : -g
177
+ : Hello
178
+ : -d0
179
+ : 0000: 7001 0000 7002 0000 1210 000D 1220 0012 ........
180
+ : 0008: F000 0001 7120 7110 8100 0048 0065 006C .....Hel
181
+ : 0010: 006C 006F 0005 0000 0000 0000 0000 0000 lo......
182
+ : 0018: 0000 0000 0000 0000 0000 0000 0000 0000 ........
183
+ : -q
184
+
185
+ ** IN 命令時の __END__
186
+
187
+ デフォルトでは標準入力待ちになるが __END__ の指定があればその次の行からを入力データとして扱う
188
+
189
+ : $ cat in_out.csl
190
+ : START
191
+ : IN STR,LEN ; STR="a" LEN=1
192
+ : OUT STR,LEN ; => "a"
193
+ : IN STR,LEN ; STR="" LEN=0
194
+ : OUT STR,LEN ; => ""
195
+ : IN STR,LEN ; STR="b" LEN=1
196
+ : OUT STR,LEN ; => "b"
197
+ : IN STR,LEN ; STR="" LEN=-1
198
+ : OUT STR,LEN ; => なし
199
+ : RET
200
+ : STR DS 4
201
+ : LEN DS 1
202
+ : END
203
+ : __END__
204
+ : a
205
+ :
206
+ : b
207
+
208
+ : $ rasl -g in_out.csl
209
+ : a
210
+ :
211
+ : b
212
+
213
+ ** とりあえずのEmacs設定
214
+
215
+ : (add-to-list 'auto-mode-alist '("\\.\\([rc]asl?\\|csl\\)$" . asm-mode))
216
+
217
+ ** 参考
218
+
219
+ - CASL2 仕様 http://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver2_2.pdf
220
+ - CASL1 仕様 http://www.image.med.osaka-u.ac.jp/member/nakamoto/enshuD2007/casl.pdf
221
+ - CASL - Wikipedia http://ja.wikipedia.org/wiki/CASL
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/rasl"
3
+ Rasl::CLI.execute
@@ -0,0 +1,22 @@
1
+ start
2
+ lea gr1, 3
3
+ call fnumb
4
+ ret
5
+ fnumb cpa gr1, const3
6
+ jpz next
7
+ lea gr2, -1, gr1
8
+ ret
9
+ next push 0, gr1
10
+ lea gr1, -1, gr1
11
+ call fnumb
12
+ push 0, gr2
13
+ lea gr1, -1, gr1
14
+ call fnumb
15
+ st gr2, wrk
16
+ pop gr2
17
+ add gr2, wrk
18
+ pop gr1
19
+ ret
20
+ const3 dc 3
21
+ wrk ds 1
22
+ end
@@ -0,0 +1,20 @@
1
+ 0000 1F10 0003 LEA GR1, #0003
2
+ 0002 8000 0005 CALL #0005
3
+ 0004 8100 RET
4
+ 0005 4010 001F CPA GR1, #001F
5
+ 0007 6000 000C JPZ #000C
6
+ 0009 1F21 FFFF LEA GR2, #FFFF, GR1
7
+ 000B 8100 RET
8
+ 000C 7001 0000 PUSH #0000, GR1
9
+ 000E 1F11 FFFF LEA GR1, #FFFF, GR1
10
+ 0010 8000 0005 CALL #0005
11
+ 0012 7002 0000 PUSH #0000, GR2
12
+ 0014 1F11 FFFF LEA GR1, #FFFF, GR1
13
+ 0016 8000 0005 CALL #0005
14
+ 0018 1120 0020 ST GR2, #0020
15
+ 001A 7120 POP GR2
16
+ 001B 2020 0020 ADDA GR2, #0020
17
+ 001D 7110 POP GR1
18
+ 001E 8100 RET
19
+ 001F 0003 DC 3
20
+ 0020 0000 DC 0
@@ -0,0 +1,48 @@
1
+ ;; CASL - Wikipedia
2
+ ;; http://ja.wikipedia.org/wiki/CASL
3
+ ;; ハノイの塔を解くプログラム
4
+ MAIN START
5
+ LD GR0,N
6
+ LD GR1,A
7
+ LD GR2,B
8
+ LD GR3,C
9
+ CALL HANOI
10
+ RET
11
+
12
+ ; hanoi(N, X, Y, Z)
13
+ HANOI CPA GR0,=1
14
+ JZE DISP
15
+ SUBA GR0,=1
16
+ PUSH 0,GR2
17
+ LD GR2,GR3
18
+ POP GR3
19
+ CALL HANOI
20
+ ST GR1,MSG1
21
+ ST GR2,MSG2
22
+ OUT MSG,LNG
23
+ PUSH 0,GR2
24
+ LD GR2,GR1
25
+ LD GR1,GR3
26
+ POP GR3
27
+ CALL HANOI
28
+ PUSH 0,GR2
29
+ LD GR2,GR1
30
+ POP GR1
31
+ ADDA GR0,=1
32
+ RET
33
+
34
+ DISP ST GR1,MSG1
35
+ ST GR3,MSG2
36
+ OUT MSG,LNG
37
+ RET
38
+
39
+ N DC 3
40
+ LNG DC 11
41
+ A DC 'A'
42
+ B DC 'B'
43
+ C DC 'C'
44
+ MSG DC 'from '
45
+ MSG1 DS 1
46
+ DC ' to '
47
+ MSG2 DS 1
48
+ END
@@ -0,0 +1,61 @@
1
+ 0000 1000 0046 LD GR0, #0046
2
+ 0002 1010 0048 LD GR1, #0048
3
+ 0004 1020 0049 LD GR2, #0049
4
+ 0006 1030 004A LD GR3, #004A
5
+ 0008 8000 000B CALL #000B
6
+ 000A 8100 RET
7
+ 000B 4000 0056 CPA GR0, #0056
8
+ 000D 6300 0035 JZE #0035
9
+ 000F 2100 0057 SUBA GR0, #0057
10
+ 0011 7002 0000 PUSH #0000, GR2
11
+ 0013 1423 LD GR2, GR3
12
+ 0014 7130 POP GR3
13
+ 0015 8000 000B CALL #000B
14
+ 0017 1110 0050 ST GR1, #0050
15
+ 0019 1120 0055 ST GR2, #0055
16
+ 001B 7001 0000 PUSH #0000, GR1
17
+ 001D 7002 0000 PUSH #0000, GR2
18
+ 001F 1210 004B LAD GR1, #004B
19
+ 0021 1220 0047 LAD GR2, #0047
20
+ 0023 F000 0001 SVC #0001
21
+ 0025 7120 POP GR2
22
+ 0026 7110 POP GR1
23
+ 0027 7002 0000 PUSH #0000, GR2
24
+ 0029 1421 LD GR2, GR1
25
+ 002A 1413 LD GR1, GR3
26
+ 002B 7130 POP GR3
27
+ 002C 8000 000B CALL #000B
28
+ 002E 7002 0000 PUSH #0000, GR2
29
+ 0030 1421 LD GR2, GR1
30
+ 0031 7110 POP GR1
31
+ 0032 2000 0058 ADDA GR0, #0058
32
+ 0034 8100 RET
33
+ 0035 1110 0050 ST GR1, #0050
34
+ 0037 1130 0055 ST GR3, #0055
35
+ 0039 7001 0000 PUSH #0000, GR1
36
+ 003B 7002 0000 PUSH #0000, GR2
37
+ 003D 1210 004B LAD GR1, #004B
38
+ 003F 1220 0047 LAD GR2, #0047
39
+ 0041 F000 0001 SVC #0001
40
+ 0043 7120 POP GR2
41
+ 0044 7110 POP GR1
42
+ 0045 8100 RET
43
+ 0046 0003 DC 3
44
+ 0047 000B DC 11
45
+ 0048 0041 DC 65 ; 'A'
46
+ 0049 0042 DC 66 ; 'B'
47
+ 004A 0043 DC 67 ; 'C'
48
+ 004B 0066 DC 102 ; 'f'
49
+ 004C 0072 DC 114 ; 'r'
50
+ 004D 006F DC 111 ; 'o'
51
+ 004E 006D DC 109 ; 'm'
52
+ 004F 0020 DC 32 ; ' '
53
+ 0050 0000 DC 0
54
+ 0051 0020 DC 32 ; ' '
55
+ 0052 0074 DC 116 ; 't'
56
+ 0053 006F DC 111 ; 'o'
57
+ 0054 0020 DC 32 ; ' '
58
+ 0055 0000 DC 0
59
+ 0056 0001 DC 1
60
+ 0057 0001 DC 1
61
+ 0058 0001 DC 1
@@ -0,0 +1,124 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "../lib/rasl"
3
+
4
+ app = Rasl::Processor.new
5
+ app.assemble <<-SOURCE
6
+ ;; CASL - Wikipedia
7
+ ;; http://ja.wikipedia.org/wiki/CASL
8
+ ;; ハノイの塔を解くプログラム
9
+ MAIN START
10
+ LD GR0,N
11
+ LD GR1,A
12
+ LD GR2,B
13
+ LD GR3,C
14
+ CALL HANOI
15
+ RET
16
+
17
+ ; hanoi(N, X, Y, Z)
18
+ HANOI CPA GR0,=1
19
+ JZE DISP
20
+ SUBA GR0,=1
21
+ PUSH 0,GR2
22
+ LD GR2,GR3
23
+ POP GR3
24
+ CALL HANOI
25
+ ST GR1,MSG1
26
+ ST GR2,MSG2
27
+ OUT MSG,LNG
28
+ PUSH 0,GR2
29
+ LD GR2,GR1
30
+ LD GR1,GR3
31
+ POP GR3
32
+ CALL HANOI
33
+ PUSH 0,GR2
34
+ LD GR2,GR1
35
+ POP GR1
36
+ ADDA GR0,=1
37
+ RET
38
+
39
+ DISP ST GR1,MSG1
40
+ ST GR3,MSG2
41
+ OUT MSG,LNG
42
+ RET
43
+
44
+ N DC 3
45
+ LNG DC 11
46
+ A DC 'A'
47
+ B DC 'B'
48
+ C DC 'C'
49
+ MSG DC 'from '
50
+ MSG1 DS 1
51
+ DC ' to '
52
+ MSG2 DS 1
53
+ END
54
+ SOURCE
55
+ puts app.disassemble
56
+ app.go
57
+ # >> 0000 1000 0046 LD GR0, #0046
58
+ # >> 0002 1010 0048 LD GR1, #0048
59
+ # >> 0004 1020 0049 LD GR2, #0049
60
+ # >> 0006 1030 004A LD GR3, #004A
61
+ # >> 0008 8000 000B CALL #000B
62
+ # >> 000A 8100 RET
63
+ # >> 000B 4000 0056 CPA GR0, #0056
64
+ # >> 000D 6300 0035 JZE #0035
65
+ # >> 000F 2100 0057 SUBA GR0, #0057
66
+ # >> 0011 7002 0000 PUSH #0000, GR2
67
+ # >> 0013 1423 LD GR2, GR3
68
+ # >> 0014 7130 POP GR3
69
+ # >> 0015 8000 000B CALL #000B
70
+ # >> 0017 1110 0050 ST GR1, #0050
71
+ # >> 0019 1120 0055 ST GR2, #0055
72
+ # >> 001B 7001 0000 PUSH #0000, GR1
73
+ # >> 001D 7002 0000 PUSH #0000, GR2
74
+ # >> 001F 1210 004B LAD GR1, #004B
75
+ # >> 0021 1220 0047 LAD GR2, #0047
76
+ # >> 0023 F000 0001 SVC #0001
77
+ # >> 0025 7120 POP GR2
78
+ # >> 0026 7110 POP GR1
79
+ # >> 0027 7002 0000 PUSH #0000, GR2
80
+ # >> 0029 1421 LD GR2, GR1
81
+ # >> 002A 1413 LD GR1, GR3
82
+ # >> 002B 7130 POP GR3
83
+ # >> 002C 8000 000B CALL #000B
84
+ # >> 002E 7002 0000 PUSH #0000, GR2
85
+ # >> 0030 1421 LD GR2, GR1
86
+ # >> 0031 7110 POP GR1
87
+ # >> 0032 2000 0058 ADDA GR0, #0058
88
+ # >> 0034 8100 RET
89
+ # >> 0035 1110 0050 ST GR1, #0050
90
+ # >> 0037 1130 0055 ST GR3, #0055
91
+ # >> 0039 7001 0000 PUSH #0000, GR1
92
+ # >> 003B 7002 0000 PUSH #0000, GR2
93
+ # >> 003D 1210 004B LAD GR1, #004B
94
+ # >> 003F 1220 0047 LAD GR2, #0047
95
+ # >> 0041 F000 0001 SVC #0001
96
+ # >> 0043 7120 POP GR2
97
+ # >> 0044 7110 POP GR1
98
+ # >> 0045 8100 RET
99
+ # >> 0046 0003 DC 3
100
+ # >> 0047 000B DC 11
101
+ # >> 0048 0041 DC 65 ; 'A'
102
+ # >> 0049 0042 DC 66 ; 'B'
103
+ # >> 004A 0043 DC 67 ; 'C'
104
+ # >> 004B 0066 DC 102 ; 'f'
105
+ # >> 004C 0072 DC 114 ; 'r'
106
+ # >> 004D 006F DC 111 ; 'o'
107
+ # >> 004E 006D DC 109 ; 'm'
108
+ # >> 004F 0020 DC 32 ; ' '
109
+ # >> 0050 0000 DC 0
110
+ # >> 0051 0020 DC 32 ; ' '
111
+ # >> 0052 0074 DC 116 ; 't'
112
+ # >> 0053 006F DC 111 ; 'o'
113
+ # >> 0054 0020 DC 32 ; ' '
114
+ # >> 0055 0000 DC 0
115
+ # >> 0056 0001 DC 1
116
+ # >> 0057 0001 DC 1
117
+ # >> 0058 0001 DC 1
118
+ # >> from A to C
119
+ # >> from A to B
120
+ # >> from C to B
121
+ # >> from A to C
122
+ # >> from B to A
123
+ # >> from B to C
124
+ # >> from A to C