rasl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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