-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample_cat_halt_on_eof.hell
274 lines (235 loc) · 3.74 KB
/
example_cat_halt_on_eof.hell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
/*
.....2 vs .....0
make sure: rotation width > 14
rotate (at least) 13 times
load c0
crazy into tmp: 0->1, 1->1, 2->2
crazy into tmp: 0->0, 1->0, 2->1
load 0t2
crazy into tmp: vorne: 0->1, 1->1, 2->1, hinten: 0->0, 1->0, 2->2
load 0t2
crazy into tmp: vorne: 0->1, 1->1, 2->1, hinten: 0->0, 1->0, 2->1
*/
.CODE
MOVD:
Nop/MovD Jmp
IN:
In/Nop Jmp
OUT:
Out/Nop Jmp
OPR:
Opr/Nop Jmp
ROT:
Rot/Nop Jmp
NOP:
Jmp
HALT:
Hlt
LOOP9:
Nop/Nop/Nop/Nop/Nop/Nop/Nop/Nop/MovD
Jmp
LOOP2:
Nop/MovD
Jmp
FLAG1:
MovD/Nop Jmp
FLAG2:
MovD/Nop Jmp
FLAG15:
MovD/Nop Jmp
FLAG16:
MovD/Nop Jmp
FLAG17:
MovD/Nop Jmp
FLAG18:
MovD/Nop Jmp
FLAG19:
MovD/Nop Jmp
FLAG20:
MovD/Nop Jmp
.DATA
crazy_var1:
OPR
var1:
C1
R_OPR
R_FLAG1 FLAG1 var1_ret1
R_FLAG19 FLAG19 var1_ret19
R_FLAG20 FLAG20 var1_ret20
crazy_var2:
OPR
var2:
C1
R_OPR
R_FLAG1 FLAG1 var2_ret1
R_FLAG2 FLAG2 var2_ret2
R_FLAG17 FLAG17 var2_ret17
R_FLAG19 FLAG19 var2_ret19
R_FLAG20 FLAG20 var2_ret20
crazy_var3:
OPR
var3:
C1
R_OPR
R_FLAG1 FLAG1 var3_ret1
R_FLAG19 FLAG19 var3_ret19
R_FLAG20 FLAG20 var3_ret20
rot_var4:
R_OPR
U_ROT var4
crazy_var4:
R_ROT
OPR
var4:
C1
U_NOP no_test
was_1t1:
U_NOP ret1t1
was_1t0:
R_MOVD
MOVD var4_was_1t0
ret1t1:
R_MOVD
MOVD var4_was_1t1
no_test:
R_OPR
R_ROT
R_FLAG1 FLAG1 var4_ret1
R_FLAG2 FLAG2 var4_ret2
R_FLAG15 FLAG15 var4_ret15
R_FLAG16 FLAG16 var4_ret16
R_FLAG17 FLAG17 var4_ret17
R_FLAG18 FLAG18 var4_ret18
R_FLAG19 FLAG19 var4_ret19
R_FLAG20 FLAG20 var4_ret20
crazy_var5:
OPR
var5:
C1
R_OPR
R_FLAG1 FLAG1 var5_ret1
R_FLAG19 FLAG19 var5_ret19
R_FLAG20 FLAG20 var5_ret20
crazy_var6:
OPR
var6:
C1
U_NOP no_test_6
v6was_1t1:
U_NOP v6ret1t1
v6was_1t0:
R_MOVD
MOVD var6_was_1t0
v6ret1t1:
R_MOVD
MOVD var6_was_1t1
no_test_6:
R_OPR
R_FLAG1 FLAG1 var6_ret1
R_FLAG2 FLAG2 var6_ret2
R_FLAG17 FLAG17 var6_ret17
R_FLAG15 FLAG15 var6_ret15
R_FLAG16 FLAG16 var6_ret16
R_FLAG19 FLAG19 var6_ret19
R_FLAG20 FLAG20 var6_ret20
ENTRY:
IN ?- R_IN
FLAG1 crazy_var1
var1_ret1: R_FLAG1
FLAG1 crazy_var2
var2_ret1: R_FLAG1
FLAG1 crazy_var3
var3_ret1: R_FLAG1
FLAG1 crazy_var4
var4_ret1: R_FLAG1
FLAG1 crazy_var5
var5_ret1: R_FLAG1
FLAG1 crazy_var6
var6_ret1: R_FLAG1
loop9:
R_MOVD
FLAG2 rot_var4
var4_ret2: R_FLAG2
LOOP9 exit_loop9
MOVD loop9
exit_loop9:
LOOP2 exit_loop2
MOVD loop9
exit_loop2:
ROT C0 R_ROT
FLAG15 crazy_var4
var4_ret15: R_FLAG15
FLAG16 crazy_var4
var4_ret16: R_FLAG16
ROT C1 R_ROT
OPR 0t2 R_OPR
FLAG17 crazy_var4
var4_ret17: R_FLAG17
ROT C1 R_ROT
OPR 0t2 R_OPR
FLAG18 crazy_var4
var4_ret18: R_FLAG18
// OUT ?- R_OUT
MOVD var4
; if var4 == 1t1 -> EOF or NL read
; if var4 == 1t0 -> unicode char read
var4_was_1t1:
R_MOVD
; distinguish EOF or NL
ROT C0 R_ROT
FLAG2 crazy_var6
var6_ret2: R_FLAG2
FLAG17 crazy_var6
var6_ret17: R_FLAG17
ROT C1 R_ROT
OPR 0t2 R_OPR
FLAG15 crazy_var6
var6_ret15: R_FLAG15
ROT C1 R_ROT
OPR 0t2 R_OPR
FLAG16 crazy_var6
var6_ret16: R_FLAG16
MOVD var6
; if var6 == 1t1 -> EOF read -> EXIT
; if var6 == 1t0 -> NL read
var6_was_1t1:
HALT
var4_was_1t0:
var6_was_1t0:
R_MOVD
; load var_2 for output...
ROT C0 R_ROT
OPR 1t2222222222222222222 R_OPR
FLAG2 crazy_var2
var2_ret2: R_FLAG2
ROT C0 R_ROT
OPR 1t2222222222222222222 R_OPR
FLAG17 crazy_var2
var2_ret17: R_FLAG17
OUT ?- R_OUT
ROT C1 R_ROT
FLAG19 crazy_var1
var1_ret19: R_FLAG19
FLAG20 crazy_var1
var1_ret20: R_FLAG20
FLAG19 crazy_var2
var2_ret19: R_FLAG19
FLAG20 crazy_var2
var2_ret20: R_FLAG20
FLAG19 crazy_var3
var3_ret19: R_FLAG19
FLAG20 crazy_var3
var3_ret20: R_FLAG20
FLAG19 crazy_var4
var4_ret19: R_FLAG19
FLAG20 crazy_var4
var4_ret20: R_FLAG20
FLAG19 crazy_var5
var5_ret19: R_FLAG19
FLAG20 crazy_var5
var5_ret20: R_FLAG20
FLAG19 crazy_var6
var6_ret19: R_FLAG19
FLAG20 crazy_var6
var6_ret20: R_FLAG20
MOVD ENTRY