ucisc 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,543 +0,0 @@
1
- # Draws an image on the screen at 16, 16 (from the top left)
2
- # Basic algorithm:
3
- # *Setup*
4
- # 1. The image data is part of the compiled output, but it
5
- # must be paged in. Processors only get the first page
6
- # of a task by default, so programs need to load themselves
7
- # into local memory first.
8
- # 2. Paint the image
9
- #
10
- # *Painting*
11
- # For each line in the image:
12
- # 1. Calculate page offset and count for a image raster line
13
- # 2. Page in the relevant pages from main memory. Note, this
14
- # isn't strictly necessary for this example as no other
15
- # code is drawing to the screen, but it's a moral victory.
16
- # 3. Copy the memory from the image data region to the proper
17
- # location in the paged memory.
18
- # 4. Page the memory back to main memory in the proper location.
19
- # Since the video memory is mapped to the main memory at a
20
- # specific location, this causes the line to draw immediately.
21
- #
22
- # The program halts when done and the CPU will idle.
23
- #
24
- # Notes:
25
- # * Double buffering is not implemented and the necessary hardware
26
- # is not emulated. So, the screen will "tear" if you don't draw
27
- # fast enough.
28
- # * In practice, the CPU can definitely outrun the paging mechanisms.
29
- # I got some nice partial images when I turned off access blocking
30
- # to pages that were in the process of paging.
31
- # * This page in/page out mechanism kills at least half your available
32
- # performance. It would be better to load multiple lines worth of
33
- # pages at once, draw on them and page them out. That's a harder
34
- # algorithm but in theory could preserve most of your performance.
35
- # This is just a proof of concept so I didn't do that.
36
- #
37
- # Conventions:
38
- #
39
- # I put psuedo code in the comments for each instruction. Some notes
40
- # about reading them and other things to know:
41
- #
42
- # * `var name = value` - var is created on the stack
43
- #
44
- # * Registers are generally treated as pointers
45
- #
46
- # * I tried to use C pointer semantics for comments. It's not perfect
47
- # because some of the dereferencing is a bit different here and it's not
48
- # checked by a compiler or running code so take them with a grain of salt.
49
- #
50
- # * The one exception is occaisionally they get loaded with an increment
51
- # value. Sometimes you just need to add one real fast.
52
- #
53
- # * You can generally easily count stack offsets by counting 1.push args
54
- #
55
- # * Don't forget to add offsets for any vars returned by functions on
56
- # the stack. I commented function return values for easy reference.
57
- #
58
- # * r1 is the stack, don't use it for anything else.
59
- #
60
- # * r2, r3 are not preserved by function calls, any one can do anything
61
- # with them. Assume they are garbage after a function call.
62
- #
63
- # * One variable needed on every loop iteration is always on the top of
64
- # the stack for easy access.
65
- #
66
- # * I found calculating before the loop to be pretty efficient. A quick
67
- # subtract will set the zero flag and you can jump over the break easily.
68
- #
69
- # * The order is heavily influenced by the limits of function call
70
- # immediate values. Notice the _page hack right off the bat.
71
- #
72
- # * I'll be updating function calls to handle this more gracefully.
73
- #
74
- # * `calculate_page_offset` uses 32-bit math. Check it out.
75
- #
76
- # To run:
77
- # $ exe/ucisc examples/image.ucisc
78
- #
79
- # Then: view the image. It works!!
80
- #
81
- # Instructions on the compiler and debugger are in the README.md
82
- # Or use GitHub https://github.com/grokthis/ucisc-ruby#usage
83
-
84
- Entry:
85
- # Initialize the stack register to 0x0000, decrement on push will change to 0xFFFF
86
- 0/load 0xFFFF to stack pointer/ 4.val 0.imm 1.reg
87
-
88
- # Page in program data. The first page comes with the task, but
89
- # we must page the rest in ourselves
90
- # fn: page(direction:int, main_page:int, local_page:int, count:int)
91
- (1.mem _page 4.val 1.imm, 4.val 1.imm, 4.val 1.imm, 4.val C.imm)
92
-
93
- # fn: paint_image(image:*Image, x:int, y:int, screen:*Screen)
94
- # paint_image(&image, 16, 16, &screen) - paint image at 16, 16 from top left
95
- (1.mem paint_image 4.val image.imm, 4.val 10.imm, 4.val 10.imm, 4.val screen.imm)
96
-
97
- 0/halt/ 0.reg/pc/ 0.reg/pc/
98
-
99
- # Screen:struct
100
- # page0: int
101
- # width:int
102
- # height:int
103
- # bytes_per_pixel:int
104
- screen:
105
- % 0011 # page 16 is config, page 17 is first screen data page
106
- % 0280 # 640
107
- % 01E0 # 480
108
- % 0002 # 2-bytes per pixel, bit depth 4 (5 for green)
109
-
110
- # Image:struct
111
- # pixels:*int[]
112
- # width:int
113
- # height:int
114
- image:
115
- % image_data.imm
116
- % 0040 # width: 64
117
- % 0030 # height: 48
118
-
119
- # fn: paint_image(image:*Image, x:int, y:int, screen:*Screen)
120
- paint_image:
121
- 0/var image_row = 0/ 4.val 0.imm 1.mem 1.push
122
- 0/var c_y = y/ 1.mem 2.imm 1.mem 1.push
123
- 0/var end_y = y/ 1.mem 0.imm 1.mem 1.push
124
-
125
- 0/r2 = &image/ 1.mem 6.imm 2.reg
126
- 0/r2 = &image.height/ 2.reg 2.imm 2.reg
127
- 20A/end_y = end_y + r2/ 2.mem 1.mem
128
-
129
- { # if end_y > screen.height
130
- 0/r2 = &screen/ 1.mem 3.imm 2.reg
131
- 0/r2 = &screen.height/ 2.reg 2.imm 2.reg
132
- 20D/screen.height - end_y >= 0?/ 1.mem 2.mem 1.sign 7.eff
133
-
134
- 0/break if positive/ 0.reg break.disp 0.reg 2.eff
135
- 0/break if zero/ 0.reg break.disp 0.reg 0.eff
136
-
137
- # Result was negative, end_y > screen.height, cap at screen.height
138
- 0/end_y = screen.height/ 2.mem 1.mem
139
- }
140
-
141
- 0/r2 = &c_y/ 1.reg 1.imm 2.reg
142
- { # while c_y < end_y
143
- 20D/end_y - c_y/ 2.mem 1.mem 1.sign 7.eff/don't store/
144
-
145
- 0/break if zero/ 0.reg break.disp 0.reg 0.eff
146
-
147
- # fn: paint_line(x:int, y:int, image_row:int, image:*Image, screen:*Screen)
148
- (1.mem paint_line 1.mem 5.imm, 1.mem 1.imm, 1.mem 2.imm, 1.mem 6.imm, 1.mem 3.imm)
149
-
150
- 0/r3 = 1/ 4.val 1.imm 3.reg
151
-
152
- 0/r2 = &image_row/ 1.reg 2.imm 2.reg
153
- 20A/image_row = image_row + 1/ 3.reg 2.mem
154
-
155
- 0/r2 = &c_y/ 1.reg 1.imm 2.reg
156
- 20A/c_y = c_y + 1/ 3.reg 2.mem
157
-
158
- 0/loop/ 0.reg loop.disp 0.reg
159
- }
160
-
161
- 0/pop 3 vars, 4 args/ 1.reg 7.imm 1.reg
162
- 200/pop and return/ 1.mem 0.reg 1.inc 0.sign
163
-
164
- # Hack... the immediate isn't big enough to call page directly
165
- # so we do a double jump. Yucky, I have ideas though.
166
- # TODO: there are better ways of handling this
167
- _page:
168
- 0 0.reg page.disp 0.reg
169
-
170
- # The loop takes 4 instructions per memory address. Not bad.
171
- # fn: mem_copy(source:int, target:int, len:int)
172
- mem_copy:
173
- 0/r2 = &source/ 1.mem 2.imm 2.reg
174
- 0/r3 = &target/ 1.mem 1.imm 3.reg
175
- 20A/len as final = target + len/ 3.reg 1.mem
176
-
177
- {
178
- 20C/target - final/ 3.reg 1.mem 1.sign 7.eff
179
- 0/break if zero/ 0.reg break.disp 0.reg 0.eff
180
-
181
- 200/copy address/ 2.mem 3.mem 1.inc 0.sign
182
- 0/loop/ 0.reg loop.disp 0.reg
183
- }
184
- #200/debug breakpoint/ 0.reg 0.reg
185
- 0/pop 3 vars off stack/ 1.reg 3.imm 1.reg
186
- 200/pop and return/ 1.mem 0.reg 1.inc 0.sign
187
-
188
- # fn: paint_line(x:int, y:int, image_row:int, image:*Image, screen:*Screen)
189
- paint_line:
190
- # 1. figure out which pages to page in
191
- 0/r2 = &image/ 1.mem 1.imm 2.reg
192
- # page_offset:int, page_count:int, word_offset:int <-
193
- # calculate_page_offset(x, y, image.width, screen:*Screen)
194
- (1.mem calculate_page_offset 1.mem 4.imm, 1.mem 3.imm, 2.mem 1.imm, 1.mem 0.imm)
195
-
196
- # Calculate main page number, based on offset
197
- 0/r2 = screen/ 1.mem 3.imm 2.reg
198
- 0/var main_page = screen.page0/ 2.mem 0.imm 1.mem 1.push
199
- 0/r2 = &page_offset/ 1.reg 3.imm 2.reg
200
- 20A/main_page = main_page + page_offset/ 2.mem 1.mem
201
-
202
- # 2. Page in the appropriate pages
203
- # page(direction:int, main_page:int, local_page:int, count:int)
204
- (1.mem page 4.val 1.imm, 1.mem 0.imm, 4.val 10.imm, 1.mem 2.imm)
205
-
206
- # 3. Copy the image line in the right place
207
- # Calculate line offset in image.pixels
208
- 0/r2 = &image/ 1.mem 5.imm 2.reg
209
- 0/var width = image.width/ 2.mem 1.imm 1.mem 1.push
210
- 0/var source = image.width/ 2.mem 1.imm 1.mem 1.push
211
- 0/r3 = &image_row/ 1.reg 8.imm 3.reg
212
- 20F/source = image.width * image_row/ 3.mem 1.mem
213
- 20A/source = source + image.pixels/ 2.mem 1.mem
214
-
215
- #200/debug breakpoint/ 0.reg 0.reg
216
- # Calculate local page location
217
- 0/var target = local_page/ 4.val 10.imm 1.mem 1.push
218
- 212/convert target to address/ 1.mem 1.mem
219
- 0/r2 = &word_offset/ 1.reg 4.imm 2.reg
220
- 20A/target = target + word_offset/ 2.mem 1.mem
221
-
222
- # mem_copy(source, target, width)
223
- (1.mem mem_copy 1.mem 1.imm, 1.mem 0.imm, 1.mem 2.imm)
224
-
225
- # 4. page them out
226
- # page(direction:int, main_page:int, local_page:int, count:int)
227
- (1.mem page 4.val 0.imm, 1.mem 3.imm, 4.val 10.imm, 1.mem 5.imm)
228
-
229
- 0/pop 12 vars off stack/ 1.reg C.imm 1.reg
230
- 200/pop and return/ 1.mem 0.reg 1.inc 0.sign
231
-
232
- # fn: page(direction:int, main_page:int, local_page:int, count:int)
233
- # Page memory to/from main memory. If direction == 0, page out, else page in.
234
- # Pages each page in sequence starting at the given local and main page
235
- # indexes. The total number of page operations is count.
236
- page:
237
- 0/var end_page = count/ 1.mem 1.mem 1.push
238
- 0/r3 = &local_page/ 1.reg 2.imm 3.reg
239
- 0/r2 = &main_page/ 1.reg 3.imm 2.reg
240
- 20A/end_page = count + local_page/ 3.mem 1.mem
241
-
242
- {
243
- 20C/end_page - local_page == 0?/ 3.mem 1.mem 1.sign 7.eff
244
- 0/break if zero/ 0.reg break.disp 0.reg 0.eff
245
-
246
- { # if direction != 0
247
- 0/var dir = direction/ 1.mem 4.imm 1.mem 1.push
248
- 20A/direction + direction == 0/ 1.mem 1.mem 1.sign 7.eff
249
- 0/break if 0/ 0.reg break.disp 0.reg 0.eff
250
-
251
- # TODO: work on if/else flow, I could save an instruction if
252
- # I used direct labels instead of break logic
253
- 6/page in/ 2.mem 3.mem 1.in 0.lock
254
- }
255
- { # else
256
- 0/break if not 0/ 0.reg break.disp 0.reg 1.eff
257
-
258
- 6/page out/ 2.mem 3.mem 0.out 0.lock
259
- }
260
-
261
- 0/direction as inc = 1/ 4.val 1.imm 1.mem
262
- 20A/main_page += 1/ 1.mem 2.mem
263
- 20A/local_page += 1/ 1.mem 3.mem
264
- 0/pop inc/ 1.reg 1.imm 1.reg
265
-
266
- 0/loop/ 0.reg loop.disp 0.reg
267
- }
268
-
269
- 0/pop 5 variables/ 1.reg 5.imm 1.reg
270
- 200/pop and return/ 1.mem 0.reg 1.inc 0.sign
271
-
272
- # This works, but feels sub-optimal. I can probably do better.
273
- # fn: page_offset:int, page_count:int, word_offset:int <-
274
- # calculate_page_offset(x:int, y:int, length:int, screen:*Screen)
275
- calculate_page_offset:
276
- # calculate word offset from start
277
- # woffset can be up to screen_w * screen_h (307,200 for 640x480)
278
- # we need to use 2 word values (32-bit) for woffset
279
- 0/r2 = &screen/ 1.mem 0.imm 2.reg
280
- 0/var screen_w32 MSW = 0/ 4.val 0.imm 1.mem 1.push
281
- 0/var screen_w32 LSW = screen_w/ 2.mem 1.imm 1.mem 1.push
282
-
283
- 0/var woffset MSW = 0/ 4.val 0.imm 1.mem 1.push
284
- 0/var woffset LSW = y/ 1.mem 5.imm 1.mem 1.push
285
-
286
- 0/r2 = &screen_w/ 2.reg 1.imm 2.reg
287
- 20E/woffset:LSW = woffset * screen_w/ 2.mem 1.mem 1.inc 0.sign
288
- 20E/woffset:MSW = woffset * screen_w/ 2.mem 1.mem 1.inc 1.sign # 1.sign restores sp, r2
289
-
290
- 0/var x_32 MSW = 0/ 4.val 0.imm 1.mem 1.push
291
- 0/var x_32 LSW = x/ 1.mem 8.imm 1.mem 1.push
292
-
293
- 0/r2 = &woffset/ 1.reg 2.imm 2.reg
294
- 20A/woffset:LSW = woffset + x/ 1.mem 2.mem 1.inc 0.sign
295
- 20A/woffset:MSW = woffset + x/ 1.mem 2.mem 1.inc 1.sign # 1.sign restores sp, r2
296
- # woffset is word offset of first pixel from screen start
297
-
298
- # calculate end offset
299
- 0/var wend_32 MSW = woffset:MSW/ 1.mem 3.imm 1.mem 1.push
300
- 0/var wend_32 LSW = woffset:LSW/ 1.mem 3.imm 1.mem 1.push
301
-
302
- 0/var length_32:MSW = 0/ 4.val 0.imm 1.mem 1.push
303
- 0/var length_32:LSW = length/ 1.mem A.imm 1.mem 1.push
304
- # remove 1 from the length so we are left pointing
305
- # directly at the last pixel instead of after it
306
- 0/r2 = 1/ 4.val 1.imm 2.reg
307
- 20C/length_32:LSW = length_32:LSW - 1/ 2.reg 1.mem
308
-
309
- 0/r2 = &wend_32/ 1.reg 2.imm 2.reg
310
- 20A/wend_32:LSW = wend_32 + length_32/ 1.mem 2.mem 1.inc 0.sign
311
- 20A/wend_32:MSW = wend_32 + length_32/ 1.mem 2.mem 1.inc 1.sign # 1.sign restores sp, r2
312
- # wend is word offset of last pixel from screen start
313
-
314
- # Divide wend by 256 to get end page offset
315
- # result will be < 16-bit up to 4k resolution @ high color, that's good for now
316
- 0/r2 = &wend_32:MSW/ 1.reg 3.imm 2.reg
317
- 0/r3 = &wend_32:LSW/ 1.reg 2.imm 3.reg
318
- 213/wend_32:LSW = wend_32:LSW >> 8/ 3.mem 3.mem
319
- 218/wend_32:MSW LSB into wend_32:LSW/ 2.mem 3.mem
320
-
321
- 0/var poffset_32 MSW = woffset:MSW/ 1.mem 7.imm 1.mem 1.push
322
- 0/var poffset_32 LSW = woffset:LSW/ 1.mem 7.imm 1.mem 1.push
323
-
324
- # Divide woffset by 256 to get start page offset
325
- 0/r2 = &poffset_32:MSB/ 1.mem 7.imm 2.reg
326
- 213/poffset_32:LSW = poffset_32:LSW >> 8/ 1.mem 1.mem
327
- 218/poffset_32:MSW LSB into poffset_32:LSW/ 2.mem 1.mem
328
-
329
- 0/var page_count = (int)wend_32/ 1.mem 4.imm 1.mem 1.push
330
- 0/r2 = &(int)poffset_32/ 1.reg 1.imm 2.reg
331
- 20C/page_count = page_count - poffset/ 2.mem 1.mem
332
- # Page count to transfer is actually 1 more than the page delta
333
- 0/r2 = 1/ 4.val 1.imm 2.reg
334
- 20A/page_count = page_count + 1/ 2.reg 1.mem
335
-
336
- 0/var word_offset = (int)woffset_32/ 1.mem 9.imm 1.mem 1.push
337
- 215/word_offset = word_offset & 0x00FF/ 1.mem 1.mem
338
-
339
- # Done calculating results, need to pop everything off the stack, return results
340
- 0/r3 = &return/ 1.mem 12.imm 3.reg
341
- 0/r2 = pop 19 words (inc &return)/ 1.reg 13.imm 2.reg
342
- 0/push (int)poffset/ 1.mem 2.imm 2.mem 1.push
343
- 0/push page_count/ 1.mem 1.imm 2.mem 1.push
344
- 0/push word_offset/ 1.mem 0.imm 2.mem 1.push
345
-
346
- 0/replace sp with 2sp/ 2.reg 1.reg
347
- 0/return/ 3.reg 0.reg
348
-
349
- # 64x48 pixel image
350
- image_data:
351
-
352
- % 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8 00C8
353
- % 00C9 00C9 00C8 00C8 00C8 00C8 00C8 00C8 00C9 00E9 00E9 00E9 00E9 00E9 00EA 00EA
354
- % 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00E9 00EA 00E9 00E9 00E9 00E9
355
- % 00C9 00E9 00E9 00E9 00E9 00E9 00C9 00E9 00E9 00E9 00E9 00C9 00C9 00C9 00C9 00C9
356
- % 00C8 00C8 00C8 00C8 00E8 00E8 00E8 00E9 00E9 00E9 00E9 00E9 00E9 00E9 00E9 00E9
357
- % 00E9 00E9 00C9 00C9 00E9 00E9 00E9 00E9 00E9 00EA 00EA 00EA 00EA 010A 010A 010A
358
- % 010A 010A 010A 010A 010A 010B 010A 010A 010A 010A 010A 00EA 00EA 00EA 00EA 00EA
359
- % 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00EA 00E9 00E9 00E9 00E9 00E9 00E9 00E9
360
- % 00C8 00E8 00E8 00E8 00E8 00E9 00E9 00E9 00E9 00E9 0109 0109 0109 00E9 00E9 00E9
361
- % 00E9 00E9 00E9 00E9 00E9 00E9 00E9 00EA 010A 010A 010A 010A 010A 010A 010B 012B
362
- % 010B 012B 012B 012B 012B 012B 012B 012B 012B 012B 012B 010B 010B 010A 010A 010A
363
- % 010A 010A 010A 010A 010A 010A 010A 010A 010A 010A 010A 010A 00E9 00E9 00E9 00E9
364
- % 00E8 00E8 00E9 00E9 0109 0109 0109 0109 0109 0109 0109 0109 0109 0109 0109 0109
365
- % 0109 0109 0109 010A 010A 010A 010A 010A 010A 012A 012A 012A 012B 012B 012B 012B
366
- % 012B 012B 014B 014B 014B 014B 014B 012B 012B 012B 012B 012B 012B 012B 012B 012B
367
- % 012B 012B 012B 012A 012A 012A 012A 012A 012A 012A 010A 010A 010A 010A 010A 0109
368
- % 0108 0109 0109 0109 0109 0109 0109 0109 0109 0129 0129 0129 0129 0129 0109 0109
369
- % 012A 012A 012A 012A 012A 012A 012A 012A 012A 012B 012B 014B 014B 014B 014B 014B
370
- % 014C 014C 014C 014C 014C 014C 014C 014C 014C 014C 014B 014B 014B 014B 014B 014B
371
- % 014B 014B 012B 012B 012B 012B 014B 014B 012B 012A 012A 012A 012A 012A 012A 012A
372
- % 0109 0109 0109 0109 0109 0129 0129 0129 0129 0129 0129 012A 012A 012A 012A 012A
373
- % 012A 012A 012A 012A 094A 014A 094A 094B 094B 094B 094B 096B 096B 096C 096C 096C
374
- % 096C 096C 096C 096C 096C 096C 096C 096C 096C 096C 096C 096C 096C 096B 096B 096B
375
- % 014B 094B 094B 094B 094B 094B 094B 094B 094B 094B 094B 014B 014A 014A 012A 012A
376
- % 0929 0929 0929 0929 0929 0929 0929 0929 0949 094A 094A 094A 094A 094A 094A 094A
377
- % 094A 094A 094A 094A 094A 096A 096B 096B 096B 096B 096B 096B 098C 098C 098C 098C
378
- % 098C 098D 098D 098C 098D 098D 098D 098C 098C 098C 098C 098C 098C 098C 098C 096C
379
- % 096B 096B 096B 096B 096B 096B 096B 096B 096B 096B 094B 094B 094A 094B 094A 094A
380
- % 0949 0929 0949 0949 0949 094A 094A 094A 094A 094A 094A 096A 094A 096A 096A 096A
381
- % 096A 096A 096A 096A 096B 096B 096B 098B 098B 098B 098C 098C 09AC 09AC 09AC 09AC
382
- % 09AD 09AD 09AD 09AD 09AD 09AD 09AD 09AD 09AD 09AD 09AD 09AC 09AC 09AC 098C 098C
383
- % 098C 098C 098B 098C 098C 098B 098B 098B 096B 096B 096B 096B 096B 096B 096B 096B
384
- % 0949 0949 0949 094A 094A 096A 096A 096A 096A 096A 096A 096A 096A 096A 096A 096A
385
- % 096A 098A 098A 098B 098B 098B 098B 09AB 09AB 09AC 09AC 09AC 09AC 09CD 11CD 11CD
386
- % 11CD 11CD 11CD 11CD 11ED 11ED 11ED 11ED 11ED 11CD 11CD 11CD 11CD 11CD 09CD 11AC
387
- % 09AC 09AC 09AC 09AC 09AC 09AC 09AC 098B 098B 098B 098B 098B 098B 098B 098B 096B
388
- % 1169 0969 096A 116A 116A 116A 116A 118A 118A 118A 118A 118A 118A 118A 118A 118A
389
- % 118A 118B 118B 11AB 11AB 11AB 11AB 11CC 11CC 11CC 11CC 11CD 11ED 11ED 11ED 11ED
390
- % 11ED 11ED 11ED 11ED 11ED 11EE 120E 120E 11EE 11ED 11ED 11ED 11ED 11ED 11CD 11CD
391
- % 11CC 11CC 11CC 11CC 11CC 11AC 11AC 11AC 11AC 11AB 118B 118B 118B 118B 118B 118B
392
- % 1189 118A 118A 118A 118A 118A 118A 118A 11AA 11AA 11AA 11AA 11AA 11AA 11AB 11AB
393
- % 11AB 11AB 11CB 11CB 11CB 11CB 11CC 11CC 11EC 11EC 11EC 11ED 120D 120D 120D 120D
394
- % 120D 120D 120E 120E 120E 120E 120E 120E 120E 120E 120E 120D 120D 120D 11ED 11ED
395
- % 11ED 11EC 11EC 11EC 11CC 11CC 11CC 11CC 11CC 11AB 11AB 11AB 11AB 11AB 118B 118A
396
- % 1189 1189 1189 1189 11AA 11AA 11AA 11AA 11AA 11AA 19CA 19CA 19CA 19CA 19CA 11CA
397
- % 19CA 19CA 19CB 19EB 19EB 19EB 19EB 19EB 19EC 1A0C 1A0C 1A0C 1A0D 1A0D 1A2D 1A2D
398
- % 1A2D 1A2E 1A2E 1A2E 1A2E 1A2E 1A2E 1A2D 1A2D 1A2E 1A0E 1A0D 1A0D 1A0D 1A0D 1A0D
399
- % 1A0D 1A0D 19EC 19EC 19EC 19EC 19EC 19EC 19CC 19CB 11CB 11CB 11AA 11AA 11AA 118A
400
- % 1989 1989 19A9 19A9 19AA 21C9 21C9 21E9 29E9 21EA 19CA 19CA 19CA 19CA 21EA 21EA
401
- % 21EA 19CA 19EA 19EA 19EB 19EB 19EB 1A0B 1A0B 1A0C 1A0C 1A0C 326D 32AE 1A2D 1A2D
402
- % 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A2D 1A0C
403
- % 1A0C 222C 1A0C 1A0C 1A0C 19EC 19EC 19EC 19EB 19CB 19CB 19CB 19CA 19AA 19AA 11AA
404
- % 1989 1989 1989 1989 1989 21A9 29C9 31E9 31E9 31E9 29C9 21C9 21C9 29E9 29E9 29C9
405
- % 21C9 21C9 21CA 21CA 21CA 21EA 21EA 21EA 19EB 21EB 21CA 1107 52CC AD76 73F2 3AAE
406
- % 2A4D 222D 1A0D 222D 222D 1A0D 1A0D 1A0D 1A0D 1A0D 1A0D 1A0C 1A0C 1A0C 1A0C 1A0C
407
- % 19EC 2A2B 220B 19EC 19EB 19EB 19CB 19CB 19CB 19CA 19AA 19AA 19AA 198A 1989 1989
408
- % 1168 1168 1968 1968 1968 1968 1988 1988 1988 1989 1989 1989 1989 1989 1989 1989
409
- % 1989 1989 1989 1989 19A9 19AA 19AA 19AA 19AA 1148 08A5 0084 4A6B 9CD2 A4D3 8451
410
- % 636E 5B4F 328E 19EC 19EC 19EC 19EC 19EC 19EC 19EC 19EC 19EC 19EC 19EC 19CC 19CC
411
- % 19CB 19EB 19CB 19CB 19CB 19CB 19AA 19AA 19AA 198A 19AA 19A9 1989 1989 1969 1168
412
- % 1148 1148 1148 1148 1148 1148 1148 1148 1148 1148 1148 1148 1149 1149 1169 1169
413
- % 1169 1169 1169 1169 1169 1169 118A 118A 0927 0064 0043 08A5 10E5 5AEC 6B6E 31C8
414
- % 10C5 3A09 9CF3 5B70 1A0D 11CC 11CC 11CC 19CC 11CC 11CC 11CC 11AC 11AB 11AB 11AB
415
- % 11AB 11AB 11AB 19AB 11AB 11AB 19AA 118A 118A 116A 1189 1169 1169 1169 1168 1148
416
- % 0927 0927 0927 0927 0927 0927 0928 0928 0928 0928 0928 1148 1168 1148 1148 1149
417
- % 0949 0949 0949 1149 1149 0949 0949 08E6 0064 2987 39E9 10E5 10C5 4A8B 6B4D 31A8
418
- % 0064 0064 424A 8430 8C92 6BB1 222D 11CC 11AB 11AB 118B 118B 096B 096B 096A 116A
419
- % 116A 116A 096A 096A 116A 118A 118A 116A 1169 0949 0949 0949 0928 0928 0928 0928
420
- % 0907 0907 0907 0907 0907 0907 0907 0907 1147 1126 1126 10E6 10E5 08C5 2188 1947
421
- % 21A9 1989 1148 1128 1989 1948 08C6 08A5 0884 4A6A 738E 10E6 1926 31A8 3A09 10E6
422
- % 08A5 0043 10E5 29A8 8410 C5F6 A514 73F1 3AAE 220C 11AB 11AB 118B 096A 096A 116A
423
- % 118A 096A 118A 19CB 096A 0949 0949 0949 1169 1989 0949 0928 0928 0928 0928 0907
424
- % 1127 0907 0907 0907 0907 0907 0907 08C6 08A4 0863 08A4 0063 0043 0884 1905 0883
425
- % 5ACB 62EB 2146 08A4 1905 4249 2146 39E9 2146 31C8 630C 10E5 0884 2987 1906 31C8
426
- % 4A8B 1106 0084 0064 52AC C5D5 CE16 B595 9492 6B6F 5B2E 7C11 5B2E 42AD 324C 21EB
427
- % 42AC 322B 4AAC 9CD2 6B8F 428C 322B 3A4B 21C9 424A 2188 21A9 1969 0908 0908 0907
428
- % 4A48 2167 1926 1926 1126 08E6 08C5 0063 0863 0864 10C5 0064 0064 1905 0884 0043
429
- % 632C 944F 5AEB 1926 1906 1905 2167 5AEC 424A 5AEC 738E 630C 1926 31C8 1926 31C8
430
- % 738E 4A8B 1106 0084 5B0C BDB5 CE36 B554 9CB2 8C30 8430 AD13 B554 9471 738E 426B
431
- % 31EA 2188 8430 BD94 BD74 B553 6B6D 5AEC 4A8B 52AB 52AB 4A8A 52CB 2188 1968 1147
432
- % 4A28 4208 5248 4207 2966 2987 0883 0042 0063 0864 08A5 0064 29A7 1905 0063 0884
433
- % 83EE CDD4 B552 6B4C 29A8 08A4 08C5 29A8 39E9 2967 736D 83EF 424A 29A8 3A2A 52CC
434
- % 52CC 29A8 08A5 1106 424A A4F2 CE16 C5D5 9CB2 8C51 9471 9471 A4F2 73AF 320A 3A2A
435
- % 2188 29C9 B574 BDB5 9CB2 AD13 A4F2 6B4D 52AB 5AEC 632C 736D 734C 4A69 4229 31C8
436
- % 39C7 1905 3166 39E7 2146 10C4 0043 0042 0043 0884 10E5 1906 5AEB 2166 0084 08A5
437
- % 528A B532 CDD4 AD11 6B4D 2988 29A8 31E8 52AB 39E9 3A09 738E 426A 31E9 4A6B 52AB
438
- % 4A6B 1927 1127 52AB 2167 426A AD33 CDF5 AD13 9471 AD33 A4F2 8410 630D 426B 320A
439
- % 21A9 6B8E C5D5 CDF5 A4D2 8C30 A4F2 BD73 738D 52AB 4A6A 3A09 528A 5ACB 4A49 39E8
440
- % 734A 41E7 39C7 5269 10C4 0043 0043 0043 0043 0063 31A8 31C7 5AEB 2146 1106 528A
441
- % 2146 738D B532 B532 944F 736D 5AEC 4A8B 630C 83CE 3A09 5AEC 4A6A 424A 5AEC 4A8B
442
- % 2168 1106 52AB 7BAE 4A8B 29A8 634D B553 BD94 9CB1 A4D2 83CF 52AB 31E9 4A8B 4A8C
443
- % 29E9 AD53 CDF5 C5D5 A4F2 9CB1 83EF A4D1 AD32 6B4D 3A09 31C8 31E8 630B 736C 738C
444
- % 5A88 3186 2125 31A7 0063 0042 0043 0063 10C5 2987 39E8 10E5 31C7 10E5 1906 5AEB
445
- % 2987 3A09 8C0F 944F 8C0E 83EE 8C0F 52CB 4A8B 9450 630C 5AEC 31C9 2188 52AB 2188
446
- % 08E6 31C9 840F 7BEF 738E 3A4A 4A8B A4F2 AD33 8C30 8C51 29A8 08A4 08A5 1926 73CF
447
- % 73AF 9CB2 BDB4 BDB4 A4F2 9CB1 7BAE 7BAE B552 A4B0 7BCE 4249 2187 31C8 4A49 83ED
448
- % 5248 2966 18E4 10C4 0043 0043 0043 10A4 39E8 4A49 39C8 1905 1905 08A4 10E5 2967
449
- % 08C5 2167 6B4C 736D 8C0E 6B4C 7BAD 62EB 31E9 7BAE 630C 4A6A 2167 2167 2147 00A5
450
- % 2167 4A6B 9491 8430 83EF 6B4D 52CB 6B4D A4F2 8410 94B3 5B0D 52AC 3A2A 31C9 5B2D
451
- % A4F3 8C51 8C50 9CB1 B573 83EF 6B2C 52AB 7B8D 8C0E 7B8D 738D 52AB 4A8A 3A09 5AEB
452
- % 5A68 39A6 10A3 10A4 0884 0863 0863 2966 31A7 39E8 31C7 2166 2987 1905 1906 10C5
453
- % 0064 2167 62EB 5ACB 6B2C 5AEB 5AAA 6B2C 4A6A 6B4C 738D 5AEB 630C 632C 2987 2147
454
- % 1106 4A8A 9CD2 840F 8C50 7BCE 6B4C 2987 29A7 29A8 C5F8 CE59 CE39 CE59 9CB3 9492
455
- % 8C31 7BCF 632D 73AF A4F2 9C91 7BAE 4249 4229 5ACA 4229 94B2 B575 9491 9450 83EF
456
- % 3165 3186 39C7 5AAA 62EB 4A28 2105 2946 4A28 5269 39C7 2987 31C7 528A 39E8 4A69
457
- % 2987 528A 5289 31A7 4A49 5289 6B2B 7BAD 4A49 39C8 5ACA 738D 630B 5ACB 83EF 3A09
458
- % 08C5 6B4D AD33 842F AD33 9CB1 8C0F 39E8 0043 29A8 CE38 E6DB DEDA D679 BDB6 B596
459
- % 9CB3 9492 83EF 6B4D 840F 7BAE 840F 630C 4A6A 528A 3A08 AD54 C5D6 AD34 A4F2 9450
460
- % 31A6 39C7 62CA 62EB 62EB 62EB 4A69 31C7 5249 5AA9 62CA 4A49 528A 5ACA 5AAA 5269
461
- % 5AAA 4208 2966 3186 62EA 39E7 734B 6B0B 31A7 2125 4208 39E8 1926 1926 7BAD 29A7
462
- % 1926 6B4C 840F 8C0F 83EE 9CB0 5AAA 0884 0063 1905 94B2 DEBA DEBA CE38 BDD7 C5F7
463
- % B596 A514 9471 5ACB 83EF 5ACB 4208 4228 31A7 2125 29A7 AD33 C5D5 B553 B553 A4F2
464
- % 4A48 3186 2966 31A6 1904 2125 2945 41E8 62CA 5AAA 5AAA 31A7 31A7 2966 39C7 4A48
465
- % 31C7 18E4 2125 18E4 4207 3186 2105 1904 2986 5269 6B2C 528A 2987 29A7 5ACA 2146
466
- % 18E4 31C7 52CB 8C0E 41E7 31A7 10A4 0043 08A4 0883 52CB BDD6 CE58 BDB6 AD54 BDB5
467
- % B575 B555 AD13 630C 7BAE 7B8D 4A48 10A3 0883 2145 2125 4A69 A4D1 B553 B533 9CB1
468
- % 8BEE 7B8D 41E7 2104 18E4 1904 18C4 31A7 4208 2986 31A7 39E7 1904 0883 3186 3165
469
- % 10A3 0863 18C3 10A3 18C3 10A3 0883 2945 3186 39E7 4A48 4A49 39C7 4A48 4A49 2125
470
- % 2124 3186 2145 4228 18E5 0043 0042 0043 1905 08A4 632D 83EF 8C50 AD34 A513 9471
471
- % A4F3 A513 AD13 5AEC 6B2C A4D1 5269 08A4 08A4 39E8 2986 0883 39C7 8C2F B532 A4D1
472
- % 8C0E 8BEE 7B8C 39C7 2965 2124 39C7 4A48 5AA9 4208 2965 2965 10A3 1083 41E7 3165
473
- % 10A3 0842 0862 1082 10A3 0882 0862 18C3 10C3 10A3 18C3 2104 18C3 2104 10A3 0862
474
- % 0882 10A3 0883 0042 0042 0042 0042 0042 0863 0042 3A09 8C30 73AE 738D 8C30 7BAE
475
- % 738D 9CD2 9CB1 736D 41E7 8C0F 5ACB 10C4 10E4 4228 1905 0862 0883 4208 630B 942F
476
- % 732B 7B6C 6B0A 4A27 18C3 18E4 39C7 18C3 20E4 18A3 0862 0862 0842 18C3 2104 20E3
477
- % 10A2 0841 0862 0862 0862 0862 0862 1082 10A3 18C3 18C3 18C3 1082 0862 2125 18C4
478
- % 0042 0042 0042 0042 0022 0042 0042 0042 0042 0863 31A8 9CB2 9491 83EF 738D 738D
479
- % 5269 62EB 6B4C 6B2C 39C7 4208 41E8 08A3 10E4 10A3 0863 0883 0883 3186 3186 5ACA
480
- % 62C9 5268 5A89 62EA 39C6 10A2 2104 1082 1082 0841 0041 0041 0041 1082 1082 0861
481
- % 0862 0842 1082 10A2 18C3 2103 2103 18C3 1082 0862 0862 0862 1082 18E4 62EB 2105
482
- % 0022 0042 0022 0022 0862 0883 2125 2125 1905 39C7 738D AD13 9CD2 840F 6B4D 7BAE
483
- % 7BAD 62EB 4207 4208 39E7 2966 18E4 08A3 0862 0042 0862 0882 10A3 41E7 2965 18E4
484
- % 41E6 41C6 41E6 5A88 4207 2965 1082 1081 1081 0041 0861 0861 0841 0861 1082 0041
485
- % 0841 0041 0861 10A2 18C3 18C3 1082 0841 0021 0841 0841 0861 0862 10C3 2104 20E4
486
- % 0021 0862 18E4 3186 4208 5ACA 5289 4229 2125 4A48 5AAA 6B2B 736C 62EB 5AAA 39C7
487
- % 5AAA 62EB 736C 736C 4A28 3186 1904 0883 0862 0841 0862 0862 18E4 5A89 62EA 2104
488
- % 0861 18C2 2103 5268 6B0A 734B 4A27 1082 0861 0021 0841 0841 0841 0841 0861 0841
489
- % 0861 0861 0861 1082 0862 0841 0041 0841 0841 0041 0021 0841 0862 0862 0862 18E3
490
- % 10A3 39A6 4A28 62EA 5269 7B8D 7B8D 6B2C 3186 31A7 2986 3186 39C7 39E7 5269 4A28
491
- % 2145 31A7 39A6 39C6 62CA 4A48 2146 0862 0041 0862 1904 10A3 2965 5248 83AD 5269
492
- % 18E3 0020 0841 3185 4A07 6AC9 5A68 10A2 0041 0020 0021 0041 0841 0841 0021 0861
493
- % 1081 1081 1081 1082 0861 0841 0841 0841 0021 0020 0020 0021 0841 1082 10A2 0882
494
- % 10C3 2924 2945 4207 2965 39E7 5269 528A 4208 4228 3186 18C3 2104 2124 2124 31A6
495
- % 2966 39E8 2945 1083 5268 8C0E 6B4C 1082 0020 0861 18C3 2104 2944 4A48 62EA 83AC
496
- % 5A88 10A2 0041 10C3 18C3 2103 18A2 1082 0882 0861 0041 0021 0021 0021 0021 0841
497
- % 0841 0861 1081 0841 0841 0841 0841 0040 0020 0020 0020 0020 0841 18E3 4A28 31A6
498
- % 10A2 1082 0882 10A2 18E3 2104 2104 39C7 4A69 2945 2104 10A3 18E3 2124 0862 0842
499
- % 18E4 2966 10C3 4208 5289 6B2C 7BAE 3186 0021 18C3 41E6 39A5 18C2 3165 39C6 5268
500
- % 3164 1082 0041 18E3 1904 18E3 1082 0861 0882 10A3 10A3 0862 0862 0041 0021 0020
501
- % 0020 0020 0021 0020 0020 0020 0020 0020 0020 0020 0020 0020 0862 10C3 18E3 62EB
502
- % 39A6 4208 39C7 2945 18E3 1082 2944 7BAD 9C90 736C 4A28 2124 0882 1082 0021 0842
503
- % 2145 31A6 18C3 4A28 6B2C 5268 5AA9 4A49 10C3 3165 5268 5268 3985 2103 2944 2944
504
- % 10A2 0041 0020 0861 10A3 10C3 0841 0841 0882 10A3 18E4 0862 0041 0021 0020 0020
505
- % 0020 0020 0020 0020 0020 0020 0020 0041 0862 0882 0861 0882 2104 2965 2124 2965
506
- % 4228 52AA 632C 4228 4207 5268 734C 83CD 83CE 734C 62CA 3186 0041 0861 0042 0882
507
- % 31A6 4207 2104 2104 630C 62EA 5AA9 4229 39E8 31A7 39C6 39A6 39A6 2124 2103 0882
508
- % 2965 2965 18E3 0841 0841 0862 0861 0841 10A3 1904 18E3 0861 0020 0020 0020 0020
509
- % 0020 0020 0020 0020 0020 0020 0020 0862 18E4 18E4 10A3 10C3 2145 2986 2986 2986
510
- % 39C7 5289 5269 18E3 2945 736C 83EE 7BAD 4A6A 31C8 31E9 31C8 2966 2146 2167 18E4
511
- % 2124 3165 2945 0861 31A7 528A 5AAB 4A49 4A49 4A49 2986 2966 4A49 4A6A 39C7 18E4
512
- % 2145 4207 31C6 1904 18E4 10C3 0882 0041 0041 0882 0882 0841 0020 0020 0020 0020
513
- % 0020 0020 0020 0020 0020 0020 0020 0041 0862 0882 0861 0841 0862 2945 39C6 2124
514
- % 18C3 2124 1082 0841 0841 2944 5268 62A9 2987 29A8 5AEC 630D 632E 52AC 4229 2987
515
- % 31A6 18E3 0861 10C3 31C7 3A09 4229 4A6A 3A08 2146 1905 2145 4208 5ACB 6B0C 41E8
516
- % 2965 4A69 5289 4A69 4228 3A08 39C7 18E3 0861 0041 0020 0020 0020 0020 0020 0020
517
- % 0020 0020 0020 0020 0020 0041 0861 0862 0041 0020 0020 0020 0040 10A2 1082 0841
518
- % 0021 0841 0020 0020 0020 0040 1082 18E4 1926 3A09 632E 738F 738F 6B6E 52AB 39E8
519
- % 31C7 2986 10E4 10C4 2125 2987 4208 5AAB 52AA 39C7 2105 18E4 3186 4A28 5269 39C7
520
- % 4208 4A49 5ACA 736D 62EB 5289 4A48 31E7 29A6 2145 0882 0020 0020 0020 0020 0020
521
- % 0020 0020 0020 0020 0020 0020 0020 0041 0020 0020 0020 0020 0020 0020 0020 0041
522
- % 0841 0041 0020 0020 0020 0020 0862 10E5 31C8 52AC 632D 6B4E 630D 5ACB 4A4A 39E8
523
- % 31C8 29A7 2986 1905 10C4 18E4 3186 4A29 4A49 4A48 31A6 2104 2125 2945 2965 2945
524
- % 4A48 4A48 630B 738D 734C 62CA 5269 4A48 4207 39E7 2124 0882 0020 0020 0041 0041
525
- % 0041 0041 0041 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020
526
- % 0020 0020 0020 0020 0020 0041 0884 2167 52AC 738F 7BF0 6B6F 5AEC 4A6A 31E8 29A7
527
- % 29A7 31C7 31C7 2986 18E4 10A3 18E4 3186 39E7 39A6 2125 2104 2104 18E3 18C3 10A2
528
- % 39C6 4207 5268 5289 5289 5268 4227 39E7 39C6 31C6 2124 10A3 0041 0041 0841 0041
529
- % 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020
530
- % 0020 0020 0020 0020 08A3 2167 2167 29A8 4AAB 632D 6B8F 738F 632D 5ACC 4229 3A08
531
- % 3A09 31A7 2145 2125 18C4 1083 1083 18C3 2124 2924 18C3 10A2 18A2 10A2 0841 0020
532
- % 2144 2944 3185 3185 3185 31A5 3185 2965 2144 18E3 10A2 0862 0020 0020 0020 0020
533
- % 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020
534
- % 0861 0862 10E4 1905 2987 424A 52CC 5AEC 5AEC 52AC 52AB 52CB 4A8B 424A 3A08 31C7
535
- % 31A7 2966 1904 10C3 1083 0862 0862 0862 18C3 18E3 10A2 0841 10A2 18E3 1061 1081
536
- % 10C2 18E3 2124 2964 2985 2964 2965 41E6 5248 39C6 2103 0040 0020 0020 0020 0020
537
- % 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0041 10A3
538
- % 2987 31C8 424A 424A 426A 5AEC 5ACC 5AEC 5ACC 528B 4229 3A08 31C7 2986 2966 2966
539
- % 2105 10C3 0882 0841 0841 0041 0020 0020 0861 10A2 18E3 1082 1082 10A2 1082 1082
540
- % 18C2 2103 2124 2964 3185 2944 39E6 5268 5AA8 4A47 2964 0841 0020 0020 0020 0020
541
- % 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0040 0020 0020 0841 10C4 1925
542
- % 2166 39E8 424A 424A 424A 4A6B 52AB 528A 4229 39E8 31C7 2966 2125 1904 2125 2145
543
- % 10A3 0862 0020 0020 0020 0020 0020 0020 0020 0841 0841 0841 0841 0021 0020 0020