diff options
Diffstat (limited to 'apps/plugins')
88 files changed, 19624 insertions, 0 deletions
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index 73771713bd..74e7fe36d8 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS | |||
@@ -19,6 +19,11 @@ chessbox | |||
19 | sudoku | 19 | sudoku |
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | /* For all 2bpp and colour targets */ | ||
23 | #if (LCD_DEPTH >= 2) | ||
24 | zxbox | ||
25 | #endif | ||
26 | |||
22 | /* For all the colour targets and iriver H1x0 */ | 27 | /* For all the colour targets and iriver H1x0 */ |
23 | #if defined(HAVE_LCD_COLOR) || defined(IRIVER_H100_SERIES) | 28 | #if defined(HAVE_LCD_COLOR) || defined(IRIVER_H100_SERIES) |
24 | pacbox | 29 | pacbox |
diff --git a/apps/plugins/viewers.config b/apps/plugins/viewers.config index cc05bbc47d..d9ecd6bbc8 100644 --- a/apps/plugins/viewers.config +++ b/apps/plugins/viewers.config | |||
@@ -23,3 +23,7 @@ wav,viewers/wavplay,60 7F 05 35 3F 00 | |||
23 | bmp,rocks/rockpaint, 01 10 01 10 01 10 | 23 | bmp,rocks/rockpaint, 01 10 01 10 01 10 |
24 | m2v,viewers/mpegplayer,5D 7F 5D 7F 5D 7F | 24 | m2v,viewers/mpegplayer,5D 7F 5D 7F 5D 7F |
25 | iriver,viewers/iriver_flash,2A 7F 41 41 7F 2A | 25 | iriver,viewers/iriver_flash,2A 7F 41 41 7F 2A |
26 | tap,viewers/zxbox,66 52 4A 66 52 4A | ||
27 | sna,viewers/zxbox,66 52 4A 66 52 4A | ||
28 | tzx,viewers/zxbox,66 52 4A 66 52 4A | ||
29 | z80,viewers/zxbox,66 52 4A 66 52 4A | ||
diff --git a/apps/plugins/zxbox.c b/apps/plugins/zxbox.c new file mode 100644 index 0000000000..2f3ce97788 --- /dev/null +++ b/apps/plugins/zxbox.c | |||
@@ -0,0 +1,31 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Overlay loader stub plugin for zxbox on Archos | ||
10 | * | ||
11 | * All files in this archive are subject to the GNU General Public License. | ||
12 | * See the file COPYING in the source tree root for full license agreement. | ||
13 | * | ||
14 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
15 | * KIND, either express or implied. | ||
16 | * | ||
17 | ****************************************************************************/ | ||
18 | #include "plugin.h" | ||
19 | |||
20 | #if MEM <= 8 && !defined(SIMULATOR) | ||
21 | |||
22 | #include "overlay.h" | ||
23 | |||
24 | PLUGIN_HEADER | ||
25 | |||
26 | /* this is the plugin entry point */ | ||
27 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | ||
28 | { | ||
29 | return run_overlay(api, parameter, "/.rockbox/viewers/zxbox.ovl", "ZXBox"); | ||
30 | } | ||
31 | #endif | ||
diff --git a/apps/plugins/zxbox/COPYING b/apps/plugins/zxbox/COPYING new file mode 100644 index 0000000000..b8dec3ec35 --- /dev/null +++ b/apps/plugins/zxbox/COPYING | |||
@@ -0,0 +1,339 @@ | |||
1 | GNU GENERAL PUBLIC LICENSE | ||
2 | Version 2, June 1991 | ||
3 | |||
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||
5 | 675 Mass Ave, Cambridge, MA 02139, USA | ||
6 | Everyone is permitted to copy and distribute verbatim copies | ||
7 | of this license document, but changing it is not allowed. | ||
8 | |||
9 | Preamble | ||
10 | |||
11 | The licenses for most software are designed to take away your | ||
12 | freedom to share and change it. By contrast, the GNU General Public | ||
13 | License is intended to guarantee your freedom to share and change free | ||
14 | software--to make sure the software is free for all its users. This | ||
15 | General Public License applies to most of the Free Software | ||
16 | Foundation's software and to any other program whose authors commit to | ||
17 | using it. (Some other Free Software Foundation software is covered by | ||
18 | the GNU Library General Public License instead.) You can apply it to | ||
19 | your programs, too. | ||
20 | |||
21 | When we speak of free software, we are referring to freedom, not | ||
22 | price. Our General Public Licenses are designed to make sure that you | ||
23 | have the freedom to distribute copies of free software (and charge for | ||
24 | this service if you wish), that you receive source code or can get it | ||
25 | if you want it, that you can change the software or use pieces of it | ||
26 | in new free programs; and that you know you can do these things. | ||
27 | |||
28 | To protect your rights, we need to make restrictions that forbid | ||
29 | anyone to deny you these rights or to ask you to surrender the rights. | ||
30 | These restrictions translate to certain responsibilities for you if you | ||
31 | distribute copies of the software, or if you modify it. | ||
32 | |||
33 | For example, if you distribute copies of such a program, whether | ||
34 | gratis or for a fee, you must give the recipients all the rights that | ||
35 | you have. You must make sure that they, too, receive or can get the | ||
36 | source code. And you must show them these terms so they know their | ||
37 | rights. | ||
38 | |||
39 | We protect your rights with two steps: (1) copyright the software, and | ||
40 | (2) offer you this license which gives you legal permission to copy, | ||
41 | distribute and/or modify the software. | ||
42 | |||
43 | Also, for each author's protection and ours, we want to make certain | ||
44 | that everyone understands that there is no warranty for this free | ||
45 | software. If the software is modified by someone else and passed on, we | ||
46 | want its recipients to know that what they have is not the original, so | ||
47 | that any problems introduced by others will not reflect on the original | ||
48 | authors' reputations. | ||
49 | |||
50 | Finally, any free program is threatened constantly by software | ||
51 | patents. We wish to avoid the danger that redistributors of a free | ||
52 | program will individually obtain patent licenses, in effect making the | ||
53 | program proprietary. To prevent this, we have made it clear that any | ||
54 | patent must be licensed for everyone's free use or not licensed at all. | ||
55 | |||
56 | The precise terms and conditions for copying, distribution and | ||
57 | modification follow. | ||
58 | |||
59 | GNU GENERAL PUBLIC LICENSE | ||
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||
61 | |||
62 | 0. This License applies to any program or other work which contains | ||
63 | a notice placed by the copyright holder saying it may be distributed | ||
64 | under the terms of this General Public License. The "Program", below, | ||
65 | refers to any such program or work, and a "work based on the Program" | ||
66 | means either the Program or any derivative work under copyright law: | ||
67 | that is to say, a work containing the Program or a portion of it, | ||
68 | either verbatim or with modifications and/or translated into another | ||
69 | language. (Hereinafter, translation is included without limitation in | ||
70 | the term "modification".) Each licensee is addressed as "you". | ||
71 | |||
72 | Activities other than copying, distribution and modification are not | ||
73 | covered by this License; they are outside its scope. The act of | ||
74 | running the Program is not restricted, and the output from the Program | ||
75 | is covered only if its contents constitute a work based on the | ||
76 | Program (independent of having been made by running the Program). | ||
77 | Whether that is true depends on what the Program does. | ||
78 | |||
79 | 1. You may copy and distribute verbatim copies of the Program's | ||
80 | source code as you receive it, in any medium, provided that you | ||
81 | conspicuously and appropriately publish on each copy an appropriate | ||
82 | copyright notice and disclaimer of warranty; keep intact all the | ||
83 | notices that refer to this License and to the absence of any warranty; | ||
84 | and give any other recipients of the Program a copy of this License | ||
85 | along with the Program. | ||
86 | |||
87 | You may charge a fee for the physical act of transferring a copy, and | ||
88 | you may at your option offer warranty protection in exchange for a fee. | ||
89 | |||
90 | 2. You may modify your copy or copies of the Program or any portion | ||
91 | of it, thus forming a work based on the Program, and copy and | ||
92 | distribute such modifications or work under the terms of Section 1 | ||
93 | above, provided that you also meet all of these conditions: | ||
94 | |||
95 | a) You must cause the modified files to carry prominent notices | ||
96 | stating that you changed the files and the date of any change. | ||
97 | |||
98 | b) You must cause any work that you distribute or publish, that in | ||
99 | whole or in part contains or is derived from the Program or any | ||
100 | part thereof, to be licensed as a whole at no charge to all third | ||
101 | parties under the terms of this License. | ||
102 | |||
103 | c) If the modified program normally reads commands interactively | ||
104 | when run, you must cause it, when started running for such | ||
105 | interactive use in the most ordinary way, to print or display an | ||
106 | announcement including an appropriate copyright notice and a | ||
107 | notice that there is no warranty (or else, saying that you provide | ||
108 | a warranty) and that users may redistribute the program under | ||
109 | these conditions, and telling the user how to view a copy of this | ||
110 | License. (Exception: if the Program itself is interactive but | ||
111 | does not normally print such an announcement, your work based on | ||
112 | the Program is not required to print an announcement.) | ||
113 | |||
114 | These requirements apply to the modified work as a whole. If | ||
115 | identifiable sections of that work are not derived from the Program, | ||
116 | and can be reasonably considered independent and separate works in | ||
117 | themselves, then this License, and its terms, do not apply to those | ||
118 | sections when you distribute them as separate works. But when you | ||
119 | distribute the same sections as part of a whole which is a work based | ||
120 | on the Program, the distribution of the whole must be on the terms of | ||
121 | this License, whose permissions for other licensees extend to the | ||
122 | entire whole, and thus to each and every part regardless of who wrote it. | ||
123 | |||
124 | Thus, it is not the intent of this section to claim rights or contest | ||
125 | your rights to work written entirely by you; rather, the intent is to | ||
126 | exercise the right to control the distribution of derivative or | ||
127 | collective works based on the Program. | ||
128 | |||
129 | In addition, mere aggregation of another work not based on the Program | ||
130 | with the Program (or with a work based on the Program) on a volume of | ||
131 | a storage or distribution medium does not bring the other work under | ||
132 | the scope of this License. | ||
133 | |||
134 | 3. You may copy and distribute the Program (or a work based on it, | ||
135 | under Section 2) in object code or executable form under the terms of | ||
136 | Sections 1 and 2 above provided that you also do one of the following: | ||
137 | |||
138 | a) Accompany it with the complete corresponding machine-readable | ||
139 | source code, which must be distributed under the terms of Sections | ||
140 | 1 and 2 above on a medium customarily used for software interchange; or, | ||
141 | |||
142 | b) Accompany it with a written offer, valid for at least three | ||
143 | years, to give any third party, for a charge no more than your | ||
144 | cost of physically performing source distribution, a complete | ||
145 | machine-readable copy of the corresponding source code, to be | ||
146 | distributed under the terms of Sections 1 and 2 above on a medium | ||
147 | customarily used for software interchange; or, | ||
148 | |||
149 | c) Accompany it with the information you received as to the offer | ||
150 | to distribute corresponding source code. (This alternative is | ||
151 | allowed only for noncommercial distribution and only if you | ||
152 | received the program in object code or executable form with such | ||
153 | an offer, in accord with Subsection b above.) | ||
154 | |||
155 | The source code for a work means the preferred form of the work for | ||
156 | making modifications to it. For an executable work, complete source | ||
157 | code means all the source code for all modules it contains, plus any | ||
158 | associated interface definition files, plus the scripts used to | ||
159 | control compilation and installation of the executable. However, as a | ||
160 | special exception, the source code distributed need not include | ||
161 | anything that is normally distributed (in either source or binary | ||
162 | form) with the major components (compiler, kernel, and so on) of the | ||
163 | operating system on which the executable runs, unless that component | ||
164 | itself accompanies the executable. | ||
165 | |||
166 | If distribution of executable or object code is made by offering | ||
167 | access to copy from a designated place, then offering equivalent | ||
168 | access to copy the source code from the same place counts as | ||
169 | distribution of the source code, even though third parties are not | ||
170 | compelled to copy the source along with the object code. | ||
171 | |||
172 | 4. You may not copy, modify, sublicense, or distribute the Program | ||
173 | except as expressly provided under this License. Any attempt | ||
174 | otherwise to copy, modify, sublicense or distribute the Program is | ||
175 | void, and will automatically terminate your rights under this License. | ||
176 | However, parties who have received copies, or rights, from you under | ||
177 | this License will not have their licenses terminated so long as such | ||
178 | parties remain in full compliance. | ||
179 | |||
180 | 5. You are not required to accept this License, since you have not | ||
181 | signed it. However, nothing else grants you permission to modify or | ||
182 | distribute the Program or its derivative works. These actions are | ||
183 | prohibited by law if you do not accept this License. Therefore, by | ||
184 | modifying or distributing the Program (or any work based on the | ||
185 | Program), you indicate your acceptance of this License to do so, and | ||
186 | all its terms and conditions for copying, distributing or modifying | ||
187 | the Program or works based on it. | ||
188 | |||
189 | 6. Each time you redistribute the Program (or any work based on the | ||
190 | Program), the recipient automatically receives a license from the | ||
191 | original licensor to copy, distribute or modify the Program subject to | ||
192 | these terms and conditions. You may not impose any further | ||
193 | restrictions on the recipients' exercise of the rights granted herein. | ||
194 | You are not responsible for enforcing compliance by third parties to | ||
195 | this License. | ||
196 | |||
197 | 7. If, as a consequence of a court judgment or allegation of patent | ||
198 | infringement or for any other reason (not limited to patent issues), | ||
199 | conditions are imposed on you (whether by court order, agreement or | ||
200 | otherwise) that contradict the conditions of this License, they do not | ||
201 | excuse you from the conditions of this License. If you cannot | ||
202 | distribute so as to satisfy simultaneously your obligations under this | ||
203 | License and any other pertinent obligations, then as a consequence you | ||
204 | may not distribute the Program at all. For example, if a patent | ||
205 | license would not permit royalty-free redistribution of the Program by | ||
206 | all those who receive copies directly or indirectly through you, then | ||
207 | the only way you could satisfy both it and this License would be to | ||
208 | refrain entirely from distribution of the Program. | ||
209 | |||
210 | If any portion of this section is held invalid or unenforceable under | ||
211 | any particular circumstance, the balance of the section is intended to | ||
212 | apply and the section as a whole is intended to apply in other | ||
213 | circumstances. | ||
214 | |||
215 | It is not the purpose of this section to induce you to infringe any | ||
216 | patents or other property right claims or to contest validity of any | ||
217 | such claims; this section has the sole purpose of protecting the | ||
218 | integrity of the free software distribution system, which is | ||
219 | implemented by public license practices. Many people have made | ||
220 | generous contributions to the wide range of software distributed | ||
221 | through that system in reliance on consistent application of that | ||
222 | system; it is up to the author/donor to decide if he or she is willing | ||
223 | to distribute software through any other system and a licensee cannot | ||
224 | impose that choice. | ||
225 | |||
226 | This section is intended to make thoroughly clear what is believed to | ||
227 | be a consequence of the rest of this License. | ||
228 | |||
229 | 8. If the distribution and/or use of the Program is restricted in | ||
230 | certain countries either by patents or by copyrighted interfaces, the | ||
231 | original copyright holder who places the Program under this License | ||
232 | may add an explicit geographical distribution limitation excluding | ||
233 | those countries, so that distribution is permitted only in or among | ||
234 | countries not thus excluded. In such case, this License incorporates | ||
235 | the limitation as if written in the body of this License. | ||
236 | |||
237 | 9. The Free Software Foundation may publish revised and/or new versions | ||
238 | of the General Public License from time to time. Such new versions will | ||
239 | be similar in spirit to the present version, but may differ in detail to | ||
240 | address new problems or concerns. | ||
241 | |||
242 | Each version is given a distinguishing version number. If the Program | ||
243 | specifies a version number of this License which applies to it and "any | ||
244 | later version", you have the option of following the terms and conditions | ||
245 | either of that version or of any later version published by the Free | ||
246 | Software Foundation. If the Program does not specify a version number of | ||
247 | this License, you may choose any version ever published by the Free Software | ||
248 | Foundation. | ||
249 | |||
250 | 10. If you wish to incorporate parts of the Program into other free | ||
251 | programs whose distribution conditions are different, write to the author | ||
252 | to ask for permission. For software which is copyrighted by the Free | ||
253 | Software Foundation, write to the Free Software Foundation; we sometimes | ||
254 | make exceptions for this. Our decision will be guided by the two goals | ||
255 | of preserving the free status of all derivatives of our free software and | ||
256 | of promoting the sharing and reuse of software generally. | ||
257 | |||
258 | NO WARRANTY | ||
259 | |||
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | ||
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | ||
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | ||
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | ||
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | ||
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | ||
268 | REPAIR OR CORRECTION. | ||
269 | |||
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | ||
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | ||
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | ||
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | ||
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | ||
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||
278 | POSSIBILITY OF SUCH DAMAGES. | ||
279 | |||
280 | END OF TERMS AND CONDITIONS | ||
281 | |||
282 | How to Apply These Terms to Your New Programs | ||
283 | |||
284 | If you develop a new program, and you want it to be of the greatest | ||
285 | possible use to the public, the best way to achieve this is to make it | ||
286 | free software which everyone can redistribute and change under these terms. | ||
287 | |||
288 | To do so, attach the following notices to the program. It is safest | ||
289 | to attach them to the start of each source file to most effectively | ||
290 | convey the exclusion of warranty; and each file should have at least | ||
291 | the "copyright" line and a pointer to where the full notice is found. | ||
292 | |||
293 | <one line to give the program's name and a brief idea of what it does.> | ||
294 | Copyright (C) 19yy <name of author> | ||
295 | |||
296 | This program is free software; you can redistribute it and/or modify | ||
297 | it under the terms of the GNU General Public License as published by | ||
298 | the Free Software Foundation; either version 2 of the License, or | ||
299 | (at your option) any later version. | ||
300 | |||
301 | This program is distributed in the hope that it will be useful, | ||
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
304 | GNU General Public License for more details. | ||
305 | |||
306 | You should have received a copy of the GNU General Public License | ||
307 | along with this program; if not, write to the Free Software | ||
308 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
309 | |||
310 | Also add information on how to contact you by electronic and paper mail. | ||
311 | |||
312 | If the program is interactive, make it output a short notice like this | ||
313 | when it starts in an interactive mode: | ||
314 | |||
315 | Gnomovision version 69, Copyright (C) 19yy name of author | ||
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||
317 | This is free software, and you are welcome to redistribute it | ||
318 | under certain conditions; type `show c' for details. | ||
319 | |||
320 | The hypothetical commands `show w' and `show c' should show the appropriate | ||
321 | parts of the General Public License. Of course, the commands you use may | ||
322 | be called something other than `show w' and `show c'; they could even be | ||
323 | mouse-clicks or menu items--whatever suits your program. | ||
324 | |||
325 | You should also get your employer (if you work as a programmer) or your | ||
326 | school, if any, to sign a "copyright disclaimer" for the program, if | ||
327 | necessary. Here is a sample; alter the names: | ||
328 | |||
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program | ||
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. | ||
331 | |||
332 | <signature of Ty Coon>, 1 April 1989 | ||
333 | Ty Coon, President of Vice | ||
334 | |||
335 | This General Public License does not permit incorporating your program into | ||
336 | proprietary programs. If your program is a subroutine library, you may | ||
337 | consider it more useful to permit linking proprietary applications with the | ||
338 | library. If this is what you want to do, use the GNU Library General | ||
339 | Public License instead of this License. | ||
diff --git a/apps/plugins/zxbox/ChangeLog b/apps/plugins/zxbox/ChangeLog new file mode 100644 index 0000000000..00b2b70ebe --- /dev/null +++ b/apps/plugins/zxbox/ChangeLog | |||
@@ -0,0 +1,193 @@ | |||
1 | 04.09.2006 code cleanup; now using IRAM correctly (i hope) | ||
2 | |||
3 | 31.08.2006 far better sound, volume option is working now | ||
4 | |||
5 | 29.08.2006 predefined keymaps, menu reworking, volume settings | ||
6 | |||
7 | 28.08.2006 more options : frame-skipping, sound on/off, toggle 'fast' mode | ||
8 | 28.08.2006 output actual speed of emulation in percent rather than number of rendered frames | ||
9 | 28.08.2006 timing implementation (no >100 % speed in sims) | ||
10 | |||
11 | |||
12 | 15.08.2006 output FPS on screen when in buffered and into logf when in unbuffered mode (grayscale) | ||
13 | |||
14 | |||
15 | 15.08.2006 buffered mode when in grayscale mode | ||
16 | |||
17 | 11.08.2006 support for grayscale lib | ||
18 | |||
19 | 05/2006 - edited by Anton Romanov for | ||
20 | RockBox - http://www.rockbox.org | ||
21 | with the help of Dave Chapman and Szeredi Miklos | ||
22 | |||
23 | |||
24 | 98/05/18 Version 0.94 released | ||
25 | =============================== | ||
26 | |||
27 | 98/05/18 Updated the man page (a more complete man-page is still needed!) | ||
28 | 98/05/15 Some bugs fixed | ||
29 | |||
30 | 98/05/14 Version 0.93.4 released | ||
31 | -------------------------------- | ||
32 | |||
33 | 98/05/14 Small additions: | ||
34 | - Keyboard matrix is emulated (only 1 level, I hope this is enough) | ||
35 | - "color refreshing" (maybe some other aplications could do it!) | ||
36 | - Keyboard configuration is now fully implemented | ||
37 | |||
38 | 98/05/11 Added DOS timer support with Allegro library | ||
39 | |||
40 | 98/05/08 Version 0.93.3 released | ||
41 | --------------------------------- | ||
42 | |||
43 | 98/05/08 Created README.Z80 to describe how to use Z80 emulation | ||
44 | 98/05/06 Small new features + bugfixes | ||
45 | - Function keys for commonly used functions | ||
46 | - Keyboard config: (extended, spectrum, compat) and (shifted, raw) | ||
47 | are now working. No custom keyboard or joystick yet | ||
48 | - Small modifications to make z80 emulation separate | ||
49 | |||
50 | 98/04/30 Version 0.93.2 released | ||
51 | --------------------------------- | ||
52 | |||
53 | 98/04/30 I've removed the BROKEN_VGAKEYBOARD part from vgakey.c. | ||
54 | I hope nobody's using SVGALIB version smaller than 1.2.11. | ||
55 | |||
56 | 98/04/29 Some small new features: (see example.cfg for a complete list) | ||
57 | - different icon when the emulator is paused | ||
58 | - optional private colormap | ||
59 | - configurable colours (grayscale looks better on | ||
60 | monochrome displays) | ||
61 | - filetype can be given on the command line (tapefiles too) | ||
62 | - optional immediate loading of tapes (-load-immed) | ||
63 | |||
64 | 98/04/27 Added configurability to spectemu: | ||
65 | - global config file (($prefix)/share/spectemu/spectemu.cfg) | ||
66 | - user's config file (~/.spectemurc) | ||
67 | - X resource database | ||
68 | - command line | ||
69 | |||
70 | 98/04/23 Mode 320x240 is used in vgaspect (if available) | ||
71 | |||
72 | 98/04/22 Version 0.93.1 released | ||
73 | --------------------------------- | ||
74 | |||
75 | 98/04/21 Handle "extra" ascii keys: []{}|\~ | ||
76 | 98/04/19 Added Spectrum keyboard picture, which shows pressed keys, and | ||
77 | keys can be pressed with mouse. | ||
78 | 98/04/16 Rewrite keyboard handling: | ||
79 | - Fixes keyboard bug in X (key remained pressed) | ||
80 | - Better configurability: spectrum key definitions are in spkey.c | ||
81 | instead of xkey.c and vgakey.c | ||
82 | |||
83 | 98/04/07 Added readline support by Christian Sievers <sievers@cip.rz.tu-bs.de> | ||
84 | |||
85 | 98/03/24 Version 0.92 released | ||
86 | =============================== | ||
87 | |||
88 | 98/03/23 Last minute bugfixes | ||
89 | |||
90 | 98/03/20 Version 0.92p3 released | ||
91 | 98/03/20 Eliminated all sorts of minor bugs | ||
92 | 98/03/19 Implement LOOP/CALL/RETURN blocks in TZX handling | ||
93 | 98/03/17 Fixed (hopefully all) bugs in TZX handling: | ||
94 | - There must be a 1ms pause at end of tape. | ||
95 | - Pausing after data blocks fixed. | ||
96 | - Made tape I/O timing ultra precise (e.g. see Flashpoint) | ||
97 | |||
98 | 98/03/14 Fixed small bug in quick load | ||
99 | 98/03/13 Sound of tape is now fixed (not perfect, but good enough) | ||
100 | Created simple man page | ||
101 | |||
102 | 98/03/11 Version 0.92pre2 released | ||
103 | 98/03/10 Fixed quick load of tapefiles | ||
104 | 98/03/10 Fixed resize bugs | ||
105 | |||
106 | 98/03/09 Version 0.92pre1 released | ||
107 | 98/03/08 C-version now handles bits 3 and 5 of the Flag register | ||
108 | (I hope I didn't break anything with this). | ||
109 | 98/03/08 Wrote 'tapeout' utility to save tapefiles to real tape (via | ||
110 | soundcard). | ||
111 | |||
112 | 98/03/06 Implemented emulator pause. | ||
113 | 98/03/06 Added ability to display spectrum keyboard layout on text | ||
114 | console (Radovan.Garabik@fmph.uniba.sk). | ||
115 | |||
116 | 98/03/05 Rewrite of snapshot handeling: | ||
117 | - All versions of Z80 snapshots can now be loaded. | ||
118 | - Loading and saving of SNA snapshot format is supported. | ||
119 | - Quick loading and saving of temporary snapshot. | ||
120 | |||
121 | 98/03/03 Rewrite of tapefile handeling: | ||
122 | - Support for most TZX blocks (recognise length of all v1.11 | ||
123 | blocks) | ||
124 | - SPT tapefiles are no longer supported | ||
125 | - Added quick loading of tapefiles | ||
126 | - Timing in tape emulation is very exact now, but this makes | ||
127 | tape sound ugly (this will be fixed). | ||
128 | |||
129 | 98/01/28 Version 0.91a released | ||
130 | 98/01/26 Added detection for underlines in asm names to configure | ||
131 | |||
132 | 98/01/12 Version 0.91 released | ||
133 | =============================== | ||
134 | |||
135 | 98/01/08 Changes to configure to detect X libraries better | ||
136 | |||
137 | 97/11/29 Use XSetWMProperties instead of XmbSetWMProperties | ||
138 | 97/11/26 Created icon for xspect | ||
139 | 97/11/20 IO and memory timing are improved (ULA / CPU clash) | ||
140 | |||
141 | 97/11/18 Fixed 0xfe port problems | ||
142 | 97/11/17 Input from unused ports (others than 0xFE) result in 0xFF, not 0x00 | ||
143 | |||
144 | 97/11/12 8000 sample/sec sound on SUN | ||
145 | 97/11/12 Fixed screen bugs | ||
146 | |||
147 | 97/11/11 Window resizing in X (thanks to Egmont) | ||
148 | 97/11/11 Fixed FocusIn/FocusOut bug (twm, olwm, ...) | ||
149 | 97/11/11 Small changes and bugfixes | ||
150 | |||
151 | 97/11/09 Sound on SUN (sample rate 16000, but 8000 is coming for older | ||
152 | SUNs. | ||
153 | |||
154 | 97/10/26 'Interrupted system call' is not an error on sound device | ||
155 | 97/10/26 Fixed screen scramble bug in console background running | ||
156 | |||
157 | 97/10/20 Version 0.90pre1 released | ||
158 | |||
159 | 97/10/20 Tested on the following Machines/Operating systems/Compilers: | ||
160 | o Intel/Linux/gcc (assembly) | ||
161 | o Sparc/Solaris/gcc (C) | ||
162 | o Alpha/OSF1/cc (C) | ||
163 | o Sequent(i486)/Dynix-Ptx/gcc (assembly) | ||
164 | |||
165 | 97/10/20 Automatic configuration with 'configure' script | ||
166 | 97/10/20 Bugfixes and cleanups | ||
167 | 97/10/20 Experimental DOS support with DJGPP (timer missing) | ||
168 | 97/10/20 Added emulation in C | ||
169 | 97/05/22 Background running for svgalib added (Needs svgalib >= 1.2.11) | ||
170 | |||
171 | 97/04/17 Version 0.84 released | ||
172 | =============================== | ||
173 | |||
174 | 97/04/17 Added SLL to the emulated instructions | ||
175 | |||
176 | 97/04/12 The following changes were inspired by Egmont Koblinger: | ||
177 | - Resize bug fixed | ||
178 | - Implemented tape file pause | ||
179 | - Implemented saving to tape file | ||
180 | - Snapshot loading from command line | ||
181 | - Other small changes | ||
182 | |||
183 | 97/04/03 Bug fix in tape handling (thanks to Egmont Koblinger) | ||
184 | 97/03/26 Speeded up border drawing in X | ||
185 | 97/03/26 Added .TAP support | ||
186 | |||
187 | 97/03/10 Version 0.81 released | ||
188 | =============================== | ||
189 | |||
190 | 97/03/10 Bug fixes and minor changes (thanks to Tamas Meszaros) | ||
191 | |||
192 | 97/01/21 Version 0.8: First public release | ||
193 | =========================================== | ||
diff --git a/apps/plugins/zxbox/Makefile b/apps/plugins/zxbox/Makefile new file mode 100644 index 0000000000..d9f75d44c5 --- /dev/null +++ b/apps/plugins/zxbox/Makefile | |||
@@ -0,0 +1,89 @@ | |||
1 | # __________ __ ___. | ||
2 | # Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
3 | # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
4 | # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
5 | # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
6 | # \/ \/ \/ \/ \/ | ||
7 | # | ||
8 | |||
9 | INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \ | ||
10 | -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR) -I. $(TARGET_INC) | ||
11 | CFLAGS = $(INCLUDES) $(GCCOPTS) -O2 $(TARGET) $(EXTRA_DEFINES) \ | ||
12 | -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN | ||
13 | |||
14 | |||
15 | ifdef APPEXTRA | ||
16 | INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA))) | ||
17 | endif | ||
18 | |||
19 | LINKFILE := $(OBJDIR)/link.lds | ||
20 | DEPFILE = $(OBJDIR)/dep-zxbox | ||
21 | |||
22 | # This sets up 'SRC' based on the files mentioned in SOURCES | ||
23 | include $(TOOLSDIR)/makesrc.inc | ||
24 | |||
25 | SOURCES = $(SRC) | ||
26 | OBJS2 := $(SRC:%.c=$(OBJDIR)/%.o) | ||
27 | OBJS = $(patsubst %.S, $(OBJDIR)/%.o, $(OBJS2)) | ||
28 | DIRS = . | ||
29 | |||
30 | ifndef SIMVER | ||
31 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | ||
32 | LDS := archos.lds | ||
33 | OUTPUT = $(OUTDIR)/zxbox.ovl | ||
34 | else ## iRiver/iPod/... targets | ||
35 | LDS := ../plugin.lds | ||
36 | OUTPUT = $(OUTDIR)/zxbox.rock | ||
37 | endif | ||
38 | else ## simulators | ||
39 | OUTPUT = $(OUTDIR)/zxbox.rock | ||
40 | endif | ||
41 | |||
42 | all: $(OUTPUT) | ||
43 | |||
44 | ifndef SIMVER | ||
45 | $(OBJDIR)/zxbox.elf: $(OBJS) $(LINKFILE) | ||
46 | @echo "LD "`basename $@` | ||
47 | @$(CC) $(GCCOPTS) -O -nostdlib -o $@ $(OBJS) -L$(BUILDDIR) -lplugin -lgcc \ | ||
48 | -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/zxbox.map | ||
49 | |||
50 | $(OUTPUT): $(OBJDIR)/zxbox.elf | ||
51 | @echo "OBJCOPY "`basename $@` | ||
52 | @$(OC) -O binary $< $@ | ||
53 | else | ||
54 | |||
55 | ifeq ($(SIMVER), sdl) | ||
56 | ################################################### | ||
57 | # This is the SDL simulator version | ||
58 | |||
59 | $(OUTPUT): $(OBJS) | ||
60 | @echo "LD $<" | ||
61 | @$(CC) $(CFLAGS) -shared $(OBJS) -L$(BUILDDIR) -lplugin -o $@ | ||
62 | ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN) | ||
63 | # 'x' must be kept or you'll have "Win32 error 5" | ||
64 | # $ fgrep 5 /usr/include/w32api/winerror.h | head -1 | ||
65 | # #define ERROR_ACCESS_DENIED 5L | ||
66 | else | ||
67 | @chmod -x $@ | ||
68 | endif | ||
69 | |||
70 | endif | ||
71 | endif # end of simulator section | ||
72 | |||
73 | |||
74 | include $(TOOLSDIR)/make.inc | ||
75 | |||
76 | # MEMORYSIZE should be passed on to this makefile with the chosen memory size | ||
77 | # given in number of MB | ||
78 | $(LINKFILE): $(LDS) | ||
79 | @echo "build "`basename $@` | ||
80 | @cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) \ | ||
81 | $(DEFINES) -E -P - >$@ | ||
82 | |||
83 | clean: | ||
84 | @echo "cleaning zxbox" | ||
85 | @rm -rf $(OBJDIR)/zxbox | ||
86 | @rm -f $(OBJDIR)/zxbox.* $(DEPFILE) | ||
87 | |||
88 | -include $(DEPFILE) | ||
89 | |||
diff --git a/apps/plugins/zxbox/README b/apps/plugins/zxbox/README new file mode 100644 index 0000000000..9169840276 --- /dev/null +++ b/apps/plugins/zxbox/README | |||
@@ -0,0 +1,770 @@ | |||
1 | |||
2 | * * * * * * * * * * * * * * * | ||
3 | * * | ||
4 | * S P E C T E M U * | ||
5 | * * | ||
6 | * Version 0.94 * | ||
7 | * * | ||
8 | * * * * * * * * * * * * * * * | ||
9 | |||
10 | |||
11 | This package contains a 48k ZX-Spectrum emulator for Linux and other | ||
12 | UNIX operating systems, with full Z80 instruction set, comprehensive | ||
13 | screen, sound and tape emulation, and snapshot file saving and | ||
14 | loading. It can run on a Linux console, or in an X11 window. | ||
15 | |||
16 | The program is free software and is copyrighted under the GNU General | ||
17 | Public License. It comes with absolutely no warranty. See the file | ||
18 | COPYING for details. | ||
19 | |||
20 | Written by Miklos Szeredi | ||
21 | Email: mszeredi@inf.bme.hu | ||
22 | |||
23 | It can be downloaded by FTP from: | ||
24 | tsx-11.mit.edu:/pub/linux/ALPHA/spectemu/spectemu-0.94.tar.gz | ||
25 | or | ||
26 | sunsite.unc.edu:/pub/Linux/system/emulators/zx/spectemu-0.94.tar.gz | ||
27 | |||
28 | For news and updates have a look at the Spectemu Page: | ||
29 | http://www.inf.bme.hu/~mszeredi/spectemu/ | ||
30 | |||
31 | |||
32 | You can also join a mailing list (at the Spectemu Page), to receive a | ||
33 | notice when new versions of spectemu are available. | ||
34 | |||
35 | |||
36 | Table of contents | ||
37 | ================= | ||
38 | |||
39 | 1. Requirements | ||
40 | |||
41 | 2. Recommended | ||
42 | |||
43 | 3. Features | ||
44 | |||
45 | 4. Drawbacks | ||
46 | |||
47 | 5. Compiling and installation | ||
48 | |||
49 | 6. Using the emulator | ||
50 | |||
51 | 6.1 Command line arguments and configuration files (NEW) | ||
52 | |||
53 | 6.2 Using the Spectrum keyboard | ||
54 | |||
55 | 6.3 Keys that control the emulator | ||
56 | |||
57 | 6.4 Effects of changing frame frequency and sound buffer size | ||
58 | |||
59 | 7. Where can I get ZX Spectrum games for this emulator | ||
60 | |||
61 | 8. Tape files | ||
62 | |||
63 | 8.1 Loading a tape file | ||
64 | |||
65 | 8.2 Quick loading of tape files | ||
66 | |||
67 | 8.3 Saving to a tape file | ||
68 | |||
69 | 8.4 Saving a tape file to real tape | ||
70 | |||
71 | 8.5 Making a tape file from a real tape | ||
72 | |||
73 | 9. Bug reports | ||
74 | |||
75 | 10. Credits | ||
76 | |||
77 | |||
78 | 1. Requirements | ||
79 | =============== | ||
80 | |||
81 | Linux or other UNIX OS. | ||
82 | Color X11 server (depths 8, 16 and 32 bits are supported) | ||
83 | and/or | ||
84 | SVGALIB console graphics library on Linux. | ||
85 | |||
86 | 2. Recommended | ||
87 | ============== | ||
88 | |||
89 | A sound-card on Linux for wonderful spectrum 1-bit sound. And well, a | ||
90 | fast enough processor... (Especially for the X11 version.) | ||
91 | |||
92 | 3. Features | ||
93 | =========== | ||
94 | |||
95 | - Very fast because of assembly code in emulation (only on Intel | ||
96 | processors). | ||
97 | |||
98 | - Emulation also in C, which is slower, but supports any processor. | ||
99 | |||
100 | - X support (with MITSHM if available, optionally double size window) | ||
101 | |||
102 | - Linux console graphics (with SVGALIB) | ||
103 | |||
104 | - Sound support (through Linux kernel sound-card driver, | ||
105 | or SUN sound drivers) | ||
106 | |||
107 | - Snapshot saving and loading (.Z80 and .SNA format) | ||
108 | |||
109 | - Tape emulation: loading from tape files (.TAP and .TZX format) | ||
110 | |||
111 | - Optional quick loading of tapes. | ||
112 | |||
113 | - Saving to tape files. | ||
114 | |||
115 | - Separate utility to save tape files to real tape | ||
116 | |||
117 | - Configurable with config files and from command line | ||
118 | |||
119 | 4. Drawbacks | ||
120 | ============ | ||
121 | |||
122 | - Poor user interface | ||
123 | |||
124 | See the file TODO for a list of things which still need to be done (Maybe | ||
125 | by YOU) | ||
126 | |||
127 | 5. Compiling and installation | ||
128 | ============================= | ||
129 | |||
130 | To install the precompiled Linux executables just run 'make install' | ||
131 | as root. | ||
132 | |||
133 | To recompile the programs on other platforms first type | ||
134 | |||
135 | ./configure | ||
136 | |||
137 | This tries to determine the system type and parameters. Probably you | ||
138 | won't have to give any options to configure, but here is the list of | ||
139 | the most important options: | ||
140 | |||
141 | --help Print a full list of options | ||
142 | |||
143 | --prefix=PREFIX Install files under PREFIX (default is /usr/local) | ||
144 | Executables go under PREFIX/bin, ... | ||
145 | |||
146 | --without-readline Do not use the readline library (default is to | ||
147 | use it if it's available on your system) | ||
148 | |||
149 | --without-i386asm Do not use the Intel assembly code (default is | ||
150 | to use it, if your system is Intel based) | ||
151 | |||
152 | You may want to have a look at the produced `Makefile' and `config.h'. | ||
153 | Then just type | ||
154 | |||
155 | make clean | ||
156 | make | ||
157 | |||
158 | Then to install the program, login as root, and run | ||
159 | |||
160 | make install | ||
161 | |||
162 | (If you want to compile on another machine be sure to `make realclean' | ||
163 | before re-configuring and re-making the program!) | ||
164 | |||
165 | At the moment, there are two executable programs for running the emulator: | ||
166 | |||
167 | xspect the X11 version | ||
168 | vgaspect the Linux console version | ||
169 | |||
170 | 'vgaspect' uses the SVGALIB library. If you do not have this installed | ||
171 | on your system 'vgaspect' cannot be started. You _MUST_ have SVGALIB | ||
172 | version 1.2.10 or greater installed, and it is STRONGLY recommended, | ||
173 | that you get version 1.2.11 or later! | ||
174 | |||
175 | SVGALIB is available at: | ||
176 | sunsite.unc.edu:/pub/Linux/libs/graphics/ | ||
177 | |||
178 | If you have SVGALIB version 1.2.11 or later, the emulator can run in | ||
179 | background when you switch virtual consoles. | ||
180 | |||
181 | 6. Using the emulator | ||
182 | ===================== | ||
183 | |||
184 | After starting 'xspect' or 'vgaspect' you should get the '(C) 1982 Sinclair | ||
185 | Research Ltd' message, and after pressing a key, the flashing cursor. If | ||
186 | not, then all I can say, is hard luck to you (if you are ambitious, compile | ||
187 | the programs with debug information, and try to figure out what is causing | ||
188 | the problem). Do not start the emulator processes in the background, the | ||
189 | terminal is needed when loading or saving files. | ||
190 | |||
191 | To load a snapshot immediately after the start of the emulator, you | ||
192 | can enter the name of the snapshot file on the command line. (Also see | ||
193 | section 6.1) | ||
194 | |||
195 | E.g. | ||
196 | |||
197 | xspect snap/chuckie2 | ||
198 | |||
199 | In X you can resize the window. Window size can only be a multiple of | ||
200 | the smallest window size (320x256). Smaller window means faster | ||
201 | emulation, so if emulation doesn't run at full speed, try making the | ||
202 | window smaller. | ||
203 | |||
204 | 6.1 Command line arguments and configuration files | ||
205 | -------------------------------------------------- | ||
206 | |||
207 | You can give options to Spectemu in three different ways: | ||
208 | |||
209 | 1) In a configuration file (either ~/.spectemurc, or | ||
210 | /usr/local/share/spectemu/spectemu.cfg) | ||
211 | |||
212 | 2) With the X Resource Database (.Xdefaults), this applies only to 'xspect' | ||
213 | |||
214 | 3) On the command line | ||
215 | |||
216 | Most of the options are common to all three methods, only the syntax | ||
217 | differs slightly. Here are examples of the different syntax: | ||
218 | |||
219 | Config File: | ||
220 | scale = 1 | ||
221 | private-map = true | ||
222 | sound = false | ||
223 | color-type = grayscale | ||
224 | |||
225 | .Xdefaults: | ||
226 | xspect.scale: 1 | ||
227 | xspect.privateMap: true | ||
228 | xspect.sound: false | ||
229 | xspect.colorType: grayscale | ||
230 | |||
231 | Command line: | ||
232 | xspect -scale 1 -private-map -no-sound -color-type grayscale | ||
233 | |||
234 | List of common options: | ||
235 | ~~~~~~~~~~~~~~~~~~~~~~~ | ||
236 | |||
237 | NAME RANGE DEFAULT DESCRIPTION | ||
238 | ---- ----- ------- ----------- | ||
239 | |||
240 | frame-skip 1... 2 The smaller this is, the more | ||
241 | often the screen is updatated | ||
242 | |||
243 | scale 1..4 2 Window size of 'xspect' | ||
244 | |||
245 | private-map yes/no no Use private colormap in 'xspect' | ||
246 | |||
247 | mit-shm yes/no yes Use MIT-SHM extension in X server | ||
248 | if available | ||
249 | |||
250 | vga-mode 320x200 320x240 Resolution to use in 'vgaspect', | ||
251 | 320x240 320x200 is faster (but not so nice) | ||
252 | |||
253 | sound yes/no yes Spectrum sound, if availble | ||
254 | |||
255 | sound-delay 1... 4 The amount of frames (1/50 seconds) | ||
256 | to delay sound. See section 6.4 | ||
257 | |||
258 | sound-device filename (system The name of the sound device | ||
259 | dependent) | ||
260 | |||
261 | sound-sample-rate 4000... ~15625 Sample rate of sound device | ||
262 | |||
263 | sound-autoclose yes/no yes Whether to close sound device when | ||
264 | unused (so other programs can use it) | ||
265 | |||
266 | sound-dsp-setfrag yes/no yes Set this to 'no' if you use PCSND | ||
267 | sound driver | ||
268 | |||
269 | keyboard-type extended extended Specifies the mapping of the keys, | ||
270 | spectrum from the PC keyboard to the spectrum | ||
271 | compat keys. See section 6.2 | ||
272 | custom | ||
273 | |||
274 | cursor-type shifted shifted How to use the arrow keys on the | ||
275 | raw PC keyboard. See section 6.2 | ||
276 | joystick | ||
277 | |||
278 | allow-ascii yes/no yes Interpret other keys on the PC | ||
279 | keyboard. See section 6.2 | ||
280 | |||
281 | true-shift <modif>* alt Modifier to get shifted symbol | ||
282 | as on the PC. | ||
283 | |||
284 | func_shift <modif>* control Modifier to get control functions. | ||
285 | |||
286 | color-type normal normal What type of colors to use. Gray- | ||
287 | grayscale scale looks better on monochrome | ||
288 | custom displays. | ||
289 | |||
290 | pause-on-iconify yes/no no Whether to pause emulator, when it | ||
291 | is iconified ('xspect' only) | ||
292 | |||
293 | vga-pause-bg yes/no no Whether to pasue emulator, when you | ||
294 | switch to a different console | ||
295 | |||
296 | quick-load yes/no no Use built in (quick) loader for | ||
297 | tapefiles. | ||
298 | |||
299 | auto-stop yes/no no Pause tape after each segment when | ||
300 | quick loading. | ||
301 | |||
302 | load-immed yes/no no Load tapefile immediately (as if | ||
303 | you typed LOAD "" / ENTER) | ||
304 | |||
305 | pause yes/no no Pause the emulator on startup | ||
306 | |||
307 | |||
308 | * <modif> can be one of: none, shift, lock, control, alt, | ||
309 | mod2, mod3, mod4, mod5 | ||
310 | |||
311 | Extra command line parameters: | ||
312 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
313 | |||
314 | On the command line you may also use the following options: | ||
315 | |||
316 | -help Prints usage information, and a list of available | ||
317 | options | ||
318 | |||
319 | -version Prints out the version | ||
320 | |||
321 | |||
322 | Also on the command line, a snapshot file and/or a tapefile can be | ||
323 | specified. Spectemu figures out the type of file from the extension. | ||
324 | You can omit the extension, e.g. you have a snapshot file 'snap.z80' | ||
325 | and you start spectemu with 'xspect snap', then it will add the '.z80' | ||
326 | extension. | ||
327 | |||
328 | You can specify what type is the file by preceding it with one of | ||
329 | '-z80', '-sna', '-tap' or '-tzx' options. This is useful for cases, | ||
330 | when the filename does not have an extension (e.g. automatic starting | ||
331 | with the midnight commander). | ||
332 | |||
333 | Extra config file options: | ||
334 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
335 | |||
336 | Color configuration | ||
337 | ''''''''''''''''''' | ||
338 | You can configure the custom colors in the config files (and the X | ||
339 | Resource Database) with: | ||
340 | |||
341 | color[0..15] = R G B | ||
342 | |||
343 | e.g. | ||
344 | |||
345 | color-type = custom | ||
346 | |||
347 | color0 = 10 20 30 | ||
348 | color7 = 40 50 60 | ||
349 | |||
350 | changes the 0-th (black) and the 7-th (white) colors. | ||
351 | |||
352 | Keyboard configuration | ||
353 | '''''''''''''''''''''' | ||
354 | You can set custom key bindings in the config file: | ||
355 | |||
356 | Key_<keysym_name> = K ... | ||
357 | ... | ||
358 | |||
359 | Or in the X resource database: | ||
360 | |||
361 | xspect.keys: <keysym_name> = K ...; ... | ||
362 | |||
363 | |||
364 | The <keysym_name> can be set to any keysym (defined in 'spkey_p.h'). | ||
365 | The K arguments are the spectrum keys to be assigned to the given PC | ||
366 | key. K can be any letter, number (a..z, 0..9) or the following: | ||
367 | |||
368 | none, space, enter, capsshift, symbolshift, | ||
369 | kempston_up, kempston_down, kempston_left, kempston_right, kempston_fire | ||
370 | |||
371 | e.g. | ||
372 | |||
373 | keyboard-type = custom | ||
374 | true-shift = none | ||
375 | |||
376 | Key_Insert = capsshift 9 | ||
377 | Key_Tab = capsshift symbolshift | ||
378 | Key_Shift_R = kempston_fire | ||
379 | Key_Alt_L = symbolshift | ||
380 | Key_Alt_R = symbolshift | ||
381 | |||
382 | or as it would appear in a .Xdefaults file: | ||
383 | |||
384 | xspect.keyboardType: custom | ||
385 | xspect.trueShift: none | ||
386 | |||
387 | xspect.keys: Insert = capsshift 9; \ | ||
388 | Tab = capsshift symbolshift; \ | ||
389 | Shift_R = kempston_fire; \ | ||
390 | Alt_L = symbolshift; Alt_R = symbolshift | ||
391 | |||
392 | 6.2 Using the Spectrum keyboard | ||
393 | ------------------------------- | ||
394 | |||
395 | Those of you that have at some time used a Spectrum know, that the keyboard | ||
396 | of this little computer is something very strange, with a LOT of keywords | ||
397 | and symbols on and around each key. If you have not seen this keyboard (or | ||
398 | have somehow managed to forget some bit of information that is on it) we | ||
399 | produced quite a good copy of it, found in the 'spectkey.gif' file. | ||
400 | |||
401 | If you are using 'xspect' than pressing 'Ctrl-k' brings up the picture | ||
402 | of the spectrum keyboard. You can press keys with the mouse (even more | ||
403 | than one if you like), and it also shows which keys are pressed. (You | ||
404 | can see what the emulator does when, for example you press 'BackSpace' | ||
405 | or a '[' key on the PC keyboard). | ||
406 | |||
407 | The default mapping of the spectrum's keyboard to the PC's is the | ||
408 | following: | ||
409 | |||
410 | The numbers, the letters, Enter and Space are the same. The left Shift on | ||
411 | the PC corresponds to the CAPS SHIFT key of the Spectrum, and the right | ||
412 | Shift corresponds to the SYMBOL SHIFT. This is quite simple and with these | ||
413 | keys you can get all the functionality of the original Spectrum (assuming | ||
414 | of course, you know how). | ||
415 | |||
416 | But... | ||
417 | |||
418 | To make life a bit easier, you can also use the Backspace, the arrow | ||
419 | keys, and the following symbols as on a PC keyboard: ,./;'-=<>?:"_+[]{}\|~ | ||
420 | (unless you turn the 'allow-ascii' option off) | ||
421 | |||
422 | To get a symbol which is written above the numbers on the PC, and not | ||
423 | the function or symbol that is on the Spectrum, press Alt (actually | ||
424 | the value of the 'true-shift' option) instead of Shift. | ||
425 | |||
426 | You can slightly modify the mapping with the 'keyboard-type' and | ||
427 | 'cursor-type' options. Every mapping includes the basic keys (letters, | ||
428 | numbers, Space and Enter). Here are the mappings special to each | ||
429 | keyboard type and cursor type: | ||
430 | |||
431 | PC Key Spectrum Key | ||
432 | ------ ------------ | ||
433 | |||
434 | (Keyboard Types) | ||
435 | |||
436 | extended: (default) | ||
437 | Left Shift -> Caps Shift | ||
438 | Right Shift -> Symbol Shift | ||
439 | Back Space -> Caps Shift + '0' | ||
440 | Escape -> Caps Shift + '1' | ||
441 | |||
442 | spectrum: (spectrum-like layout, useful for some games, e.g. Jumping Jack) | ||
443 | < same as extended, plus: > | ||
444 | Comma (,) -> Symbol Shift | ||
445 | Period (.) -> Space | ||
446 | Semicolon (;) -> Enter | ||
447 | |||
448 | compat: (similar to other emulators' layouts, e.g. Z80, X128, XZX ...) | ||
449 | Shift (both) -> Caps Shift | ||
450 | Alt -> Symbol Shift | ||
451 | Back Space -> Caps Shift + '0' | ||
452 | Escape -> Caps Shift + '1' | ||
453 | |||
454 | custom: | ||
455 | Use key bindings specified in the config file (see section 6.1) | ||
456 | |||
457 | (Cursor Types) | ||
458 | |||
459 | shifted: (default) | ||
460 | Left Arrow -> Caps Shift + '5' | ||
461 | Down Arrow -> Caps Shift + '6' | ||
462 | Up Arrow -> Caps Shift + '7' | ||
463 | Right Arrow -> Caps Shift + '8' | ||
464 | |||
465 | raw: | ||
466 | Left Arrow -> '5' | ||
467 | Down Arrow -> '6' | ||
468 | Up Arrow -> '7' | ||
469 | Right Arrow -> '8' | ||
470 | |||
471 | |||
472 | joystick: | ||
473 | Left Arrow -> Kempston Left | ||
474 | Down Arrow -> Kempston Down | ||
475 | Up Arrow -> Kempston Up | ||
476 | Right Arrow -> Kempston Right | ||
477 | Keypad Ins -> Kempston Fire | ||
478 | Keypad Del -> Kempston Fire | ||
479 | Keypad Home -> Kempston Up + Left | ||
480 | Keypad PgUp -> Kempston Up + Right | ||
481 | Keypad End -> Kempston Down + Left | ||
482 | Keypad PgDn -> Kempston Down + Right | ||
483 | |||
484 | |||
485 | 6.3 Keys that control the emulator | ||
486 | ---------------------------------- | ||
487 | |||
488 | All control keys are produced by pressing the Ctrl key and another key. | ||
489 | |||
490 | Ctrl-c, F10 Quit the emulator immediately | ||
491 | |||
492 | Ctrl-l, F3 Load a snapshot file; you must type the path and | ||
493 | filename on the terminal where you started the emulator, | ||
494 | e.g. 'snap/chuckie2'. The type and extension of the | ||
495 | file is determined automatically (.z80 or .sna). | ||
496 | |||
497 | Ctrl-t, F2 Save the current state of the emulator in a snapshot file. | ||
498 | Format depends on the extension (.z80 or .sna). If no | ||
499 | extension is given, .z80 is appended. | ||
500 | |||
501 | Ctrl-w, Ctrl-F2 Save a snapshot to a temporary file | ||
502 | |||
503 | Ctrl-e, Ctrl-F3 Restore last temporary snapshot saved with 'Ctrl-w' | ||
504 | |||
505 | Ctrl-q, F5 Reset the Spectrum | ||
506 | |||
507 | Ctrl-f Fast mode | ||
508 | |||
509 | Ctrl-n Normal speed mode | ||
510 | |||
511 | Ctrl-b Pause/Unpause emulator (you can do operations like loading | ||
512 | a snapshot file, etc... in paused mode too) | ||
513 | |||
514 | Ctrl-m Toggle sound on/off | ||
515 | |||
516 | Ctrl-h, F1 Print help | ||
517 | |||
518 | Ctrl-k Display (undisplay) keyboard of spectrum. See section 6.2. | ||
519 | |||
520 | Ctrl-p, F4 Play tape. Tape file must be entered on the terminal. | ||
521 | Optionally the starting segment can be entered; | ||
522 | e.g. 'tape/tape1.tap' or 'tape/tape1.tzx 13' | ||
523 | |||
524 | Ctrl-s, F7 Stop tape | ||
525 | |||
526 | Ctrl-y Toggle quick loading | ||
527 | |||
528 | Ctrl-o, F6 Pause and unpause during tapefile playing (restarts the | ||
529 | current segment). | ||
530 | |||
531 | Ctrl-r Record to tape file. See section 8.3. | ||
532 | |||
533 | Ctrl-\, F9 Refresh screen, reset keyboard state and | ||
534 | refresh colors. | ||
535 | |||
536 | Ctrl-j Toggle private colormap mode (only X) | ||
537 | |||
538 | Ctrl-comma Decrease window size (only X) | ||
539 | |||
540 | Ctrl-dot Increase window size (only X) | ||
541 | |||
542 | Ctrl-equals Skip more screen frames | ||
543 | |||
544 | Ctrl-minus Skip less screen frames | ||
545 | |||
546 | Ctrl-] Increase sound buffer size | ||
547 | |||
548 | Ctrl-[ Decrease sound buffer size | ||
549 | |||
550 | |||
551 | 6.4 Effects of changing frame frequency and sound buffer size | ||
552 | ------------------------------------------------------------- | ||
553 | |||
554 | ONLY READ THIS IF YOU ARE NOT TOTALLY SATISFIED WITH THE EMULATOR'S | ||
555 | PERFORMANCE | ||
556 | |||
557 | This should be totally automatic, so I'm now programming you to do what | ||
558 | the emulator should. (Luckily you are much easier to program) | ||
559 | |||
560 | Frame skipping determines, after how many frames the emulator displays one | ||
561 | on the screen. There are 50 frames in one second, and normally every other | ||
562 | frame is displayed (25 per second). If the emulator is too slow under X, | ||
563 | increasing frame skipping can have a good effect on performance, but at the | ||
564 | cost of poorer quality. But the interesting thing is, that increasing frame | ||
565 | skipping may cause a worsening of both performance and of picture quality | ||
566 | (I will not explain it here why). | ||
567 | |||
568 | Decreasing frame skipping has the opposite effect of the above. | ||
569 | |||
570 | If the emulator uses sound, but sound is not continuous, then experiment | ||
571 | with increasing sound buffer size, and increasing frame skipping. If you | ||
572 | are lucky you can make things a bit better. Increasing sound buffer size | ||
573 | has also the negative effect of delaying more the sound effects. | ||
574 | |||
575 | 7. Where can I get ZX Spectrum games for this emulator | ||
576 | ====================================================== | ||
577 | |||
578 | On the Spectemu homepage (http://www.inf.bme.hu/~mszeredi/spectemu/) | ||
579 | you can find a list of sites worth checking. Here are some: | ||
580 | |||
581 | http://www.void.demon.nl/spectrum.html | ||
582 | http://www.nvg.unit.no/sinclair/planet/ | ||
583 | |||
584 | The fact is, that there were a lot of Spectrum games around on audio tapes, | ||
585 | and some of them are really good. There were always cracked and copyable | ||
586 | versions around, and nobody was interested in copyrights. Unfortunately the | ||
587 | big FTP archives do not allow non free software on their servers, so I | ||
588 | can't include any games in this distribution. | ||
589 | |||
590 | (Because Spectrums have died out, and perhaps some of the software | ||
591 | companies do not exist any more, probably some games could be distributed | ||
592 | freely. But I will not check on those things.) | ||
593 | |||
594 | I've included a program named 'spconv', written by Henk de Groot | ||
595 | (hegr@ensae.ericsson.se) which can convert between snapshot file formats. | ||
596 | |||
597 | Alternatively if you have some old spectrum tapes laying around, and you | ||
598 | are very brave, you can check out section 8.5. | ||
599 | |||
600 | 8. Tape files | ||
601 | ============= | ||
602 | |||
603 | 8.1 Loading a tape file | ||
604 | ----------------------- | ||
605 | |||
606 | The emulator now supports G.A. Lunter's .TAP and Tomaz Kac's .TZX tape | ||
607 | files. To load a file, enter | ||
608 | |||
609 | LOAD "" | ||
610 | |||
611 | to the spectrum (by pressing keys j""), then press 'Ctrl-p'. | ||
612 | On the terminal enter the name of the tape file to load, e.g. | ||
613 | |||
614 | tape/cnamemat | ||
615 | |||
616 | The emulator will now load from the tape file 'tape/cnamemat.tzx' or | ||
617 | 'tape/cnamemat.tap' whichever exists. Playing automatically stops at | ||
618 | the end of the tape file. To stop loading before this press Ctrl-s. | ||
619 | |||
620 | The default extensions are '.tap' / '.tzx' or '.TAP' / '.TZX' depending | ||
621 | on whether the entered tape file is upper or lower case. | ||
622 | |||
623 | While loading try pressing Ctrl-f, which can speed things up. After loading | ||
624 | the file press press Ctrl-n to restore normal speed. | ||
625 | |||
626 | 8.2 Quick loading of tape files | ||
627 | ------------------------------- | ||
628 | |||
629 | Quick loading means bypassing of the tape loading routine in the | ||
630 | spectrum ROM, and loading of tape blocks directly into the memory. | ||
631 | Some programs use their own tape loading routines, and in that case | ||
632 | the tape blocks are always "slow loaded" (see above section). | ||
633 | |||
634 | Quick loading is optional and can be toggled with the 'Ctrl-y' key. | ||
635 | |||
636 | When quick loading is on, after entering 'LOAD ""' you are immediately | ||
637 | prompted for a tapefile. If the tapefile can't be loaded, the quick | ||
638 | loading of the first header block is cancelled, but you can still load | ||
639 | the rest of tape by pressing 'Ctrl-p' and entering the tapefile name. | ||
640 | |||
641 | Even in quick load mode, the playing of tapes is not automatically | ||
642 | paused, when the program doesn't load more blocks, so with '.tap' | ||
643 | files containing multipart games, you have to pause the tape at the | ||
644 | end of each part with 'Ctrl-o' ('.tzx' tapefiles can contain a | ||
645 | "Stop the Tape" mark, to automatically pause playing). | ||
646 | |||
647 | 8.3 Saving to a tape file | ||
648 | ------------------------- | ||
649 | |||
650 | If you want to save something to a tape file using the spectrum's "SAVE" | ||
651 | command, do the following: | ||
652 | |||
653 | 1) Enter 'SAVE "file"' on the spectrum | ||
654 | 2) press Ctrl-r to start the recording | ||
655 | 3) on the terminal enter the name of the tapefile to use | ||
656 | 4) press a key on the spectrum | ||
657 | 5) wait for the recording to stop | ||
658 | 6) press Ctrl-s to stop recording | ||
659 | |||
660 | If the specified tape file already exists, the newly saved segments are | ||
661 | appended to the old tapefile. | ||
662 | |||
663 | |||
664 | 8.4 Saving a tape file to real tape | ||
665 | ----------------------------------- | ||
666 | |||
667 | The utility 'tapeout' enables you to save tape files (.tap and .tzx) | ||
668 | to real tape via the soundcard. At the moment it only works on Linux, | ||
669 | because it uses the OSS sound driver. (You can compile it for non | ||
670 | linux systems, by adding -DNO_SOUNDCARD to CFLAGS in Makefile. Then | ||
671 | instead of writing to the sound device, the program writes to a | ||
672 | headerless wav file (bits: 8, sample rate: what you've given).) | ||
673 | |||
674 | You can compile 'tapeout' by entering | ||
675 | |||
676 | make tapeout | ||
677 | |||
678 | in the main directory of spectemu. The command line parameters are: | ||
679 | |||
680 | tapeout sample_rate tapefile [start_block [output_file]] | ||
681 | |||
682 | The default value for start_block is 0, for output_file it is "/dev/dsp" | ||
683 | (or if compiled -DNO_SOUNDCARD it is "tape.out"). | ||
684 | |||
685 | You can stop recording to the tape by pressing Ctrl-C. | ||
686 | |||
687 | 8.5 Making a tape file from a real tape | ||
688 | --------------------------------------- | ||
689 | |||
690 | WARNING, ONLY TRY THIS IF YOU REALLY-REALLY WANT TO! | ||
691 | |||
692 | Well it's not so bad as that, I've digitized a lot Spectrum tapes with | ||
693 | ease, but I have the advantage of having played with tapes a lot on the | ||
694 | real Spectrum, and of being able to modify the code which does the | ||
695 | digitization. | ||
696 | |||
697 | First of all you must have a sound-card to do this. If you've got it, then | ||
698 | you have a small chance of succeeding. | ||
699 | |||
700 | First get the cassette player which you used to play Spectrum tapes. Then | ||
701 | plug it in your sound-card's 'line-in' or 'mic' inputs. Then somehow set the | ||
702 | sound driver so that it reads things form the input in which you plugged | ||
703 | your cassette (I use 'xmmix' the 'Motif Audio Mixer' to do this). And if | ||
704 | you've managed to get this far, go to the directory where you want to store | ||
705 | the tape files (remember, there will be a lot of little files: one for each | ||
706 | little segment!), and enter the following command: | ||
707 | |||
708 | recs - 32000 | filt | spload tapefile | ||
709 | |||
710 | or | ||
711 | |||
712 | recs - 32000 | spload tapefile | ||
713 | |||
714 | (The first type worked better for me) | ||
715 | |||
716 | Where 'recs', 'filt' and 'spload' are programs found in the utils | ||
717 | directory, and 'tapefile' is the name of the tape file without the '.spt' | ||
718 | extension. | ||
719 | |||
720 | '.spt' tape files only exist because of historical reasons (the tape | ||
721 | digitizing program preceeded the emulator, and also at that time I didn't | ||
722 | know of the '.TAP' format), and now it isn't suppurted by the emulator | ||
723 | any more. So you must convert '.spt' files to '.tap' with the utility | ||
724 | spt2tap (in the utils directory) to use it with the emulator. | ||
725 | |||
726 | (The contents of the utils directory can be remade by changing to that | ||
727 | directory and entering the command: 'make realclean; make') | ||
728 | |||
729 | Now you can put your favorite Spectrum cassette in the cassette player, and | ||
730 | press the Play button. | ||
731 | |||
732 | 'spload' will write a lot of information on the terminal, of which you | ||
733 | might try to make some sense. Also you can do a 'tail -f tapefile.spt' in | ||
734 | another terminal, to see what is happening. Again if nothing happens, then | ||
735 | you are on your own (and most probably at first nothing will happen). | ||
736 | |||
737 | And remember that this digitizer is not better than the real Spectrum, so | ||
738 | if you cannot load a program with a Spectrum, you'll most probably will not | ||
739 | be able to load it with 'spload'. | ||
740 | |||
741 | Good Luck! | ||
742 | |||
743 | 9. Bug reports | ||
744 | ============== | ||
745 | |||
746 | Please send bug reports to: | ||
747 | |||
748 | mszeredi@inf.bme.hu | ||
749 | |||
750 | If you make any changes to the source, please mail me the 'diff -u' of the | ||
751 | file(s) changed, and also why were the changes needed. | ||
752 | |||
753 | Please also tell me if you would like to maintain, or to continue | ||
754 | developing spectemu. | ||
755 | |||
756 | 10. Credits | ||
757 | =========== | ||
758 | |||
759 | Szeredi Tamas, for testing the emulator, and for helping with the | ||
760 | 'spectkey.gif'. | ||
761 | |||
762 | Egmont Koblinger for helping to write some parts of the emulator, and for | ||
763 | a lot of useful suggestions. | ||
764 | |||
765 | Dani Nagy and Zsazsa for helping to test the emulator. | ||
766 | |||
767 | G.A. Lunter for a very good description of the Spectrum, the undocumented | ||
768 | features of Z80, and the '.z80' snapshot file format. | ||
769 | |||
770 | And lots of others, who sent me good ideas and modifications. | ||
diff --git a/apps/plugins/zxbox/README.DOS b/apps/plugins/zxbox/README.DOS new file mode 100644 index 0000000000..4d663e9ad6 --- /dev/null +++ b/apps/plugins/zxbox/README.DOS | |||
@@ -0,0 +1,33 @@ | |||
1 | Spectemu is now basically usable under DOS. | ||
2 | |||
3 | Still missing: | ||
4 | |||
5 | 1) Sound | ||
6 | 2) Decent GUI | ||
7 | |||
8 | How to compile: | ||
9 | --------------- | ||
10 | |||
11 | - You will need DJGPP version 2, libkb, and the allegro game library. | ||
12 | You can get these at: | ||
13 | |||
14 | To get DJGPP, read: | ||
15 | ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/00README.TXT | ||
16 | |||
17 | Libkb is at: | ||
18 | ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/libkb100.zip | ||
19 | |||
20 | Allegro is at: | ||
21 | ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/allegro/alleg30.zip | ||
22 | |||
23 | |||
24 | - Not all files are needed (no long named files are needed, you can | ||
25 | try to get rid of them, but they cause no harm) | ||
26 | |||
27 | - copy 'Makefile.dos' to 'Makefile', and 'config.dos' to 'config.h' | ||
28 | |||
29 | - type 'make' | ||
30 | |||
31 | It should compile without warnings. To start it, enter 'vgaspect'. | ||
32 | |||
33 | See also README, for what can be done with the emulator. | ||
diff --git a/apps/plugins/zxbox/README.Z80 b/apps/plugins/zxbox/README.Z80 new file mode 100644 index 0000000000..39f57eff3b --- /dev/null +++ b/apps/plugins/zxbox/README.Z80 | |||
@@ -0,0 +1,182 @@ | |||
1 | This file describes how to use the Z80 processor emulation as a | ||
2 | standalone module (without the ZX Spectrum emulation). | ||
3 | |||
4 | =========================================================================== | ||
5 | You will need the following files: | ||
6 | |||
7 | For the 'intel x86' assembly version: | ||
8 | ------------------------------------- | ||
9 | |||
10 | z80.c z80.h z80_type.h i386step.S i386def.S i386op1.S i386op1x.S | ||
11 | i386op2.S i386op2x.S i386op3.S i386op3x.S i386op4.S i386op5.S i386op6.S | ||
12 | sp_to_s.c | ||
13 | |||
14 | For the 'C' version: | ||
15 | -------------------- | ||
16 | |||
17 | z80.c z80.h z80_type.h z80_step.c z80_def.h z80_ari.h z80optab.c z80optab.h | ||
18 | z80_op1.c z80_op1x.c z80_op1.h z80_op2.c z80_op2x.c z80_op2.h | ||
19 | z80_op3.c z80_op3x.c z80_op3.h z80_op4.c z80_op4x.c z80_op4.h | ||
20 | z80_op5.c z80_op5.h z80_op6.c z80_op6.h | ||
21 | |||
22 | =========================================================================== | ||
23 | Makefile rules: | ||
24 | |||
25 | For the 'intel x86' assembly version: | ||
26 | ------------------------------------- | ||
27 | |||
28 | CC = gcc | ||
29 | AR = ar | ||
30 | CPPFLAGS = | ||
31 | CFLAGS = -Wall -O3 | ||
32 | CPP = $(CC) -E | ||
33 | |||
34 | z80_i386_objs = z80.o i386emul.o | ||
35 | |||
36 | libz80.a: $(z80_i386_objs) | ||
37 | $(AR) cr libz80.a $(z80_i386_objs) | ||
38 | |||
39 | i386emul.o: i386emul.s | ||
40 | $(CC) -c $(CFLAGS) i386emul.s | ||
41 | |||
42 | i386emul.s: i386emul.sp sp_to_s | ||
43 | ./sp_to_s < i386emul.sp > i386emul.s | ||
44 | |||
45 | i386emul.sp: i386step.S | ||
46 | $(CPP) $(CPPFLAGS) i386step.S > i386emul.sp | ||
47 | |||
48 | sp_to_s: sp_to_s.o | ||
49 | $(CC) -o sp_to_s $(LDFLAGS) sp_to_s.o | ||
50 | |||
51 | .SUFFIXES: | ||
52 | .SUFFIXES: .c .o | ||
53 | |||
54 | .c.o: | ||
55 | $(CC) -c $(CFLAGS) $(CPPFLAGS) $< | ||
56 | |||
57 | |||
58 | For 'C' version: | ||
59 | ---------------- | ||
60 | |||
61 | CC = gcc | ||
62 | AR = ar | ||
63 | CPPFLAGS = -DZ80C | ||
64 | CFLAGS = -Wall -O3 -fomit-frame-pointer -funroll-loops | ||
65 | |||
66 | z80_c_objs = z80.o z80_step.o z80optab.o z80_op1.o z80_op2.o z80_op3.o \ | ||
67 | z80_op4.o z80_op5.o z80_op6.o | ||
68 | |||
69 | libz80.a: $(z80_c_objs) | ||
70 | $(AR) cr libz80.a $(z80_c_objs) | ||
71 | |||
72 | .SUFFIXES: | ||
73 | .SUFFIXES: .c .o | ||
74 | |||
75 | .c.o: | ||
76 | $(CC) -c $(CFLAGS) $(CPPFLAGS) $< | ||
77 | |||
78 | =========================================================================== | ||
79 | The following functions are defined by libz80.a: | ||
80 | |||
81 | void z80_init() | ||
82 | --------------- | ||
83 | |||
84 | This function initializes the processor emulation. This must be called | ||
85 | only once at the beginning of the program. | ||
86 | |||
87 | int z80_step(int ticknum) | ||
88 | ------------------------- | ||
89 | |||
90 | This function executes z80 instructions for 'ticknum' number of clock | ||
91 | cycles. It returns the remaining number of ticks. | ||
92 | |||
93 | NOTE: the remaining number of ticks is always zero or negative, | ||
94 | meaning that exactly, or more than the given 'ticknum' clock cycles | ||
95 | were executed. This is because WHOLE instructions are executed at a | ||
96 | time. | ||
97 | |||
98 | NOTE: HALT, LDDR, etc... do not count as one instruction, but as a | ||
99 | series of instructions (e.g. HALT is a series of NOPs). | ||
100 | |||
101 | void z80_reset() | ||
102 | ---------------- | ||
103 | |||
104 | This function resets the Z80 processor. This has the same effect as | ||
105 | applying a pulse to the RESET input of the processor. | ||
106 | |||
107 | NOTE: z80_init() does not reset the Z80, z80_reset() should be called | ||
108 | after it. | ||
109 | |||
110 | void z80_interrupt(int data) | ||
111 | ----------------------------- | ||
112 | |||
113 | Causes a Maskable Interrupt. Interrupt mode 1 and 2 are emulated | ||
114 | correctly, in interrupt mode 2 'data' is used in the address | ||
115 | calculation. In interrupt mode 0, it is assumed (as on the ZX | ||
116 | Spectrum) that 0xFF is on the data bus, and always RST 38 is | ||
117 | generated. | ||
118 | |||
119 | NOTE: It is not emulated, that in the instruction after EI no | ||
120 | interrupt can be generated. | ||
121 | |||
122 | void z80_nmi() | ||
123 | -------------- | ||
124 | |||
125 | Causes a Non Maskable Interrupt. | ||
126 | |||
127 | =========================================================================== | ||
128 | Accessing the memory, the I/O ports and the Z80 processor's state | ||
129 | (i.e. registers, etc...) | ||
130 | |||
131 | To use the functions above and the variables below, include the | ||
132 | "z80.h" include file. | ||
133 | |||
134 | Memory | ||
135 | ------ | ||
136 | |||
137 | The memory is stored in the z80_proc.mem[] byte array, which has a | ||
138 | size of 65536. By default it is all RAM. To make parts of it read | ||
139 | only, you have to redefine the appropriate macros in i386step.S and/or | ||
140 | z80_def.h. (These macros are sorounded by #ifdef SPECT_MEM, #else, | ||
141 | #endif statements.) | ||
142 | |||
143 | The memory is initialised to random data. You must fill it in before | ||
144 | starting the emulation, but AFTER the call to z80_init(). | ||
145 | |||
146 | I/O | ||
147 | --- | ||
148 | |||
149 | The input port values are stored in z80_inports[] array, which has a | ||
150 | size of 256. The IN instruction will use the appropriate element of | ||
151 | this array. This array is initialised to all zeroes. | ||
152 | |||
153 | The output port values can be queried from the z80_outports[] array, | ||
154 | which has also a size of 256. The OUT instruction will store the value | ||
155 | in the element addressed by the instruction. | ||
156 | |||
157 | If you need more complex behaviour of the I/O, you must redefine the | ||
158 | appropriate macros in i386step.S and z80_def.h. | ||
159 | |||
160 | Processor state | ||
161 | --------------- | ||
162 | |||
163 | You can access the processor's state with the following variables and | ||
164 | macros defined in "z80.h". | ||
165 | |||
166 | Registers: | ||
167 | |||
168 | Double registers: | ||
169 | normal: BC, DE, HL, AF, IR, IX, IY, PC, SP, | ||
170 | aux: BCBK, DEBK, HLBK, AFBK | ||
171 | |||
172 | Single registers: | ||
173 | RB, RC, RD, RE, RH, RL, RA, RF, RI, RR, XH, XL, YH, YL, PCH, PCL, SPH, SPL | ||
174 | |||
175 | Misc state: | ||
176 | z80_proc.haltstate (1: processor is in halt mode, 0: processor is runnig) | ||
177 | z80_proc.it_mode (interrupt mode 0, 1 or 2) | ||
178 | z80_proc.iff1 (interrupt flip-flop 1) | ||
179 | z80_proc.iff2 (interrupt flip-flop 2) | ||
180 | |||
181 | You need not access the other parts of z80_proc, they are meaningless | ||
182 | outside the z80_step() function. | ||
diff --git a/apps/plugins/zxbox/SOURCES b/apps/plugins/zxbox/SOURCES new file mode 100644 index 0000000000..cd02f48787 --- /dev/null +++ b/apps/plugins/zxbox/SOURCES | |||
@@ -0,0 +1,33 @@ | |||
1 | compr.c | ||
2 | helpers.c | ||
3 | interf.c | ||
4 | keynames.c | ||
5 | loadim.c | ||
6 | misc.c | ||
7 | rom_imag.c | ||
8 | snapshot.c | ||
9 | spconf.c | ||
10 | spect.c | ||
11 | spectkey.c | ||
12 | spkey.c | ||
13 | spmain.c | ||
14 | spperif.c | ||
15 | spscr.c | ||
16 | spsound.c | ||
17 | sptape.c | ||
18 | sptiming.c | ||
19 | tapefile.c | ||
20 | z80.c | ||
21 | z80_op1.c | ||
22 | z80_op2.c | ||
23 | z80_op3.c | ||
24 | z80_op4.c | ||
25 | z80_op5.c | ||
26 | z80_op6.c | ||
27 | z80_step.c | ||
28 | z80optab.c | ||
29 | zxbox.c | ||
30 | zxbox_keyb.c | ||
31 | zxvid_16bpp.c | ||
32 | zxvid_4bpp.c | ||
33 | zxvid_grey.c | ||
diff --git a/apps/plugins/zxbox/acconfig.h b/apps/plugins/zxbox/acconfig.h new file mode 100644 index 0000000000..57031096e8 --- /dev/null +++ b/apps/plugins/zxbox/acconfig.h | |||
@@ -0,0 +1,43 @@ | |||
1 | |||
2 | /* Define this on i386 architectures if the C compiler generates symbols | ||
3 | beginning with underscores, eg. on old aout versions of Linux */ | ||
4 | #undef AOUT_FORMAT | ||
5 | |||
6 | /* Define this to enable running in background on the Linux console. | ||
7 | Works only with SVGALIB 1.2.11 or newer */ | ||
8 | #undef RUN_IN_BACKGROUND | ||
9 | |||
10 | /* Define this if Xlib has the MITSHM extension */ | ||
11 | #undef HAVE_MITSHM | ||
12 | |||
13 | /* Define this if program can query MITSHM extension */ | ||
14 | #undef HAVE_SHMQUERY | ||
15 | |||
16 | /* Define this if you have the readline library */ | ||
17 | #undef HAVE_READLINE | ||
18 | |||
19 | /* Define this to use the C version of the program insead of the | ||
20 | i386 assembly. Define this on non intel machines */ | ||
21 | #undef Z80C | ||
22 | |||
23 | /* Always define this for the spectrum emulator. */ | ||
24 | #undef SPECT_MEM | ||
25 | |||
26 | /* Define if sound driver is available. */ | ||
27 | #undef HAVE_SOUND | ||
28 | |||
29 | /* Define if sound driver is Open Sound System (OSS) */ | ||
30 | #undef OSS_SOUND | ||
31 | |||
32 | /* Define if sound driver is SUN */ | ||
33 | #undef SUN_SOUND | ||
34 | |||
35 | /* Define this to use the inline intel assembly sections */ | ||
36 | #undef I386_ASM | ||
37 | |||
38 | /* Define this to use an alternative way of passing the z80 processor | ||
39 | data to the z80 instruction emulation functions. May make emulation | ||
40 | faster on some machines, but not on intel, and sparc. */ | ||
41 | #undef PROCP | ||
42 | |||
43 | @TOP@ | ||
diff --git a/apps/plugins/zxbox/akey.h b/apps/plugins/zxbox/akey.h new file mode 100644 index 0000000000..033f034da5 --- /dev/null +++ b/apps/plugins/zxbox/akey.h | |||
@@ -0,0 +1,111 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* akey.h | ||
22 | * | ||
23 | * Header of the AKEY module | ||
24 | * | ||
25 | * Keyboard handeling routines and key identification labels | ||
26 | * | ||
27 | * Created: 92/12/01 Szeredi Miklos | ||
28 | */ | ||
29 | |||
30 | |||
31 | #ifndef _AKEY_H | ||
32 | #define _AKEY_H | ||
33 | |||
34 | |||
35 | #define NOKEY -1 | ||
36 | #define UNKNOWNKEY -2 | ||
37 | #define ERRKEY -3 | ||
38 | #define MOUSEKEY -256 | ||
39 | |||
40 | #define UPKEY (256 + 1) | ||
41 | #define DOWNKEY (256 + 2) | ||
42 | #define RIGHTKEY (256 + 3) | ||
43 | #define LEFTKEY (256 + 4) | ||
44 | #define INSKEY (256 + 5) | ||
45 | #define DELKEY (256 + 6) | ||
46 | #define HOMEKEY (256 + 7) | ||
47 | #define ENDKEY (256 + 8) | ||
48 | #define PUKEY (256 + 9) | ||
49 | #define PDKEY (256 + 10) | ||
50 | #define BSKEY (256 + 16) | ||
51 | |||
52 | #define FKEYOFFS (256 + 128) | ||
53 | #define FKEYFIRST (FKEYOFFS + 1) | ||
54 | #define FKEYLAST (FKEYOFFS + 12) | ||
55 | #define FKEY(num) (FKEYOFFS + num) | ||
56 | |||
57 | #define ALTKEY (1 << 11) | ||
58 | #define CTRKEY (1 << 10) | ||
59 | #define SHKEY (1 << 9) | ||
60 | |||
61 | #define BKTABKEY (TABKEY | SHKEY) | ||
62 | |||
63 | #define CTL(ch) ((ch) - 96) | ||
64 | #define META(ch) ((ch) | ALTKEY) | ||
65 | |||
66 | #define TABKEY 9 | ||
67 | #define LFKEY 13 | ||
68 | #define CRKEY 10 | ||
69 | #define ENTERKEY LFKEY | ||
70 | #define ESCKEY 27 | ||
71 | |||
72 | #define lastakey() __lastakey | ||
73 | #define waitakey() ((void)readakey()) | ||
74 | #define setakey(key) ((void)(__lastakey = (key))) | ||
75 | #define setakeydo(todo) (__atodo = (todo)) | ||
76 | |||
77 | |||
78 | typedef int keytype; | ||
79 | typedef void (*__atodotype)(void); | ||
80 | #ifdef __cplusplus | ||
81 | extern "C" { | ||
82 | #endif | ||
83 | |||
84 | extern __atodotype __atodo; | ||
85 | |||
86 | extern keytype __lastakey; | ||
87 | |||
88 | extern keytype getakey(void); | ||
89 | /* extern void setakey(keytype); */ /* MACRO */ | ||
90 | extern keytype readakey(void); | ||
91 | /* extern keytype lastakey(void); */ /* MACRO */ | ||
92 | /* extern void waitakey(void); */ /* MACRO */ | ||
93 | extern int pressedakey(void); | ||
94 | extern void clearakeybuff(void); | ||
95 | /* extern void setakeydo(dofn __atodotype); */ /* MACRO */ | ||
96 | extern void ungetakey(void); | ||
97 | extern int insertakey(keytype key); | ||
98 | extern void setasmalldelay(int delay); | ||
99 | |||
100 | extern int initakey(void); | ||
101 | extern void closeakey(void); | ||
102 | |||
103 | #ifdef __cplusplus | ||
104 | } | ||
105 | #endif | ||
106 | |||
107 | |||
108 | #endif /* _AKEY_H */ | ||
109 | |||
110 | /* End of akey.h */ | ||
111 | |||
diff --git a/apps/plugins/zxbox/archos.lds b/apps/plugins/zxbox/archos.lds new file mode 100644 index 0000000000..319b9eb626 --- /dev/null +++ b/apps/plugins/zxbox/archos.lds | |||
@@ -0,0 +1,47 @@ | |||
1 | #include "config.h" | ||
2 | |||
3 | /* linker script for chessbox as an overlay, | ||
4 | * only used/ necessary for SH-based archos targets */ | ||
5 | |||
6 | OUTPUT_FORMAT(elf32-sh) | ||
7 | |||
8 | #define DRAMORIG 0x09000000 | ||
9 | #define PLUGIN_LENGTH PLUGIN_BUFFER_SIZE | ||
10 | |||
11 | #define OVERLAY_LENGTH 0x80000 | ||
12 | #define OVERLAY_ORIGIN (DRAMORIG + (MEMORYSIZE * 0x100000) - PLUGIN_LENGTH - OVERLAY_LENGTH) | ||
13 | |||
14 | MEMORY | ||
15 | { | ||
16 | OVERLAY_RAM : ORIGIN = OVERLAY_ORIGIN, LENGTH = OVERLAY_LENGTH | ||
17 | } | ||
18 | |||
19 | SECTIONS | ||
20 | { | ||
21 | .header : { | ||
22 | _plugin_start_addr = .; | ||
23 | *(.header) | ||
24 | } > OVERLAY_RAM | ||
25 | |||
26 | .text : { | ||
27 | *(.text) | ||
28 | *(.text.*) | ||
29 | } > OVERLAY_RAM | ||
30 | |||
31 | .rodata : { | ||
32 | *(.rodata) | ||
33 | *(.rodata.*) | ||
34 | } > OVERLAY_RAM | ||
35 | |||
36 | .data : { | ||
37 | *(.data) | ||
38 | } > OVERLAY_RAM | ||
39 | |||
40 | .bss : { | ||
41 | *(.bss) | ||
42 | *(.bss.*) | ||
43 | *(COMMON) | ||
44 | . = ALIGN(0x4); | ||
45 | _plugin_end_addr = .; | ||
46 | } > OVERLAY_RAM | ||
47 | } | ||
diff --git a/apps/plugins/zxbox/ax.c b/apps/plugins/zxbox/ax.c new file mode 100644 index 0000000000..c7db7f5c6b --- /dev/null +++ b/apps/plugins/zxbox/ax.c | |||
@@ -0,0 +1,815 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * | ||
23 | * ax.c | ||
24 | * | ||
25 | * | ||
26 | * | ||
27 | * Created: 94/11/11 Szeredi Miklos | ||
28 | * | ||
29 | * Version: 0.1 94/11/11 | ||
30 | * 0.2 95/06/12 | ||
31 | * | ||
32 | */ | ||
33 | |||
34 | /* #define DEBUG_EVENTS */ | ||
35 | |||
36 | #include "ax.h" | ||
37 | #include <X11/Xutil.h> | ||
38 | #include <X11/Xresource.h> | ||
39 | |||
40 | #include <stdio.h> | ||
41 | #include <stdlib.h> | ||
42 | #include <string.h> | ||
43 | #include <unistd.h> | ||
44 | |||
45 | #include <sys/time.h> | ||
46 | #include <sys/types.h> | ||
47 | #include <signal.h> | ||
48 | |||
49 | |||
50 | #ifndef TRUE | ||
51 | #define TRUE 1 | ||
52 | #endif | ||
53 | #ifndef FALSE | ||
54 | #define FALSE 0 | ||
55 | #endif | ||
56 | typedef int boolean; | ||
57 | #define max(x, y) ((x) < (y) ? (y) : (x)) | ||
58 | #define min(x, y) ((x) < (y) ? (x) : (y)) | ||
59 | #define minmax(a, l, u) ((a) < (l) ? (l) : ((a) > (u) ? (u) : (a))) | ||
60 | |||
61 | #define MAX_PROG_NAME_LEN 128 | ||
62 | #define MAX_CLASS_NAME_LEN MAX_PROG_NAME_LEN | ||
63 | #define MAX_PRES_LEN 256 | ||
64 | #define MAX_FILENAME_LEN 1024 | ||
65 | |||
66 | static const char *empty_str = ""; | ||
67 | |||
68 | typedef void (*eventproc_t)(XEvent *, void *); | ||
69 | |||
70 | typedef struct _event_proc_struct { | ||
71 | eventproc_t event_proc; | ||
72 | unsigned long event_mask; | ||
73 | Display *disp; | ||
74 | void *ptr; | ||
75 | Window event_win; | ||
76 | boolean done_proc; | ||
77 | struct _event_proc_struct *next_proc; | ||
78 | } event_proc_struct; | ||
79 | |||
80 | typedef struct { | ||
81 | const char *event_name; | ||
82 | boolean win_given; | ||
83 | event_proc_struct *next_proc; | ||
84 | } event_struct; | ||
85 | |||
86 | typedef struct _disp_struct{ | ||
87 | Display *disp; | ||
88 | XFontStruct *font; | ||
89 | struct _disp_struct *next_disp; | ||
90 | } disp_struct; | ||
91 | |||
92 | |||
93 | #define EVENT_NUM LASTEvent | ||
94 | |||
95 | static event_struct event_info[EVENT_NUM]; | ||
96 | |||
97 | static disp_struct disp_start = {NULL, NULL, NULL}; | ||
98 | |||
99 | static boolean disp_chain_modified; | ||
100 | |||
101 | static char prog_name[MAX_PROG_NAME_LEN + 1]; | ||
102 | static char class_name[MAX_CLASS_NAME_LEN + 1]; | ||
103 | |||
104 | static XrmDatabase rDB = NULL; /* Has to be global otherwise Xlib hangs */ | ||
105 | |||
106 | static int opTableEntries = 19; | ||
107 | static aX_options opTable[] = { | ||
108 | {"-display", ".display", XrmoptionSepArg, NULL}, | ||
109 | {"-geometry", ".geometry", XrmoptionSepArg, NULL}, | ||
110 | {"-bg", ".background", XrmoptionSepArg, NULL}, | ||
111 | {"-background", ".background", XrmoptionSepArg, NULL}, | ||
112 | {"-bd", ".borderColor", XrmoptionSepArg, NULL}, | ||
113 | {"-bordercolor", ".borderColor", XrmoptionSepArg, NULL}, | ||
114 | {"-bw", ".borderWidth", XrmoptionSepArg, NULL}, | ||
115 | {"-borderwidth", ".borderWidth", XrmoptionSepArg, NULL}, | ||
116 | {"-fg", ".foreground", XrmoptionSepArg, NULL}, | ||
117 | {"-foreground", ".foreground", XrmoptionSepArg, NULL}, | ||
118 | {"-fn", ".font", XrmoptionSepArg, NULL}, | ||
119 | {"-font", ".font", XrmoptionSepArg, NULL}, | ||
120 | {"-name", ".name", XrmoptionSepArg, NULL}, | ||
121 | {"-rv", ".reverseVideo", XrmoptionNoArg, "on"}, | ||
122 | {"-reverse", ".reverseVideo", XrmoptionNoArg, "on"}, | ||
123 | {"+rv", ".reverseVideo", XrmoptionNoArg, "off"}, | ||
124 | {"-bg", ".background", XrmoptionSepArg, NULL}, | ||
125 | {"-title", ".title", XrmoptionSepArg, NULL}, | ||
126 | {"-xrm", NULL, XrmoptionResArg, NULL} | ||
127 | }; | ||
128 | |||
129 | static char *addstr(const char str1[], const char str2[], char str12[], | ||
130 | unsigned int str12len) | ||
131 | { | ||
132 | unsigned int i, j, k; | ||
133 | |||
134 | str12[str12len-1] = '\0'; | ||
135 | |||
136 | for(i=0, j=0, k=0; i + 1 < str12len; ) { | ||
137 | if(str1[j]) str12[i] = str1[j++]; | ||
138 | else str12[i] = str2[k++]; | ||
139 | if(! str12[i++]) break; | ||
140 | } | ||
141 | return str12; | ||
142 | } | ||
143 | |||
144 | |||
145 | static char *pname(const char *resource) { | ||
146 | static char pnameres[MAX_PRES_LEN]; | ||
147 | |||
148 | return addstr(prog_name, resource, pnameres, MAX_PRES_LEN); | ||
149 | } | ||
150 | |||
151 | static char *pclass(const char *resource) { | ||
152 | static char pclassres[MAX_PRES_LEN]; | ||
153 | |||
154 | return addstr(class_name, resource, pclassres, MAX_PRES_LEN); | ||
155 | } | ||
156 | |||
157 | |||
158 | static void fill_event_info(void) | ||
159 | { | ||
160 | int i; | ||
161 | |||
162 | for(i = 0; i < EVENT_NUM; i++) { | ||
163 | event_info[i].event_name = empty_str; | ||
164 | event_info[i].win_given = TRUE; | ||
165 | event_info[i].next_proc = NULL; | ||
166 | } | ||
167 | |||
168 | event_info[MappingNotify].win_given = FALSE; | ||
169 | |||
170 | event_info[ButtonPress].event_name = "ButtonPress"; | ||
171 | event_info[ButtonRelease].event_name = "ButtonRelease"; | ||
172 | event_info[CirculateNotify].event_name = "CirculateNotify"; | ||
173 | event_info[CirculateRequest].event_name = "CirculateRequest"; | ||
174 | event_info[ClientMessage].event_name = "ClientMessage"; | ||
175 | event_info[ColormapNotify].event_name = "ColormapNotify"; | ||
176 | event_info[ConfigureNotify].event_name = "ConfigureNotify"; | ||
177 | event_info[ConfigureRequest].event_name = "ConfigureRequest"; | ||
178 | event_info[CreateNotify].event_name = "CreateNotify"; | ||
179 | event_info[DestroyNotify].event_name = "DestroyNotify"; | ||
180 | event_info[EnterNotify].event_name = "EnterNotify"; | ||
181 | event_info[LeaveNotify].event_name = "LeaveNotify"; | ||
182 | event_info[Expose].event_name = "Expose"; | ||
183 | event_info[FocusIn].event_name = "FocusIn"; | ||
184 | event_info[FocusOut].event_name = "FocusOut"; | ||
185 | event_info[GraphicsExpose].event_name = "GraphicsExpose"; | ||
186 | event_info[NoExpose].event_name = "NoExpose"; | ||
187 | event_info[GravityNotify].event_name = "GravityNotify"; | ||
188 | event_info[KeymapNotify].event_name = "KeymapNotify"; | ||
189 | event_info[KeyPress].event_name = "KeyPress"; | ||
190 | event_info[KeyRelease].event_name = "KeyRelease"; | ||
191 | event_info[MapNotify].event_name = "MapNotify"; | ||
192 | event_info[UnmapNotify].event_name = "UnmapNotify"; | ||
193 | event_info[MappingNotify].event_name = "MappingNotify"; | ||
194 | event_info[MapRequest].event_name = "MapRequest"; | ||
195 | event_info[MotionNotify].event_name = "MotionNotify"; | ||
196 | event_info[PropertyNotify].event_name = "PropertyNotify"; | ||
197 | event_info[ReparentNotify].event_name = "ReparentNotify"; | ||
198 | event_info[ResizeRequest].event_name = "ResizeRequest"; | ||
199 | event_info[SelectionClear].event_name = "SelectionClear"; | ||
200 | event_info[SelectionNotify].event_name = "SelectionNotify"; | ||
201 | event_info[SelectionRequest].event_name = "SelectionRequest"; | ||
202 | event_info[VisibilityNotify].event_name = "VisibilityNotify"; | ||
203 | |||
204 | } | ||
205 | |||
206 | static void get_def_res(aX_default_resources *defres) | ||
207 | { | ||
208 | XrmValue value; | ||
209 | char *str_type; | ||
210 | int flags; | ||
211 | XColor color_def; | ||
212 | unsigned long tmp_pixel; | ||
213 | Colormap def_map; | ||
214 | int font_spec; | ||
215 | |||
216 | |||
217 | defres->window_name = prog_name; | ||
218 | defres->icon_name = prog_name; | ||
219 | |||
220 | |||
221 | defres->scr = DefaultScreen(defres->disp); | ||
222 | defres->scr_ptr = ScreenOfDisplay(defres->disp, defres->scr); | ||
223 | def_map = DefaultColormapOfScreen(defres->scr_ptr); | ||
224 | |||
225 | |||
226 | if(XrmGetResource(rDB, pname(".title"), pclass(".Title"), | ||
227 | &str_type, &value)) | ||
228 | defres->window_name = (char *) value.addr; | ||
229 | |||
230 | defres->sflags = PSize; | ||
231 | if(XrmGetResource(rDB, pname(".geometry"), pclass(".Geometry"), | ||
232 | &str_type, &value)) { | ||
233 | flags = XParseGeometry((char *) value.addr, &(defres->x), &(defres->y), | ||
234 | &(defres->width), &(defres->height)); | ||
235 | if((XValue | YValue) & flags) defres->sflags |= USPosition; | ||
236 | if((WidthValue | HeightValue) & flags) | ||
237 | defres->sflags = (defres->sflags & ~PSize) | USSize; | ||
238 | } | ||
239 | |||
240 | defres->background = defres->background ? | ||
241 | WhitePixel(defres->disp, defres->scr) : | ||
242 | BlackPixel(defres->disp, defres->scr); | ||
243 | |||
244 | if(XrmGetResource(rDB, pname(".background"), pclass(".Background"), | ||
245 | &str_type, &value)) { | ||
246 | if(XParseColor(defres->disp, def_map, value.addr, &color_def)) { | ||
247 | if(XAllocColor(defres->disp, def_map, &color_def)) | ||
248 | defres->background = color_def.pixel; | ||
249 | } | ||
250 | else fprintf(stderr, "%s: aX: warning: Invalid color specification %s\n", | ||
251 | prog_name, value.addr); | ||
252 | } | ||
253 | |||
254 | defres->foreground = defres->foreground ? | ||
255 | WhitePixel(defres->disp, defres->scr) : | ||
256 | BlackPixel(defres->disp, defres->scr); | ||
257 | |||
258 | if(XrmGetResource(rDB, pname(".foreground"), pclass(".Foreground"), | ||
259 | &str_type, &value)) { | ||
260 | if(XParseColor(defres->disp, def_map, value.addr, &color_def)) { | ||
261 | if(XAllocColor(defres->disp, def_map, &color_def)) | ||
262 | defres->foreground = color_def.pixel; | ||
263 | } | ||
264 | else fprintf(stderr, "%s: aX: warning: Invalid color specification %s\n", | ||
265 | prog_name, value.addr); | ||
266 | } | ||
267 | |||
268 | if(XrmGetResource(rDB, pname(".borderWidth"), pclass(".BorderWidth"), | ||
269 | &str_type, &value)) { | ||
270 | defres->border_width = atoi(value.addr); | ||
271 | } | ||
272 | |||
273 | defres->border_color = defres->foreground; | ||
274 | if(XrmGetResource(rDB, pname(".borderColor"), pclass(".BorderColor"), | ||
275 | &str_type, &value)) { | ||
276 | if(XParseColor(defres->disp, def_map, value.addr, &color_def)) { | ||
277 | if(XAllocColor(defres->disp, def_map, &color_def)) | ||
278 | defres->border_color = color_def.pixel; | ||
279 | } | ||
280 | else fprintf(stderr, "%s: aX: warning: Invalid color specification %s\n", | ||
281 | prog_name, value.addr); | ||
282 | } | ||
283 | |||
284 | font_spec = 0; | ||
285 | if(XrmGetResource(rDB, pname(".font"), pclass(".Font"), | ||
286 | &str_type, &value)) { | ||
287 | defres->font_name = value.addr; | ||
288 | if(defres->font_name != NULL) font_spec = 1; | ||
289 | |||
290 | } | ||
291 | |||
292 | if(XrmGetResource(rDB, pname(".fallbackFont"), pclass(".Font"), | ||
293 | &str_type, &value)) | ||
294 | defres->fallback_font_name = value.addr; | ||
295 | |||
296 | if(defres->font_name == NULL || | ||
297 | (defres->font = XLoadQueryFont(defres->disp, defres->font_name)) | ||
298 | == NULL) { | ||
299 | |||
300 | if(font_spec) | ||
301 | fprintf(stderr, "%s: aX: warning: cannot open %s font, ", | ||
302 | prog_name, defres->font_name); | ||
303 | |||
304 | defres->font_name = defres->fallback_font_name; | ||
305 | |||
306 | if(font_spec && defres->font_name != NULL) | ||
307 | fprintf(stderr, "trying %s...\n",defres->font_name); | ||
308 | |||
309 | if(defres->font_name == NULL || | ||
310 | (defres->font = | ||
311 | XLoadQueryFont(defres->disp, defres->fallback_font_name)) == NULL) { | ||
312 | |||
313 | if(defres->font_name != NULL) { | ||
314 | |||
315 | fprintf(stderr, "%s: aX: warning: cannot open %s font, ", | ||
316 | prog_name, defres->font_name); | ||
317 | } | ||
318 | |||
319 | defres->font_name = "fixed"; | ||
320 | |||
321 | fprintf(stderr, "trying %s...\n",defres->font_name); | ||
322 | |||
323 | if((defres->font = XLoadQueryFont(defres->disp, defres->font_name)) | ||
324 | == NULL) { | ||
325 | |||
326 | fprintf(stderr, "%s: aX: warning: cannot open %s font\n", | ||
327 | prog_name, defres->font_name); | ||
328 | |||
329 | exit(-1); | ||
330 | } | ||
331 | } | ||
332 | else defres->font_name = defres->fallback_font_name; | ||
333 | } | ||
334 | |||
335 | if(XrmGetResource(rDB, pname(".reverseVideo"), pclass(".ReverseVideo"), | ||
336 | &str_type, &value)) | ||
337 | if(strcmp(value.addr, "on") == 0) { | ||
338 | tmp_pixel = defres->foreground; | ||
339 | defres->foreground = defres->background; | ||
340 | defres->background = tmp_pixel; | ||
341 | } | ||
342 | |||
343 | } | ||
344 | |||
345 | |||
346 | static void add_disp(aX_default_resources *defres) | ||
347 | { | ||
348 | disp_struct *last; | ||
349 | |||
350 | for(last = &disp_start; last->next_disp != NULL; last = last->next_disp); | ||
351 | |||
352 | if((last->next_disp = malloc(sizeof(disp_struct))) == NULL) { | ||
353 | fprintf(stderr, "%s: aX: Not enough memory.\n", prog_name); | ||
354 | exit(-1); | ||
355 | }; | ||
356 | |||
357 | last = last->next_disp; | ||
358 | |||
359 | last->disp = defres->disp; | ||
360 | last->font = defres->font; | ||
361 | last->next_disp = NULL; | ||
362 | |||
363 | |||
364 | disp_chain_modified = TRUE; | ||
365 | } | ||
366 | |||
367 | void aX_open_disp(aX_options *useropt, int useroptlen, | ||
368 | int *argcp, char *argv[], | ||
369 | aX_default_resources *defres) | ||
370 | { | ||
371 | |||
372 | XrmValue value; | ||
373 | char *str_type; | ||
374 | char *disp_res; | ||
375 | char *environment; | ||
376 | char *display_name = NULL; | ||
377 | char filename[MAX_FILENAME_LEN]; | ||
378 | int i; | ||
379 | XrmDatabase commandlineDB = NULL, usercommandlineDB = NULL; | ||
380 | XrmDatabase homeDB, serverDB, applicationDB; | ||
381 | |||
382 | /* | ||
383 | if(disp_start.next_disp != NULL) { | ||
384 | fprintf(stderr, "aX_open_disp: Cannot open first display twice.\n"); | ||
385 | exit(-1); | ||
386 | } | ||
387 | */ | ||
388 | |||
389 | XrmInitialize(); | ||
390 | |||
391 | class_name[0] = '\0'; | ||
392 | class_name[MAX_CLASS_NAME_LEN] = '\0'; | ||
393 | if(defres->class_name != NULL) | ||
394 | strncpy(class_name, defres->class_name, MAX_CLASS_NAME_LEN); | ||
395 | |||
396 | |||
397 | fill_event_info(); | ||
398 | |||
399 | for(i = 1; i < *argcp; i++) | ||
400 | if(strcmp(argv[i], "-name") == 0 && ++i < *argcp){ | ||
401 | defres->prog_name = argv[i]; | ||
402 | break; | ||
403 | } | ||
404 | |||
405 | |||
406 | prog_name[0] = '\0'; | ||
407 | prog_name[MAX_PROG_NAME_LEN] = '\0'; | ||
408 | if(defres->prog_name != NULL) | ||
409 | strncpy(prog_name, defres->prog_name, MAX_PROG_NAME_LEN); | ||
410 | else | ||
411 | strncpy(prog_name, argv[0], MAX_PROG_NAME_LEN); | ||
412 | |||
413 | defres->prog_name = prog_name; | ||
414 | |||
415 | XrmParseCommand(&commandlineDB, (XrmOptionDescRec *) opTable, | ||
416 | opTableEntries, prog_name, argcp, argv); | ||
417 | |||
418 | if(useropt != NULL) | ||
419 | XrmParseCommand(&usercommandlineDB, (XrmOptionDescRec *) useropt, | ||
420 | useroptlen, prog_name, argcp, argv); | ||
421 | else usercommandlineDB = NULL; | ||
422 | |||
423 | /* | ||
424 | if(*argcp != 1) { | ||
425 | fprintf(stderr, | ||
426 | "%s: aX_open_disp: Unrecognised options in command line!\n", | ||
427 | prog_name); | ||
428 | exit(-1); | ||
429 | } | ||
430 | */ | ||
431 | |||
432 | if(XrmGetResource(commandlineDB, pname(".display"), pclass(".Display"), | ||
433 | &str_type, &value)) display_name = (char *) value.addr; | ||
434 | |||
435 | if((defres->disp = XOpenDisplay(display_name)) == NULL) { | ||
436 | fprintf(stderr, "%s: aX_open_disp: cannot connect to X server %s\n", | ||
437 | prog_name, XDisplayName(display_name)); | ||
438 | exit(-1); | ||
439 | } | ||
440 | |||
441 | applicationDB = XrmGetFileDatabase( | ||
442 | addstr("/usr/lib/X11/app-defaults/", | ||
443 | class_name, | ||
444 | filename, | ||
445 | MAX_FILENAME_LEN)); | ||
446 | /* | ||
447 | if(defres->disp->xdefaults) | ||
448 | serverDB = XrmGetStringDatabase(defres->disp->xdefaults); | ||
449 | else serverDB = NULL; | ||
450 | */ | ||
451 | |||
452 | |||
453 | disp_res = XResourceManagerString(defres->disp); | ||
454 | |||
455 | if(disp_res) serverDB = XrmGetStringDatabase(disp_res); | ||
456 | else serverDB = NULL; | ||
457 | |||
458 | |||
459 | if((environment = getenv("XENVIRONMENT")) != NULL) | ||
460 | homeDB = XrmGetFileDatabase(environment); | ||
461 | else homeDB = NULL; | ||
462 | |||
463 | |||
464 | XrmMergeDatabases(applicationDB, &rDB); | ||
465 | XrmMergeDatabases(serverDB, &rDB); | ||
466 | XrmMergeDatabases(homeDB, &rDB); | ||
467 | XrmMergeDatabases(commandlineDB, &rDB); | ||
468 | XrmMergeDatabases(usercommandlineDB, &rDB); | ||
469 | |||
470 | get_def_res(defres); | ||
471 | |||
472 | add_disp(defres); | ||
473 | |||
474 | } | ||
475 | |||
476 | |||
477 | void aX_open_second_disp(char *display_name, | ||
478 | aX_default_resources *defres) | ||
479 | { | ||
480 | char *disp_res; | ||
481 | |||
482 | XrmDatabase serverDB; | ||
483 | |||
484 | |||
485 | if((defres->disp = XOpenDisplay(display_name)) == NULL) { | ||
486 | fprintf(stderr, | ||
487 | "%s: aX_open_second_disp: cannot connect to X server %s\n", | ||
488 | prog_name, XDisplayName(display_name)); | ||
489 | exit(-1); | ||
490 | } | ||
491 | |||
492 | |||
493 | disp_res = XResourceManagerString(defres->disp); | ||
494 | |||
495 | if(disp_res) serverDB = XrmGetStringDatabase(disp_res); | ||
496 | else serverDB = NULL; | ||
497 | |||
498 | |||
499 | XrmMergeDatabases(serverDB, &rDB); | ||
500 | |||
501 | get_def_res(defres); | ||
502 | |||
503 | add_disp(defres); | ||
504 | } | ||
505 | |||
506 | /* | ||
507 | |||
508 | void smallwait(boolean event_prev) | ||
509 | { | ||
510 | event_prev = event_prev; | ||
511 | sleep(1); | ||
512 | } | ||
513 | |||
514 | */ | ||
515 | |||
516 | |||
517 | static void sigalrm_handler(int i) | ||
518 | { | ||
519 | i = i; | ||
520 | signal(SIGALRM, SIG_IGN); | ||
521 | } | ||
522 | |||
523 | |||
524 | static void smallwait(boolean event_prev) | ||
525 | { | ||
526 | struct itimerval value; | ||
527 | |||
528 | signal(SIGALRM, sigalrm_handler); | ||
529 | |||
530 | event_prev = event_prev; | ||
531 | |||
532 | value.it_interval.tv_sec = 0L; | ||
533 | value.it_interval.tv_usec = 0L; | ||
534 | value.it_value.tv_sec = 0L; | ||
535 | value.it_value.tv_usec = 100000L; | ||
536 | setitimer(ITIMER_REAL, &value, NULL); | ||
537 | |||
538 | pause(); | ||
539 | } | ||
540 | |||
541 | /* This aX_wait_all_muck needs to be cleared out! */ | ||
542 | |||
543 | void aX_wait_event(int eventtype) | ||
544 | { | ||
545 | XEvent ev; | ||
546 | event_proc_struct **curr; | ||
547 | int i; | ||
548 | disp_struct *dsp, *dsp1; | ||
549 | |||
550 | boolean event_prev; | ||
551 | |||
552 | |||
553 | start:; | ||
554 | |||
555 | if(disp_start.next_disp == NULL) { | ||
556 | fprintf(stderr, "%s: aX_wait_event: No connection to any display\n", | ||
557 | prog_name); | ||
558 | exit(-1); | ||
559 | } | ||
560 | |||
561 | dsp = disp_start.next_disp; | ||
562 | |||
563 | |||
564 | do { | ||
565 | event_prev = TRUE; | ||
566 | |||
567 | dsp1 = dsp; | ||
568 | if((disp_start.next_disp)->next_disp != NULL || | ||
569 | eventtype == AX_LOOK_EVENTS) | ||
570 | while(XPending(dsp->disp) == 0) { | ||
571 | dsp = dsp->next_disp; | ||
572 | if(dsp == NULL) dsp = disp_start.next_disp; | ||
573 | |||
574 | if(dsp == dsp1) { | ||
575 | if(eventtype == AX_LOOK_EVENTS) return; | ||
576 | |||
577 | smallwait(event_prev); | ||
578 | event_prev = FALSE; | ||
579 | dsp = dsp1 = disp_start.next_disp; | ||
580 | } | ||
581 | } | ||
582 | |||
583 | XNextEvent(dsp->disp, &ev); | ||
584 | #ifdef DEBUG_EVENTS | ||
585 | fprintf(stderr,"Event: %s (%i) in win: %li)\n", | ||
586 | event_info[ev.type].event_name, | ||
587 | ev.type, | ||
588 | ev.xany.window); | ||
589 | #endif | ||
590 | |||
591 | |||
592 | if(dsp->disp != ev.xany.display) | ||
593 | fprintf(stderr, "Ha! Event read from wrong display! Stupid XLib!!!\n"); | ||
594 | |||
595 | curr = &(event_info[ev.type].next_proc); | ||
596 | i = 0; | ||
597 | while(*curr != NULL) { | ||
598 | if((*curr)->disp == dsp->disp && | ||
599 | (!event_info[ev.type].win_given || | ||
600 | ev.xany.window == (*curr)->event_win) && | ||
601 | !(*curr)->done_proc) { | ||
602 | i++; | ||
603 | (*curr)->done_proc = TRUE; | ||
604 | disp_chain_modified = FALSE; | ||
605 | |||
606 | if((*curr)->event_proc != NULL) { | ||
607 | (*((*curr)->event_proc))(&ev, (*curr)->ptr); | ||
608 | } | ||
609 | |||
610 | if(disp_chain_modified) goto start; | ||
611 | curr = &(event_info[ev.type].next_proc); | ||
612 | } | ||
613 | else curr = &((*curr)->next_proc); | ||
614 | } | ||
615 | curr = &(event_info[ev.type].next_proc); | ||
616 | while(*curr != NULL) { | ||
617 | (*curr)->done_proc = FALSE; | ||
618 | curr = &((*curr)->next_proc); | ||
619 | } | ||
620 | |||
621 | if(i == 0) | ||
622 | fprintf(stderr, "%s: aX_wait_event: warning: " | ||
623 | "Unexpected event: %s (%i) in win: %li)\n", | ||
624 | prog_name, | ||
625 | event_info[ev.type].event_name, | ||
626 | ev.type, | ||
627 | ev.xany.window); | ||
628 | |||
629 | } while(eventtype != ev.type && eventtype != AX_ANY_EVENT); | ||
630 | } | ||
631 | |||
632 | |||
633 | void aX_look_events(void) | ||
634 | { | ||
635 | aX_wait_event(AX_LOOK_EVENTS); | ||
636 | } | ||
637 | |||
638 | char *aX_get_prog_res(const char *resname, const char* resclass) | ||
639 | { | ||
640 | XrmValue value; | ||
641 | char *str_type; | ||
642 | |||
643 | if(XrmGetResource(rDB, pname(resname), pclass(resclass), | ||
644 | &str_type, &value)) | ||
645 | return (char *)value.addr; | ||
646 | else return NULL; | ||
647 | } | ||
648 | |||
649 | char *aX_get_resource(const char *resname, const char* resclass) | ||
650 | { | ||
651 | XrmValue value; | ||
652 | char *str_type; | ||
653 | |||
654 | if(XrmGetResource(rDB, resname, resclass, | ||
655 | &str_type, &value)) | ||
656 | return (char *)value.addr; | ||
657 | else return NULL; | ||
658 | } | ||
659 | |||
660 | static long get_win_mask(Display *disp, Window win) | ||
661 | { | ||
662 | int evt; | ||
663 | event_proc_struct *ep; | ||
664 | long winmask; | ||
665 | |||
666 | for(evt = 0, winmask = 0; evt < EVENT_NUM; evt++) { | ||
667 | ep = event_info[evt].next_proc; | ||
668 | while(ep != NULL) { | ||
669 | if(ep->event_win == win && ep->disp == disp) winmask |= ep->event_mask; | ||
670 | ep = ep->next_proc; | ||
671 | } | ||
672 | } | ||
673 | return winmask; | ||
674 | } | ||
675 | |||
676 | |||
677 | |||
678 | void aX_add_event_proc(Display *disp, | ||
679 | Window win, | ||
680 | int eventtype, | ||
681 | void (*eventproc)(XEvent *, void *), | ||
682 | unsigned long eventmask, | ||
683 | void *ptr) | ||
684 | { | ||
685 | event_proc_struct **epp; | ||
686 | long winmask; | ||
687 | |||
688 | epp = &(event_info[eventtype].next_proc); | ||
689 | while(*epp != NULL) epp = &((*epp)->next_proc); | ||
690 | |||
691 | if((*epp = (event_proc_struct *) | ||
692 | malloc((size_t) sizeof(event_proc_struct))) == NULL) { | ||
693 | fprintf(stderr, | ||
694 | "%s: aX_add_event_proc_disp: Not enough memory.\n", prog_name); | ||
695 | exit(-1); | ||
696 | } | ||
697 | |||
698 | (*epp)->event_proc = eventproc; | ||
699 | (*epp)->ptr = ptr; | ||
700 | (*epp)->event_mask = eventmask; | ||
701 | (*epp)->disp = disp; | ||
702 | (*epp)->event_win = win; | ||
703 | (*epp)->done_proc = FALSE; | ||
704 | (*epp)->next_proc = NULL; | ||
705 | |||
706 | if(win) { | ||
707 | winmask = get_win_mask(disp, win); | ||
708 | XSelectInput(disp, win, winmask); | ||
709 | } | ||
710 | } | ||
711 | |||
712 | void aX_remove_event_proc(Display *disp, | ||
713 | Window win, | ||
714 | int eventtype, | ||
715 | void (*eventproc)(XEvent *, void *)) | ||
716 | { | ||
717 | event_proc_struct **epp; | ||
718 | event_proc_struct *tmp; | ||
719 | long winmask; | ||
720 | |||
721 | epp = &(event_info[eventtype].next_proc); | ||
722 | while(*epp != NULL) { | ||
723 | if((*epp)->disp == disp && | ||
724 | (*epp)->event_win == win && | ||
725 | (*epp)->event_proc == eventproc) { | ||
726 | tmp = (*epp)->next_proc; | ||
727 | free(*epp); | ||
728 | *epp = tmp; | ||
729 | if(win) { | ||
730 | winmask = get_win_mask(disp, win); | ||
731 | XSelectInput(disp, win, winmask); | ||
732 | } | ||
733 | return; | ||
734 | } | ||
735 | else epp = &((*epp)->next_proc); | ||
736 | } | ||
737 | fprintf(stderr, "%s: aX_remove_event_proc_disp: warning: " | ||
738 | "Could not remove event proc (event: %s (%i), window: %lX)\n", | ||
739 | prog_name, event_info[eventtype].event_name, eventtype, win); | ||
740 | |||
741 | } | ||
742 | |||
743 | void aX_close_one_disp(Display *disp) | ||
744 | { | ||
745 | /* int evt; | ||
746 | event_proc_struct **curr; */ | ||
747 | disp_struct *dsp, *dsp_tmp; | ||
748 | |||
749 | /* | ||
750 | for(evt = 0; evt < EVENT_NUM; evt++) { | ||
751 | curr = &(event_info[evt].next_proc); | ||
752 | while(*curr != NULL) { | ||
753 | if(disp == (*curr)->disp) { | ||
754 | aX_remove_event_proc_disp((*curr)->disp, (*curr)->event_win, | ||
755 | evt, (*curr)->event_proc); | ||
756 | curr = &(event_info[evt].next_proc); | ||
757 | } | ||
758 | else curr = &((*curr)->next_proc); | ||
759 | } | ||
760 | } | ||
761 | |||
762 | */ | ||
763 | |||
764 | for(dsp = &disp_start; dsp->next_disp->disp != disp; dsp = dsp->next_disp) | ||
765 | if(dsp->next_disp == NULL) { | ||
766 | fprintf(stderr, | ||
767 | "%s: aX_close_one_disp: warning: Trying to close unopened display.\n", | ||
768 | prog_name); | ||
769 | return; | ||
770 | } | ||
771 | |||
772 | XUnloadFont(dsp->next_disp->disp, dsp->next_disp->font->fid); | ||
773 | XCloseDisplay(dsp->next_disp->disp); | ||
774 | |||
775 | dsp_tmp = dsp->next_disp; | ||
776 | dsp->next_disp = dsp->next_disp->next_disp; | ||
777 | free(dsp_tmp); | ||
778 | |||
779 | disp_chain_modified = TRUE; | ||
780 | |||
781 | } | ||
782 | |||
783 | void aX_close_disp(void) | ||
784 | { | ||
785 | |||
786 | while(disp_start.next_disp != NULL) | ||
787 | aX_close_one_disp(disp_start.next_disp->disp); | ||
788 | |||
789 | } | ||
790 | |||
791 | |||
792 | unsigned long aX_get_color(Display *disp, int scr, unsigned long def_col, | ||
793 | const char *color_name) | ||
794 | { | ||
795 | XColor color_def; | ||
796 | Colormap def_map; | ||
797 | Screen *scr_ptr; | ||
798 | |||
799 | |||
800 | if(color_name == NULL) return def_col; | ||
801 | |||
802 | scr_ptr = ScreenOfDisplay(disp, scr); | ||
803 | def_map = DefaultColormapOfScreen(scr_ptr); | ||
804 | |||
805 | if(XParseColor(disp, def_map, color_name, &color_def)) { | ||
806 | if(XAllocColor(disp, def_map, &color_def)) | ||
807 | return color_def.pixel; | ||
808 | } | ||
809 | else fprintf(stderr, | ||
810 | "%s: aX_get_color: warning: Invalid color specification %s\n", | ||
811 | prog_name, color_name); | ||
812 | |||
813 | return def_col; | ||
814 | |||
815 | } | ||
diff --git a/apps/plugins/zxbox/ax.h b/apps/plugins/zxbox/ax.h new file mode 100644 index 0000000000..5c4784df6a --- /dev/null +++ b/apps/plugins/zxbox/ax.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* ax.h | ||
22 | * | ||
23 | * Header of the AX module | ||
24 | * | ||
25 | * | ||
26 | * Created: 94/11/11 Szeredi Miklos | ||
27 | */ | ||
28 | |||
29 | |||
30 | #ifndef _AX_H | ||
31 | #define _AX_H | ||
32 | |||
33 | #include <X11/Xlib.h> | ||
34 | #include <X11/Xresource.h> | ||
35 | |||
36 | /*typedef XrmOptionDescRec aX_options; */ | ||
37 | |||
38 | typedef struct { | ||
39 | const char *option; /* Option abbreviation in argv */ | ||
40 | const char *specifier; /* Resource specifier */ | ||
41 | XrmOptionKind argKind; /* Which style of option it is */ | ||
42 | const char *value; /* Value to provide if XrmoptionNoArg */ | ||
43 | } aX_options; | ||
44 | |||
45 | |||
46 | #define AX_NO_EVENT LASTEvent | ||
47 | #define AX_ANY_EVENT 0 | ||
48 | #define AX_LOOK_EVENTS -1 | ||
49 | |||
50 | typedef struct{ | ||
51 | Display *disp; | ||
52 | int scr; | ||
53 | Screen *scr_ptr; | ||
54 | unsigned int width; | ||
55 | unsigned int height; | ||
56 | int x; | ||
57 | int y; | ||
58 | unsigned int border_width; | ||
59 | unsigned long foreground; | ||
60 | unsigned long background; | ||
61 | unsigned long border_color; | ||
62 | const char *font_name; | ||
63 | const char *fallback_font_name; | ||
64 | XFontStruct *font; | ||
65 | long sflags; | ||
66 | const char *prog_name; | ||
67 | const char *class_name; | ||
68 | char *window_name; | ||
69 | char *icon_name; | ||
70 | } aX_default_resources; | ||
71 | |||
72 | |||
73 | #ifdef __cplusplus | ||
74 | extern "C" { | ||
75 | #endif | ||
76 | |||
77 | |||
78 | extern void aX_open_disp(aX_options *useropt, int useroptlen, | ||
79 | int *argcp, char *argv[], | ||
80 | aX_default_resources *defres); | ||
81 | extern void aX_open_second_disp(char *display_name, | ||
82 | aX_default_resources *defres); | ||
83 | extern void aX_wait_event(int eventtype); | ||
84 | extern void aX_look_events(void); | ||
85 | extern char *aX_get_prog_res(const char *resname, const char* resclass); | ||
86 | extern char *aX_get_resource(const char *resname, const char* resclass); | ||
87 | |||
88 | extern void aX_add_event_proc(Display *disp, | ||
89 | Window win, | ||
90 | int eventtype, | ||
91 | void (*eventproc)(XEvent *, void *), | ||
92 | unsigned long eventmask, | ||
93 | void *ptr); | ||
94 | |||
95 | extern void aX_remove_event_proc(Display *disp, | ||
96 | Window win, | ||
97 | int eventtype, | ||
98 | void (*eventproc)(XEvent *, void *)); | ||
99 | |||
100 | extern void aX_close_one_disp(Display *disp); | ||
101 | extern void aX_close_disp(void); | ||
102 | extern unsigned long aX_get_color(Display *disp, int scr, | ||
103 | unsigned long def_col, const char *color_name); | ||
104 | |||
105 | |||
106 | #ifdef __cplusplus | ||
107 | } | ||
108 | #endif | ||
109 | |||
110 | |||
111 | #endif /* _AX_H */ | ||
112 | |||
113 | /* End of ax.h */ | ||
114 | |||
diff --git a/apps/plugins/zxbox/compr.c b/apps/plugins/zxbox/compr.c new file mode 100644 index 0000000000..a82e0ce384 --- /dev/null +++ b/apps/plugins/zxbox/compr.c | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "compr.h" | ||
22 | |||
23 | void compr(void) | ||
24 | { | ||
25 | int j, c, lc, lled, rep, num; | ||
26 | |||
27 | rep = 0; | ||
28 | |||
29 | c = compr_read_byte(); | ||
30 | lc = 0; | ||
31 | num = 0; | ||
32 | |||
33 | while(c >= 0) { | ||
34 | if(lc == 0xED) lled = 1; | ||
35 | else lled = 0; | ||
36 | |||
37 | lc = c; | ||
38 | c = compr_read_byte(); | ||
39 | if(c == lc && num != 255 && (!lled || rep)) { | ||
40 | if(!rep) { | ||
41 | num = 1; | ||
42 | rep = 1; | ||
43 | } | ||
44 | num++; | ||
45 | } | ||
46 | else { | ||
47 | if(rep) { | ||
48 | if(num < 5 && lc != 0xED) for(j = 0; j < num; j++) compr_put_byte(lc); | ||
49 | else{ | ||
50 | compr_put_byte(0xED); | ||
51 | compr_put_byte(0xED); | ||
52 | compr_put_byte(num); | ||
53 | compr_put_byte(lc); | ||
54 | num = 0; | ||
55 | } | ||
56 | rep = 0; | ||
57 | } | ||
58 | else compr_put_byte(lc); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | compr_put_byte(0x00); | ||
63 | compr_put_byte(0xED); | ||
64 | compr_put_byte(0xED); | ||
65 | compr_put_byte(0x00); | ||
66 | } | ||
67 | |||
diff --git a/apps/plugins/zxbox/compr.h b/apps/plugins/zxbox/compr.h new file mode 100644 index 0000000000..25efad879a --- /dev/null +++ b/apps/plugins/zxbox/compr.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef COMPR_H | ||
22 | #define COMPR_H | ||
23 | |||
24 | extern void compr(void); | ||
25 | extern int compr_read_byte(void); | ||
26 | extern void compr_put_byte(int i); | ||
27 | |||
28 | #endif /* COMPR_H */ | ||
diff --git a/apps/plugins/zxbox/helpers.c b/apps/plugins/zxbox/helpers.c new file mode 100644 index 0000000000..dd43434bec --- /dev/null +++ b/apps/plugins/zxbox/helpers.c | |||
@@ -0,0 +1,55 @@ | |||
1 | #include "zxconfig.h" | ||
2 | |||
3 | int my_getc(int fd){ | ||
4 | unsigned char c; | ||
5 | if ( rb->read(fd, &c, 1) ) | ||
6 | return c; | ||
7 | else | ||
8 | return EOF; | ||
9 | } | ||
10 | |||
11 | off_t my_ftell(int fd){ | ||
12 | return rb->lseek(fd, 0, SEEK_CUR); | ||
13 | } | ||
14 | |||
15 | int my_putc(char c , int fd){ | ||
16 | return rb->write(fd,&c,1); | ||
17 | } | ||
18 | |||
19 | void *my_malloc(size_t size) | ||
20 | { | ||
21 | static char *offset = NULL; | ||
22 | static int totalSize = 0; | ||
23 | char *ret; | ||
24 | |||
25 | int remainder = size % 4; | ||
26 | |||
27 | size = size + 4-remainder; | ||
28 | |||
29 | if (offset == NULL) | ||
30 | { | ||
31 | offset = rb->plugin_get_audio_buffer(&totalSize); | ||
32 | } | ||
33 | |||
34 | if (size + 4 > abs(totalSize) ) | ||
35 | { | ||
36 | /* printf("\nMALLOC BARF"); | ||
37 | printf("\nMALLOC BARF"); | ||
38 | printf("\nMALLOC BARF"); | ||
39 | printf("\nMALLOC BARF"); | ||
40 | printf("\nMALLOC BARF"); | ||
41 | printf("\nMALLOC BARF"); | ||
42 | printf("\nMALLOC BARF");*/ | ||
43 | /* We've made our point. */ | ||
44 | |||
45 | return NULL; | ||
46 | } | ||
47 | |||
48 | ret = offset + 4; | ||
49 | *((unsigned int *)offset) = size; | ||
50 | |||
51 | offset += size + 4; | ||
52 | totalSize -= size + 4; | ||
53 | return ret; | ||
54 | |||
55 | } | ||
diff --git a/apps/plugins/zxbox/helpers.h b/apps/plugins/zxbox/helpers.h new file mode 100644 index 0000000000..ba8607d5cb --- /dev/null +++ b/apps/plugins/zxbox/helpers.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef HELPERS_H | ||
2 | #define HELPERS_H | ||
3 | |||
4 | extern int my_getc(int); | ||
5 | extern int my_putc(char,int); | ||
6 | extern off_t my_ftell(int); | ||
7 | extern void *my_malloc(size_t size); | ||
8 | |||
9 | |||
10 | #define getc my_getc | ||
11 | #define malloc my_malloc | ||
12 | #define ftell my_ftell | ||
13 | #define putc my_putc | ||
14 | |||
15 | #endif /* HELPERS_H */ | ||
diff --git a/apps/plugins/zxbox/interf.c b/apps/plugins/zxbox/interf.c new file mode 100644 index 0000000000..b57a46ab1f --- /dev/null +++ b/apps/plugins/zxbox/interf.c | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "zxconfig.h" | ||
22 | #include "interf.h" | ||
23 | |||
24 | #include <stdio.h> | ||
25 | #include <ctype.h> | ||
26 | |||
27 | #define MAXMSGLEN 2048 | ||
28 | |||
29 | char filenamebuf[MAXFILENAME]; | ||
30 | char msgbuf[MAXMSGLEN]; | ||
31 | |||
32 | char *spif_get_filename(void) | ||
33 | { | ||
34 | char *name=NULL; | ||
35 | /* char *name, *s; | ||
36 | |||
37 | s = get_filename_line(); | ||
38 | for(; *s && isspace((int) *s); s++); | ||
39 | name = s; | ||
40 | for(; *s && isgraph((int) *s); s++); | ||
41 | *s = '\0'; | ||
42 | |||
43 | if(name == s) { | ||
44 | printf("Canceled!\n"); | ||
45 | return NULL; | ||
46 | } | ||
47 | */ | ||
48 | return name; | ||
49 | } | ||
50 | |||
51 | char *spif_get_tape_fileinfo(int *startp, int *nump) | ||
52 | { | ||
53 | *startp=*nump=0; | ||
54 | char *name=NULL; | ||
55 | /* char *name, *s; | ||
56 | int res; | ||
57 | |||
58 | s = get_filename_line(); | ||
59 | for(; *s && isspace((int) *s); s++); | ||
60 | name = s; | ||
61 | for(; *s && isgraph((int) *s); s++); | ||
62 | |||
63 | if(name != s) res = 1; | ||
64 | else res = 0; | ||
65 | |||
66 | if(*s) { | ||
67 | *s = '\0'; | ||
68 | s++; | ||
69 | if(*s) { | ||
70 | int r1; | ||
71 | |||
72 | r1 = sscanf(s, "%d %d", startp, nump); | ||
73 | if(r1 > 0) res += r1; | ||
74 | } | ||
75 | } | ||
76 | |||
77 | if(res < 1) { | ||
78 | printf("Canceled!\n"); | ||
79 | return NULL; | ||
80 | } | ||
81 | |||
82 | if(res < 2) *startp = -1; | ||
83 | if(res < 3) *nump = -1; | ||
84 | */ | ||
85 | return name; | ||
86 | } | ||
87 | |||
88 | void put_msg(const char *msg) | ||
89 | { | ||
90 | #ifndef USE_GRAY | ||
91 | rb->splash (HZ/10,true , msg ); | ||
92 | #else | ||
93 | LOGF(msg); | ||
94 | (void)msg; | ||
95 | #endif | ||
96 | } | ||
97 | |||
98 | |||
99 | void put_tmp_msg(const char *msg) | ||
100 | { | ||
101 | #ifndef USE_GRAY | ||
102 | rb->splash (HZ/10,true , msg ); | ||
103 | #else | ||
104 | LOGF(msg); | ||
105 | (void)msg; | ||
106 | #endif | ||
107 | } | ||
108 | |||
diff --git a/apps/plugins/zxbox/interf.h b/apps/plugins/zxbox/interf.h new file mode 100644 index 0000000000..6ab3ae1564 --- /dev/null +++ b/apps/plugins/zxbox/interf.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef INTERF_H | ||
22 | #define INTERF_H | ||
23 | |||
24 | #define MAXFILENAME 1024 | ||
25 | |||
26 | extern char filenamebuf[]; | ||
27 | extern char msgbuf[]; | ||
28 | extern char *spif_get_filename(void); | ||
29 | extern void put_msg(const char *msg); | ||
30 | extern void put_tmp_msg(const char *msg); | ||
31 | |||
32 | #endif /* INTERF_H */ | ||
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h new file mode 100644 index 0000000000..c22a17379e --- /dev/null +++ b/apps/plugins/zxbox/keymaps.h | |||
@@ -0,0 +1,82 @@ | |||
1 | #ifndef KEYMAPS_H | ||
2 | #define KEYMAPS_H | ||
3 | |||
4 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
5 | (CONFIG_KEYPAD == IPOD_3G_PAD) | ||
6 | |||
7 | #define ZX_UP BUTTON_MENU | ||
8 | #define ZX_DOWN BUTTON_PLAY | ||
9 | #define ZX_SELECT BUTTON_SELECT | ||
10 | #define ZX_LEFT BUTTON_LEFT | ||
11 | #define ZX_RIGHT BUTTON_RIGHT | ||
12 | |||
13 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD | ||
14 | |||
15 | #define ZX_UP BUTTON_UP | ||
16 | #define ZX_DOWN BUTTON_DOWN | ||
17 | #define ZX_LEFT BUTTON_LEFT | ||
18 | #define ZX_RIGHT BUTTON_RIGHT | ||
19 | #define ZX_SELECT BUTTON_SELECT | ||
20 | #define ZX_MENU BUTTON_MODE | ||
21 | |||
22 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | ||
23 | |||
24 | #define ZX_UP BUTTON_UP | ||
25 | #define ZX_DOWN BUTTON_DOWN | ||
26 | #define ZX_LEFT BUTTON_LEFT | ||
27 | #define ZX_RIGHT BUTTON_RIGHT | ||
28 | #define ZX_SELECT BUTTON_SELECT | ||
29 | #define ZX_MENU BUTTON_MENU | ||
30 | |||
31 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
32 | |||
33 | #define ZX_RIGHT BUTTON_RIGHT | ||
34 | #define ZX_LEFT BUTTON_LEFT | ||
35 | #define ZX_UP BUTTON_UP | ||
36 | #define ZX_DOWN BUTTON_DOWN | ||
37 | #define ZX_SELECT BUTTON_SELECT | ||
38 | #define ZX_MENU BUTTON_PLAY | ||
39 | |||
40 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
41 | #define ZX_SELECT BUTTON_PLAY | ||
42 | #define ZX_MENU BUTTON_OFF | ||
43 | #define ZX_LEFT BUTTON_LEFT | ||
44 | #define ZX_RIGHT BUTTON_RIGHT | ||
45 | #define ZX_UP BUTTON_UP | ||
46 | #define ZX_DOWN BUTTON_DOWN | ||
47 | |||
48 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
49 | #define ZX_SELECT BUTTON_MENU | ||
50 | #define ZX_MENU BUTTON_OFF | ||
51 | #define ZX_LEFT BUTTON_LEFT | ||
52 | #define ZX_RIGHT BUTTON_RIGHT | ||
53 | #define ZX_UP BUTTON_UP | ||
54 | #define ZX_DOWN BUTTON_DOWN | ||
55 | |||
56 | #elif CONFIG_KEYPAD == GMINI100_PAD | ||
57 | #define ZX_SELECT BUTTON_PLAY | ||
58 | #define ZX_MENU BUTTON_OFF | ||
59 | #define ZX_LEFT BUTTON_LEFT | ||
60 | #define ZX_RIGHT BUTTON_RIGHT | ||
61 | #define ZX_UP BUTTON_UP | ||
62 | #define ZX_DOWN BUTTON_DOWN | ||
63 | |||
64 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | ||
65 | #define ZX_SELECT BUTTON_SELECT | ||
66 | #define ZX_MENU BUTTON_PLAY | ||
67 | #define ZX_LEFT BUTTON_LEFT | ||
68 | #define ZX_RIGHT BUTTON_RIGHT | ||
69 | #define ZX_UP BUTTON_UP | ||
70 | #define ZX_DOWN BUTTON_DOWN | ||
71 | |||
72 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
73 | #define ZX_SELECT BUTTON_REW | ||
74 | #define ZX_MENU BUTTON_FF | ||
75 | #define ZX_LEFT BUTTON_LEFT | ||
76 | #define ZX_RIGHT BUTTON_RIGHT | ||
77 | #define ZX_UP BUTTON_SCROLL_UP | ||
78 | #define ZX_DOWN BUTTON_SCROLL_DOWN | ||
79 | |||
80 | #endif | ||
81 | |||
82 | #endif | ||
diff --git a/apps/plugins/zxbox/keynames.c b/apps/plugins/zxbox/keynames.c new file mode 100644 index 0000000000..3936a35a43 --- /dev/null +++ b/apps/plugins/zxbox/keynames.c | |||
@@ -0,0 +1,201 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include <stdio.h> | ||
22 | |||
23 | const char *spcf_keynames_ascii[95] = { | ||
24 | "space", | ||
25 | "exclam", | ||
26 | "quotedbl", | ||
27 | "numbersign", | ||
28 | "dollar", | ||
29 | "percent", | ||
30 | "ampersand", | ||
31 | "apostrophe", | ||
32 | "parenleft", | ||
33 | "parenright", | ||
34 | "asterisk", | ||
35 | "plus", | ||
36 | "comma", | ||
37 | "minus", | ||
38 | "period", | ||
39 | "slash", | ||
40 | "0", | ||
41 | "1", | ||
42 | "2", | ||
43 | "3", | ||
44 | "4", | ||
45 | "5", | ||
46 | "6", | ||
47 | "7", | ||
48 | "8", | ||
49 | "9", | ||
50 | "colon", | ||
51 | "semicolon", | ||
52 | "less", | ||
53 | "equal", | ||
54 | "greater", | ||
55 | "question", | ||
56 | "at", | ||
57 | "A", | ||
58 | "B", | ||
59 | "C", | ||
60 | "D", | ||
61 | "E", | ||
62 | "F", | ||
63 | "G", | ||
64 | "H", | ||
65 | "I", | ||
66 | "J", | ||
67 | "K", | ||
68 | "L", | ||
69 | "M", | ||
70 | "N", | ||
71 | "O", | ||
72 | "P", | ||
73 | "Q", | ||
74 | "R", | ||
75 | "S", | ||
76 | "T", | ||
77 | "U", | ||
78 | "V", | ||
79 | "W", | ||
80 | "X", | ||
81 | "Y", | ||
82 | "Z", | ||
83 | "bracketleft", | ||
84 | "backslash", | ||
85 | "bracketright", | ||
86 | "asciicircum", | ||
87 | "underscore", | ||
88 | "grave", | ||
89 | "a", | ||
90 | "b", | ||
91 | "c", | ||
92 | "d", | ||
93 | "e", | ||
94 | "f", | ||
95 | "g", | ||
96 | "h", | ||
97 | "i", | ||
98 | "j", | ||
99 | "k", | ||
100 | "l", | ||
101 | "m", | ||
102 | "n", | ||
103 | "o", | ||
104 | "p", | ||
105 | "q", | ||
106 | "r", | ||
107 | "s", | ||
108 | "t", | ||
109 | "u", | ||
110 | "v", | ||
111 | "w", | ||
112 | "x", | ||
113 | "y", | ||
114 | "z", | ||
115 | "braceleft", | ||
116 | "bar", | ||
117 | "braceright", | ||
118 | "asciitilde" | ||
119 | }; | ||
120 | |||
121 | const char *spcf_keynames_misc[256] = { | ||
122 | NULL, NULL, NULL, NULL, | ||
123 | NULL, NULL, NULL, NULL, | ||
124 | "BackSpace", "Tab", "Linefeed", "Clear", | ||
125 | NULL, "Return", NULL, NULL, | ||
126 | |||
127 | NULL, NULL, NULL, "Pause", | ||
128 | "Scroll_Lock", "Sys_Req", NULL, NULL, | ||
129 | NULL, NULL, NULL, "Escape", | ||
130 | NULL, NULL, NULL, NULL, | ||
131 | |||
132 | "Multi_key", NULL, NULL, NULL, | ||
133 | NULL, NULL, NULL, NULL, | ||
134 | NULL, NULL, NULL, NULL, | ||
135 | NULL, NULL, NULL, NULL, | ||
136 | |||
137 | NULL, NULL, NULL, NULL, | ||
138 | NULL, NULL, NULL, NULL, | ||
139 | NULL, NULL, NULL, NULL, | ||
140 | NULL, NULL, NULL, NULL, | ||
141 | |||
142 | NULL, NULL, NULL, NULL, | ||
143 | NULL, NULL, NULL, NULL, | ||
144 | NULL, NULL, NULL, NULL, | ||
145 | NULL, NULL, NULL, NULL, | ||
146 | |||
147 | "Home", "Left", "Up", "Right", | ||
148 | "Down", "Page_Up", "Page_Down", "End", | ||
149 | "Begin", NULL, NULL, NULL, | ||
150 | NULL, NULL, NULL, NULL, | ||
151 | |||
152 | "Select", "Print", "Execute", "Insert", | ||
153 | NULL, "Undo", "Redo", "Menu", | ||
154 | "Find", "Cancel", "Help", "Break", | ||
155 | NULL, NULL, NULL, NULL, | ||
156 | |||
157 | NULL, NULL, NULL, NULL, | ||
158 | NULL, NULL, NULL, NULL, | ||
159 | NULL, NULL, NULL, NULL, | ||
160 | NULL, NULL, "Mode_switch", "Num_Lock", | ||
161 | |||
162 | "KP_Space", NULL, NULL, NULL, | ||
163 | NULL, NULL, NULL, NULL, | ||
164 | "KP_Tab", NULL, NULL, NULL, | ||
165 | NULL, "KP_Enter", NULL, NULL, | ||
166 | |||
167 | NULL, "KP_F1", "KP_F2", "KP_F3", | ||
168 | "KP_F4", "KP_Home", "KP_Left", "KP_Up", | ||
169 | "KP_Right", "KP_Down", "KP_Page_Up", "KP_Page_Down", | ||
170 | "KP_End", "KP_Begin", "KP_Insert", "KP_Delete", | ||
171 | |||
172 | NULL, NULL, NULL, NULL, | ||
173 | NULL, NULL, NULL, NULL, | ||
174 | NULL, NULL, "KP_Multiply", "KP_Add", | ||
175 | "KP_Separator", "KP_Subtract", "KP_Decimal", "KP_Divide", | ||
176 | |||
177 | "KP_0", "KP_1", "KP_2", "KP_3", | ||
178 | "KP_4", "KP_5", "KP_6", "KP_7", | ||
179 | "KP_8", "KP_9", NULL, NULL, | ||
180 | NULL, "KP_Equal", "F1", "F2", | ||
181 | |||
182 | "F3", "F4", "F5", "F6", | ||
183 | "F7", "F8", "F9", "F10", | ||
184 | "F11", "F12", "F13", "F14", | ||
185 | "F15", "F16", "F17", "F18", | ||
186 | |||
187 | "F19", "F20", "F21", "F22", | ||
188 | "F23", "F24", "F25", "F26", | ||
189 | "F27", "F28", "F29", "F30", | ||
190 | "F31", "F32", "F33", "F34", | ||
191 | |||
192 | "F35", "Shift_L", "Shift_R", "Control_L", | ||
193 | "Control_R", "Caps_Lock", "Shift_Lock", "Meta_L", | ||
194 | "Meta_R", "Alt_L", "Alt_R", "Super_L", | ||
195 | "Super_R", "Hyper_L", "Hyper_R", NULL, | ||
196 | |||
197 | NULL, NULL, NULL, NULL, | ||
198 | NULL, NULL, NULL, NULL, | ||
199 | NULL, NULL, NULL, NULL, | ||
200 | NULL, NULL, NULL, "Delete" | ||
201 | }; | ||
diff --git a/apps/plugins/zxbox/loadim.c b/apps/plugins/zxbox/loadim.c new file mode 100644 index 0000000000..5c59e83464 --- /dev/null +++ b/apps/plugins/zxbox/loadim.c | |||
@@ -0,0 +1,134 @@ | |||
1 | /* loadim.c */ | ||
2 | |||
3 | /* | ||
4 | This file was generated by ./bin_to_c from binary image | ||
5 | file `loadim.z80' | ||
6 | */ | ||
7 | |||
8 | unsigned char loadim[] = { | ||
9 | 0x00, 0x40, 0x11, 0x00, 0xCB, 0x5C, 0x59, 0x05, 0x4C, 0xFF, | ||
10 | 0x3F, 0x57, 0x2E, 0x11, 0x00, 0x21, 0x17, 0x9B, 0x36, 0xBC, | ||
11 | 0x7E, 0x00, 0x01, 0x3A, 0x5C, 0xE2, 0x5C, 0x01, 0x01, 0x61, | ||
12 | 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, | ||
13 | 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, | ||
14 | 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, | ||
15 | 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, | ||
16 | 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, | ||
17 | 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, | ||
18 | 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, | ||
19 | 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, | ||
20 | 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, | ||
21 | 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0x18, 0x00, | ||
22 | 0xED, 0xED, 0xFF, 0x38, 0xED, 0xED, 0xFF, 0x38, 0xED, 0xED, | ||
23 | 0xFF, 0x38, 0x38, 0x38, 0x38, 0xED, 0xED, 0xFF, 0x00, 0x00, | ||
24 | 0xFF, 0x00, 0x00, 0x00, 0x0D, 0x05, 0x23, 0x0D, 0x0D, 0x23, | ||
25 | 0x05, 0xED, 0xED, 0x05, 0x00, 0x01, 0x00, 0x06, 0x00, 0x0B, | ||
26 | 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x10, 0xED, 0xED, | ||
27 | 0x1A, 0x00, 0x3C, 0x40, 0x00, 0xFF, 0x8C, 0x01, 0x54, 0xFF, | ||
28 | 0xED, 0xED, 0x05, 0x00, 0xFF, 0xFE, 0xFF, 0x01, 0x38, 0x00, | ||
29 | 0x00, 0xCB, 0x5C, 0x00, 0x00, 0xB6, 0x5C, 0xB6, 0x5C, 0xCB, | ||
30 | 0x5C, 0xD0, 0x5C, 0xCA, 0x5C, 0xCC, 0x5C, 0xCF, 0x5C, 0xCF, | ||
31 | 0x5C, 0x00, 0x00, 0xD1, 0x5C, 0xF3, 0x5C, 0xF3, 0x5C, 0x1B, | ||
32 | 0x92, 0x5C, 0x10, 0x02, 0xED, 0xED, 0x08, 0x00, 0x01, 0x1A, | ||
33 | 0x00, 0x00, 0x93, 0x00, 0x00, 0x58, 0xFF, 0x00, 0x00, 0x21, | ||
34 | 0x00, 0x5B, 0x21, 0x17, 0x00, 0x40, 0xE0, 0x50, 0x21, 0x18, | ||
35 | 0x21, 0x17, 0x01, 0x38, 0x00, 0x38, 0xED, 0xED, 0x22, 0x00, | ||
36 | 0x57, 0xFF, 0xFF, 0xFF, 0xF4, 0x09, 0xA8, 0x10, 0x4B, 0xF4, | ||
37 | 0x09, 0xC4, 0x15, 0x53, 0x81, 0x0F, 0xC4, 0x15, 0x52, 0xF4, | ||
38 | 0x09, 0xC4, 0x15, 0x50, 0x80, 0x80, 0xEF, 0x22, 0x22, 0x0D, | ||
39 | 0x80, 0x00, 0xFF, 0xED, 0xED, 0x09, 0x20, 0x00, 0x00, 0x00, | ||
40 | 0x80, 0xED, 0xED, 0x12, 0x00, 0x80, 0x0D, 0xCE, 0x5C, 0xED, | ||
41 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
42 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
43 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
44 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
45 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
46 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
47 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
48 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
49 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
50 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
51 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
52 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
53 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
54 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
55 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
56 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
57 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
58 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
59 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
60 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
61 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
62 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
63 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
64 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
65 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
66 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
67 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
68 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
69 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
70 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
71 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
72 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
73 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
74 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
75 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
76 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
77 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
78 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
79 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
80 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
81 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
82 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
83 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
84 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
85 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
86 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
87 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
88 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
89 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
90 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
91 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
92 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
93 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
94 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
95 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
96 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
97 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
98 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
99 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
100 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
101 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
102 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
103 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, | ||
104 | 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, | ||
105 | 0xED, 0xFF, 0x00, 0xED, 0xED, 0xFF, 0x00, 0xED, 0xED, 0xC4, | ||
106 | 0x00, 0xF3, 0x0D, 0xCE, 0x0B, 0xE3, 0x50, 0xCE, 0x0B, 0xE4, | ||
107 | 0x50, 0x1D, 0x17, 0xDC, 0x0A, 0xCE, 0x0B, 0xE7, 0x50, 0x1A, | ||
108 | 0x17, 0xDC, 0x0A, 0xD7, 0x18, 0x38, 0x00, 0x38, 0x00, 0x0D, | ||
109 | 0x19, 0xCF, 0x5C, 0xA9, 0x18, 0x06, 0x03, 0x07, 0x5C, 0xB1, | ||
110 | 0x33, 0xB1, 0x33, 0xD6, 0x5C, 0xD0, 0x5C, 0x13, 0x01, 0x5D, | ||
111 | 0x16, 0xA5, 0x16, 0x71, 0x07, 0xE2, 0x5C, 0xCB, 0x5C, 0x76, | ||
112 | 0x1B, 0x03, 0x13, 0x00, 0x3E, 0x00, 0x3C, 0x42, 0x42, 0x7E, | ||
113 | 0x42, 0x42, 0x00, 0x00, 0x7C, 0x42, 0x7C, 0x42, 0x42, 0x7C, | ||
114 | 0x00, 0x00, 0x3C, 0x42, 0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, | ||
115 | 0x78, 0x44, 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x7E, 0x40, | ||
116 | 0x7C, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x7E, 0x40, 0x7C, 0x40, | ||
117 | 0x40, 0x40, 0x00, 0x00, 0x3C, 0x42, 0x40, 0x4E, 0x42, 0x3C, | ||
118 | 0x00, 0x00, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x00, 0x00, | ||
119 | 0x3E, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x02, 0x02, | ||
120 | 0x02, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x44, 0x48, 0x70, 0x48, | ||
121 | 0x44, 0x42, 0x00, 0x00, 0xED, 0xED, 0x05, 0x40, 0x7E, 0x00, | ||
122 | 0x00, 0x42, 0x66, 0x5A, 0x42, 0x42, 0x42, 0x00, 0x00, 0x42, | ||
123 | 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, 0x00, 0x3C, 0x42, 0x42, | ||
124 | 0x42, 0x42, 0x3C, 0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x40, | ||
125 | 0x40, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x52, 0x4A, 0x3C, 0x00, | ||
126 | 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x44, 0x42, 0x00, 0x00, 0x3C, | ||
127 | 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0xFE, 0xED, 0xED, | ||
128 | 0x05, 0x10, 0x00, 0x00, 0xED, 0xED, 0x05, 0x42, 0x3C, 0x00, | ||
129 | 0x00, 0xED, 0xED, 0x00 | ||
130 | }; | ||
131 | |||
132 | const unsigned long loadim_size = 1204; | ||
133 | |||
134 | /* End of loadim.c */ | ||
diff --git a/apps/plugins/zxbox/menu.h b/apps/plugins/zxbox/menu.h new file mode 100644 index 0000000000..b616279880 --- /dev/null +++ b/apps/plugins/zxbox/menu.h | |||
@@ -0,0 +1 @@ | |||
extern bool zxbox_menu(void); | |||
diff --git a/apps/plugins/zxbox/misc.c b/apps/plugins/zxbox/misc.c new file mode 100644 index 0000000000..a5a3c6bbb4 --- /dev/null +++ b/apps/plugins/zxbox/misc.c | |||
@@ -0,0 +1,140 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "misc.h" | ||
22 | #include "zxconfig.h" | ||
23 | #include <stdio.h> | ||
24 | #include <string.h> | ||
25 | #include <stdlib.h> | ||
26 | #include <ctype.h> | ||
27 | #include "helpers.h" | ||
28 | /*#include <errno.h>*/ | ||
29 | #include "zxconfig.h" | ||
30 | #define DIR_SEP_CHAR '/' | ||
31 | |||
32 | char *get_base_name(char *fname) | ||
33 | { | ||
34 | char *p; | ||
35 | |||
36 | p = fname; | ||
37 | for(; *p; p++); | ||
38 | for(; p >= fname && *p != DIR_SEP_CHAR; p--); | ||
39 | return ++p; | ||
40 | } | ||
41 | |||
42 | |||
43 | int check_ext(const char *filename, const char *ext) | ||
44 | { | ||
45 | int flen, elen; | ||
46 | int i; | ||
47 | |||
48 | flen = (int) rb->strlen(filename); | ||
49 | elen = (int) rb->strlen(ext); | ||
50 | |||
51 | if(flen <= elen + 1) return 0; | ||
52 | |||
53 | if(filename[flen-elen-1] != '.') return 0; | ||
54 | for(i = 0; i < elen; i++) if(filename[flen-elen+i] != toupper(ext[i])) break; | ||
55 | if(i == elen) return 1; | ||
56 | for(i = 0; i < elen; i++) if(filename[flen-elen+i] != tolower(ext[i])) break; | ||
57 | if(i == elen) return 1; | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | void add_extension(char *filename, const char *ext) | ||
62 | { | ||
63 | int i; | ||
64 | int upper; | ||
65 | |||
66 | i = (int) rb->strlen(filename); | ||
67 | if(filename[i] > 64 && filename[i] < 96) upper = 1; | ||
68 | else upper = 0; | ||
69 | |||
70 | filename[i++] = '.'; | ||
71 | if(upper) | ||
72 | for(; *ext; i++, ext++) filename[i] = toupper(*ext); | ||
73 | else | ||
74 | for(; *ext; i++, ext++) filename[i] = tolower(*ext); | ||
75 | } | ||
76 | |||
77 | int file_exist(const char *filename) | ||
78 | { | ||
79 | /*FILE *fp;*/ | ||
80 | int fd; | ||
81 | |||
82 | fd = rb->open(filename, O_RDONLY); | ||
83 | if(fd != NULL) { | ||
84 | rb->close(fd); | ||
85 | return 1; | ||
86 | } | ||
87 | else return 0; | ||
88 | /* if(errno == ENOENT) return 0; | ||
89 | return 1;*/ | ||
90 | } | ||
91 | |||
92 | int try_extension(char *filename, const char *ext) | ||
93 | { | ||
94 | int tend; | ||
95 | |||
96 | tend = (int) rb->strlen(filename); | ||
97 | add_extension(filename, ext); | ||
98 | if(file_exist(filename)) return 1; | ||
99 | |||
100 | filename[tend] = '\0'; | ||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | void *malloc_err(size_t size) | ||
105 | { | ||
106 | char *p; | ||
107 | |||
108 | p = (char *) my_malloc(size); | ||
109 | if(p == NULL) { | ||
110 | // fprintf(stderr, "Out of memory!\n"); | ||
111 | /*exit(1);*/ | ||
112 | } | ||
113 | return (void *) p; | ||
114 | } | ||
115 | |||
116 | char *make_string(char *ostr, const char *nstr) | ||
117 | { | ||
118 | if(ostr != NULL) /*free(ostr)*/ostr=0; | ||
119 | ostr = malloc_err(rb->strlen(nstr) + 1); | ||
120 | rb->strcpy(ostr, nstr); | ||
121 | return ostr; | ||
122 | } | ||
123 | |||
124 | void free_string(char *ostr) | ||
125 | { | ||
126 | if(ostr != NULL) /*free(ostr)*/ostr=0; | ||
127 | } | ||
128 | |||
129 | int mis_strcasecmp(const char *s1, const char *s2) | ||
130 | { | ||
131 | int c1, c2; | ||
132 | |||
133 | for(;; s1++, s2++) { | ||
134 | c1 = tolower(*s1); | ||
135 | c2 = tolower(*s2); | ||
136 | |||
137 | if(!c1 || c1 != c2) break; | ||
138 | } | ||
139 | return c1-c2; | ||
140 | } | ||
diff --git a/apps/plugins/zxbox/misc.h b/apps/plugins/zxbox/misc.h new file mode 100644 index 0000000000..2dc9f60105 --- /dev/null +++ b/apps/plugins/zxbox/misc.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef MISC_H | ||
22 | #define MISC_H | ||
23 | |||
24 | #include <sys/types.h> | ||
25 | |||
26 | extern char *get_base_name(char *fname); | ||
27 | extern int check_ext(const char *filename, const char *ext); | ||
28 | extern void add_extension(char *filename, const char *ext); | ||
29 | extern int file_exist(const char *filename); | ||
30 | extern int try_extension(char *filename, const char *ext); | ||
31 | extern char *spif_get_tape_fileinfo(int *startp, int *nump); | ||
32 | extern void *malloc_err(size_t size); | ||
33 | extern char *make_string(char *ostr, const char *nstr); | ||
34 | extern void free_string(char *ostr); | ||
35 | |||
36 | extern int mis_strcasecmp(const char *s1, const char *s2); | ||
37 | |||
38 | #endif /* MISC_H */ | ||
diff --git a/apps/plugins/zxbox/rom_imag.c b/apps/plugins/zxbox/rom_imag.c new file mode 100644 index 0000000000..2b623188d7 --- /dev/null +++ b/apps/plugins/zxbox/rom_imag.c | |||
@@ -0,0 +1,1652 @@ | |||
1 | /* rom_imag.c */ | ||
2 | |||
3 | /* | ||
4 | This file was generated by ./bin_to_c from binary image | ||
5 | file `rom' | ||
6 | */ | ||
7 | |||
8 | unsigned char rom_imag[] = { | ||
9 | 0xF3, 0xAF, 0x11, 0xFF, 0xFF, 0xC3, 0xCB, 0x11, 0x2A, 0x5D, | ||
10 | 0x5C, 0x22, 0x5F, 0x5C, 0x18, 0x43, 0xC3, 0xF2, 0x15, 0xFF, | ||
11 | 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x5D, 0x5C, 0x7E, 0xCD, 0x7D, | ||
12 | 0x00, 0xD0, 0xCD, 0x74, 0x00, 0x18, 0xF7, 0xFF, 0xFF, 0xFF, | ||
13 | 0xC3, 0x5B, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC5, 0x2A, | ||
14 | 0x61, 0x5C, 0xE5, 0xC3, 0x9E, 0x16, 0xF5, 0xE5, 0x2A, 0x78, | ||
15 | 0x5C, 0x23, 0x22, 0x78, 0x5C, 0x7C, 0xB5, 0x20, 0x03, 0xFD, | ||
16 | 0x34, 0x40, 0xC5, 0xD5, 0xCD, 0xBF, 0x02, 0xD1, 0xC1, 0xE1, | ||
17 | 0xF1, 0xFB, 0xC9, 0xE1, 0x6E, 0xFD, 0x75, 0x00, 0xED, 0x7B, | ||
18 | 0x3D, 0x5C, 0xC3, 0xC5, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
19 | 0xFF, 0xFF, 0xF5, 0xE5, 0x2A, 0xB0, 0x5C, 0x7C, 0xB5, 0x20, | ||
20 | 0x01, 0xE9, 0xE1, 0xF1, 0xED, 0x45, 0x2A, 0x5D, 0x5C, 0x23, | ||
21 | 0x22, 0x5D, 0x5C, 0x7E, 0xC9, 0xFE, 0x21, 0xD0, 0xFE, 0x0D, | ||
22 | 0xC8, 0xFE, 0x10, 0xD8, 0xFE, 0x18, 0x3F, 0xD8, 0x23, 0xFE, | ||
23 | 0x16, 0x38, 0x01, 0x23, 0x37, 0x22, 0x5D, 0x5C, 0xC9, 0xBF, | ||
24 | 0x52, 0x4E, 0xC4, 0x49, 0x4E, 0x4B, 0x45, 0x59, 0xA4, 0x50, | ||
25 | 0xC9, 0x46, 0xCE, 0x50, 0x4F, 0x49, 0x4E, 0xD4, 0x53, 0x43, | ||
26 | 0x52, 0x45, 0x45, 0x4E, 0xA4, 0x41, 0x54, 0x54, 0xD2, 0x41, | ||
27 | 0xD4, 0x54, 0x41, 0xC2, 0x56, 0x41, 0x4C, 0xA4, 0x43, 0x4F, | ||
28 | 0x44, 0xC5, 0x56, 0x41, 0xCC, 0x4C, 0x45, 0xCE, 0x53, 0x49, | ||
29 | 0xCE, 0x43, 0x4F, 0xD3, 0x54, 0x41, 0xCE, 0x41, 0x53, 0xCE, | ||
30 | 0x41, 0x43, 0xD3, 0x41, 0x54, 0xCE, 0x4C, 0xCE, 0x45, 0x58, | ||
31 | 0xD0, 0x49, 0x4E, 0xD4, 0x53, 0x51, 0xD2, 0x53, 0x47, 0xCE, | ||
32 | 0x41, 0x42, 0xD3, 0x50, 0x45, 0x45, 0xCB, 0x49, 0xCE, 0x55, | ||
33 | 0x53, 0xD2, 0x53, 0x54, 0x52, 0xA4, 0x43, 0x48, 0x52, 0xA4, | ||
34 | 0x4E, 0x4F, 0xD4, 0x42, 0x49, 0xCE, 0x4F, 0xD2, 0x41, 0x4E, | ||
35 | 0xC4, 0x3C, 0xBD, 0x3E, 0xBD, 0x3C, 0xBE, 0x4C, 0x49, 0x4E, | ||
36 | 0xC5, 0x54, 0x48, 0x45, 0xCE, 0x54, 0xCF, 0x53, 0x54, 0x45, | ||
37 | 0xD0, 0x44, 0x45, 0x46, 0x20, 0x46, 0xCE, 0x43, 0x41, 0xD4, | ||
38 | 0x46, 0x4F, 0x52, 0x4D, 0x41, 0xD4, 0x4D, 0x4F, 0x56, 0xC5, | ||
39 | 0x45, 0x52, 0x41, 0x53, 0xC5, 0x4F, 0x50, 0x45, 0x4E, 0x20, | ||
40 | 0xA3, 0x43, 0x4C, 0x4F, 0x53, 0x45, 0x20, 0xA3, 0x4D, 0x45, | ||
41 | 0x52, 0x47, 0xC5, 0x56, 0x45, 0x52, 0x49, 0x46, 0xD9, 0x42, | ||
42 | 0x45, 0x45, 0xD0, 0x43, 0x49, 0x52, 0x43, 0x4C, 0xC5, 0x49, | ||
43 | 0x4E, 0xCB, 0x50, 0x41, 0x50, 0x45, 0xD2, 0x46, 0x4C, 0x41, | ||
44 | 0x53, 0xC8, 0x42, 0x52, 0x49, 0x47, 0x48, 0xD4, 0x49, 0x4E, | ||
45 | 0x56, 0x45, 0x52, 0x53, 0xC5, 0x4F, 0x56, 0x45, 0xD2, 0x4F, | ||
46 | 0x55, 0xD4, 0x4C, 0x50, 0x52, 0x49, 0x4E, 0xD4, 0x4C, 0x4C, | ||
47 | 0x49, 0x53, 0xD4, 0x53, 0x54, 0x4F, 0xD0, 0x52, 0x45, 0x41, | ||
48 | 0xC4, 0x44, 0x41, 0x54, 0xC1, 0x52, 0x45, 0x53, 0x54, 0x4F, | ||
49 | 0x52, 0xC5, 0x4E, 0x45, 0xD7, 0x42, 0x4F, 0x52, 0x44, 0x45, | ||
50 | 0xD2, 0x43, 0x4F, 0x4E, 0x54, 0x49, 0x4E, 0x55, 0xC5, 0x44, | ||
51 | 0x49, 0xCD, 0x52, 0x45, 0xCD, 0x46, 0x4F, 0xD2, 0x47, 0x4F, | ||
52 | 0x20, 0x54, 0xCF, 0x47, 0x4F, 0x20, 0x53, 0x55, 0xC2, 0x49, | ||
53 | 0x4E, 0x50, 0x55, 0xD4, 0x4C, 0x4F, 0x41, 0xC4, 0x4C, 0x49, | ||
54 | 0x53, 0xD4, 0x4C, 0x45, 0xD4, 0x50, 0x41, 0x55, 0x53, 0xC5, | ||
55 | 0x4E, 0x45, 0x58, 0xD4, 0x50, 0x4F, 0x4B, 0xC5, 0x50, 0x52, | ||
56 | 0x49, 0x4E, 0xD4, 0x50, 0x4C, 0x4F, 0xD4, 0x52, 0x55, 0xCE, | ||
57 | 0x53, 0x41, 0x56, 0xC5, 0x52, 0x41, 0x4E, 0x44, 0x4F, 0x4D, | ||
58 | 0x49, 0x5A, 0xC5, 0x49, 0xC6, 0x43, 0x4C, 0xD3, 0x44, 0x52, | ||
59 | 0x41, 0xD7, 0x43, 0x4C, 0x45, 0x41, 0xD2, 0x52, 0x45, 0x54, | ||
60 | 0x55, 0x52, 0xCE, 0x43, 0x4F, 0x50, 0xD9, 0x42, 0x48, 0x59, | ||
61 | 0x36, 0x35, 0x54, 0x47, 0x56, 0x4E, 0x4A, 0x55, 0x37, 0x34, | ||
62 | 0x52, 0x46, 0x43, 0x4D, 0x4B, 0x49, 0x38, 0x33, 0x45, 0x44, | ||
63 | 0x58, 0x0E, 0x4C, 0x4F, 0x39, 0x32, 0x57, 0x53, 0x5A, 0x20, | ||
64 | 0x0D, 0x50, 0x30, 0x31, 0x51, 0x41, 0xE3, 0xC4, 0xE0, 0xE4, | ||
65 | 0xB4, 0xBC, 0xBD, 0xBB, 0xAF, 0xB0, 0xB1, 0xC0, 0xA7, 0xA6, | ||
66 | 0xBE, 0xAD, 0xB2, 0xBA, 0xE5, 0xA5, 0xC2, 0xE1, 0xB3, 0xB9, | ||
67 | 0xC1, 0xB8, 0x7E, 0xDC, 0xDA, 0x5C, 0xB7, 0x7B, 0x7D, 0xD8, | ||
68 | 0xBF, 0xAE, 0xAA, 0xAB, 0xDD, 0xDE, 0xDF, 0x7F, 0xB5, 0xD6, | ||
69 | 0x7C, 0xD5, 0x5D, 0xDB, 0xB6, 0xD9, 0x5B, 0xD7, 0x0C, 0x07, | ||
70 | 0x06, 0x04, 0x05, 0x08, 0x0A, 0x0B, 0x09, 0x0F, 0xE2, 0x2A, | ||
71 | 0x3F, 0xCD, 0xC8, 0xCC, 0xCB, 0x5E, 0xAC, 0x2D, 0x2B, 0x3D, | ||
72 | 0x2E, 0x2C, 0x3B, 0x22, 0xC7, 0x3C, 0xC3, 0x3E, 0xC5, 0x2F, | ||
73 | 0xC9, 0x60, 0xC6, 0x3A, 0xD0, 0xCE, 0xA8, 0xCA, 0xD3, 0xD4, | ||
74 | 0xD1, 0xD2, 0xA9, 0xCF, 0x2E, 0x2F, 0x11, 0xFF, 0xFF, 0x01, | ||
75 | 0xFE, 0xFE, 0xED, 0x78, 0x2F, 0xE6, 0x1F, 0x28, 0x0E, 0x67, | ||
76 | 0x7D, 0x14, 0xC0, 0xD6, 0x08, 0xCB, 0x3C, 0x30, 0xFA, 0x53, | ||
77 | 0x5F, 0x20, 0xF4, 0x2D, 0xCB, 0x00, 0x38, 0xE6, 0x7A, 0x3C, | ||
78 | 0xC8, 0xFE, 0x28, 0xC8, 0xFE, 0x19, 0xC8, 0x7B, 0x5A, 0x57, | ||
79 | 0xFE, 0x18, 0xC9, 0xCD, 0x8E, 0x02, 0xC0, 0x21, 0x00, 0x5C, | ||
80 | 0xCB, 0x7E, 0x20, 0x07, 0x23, 0x35, 0x2B, 0x20, 0x02, 0x36, | ||
81 | 0xFF, 0x7D, 0x21, 0x04, 0x5C, 0xBD, 0x20, 0xEE, 0xCD, 0x1E, | ||
82 | 0x03, 0xD0, 0x21, 0x00, 0x5C, 0xBE, 0x28, 0x2E, 0xEB, 0x21, | ||
83 | 0x04, 0x5C, 0xBE, 0x28, 0x27, 0xCB, 0x7E, 0x20, 0x04, 0xEB, | ||
84 | 0xCB, 0x7E, 0xC8, 0x5F, 0x77, 0x23, 0x36, 0x05, 0x23, 0x3A, | ||
85 | 0x09, 0x5C, 0x77, 0x23, 0xFD, 0x4E, 0x07, 0xFD, 0x56, 0x01, | ||
86 | 0xE5, 0xCD, 0x33, 0x03, 0xE1, 0x77, 0x32, 0x08, 0x5C, 0xFD, | ||
87 | 0xCB, 0x01, 0xEE, 0xC9, 0x23, 0x36, 0x05, 0x23, 0x35, 0xC0, | ||
88 | 0x3A, 0x0A, 0x5C, 0x77, 0x23, 0x7E, 0x18, 0xEA, 0x42, 0x16, | ||
89 | 0x00, 0x7B, 0xFE, 0x27, 0xD0, 0xFE, 0x18, 0x20, 0x03, 0xCB, | ||
90 | 0x78, 0xC0, 0x21, 0x05, 0x02, 0x19, 0x7E, 0x37, 0xC9, 0x7B, | ||
91 | 0xFE, 0x3A, 0x38, 0x2F, 0x0D, 0xFA, 0x4F, 0x03, 0x28, 0x03, | ||
92 | 0xC6, 0x4F, 0xC9, 0x21, 0xEB, 0x01, 0x04, 0x28, 0x03, 0x21, | ||
93 | 0x05, 0x02, 0x16, 0x00, 0x19, 0x7E, 0xC9, 0x21, 0x29, 0x02, | ||
94 | 0xCB, 0x40, 0x28, 0xF4, 0xCB, 0x5A, 0x28, 0x0A, 0xFD, 0xCB, | ||
95 | 0x30, 0x5E, 0xC0, 0x04, 0xC0, 0xC6, 0x20, 0xC9, 0xC6, 0xA5, | ||
96 | 0xC9, 0xFE, 0x30, 0xD8, 0x0D, 0xFA, 0x9D, 0x03, 0x20, 0x19, | ||
97 | 0x21, 0x54, 0x02, 0xCB, 0x68, 0x28, 0xD3, 0xFE, 0x38, 0x30, | ||
98 | 0x07, 0xD6, 0x20, 0x04, 0xC8, 0xC6, 0x08, 0xC9, 0xD6, 0x36, | ||
99 | 0x04, 0xC8, 0xC6, 0xFE, 0xC9, 0x21, 0x30, 0x02, 0xFE, 0x39, | ||
100 | 0x28, 0xBA, 0xFE, 0x30, 0x28, 0xB6, 0xE6, 0x07, 0xC6, 0x80, | ||
101 | 0x04, 0xC8, 0xEE, 0x0F, 0xC9, 0x04, 0xC8, 0xCB, 0x68, 0x21, | ||
102 | 0x30, 0x02, 0x20, 0xA4, 0xD6, 0x10, 0xFE, 0x22, 0x28, 0x06, | ||
103 | 0xFE, 0x20, 0xC0, 0x3E, 0x5F, 0xC9, 0x3E, 0x40, 0xC9, 0xF3, | ||
104 | 0x7D, 0xCB, 0x3D, 0xCB, 0x3D, 0x2F, 0xE6, 0x03, 0x4F, 0x06, | ||
105 | 0x00, 0xDD, 0x21, 0xD1, 0x03, 0xDD, 0x09, 0x3A, 0x48, 0x5C, | ||
106 | 0xE6, 0x38, 0x0F, 0x0F, 0x0F, 0xF6, 0x08, 0x00, 0x00, 0x00, | ||
107 | 0x04, 0x0C, 0x0D, 0x20, 0xFD, 0x0E, 0x3F, 0x05, 0xC2, 0xD6, | ||
108 | 0x03, 0xEE, 0x10, 0xD3, 0xFE, 0x44, 0x4F, 0xCB, 0x67, 0x20, | ||
109 | 0x09, 0x7A, 0xB3, 0x28, 0x09, 0x79, 0x4D, 0x1B, 0xDD, 0xE9, | ||
110 | 0x4D, 0x0C, 0xDD, 0xE9, 0xFB, 0xC9, 0xEF, 0x31, 0x27, 0xC0, | ||
111 | 0x03, 0x34, 0xEC, 0x6C, 0x98, 0x1F, 0xF5, 0x04, 0xA1, 0x0F, | ||
112 | 0x38, 0x21, 0x92, 0x5C, 0x7E, 0xA7, 0x20, 0x5E, 0x23, 0x4E, | ||
113 | 0x23, 0x46, 0x78, 0x17, 0x9F, 0xB9, 0x20, 0x54, 0x23, 0xBE, | ||
114 | 0x20, 0x50, 0x78, 0xC6, 0x3C, 0xF2, 0x25, 0x04, 0xE2, 0x6C, | ||
115 | 0x04, 0x06, 0xFA, 0x04, 0xD6, 0x0C, 0x30, 0xFB, 0xC6, 0x0C, | ||
116 | 0xC5, 0x21, 0x6E, 0x04, 0xCD, 0x06, 0x34, 0xCD, 0xB4, 0x33, | ||
117 | 0xEF, 0x04, 0x38, 0xF1, 0x86, 0x77, 0xEF, 0xC0, 0x02, 0x31, | ||
118 | 0x38, 0xCD, 0x94, 0x1E, 0xFE, 0x0B, 0x30, 0x22, 0xEF, 0xE0, | ||
119 | 0x04, 0xE0, 0x34, 0x80, 0x43, 0x55, 0x9F, 0x80, 0x01, 0x05, | ||
120 | 0x34, 0x35, 0x71, 0x03, 0x38, 0xCD, 0x99, 0x1E, 0xC5, 0xCD, | ||
121 | 0x99, 0x1E, 0xE1, 0x50, 0x59, 0x7A, 0xB3, 0xC8, 0x1B, 0xC3, | ||
122 | 0xB5, 0x03, 0xCF, 0x0A, 0x89, 0x02, 0xD0, 0x12, 0x86, 0x89, | ||
123 | 0x0A, 0x97, 0x60, 0x75, 0x89, 0x12, 0xD5, 0x17, 0x1F, 0x89, | ||
124 | 0x1B, 0x90, 0x41, 0x02, 0x89, 0x24, 0xD0, 0x53, 0xCA, 0x89, | ||
125 | 0x2E, 0x9D, 0x36, 0xB1, 0x89, 0x38, 0xFF, 0x49, 0x3E, 0x89, | ||
126 | 0x43, 0xFF, 0x6A, 0x73, 0x89, 0x4F, 0xA7, 0x00, 0x54, 0x89, | ||
127 | 0x5C, 0x00, 0x00, 0x00, 0x89, 0x69, 0x14, 0xF6, 0x24, 0x89, | ||
128 | 0x76, 0xF1, 0x10, 0x05, 0xCD, 0xFB, 0x24, 0x3A, 0x3B, 0x5C, | ||
129 | 0x87, 0xFA, 0x8A, 0x1C, 0xE1, 0xD0, 0xE5, 0xCD, 0xF1, 0x2B, | ||
130 | 0x62, 0x6B, 0x0D, 0xF8, 0x09, 0xCB, 0xFE, 0xC9, 0x21, 0x3F, | ||
131 | 0x05, 0xE5, 0x21, 0x80, 0x1F, 0xCB, 0x7F, 0x28, 0x03, 0x21, | ||
132 | 0x98, 0x0C, 0x08, 0x13, 0xDD, 0x2B, 0xF3, 0x3E, 0x02, 0x47, | ||
133 | 0x10, 0xFE, 0xD3, 0xFE, 0xEE, 0x0F, 0x06, 0xA4, 0x2D, 0x20, | ||
134 | 0xF5, 0x05, 0x25, 0xF2, 0xD8, 0x04, 0x06, 0x2F, 0x10, 0xFE, | ||
135 | 0xD3, 0xFE, 0x3E, 0x0D, 0x06, 0x37, 0x10, 0xFE, 0xD3, 0xFE, | ||
136 | 0x01, 0x0E, 0x3B, 0x08, 0x6F, 0xC3, 0x07, 0x05, 0x7A, 0xB3, | ||
137 | 0x28, 0x0C, 0xDD, 0x6E, 0x00, 0x7C, 0xAD, 0x67, 0x3E, 0x01, | ||
138 | 0x37, 0xC3, 0x25, 0x05, 0x6C, 0x18, 0xF4, 0x79, 0xCB, 0x78, | ||
139 | 0x10, 0xFE, 0x30, 0x04, 0x06, 0x42, 0x10, 0xFE, 0xD3, 0xFE, | ||
140 | 0x06, 0x3E, 0x20, 0xEF, 0x05, 0xAF, 0x3C, 0xCB, 0x15, 0xC2, | ||
141 | 0x14, 0x05, 0x1B, 0xDD, 0x23, 0x06, 0x31, 0x3E, 0x7F, 0xDB, | ||
142 | 0xFE, 0x1F, 0xD0, 0x7A, 0x3C, 0xC2, 0xFE, 0x04, 0x06, 0x3B, | ||
143 | 0x10, 0xFE, 0xC9, 0xF5, 0x3A, 0x48, 0x5C, 0xE6, 0x38, 0x0F, | ||
144 | 0x0F, 0x0F, 0xD3, 0xFE, 0x3E, 0x7F, 0xDB, 0xFE, 0x1F, 0xFB, | ||
145 | 0x38, 0x02, 0xCF, 0x0C, 0xF1, 0xC9, 0x14, 0x08, 0x15, 0xF3, | ||
146 | 0x3E, 0x0F, 0xD3, 0xFE, 0x21, 0x3F, 0x05, 0xE5, 0xDB, 0xFE, | ||
147 | 0x1F, 0xE6, 0x20, 0xF6, 0x02, 0x4F, 0xBF, 0xC0, 0xCD, 0xE7, | ||
148 | 0x05, 0x30, 0xFA, 0x21, 0x15, 0x04, 0x10, 0xFE, 0x2B, 0x7C, | ||
149 | 0xB5, 0x20, 0xF9, 0xCD, 0xE3, 0x05, 0x30, 0xEB, 0x06, 0x9C, | ||
150 | 0xCD, 0xE3, 0x05, 0x30, 0xE4, 0x3E, 0xC6, 0xB8, 0x30, 0xE0, | ||
151 | 0x24, 0x20, 0xF1, 0x06, 0xC9, 0xCD, 0xE7, 0x05, 0x30, 0xD5, | ||
152 | 0x78, 0xFE, 0xD4, 0x30, 0xF4, 0xCD, 0xE7, 0x05, 0xD0, 0x79, | ||
153 | 0xEE, 0x03, 0x4F, 0x26, 0x00, 0x06, 0xB0, 0x18, 0x1F, 0x08, | ||
154 | 0x20, 0x07, 0x30, 0x0F, 0xDD, 0x75, 0x00, 0x18, 0x0F, 0xCB, | ||
155 | 0x11, 0xAD, 0xC0, 0x79, 0x1F, 0x4F, 0x13, 0x18, 0x07, 0xDD, | ||
156 | 0x7E, 0x00, 0xAD, 0xC0, 0xDD, 0x23, 0x1B, 0x08, 0x06, 0xB2, | ||
157 | 0x2E, 0x01, 0xCD, 0xE3, 0x05, 0xD0, 0x3E, 0xCB, 0xB8, 0xCB, | ||
158 | 0x15, 0x06, 0xB0, 0xD2, 0xCA, 0x05, 0x7C, 0xAD, 0x67, 0x7A, | ||
159 | 0xB3, 0x20, 0xCA, 0x7C, 0xFE, 0x01, 0xC9, 0xCD, 0xE7, 0x05, | ||
160 | 0xD0, 0x3E, 0x16, 0x3D, 0x20, 0xFD, 0xA7, 0x04, 0xC8, 0x3E, | ||
161 | 0x7F, 0xDB, 0xFE, 0x1F, 0xD0, 0xA9, 0xE6, 0x20, 0x28, 0xF3, | ||
162 | 0x79, 0x2F, 0x4F, 0xE6, 0x07, 0xF6, 0x08, 0xD3, 0xFE, 0x37, | ||
163 | 0xC9, 0xF1, 0x3A, 0x74, 0x5C, 0xD6, 0xE0, 0x32, 0x74, 0x5C, | ||
164 | 0xCD, 0x8C, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x3C, 0x01, 0x11, | ||
165 | 0x00, 0x3A, 0x74, 0x5C, 0xA7, 0x28, 0x02, 0x0E, 0x22, 0xF7, | ||
166 | 0xD5, 0xDD, 0xE1, 0x06, 0x0B, 0x3E, 0x20, 0x12, 0x13, 0x10, | ||
167 | 0xFC, 0xDD, 0x36, 0x01, 0xFF, 0xCD, 0xF1, 0x2B, 0x21, 0xF6, | ||
168 | 0xFF, 0x0B, 0x09, 0x03, 0x30, 0x0F, 0x3A, 0x74, 0x5C, 0xA7, | ||
169 | 0x20, 0x02, 0xCF, 0x0E, 0x78, 0xB1, 0x28, 0x0A, 0x01, 0x0A, | ||
170 | 0x00, 0xDD, 0xE5, 0xE1, 0x23, 0xEB, 0xED, 0xB0, 0xDF, 0xFE, | ||
171 | 0xE4, 0x20, 0x49, 0x3A, 0x74, 0x5C, 0xFE, 0x03, 0xCA, 0x8A, | ||
172 | 0x1C, 0xE7, 0xCD, 0xB2, 0x28, 0xCB, 0xF9, 0x30, 0x0B, 0x21, | ||
173 | 0x00, 0x00, 0x3A, 0x74, 0x5C, 0x3D, 0x28, 0x15, 0xCF, 0x01, | ||
174 | 0xC2, 0x8A, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x18, 0x23, 0x7E, | ||
175 | 0xDD, 0x77, 0x0B, 0x23, 0x7E, 0xDD, 0x77, 0x0C, 0x23, 0xDD, | ||
176 | 0x71, 0x0E, 0x3E, 0x01, 0xCB, 0x71, 0x28, 0x01, 0x3C, 0xDD, | ||
177 | 0x77, 0x00, 0xEB, 0xE7, 0xFE, 0x29, 0x20, 0xDA, 0xE7, 0xCD, | ||
178 | 0xEE, 0x1B, 0xEB, 0xC3, 0x5A, 0x07, 0xFE, 0xAA, 0x20, 0x1F, | ||
179 | 0x3A, 0x74, 0x5C, 0xFE, 0x03, 0xCA, 0x8A, 0x1C, 0xE7, 0xCD, | ||
180 | 0xEE, 0x1B, 0xDD, 0x36, 0x0B, 0x00, 0xDD, 0x36, 0x0C, 0x1B, | ||
181 | 0x21, 0x00, 0x40, 0xDD, 0x75, 0x0D, 0xDD, 0x74, 0x0E, 0x18, | ||
182 | 0x4D, 0xFE, 0xAF, 0x20, 0x4F, 0x3A, 0x74, 0x5C, 0xFE, 0x03, | ||
183 | 0xCA, 0x8A, 0x1C, 0xE7, 0xCD, 0x48, 0x20, 0x20, 0x0C, 0x3A, | ||
184 | 0x74, 0x5C, 0xA7, 0xCA, 0x8A, 0x1C, 0xCD, 0xE6, 0x1C, 0x18, | ||
185 | 0x0F, 0xCD, 0x82, 0x1C, 0xDF, 0xFE, 0x2C, 0x28, 0x0C, 0x3A, | ||
186 | 0x74, 0x5C, 0xA7, 0xCA, 0x8A, 0x1C, 0xCD, 0xE6, 0x1C, 0x18, | ||
187 | 0x04, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xCD, 0x99, | ||
188 | 0x1E, 0xDD, 0x71, 0x0B, 0xDD, 0x70, 0x0C, 0xCD, 0x99, 0x1E, | ||
189 | 0xDD, 0x71, 0x0D, 0xDD, 0x70, 0x0E, 0x60, 0x69, 0xDD, 0x36, | ||
190 | 0x00, 0x03, 0x18, 0x44, 0xFE, 0xCA, 0x28, 0x09, 0xCD, 0xEE, | ||
191 | 0x1B, 0xDD, 0x36, 0x0E, 0x80, 0x18, 0x17, 0x3A, 0x74, 0x5C, | ||
192 | 0xA7, 0xC2, 0x8A, 0x1C, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, | ||
193 | 0x1B, 0xCD, 0x99, 0x1E, 0xDD, 0x71, 0x0D, 0xDD, 0x70, 0x0E, | ||
194 | 0xDD, 0x36, 0x00, 0x00, 0x2A, 0x59, 0x5C, 0xED, 0x5B, 0x53, | ||
195 | 0x5C, 0x37, 0xED, 0x52, 0xDD, 0x75, 0x0B, 0xDD, 0x74, 0x0C, | ||
196 | 0x2A, 0x4B, 0x5C, 0xED, 0x52, 0xDD, 0x75, 0x0F, 0xDD, 0x74, | ||
197 | 0x10, 0xEB, 0x3A, 0x74, 0x5C, 0xA7, 0xCA, 0x70, 0x09, 0xE5, | ||
198 | 0x01, 0x11, 0x00, 0xDD, 0x09, 0xDD, 0xE5, 0x11, 0x11, 0x00, | ||
199 | 0xAF, 0x37, 0xCD, 0x56, 0x05, 0xDD, 0xE1, 0x30, 0xF2, 0x3E, | ||
200 | 0xFE, 0xCD, 0x01, 0x16, 0xFD, 0x36, 0x52, 0x03, 0x0E, 0x80, | ||
201 | 0xDD, 0x7E, 0x00, 0xDD, 0xBE, 0xEF, 0x20, 0x02, 0x0E, 0xF6, | ||
202 | 0xFE, 0x04, 0x30, 0xD9, 0x11, 0xC0, 0x09, 0xC5, 0xCD, 0x0A, | ||
203 | 0x0C, 0xC1, 0xDD, 0xE5, 0xD1, 0x21, 0xF0, 0xFF, 0x19, 0x06, | ||
204 | 0x0A, 0x7E, 0x3C, 0x20, 0x03, 0x79, 0x80, 0x4F, 0x13, 0x1A, | ||
205 | 0xBE, 0x23, 0x20, 0x01, 0x0C, 0xD7, 0x10, 0xF6, 0xCB, 0x79, | ||
206 | 0x20, 0xB3, 0x3E, 0x0D, 0xD7, 0xE1, 0xDD, 0x7E, 0x00, 0xFE, | ||
207 | 0x03, 0x28, 0x0C, 0x3A, 0x74, 0x5C, 0x3D, 0xCA, 0x08, 0x08, | ||
208 | 0xFE, 0x02, 0xCA, 0xB6, 0x08, 0xE5, 0xDD, 0x6E, 0xFA, 0xDD, | ||
209 | 0x66, 0xFB, 0xDD, 0x5E, 0x0B, 0xDD, 0x56, 0x0C, 0x7C, 0xB5, | ||
210 | 0x28, 0x0D, 0xED, 0x52, 0x38, 0x26, 0x28, 0x07, 0xDD, 0x7E, | ||
211 | 0x00, 0xFE, 0x03, 0x20, 0x1D, 0xE1, 0x7C, 0xB5, 0x20, 0x06, | ||
212 | 0xDD, 0x6E, 0x0D, 0xDD, 0x66, 0x0E, 0xE5, 0xDD, 0xE1, 0x3A, | ||
213 | 0x74, 0x5C, 0xFE, 0x02, 0x37, 0x20, 0x01, 0xA7, 0x3E, 0xFF, | ||
214 | 0xCD, 0x56, 0x05, 0xD8, 0xCF, 0x1A, 0xDD, 0x5E, 0x0B, 0xDD, | ||
215 | 0x56, 0x0C, 0xE5, 0x7C, 0xB5, 0x20, 0x06, 0x13, 0x13, 0x13, | ||
216 | 0xEB, 0x18, 0x0C, 0xDD, 0x6E, 0xFA, 0xDD, 0x66, 0xFB, 0xEB, | ||
217 | 0x37, 0xED, 0x52, 0x38, 0x09, 0x11, 0x05, 0x00, 0x19, 0x44, | ||
218 | 0x4D, 0xCD, 0x05, 0x1F, 0xE1, 0xDD, 0x7E, 0x00, 0xA7, 0x28, | ||
219 | 0x3E, 0x7C, 0xB5, 0x28, 0x13, 0x2B, 0x46, 0x2B, 0x4E, 0x2B, | ||
220 | 0x03, 0x03, 0x03, 0xDD, 0x22, 0x5F, 0x5C, 0xCD, 0xE8, 0x19, | ||
221 | 0xDD, 0x2A, 0x5F, 0x5C, 0x2A, 0x59, 0x5C, 0x2B, 0xDD, 0x4E, | ||
222 | 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0x03, 0x03, 0x03, 0xDD, 0x7E, | ||
223 | 0xFD, 0xF5, 0xCD, 0x55, 0x16, 0x23, 0xF1, 0x77, 0xD1, 0x23, | ||
224 | 0x73, 0x23, 0x72, 0x23, 0xE5, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, | ||
225 | 0xC3, 0x02, 0x08, 0xEB, 0x2A, 0x59, 0x5C, 0x2B, 0xDD, 0x22, | ||
226 | 0x5F, 0x5C, 0xDD, 0x4E, 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0xCD, | ||
227 | 0xE5, 0x19, 0xC1, 0xE5, 0xC5, 0xCD, 0x55, 0x16, 0xDD, 0x2A, | ||
228 | 0x5F, 0x5C, 0x23, 0xDD, 0x4E, 0x0F, 0xDD, 0x46, 0x10, 0x09, | ||
229 | 0x22, 0x4B, 0x5C, 0xDD, 0x66, 0x0E, 0x7C, 0xE6, 0xC0, 0x20, | ||
230 | 0x0A, 0xDD, 0x6E, 0x0D, 0x22, 0x42, 0x5C, 0xFD, 0x36, 0x0A, | ||
231 | 0x00, 0xD1, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, 0xC3, 0x02, 0x08, | ||
232 | 0xDD, 0x4E, 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0x03, 0xF7, 0x36, | ||
233 | 0x80, 0xEB, 0xD1, 0xE5, 0xE5, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, | ||
234 | 0xCD, 0x02, 0x08, 0xE1, 0xED, 0x5B, 0x53, 0x5C, 0x7E, 0xE6, | ||
235 | 0xC0, 0x20, 0x19, 0x1A, 0x13, 0xBE, 0x23, 0x20, 0x02, 0x1A, | ||
236 | 0xBE, 0x1B, 0x2B, 0x30, 0x08, 0xE5, 0xEB, 0xCD, 0xB8, 0x19, | ||
237 | 0xE1, 0x18, 0xEC, 0xCD, 0x2C, 0x09, 0x18, 0xE2, 0x7E, 0x4F, | ||
238 | 0xFE, 0x80, 0xC8, 0xE5, 0x2A, 0x4B, 0x5C, 0x7E, 0xFE, 0x80, | ||
239 | 0x28, 0x25, 0xB9, 0x28, 0x08, 0xC5, 0xCD, 0xB8, 0x19, 0xC1, | ||
240 | 0xEB, 0x18, 0xF0, 0xE6, 0xE0, 0xFE, 0xA0, 0x20, 0x12, 0xD1, | ||
241 | 0xD5, 0xE5, 0x23, 0x13, 0x1A, 0xBE, 0x20, 0x06, 0x17, 0x30, | ||
242 | 0xF7, 0xE1, 0x18, 0x03, 0xE1, 0x18, 0xE0, 0x3E, 0xFF, 0xD1, | ||
243 | 0xEB, 0x3C, 0x37, 0xCD, 0x2C, 0x09, 0x18, 0xC4, 0x20, 0x10, | ||
244 | 0x08, 0x22, 0x5F, 0x5C, 0xEB, 0xCD, 0xB8, 0x19, 0xCD, 0xE8, | ||
245 | 0x19, 0xEB, 0x2A, 0x5F, 0x5C, 0x08, 0x08, 0xD5, 0xCD, 0xB8, | ||
246 | 0x19, 0x22, 0x5F, 0x5C, 0x2A, 0x53, 0x5C, 0xE3, 0xC5, 0x08, | ||
247 | 0x38, 0x07, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x18, 0x03, 0xCD, | ||
248 | 0x55, 0x16, 0x23, 0xC1, 0xD1, 0xED, 0x53, 0x53, 0x5C, 0xED, | ||
249 | 0x5B, 0x5F, 0x5C, 0xC5, 0xD5, 0xEB, 0xED, 0xB0, 0xE1, 0xC1, | ||
250 | 0xD5, 0xCD, 0xE8, 0x19, 0xD1, 0xC9, 0xE5, 0x3E, 0xFD, 0xCD, | ||
251 | 0x01, 0x16, 0xAF, 0x11, 0xA1, 0x09, 0xCD, 0x0A, 0x0C, 0xFD, | ||
252 | 0xCB, 0x02, 0xEE, 0xCD, 0xD4, 0x15, 0xDD, 0xE5, 0x11, 0x11, | ||
253 | 0x00, 0xAF, 0xCD, 0xC2, 0x04, 0xDD, 0xE1, 0x06, 0x32, 0x76, | ||
254 | 0x10, 0xFD, 0xDD, 0x5E, 0x0B, 0xDD, 0x56, 0x0C, 0x3E, 0xFF, | ||
255 | 0xDD, 0xE1, 0xC3, 0xC2, 0x04, 0x80, 0x53, 0x74, 0x61, 0x72, | ||
256 | 0x74, 0x20, 0x74, 0x61, 0x70, 0x65, 0x2C, 0x20, 0x74, 0x68, | ||
257 | 0x65, 0x6E, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, | ||
258 | 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0xAE, 0x0D, 0x50, 0x72, | ||
259 | 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x3A, 0xA0, 0x0D, 0x4E, 0x75, | ||
260 | 0x6D, 0x62, 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, | ||
261 | 0x3A, 0xA0, 0x0D, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, | ||
262 | 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3A, 0xA0, | ||
263 | 0x0D, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3A, 0xA0, 0xCD, 0x03, | ||
264 | 0x0B, 0xFE, 0x20, 0xD2, 0xD9, 0x0A, 0xFE, 0x06, 0x38, 0x69, | ||
265 | 0xFE, 0x18, 0x30, 0x65, 0x21, 0x0B, 0x0A, 0x5F, 0x16, 0x00, | ||
266 | 0x19, 0x5E, 0x19, 0xE5, 0xC3, 0x03, 0x0B, 0x4E, 0x57, 0x10, | ||
267 | 0x29, 0x54, 0x53, 0x52, 0x37, 0x50, 0x4F, 0x5F, 0x5E, 0x5D, | ||
268 | 0x5C, 0x5B, 0x5A, 0x54, 0x53, 0x0C, 0x3E, 0x22, 0xB9, 0x20, | ||
269 | 0x11, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x09, 0x04, 0x0E, 0x02, | ||
270 | 0x3E, 0x18, 0xB8, 0x20, 0x03, 0x05, 0x0E, 0x21, 0xC3, 0xD9, | ||
271 | 0x0D, 0x3A, 0x91, 0x5C, 0xF5, 0xFD, 0x36, 0x57, 0x01, 0x3E, | ||
272 | 0x20, 0xCD, 0x65, 0x0B, 0xF1, 0x32, 0x91, 0x5C, 0xC9, 0xFD, | ||
273 | 0xCB, 0x01, 0x4E, 0xC2, 0xCD, 0x0E, 0x0E, 0x21, 0xCD, 0x55, | ||
274 | 0x0C, 0x05, 0xC3, 0xD9, 0x0D, 0xCD, 0x03, 0x0B, 0x79, 0x3D, | ||
275 | 0x3D, 0xE6, 0x10, 0x18, 0x5A, 0x3E, 0x3F, 0x18, 0x6C, 0x11, | ||
276 | 0x87, 0x0A, 0x32, 0x0F, 0x5C, 0x18, 0x0B, 0x11, 0x6D, 0x0A, | ||
277 | 0x18, 0x03, 0x11, 0x87, 0x0A, 0x32, 0x0E, 0x5C, 0x2A, 0x51, | ||
278 | 0x5C, 0x73, 0x23, 0x72, 0xC9, 0x11, 0xF4, 0x09, 0xCD, 0x80, | ||
279 | 0x0A, 0x2A, 0x0E, 0x5C, 0x57, 0x7D, 0xFE, 0x16, 0xDA, 0x11, | ||
280 | 0x22, 0x20, 0x29, 0x44, 0x4A, 0x3E, 0x1F, 0x91, 0x38, 0x0C, | ||
281 | 0xC6, 0x02, 0x4F, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x16, 0x3E, | ||
282 | 0x16, 0x90, 0xDA, 0x9F, 0x1E, 0x3C, 0x47, 0x04, 0xFD, 0xCB, | ||
283 | 0x02, 0x46, 0xC2, 0x55, 0x0C, 0xFD, 0xBE, 0x31, 0xDA, 0x86, | ||
284 | 0x0C, 0xC3, 0xD9, 0x0D, 0x7C, 0xCD, 0x03, 0x0B, 0x81, 0x3D, | ||
285 | 0xE6, 0x1F, 0xC8, 0x57, 0xFD, 0xCB, 0x01, 0xC6, 0x3E, 0x20, | ||
286 | 0xCD, 0x3B, 0x0C, 0x15, 0x20, 0xF8, 0xC9, 0xCD, 0x24, 0x0B, | ||
287 | 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x1A, 0xFD, 0xCB, 0x02, 0x46, | ||
288 | 0x20, 0x08, 0xED, 0x43, 0x88, 0x5C, 0x22, 0x84, 0x5C, 0xC9, | ||
289 | 0xED, 0x43, 0x8A, 0x5C, 0xED, 0x43, 0x82, 0x5C, 0x22, 0x86, | ||
290 | 0x5C, 0xC9, 0xFD, 0x71, 0x45, 0x22, 0x80, 0x5C, 0xC9, 0xFD, | ||
291 | 0xCB, 0x01, 0x4E, 0x20, 0x14, 0xED, 0x4B, 0x88, 0x5C, 0x2A, | ||
292 | 0x84, 0x5C, 0xFD, 0xCB, 0x02, 0x46, 0xC8, 0xED, 0x4B, 0x8A, | ||
293 | 0x5C, 0x2A, 0x86, 0x5C, 0xC9, 0xFD, 0x4E, 0x45, 0x2A, 0x80, | ||
294 | 0x5C, 0xC9, 0xFE, 0x80, 0x38, 0x3D, 0xFE, 0x90, 0x30, 0x26, | ||
295 | 0x47, 0xCD, 0x38, 0x0B, 0xCD, 0x03, 0x0B, 0x11, 0x92, 0x5C, | ||
296 | 0x18, 0x47, 0x21, 0x92, 0x5C, 0xCD, 0x3E, 0x0B, 0xCB, 0x18, | ||
297 | 0x9F, 0xE6, 0x0F, 0x4F, 0xCB, 0x18, 0x9F, 0xE6, 0xF0, 0xB1, | ||
298 | 0x0E, 0x04, 0x77, 0x23, 0x0D, 0x20, 0xFB, 0xC9, 0xD6, 0xA5, | ||
299 | 0x30, 0x09, 0xC6, 0x15, 0xC5, 0xED, 0x4B, 0x7B, 0x5C, 0x18, | ||
300 | 0x0B, 0xCD, 0x10, 0x0C, 0xC3, 0x03, 0x0B, 0xC5, 0xED, 0x4B, | ||
301 | 0x36, 0x5C, 0xEB, 0x21, 0x3B, 0x5C, 0xCB, 0x86, 0xFE, 0x20, | ||
302 | 0x20, 0x02, 0xCB, 0xC6, 0x26, 0x00, 0x6F, 0x29, 0x29, 0x29, | ||
303 | 0x09, 0xC1, 0xEB, 0x79, 0x3D, 0x3E, 0x21, 0x20, 0x0E, 0x05, | ||
304 | 0x4F, 0xFD, 0xCB, 0x01, 0x4E, 0x28, 0x06, 0xD5, 0xCD, 0xCD, | ||
305 | 0x0E, 0xD1, 0x79, 0xB9, 0xD5, 0xCC, 0x55, 0x0C, 0xD1, 0xC5, | ||
306 | 0xE5, 0x3A, 0x91, 0x5C, 0x06, 0xFF, 0x1F, 0x38, 0x01, 0x04, | ||
307 | 0x1F, 0x1F, 0x9F, 0x4F, 0x3E, 0x08, 0xA7, 0xFD, 0xCB, 0x01, | ||
308 | 0x4E, 0x28, 0x05, 0xFD, 0xCB, 0x30, 0xCE, 0x37, 0xEB, 0x08, | ||
309 | 0x1A, 0xA0, 0xAE, 0xA9, 0x12, 0x08, 0x38, 0x13, 0x14, 0x23, | ||
310 | 0x3D, 0x20, 0xF2, 0xEB, 0x25, 0xFD, 0xCB, 0x01, 0x4E, 0xCC, | ||
311 | 0xDB, 0x0B, 0xE1, 0xC1, 0x0D, 0x23, 0xC9, 0x08, 0x3E, 0x20, | ||
312 | 0x83, 0x5F, 0x08, 0x18, 0xE6, 0x7C, 0x0F, 0x0F, 0x0F, 0xE6, | ||
313 | 0x03, 0xF6, 0x58, 0x67, 0xED, 0x5B, 0x8F, 0x5C, 0x7E, 0xAB, | ||
314 | 0xA2, 0xAB, 0xFD, 0xCB, 0x57, 0x76, 0x28, 0x08, 0xE6, 0xC7, | ||
315 | 0xCB, 0x57, 0x20, 0x02, 0xEE, 0x38, 0xFD, 0xCB, 0x57, 0x66, | ||
316 | 0x28, 0x08, 0xE6, 0xF8, 0xCB, 0x6F, 0x20, 0x02, 0xEE, 0x07, | ||
317 | 0x77, 0xC9, 0xE5, 0x26, 0x00, 0xE3, 0x18, 0x04, 0x11, 0x95, | ||
318 | 0x00, 0xF5, 0xCD, 0x41, 0x0C, 0x38, 0x09, 0x3E, 0x20, 0xFD, | ||
319 | 0xCB, 0x01, 0x46, 0xCC, 0x3B, 0x0C, 0x1A, 0xE6, 0x7F, 0xCD, | ||
320 | 0x3B, 0x0C, 0x1A, 0x13, 0x87, 0x30, 0xF5, 0xD1, 0xFE, 0x48, | ||
321 | 0x28, 0x03, 0xFE, 0x82, 0xD8, 0x7A, 0xFE, 0x03, 0xD8, 0x3E, | ||
322 | 0x20, 0xD5, 0xD9, 0xD7, 0xD9, 0xD1, 0xC9, 0xF5, 0xEB, 0x3C, | ||
323 | 0xCB, 0x7E, 0x23, 0x28, 0xFB, 0x3D, 0x20, 0xF8, 0xEB, 0xF1, | ||
324 | 0xFE, 0x20, 0xD8, 0x1A, 0xD6, 0x41, 0xC9, 0xFD, 0xCB, 0x01, | ||
325 | 0x4E, 0xC0, 0x11, 0xD9, 0x0D, 0xD5, 0x78, 0xFD, 0xCB, 0x02, | ||
326 | 0x46, 0xC2, 0x02, 0x0D, 0xFD, 0xBE, 0x31, 0x38, 0x1B, 0xC0, | ||
327 | 0xFD, 0xCB, 0x02, 0x66, 0x28, 0x16, 0xFD, 0x5E, 0x2D, 0x1D, | ||
328 | 0x28, 0x5A, 0x3E, 0x00, 0xCD, 0x01, 0x16, 0xED, 0x7B, 0x3F, | ||
329 | 0x5C, 0xFD, 0xCB, 0x02, 0xA6, 0xC9, 0xCF, 0x04, 0xFD, 0x35, | ||
330 | 0x52, 0x20, 0x45, 0x3E, 0x18, 0x90, 0x32, 0x8C, 0x5C, 0x2A, | ||
331 | 0x8F, 0x5C, 0xE5, 0x3A, 0x91, 0x5C, 0xF5, 0x3E, 0xFD, 0xCD, | ||
332 | 0x01, 0x16, 0xAF, 0x11, 0xF8, 0x0C, 0xCD, 0x0A, 0x0C, 0xFD, | ||
333 | 0xCB, 0x02, 0xEE, 0x21, 0x3B, 0x5C, 0xCB, 0xDE, 0xCB, 0xAE, | ||
334 | 0xD9, 0xCD, 0xD4, 0x15, 0xD9, 0xFE, 0x20, 0x28, 0x45, 0xFE, | ||
335 | 0xE2, 0x28, 0x41, 0xF6, 0x20, 0xFE, 0x6E, 0x28, 0x3B, 0x3E, | ||
336 | 0xFE, 0xCD, 0x01, 0x16, 0xF1, 0x32, 0x91, 0x5C, 0xE1, 0x22, | ||
337 | 0x8F, 0x5C, 0xCD, 0xFE, 0x0D, 0xFD, 0x46, 0x31, 0x04, 0x0E, | ||
338 | 0x21, 0xC5, 0xCD, 0x9B, 0x0E, 0x7C, 0x0F, 0x0F, 0x0F, 0xE6, | ||
339 | 0x03, 0xF6, 0x58, 0x67, 0x11, 0xE0, 0x5A, 0x1A, 0x4E, 0x06, | ||
340 | 0x20, 0xEB, 0x12, 0x71, 0x13, 0x23, 0x10, 0xFA, 0xC1, 0xC9, | ||
341 | 0x80, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0xBF, 0xCF, 0x0C, | ||
342 | 0xFE, 0x02, 0x38, 0x80, 0xFD, 0x86, 0x31, 0xD6, 0x19, 0xD0, | ||
343 | 0xED, 0x44, 0xC5, 0x47, 0x2A, 0x8F, 0x5C, 0xE5, 0x2A, 0x91, | ||
344 | 0x5C, 0xE5, 0xCD, 0x4D, 0x0D, 0x78, 0xF5, 0x21, 0x6B, 0x5C, | ||
345 | 0x46, 0x78, 0x3C, 0x77, 0x21, 0x89, 0x5C, 0xBE, 0x38, 0x03, | ||
346 | 0x34, 0x06, 0x18, 0xCD, 0x00, 0x0E, 0xF1, 0x3D, 0x20, 0xE8, | ||
347 | 0xE1, 0xFD, 0x75, 0x57, 0xE1, 0x22, 0x8F, 0x5C, 0xED, 0x4B, | ||
348 | 0x88, 0x5C, 0xFD, 0xCB, 0x02, 0x86, 0xCD, 0xD9, 0x0D, 0xFD, | ||
349 | 0xCB, 0x02, 0xC6, 0xC1, 0xC9, 0xAF, 0x2A, 0x8D, 0x5C, 0xFD, | ||
350 | 0xCB, 0x02, 0x46, 0x28, 0x04, 0x67, 0xFD, 0x6E, 0x0E, 0x22, | ||
351 | 0x8F, 0x5C, 0x21, 0x91, 0x5C, 0x20, 0x02, 0x7E, 0x0F, 0xAE, | ||
352 | 0xE6, 0x55, 0xAE, 0x77, 0xC9, 0xCD, 0xAF, 0x0D, 0x21, 0x3C, | ||
353 | 0x5C, 0xCB, 0xAE, 0xCB, 0xC6, 0xCD, 0x4D, 0x0D, 0xFD, 0x46, | ||
354 | 0x31, 0xCD, 0x44, 0x0E, 0x21, 0xC0, 0x5A, 0x3A, 0x8D, 0x5C, | ||
355 | 0x05, 0x18, 0x07, 0x0E, 0x20, 0x2B, 0x77, 0x0D, 0x20, 0xFB, | ||
356 | 0x10, 0xF7, 0xFD, 0x36, 0x31, 0x02, 0x3E, 0xFD, 0xCD, 0x01, | ||
357 | 0x16, 0x2A, 0x51, 0x5C, 0x11, 0xF4, 0x09, 0xA7, 0x73, 0x23, | ||
358 | 0x72, 0x23, 0x11, 0xA8, 0x10, 0x3F, 0x38, 0xF6, 0x01, 0x21, | ||
359 | 0x17, 0x18, 0x2A, 0x21, 0x00, 0x00, 0x22, 0x7D, 0x5C, 0xFD, | ||
360 | 0xCB, 0x30, 0x86, 0xCD, 0x94, 0x0D, 0x3E, 0xFE, 0xCD, 0x01, | ||
361 | 0x16, 0xCD, 0x4D, 0x0D, 0x06, 0x18, 0xCD, 0x44, 0x0E, 0x2A, | ||
362 | 0x51, 0x5C, 0x11, 0xF4, 0x09, 0x73, 0x23, 0x72, 0xFD, 0x36, | ||
363 | 0x52, 0x01, 0x01, 0x21, 0x18, 0x21, 0x00, 0x5B, 0xFD, 0xCB, | ||
364 | 0x01, 0x4E, 0x20, 0x12, 0x78, 0xFD, 0xCB, 0x02, 0x46, 0x28, | ||
365 | 0x05, 0xFD, 0x86, 0x31, 0xD6, 0x18, 0xC5, 0x47, 0xCD, 0x9B, | ||
366 | 0x0E, 0xC1, 0x3E, 0x21, 0x91, 0x5F, 0x16, 0x00, 0x19, 0xC3, | ||
367 | 0xDC, 0x0A, 0x06, 0x17, 0xCD, 0x9B, 0x0E, 0x0E, 0x08, 0xC5, | ||
368 | 0xE5, 0x78, 0xE6, 0x07, 0x78, 0x20, 0x0C, 0xEB, 0x21, 0xE0, | ||
369 | 0xF8, 0x19, 0xEB, 0x01, 0x20, 0x00, 0x3D, 0xED, 0xB0, 0xEB, | ||
370 | 0x21, 0xE0, 0xFF, 0x19, 0xEB, 0x47, 0xE6, 0x07, 0x0F, 0x0F, | ||
371 | 0x0F, 0x4F, 0x78, 0x06, 0x00, 0xED, 0xB0, 0x06, 0x07, 0x09, | ||
372 | 0xE6, 0xF8, 0x20, 0xDB, 0xE1, 0x24, 0xC1, 0x0D, 0x20, 0xCD, | ||
373 | 0xCD, 0x88, 0x0E, 0x21, 0xE0, 0xFF, 0x19, 0xEB, 0xED, 0xB0, | ||
374 | 0x06, 0x01, 0xC5, 0xCD, 0x9B, 0x0E, 0x0E, 0x08, 0xC5, 0xE5, | ||
375 | 0x78, 0xE6, 0x07, 0x0F, 0x0F, 0x0F, 0x4F, 0x78, 0x06, 0x00, | ||
376 | 0x0D, 0x54, 0x5D, 0x36, 0x00, 0x13, 0xED, 0xB0, 0x11, 0x01, | ||
377 | 0x07, 0x19, 0x3D, 0xE6, 0xF8, 0x47, 0x20, 0xE5, 0xE1, 0x24, | ||
378 | 0xC1, 0x0D, 0x20, 0xDC, 0xCD, 0x88, 0x0E, 0x62, 0x6B, 0x13, | ||
379 | 0x3A, 0x8D, 0x5C, 0xFD, 0xCB, 0x02, 0x46, 0x28, 0x03, 0x3A, | ||
380 | 0x48, 0x5C, 0x77, 0x0B, 0xED, 0xB0, 0xC1, 0x0E, 0x21, 0xC9, | ||
381 | 0x7C, 0x0F, 0x0F, 0x0F, 0x3D, 0xF6, 0x50, 0x67, 0xEB, 0x61, | ||
382 | 0x68, 0x29, 0x29, 0x29, 0x29, 0x29, 0x44, 0x4D, 0xC9, 0x3E, | ||
383 | 0x18, 0x90, 0x57, 0x0F, 0x0F, 0x0F, 0xE6, 0xE0, 0x6F, 0x7A, | ||
384 | 0xE6, 0x18, 0xF6, 0x40, 0x67, 0xC9, 0xF3, 0x06, 0xB0, 0x21, | ||
385 | 0x00, 0x40, 0xE5, 0xC5, 0xCD, 0xF4, 0x0E, 0xC1, 0xE1, 0x24, | ||
386 | 0x7C, 0xE6, 0x07, 0x20, 0x0A, 0x7D, 0xC6, 0x20, 0x6F, 0x3F, | ||
387 | 0x9F, 0xE6, 0xF8, 0x84, 0x67, 0x10, 0xE7, 0x18, 0x0D, 0xF3, | ||
388 | 0x21, 0x00, 0x5B, 0x06, 0x08, 0xC5, 0xCD, 0xF4, 0x0E, 0xC1, | ||
389 | 0x10, 0xF9, 0x3E, 0x04, 0xD3, 0xFB, 0xFB, 0x21, 0x00, 0x5B, | ||
390 | 0xFD, 0x75, 0x46, 0xAF, 0x47, 0x77, 0x23, 0x10, 0xFC, 0xFD, | ||
391 | 0xCB, 0x30, 0x8E, 0x0E, 0x21, 0xC3, 0xD9, 0x0D, 0x78, 0xFE, | ||
392 | 0x03, 0x9F, 0xE6, 0x02, 0xD3, 0xFB, 0x57, 0xCD, 0x54, 0x1F, | ||
393 | 0x38, 0x0A, 0x3E, 0x04, 0xD3, 0xFB, 0xFB, 0xCD, 0xDF, 0x0E, | ||
394 | 0xCF, 0x0C, 0xDB, 0xFB, 0x87, 0xF8, 0x30, 0xEB, 0x0E, 0x20, | ||
395 | 0x5E, 0x23, 0x06, 0x08, 0xCB, 0x12, 0xCB, 0x13, 0xCB, 0x1A, | ||
396 | 0xDB, 0xFB, 0x1F, 0x30, 0xFB, 0x7A, 0xD3, 0xFB, 0x10, 0xF0, | ||
397 | 0x0D, 0x20, 0xE9, 0xC9, 0x2A, 0x3D, 0x5C, 0xE5, 0x21, 0x7F, | ||
398 | 0x10, 0xE5, 0xED, 0x73, 0x3D, 0x5C, 0xCD, 0xD4, 0x15, 0xF5, | ||
399 | 0x16, 0x00, 0xFD, 0x5E, 0xFF, 0x21, 0xC8, 0x00, 0xCD, 0xB5, | ||
400 | 0x03, 0xF1, 0x21, 0x38, 0x0F, 0xE5, 0xFE, 0x18, 0x30, 0x31, | ||
401 | 0xFE, 0x07, 0x38, 0x2D, 0xFE, 0x10, 0x38, 0x3A, 0x01, 0x02, | ||
402 | 0x00, 0x57, 0xFE, 0x16, 0x38, 0x0C, 0x03, 0xFD, 0xCB, 0x37, | ||
403 | 0x7E, 0xCA, 0x1E, 0x10, 0xCD, 0xD4, 0x15, 0x5F, 0xCD, 0xD4, | ||
404 | 0x15, 0xD5, 0x2A, 0x5B, 0x5C, 0xFD, 0xCB, 0x07, 0x86, 0xCD, | ||
405 | 0x55, 0x16, 0xC1, 0x23, 0x70, 0x23, 0x71, 0x18, 0x0A, 0xFD, | ||
406 | 0xCB, 0x07, 0x86, 0x2A, 0x5B, 0x5C, 0xCD, 0x52, 0x16, 0x12, | ||
407 | 0x13, 0xED, 0x53, 0x5B, 0x5C, 0xC9, 0x5F, 0x16, 0x00, 0x21, | ||
408 | 0x99, 0x0F, 0x19, 0x5E, 0x19, 0xE5, 0x2A, 0x5B, 0x5C, 0xC9, | ||
409 | 0x09, 0x66, 0x6A, 0x50, 0xB5, 0x70, 0x7E, 0xCF, 0xD4, 0x2A, | ||
410 | 0x49, 0x5C, 0xFD, 0xCB, 0x37, 0x6E, 0xC2, 0x97, 0x10, 0xCD, | ||
411 | 0x6E, 0x19, 0xCD, 0x95, 0x16, 0x7A, 0xB3, 0xCA, 0x97, 0x10, | ||
412 | 0xE5, 0x23, 0x4E, 0x23, 0x46, 0x21, 0x0A, 0x00, 0x09, 0x44, | ||
413 | 0x4D, 0xCD, 0x05, 0x1F, 0xCD, 0x97, 0x10, 0x2A, 0x51, 0x5C, | ||
414 | 0xE3, 0xE5, 0x3E, 0xFF, 0xCD, 0x01, 0x16, 0xE1, 0x2B, 0xFD, | ||
415 | 0x35, 0x0F, 0xCD, 0x55, 0x18, 0xFD, 0x34, 0x0F, 0x2A, 0x59, | ||
416 | 0x5C, 0x23, 0x23, 0x23, 0x23, 0x22, 0x5B, 0x5C, 0xE1, 0xCD, | ||
417 | 0x15, 0x16, 0xC9, 0xFD, 0xCB, 0x37, 0x6E, 0x20, 0x08, 0x21, | ||
418 | 0x49, 0x5C, 0xCD, 0x0F, 0x19, 0x18, 0x6D, 0xFD, 0x36, 0x00, | ||
419 | 0x10, 0x18, 0x1D, 0xCD, 0x31, 0x10, 0x18, 0x05, 0x7E, 0xFE, | ||
420 | 0x0D, 0xC8, 0x23, 0x22, 0x5B, 0x5C, 0xC9, 0xCD, 0x31, 0x10, | ||
421 | 0x01, 0x01, 0x00, 0xC3, 0xE8, 0x19, 0xCD, 0xD4, 0x15, 0xCD, | ||
422 | 0xD4, 0x15, 0xE1, 0xE1, 0xE1, 0x22, 0x3D, 0x5C, 0xFD, 0xCB, | ||
423 | 0x00, 0x7E, 0xC0, 0xF9, 0xC9, 0x37, 0xCD, 0x95, 0x11, 0xED, | ||
424 | 0x52, 0x19, 0x23, 0xC1, 0xD8, 0xC5, 0x44, 0x4D, 0x62, 0x6B, | ||
425 | 0x23, 0x1A, 0xE6, 0xF0, 0xFE, 0x10, 0x20, 0x09, 0x23, 0x1A, | ||
426 | 0xD6, 0x17, 0xCE, 0x00, 0x20, 0x01, 0x23, 0xA7, 0xED, 0x42, | ||
427 | 0x09, 0xEB, 0x38, 0xE6, 0xC9, 0xFD, 0xCB, 0x37, 0x6E, 0xC0, | ||
428 | 0x2A, 0x49, 0x5C, 0xCD, 0x6E, 0x19, 0xEB, 0xCD, 0x95, 0x16, | ||
429 | 0x21, 0x4A, 0x5C, 0xCD, 0x1C, 0x19, 0xCD, 0x95, 0x17, 0x3E, | ||
430 | 0x00, 0xC3, 0x01, 0x16, 0xFD, 0xCB, 0x37, 0x7E, 0x28, 0xA8, | ||
431 | 0xC3, 0x81, 0x0F, 0xFD, 0xCB, 0x30, 0x66, 0x28, 0xA1, 0xFD, | ||
432 | 0x36, 0x00, 0xFF, 0x16, 0x00, 0xFD, 0x5E, 0xFE, 0x21, 0x90, | ||
433 | 0x1A, 0xCD, 0xB5, 0x03, 0xC3, 0x30, 0x0F, 0xE5, 0xCD, 0x90, | ||
434 | 0x11, 0x2B, 0xCD, 0xE5, 0x19, 0x22, 0x5B, 0x5C, 0xFD, 0x36, | ||
435 | 0x07, 0x00, 0xE1, 0xC9, 0xFD, 0xCB, 0x02, 0x5E, 0xC4, 0x1D, | ||
436 | 0x11, 0xA7, 0xFD, 0xCB, 0x01, 0x6E, 0xC8, 0x3A, 0x08, 0x5C, | ||
437 | 0xFD, 0xCB, 0x01, 0xAE, 0xF5, 0xFD, 0xCB, 0x02, 0x6E, 0xC4, | ||
438 | 0x6E, 0x0D, 0xF1, 0xFE, 0x20, 0x30, 0x52, 0xFE, 0x10, 0x30, | ||
439 | 0x2D, 0xFE, 0x06, 0x30, 0x0A, 0x47, 0xE6, 0x01, 0x4F, 0x78, | ||
440 | 0x1F, 0xC6, 0x12, 0x18, 0x2A, 0x20, 0x09, 0x21, 0x6A, 0x5C, | ||
441 | 0x3E, 0x08, 0xAE, 0x77, 0x18, 0x0E, 0xFE, 0x0E, 0xD8, 0xD6, | ||
442 | 0x0D, 0x21, 0x41, 0x5C, 0xBE, 0x77, 0x20, 0x02, 0x36, 0x00, | ||
443 | 0xFD, 0xCB, 0x02, 0xDE, 0xBF, 0xC9, 0x47, 0xE6, 0x07, 0x4F, | ||
444 | 0x3E, 0x10, 0xCB, 0x58, 0x20, 0x01, 0x3C, 0xFD, 0x71, 0xD3, | ||
445 | 0x11, 0x0D, 0x11, 0x18, 0x06, 0x3A, 0x0D, 0x5C, 0x11, 0xA8, | ||
446 | 0x10, 0x2A, 0x4F, 0x5C, 0x23, 0x23, 0x73, 0x23, 0x72, 0x37, | ||
447 | 0xC9, 0xCD, 0x4D, 0x0D, 0xFD, 0xCB, 0x02, 0x9E, 0xFD, 0xCB, | ||
448 | 0x02, 0xAE, 0x2A, 0x8A, 0x5C, 0xE5, 0x2A, 0x3D, 0x5C, 0xE5, | ||
449 | 0x21, 0x67, 0x11, 0xE5, 0xED, 0x73, 0x3D, 0x5C, 0x2A, 0x82, | ||
450 | 0x5C, 0xE5, 0x37, 0xCD, 0x95, 0x11, 0xEB, 0xCD, 0x7D, 0x18, | ||
451 | 0xEB, 0xCD, 0xE1, 0x18, 0x2A, 0x8A, 0x5C, 0xE3, 0xEB, 0xCD, | ||
452 | 0x4D, 0x0D, 0x3A, 0x8B, 0x5C, 0x92, 0x38, 0x26, 0x20, 0x06, | ||
453 | 0x7B, 0xFD, 0x96, 0x50, 0x30, 0x1E, 0x3E, 0x20, 0xD5, 0xCD, | ||
454 | 0xF4, 0x09, 0xD1, 0x18, 0xE9, 0x16, 0x00, 0xFD, 0x5E, 0xFE, | ||
455 | 0x21, 0x90, 0x1A, 0xCD, 0xB5, 0x03, 0xFD, 0x36, 0x00, 0xFF, | ||
456 | 0xED, 0x5B, 0x8A, 0x5C, 0x18, 0x02, 0xD1, 0xE1, 0xE1, 0x22, | ||
457 | 0x3D, 0x5C, 0xC1, 0xD5, 0xCD, 0xD9, 0x0D, 0xE1, 0x22, 0x82, | ||
458 | 0x5C, 0xFD, 0x36, 0x26, 0x00, 0xC9, 0x2A, 0x61, 0x5C, 0x2B, | ||
459 | 0xA7, 0xED, 0x5B, 0x59, 0x5C, 0xFD, 0xCB, 0x37, 0x6E, 0xC8, | ||
460 | 0xED, 0x5B, 0x61, 0x5C, 0xD8, 0x2A, 0x63, 0x5C, 0xC9, 0x7E, | ||
461 | 0xFE, 0x0E, 0x01, 0x06, 0x00, 0xCC, 0xE8, 0x19, 0x7E, 0x23, | ||
462 | 0xFE, 0x0D, 0x20, 0xF1, 0xC9, 0xF3, 0x3E, 0xFF, 0xED, 0x5B, | ||
463 | 0xB2, 0x5C, 0xD9, 0xED, 0x4B, 0xB4, 0x5C, 0xED, 0x5B, 0x38, | ||
464 | 0x5C, 0x2A, 0x7B, 0x5C, 0xD9, 0x47, 0x3E, 0x07, 0xD3, 0xFE, | ||
465 | 0x3E, 0x3F, 0xED, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
466 | 0x62, 0x6B, 0x36, 0x02, 0x2B, 0xBC, 0x20, 0xFA, 0xA7, 0xED, | ||
467 | 0x52, 0x19, 0x23, 0x30, 0x06, 0x35, 0x28, 0x03, 0x35, 0x28, | ||
468 | 0xF3, 0x2B, 0xD9, 0xED, 0x43, 0xB4, 0x5C, 0xED, 0x53, 0x38, | ||
469 | 0x5C, 0x22, 0x7B, 0x5C, 0xD9, 0x04, 0x28, 0x19, 0x22, 0xB4, | ||
470 | 0x5C, 0x11, 0xAF, 0x3E, 0x01, 0xA8, 0x00, 0xEB, 0xED, 0xB8, | ||
471 | 0xEB, 0x23, 0x22, 0x7B, 0x5C, 0x2B, 0x01, 0x40, 0x00, 0xED, | ||
472 | 0x43, 0x38, 0x5C, 0x22, 0xB2, 0x5C, 0x21, 0x00, 0x3C, 0x22, | ||
473 | 0x36, 0x5C, 0x2A, 0xB2, 0x5C, 0x36, 0x3E, 0x2B, 0xF9, 0x2B, | ||
474 | 0x2B, 0x22, 0x3D, 0x5C, 0xED, 0x56, 0xFD, 0x21, 0x3A, 0x5C, | ||
475 | 0xFB, 0x21, 0xB6, 0x5C, 0x22, 0x4F, 0x5C, 0x11, 0xAF, 0x15, | ||
476 | 0x01, 0x15, 0x00, 0xEB, 0xED, 0xB0, 0xEB, 0x2B, 0x22, 0x57, | ||
477 | 0x5C, 0x23, 0x22, 0x53, 0x5C, 0x22, 0x4B, 0x5C, 0x36, 0x80, | ||
478 | 0x23, 0x22, 0x59, 0x5C, 0x36, 0x0D, 0x23, 0x36, 0x80, 0x23, | ||
479 | 0x22, 0x61, 0x5C, 0x22, 0x63, 0x5C, 0x22, 0x65, 0x5C, 0x3E, | ||
480 | 0x38, 0x32, 0x8D, 0x5C, 0x32, 0x8F, 0x5C, 0x32, 0x48, 0x5C, | ||
481 | 0x21, 0x23, 0x05, 0x22, 0x09, 0x5C, 0xFD, 0x35, 0xC6, 0xFD, | ||
482 | 0x35, 0xCA, 0x21, 0xC6, 0x15, 0x11, 0x10, 0x5C, 0x01, 0x0E, | ||
483 | 0x00, 0xED, 0xB0, 0xFD, 0xCB, 0x01, 0xCE, 0xCD, 0xDF, 0x0E, | ||
484 | 0xFD, 0x36, 0x31, 0x02, 0xCD, 0x6B, 0x0D, 0xAF, 0x11, 0x38, | ||
485 | 0x15, 0xCD, 0x0A, 0x0C, 0xFD, 0xCB, 0x02, 0xEE, 0x18, 0x07, | ||
486 | 0xFD, 0x36, 0x31, 0x02, 0xCD, 0x95, 0x17, 0xCD, 0xB0, 0x16, | ||
487 | 0x3E, 0x00, 0xCD, 0x01, 0x16, 0xCD, 0x2C, 0x0F, 0xCD, 0x17, | ||
488 | 0x1B, 0xFD, 0xCB, 0x00, 0x7E, 0x20, 0x12, 0xFD, 0xCB, 0x30, | ||
489 | 0x66, 0x28, 0x40, 0x2A, 0x59, 0x5C, 0xCD, 0xA7, 0x11, 0xFD, | ||
490 | 0x36, 0x00, 0xFF, 0x18, 0xDD, 0x2A, 0x59, 0x5C, 0x22, 0x5D, | ||
491 | 0x5C, 0xCD, 0xFB, 0x19, 0x78, 0xB1, 0xC2, 0x5D, 0x15, 0xDF, | ||
492 | 0xFE, 0x0D, 0x28, 0xC0, 0xFD, 0xCB, 0x30, 0x46, 0xC4, 0xAF, | ||
493 | 0x0D, 0xCD, 0x6E, 0x0D, 0x3E, 0x19, 0xFD, 0x96, 0x4F, 0x32, | ||
494 | 0x8C, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xFD, 0x36, 0x00, 0xFF, | ||
495 | 0xFD, 0x36, 0x0A, 0x01, 0xCD, 0x8A, 0x1B, 0x76, 0xFD, 0xCB, | ||
496 | 0x01, 0xAE, 0xFD, 0xCB, 0x30, 0x4E, 0xC4, 0xCD, 0x0E, 0x3A, | ||
497 | 0x3A, 0x5C, 0x3C, 0xF5, 0x21, 0x00, 0x00, 0xFD, 0x74, 0x37, | ||
498 | 0xFD, 0x74, 0x26, 0x22, 0x0B, 0x5C, 0x21, 0x01, 0x00, 0x22, | ||
499 | 0x16, 0x5C, 0xCD, 0xB0, 0x16, 0xFD, 0xCB, 0x37, 0xAE, 0xCD, | ||
500 | 0x6E, 0x0D, 0xFD, 0xCB, 0x02, 0xEE, 0xF1, 0x47, 0xFE, 0x0A, | ||
501 | 0x38, 0x02, 0xC6, 0x07, 0xCD, 0xEF, 0x15, 0x3E, 0x20, 0xD7, | ||
502 | 0x78, 0x11, 0x91, 0x13, 0xCD, 0x0A, 0x0C, 0xAF, 0x11, 0x36, | ||
503 | 0x15, 0xCD, 0x0A, 0x0C, 0xED, 0x4B, 0x45, 0x5C, 0xCD, 0x1B, | ||
504 | 0x1A, 0x3E, 0x3A, 0xD7, 0xFD, 0x4E, 0x0D, 0x06, 0x00, 0xCD, | ||
505 | 0x1B, 0x1A, 0xCD, 0x97, 0x10, 0x3A, 0x3A, 0x5C, 0x3C, 0x28, | ||
506 | 0x1B, 0xFE, 0x09, 0x28, 0x04, 0xFE, 0x15, 0x20, 0x03, 0xFD, | ||
507 | 0x34, 0x0D, 0x01, 0x03, 0x00, 0x11, 0x70, 0x5C, 0x21, 0x44, | ||
508 | 0x5C, 0xCB, 0x7E, 0x28, 0x01, 0x09, 0xED, 0xB8, 0xFD, 0x36, | ||
509 | 0x0A, 0xFF, 0xFD, 0xCB, 0x01, 0x9E, 0xC3, 0xAC, 0x12, 0x80, | ||
510 | 0x4F, 0xCB, 0x4E, 0x45, 0x58, 0x54, 0x20, 0x77, 0x69, 0x74, | ||
511 | 0x68, 0x6F, 0x75, 0x74, 0x20, 0x46, 0x4F, 0xD2, 0x56, 0x61, | ||
512 | 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x6E, 0x6F, 0x74, | ||
513 | 0x20, 0x66, 0x6F, 0x75, 0x6E, 0xE4, 0x53, 0x75, 0x62, 0x73, | ||
514 | 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x77, 0x72, 0x6F, 0x6E, | ||
515 | 0xE7, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x6D, 0x65, | ||
516 | 0x6D, 0x6F, 0x72, 0xF9, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, | ||
517 | 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0xEE, 0x4E, 0x75, 0x6D, | ||
518 | 0x62, 0x65, 0x72, 0x20, 0x74, 0x6F, 0x6F, 0x20, 0x62, 0x69, | ||
519 | 0xE7, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4E, 0x20, 0x77, 0x69, | ||
520 | 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x47, 0x4F, 0x53, 0x55, | ||
521 | 0xC2, 0x45, 0x6E, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x66, 0x69, | ||
522 | 0x6C, 0xE5, 0x53, 0x54, 0x4F, 0x50, 0x20, 0x73, 0x74, 0x61, | ||
523 | 0x74, 0x65, 0x6D, 0x65, 0x6E, 0xF4, 0x49, 0x6E, 0x76, 0x61, | ||
524 | 0x6C, 0x69, 0x64, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, | ||
525 | 0x6E, 0xF4, 0x49, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, | ||
526 | 0x6F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x72, 0x61, 0x6E, | ||
527 | 0x67, 0xE5, 0x4E, 0x6F, 0x6E, 0x73, 0x65, 0x6E, 0x73, 0x65, | ||
528 | 0x20, 0x69, 0x6E, 0x20, 0x42, 0x41, 0x53, 0x49, 0xC3, 0x42, | ||
529 | 0x52, 0x45, 0x41, 0x4B, 0x20, 0x2D, 0x20, 0x43, 0x4F, 0x4E, | ||
530 | 0x54, 0x20, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0xF3, 0x4F, | ||
531 | 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x44, 0x41, 0x54, 0xC1, | ||
532 | 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x66, 0x69, | ||
533 | 0x6C, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0xE5, 0x4E, 0x6F, 0x20, | ||
534 | 0x72, 0x6F, 0x6F, 0x6D, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x6C, | ||
535 | 0x69, 0x6E, 0xE5, 0x53, 0x54, 0x4F, 0x50, 0x20, 0x69, 0x6E, | ||
536 | 0x20, 0x49, 0x4E, 0x50, 0x55, 0xD4, 0x46, 0x4F, 0x52, 0x20, | ||
537 | 0x77, 0x69, 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x4E, 0x45, | ||
538 | 0x58, 0xD4, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, | ||
539 | 0x49, 0x2F, 0x4F, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0xE5, | ||
540 | 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x63, 0x6F, | ||
541 | 0x6C, 0x6F, 0x75, 0xF2, 0x42, 0x52, 0x45, 0x41, 0x4B, 0x20, | ||
542 | 0x69, 0x6E, 0x74, 0x6F, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, | ||
543 | 0x61, 0xED, 0x52, 0x41, 0x4D, 0x54, 0x4F, 0x50, 0x20, 0x6E, | ||
544 | 0x6F, 0x20, 0x67, 0x6F, 0x6F, 0xE4, 0x53, 0x74, 0x61, 0x74, | ||
545 | 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6C, 0x6F, 0x73, 0xF4, | ||
546 | 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x73, 0x74, | ||
547 | 0x72, 0x65, 0x61, 0xED, 0x46, 0x4E, 0x20, 0x77, 0x69, 0x74, | ||
548 | 0x68, 0x6F, 0x75, 0x74, 0x20, 0x44, 0x45, 0xC6, 0x50, 0x61, | ||
549 | 0x72, 0x61, 0x6D, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x72, | ||
550 | 0x72, 0x6F, 0xF2, 0x54, 0x61, 0x70, 0x65, 0x20, 0x6C, 0x6F, | ||
551 | 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x65, 0x72, 0x72, 0x6F, | ||
552 | 0xF2, 0x2C, 0xA0, 0x7F, 0x20, 0x31, 0x39, 0x38, 0x32, 0x20, | ||
553 | 0x53, 0x69, 0x6E, 0x63, 0x6C, 0x61, 0x69, 0x72, 0x20, 0x52, | ||
554 | 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x4C, 0x74, | ||
555 | 0xE4, 0x3E, 0x10, 0x01, 0x00, 0x00, 0xC3, 0x13, 0x13, 0xED, | ||
556 | 0x43, 0x49, 0x5C, 0x2A, 0x5D, 0x5C, 0xEB, 0x21, 0x55, 0x15, | ||
557 | 0xE5, 0x2A, 0x61, 0x5C, 0x37, 0xED, 0x52, 0xE5, 0x60, 0x69, | ||
558 | 0xCD, 0x6E, 0x19, 0x20, 0x06, 0xCD, 0xB8, 0x19, 0xCD, 0xE8, | ||
559 | 0x19, 0xC1, 0x79, 0x3D, 0xB0, 0x28, 0x28, 0xC5, 0x03, 0x03, | ||
560 | 0x03, 0x03, 0x2B, 0xED, 0x5B, 0x53, 0x5C, 0xD5, 0xCD, 0x55, | ||
561 | 0x16, 0xE1, 0x22, 0x53, 0x5C, 0xC1, 0xC5, 0x13, 0x2A, 0x61, | ||
562 | 0x5C, 0x2B, 0x2B, 0xED, 0xB8, 0x2A, 0x49, 0x5C, 0xEB, 0xC1, | ||
563 | 0x70, 0x2B, 0x71, 0x2B, 0x73, 0x2B, 0x72, 0xF1, 0xC3, 0xA2, | ||
564 | 0x12, 0xF4, 0x09, 0xA8, 0x10, 0x4B, 0xF4, 0x09, 0xC4, 0x15, | ||
565 | 0x53, 0x81, 0x0F, 0xC4, 0x15, 0x52, 0xF4, 0x09, 0xC4, 0x15, | ||
566 | 0x50, 0x80, 0xCF, 0x12, 0x01, 0x00, 0x06, 0x00, 0x0B, 0x00, | ||
567 | 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x10, 0x00, 0xFD, 0xCB, | ||
568 | 0x02, 0x6E, 0x20, 0x04, 0xFD, 0xCB, 0x02, 0xDE, 0xCD, 0xE6, | ||
569 | 0x15, 0xD8, 0x28, 0xFA, 0xCF, 0x07, 0xD9, 0xE5, 0x2A, 0x51, | ||
570 | 0x5C, 0x23, 0x23, 0x18, 0x08, 0x1E, 0x30, 0x83, 0xD9, 0xE5, | ||
571 | 0x2A, 0x51, 0x5C, 0x5E, 0x23, 0x56, 0xEB, 0xCD, 0x2C, 0x16, | ||
572 | 0xE1, 0xD9, 0xC9, 0x87, 0xC6, 0x16, 0x6F, 0x26, 0x5C, 0x5E, | ||
573 | 0x23, 0x56, 0x7A, 0xB3, 0x20, 0x02, 0xCF, 0x17, 0x1B, 0x2A, | ||
574 | 0x4F, 0x5C, 0x19, 0x22, 0x51, 0x5C, 0xFD, 0xCB, 0x30, 0xA6, | ||
575 | 0x23, 0x23, 0x23, 0x23, 0x4E, 0x21, 0x2D, 0x16, 0xCD, 0xDC, | ||
576 | 0x16, 0xD0, 0x16, 0x00, 0x5E, 0x19, 0xE9, 0x4B, 0x06, 0x53, | ||
577 | 0x12, 0x50, 0x1B, 0x00, 0xFD, 0xCB, 0x02, 0xC6, 0xFD, 0xCB, | ||
578 | 0x01, 0xAE, 0xFD, 0xCB, 0x30, 0xE6, 0x18, 0x04, 0xFD, 0xCB, | ||
579 | 0x02, 0x86, 0xFD, 0xCB, 0x01, 0x8E, 0xC3, 0x4D, 0x0D, 0xFD, | ||
580 | 0xCB, 0x01, 0xCE, 0xC9, 0x01, 0x01, 0x00, 0xE5, 0xCD, 0x05, | ||
581 | 0x1F, 0xE1, 0xCD, 0x64, 0x16, 0x2A, 0x65, 0x5C, 0xEB, 0xED, | ||
582 | 0xB8, 0xC9, 0xF5, 0xE5, 0x21, 0x4B, 0x5C, 0x3E, 0x0E, 0x5E, | ||
583 | 0x23, 0x56, 0xE3, 0xA7, 0xED, 0x52, 0x19, 0xE3, 0x30, 0x09, | ||
584 | 0xD5, 0xEB, 0x09, 0xEB, 0x72, 0x2B, 0x73, 0x23, 0xD1, 0x23, | ||
585 | 0x3D, 0x20, 0xE8, 0xEB, 0xD1, 0xF1, 0xA7, 0xED, 0x52, 0x44, | ||
586 | 0x4D, 0x03, 0x19, 0xEB, 0xC9, 0x00, 0x00, 0xEB, 0x11, 0x8F, | ||
587 | 0x16, 0x7E, 0xE6, 0xC0, 0x20, 0xF7, 0x56, 0x23, 0x5E, 0xC9, | ||
588 | 0x2A, 0x63, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x23, 0xC1, | ||
589 | 0xED, 0x43, 0x61, 0x5C, 0xC1, 0xEB, 0x23, 0xC9, 0x2A, 0x59, | ||
590 | 0x5C, 0x36, 0x0D, 0x22, 0x5B, 0x5C, 0x23, 0x36, 0x80, 0x23, | ||
591 | 0x22, 0x61, 0x5C, 0x2A, 0x61, 0x5C, 0x22, 0x63, 0x5C, 0x2A, | ||
592 | 0x63, 0x5C, 0x22, 0x65, 0x5C, 0xE5, 0x21, 0x92, 0x5C, 0x22, | ||
593 | 0x68, 0x5C, 0xE1, 0xC9, 0xED, 0x5B, 0x59, 0x5C, 0xC3, 0xE5, | ||
594 | 0x19, 0x23, 0x7E, 0xA7, 0xC8, 0xB9, 0x23, 0x20, 0xF8, 0x37, | ||
595 | 0xC9, 0xCD, 0x1E, 0x17, 0xCD, 0x01, 0x17, 0x01, 0x00, 0x00, | ||
596 | 0x11, 0xE2, 0xA3, 0xEB, 0x19, 0x38, 0x07, 0x01, 0xD4, 0x15, | ||
597 | 0x09, 0x4E, 0x23, 0x46, 0xEB, 0x71, 0x23, 0x70, 0xC9, 0xE5, | ||
598 | 0x2A, 0x4F, 0x5C, 0x09, 0x23, 0x23, 0x23, 0x4E, 0xEB, 0x21, | ||
599 | 0x16, 0x17, 0xCD, 0xDC, 0x16, 0x4E, 0x06, 0x00, 0x09, 0xE9, | ||
600 | 0x4B, 0x05, 0x53, 0x03, 0x50, 0x01, 0xE1, 0xC9, 0xCD, 0x94, | ||
601 | 0x1E, 0xFE, 0x10, 0x38, 0x02, 0xCF, 0x17, 0xC6, 0x03, 0x07, | ||
602 | 0x21, 0x10, 0x5C, 0x4F, 0x06, 0x00, 0x09, 0x4E, 0x23, 0x46, | ||
603 | 0x2B, 0xC9, 0xEF, 0x01, 0x38, 0xCD, 0x1E, 0x17, 0x78, 0xB1, | ||
604 | 0x28, 0x16, 0xEB, 0x2A, 0x4F, 0x5C, 0x09, 0x23, 0x23, 0x23, | ||
605 | 0x7E, 0xEB, 0xFE, 0x4B, 0x28, 0x08, 0xFE, 0x53, 0x28, 0x04, | ||
606 | 0xFE, 0x50, 0x20, 0xCF, 0xCD, 0x5D, 0x17, 0x73, 0x23, 0x72, | ||
607 | 0xC9, 0xE5, 0xCD, 0xF1, 0x2B, 0x78, 0xB1, 0x20, 0x02, 0xCF, | ||
608 | 0x0E, 0xC5, 0x1A, 0xE6, 0xDF, 0x4F, 0x21, 0x7A, 0x17, 0xCD, | ||
609 | 0xDC, 0x16, 0x30, 0xF1, 0x4E, 0x06, 0x00, 0x09, 0xC1, 0xE9, | ||
610 | 0x4B, 0x06, 0x53, 0x08, 0x50, 0x0A, 0x00, 0x1E, 0x01, 0x18, | ||
611 | 0x06, 0x1E, 0x06, 0x18, 0x02, 0x1E, 0x10, 0x0B, 0x78, 0xB1, | ||
612 | 0x20, 0xD5, 0x57, 0xE1, 0xC9, 0x18, 0x90, 0xED, 0x73, 0x3F, | ||
613 | 0x5C, 0xFD, 0x36, 0x02, 0x10, 0xCD, 0xAF, 0x0D, 0xFD, 0xCB, | ||
614 | 0x02, 0xC6, 0xFD, 0x46, 0x31, 0xCD, 0x44, 0x0E, 0xFD, 0xCB, | ||
615 | 0x02, 0x86, 0xFD, 0xCB, 0x30, 0xC6, 0x2A, 0x49, 0x5C, 0xED, | ||
616 | 0x5B, 0x6C, 0x5C, 0xA7, 0xED, 0x52, 0x19, 0x38, 0x22, 0xD5, | ||
617 | 0xCD, 0x6E, 0x19, 0x11, 0xC0, 0x02, 0xEB, 0xED, 0x52, 0xE3, | ||
618 | 0xCD, 0x6E, 0x19, 0xC1, 0xC5, 0xCD, 0xB8, 0x19, 0xC1, 0x09, | ||
619 | 0x38, 0x0E, 0xEB, 0x56, 0x23, 0x5E, 0x2B, 0xED, 0x53, 0x6C, | ||
620 | 0x5C, 0x18, 0xED, 0x22, 0x6C, 0x5C, 0x2A, 0x6C, 0x5C, 0xCD, | ||
621 | 0x6E, 0x19, 0x28, 0x01, 0xEB, 0xCD, 0x33, 0x18, 0xFD, 0xCB, | ||
622 | 0x02, 0xA6, 0xC9, 0x3E, 0x03, 0x18, 0x02, 0x3E, 0x02, 0xFD, | ||
623 | 0x36, 0x02, 0x00, 0xCD, 0x30, 0x25, 0xC4, 0x01, 0x16, 0xDF, | ||
624 | 0xCD, 0x70, 0x20, 0x38, 0x14, 0xDF, 0xFE, 0x3B, 0x28, 0x04, | ||
625 | 0xFE, 0x2C, 0x20, 0x06, 0xE7, 0xCD, 0x82, 0x1C, 0x18, 0x08, | ||
626 | 0xCD, 0xE6, 0x1C, 0x18, 0x03, 0xCD, 0xDE, 0x1C, 0xCD, 0xEE, | ||
627 | 0x1B, 0xCD, 0x99, 0x1E, 0x78, 0xE6, 0x3F, 0x67, 0x69, 0x22, | ||
628 | 0x49, 0x5C, 0xCD, 0x6E, 0x19, 0x1E, 0x01, 0xCD, 0x55, 0x18, | ||
629 | 0xD7, 0xFD, 0xCB, 0x02, 0x66, 0x28, 0xF6, 0x3A, 0x6B, 0x5C, | ||
630 | 0xFD, 0x96, 0x4F, 0x20, 0xEE, 0xAB, 0xC8, 0xE5, 0xD5, 0x21, | ||
631 | 0x6C, 0x5C, 0xCD, 0x0F, 0x19, 0xD1, 0xE1, 0x18, 0xE0, 0xED, | ||
632 | 0x4B, 0x49, 0x5C, 0xCD, 0x80, 0x19, 0x16, 0x3E, 0x28, 0x05, | ||
633 | 0x11, 0x00, 0x00, 0xCB, 0x13, 0xFD, 0x73, 0x2D, 0x7E, 0xFE, | ||
634 | 0x40, 0xC1, 0xD0, 0xC5, 0xCD, 0x28, 0x1A, 0x23, 0x23, 0x23, | ||
635 | 0xFD, 0xCB, 0x01, 0x86, 0x7A, 0xA7, 0x28, 0x05, 0xD7, 0xFD, | ||
636 | 0xCB, 0x01, 0xC6, 0xD5, 0xEB, 0xFD, 0xCB, 0x30, 0x96, 0x21, | ||
637 | 0x3B, 0x5C, 0xCB, 0x96, 0xFD, 0xCB, 0x37, 0x6E, 0x28, 0x02, | ||
638 | 0xCB, 0xD6, 0x2A, 0x5F, 0x5C, 0xA7, 0xED, 0x52, 0x20, 0x05, | ||
639 | 0x3E, 0x3F, 0xCD, 0xC1, 0x18, 0xCD, 0xE1, 0x18, 0xEB, 0x7E, | ||
640 | 0xCD, 0xB6, 0x18, 0x23, 0xFE, 0x0D, 0x28, 0x06, 0xEB, 0xCD, | ||
641 | 0x37, 0x19, 0x18, 0xE0, 0xD1, 0xC9, 0xFE, 0x0E, 0xC0, 0x23, | ||
642 | 0x23, 0x23, 0x23, 0x23, 0x23, 0x7E, 0xC9, 0xD9, 0x2A, 0x8F, | ||
643 | 0x5C, 0xE5, 0xCB, 0xBC, 0xCB, 0xFD, 0x22, 0x8F, 0x5C, 0x21, | ||
644 | 0x91, 0x5C, 0x56, 0xD5, 0x36, 0x00, 0xCD, 0xF4, 0x09, 0xE1, | ||
645 | 0xFD, 0x74, 0x57, 0xE1, 0x22, 0x8F, 0x5C, 0xD9, 0xC9, 0x2A, | ||
646 | 0x5B, 0x5C, 0xA7, 0xED, 0x52, 0xC0, 0x3A, 0x41, 0x5C, 0xCB, | ||
647 | 0x07, 0x28, 0x04, 0xC6, 0x43, 0x18, 0x16, 0x21, 0x3B, 0x5C, | ||
648 | 0xCB, 0x9E, 0x3E, 0x4B, 0xCB, 0x56, 0x28, 0x0B, 0xCB, 0xDE, | ||
649 | 0x3C, 0xFD, 0xCB, 0x30, 0x5E, 0x28, 0x02, 0x3E, 0x43, 0xD5, | ||
650 | 0xCD, 0xC1, 0x18, 0xD1, 0xC9, 0x5E, 0x23, 0x56, 0xE5, 0xEB, | ||
651 | 0x23, 0xCD, 0x6E, 0x19, 0xCD, 0x95, 0x16, 0xE1, 0xFD, 0xCB, | ||
652 | 0x37, 0x6E, 0xC0, 0x72, 0x2B, 0x73, 0xC9, 0x7B, 0xA7, 0xF8, | ||
653 | 0x18, 0x0D, 0xAF, 0x09, 0x3C, 0x38, 0xFC, 0xED, 0x42, 0x3D, | ||
654 | 0x28, 0xF1, 0xC3, 0xEF, 0x15, 0xCD, 0x1B, 0x2D, 0x30, 0x30, | ||
655 | 0xFE, 0x21, 0x38, 0x2C, 0xFD, 0xCB, 0x01, 0x96, 0xFE, 0xCB, | ||
656 | 0x28, 0x24, 0xFE, 0x3A, 0x20, 0x0E, 0xFD, 0xCB, 0x37, 0x6E, | ||
657 | 0x20, 0x16, 0xFD, 0xCB, 0x30, 0x56, 0x28, 0x14, 0x18, 0x0E, | ||
658 | 0xFE, 0x22, 0x20, 0x0A, 0xF5, 0x3A, 0x6A, 0x5C, 0xEE, 0x04, | ||
659 | 0x32, 0x6A, 0x5C, 0xF1, 0xFD, 0xCB, 0x01, 0xD6, 0xD7, 0xC9, | ||
660 | 0xE5, 0x2A, 0x53, 0x5C, 0x54, 0x5D, 0xC1, 0xCD, 0x80, 0x19, | ||
661 | 0xD0, 0xC5, 0xCD, 0xB8, 0x19, 0xEB, 0x18, 0xF4, 0x7E, 0xB8, | ||
662 | 0xC0, 0x23, 0x7E, 0x2B, 0xB9, 0xC9, 0x23, 0x23, 0x23, 0x22, | ||
663 | 0x5D, 0x5C, 0x0E, 0x00, 0x15, 0xC8, 0xE7, 0xBB, 0x20, 0x04, | ||
664 | 0xA7, 0xC9, 0x23, 0x7E, 0xCD, 0xB6, 0x18, 0x22, 0x5D, 0x5C, | ||
665 | 0xFE, 0x22, 0x20, 0x01, 0x0D, 0xFE, 0x3A, 0x28, 0x04, 0xFE, | ||
666 | 0xCB, 0x20, 0x04, 0xCB, 0x41, 0x28, 0xDF, 0xFE, 0x0D, 0x20, | ||
667 | 0xE3, 0x15, 0x37, 0xC9, 0xE5, 0x7E, 0xFE, 0x40, 0x38, 0x17, | ||
668 | 0xCB, 0x6F, 0x28, 0x14, 0x87, 0xFA, 0xC7, 0x19, 0x3F, 0x01, | ||
669 | 0x05, 0x00, 0x30, 0x02, 0x0E, 0x12, 0x17, 0x23, 0x7E, 0x30, | ||
670 | 0xFB, 0x18, 0x06, 0x23, 0x23, 0x4E, 0x23, 0x46, 0x23, 0x09, | ||
671 | 0xD1, 0xA7, 0xED, 0x52, 0x44, 0x4D, 0x19, 0xEB, 0xC9, 0xCD, | ||
672 | 0xDD, 0x19, 0xC5, 0x78, 0x2F, 0x47, 0x79, 0x2F, 0x4F, 0x03, | ||
673 | 0xCD, 0x64, 0x16, 0xEB, 0xE1, 0x19, 0xD5, 0xED, 0xB0, 0xE1, | ||
674 | 0xC9, 0x2A, 0x59, 0x5C, 0x2B, 0x22, 0x5D, 0x5C, 0xE7, 0x21, | ||
675 | 0x92, 0x5C, 0x22, 0x65, 0x5C, 0xCD, 0x3B, 0x2D, 0xCD, 0xA2, | ||
676 | 0x2D, 0x38, 0x04, 0x21, 0xF0, 0xD8, 0x09, 0xDA, 0x8A, 0x1C, | ||
677 | 0xC3, 0xC5, 0x16, 0xD5, 0xE5, 0xAF, 0xCB, 0x78, 0x20, 0x20, | ||
678 | 0x60, 0x69, 0x1E, 0xFF, 0x18, 0x08, 0xD5, 0x56, 0x23, 0x5E, | ||
679 | 0xE5, 0xEB, 0x1E, 0x20, 0x01, 0x18, 0xFC, 0xCD, 0x2A, 0x19, | ||
680 | 0x01, 0x9C, 0xFF, 0xCD, 0x2A, 0x19, 0x0E, 0xF6, 0xCD, 0x2A, | ||
681 | 0x19, 0x7D, 0xCD, 0xEF, 0x15, 0xE1, 0xD1, 0xC9, 0xB1, 0xCB, | ||
682 | 0xBC, 0xBF, 0xC4, 0xAF, 0xB4, 0x93, 0x91, 0x92, 0x95, 0x98, | ||
683 | 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x7F, 0x81, 0x2E, 0x6C, | ||
684 | 0x6E, 0x70, 0x48, 0x94, 0x56, 0x3F, 0x41, 0x2B, 0x17, 0x1F, | ||
685 | 0x37, 0x77, 0x44, 0x0F, 0x59, 0x2B, 0x43, 0x2D, 0x51, 0x3A, | ||
686 | 0x6D, 0x42, 0x0D, 0x49, 0x5C, 0x44, 0x15, 0x5D, 0x01, 0x3D, | ||
687 | 0x02, 0x06, 0x00, 0x67, 0x1E, 0x06, 0xCB, 0x05, 0xF0, 0x1C, | ||
688 | 0x06, 0x00, 0xED, 0x1E, 0x00, 0xEE, 0x1C, 0x00, 0x23, 0x1F, | ||
689 | 0x04, 0x3D, 0x06, 0xCC, 0x06, 0x05, 0x03, 0x1D, 0x04, 0x00, | ||
690 | 0xAB, 0x1D, 0x05, 0xCD, 0x1F, 0x05, 0x89, 0x20, 0x05, 0x02, | ||
691 | 0x2C, 0x05, 0xB2, 0x1B, 0x00, 0xB7, 0x11, 0x03, 0xA1, 0x1E, | ||
692 | 0x05, 0xF9, 0x17, 0x08, 0x00, 0x80, 0x1E, 0x03, 0x4F, 0x1E, | ||
693 | 0x00, 0x5F, 0x1E, 0x03, 0xAC, 0x1E, 0x00, 0x6B, 0x0D, 0x09, | ||
694 | 0x00, 0xDC, 0x22, 0x06, 0x00, 0x3A, 0x1F, 0x05, 0xED, 0x1D, | ||
695 | 0x05, 0x27, 0x1E, 0x03, 0x42, 0x1E, 0x09, 0x05, 0x82, 0x23, | ||
696 | 0x00, 0xAC, 0x0E, 0x05, 0xC9, 0x1F, 0x05, 0xF5, 0x17, 0x0B, | ||
697 | 0x0B, 0x0B, 0x0B, 0x08, 0x00, 0xF8, 0x03, 0x09, 0x05, 0x20, | ||
698 | 0x23, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x00, 0x7A, | ||
699 | 0x1E, 0x06, 0x00, 0x94, 0x22, 0x05, 0x60, 0x1F, 0x06, 0x2C, | ||
700 | 0x0A, 0x00, 0x36, 0x17, 0x06, 0x00, 0xE5, 0x16, 0x0A, 0x00, | ||
701 | 0x93, 0x17, 0x0A, 0x2C, 0x0A, 0x00, 0x93, 0x17, 0x0A, 0x00, | ||
702 | 0x93, 0x17, 0x00, 0x93, 0x17, 0xFD, 0xCB, 0x01, 0xBE, 0xCD, | ||
703 | 0xFB, 0x19, 0xAF, 0x32, 0x47, 0x5C, 0x3D, 0x32, 0x3A, 0x5C, | ||
704 | 0x18, 0x01, 0xE7, 0xCD, 0xBF, 0x16, 0xFD, 0x34, 0x0D, 0xFA, | ||
705 | 0x8A, 0x1C, 0xDF, 0x06, 0x00, 0xFE, 0x0D, 0x28, 0x7A, 0xFE, | ||
706 | 0x3A, 0x28, 0xEB, 0x21, 0x76, 0x1B, 0xE5, 0x4F, 0xE7, 0x79, | ||
707 | 0xD6, 0xCE, 0xDA, 0x8A, 0x1C, 0x4F, 0x21, 0x48, 0x1A, 0x09, | ||
708 | 0x4E, 0x09, 0x18, 0x03, 0x2A, 0x74, 0x5C, 0x7E, 0x23, 0x22, | ||
709 | 0x74, 0x5C, 0x01, 0x52, 0x1B, 0xC5, 0x4F, 0xFE, 0x20, 0x30, | ||
710 | 0x0C, 0x21, 0x01, 0x1C, 0x06, 0x00, 0x09, 0x4E, 0x09, 0xE5, | ||
711 | 0xDF, 0x05, 0xC9, 0xDF, 0xB9, 0xC2, 0x8A, 0x1C, 0xE7, 0xC9, | ||
712 | 0xCD, 0x54, 0x1F, 0x38, 0x02, 0xCF, 0x14, 0xFD, 0xCB, 0x0A, | ||
713 | 0x7E, 0x20, 0x71, 0x2A, 0x42, 0x5C, 0xCB, 0x7C, 0x28, 0x14, | ||
714 | 0x21, 0xFE, 0xFF, 0x22, 0x45, 0x5C, 0x2A, 0x61, 0x5C, 0x2B, | ||
715 | 0xED, 0x5B, 0x59, 0x5C, 0x1B, 0x3A, 0x44, 0x5C, 0x18, 0x33, | ||
716 | 0xCD, 0x6E, 0x19, 0x3A, 0x44, 0x5C, 0x28, 0x19, 0xA7, 0x20, | ||
717 | 0x43, 0x47, 0x7E, 0xE6, 0xC0, 0x78, 0x28, 0x0F, 0xCF, 0xFF, | ||
718 | 0xC1, 0xCD, 0x30, 0x25, 0xC8, 0x2A, 0x55, 0x5C, 0x3E, 0xC0, | ||
719 | 0xA6, 0xC0, 0xAF, 0xFE, 0x01, 0xCE, 0x00, 0x56, 0x23, 0x5E, | ||
720 | 0xED, 0x53, 0x45, 0x5C, 0x23, 0x5E, 0x23, 0x56, 0xEB, 0x19, | ||
721 | 0x23, 0x22, 0x55, 0x5C, 0xEB, 0x22, 0x5D, 0x5C, 0x57, 0x1E, | ||
722 | 0x00, 0xFD, 0x36, 0x0A, 0xFF, 0x15, 0xFD, 0x72, 0x0D, 0xCA, | ||
723 | 0x28, 0x1B, 0x14, 0xCD, 0x8B, 0x19, 0x28, 0x08, 0xCF, 0x16, | ||
724 | 0xCD, 0x30, 0x25, 0xC0, 0xC1, 0xC1, 0xDF, 0xFE, 0x0D, 0x28, | ||
725 | 0xBA, 0xFE, 0x3A, 0xCA, 0x28, 0x1B, 0xC3, 0x8A, 0x1C, 0x0F, | ||
726 | 0x1D, 0x4B, 0x09, 0x67, 0x0B, 0x7B, 0x8E, 0x71, 0xB4, 0x81, | ||
727 | 0xCF, 0xCD, 0xDE, 0x1C, 0xBF, 0xC1, 0xCC, 0xEE, 0x1B, 0xEB, | ||
728 | 0x2A, 0x74, 0x5C, 0x4E, 0x23, 0x46, 0xEB, 0xC5, 0xC9, 0xCD, | ||
729 | 0xB2, 0x28, 0xFD, 0x36, 0x37, 0x00, 0x30, 0x08, 0xFD, 0xCB, | ||
730 | 0x37, 0xCE, 0x20, 0x18, 0xCF, 0x01, 0xCC, 0x96, 0x29, 0xFD, | ||
731 | 0xCB, 0x01, 0x76, 0x20, 0x0D, 0xAF, 0xCD, 0x30, 0x25, 0xC4, | ||
732 | 0xF1, 0x2B, 0x21, 0x71, 0x5C, 0xB6, 0x77, 0xEB, 0xED, 0x43, | ||
733 | 0x72, 0x5C, 0x22, 0x4D, 0x5C, 0xC9, 0xC1, 0xCD, 0x56, 0x1C, | ||
734 | 0xCD, 0xEE, 0x1B, 0xC9, 0x3A, 0x3B, 0x5C, 0xF5, 0xCD, 0xFB, | ||
735 | 0x24, 0xF1, 0xFD, 0x56, 0x01, 0xAA, 0xE6, 0x40, 0x20, 0x24, | ||
736 | 0xCB, 0x7A, 0xC2, 0xFF, 0x2A, 0xC9, 0xCD, 0xB2, 0x28, 0xF5, | ||
737 | 0x79, 0xF6, 0x9F, 0x3C, 0x20, 0x14, 0xF1, 0x18, 0xA9, 0xE7, | ||
738 | 0xCD, 0x82, 0x1C, 0xFE, 0x2C, 0x20, 0x09, 0xE7, 0xCD, 0xFB, | ||
739 | 0x24, 0xFD, 0xCB, 0x01, 0x76, 0xC0, 0xCF, 0x0B, 0xCD, 0xFB, | ||
740 | 0x24, 0xFD, 0xCB, 0x01, 0x76, 0xC8, 0x18, 0xF4, 0xFD, 0xCB, | ||
741 | 0x01, 0x7E, 0xFD, 0xCB, 0x02, 0x86, 0xC4, 0x4D, 0x0D, 0xF1, | ||
742 | 0x3A, 0x74, 0x5C, 0xD6, 0x13, 0xCD, 0xFC, 0x21, 0xCD, 0xEE, | ||
743 | 0x1B, 0x2A, 0x8F, 0x5C, 0x22, 0x8D, 0x5C, 0x21, 0x91, 0x5C, | ||
744 | 0x7E, 0x07, 0xAE, 0xE6, 0xAA, 0xAE, 0x77, 0xC9, 0xCD, 0x30, | ||
745 | 0x25, 0x28, 0x13, 0xFD, 0xCB, 0x02, 0x86, 0xCD, 0x4D, 0x0D, | ||
746 | 0x21, 0x90, 0x5C, 0x7E, 0xF6, 0xF8, 0x77, 0xFD, 0xCB, 0x57, | ||
747 | 0xB6, 0xDF, 0xCD, 0xE2, 0x21, 0x18, 0x9F, 0xC3, 0x05, 0x06, | ||
748 | 0xFE, 0x0D, 0x28, 0x04, 0xFE, 0x3A, 0x20, 0x9C, 0xCD, 0x30, | ||
749 | 0x25, 0xC8, 0xEF, 0xA0, 0x38, 0xC9, 0xCF, 0x08, 0xC1, 0xCD, | ||
750 | 0x30, 0x25, 0x28, 0x0A, 0xEF, 0x02, 0x38, 0xEB, 0xCD, 0xE9, | ||
751 | 0x34, 0xDA, 0xB3, 0x1B, 0xC3, 0x29, 0x1B, 0xFE, 0xCD, 0x20, | ||
752 | 0x09, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0x18, 0x06, | ||
753 | 0xCD, 0xEE, 0x1B, 0xEF, 0xA1, 0x38, 0xEF, 0xC0, 0x02, 0x01, | ||
754 | 0xE0, 0x01, 0x38, 0xCD, 0xFF, 0x2A, 0x22, 0x68, 0x5C, 0x2B, | ||
755 | 0x7E, 0xCB, 0xFE, 0x01, 0x06, 0x00, 0x09, 0x07, 0x38, 0x06, | ||
756 | 0x0E, 0x0D, 0xCD, 0x55, 0x16, 0x23, 0xE5, 0xEF, 0x02, 0x02, | ||
757 | 0x38, 0xE1, 0xEB, 0x0E, 0x0A, 0xED, 0xB0, 0x2A, 0x45, 0x5C, | ||
758 | 0xEB, 0x73, 0x23, 0x72, 0xFD, 0x56, 0x0D, 0x14, 0x23, 0x72, | ||
759 | 0xCD, 0xDA, 0x1D, 0xD0, 0xFD, 0x46, 0x38, 0x2A, 0x45, 0x5C, | ||
760 | 0x22, 0x42, 0x5C, 0x3A, 0x47, 0x5C, 0xED, 0x44, 0x57, 0x2A, | ||
761 | 0x5D, 0x5C, 0x1E, 0xF3, 0xC5, 0xED, 0x4B, 0x55, 0x5C, 0xCD, | ||
762 | 0x86, 0x1D, 0xED, 0x43, 0x55, 0x5C, 0xC1, 0x38, 0x11, 0xE7, | ||
763 | 0xF6, 0x20, 0xB8, 0x28, 0x03, 0xE7, 0x18, 0xE8, 0xE7, 0x3E, | ||
764 | 0x01, 0x92, 0x32, 0x44, 0x5C, 0xC9, 0xCF, 0x11, 0x7E, 0xFE, | ||
765 | 0x3A, 0x28, 0x18, 0x23, 0x7E, 0xE6, 0xC0, 0x37, 0xC0, 0x46, | ||
766 | 0x23, 0x4E, 0xED, 0x43, 0x42, 0x5C, 0x23, 0x4E, 0x23, 0x46, | ||
767 | 0xE5, 0x09, 0x44, 0x4D, 0xE1, 0x16, 0x00, 0xC5, 0xCD, 0x8B, | ||
768 | 0x19, 0xC1, 0xD0, 0x18, 0xE0, 0xFD, 0xCB, 0x37, 0x4E, 0xC2, | ||
769 | 0x2E, 0x1C, 0x2A, 0x4D, 0x5C, 0xCB, 0x7E, 0x28, 0x1F, 0x23, | ||
770 | 0x22, 0x68, 0x5C, 0xEF, 0xE0, 0xE2, 0x0F, 0xC0, 0x02, 0x38, | ||
771 | 0xCD, 0xDA, 0x1D, 0xD8, 0x2A, 0x68, 0x5C, 0x11, 0x0F, 0x00, | ||
772 | 0x19, 0x5E, 0x23, 0x56, 0x23, 0x66, 0xEB, 0xC3, 0x73, 0x1E, | ||
773 | 0xCF, 0x00, 0xEF, 0xE1, 0xE0, 0xE2, 0x36, 0x00, 0x02, 0x01, | ||
774 | 0x03, 0x37, 0x00, 0x04, 0x38, 0xA7, 0xC9, 0x38, 0x37, 0xC9, | ||
775 | 0xE7, 0xCD, 0x1F, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x29, 0xDF, | ||
776 | 0x22, 0x5F, 0x5C, 0x2A, 0x57, 0x5C, 0x7E, 0xFE, 0x2C, 0x28, | ||
777 | 0x09, 0x1E, 0xE4, 0xCD, 0x86, 0x1D, 0x30, 0x02, 0xCF, 0x0D, | ||
778 | 0xCD, 0x77, 0x00, 0xCD, 0x56, 0x1C, 0xDF, 0x22, 0x57, 0x5C, | ||
779 | 0x2A, 0x5F, 0x5C, 0xFD, 0x36, 0x26, 0x00, 0xCD, 0x78, 0x00, | ||
780 | 0xDF, 0xFE, 0x2C, 0x28, 0xC9, 0xCD, 0xEE, 0x1B, 0xC9, 0xCD, | ||
781 | 0x30, 0x25, 0x20, 0x0B, 0xCD, 0xFB, 0x24, 0xFE, 0x2C, 0xC4, | ||
782 | 0xEE, 0x1B, 0xE7, 0x18, 0xF5, 0x3E, 0xE4, 0x47, 0xED, 0xB9, | ||
783 | 0x11, 0x00, 0x02, 0xC3, 0x8B, 0x19, 0xCD, 0x99, 0x1E, 0x60, | ||
784 | 0x69, 0xCD, 0x6E, 0x19, 0x2B, 0x22, 0x57, 0x5C, 0xC9, 0xCD, | ||
785 | 0x99, 0x1E, 0x78, 0xB1, 0x20, 0x04, 0xED, 0x4B, 0x78, 0x5C, | ||
786 | 0xED, 0x43, 0x76, 0x5C, 0xC9, 0x2A, 0x6E, 0x5C, 0xFD, 0x56, | ||
787 | 0x36, 0x18, 0x0C, 0xCD, 0x99, 0x1E, 0x60, 0x69, 0x16, 0x00, | ||
788 | 0x7C, 0xFE, 0xF0, 0x30, 0x2C, 0x22, 0x42, 0x5C, 0xFD, 0x72, | ||
789 | 0x0A, 0xC9, 0xCD, 0x85, 0x1E, 0xED, 0x79, 0xC9, 0xCD, 0x85, | ||
790 | 0x1E, 0x02, 0xC9, 0xCD, 0xD5, 0x2D, 0x38, 0x15, 0x28, 0x02, | ||
791 | 0xED, 0x44, 0xF5, 0xCD, 0x99, 0x1E, 0xF1, 0xC9, 0xCD, 0xD5, | ||
792 | 0x2D, 0x18, 0x03, 0xCD, 0xA2, 0x2D, 0x38, 0x01, 0xC8, 0xCF, | ||
793 | 0x0A, 0xCD, 0x67, 0x1E, 0x01, 0x00, 0x00, 0xCD, 0x45, 0x1E, | ||
794 | 0x18, 0x03, 0xCD, 0x99, 0x1E, 0x78, 0xB1, 0x20, 0x04, 0xED, | ||
795 | 0x4B, 0xB2, 0x5C, 0xC5, 0xED, 0x5B, 0x4B, 0x5C, 0x2A, 0x59, | ||
796 | 0x5C, 0x2B, 0xCD, 0xE5, 0x19, 0xCD, 0x6B, 0x0D, 0x2A, 0x65, | ||
797 | 0x5C, 0x11, 0x32, 0x00, 0x19, 0xD1, 0xED, 0x52, 0x30, 0x08, | ||
798 | 0x2A, 0xB4, 0x5C, 0xA7, 0xED, 0x52, 0x30, 0x02, 0xCF, 0x15, | ||
799 | 0xEB, 0x22, 0xB2, 0x5C, 0xD1, 0xC1, 0x36, 0x3E, 0x2B, 0xF9, | ||
800 | 0xC5, 0xED, 0x73, 0x3D, 0x5C, 0xEB, 0xE9, 0xD1, 0xFD, 0x66, | ||
801 | 0x0D, 0x24, 0xE3, 0x33, 0xED, 0x4B, 0x45, 0x5C, 0xC5, 0xE5, | ||
802 | 0xED, 0x73, 0x3D, 0x5C, 0xD5, 0xCD, 0x67, 0x1E, 0x01, 0x14, | ||
803 | 0x00, 0x2A, 0x65, 0x5C, 0x09, 0x38, 0x0A, 0xEB, 0x21, 0x50, | ||
804 | 0x00, 0x19, 0x38, 0x03, 0xED, 0x72, 0xD8, 0x2E, 0x03, 0xC3, | ||
805 | 0x55, 0x00, 0x01, 0x00, 0x00, 0xCD, 0x05, 0x1F, 0x44, 0x4D, | ||
806 | 0xC9, 0xC1, 0xE1, 0xD1, 0x7A, 0xFE, 0x3E, 0x28, 0x0B, 0x3B, | ||
807 | 0xE3, 0xEB, 0xED, 0x73, 0x3D, 0x5C, 0xC5, 0xC3, 0x73, 0x1E, | ||
808 | 0xD5, 0xE5, 0xCF, 0x06, 0xCD, 0x99, 0x1E, 0x76, 0x0B, 0x78, | ||
809 | 0xB1, 0x28, 0x0C, 0x78, 0xA1, 0x3C, 0x20, 0x01, 0x03, 0xFD, | ||
810 | 0xCB, 0x01, 0x6E, 0x28, 0xEE, 0xFD, 0xCB, 0x01, 0xAE, 0xC9, | ||
811 | 0x3E, 0x7F, 0xDB, 0xFE, 0x1F, 0xD8, 0x3E, 0xFE, 0xDB, 0xFE, | ||
812 | 0x1F, 0xC9, 0xCD, 0x30, 0x25, 0x28, 0x05, 0x3E, 0xCE, 0xC3, | ||
813 | 0x39, 0x1E, 0xFD, 0xCB, 0x01, 0xF6, 0xCD, 0x8D, 0x2C, 0x30, | ||
814 | 0x16, 0xE7, 0xFE, 0x24, 0x20, 0x05, 0xFD, 0xCB, 0x01, 0xB6, | ||
815 | 0xE7, 0xFE, 0x28, 0x20, 0x3C, 0xE7, 0xFE, 0x29, 0x28, 0x20, | ||
816 | 0xCD, 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xEB, 0xE7, 0xFE, 0x24, | ||
817 | 0x20, 0x02, 0xEB, 0xE7, 0xEB, 0x01, 0x06, 0x00, 0xCD, 0x55, | ||
818 | 0x16, 0x23, 0x23, 0x36, 0x0E, 0xFE, 0x2C, 0x20, 0x03, 0xE7, | ||
819 | 0x18, 0xE0, 0xFE, 0x29, 0x20, 0x13, 0xE7, 0xFE, 0x3D, 0x20, | ||
820 | 0x0E, 0xE7, 0x3A, 0x3B, 0x5C, 0xF5, 0xCD, 0xFB, 0x24, 0xF1, | ||
821 | 0xFD, 0xAE, 0x01, 0xE6, 0x40, 0xC2, 0x8A, 0x1C, 0xCD, 0xEE, | ||
822 | 0x1B, 0xCD, 0x30, 0x25, 0xE1, 0xC8, 0xE9, 0x3E, 0x03, 0x18, | ||
823 | 0x02, 0x3E, 0x02, 0xCD, 0x30, 0x25, 0xC4, 0x01, 0x16, 0xCD, | ||
824 | 0x4D, 0x0D, 0xCD, 0xDF, 0x1F, 0xCD, 0xEE, 0x1B, 0xC9, 0xDF, | ||
825 | 0xCD, 0x45, 0x20, 0x28, 0x0D, 0xCD, 0x4E, 0x20, 0x28, 0xFB, | ||
826 | 0xCD, 0xFC, 0x1F, 0xCD, 0x4E, 0x20, 0x28, 0xF3, 0xFE, 0x29, | ||
827 | 0xC8, 0xCD, 0xC3, 0x1F, 0x3E, 0x0D, 0xD7, 0xC9, 0xDF, 0xFE, | ||
828 | 0xAC, 0x20, 0x0D, 0xCD, 0x79, 0x1C, 0xCD, 0xC3, 0x1F, 0xCD, | ||
829 | 0x07, 0x23, 0x3E, 0x16, 0x18, 0x10, 0xFE, 0xAD, 0x20, 0x12, | ||
830 | 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xC3, 0x1F, 0xCD, 0x99, 0x1E, | ||
831 | 0x3E, 0x17, 0xD7, 0x79, 0xD7, 0x78, 0xD7, 0xC9, 0xCD, 0xF2, | ||
832 | 0x21, 0xD0, 0xCD, 0x70, 0x20, 0xD0, 0xCD, 0xFB, 0x24, 0xCD, | ||
833 | 0xC3, 0x1F, 0xFD, 0xCB, 0x01, 0x76, 0xCC, 0xF1, 0x2B, 0xC2, | ||
834 | 0xE3, 0x2D, 0x78, 0xB1, 0x0B, 0xC8, 0x1A, 0x13, 0xD7, 0x18, | ||
835 | 0xF7, 0xFE, 0x29, 0xC8, 0xFE, 0x0D, 0xC8, 0xFE, 0x3A, 0xC9, | ||
836 | 0xDF, 0xFE, 0x3B, 0x28, 0x14, 0xFE, 0x2C, 0x20, 0x0A, 0xCD, | ||
837 | 0x30, 0x25, 0x28, 0x0B, 0x3E, 0x06, 0xD7, 0x18, 0x06, 0xFE, | ||
838 | 0x27, 0xC0, 0xCD, 0xF5, 0x1F, 0xE7, 0xCD, 0x45, 0x20, 0x20, | ||
839 | 0x01, 0xC1, 0xBF, 0xC9, 0xFE, 0x23, 0x37, 0xC0, 0xE7, 0xCD, | ||
840 | 0x82, 0x1C, 0xA7, 0xCD, 0xC3, 0x1F, 0xCD, 0x94, 0x1E, 0xFE, | ||
841 | 0x10, 0xD2, 0x0E, 0x16, 0xCD, 0x01, 0x16, 0xA7, 0xC9, 0xCD, | ||
842 | 0x30, 0x25, 0x28, 0x08, 0x3E, 0x01, 0xCD, 0x01, 0x16, 0xCD, | ||
843 | 0x6E, 0x0D, 0xFD, 0x36, 0x02, 0x01, 0xCD, 0xC1, 0x20, 0xCD, | ||
844 | 0xEE, 0x1B, 0xED, 0x4B, 0x88, 0x5C, 0x3A, 0x6B, 0x5C, 0xB8, | ||
845 | 0x38, 0x03, 0x0E, 0x21, 0x47, 0xED, 0x43, 0x88, 0x5C, 0x3E, | ||
846 | 0x19, 0x90, 0x32, 0x8C, 0x5C, 0xFD, 0xCB, 0x02, 0x86, 0xCD, | ||
847 | 0xD9, 0x0D, 0xC3, 0x6E, 0x0D, 0xCD, 0x4E, 0x20, 0x28, 0xFB, | ||
848 | 0xFE, 0x28, 0x20, 0x0E, 0xE7, 0xCD, 0xDF, 0x1F, 0xDF, 0xFE, | ||
849 | 0x29, 0xC2, 0x8A, 0x1C, 0xE7, 0xC3, 0xB2, 0x21, 0xFE, 0xCA, | ||
850 | 0x20, 0x11, 0xE7, 0xCD, 0x1F, 0x1C, 0xFD, 0xCB, 0x37, 0xFE, | ||
851 | 0xFD, 0xCB, 0x01, 0x76, 0xC2, 0x8A, 0x1C, 0x18, 0x0D, 0xCD, | ||
852 | 0x8D, 0x2C, 0xD2, 0xAF, 0x21, 0xCD, 0x1F, 0x1C, 0xFD, 0xCB, | ||
853 | 0x37, 0xBE, 0xCD, 0x30, 0x25, 0xCA, 0xB2, 0x21, 0xCD, 0xBF, | ||
854 | 0x16, 0x21, 0x71, 0x5C, 0xCB, 0xB6, 0xCB, 0xEE, 0x01, 0x01, | ||
855 | 0x00, 0xCB, 0x7E, 0x20, 0x0B, 0x3A, 0x3B, 0x5C, 0xE6, 0x40, | ||
856 | 0x20, 0x02, 0x0E, 0x03, 0xB6, 0x77, 0xF7, 0x36, 0x0D, 0x79, | ||
857 | 0x0F, 0x0F, 0x30, 0x05, 0x3E, 0x22, 0x12, 0x2B, 0x77, 0x22, | ||
858 | 0x5B, 0x5C, 0xFD, 0xCB, 0x37, 0x7E, 0x20, 0x2C, 0x2A, 0x5D, | ||
859 | 0x5C, 0xE5, 0x2A, 0x3D, 0x5C, 0xE5, 0x21, 0x3A, 0x21, 0xE5, | ||
860 | 0xFD, 0xCB, 0x30, 0x66, 0x28, 0x04, 0xED, 0x73, 0x3D, 0x5C, | ||
861 | 0x2A, 0x61, 0x5C, 0xCD, 0xA7, 0x11, 0xFD, 0x36, 0x00, 0xFF, | ||
862 | 0xCD, 0x2C, 0x0F, 0xFD, 0xCB, 0x01, 0xBE, 0xCD, 0xB9, 0x21, | ||
863 | 0x18, 0x03, 0xCD, 0x2C, 0x0F, 0xFD, 0x36, 0x22, 0x00, 0xCD, | ||
864 | 0xD6, 0x21, 0x20, 0x0A, 0xCD, 0x1D, 0x11, 0xED, 0x4B, 0x82, | ||
865 | 0x5C, 0xCD, 0xD9, 0x0D, 0x21, 0x71, 0x5C, 0xCB, 0xAE, 0xCB, | ||
866 | 0x7E, 0xCB, 0xBE, 0x20, 0x1C, 0xE1, 0xE1, 0x22, 0x3D, 0x5C, | ||
867 | 0xE1, 0x22, 0x5F, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xCD, 0xB9, | ||
868 | 0x21, 0x2A, 0x5F, 0x5C, 0xFD, 0x36, 0x26, 0x00, 0x22, 0x5D, | ||
869 | 0x5C, 0x18, 0x17, 0x2A, 0x63, 0x5C, 0xED, 0x5B, 0x61, 0x5C, | ||
870 | 0x37, 0xED, 0x52, 0x44, 0x4D, 0xCD, 0xB2, 0x2A, 0xCD, 0xFF, | ||
871 | 0x2A, 0x18, 0x03, 0xCD, 0xFC, 0x1F, 0xCD, 0x4E, 0x20, 0xCA, | ||
872 | 0xC1, 0x20, 0xC9, 0x2A, 0x61, 0x5C, 0x22, 0x5D, 0x5C, 0xDF, | ||
873 | 0xFE, 0xE2, 0x28, 0x0C, 0x3A, 0x71, 0x5C, 0xCD, 0x59, 0x1C, | ||
874 | 0xDF, 0xFE, 0x0D, 0xC8, 0xCF, 0x0B, 0xCD, 0x30, 0x25, 0xC8, | ||
875 | 0xCF, 0x10, 0x2A, 0x51, 0x5C, 0x23, 0x23, 0x23, 0x23, 0x7E, | ||
876 | 0xFE, 0x4B, 0xC9, 0xE7, 0xCD, 0xF2, 0x21, 0xD8, 0xDF, 0xFE, | ||
877 | 0x2C, 0x28, 0xF6, 0xFE, 0x3B, 0x28, 0xF2, 0xC3, 0x8A, 0x1C, | ||
878 | 0xFE, 0xD9, 0xD8, 0xFE, 0xDF, 0x3F, 0xD8, 0xF5, 0xE7, 0xF1, | ||
879 | 0xD6, 0xC9, 0xF5, 0xCD, 0x82, 0x1C, 0xF1, 0xA7, 0xCD, 0xC3, | ||
880 | 0x1F, 0xF5, 0xCD, 0x94, 0x1E, 0x57, 0xF1, 0xD7, 0x7A, 0xD7, | ||
881 | 0xC9, 0xD6, 0x11, 0xCE, 0x00, 0x28, 0x1D, 0xD6, 0x02, 0xCE, | ||
882 | 0x00, 0x28, 0x56, 0xFE, 0x01, 0x7A, 0x06, 0x01, 0x20, 0x04, | ||
883 | 0x07, 0x07, 0x06, 0x04, 0x4F, 0x7A, 0xFE, 0x02, 0x30, 0x16, | ||
884 | 0x79, 0x21, 0x91, 0x5C, 0x18, 0x38, 0x7A, 0x06, 0x07, 0x38, | ||
885 | 0x05, 0x07, 0x07, 0x07, 0x06, 0x38, 0x4F, 0x7A, 0xFE, 0x0A, | ||
886 | 0x38, 0x02, 0xCF, 0x13, 0x21, 0x8F, 0x5C, 0xFE, 0x08, 0x38, | ||
887 | 0x0B, 0x7E, 0x28, 0x07, 0xB0, 0x2F, 0xE6, 0x24, 0x28, 0x01, | ||
888 | 0x78, 0x4F, 0x79, 0xCD, 0x6C, 0x22, 0x3E, 0x07, 0xBA, 0x9F, | ||
889 | 0xCD, 0x6C, 0x22, 0x07, 0x07, 0xE6, 0x50, 0x47, 0x3E, 0x08, | ||
890 | 0xBA, 0x9F, 0xAE, 0xA0, 0xAE, 0x77, 0x23, 0x78, 0xC9, 0x9F, | ||
891 | 0x7A, 0x0F, 0x06, 0x80, 0x20, 0x03, 0x0F, 0x06, 0x40, 0x4F, | ||
892 | 0x7A, 0xFE, 0x08, 0x28, 0x04, 0xFE, 0x02, 0x30, 0xBD, 0x79, | ||
893 | 0x21, 0x8F, 0x5C, 0xCD, 0x6C, 0x22, 0x79, 0x0F, 0x0F, 0x0F, | ||
894 | 0x18, 0xD8, 0xCD, 0x94, 0x1E, 0xFE, 0x08, 0x30, 0xA9, 0xD3, | ||
895 | 0xFE, 0x07, 0x07, 0x07, 0xCB, 0x6F, 0x20, 0x02, 0xEE, 0x07, | ||
896 | 0x32, 0x48, 0x5C, 0xC9, 0x3E, 0xAF, 0x90, 0xDA, 0xF9, 0x24, | ||
897 | 0x47, 0xA7, 0x1F, 0x37, 0x1F, 0xA7, 0x1F, 0xA8, 0xE6, 0xF8, | ||
898 | 0xA8, 0x67, 0x79, 0x07, 0x07, 0x07, 0xA8, 0xE6, 0xC7, 0xA8, | ||
899 | 0x07, 0x07, 0x6F, 0x79, 0xE6, 0x07, 0xC9, 0xCD, 0x07, 0x23, | ||
900 | 0xCD, 0xAA, 0x22, 0x47, 0x04, 0x7E, 0x07, 0x10, 0xFD, 0xE6, | ||
901 | 0x01, 0xC3, 0x28, 0x2D, 0xCD, 0x07, 0x23, 0xCD, 0xE5, 0x22, | ||
902 | 0xC3, 0x4D, 0x0D, 0xED, 0x43, 0x7D, 0x5C, 0xCD, 0xAA, 0x22, | ||
903 | 0x47, 0x04, 0x3E, 0xFE, 0x0F, 0x10, 0xFD, 0x47, 0x7E, 0xFD, | ||
904 | 0x4E, 0x57, 0xCB, 0x41, 0x20, 0x01, 0xA0, 0xCB, 0x51, 0x20, | ||
905 | 0x02, 0xA8, 0x2F, 0x77, 0xC3, 0xDB, 0x0B, 0xCD, 0x14, 0x23, | ||
906 | 0x47, 0xC5, 0xCD, 0x14, 0x23, 0x59, 0xC1, 0x51, 0x4F, 0xC9, | ||
907 | 0xCD, 0xD5, 0x2D, 0xDA, 0xF9, 0x24, 0x0E, 0x01, 0xC8, 0x0E, | ||
908 | 0xFF, 0xC9, 0xDF, 0xFE, 0x2C, 0xC2, 0x8A, 0x1C, 0xE7, 0xCD, | ||
909 | 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xEF, 0x2A, 0x3D, 0x38, 0x7E, | ||
910 | 0xFE, 0x81, 0x30, 0x05, 0xEF, 0x02, 0x38, 0x18, 0xA1, 0xEF, | ||
911 | 0xA3, 0x38, 0x36, 0x83, 0xEF, 0xC5, 0x02, 0x38, 0xCD, 0x7D, | ||
912 | 0x24, 0xC5, 0xEF, 0x31, 0xE1, 0x04, 0x38, 0x7E, 0xFE, 0x80, | ||
913 | 0x30, 0x08, 0xEF, 0x02, 0x02, 0x38, 0xC1, 0xC3, 0xDC, 0x22, | ||
914 | 0xEF, 0xC2, 0x01, 0xC0, 0x02, 0x03, 0x01, 0xE0, 0x0F, 0xC0, | ||
915 | 0x01, 0x31, 0xE0, 0x01, 0x31, 0xE0, 0xA0, 0xC1, 0x02, 0x38, | ||
916 | 0xFD, 0x34, 0x62, 0xCD, 0x94, 0x1E, 0x6F, 0xE5, 0xCD, 0x94, | ||
917 | 0x1E, 0xE1, 0x67, 0x22, 0x7D, 0x5C, 0xC1, 0xC3, 0x20, 0x24, | ||
918 | 0xDF, 0xFE, 0x2C, 0x28, 0x06, 0xCD, 0xEE, 0x1B, 0xC3, 0x77, | ||
919 | 0x24, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xEF, 0xC5, | ||
920 | 0xA2, 0x04, 0x1F, 0x31, 0x30, 0x30, 0x00, 0x06, 0x02, 0x38, | ||
921 | 0xC3, 0x77, 0x24, 0xC0, 0x02, 0xC1, 0x02, 0x31, 0x2A, 0xE1, | ||
922 | 0x01, 0xE1, 0x2A, 0x0F, 0xE0, 0x05, 0x2A, 0xE0, 0x01, 0x3D, | ||
923 | 0x38, 0x7E, 0xFE, 0x81, 0x30, 0x07, 0xEF, 0x02, 0x02, 0x38, | ||
924 | 0xC3, 0x77, 0x24, 0xCD, 0x7D, 0x24, 0xC5, 0xEF, 0x02, 0xE1, | ||
925 | 0x01, 0x05, 0xC1, 0x02, 0x01, 0x31, 0xE1, 0x04, 0xC2, 0x02, | ||
926 | 0x01, 0x31, 0xE1, 0x04, 0xE2, 0xE5, 0xE0, 0x03, 0xA2, 0x04, | ||
927 | 0x31, 0x1F, 0xC5, 0x02, 0x20, 0xC0, 0x02, 0xC2, 0x02, 0xC1, | ||
928 | 0xE5, 0x04, 0xE0, 0xE2, 0x04, 0x0F, 0xE1, 0x01, 0xC1, 0x02, | ||
929 | 0xE0, 0x04, 0xE2, 0xE5, 0x04, 0x03, 0xC2, 0x2A, 0xE1, 0x2A, | ||
930 | 0x0F, 0x02, 0x38, 0x1A, 0xFE, 0x81, 0xC1, 0xDA, 0x77, 0x24, | ||
931 | 0xC5, 0xEF, 0x01, 0x38, 0x3A, 0x7D, 0x5C, 0xCD, 0x28, 0x2D, | ||
932 | 0xEF, 0xC0, 0x0F, 0x01, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, 0x28, | ||
933 | 0x2D, 0xEF, 0xC5, 0x0F, 0xE0, 0xE5, 0x38, 0xC1, 0x05, 0x28, | ||
934 | 0x3C, 0x18, 0x14, 0xEF, 0xE1, 0x31, 0xE3, 0x04, 0xE2, 0xE4, | ||
935 | 0x04, 0x03, 0xC1, 0x02, 0xE4, 0x04, 0xE2, 0xE3, 0x04, 0x0F, | ||
936 | 0xC2, 0x02, 0x38, 0xC5, 0xEF, 0xC0, 0x02, 0xE1, 0x0F, 0x31, | ||
937 | 0x38, 0x3A, 0x7D, 0x5C, 0xCD, 0x28, 0x2D, 0xEF, 0x03, 0xE0, | ||
938 | 0xE2, 0x0F, 0xC0, 0x01, 0xE0, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, | ||
939 | 0x28, 0x2D, 0xEF, 0x03, 0x38, 0xCD, 0xB7, 0x24, 0xC1, 0x10, | ||
940 | 0xC6, 0xEF, 0x02, 0x02, 0x01, 0x38, 0x3A, 0x7D, 0x5C, 0xCD, | ||
941 | 0x28, 0x2D, 0xEF, 0x03, 0x01, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, | ||
942 | 0x28, 0x2D, 0xEF, 0x03, 0x38, 0xCD, 0xB7, 0x24, 0xC3, 0x4D, | ||
943 | 0x0D, 0xEF, 0x31, 0x28, 0x34, 0x32, 0x00, 0x01, 0x05, 0xE5, | ||
944 | 0x01, 0x05, 0x2A, 0x38, 0xCD, 0xD5, 0x2D, 0x38, 0x06, 0xE6, | ||
945 | 0xFC, 0xC6, 0x04, 0x30, 0x02, 0x3E, 0xFC, 0xF5, 0xCD, 0x28, | ||
946 | 0x2D, 0xEF, 0xE5, 0x01, 0x05, 0x31, 0x1F, 0xC4, 0x02, 0x31, | ||
947 | 0xA2, 0x04, 0x1F, 0xC1, 0x01, 0xC0, 0x02, 0x31, 0x04, 0x31, | ||
948 | 0x0F, 0xA1, 0x03, 0x1B, 0xC3, 0x02, 0x38, 0xC1, 0xC9, 0xCD, | ||
949 | 0x07, 0x23, 0x79, 0xB8, 0x30, 0x06, 0x69, 0xD5, 0xAF, 0x5F, | ||
950 | 0x18, 0x07, 0xB1, 0xC8, 0x68, 0x41, 0xD5, 0x16, 0x00, 0x60, | ||
951 | 0x78, 0x1F, 0x85, 0x38, 0x03, 0xBC, 0x38, 0x07, 0x94, 0x4F, | ||
952 | 0xD9, 0xC1, 0xC5, 0x18, 0x04, 0x4F, 0xD5, 0xD9, 0xC1, 0x2A, | ||
953 | 0x7D, 0x5C, 0x78, 0x84, 0x47, 0x79, 0x3C, 0x85, 0x38, 0x0D, | ||
954 | 0x28, 0x0D, 0x3D, 0x4F, 0xCD, 0xE5, 0x22, 0xD9, 0x79, 0x10, | ||
955 | 0xD9, 0xD1, 0xC9, 0x28, 0xF3, 0xCF, 0x0A, 0xDF, 0x06, 0x00, | ||
956 | 0xC5, 0x4F, 0x21, 0x96, 0x25, 0xCD, 0xDC, 0x16, 0x79, 0xD2, | ||
957 | 0x84, 0x26, 0x06, 0x00, 0x4E, 0x09, 0xE9, 0xCD, 0x74, 0x00, | ||
958 | 0x03, 0xFE, 0x0D, 0xCA, 0x8A, 0x1C, 0xFE, 0x22, 0x20, 0xF3, | ||
959 | 0xCD, 0x74, 0x00, 0xFE, 0x22, 0xC9, 0xE7, 0xFE, 0x28, 0x20, | ||
960 | 0x06, 0xCD, 0x79, 0x1C, 0xDF, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, | ||
961 | 0xFD, 0xCB, 0x01, 0x7E, 0xC9, 0xCD, 0x07, 0x23, 0x2A, 0x36, | ||
962 | 0x5C, 0x11, 0x00, 0x01, 0x19, 0x79, 0x0F, 0x0F, 0x0F, 0xE6, | ||
963 | 0xE0, 0xA8, 0x5F, 0x79, 0xE6, 0x18, 0xEE, 0x40, 0x57, 0x06, | ||
964 | 0x60, 0xC5, 0xD5, 0xE5, 0x1A, 0xAE, 0x28, 0x04, 0x3C, 0x20, | ||
965 | 0x1A, 0x3D, 0x4F, 0x06, 0x07, 0x14, 0x23, 0x1A, 0xAE, 0xA9, | ||
966 | 0x20, 0x0F, 0x10, 0xF7, 0xC1, 0xC1, 0xC1, 0x3E, 0x80, 0x90, | ||
967 | 0x01, 0x01, 0x00, 0xF7, 0x12, 0x18, 0x0A, 0xE1, 0x11, 0x08, | ||
968 | 0x00, 0x19, 0xD1, 0xC1, 0x10, 0xD3, 0x48, 0xC3, 0xB2, 0x2A, | ||
969 | 0xCD, 0x07, 0x23, 0x79, 0x0F, 0x0F, 0x0F, 0x4F, 0xE6, 0xE0, | ||
970 | 0xA8, 0x6F, 0x79, 0xE6, 0x03, 0xEE, 0x58, 0x67, 0x7E, 0xC3, | ||
971 | 0x28, 0x2D, 0x22, 0x1C, 0x28, 0x4F, 0x2E, 0xF2, 0x2B, 0x12, | ||
972 | 0xA8, 0x56, 0xA5, 0x57, 0xA7, 0x84, 0xA6, 0x8F, 0xC4, 0xE6, | ||
973 | 0xAA, 0xBF, 0xAB, 0xC7, 0xA9, 0xCE, 0x00, 0xE7, 0xC3, 0xFF, | ||
974 | 0x24, 0xDF, 0x23, 0xE5, 0x01, 0x00, 0x00, 0xCD, 0x0F, 0x25, | ||
975 | 0x20, 0x1B, 0xCD, 0x0F, 0x25, 0x28, 0xFB, 0xCD, 0x30, 0x25, | ||
976 | 0x28, 0x11, 0xF7, 0xE1, 0xD5, 0x7E, 0x23, 0x12, 0x13, 0xFE, | ||
977 | 0x22, 0x20, 0xF8, 0x7E, 0x23, 0xFE, 0x22, 0x28, 0xF2, 0x0B, | ||
978 | 0xD1, 0x21, 0x3B, 0x5C, 0xCB, 0xB6, 0xCB, 0x7E, 0xC4, 0xB2, | ||
979 | 0x2A, 0xC3, 0x12, 0x27, 0xE7, 0xCD, 0xFB, 0x24, 0xFE, 0x29, | ||
980 | 0xC2, 0x8A, 0x1C, 0xE7, 0xC3, 0x12, 0x27, 0xC3, 0xBD, 0x27, | ||
981 | 0xCD, 0x30, 0x25, 0x28, 0x28, 0xED, 0x4B, 0x76, 0x5C, 0xCD, | ||
982 | 0x2B, 0x2D, 0xEF, 0xA1, 0x0F, 0x34, 0x37, 0x16, 0x04, 0x34, | ||
983 | 0x80, 0x41, 0x00, 0x00, 0x80, 0x32, 0x02, 0xA1, 0x03, 0x31, | ||
984 | 0x38, 0xCD, 0xA2, 0x2D, 0xED, 0x43, 0x76, 0x5C, 0x7E, 0xA7, | ||
985 | 0x28, 0x03, 0xD6, 0x10, 0x77, 0x18, 0x09, 0xCD, 0x30, 0x25, | ||
986 | 0x28, 0x04, 0xEF, 0xA3, 0x38, 0x34, 0xE7, 0xC3, 0xC3, 0x26, | ||
987 | 0x01, 0x5A, 0x10, 0xE7, 0xFE, 0x23, 0xCA, 0x0D, 0x27, 0x21, | ||
988 | 0x3B, 0x5C, 0xCB, 0xB6, 0xCB, 0x7E, 0x28, 0x1F, 0xCD, 0x8E, | ||
989 | 0x02, 0x0E, 0x00, 0x20, 0x13, 0xCD, 0x1E, 0x03, 0x30, 0x0E, | ||
990 | 0x15, 0x5F, 0xCD, 0x33, 0x03, 0xF5, 0x01, 0x01, 0x00, 0xF7, | ||
991 | 0xF1, 0x12, 0x0E, 0x01, 0x06, 0x00, 0xCD, 0xB2, 0x2A, 0xC3, | ||
992 | 0x12, 0x27, 0xCD, 0x22, 0x25, 0xC4, 0x35, 0x25, 0xE7, 0xC3, | ||
993 | 0xDB, 0x25, 0xCD, 0x22, 0x25, 0xC4, 0x80, 0x25, 0xE7, 0x18, | ||
994 | 0x48, 0xCD, 0x22, 0x25, 0xC4, 0xCB, 0x22, 0xE7, 0x18, 0x3F, | ||
995 | 0xCD, 0x88, 0x2C, 0x30, 0x56, 0xFE, 0x41, 0x30, 0x3C, 0xCD, | ||
996 | 0x30, 0x25, 0x20, 0x23, 0xCD, 0x9B, 0x2C, 0xDF, 0x01, 0x06, | ||
997 | 0x00, 0xCD, 0x55, 0x16, 0x23, 0x36, 0x0E, 0x23, 0xEB, 0x2A, | ||
998 | 0x65, 0x5C, 0x0E, 0x05, 0xA7, 0xED, 0x42, 0x22, 0x65, 0x5C, | ||
999 | 0xED, 0xB0, 0xEB, 0x2B, 0xCD, 0x77, 0x00, 0x18, 0x0E, 0xDF, | ||
1000 | 0x23, 0x7E, 0xFE, 0x0E, 0x20, 0xFA, 0x23, 0xCD, 0xB4, 0x33, | ||
1001 | 0x22, 0x5D, 0x5C, 0xFD, 0xCB, 0x01, 0xF6, 0x18, 0x14, 0xCD, | ||
1002 | 0xB2, 0x28, 0xDA, 0x2E, 0x1C, 0xCC, 0x96, 0x29, 0x3A, 0x3B, | ||
1003 | 0x5C, 0xFE, 0xC0, 0x38, 0x04, 0x23, 0xCD, 0xB4, 0x33, 0x18, | ||
1004 | 0x33, 0x01, 0xDB, 0x09, 0xFE, 0x2D, 0x28, 0x27, 0x01, 0x18, | ||
1005 | 0x10, 0xFE, 0xAE, 0x28, 0x20, 0xD6, 0xAF, 0xDA, 0x8A, 0x1C, | ||
1006 | 0x01, 0xF0, 0x04, 0xFE, 0x14, 0x28, 0x14, 0xD2, 0x8A, 0x1C, | ||
1007 | 0x06, 0x10, 0xC6, 0xDC, 0x4F, 0xFE, 0xDF, 0x30, 0x02, 0xCB, | ||
1008 | 0xB1, 0xFE, 0xEE, 0x38, 0x02, 0xCB, 0xB9, 0xC5, 0xE7, 0xC3, | ||
1009 | 0xFF, 0x24, 0xDF, 0xFE, 0x28, 0x20, 0x0C, 0xFD, 0xCB, 0x01, | ||
1010 | 0x76, 0x20, 0x17, 0xCD, 0x52, 0x2A, 0xE7, 0x18, 0xF0, 0x06, | ||
1011 | 0x00, 0x4F, 0x21, 0x95, 0x27, 0xCD, 0xDC, 0x16, 0x30, 0x06, | ||
1012 | 0x4E, 0x21, 0xED, 0x26, 0x09, 0x46, 0xD1, 0x7A, 0xB8, 0x38, | ||
1013 | 0x3A, 0xA7, 0xCA, 0x18, 0x00, 0xC5, 0x21, 0x3B, 0x5C, 0x7B, | ||
1014 | 0xFE, 0xED, 0x20, 0x06, 0xCB, 0x76, 0x20, 0x02, 0x1E, 0x99, | ||
1015 | 0xD5, 0xCD, 0x30, 0x25, 0x28, 0x09, 0x7B, 0xE6, 0x3F, 0x47, | ||
1016 | 0xEF, 0x3B, 0x38, 0x18, 0x09, 0x7B, 0xFD, 0xAE, 0x01, 0xE6, | ||
1017 | 0x40, 0xC2, 0x8A, 0x1C, 0xD1, 0x21, 0x3B, 0x5C, 0xCB, 0xF6, | ||
1018 | 0xCB, 0x7B, 0x20, 0x02, 0xCB, 0xB6, 0xC1, 0x18, 0xC1, 0xD5, | ||
1019 | 0x79, 0xFD, 0xCB, 0x01, 0x76, 0x20, 0x15, 0xE6, 0x3F, 0xC6, | ||
1020 | 0x08, 0x4F, 0xFE, 0x10, 0x20, 0x04, 0xCB, 0xF1, 0x18, 0x08, | ||
1021 | 0x38, 0xD7, 0xFE, 0x17, 0x28, 0x02, 0xCB, 0xF9, 0xC5, 0xE7, | ||
1022 | 0xC3, 0xFF, 0x24, 0x2B, 0xCF, 0x2D, 0xC3, 0x2A, 0xC4, 0x2F, | ||
1023 | 0xC5, 0x5E, 0xC6, 0x3D, 0xCE, 0x3E, 0xCC, 0x3C, 0xCD, 0xC7, | ||
1024 | 0xC9, 0xC8, 0xCA, 0xC9, 0xCB, 0xC5, 0xC7, 0xC6, 0xC8, 0x00, | ||
1025 | 0x06, 0x08, 0x08, 0x0A, 0x02, 0x03, 0x05, 0x05, 0x05, 0x05, | ||
1026 | 0x05, 0x05, 0x06, 0xCD, 0x30, 0x25, 0x20, 0x35, 0xE7, 0xCD, | ||
1027 | 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xE7, 0xFE, 0x24, 0xF5, 0x20, | ||
1028 | 0x01, 0xE7, 0xFE, 0x28, 0x20, 0x12, 0xE7, 0xFE, 0x29, 0x28, | ||
1029 | 0x10, 0xCD, 0xFB, 0x24, 0xDF, 0xFE, 0x2C, 0x20, 0x03, 0xE7, | ||
1030 | 0x18, 0xF5, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, 0xE7, 0x21, 0x3B, | ||
1031 | 0x5C, 0xCB, 0xB6, 0xF1, 0x28, 0x02, 0xCB, 0xF6, 0xC3, 0x12, | ||
1032 | 0x27, 0xE7, 0xE6, 0xDF, 0x47, 0xE7, 0xD6, 0x24, 0x4F, 0x20, | ||
1033 | 0x01, 0xE7, 0xE7, 0xE5, 0x2A, 0x53, 0x5C, 0x2B, 0x11, 0xCE, | ||
1034 | 0x00, 0xC5, 0xCD, 0x86, 0x1D, 0xC1, 0x30, 0x02, 0xCF, 0x18, | ||
1035 | 0xE5, 0xCD, 0xAB, 0x28, 0xE6, 0xDF, 0xB8, 0x20, 0x08, 0xCD, | ||
1036 | 0xAB, 0x28, 0xD6, 0x24, 0xB9, 0x28, 0x0C, 0xE1, 0x2B, 0x11, | ||
1037 | 0x00, 0x02, 0xC5, 0xCD, 0x8B, 0x19, 0xC1, 0x18, 0xD7, 0xA7, | ||
1038 | 0xCC, 0xAB, 0x28, 0xD1, 0xD1, 0xED, 0x53, 0x5D, 0x5C, 0xCD, | ||
1039 | 0xAB, 0x28, 0xE5, 0xFE, 0x29, 0x28, 0x42, 0x23, 0x7E, 0xFE, | ||
1040 | 0x0E, 0x16, 0x40, 0x28, 0x07, 0x2B, 0xCD, 0xAB, 0x28, 0x23, | ||
1041 | 0x16, 0x00, 0x23, 0xE5, 0xD5, 0xCD, 0xFB, 0x24, 0xF1, 0xFD, | ||
1042 | 0xAE, 0x01, 0xE6, 0x40, 0x20, 0x2B, 0xE1, 0xEB, 0x2A, 0x65, | ||
1043 | 0x5C, 0x01, 0x05, 0x00, 0xED, 0x42, 0x22, 0x65, 0x5C, 0xED, | ||
1044 | 0xB0, 0xEB, 0x2B, 0xCD, 0xAB, 0x28, 0xFE, 0x29, 0x28, 0x0D, | ||
1045 | 0xE5, 0xDF, 0xFE, 0x2C, 0x20, 0x0D, 0xE7, 0xE1, 0xCD, 0xAB, | ||
1046 | 0x28, 0x18, 0xBE, 0xE5, 0xDF, 0xFE, 0x29, 0x28, 0x02, 0xCF, | ||
1047 | 0x19, 0xD1, 0xEB, 0x22, 0x5D, 0x5C, 0x2A, 0x0B, 0x5C, 0xE3, | ||
1048 | 0x22, 0x0B, 0x5C, 0xD5, 0xE7, 0xE7, 0xCD, 0xFB, 0x24, 0xE1, | ||
1049 | 0x22, 0x5D, 0x5C, 0xE1, 0x22, 0x0B, 0x5C, 0xE7, 0xC3, 0x12, | ||
1050 | 0x27, 0x23, 0x7E, 0xFE, 0x21, 0x38, 0xFA, 0xC9, 0xFD, 0xCB, | ||
1051 | 0x01, 0xF6, 0xDF, 0xCD, 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xE5, | ||
1052 | 0xE6, 0x1F, 0x4F, 0xE7, 0xE5, 0xFE, 0x28, 0x28, 0x28, 0xCB, | ||
1053 | 0xF1, 0xFE, 0x24, 0x28, 0x11, 0xCB, 0xE9, 0xCD, 0x88, 0x2C, | ||
1054 | 0x30, 0x0F, 0xCD, 0x88, 0x2C, 0x30, 0x16, 0xCB, 0xB1, 0xE7, | ||
1055 | 0x18, 0xF6, 0xE7, 0xFD, 0xCB, 0x01, 0xB6, 0x3A, 0x0C, 0x5C, | ||
1056 | 0xA7, 0x28, 0x06, 0xCD, 0x30, 0x25, 0xC2, 0x51, 0x29, 0x41, | ||
1057 | 0xCD, 0x30, 0x25, 0x20, 0x08, 0x79, 0xE6, 0xE0, 0xCB, 0xFF, | ||
1058 | 0x4F, 0x18, 0x37, 0x2A, 0x4B, 0x5C, 0x7E, 0xE6, 0x7F, 0x28, | ||
1059 | 0x2D, 0xB9, 0x20, 0x22, 0x17, 0x87, 0xF2, 0x3F, 0x29, 0x38, | ||
1060 | 0x30, 0xD1, 0xD5, 0xE5, 0x23, 0x1A, 0x13, 0xFE, 0x20, 0x28, | ||
1061 | 0xFA, 0xF6, 0x20, 0xBE, 0x28, 0xF4, 0xF6, 0x80, 0xBE, 0x20, | ||
1062 | 0x06, 0x1A, 0xCD, 0x88, 0x2C, 0x30, 0x15, 0xE1, 0xC5, 0xCD, | ||
1063 | 0xB8, 0x19, 0xEB, 0xC1, 0x18, 0xCE, 0xCB, 0xF8, 0xD1, 0xDF, | ||
1064 | 0xFE, 0x28, 0x28, 0x09, 0xCB, 0xE8, 0x18, 0x0D, 0xD1, 0xD1, | ||
1065 | 0xD1, 0xE5, 0xDF, 0xCD, 0x88, 0x2C, 0x30, 0x03, 0xE7, 0x18, | ||
1066 | 0xF8, 0xE1, 0xCB, 0x10, 0xCB, 0x70, 0xC9, 0x2A, 0x0B, 0x5C, | ||
1067 | 0x7E, 0xFE, 0x29, 0xCA, 0xEF, 0x28, 0x7E, 0xF6, 0x60, 0x47, | ||
1068 | 0x23, 0x7E, 0xFE, 0x0E, 0x28, 0x07, 0x2B, 0xCD, 0xAB, 0x28, | ||
1069 | 0x23, 0xCB, 0xA8, 0x78, 0xB9, 0x28, 0x12, 0x23, 0x23, 0x23, | ||
1070 | 0x23, 0x23, 0xCD, 0xAB, 0x28, 0xFE, 0x29, 0xCA, 0xEF, 0x28, | ||
1071 | 0xCD, 0xAB, 0x28, 0x18, 0xD9, 0xCB, 0x69, 0x20, 0x0C, 0x23, | ||
1072 | 0xED, 0x5B, 0x65, 0x5C, 0xCD, 0xC0, 0x33, 0xEB, 0x22, 0x65, | ||
1073 | 0x5C, 0xD1, 0xD1, 0xAF, 0x3C, 0xC9, 0xAF, 0x47, 0xCB, 0x79, | ||
1074 | 0x20, 0x4B, 0xCB, 0x7E, 0x20, 0x0E, 0x3C, 0x23, 0x4E, 0x23, | ||
1075 | 0x46, 0x23, 0xEB, 0xCD, 0xB2, 0x2A, 0xDF, 0xC3, 0x49, 0x2A, | ||
1076 | 0x23, 0x23, 0x23, 0x46, 0xCB, 0x71, 0x28, 0x0A, 0x05, 0x28, | ||
1077 | 0xE8, 0xEB, 0xDF, 0xFE, 0x28, 0x20, 0x61, 0xEB, 0xEB, 0x18, | ||
1078 | 0x24, 0xE5, 0xDF, 0xE1, 0xFE, 0x2C, 0x28, 0x20, 0xCB, 0x79, | ||
1079 | 0x28, 0x52, 0xCB, 0x71, 0x20, 0x06, 0xFE, 0x29, 0x20, 0x3C, | ||
1080 | 0xE7, 0xC9, 0xFE, 0x29, 0x28, 0x6C, 0xFE, 0xCC, 0x20, 0x32, | ||
1081 | 0xDF, 0x2B, 0x22, 0x5D, 0x5C, 0x18, 0x5E, 0x21, 0x00, 0x00, | ||
1082 | 0xE5, 0xE7, 0xE1, 0x79, 0xFE, 0xC0, 0x20, 0x09, 0xDF, 0xFE, | ||
1083 | 0x29, 0x28, 0x51, 0xFE, 0xCC, 0x28, 0xE5, 0xC5, 0xE5, 0xCD, | ||
1084 | 0xEE, 0x2A, 0xE3, 0xEB, 0xCD, 0xCC, 0x2A, 0x38, 0x19, 0x0B, | ||
1085 | 0xCD, 0xF4, 0x2A, 0x09, 0xD1, 0xC1, 0x10, 0xB3, 0xCB, 0x79, | ||
1086 | 0x20, 0x66, 0xE5, 0xCB, 0x71, 0x20, 0x13, 0x42, 0x4B, 0xDF, | ||
1087 | 0xFE, 0x29, 0x28, 0x02, 0xCF, 0x02, 0xE7, 0xE1, 0x11, 0x05, | ||
1088 | 0x00, 0xCD, 0xF4, 0x2A, 0x09, 0xC9, 0xCD, 0xEE, 0x2A, 0xE3, | ||
1089 | 0xCD, 0xF4, 0x2A, 0xC1, 0x09, 0x23, 0x42, 0x4B, 0xEB, 0xCD, | ||
1090 | 0xB1, 0x2A, 0xDF, 0xFE, 0x29, 0x28, 0x07, 0xFE, 0x2C, 0x20, | ||
1091 | 0xDB, 0xCD, 0x52, 0x2A, 0xE7, 0xFE, 0x28, 0x28, 0xF8, 0xFD, | ||
1092 | 0xCB, 0x01, 0xB6, 0xC9, 0xCD, 0x30, 0x25, 0xC4, 0xF1, 0x2B, | ||
1093 | 0xE7, 0xFE, 0x29, 0x28, 0x50, 0xD5, 0xAF, 0xF5, 0xC5, 0x11, | ||
1094 | 0x01, 0x00, 0xDF, 0xE1, 0xFE, 0xCC, 0x28, 0x17, 0xF1, 0xCD, | ||
1095 | 0xCD, 0x2A, 0xF5, 0x50, 0x59, 0xE5, 0xDF, 0xE1, 0xFE, 0xCC, | ||
1096 | 0x28, 0x09, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, 0x62, 0x6B, 0x18, | ||
1097 | 0x13, 0xE5, 0xE7, 0xE1, 0xFE, 0x29, 0x28, 0x0C, 0xF1, 0xCD, | ||
1098 | 0xCD, 0x2A, 0xF5, 0xDF, 0x60, 0x69, 0xFE, 0x29, 0x20, 0xE6, | ||
1099 | 0xF1, 0xE3, 0x19, 0x2B, 0xE3, 0xA7, 0xED, 0x52, 0x01, 0x00, | ||
1100 | 0x00, 0x38, 0x07, 0x23, 0xA7, 0xFA, 0x20, 0x2A, 0x44, 0x4D, | ||
1101 | 0xD1, 0xFD, 0xCB, 0x01, 0xB6, 0xCD, 0x30, 0x25, 0xC8, 0xAF, | ||
1102 | 0xFD, 0xCB, 0x01, 0xB6, 0xC5, 0xCD, 0xA9, 0x33, 0xC1, 0x2A, | ||
1103 | 0x65, 0x5C, 0x77, 0x23, 0x73, 0x23, 0x72, 0x23, 0x71, 0x23, | ||
1104 | 0x70, 0x23, 0x22, 0x65, 0x5C, 0xC9, 0xAF, 0xD5, 0xE5, 0xF5, | ||
1105 | 0xCD, 0x82, 0x1C, 0xF1, 0xCD, 0x30, 0x25, 0x28, 0x12, 0xF5, | ||
1106 | 0xCD, 0x99, 0x1E, 0xD1, 0x78, 0xB1, 0x37, 0x28, 0x05, 0xE1, | ||
1107 | 0xE5, 0xA7, 0xED, 0x42, 0x7A, 0xDE, 0x00, 0xE1, 0xD1, 0xC9, | ||
1108 | 0xEB, 0x23, 0x5E, 0x23, 0x56, 0xC9, 0xCD, 0x30, 0x25, 0xC8, | ||
1109 | 0xCD, 0xA9, 0x30, 0xDA, 0x15, 0x1F, 0xC9, 0x2A, 0x4D, 0x5C, | ||
1110 | 0xFD, 0xCB, 0x37, 0x4E, 0x28, 0x5E, 0x01, 0x05, 0x00, 0x03, | ||
1111 | 0x23, 0x7E, 0xFE, 0x20, 0x28, 0xFA, 0x30, 0x0B, 0xFE, 0x10, | ||
1112 | 0x38, 0x11, 0xFE, 0x16, 0x30, 0x0D, 0x23, 0x18, 0xED, 0xCD, | ||
1113 | 0x88, 0x2C, 0x38, 0xE7, 0xFE, 0x24, 0xCA, 0xC0, 0x2B, 0x79, | ||
1114 | 0x2A, 0x59, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x23, 0xEB, | ||
1115 | 0xD5, 0x2A, 0x4D, 0x5C, 0x1B, 0xD6, 0x06, 0x47, 0x28, 0x11, | ||
1116 | 0x23, 0x7E, 0xFE, 0x21, 0x38, 0xFA, 0xF6, 0x20, 0x13, 0x12, | ||
1117 | 0x10, 0xF4, 0xF6, 0x80, 0x12, 0x3E, 0xC0, 0x2A, 0x4D, 0x5C, | ||
1118 | 0xAE, 0xF6, 0x20, 0xE1, 0xCD, 0xEA, 0x2B, 0xE5, 0xEF, 0x02, | ||
1119 | 0x38, 0xE1, 0x01, 0x05, 0x00, 0xA7, 0xED, 0x42, 0x18, 0x40, | ||
1120 | 0xFD, 0xCB, 0x01, 0x76, 0x28, 0x06, 0x11, 0x06, 0x00, 0x19, | ||
1121 | 0x18, 0xE7, 0x2A, 0x4D, 0x5C, 0xED, 0x4B, 0x72, 0x5C, 0xFD, | ||
1122 | 0xCB, 0x37, 0x46, 0x20, 0x30, 0x78, 0xB1, 0xC8, 0xE5, 0xF7, | ||
1123 | 0xD5, 0xC5, 0x54, 0x5D, 0x23, 0x36, 0x20, 0xED, 0xB8, 0xE5, | ||
1124 | 0xCD, 0xF1, 0x2B, 0xE1, 0xE3, 0xA7, 0xED, 0x42, 0x09, 0x30, | ||
1125 | 0x02, 0x44, 0x4D, 0xE3, 0xEB, 0x78, 0xB1, 0x28, 0x02, 0xED, | ||
1126 | 0xB0, 0xC1, 0xD1, 0xE1, 0xEB, 0x78, 0xB1, 0xC8, 0xD5, 0xED, | ||
1127 | 0xB0, 0xE1, 0xC9, 0x2B, 0x2B, 0x2B, 0x7E, 0xE5, 0xC5, 0xCD, | ||
1128 | 0xC6, 0x2B, 0xC1, 0xE1, 0x03, 0x03, 0x03, 0xC3, 0xE8, 0x19, | ||
1129 | 0x3E, 0xDF, 0x2A, 0x4D, 0x5C, 0xA6, 0xF5, 0xCD, 0xF1, 0x2B, | ||
1130 | 0xEB, 0x09, 0xC5, 0x2B, 0x22, 0x4D, 0x5C, 0x03, 0x03, 0x03, | ||
1131 | 0x2A, 0x59, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x2A, 0x4D, 0x5C, | ||
1132 | 0xC1, 0xC5, 0x03, 0xED, 0xB8, 0xEB, 0x23, 0xC1, 0x70, 0x2B, | ||
1133 | 0x71, 0xF1, 0x2B, 0x77, 0x2A, 0x59, 0x5C, 0x2B, 0xC9, 0x2A, | ||
1134 | 0x65, 0x5C, 0x2B, 0x46, 0x2B, 0x4E, 0x2B, 0x56, 0x2B, 0x5E, | ||
1135 | 0x2B, 0x7E, 0x22, 0x65, 0x5C, 0xC9, 0xCD, 0xB2, 0x28, 0xC2, | ||
1136 | 0x8A, 0x1C, 0xCD, 0x30, 0x25, 0x20, 0x08, 0xCB, 0xB1, 0xCD, | ||
1137 | 0x96, 0x29, 0xCD, 0xEE, 0x1B, 0x38, 0x08, 0xC5, 0xCD, 0xB8, | ||
1138 | 0x19, 0xCD, 0xE8, 0x19, 0xC1, 0xCB, 0xF9, 0x06, 0x00, 0xC5, | ||
1139 | 0x21, 0x01, 0x00, 0xCB, 0x71, 0x20, 0x02, 0x2E, 0x05, 0xEB, | ||
1140 | 0xE7, 0x26, 0xFF, 0xCD, 0xCC, 0x2A, 0xDA, 0x20, 0x2A, 0xE1, | ||
1141 | 0xC5, 0x24, 0xE5, 0x60, 0x69, 0xCD, 0xF4, 0x2A, 0xEB, 0xDF, | ||
1142 | 0xFE, 0x2C, 0x28, 0xE8, 0xFE, 0x29, 0x20, 0xBB, 0xE7, 0xC1, | ||
1143 | 0x79, 0x68, 0x26, 0x00, 0x23, 0x23, 0x29, 0x19, 0xDA, 0x15, | ||
1144 | 0x1F, 0xD5, 0xC5, 0xE5, 0x44, 0x4D, 0x2A, 0x59, 0x5C, 0x2B, | ||
1145 | 0xCD, 0x55, 0x16, 0x23, 0x77, 0xC1, 0x0B, 0x0B, 0x0B, 0x23, | ||
1146 | 0x71, 0x23, 0x70, 0xC1, 0x78, 0x23, 0x77, 0x62, 0x6B, 0x1B, | ||
1147 | 0x36, 0x00, 0xCB, 0x71, 0x28, 0x02, 0x36, 0x20, 0xC1, 0xED, | ||
1148 | 0xB8, 0xC1, 0x70, 0x2B, 0x71, 0x2B, 0x3D, 0x20, 0xF8, 0xC9, | ||
1149 | 0xCD, 0x1B, 0x2D, 0x3F, 0xD8, 0xFE, 0x41, 0x3F, 0xD0, 0xFE, | ||
1150 | 0x5B, 0xD8, 0xFE, 0x61, 0x3F, 0xD0, 0xFE, 0x7B, 0xC9, 0xFE, | ||
1151 | 0xC4, 0x20, 0x19, 0x11, 0x00, 0x00, 0xE7, 0xD6, 0x31, 0xCE, | ||
1152 | 0x00, 0x20, 0x0A, 0xEB, 0x3F, 0xED, 0x6A, 0xDA, 0xAD, 0x31, | ||
1153 | 0xEB, 0x18, 0xEF, 0x42, 0x4B, 0xC3, 0x2B, 0x2D, 0xFE, 0x2E, | ||
1154 | 0x28, 0x0F, 0xCD, 0x3B, 0x2D, 0xFE, 0x2E, 0x20, 0x28, 0xE7, | ||
1155 | 0xCD, 0x1B, 0x2D, 0x38, 0x22, 0x18, 0x0A, 0xE7, 0xCD, 0x1B, | ||
1156 | 0x2D, 0xDA, 0x8A, 0x1C, 0xEF, 0xA0, 0x38, 0xEF, 0xA1, 0xC0, | ||
1157 | 0x02, 0x38, 0xDF, 0xCD, 0x22, 0x2D, 0x38, 0x0B, 0xEF, 0xE0, | ||
1158 | 0xA4, 0x05, 0xC0, 0x04, 0x0F, 0x38, 0xE7, 0x18, 0xEF, 0xFE, | ||
1159 | 0x45, 0x28, 0x03, 0xFE, 0x65, 0xC0, 0x06, 0xFF, 0xE7, 0xFE, | ||
1160 | 0x2B, 0x28, 0x05, 0xFE, 0x2D, 0x20, 0x02, 0x04, 0xE7, 0xCD, | ||
1161 | 0x1B, 0x2D, 0x38, 0xCB, 0xC5, 0xCD, 0x3B, 0x2D, 0xCD, 0xD5, | ||
1162 | 0x2D, 0xC1, 0xDA, 0xAD, 0x31, 0xA7, 0xFA, 0xAD, 0x31, 0x04, | ||
1163 | 0x28, 0x02, 0xED, 0x44, 0xC3, 0x4F, 0x2D, 0xFE, 0x30, 0xD8, | ||
1164 | 0xFE, 0x3A, 0x3F, 0xC9, 0xCD, 0x1B, 0x2D, 0xD8, 0xD6, 0x30, | ||
1165 | 0x4F, 0x06, 0x00, 0xFD, 0x21, 0x3A, 0x5C, 0xAF, 0x5F, 0x51, | ||
1166 | 0x48, 0x47, 0xCD, 0xB6, 0x2A, 0xEF, 0x38, 0xA7, 0xC9, 0xF5, | ||
1167 | 0xEF, 0xA0, 0x38, 0xF1, 0xCD, 0x22, 0x2D, 0xD8, 0xEF, 0x01, | ||
1168 | 0xA4, 0x04, 0x0F, 0x38, 0xCD, 0x74, 0x00, 0x18, 0xF1, 0x07, | ||
1169 | 0x0F, 0x30, 0x02, 0x2F, 0x3C, 0xF5, 0x21, 0x92, 0x5C, 0xCD, | ||
1170 | 0x0B, 0x35, 0xEF, 0xA4, 0x38, 0xF1, 0xCB, 0x3F, 0x30, 0x0D, | ||
1171 | 0xF5, 0xEF, 0xC1, 0xE0, 0x00, 0x04, 0x04, 0x33, 0x02, 0x05, | ||
1172 | 0xE1, 0x38, 0xF1, 0x28, 0x08, 0xF5, 0xEF, 0x31, 0x04, 0x38, | ||
1173 | 0xF1, 0x18, 0xE5, 0xEF, 0x02, 0x38, 0xC9, 0x23, 0x4E, 0x23, | ||
1174 | 0x7E, 0xA9, 0x91, 0x5F, 0x23, 0x7E, 0x89, 0xA9, 0x57, 0xC9, | ||
1175 | 0x0E, 0x00, 0xE5, 0x36, 0x00, 0x23, 0x71, 0x23, 0x7B, 0xA9, | ||
1176 | 0x91, 0x77, 0x23, 0x7A, 0x89, 0xA9, 0x77, 0x23, 0x36, 0x00, | ||
1177 | 0xE1, 0xC9, 0xEF, 0x38, 0x7E, 0xA7, 0x28, 0x05, 0xEF, 0xA2, | ||
1178 | 0x0F, 0x27, 0x38, 0xEF, 0x02, 0x38, 0xE5, 0xD5, 0xEB, 0x46, | ||
1179 | 0xCD, 0x7F, 0x2D, 0xAF, 0x90, 0xCB, 0x79, 0x42, 0x4B, 0x7B, | ||
1180 | 0xD1, 0xE1, 0xC9, 0x57, 0x17, 0x9F, 0x5F, 0x4F, 0xAF, 0x47, | ||
1181 | 0xCD, 0xB6, 0x2A, 0xEF, 0x34, 0xEF, 0x1A, 0x20, 0x9A, 0x85, | ||
1182 | 0x04, 0x27, 0x38, 0xCD, 0xA2, 0x2D, 0xD8, 0xF5, 0x05, 0x04, | ||
1183 | 0x28, 0x03, 0xF1, 0x37, 0xC9, 0xF1, 0xC9, 0xEF, 0x31, 0x36, | ||
1184 | 0x00, 0x0B, 0x31, 0x37, 0x00, 0x0D, 0x02, 0x38, 0x3E, 0x30, | ||
1185 | 0xD7, 0xC9, 0x2A, 0x38, 0x3E, 0x2D, 0xD7, 0xEF, 0xA0, 0xC3, | ||
1186 | 0xC4, 0xC5, 0x02, 0x38, 0xD9, 0xE5, 0xD9, 0xEF, 0x31, 0x27, | ||
1187 | 0xC2, 0x03, 0xE2, 0x01, 0xC2, 0x02, 0x38, 0x7E, 0xA7, 0x20, | ||
1188 | 0x47, 0xCD, 0x7F, 0x2D, 0x06, 0x10, 0x7A, 0xA7, 0x20, 0x06, | ||
1189 | 0xB3, 0x28, 0x09, 0x53, 0x06, 0x08, 0xD5, 0xD9, 0xD1, 0xD9, | ||
1190 | 0x18, 0x57, 0xEF, 0xE2, 0x38, 0x7E, 0xD6, 0x7E, 0xCD, 0xC1, | ||
1191 | 0x2D, 0x57, 0x3A, 0xAC, 0x5C, 0x92, 0x32, 0xAC, 0x5C, 0x7A, | ||
1192 | 0xCD, 0x4F, 0x2D, 0xEF, 0x31, 0x27, 0xC1, 0x03, 0xE1, 0x38, | ||
1193 | 0xCD, 0xD5, 0x2D, 0xE5, 0x32, 0xA1, 0x5C, 0x3D, 0x17, 0x9F, | ||
1194 | 0x3C, 0x21, 0xAB, 0x5C, 0x77, 0x23, 0x86, 0x77, 0xE1, 0xC3, | ||
1195 | 0xCF, 0x2E, 0xD6, 0x80, 0xFE, 0x1C, 0x38, 0x13, 0xCD, 0xC1, | ||
1196 | 0x2D, 0xD6, 0x07, 0x47, 0x21, 0xAC, 0x5C, 0x86, 0x77, 0x78, | ||
1197 | 0xED, 0x44, 0xCD, 0x4F, 0x2D, 0x18, 0x92, 0xEB, 0xCD, 0xBA, | ||
1198 | 0x2F, 0xD9, 0xCB, 0xFA, 0x7D, 0xD9, 0xD6, 0x80, 0x47, 0xCB, | ||
1199 | 0x23, 0xCB, 0x12, 0xD9, 0xCB, 0x13, 0xCB, 0x12, 0xD9, 0x21, | ||
1200 | 0xAA, 0x5C, 0x0E, 0x05, 0x7E, 0x8F, 0x27, 0x77, 0x2B, 0x0D, | ||
1201 | 0x20, 0xF8, 0x10, 0xE7, 0xAF, 0x21, 0xA6, 0x5C, 0x11, 0xA1, | ||
1202 | 0x5C, 0x06, 0x09, 0xED, 0x6F, 0x0E, 0xFF, 0xED, 0x6F, 0x20, | ||
1203 | 0x04, 0x0D, 0x0C, 0x20, 0x0A, 0x12, 0x13, 0xFD, 0x34, 0x71, | ||
1204 | 0xFD, 0x34, 0x72, 0x0E, 0x00, 0xCB, 0x40, 0x28, 0x01, 0x23, | ||
1205 | 0x10, 0xE7, 0x3A, 0xAB, 0x5C, 0xD6, 0x09, 0x38, 0x0A, 0xFD, | ||
1206 | 0x35, 0x71, 0x3E, 0x04, 0xFD, 0xBE, 0x6F, 0x18, 0x41, 0xEF, | ||
1207 | 0x02, 0xE2, 0x38, 0xEB, 0xCD, 0xBA, 0x2F, 0xD9, 0x3E, 0x80, | ||
1208 | 0x95, 0x2E, 0x00, 0xCB, 0xFA, 0xD9, 0xCD, 0xDD, 0x2F, 0xFD, | ||
1209 | 0x7E, 0x71, 0xFE, 0x08, 0x38, 0x06, 0xD9, 0xCB, 0x12, 0xD9, | ||
1210 | 0x18, 0x20, 0x01, 0x00, 0x02, 0x7B, 0xCD, 0x8B, 0x2F, 0x5F, | ||
1211 | 0x7A, 0xCD, 0x8B, 0x2F, 0x57, 0xC5, 0xD9, 0xC1, 0x10, 0xF1, | ||
1212 | 0x21, 0xA1, 0x5C, 0x79, 0xFD, 0x4E, 0x71, 0x09, 0x77, 0xFD, | ||
1213 | 0x34, 0x71, 0x18, 0xD3, 0xF5, 0x21, 0xA1, 0x5C, 0xFD, 0x4E, | ||
1214 | 0x71, 0x06, 0x00, 0x09, 0x41, 0xF1, 0x2B, 0x7E, 0xCE, 0x00, | ||
1215 | 0x77, 0xA7, 0x28, 0x05, 0xFE, 0x0A, 0x3F, 0x30, 0x08, 0x10, | ||
1216 | 0xF1, 0x36, 0x01, 0x04, 0xFD, 0x34, 0x72, 0xFD, 0x70, 0x71, | ||
1217 | 0xEF, 0x02, 0x38, 0xD9, 0xE1, 0xD9, 0xED, 0x4B, 0xAB, 0x5C, | ||
1218 | 0x21, 0xA1, 0x5C, 0x78, 0xFE, 0x09, 0x38, 0x04, 0xFE, 0xFC, | ||
1219 | 0x38, 0x26, 0xA7, 0xCC, 0xEF, 0x15, 0xAF, 0x90, 0xFA, 0x52, | ||
1220 | 0x2F, 0x47, 0x18, 0x0C, 0x79, 0xA7, 0x28, 0x03, 0x7E, 0x23, | ||
1221 | 0x0D, 0xCD, 0xEF, 0x15, 0x10, 0xF4, 0x79, 0xA7, 0xC8, 0x04, | ||
1222 | 0x3E, 0x2E, 0xD7, 0x3E, 0x30, 0x10, 0xFB, 0x41, 0x18, 0xE6, | ||
1223 | 0x50, 0x15, 0x06, 0x01, 0xCD, 0x4A, 0x2F, 0x3E, 0x45, 0xD7, | ||
1224 | 0x4A, 0x79, 0xA7, 0xF2, 0x83, 0x2F, 0xED, 0x44, 0x4F, 0x3E, | ||
1225 | 0x2D, 0x18, 0x02, 0x3E, 0x2B, 0xD7, 0x06, 0x00, 0xC3, 0x1B, | ||
1226 | 0x1A, 0xD5, 0x6F, 0x26, 0x00, 0x5D, 0x54, 0x29, 0x29, 0x19, | ||
1227 | 0x29, 0x59, 0x19, 0x4C, 0x7D, 0xD1, 0xC9, 0x7E, 0x36, 0x00, | ||
1228 | 0xA7, 0xC8, 0x23, 0xCB, 0x7E, 0xCB, 0xFE, 0x2B, 0xC8, 0xC5, | ||
1229 | 0x01, 0x05, 0x00, 0x09, 0x41, 0x4F, 0x37, 0x2B, 0x7E, 0x2F, | ||
1230 | 0xCE, 0x00, 0x77, 0x10, 0xF8, 0x79, 0xC1, 0xC9, 0xE5, 0xF5, | ||
1231 | 0x4E, 0x23, 0x46, 0x77, 0x23, 0x79, 0x4E, 0xC5, 0x23, 0x4E, | ||
1232 | 0x23, 0x46, 0xEB, 0x57, 0x5E, 0xD5, 0x23, 0x56, 0x23, 0x5E, | ||
1233 | 0xD5, 0xD9, 0xD1, 0xE1, 0xC1, 0xD9, 0x23, 0x56, 0x23, 0x5E, | ||
1234 | 0xF1, 0xE1, 0xC9, 0xA7, 0xC8, 0xFE, 0x21, 0x30, 0x16, 0xC5, | ||
1235 | 0x47, 0xD9, 0xCB, 0x2D, 0xCB, 0x1A, 0xCB, 0x1B, 0xD9, 0xCB, | ||
1236 | 0x1A, 0xCB, 0x1B, 0x10, 0xF2, 0xC1, 0xD0, 0xCD, 0x04, 0x30, | ||
1237 | 0xC0, 0xD9, 0xAF, 0x2E, 0x00, 0x57, 0x5D, 0xD9, 0x11, 0x00, | ||
1238 | 0x00, 0xC9, 0x1C, 0xC0, 0x14, 0xC0, 0xD9, 0x1C, 0x20, 0x01, | ||
1239 | 0x14, 0xD9, 0xC9, 0xEB, 0xCD, 0x6E, 0x34, 0xEB, 0x1A, 0xB6, | ||
1240 | 0x20, 0x26, 0xD5, 0x23, 0xE5, 0x23, 0x5E, 0x23, 0x56, 0x23, | ||
1241 | 0x23, 0x23, 0x7E, 0x23, 0x4E, 0x23, 0x46, 0xE1, 0xEB, 0x09, | ||
1242 | 0xEB, 0x8E, 0x0F, 0xCE, 0x00, 0x20, 0x0B, 0x9F, 0x77, 0x23, | ||
1243 | 0x73, 0x23, 0x72, 0x2B, 0x2B, 0x2B, 0xD1, 0xC9, 0x2B, 0xD1, | ||
1244 | 0xCD, 0x93, 0x32, 0xD9, 0xE5, 0xD9, 0xD5, 0xE5, 0xCD, 0x9B, | ||
1245 | 0x2F, 0x47, 0xEB, 0xCD, 0x9B, 0x2F, 0x4F, 0xB8, 0x30, 0x03, | ||
1246 | 0x78, 0x41, 0xEB, 0xF5, 0x90, 0xCD, 0xBA, 0x2F, 0xCD, 0xDD, | ||
1247 | 0x2F, 0xF1, 0xE1, 0x77, 0xE5, 0x68, 0x61, 0x19, 0xD9, 0xEB, | ||
1248 | 0xED, 0x4A, 0xEB, 0x7C, 0x8D, 0x6F, 0x1F, 0xAD, 0xD9, 0xEB, | ||
1249 | 0xE1, 0x1F, 0x30, 0x08, 0x3E, 0x01, 0xCD, 0xDD, 0x2F, 0x34, | ||
1250 | 0x28, 0x23, 0xD9, 0x7D, 0xE6, 0x80, 0xD9, 0x23, 0x77, 0x2B, | ||
1251 | 0x28, 0x1F, 0x7B, 0xED, 0x44, 0x3F, 0x5F, 0x7A, 0x2F, 0xCE, | ||
1252 | 0x00, 0x57, 0xD9, 0x7B, 0x2F, 0xCE, 0x00, 0x5F, 0x7A, 0x2F, | ||
1253 | 0xCE, 0x00, 0x30, 0x07, 0x1F, 0xD9, 0x34, 0xCA, 0xAD, 0x31, | ||
1254 | 0xD9, 0x57, 0xD9, 0xAF, 0xC3, 0x55, 0x31, 0xC5, 0x06, 0x10, | ||
1255 | 0x7C, 0x4D, 0x21, 0x00, 0x00, 0x29, 0x38, 0x0A, 0xCB, 0x11, | ||
1256 | 0x17, 0x30, 0x03, 0x19, 0x38, 0x02, 0x10, 0xF3, 0xC1, 0xC9, | ||
1257 | 0xCD, 0xE9, 0x34, 0xD8, 0x23, 0xAE, 0xCB, 0xFE, 0x2B, 0xC9, | ||
1258 | 0x1A, 0xB6, 0x20, 0x22, 0xD5, 0xE5, 0xD5, 0xCD, 0x7F, 0x2D, | ||
1259 | 0xEB, 0xE3, 0x41, 0xCD, 0x7F, 0x2D, 0x78, 0xA9, 0x4F, 0xE1, | ||
1260 | 0xCD, 0xA9, 0x30, 0xEB, 0xE1, 0x38, 0x0A, 0x7A, 0xB3, 0x20, | ||
1261 | 0x01, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xD1, 0xCD, 0x93, | ||
1262 | 0x32, 0xAF, 0xCD, 0xC0, 0x30, 0xD8, 0xD9, 0xE5, 0xD9, 0xD5, | ||
1263 | 0xEB, 0xCD, 0xC0, 0x30, 0xEB, 0x38, 0x5A, 0xE5, 0xCD, 0xBA, | ||
1264 | 0x2F, 0x78, 0xA7, 0xED, 0x62, 0xD9, 0xE5, 0xED, 0x62, 0xD9, | ||
1265 | 0x06, 0x21, 0x18, 0x11, 0x30, 0x05, 0x19, 0xD9, 0xED, 0x5A, | ||
1266 | 0xD9, 0xD9, 0xCB, 0x1C, 0xCB, 0x1D, 0xD9, 0xCB, 0x1C, 0xCB, | ||
1267 | 0x1D, 0xD9, 0xCB, 0x18, 0xCB, 0x19, 0xD9, 0xCB, 0x19, 0x1F, | ||
1268 | 0x10, 0xE4, 0xEB, 0xD9, 0xEB, 0xD9, 0xC1, 0xE1, 0x78, 0x81, | ||
1269 | 0x20, 0x01, 0xA7, 0x3D, 0x3F, 0x17, 0x3F, 0x1F, 0xF2, 0x46, | ||
1270 | 0x31, 0x30, 0x68, 0xA7, 0x3C, 0x20, 0x08, 0x38, 0x06, 0xD9, | ||
1271 | 0xCB, 0x7A, 0xD9, 0x20, 0x5C, 0x77, 0xD9, 0x78, 0xD9, 0x30, | ||
1272 | 0x15, 0x7E, 0xA7, 0x3E, 0x80, 0x28, 0x01, 0xAF, 0xD9, 0xA2, | ||
1273 | 0xCD, 0xFB, 0x2F, 0x07, 0x77, 0x38, 0x2E, 0x23, 0x77, 0x2B, | ||
1274 | 0x18, 0x29, 0x06, 0x20, 0xD9, 0xCB, 0x7A, 0xD9, 0x20, 0x12, | ||
1275 | 0x07, 0xCB, 0x13, 0xCB, 0x12, 0xD9, 0xCB, 0x13, 0xCB, 0x12, | ||
1276 | 0xD9, 0x35, 0x28, 0xD7, 0x10, 0xEA, 0x18, 0xD7, 0x17, 0x30, | ||
1277 | 0x0C, 0xCD, 0x04, 0x30, 0x20, 0x07, 0xD9, 0x16, 0x80, 0xD9, | ||
1278 | 0x34, 0x28, 0x18, 0xE5, 0x23, 0xD9, 0xD5, 0xD9, 0xC1, 0x78, | ||
1279 | 0x17, 0xCB, 0x16, 0x1F, 0x77, 0x23, 0x71, 0x23, 0x72, 0x23, | ||
1280 | 0x73, 0xE1, 0xD1, 0xD9, 0xE1, 0xD9, 0xC9, 0xCF, 0x05, 0xCD, | ||
1281 | 0x93, 0x32, 0xEB, 0xAF, 0xCD, 0xC0, 0x30, 0x38, 0xF4, 0xEB, | ||
1282 | 0xCD, 0xC0, 0x30, 0xD8, 0xD9, 0xE5, 0xD9, 0xD5, 0xE5, 0xCD, | ||
1283 | 0xBA, 0x2F, 0xD9, 0xE5, 0x60, 0x69, 0xD9, 0x61, 0x68, 0xAF, | ||
1284 | 0x06, 0xDF, 0x18, 0x10, 0x17, 0xCB, 0x11, 0xD9, 0xCB, 0x11, | ||
1285 | 0xCB, 0x10, 0xD9, 0x29, 0xD9, 0xED, 0x6A, 0xD9, 0x38, 0x10, | ||
1286 | 0xED, 0x52, 0xD9, 0xED, 0x52, 0xD9, 0x30, 0x0F, 0x19, 0xD9, | ||
1287 | 0xED, 0x5A, 0xD9, 0xA7, 0x18, 0x08, 0xA7, 0xED, 0x52, 0xD9, | ||
1288 | 0xED, 0x52, 0xD9, 0x37, 0x04, 0xFA, 0xD2, 0x31, 0xF5, 0x28, | ||
1289 | 0xE1, 0x5F, 0x51, 0xD9, 0x59, 0x50, 0xF1, 0xCB, 0x18, 0xF1, | ||
1290 | 0xCB, 0x18, 0xD9, 0xC1, 0xE1, 0x78, 0x91, 0xC3, 0x3D, 0x31, | ||
1291 | 0x7E, 0xA7, 0xC8, 0xFE, 0x81, 0x30, 0x06, 0x36, 0x00, 0x3E, | ||
1292 | 0x20, 0x18, 0x51, 0xFE, 0x91, 0x20, 0x1A, 0x23, 0x23, 0x23, | ||
1293 | 0x3E, 0x80, 0xA6, 0x2B, 0xB6, 0x2B, 0x20, 0x03, 0x3E, 0x80, | ||
1294 | 0xAE, 0x2B, 0x20, 0x36, 0x77, 0x23, 0x36, 0xFF, 0x2B, 0x3E, | ||
1295 | 0x18, 0x18, 0x33, 0x30, 0x2C, 0xD5, 0x2F, 0xC6, 0x91, 0x23, | ||
1296 | 0x56, 0x23, 0x5E, 0x2B, 0x2B, 0x0E, 0x00, 0xCB, 0x7A, 0x28, | ||
1297 | 0x01, 0x0D, 0xCB, 0xFA, 0x06, 0x08, 0x90, 0x80, 0x38, 0x04, | ||
1298 | 0x5A, 0x16, 0x00, 0x90, 0x28, 0x07, 0x47, 0xCB, 0x3A, 0xCB, | ||
1299 | 0x1B, 0x10, 0xFA, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0x7E, 0xD6, | ||
1300 | 0xA0, 0xF0, 0xED, 0x44, 0xD5, 0xEB, 0x2B, 0x47, 0xCB, 0x38, | ||
1301 | 0xCB, 0x38, 0xCB, 0x38, 0x28, 0x05, 0x36, 0x00, 0x2B, 0x10, | ||
1302 | 0xFB, 0xE6, 0x07, 0x28, 0x09, 0x47, 0x3E, 0xFF, 0xCB, 0x27, | ||
1303 | 0x10, 0xFC, 0xA6, 0x77, 0xEB, 0xD1, 0xC9, 0xCD, 0x96, 0x32, | ||
1304 | 0xEB, 0x7E, 0xA7, 0xC0, 0xD5, 0xCD, 0x7F, 0x2D, 0xAF, 0x23, | ||
1305 | 0x77, 0x2B, 0x77, 0x06, 0x91, 0x7A, 0xA7, 0x20, 0x08, 0xB3, | ||
1306 | 0x42, 0x28, 0x10, 0x53, 0x58, 0x06, 0x89, 0xEB, 0x05, 0x29, | ||
1307 | 0x30, 0xFC, 0xCB, 0x09, 0xCB, 0x1C, 0xCB, 0x1D, 0xEB, 0x2B, | ||
1308 | 0x73, 0x2B, 0x72, 0x2B, 0x70, 0xD1, 0xC9, 0x00, 0xB0, 0x00, | ||
1309 | 0x40, 0xB0, 0x00, 0x01, 0x30, 0x00, 0xF1, 0x49, 0x0F, 0xDA, | ||
1310 | 0xA2, 0x40, 0xB0, 0x00, 0x0A, 0x8F, 0x36, 0x3C, 0x34, 0xA1, | ||
1311 | 0x33, 0x0F, 0x30, 0xCA, 0x30, 0xAF, 0x31, 0x51, 0x38, 0x1B, | ||
1312 | 0x35, 0x24, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, | ||
1313 | 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x14, 0x30, 0x2D, 0x35, 0x3B, | ||
1314 | 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, | ||
1315 | 0x35, 0x9C, 0x35, 0xDE, 0x35, 0xBC, 0x34, 0x45, 0x36, 0x6E, | ||
1316 | 0x34, 0x69, 0x36, 0xDE, 0x35, 0x74, 0x36, 0xB5, 0x37, 0xAA, | ||
1317 | 0x37, 0xDA, 0x37, 0x33, 0x38, 0x43, 0x38, 0xE2, 0x37, 0x13, | ||
1318 | 0x37, 0xC4, 0x36, 0xAF, 0x36, 0x4A, 0x38, 0x92, 0x34, 0x6A, | ||
1319 | 0x34, 0xAC, 0x34, 0xA5, 0x34, 0xB3, 0x34, 0x1F, 0x36, 0xC9, | ||
1320 | 0x35, 0x01, 0x35, 0xC0, 0x33, 0xA0, 0x36, 0x86, 0x36, 0xC6, | ||
1321 | 0x33, 0x7A, 0x36, 0x06, 0x35, 0xF9, 0x34, 0x9B, 0x36, 0x83, | ||
1322 | 0x37, 0x14, 0x32, 0xA2, 0x33, 0x4F, 0x2D, 0x97, 0x32, 0x49, | ||
1323 | 0x34, 0x1B, 0x34, 0x2D, 0x34, 0x0F, 0x34, 0xCD, 0xBF, 0x35, | ||
1324 | 0x78, 0x32, 0x67, 0x5C, 0xD9, 0xE3, 0xD9, 0xED, 0x53, 0x65, | ||
1325 | 0x5C, 0xD9, 0x7E, 0x23, 0xE5, 0xA7, 0xF2, 0x80, 0x33, 0x57, | ||
1326 | 0xE6, 0x60, 0x0F, 0x0F, 0x0F, 0x0F, 0xC6, 0x7C, 0x6F, 0x7A, | ||
1327 | 0xE6, 0x1F, 0x18, 0x0E, 0xFE, 0x18, 0x30, 0x08, 0xD9, 0x01, | ||
1328 | 0xFB, 0xFF, 0x54, 0x5D, 0x09, 0xD9, 0x07, 0x6F, 0x11, 0xD7, | ||
1329 | 0x32, 0x26, 0x00, 0x19, 0x5E, 0x23, 0x56, 0x21, 0x65, 0x33, | ||
1330 | 0xE3, 0xD5, 0xD9, 0xED, 0x4B, 0x66, 0x5C, 0xC9, 0xF1, 0x3A, | ||
1331 | 0x67, 0x5C, 0xD9, 0x18, 0xC3, 0xD5, 0xE5, 0x01, 0x05, 0x00, | ||
1332 | 0xCD, 0x05, 0x1F, 0xE1, 0xD1, 0xC9, 0xED, 0x5B, 0x65, 0x5C, | ||
1333 | 0xCD, 0xC0, 0x33, 0xED, 0x53, 0x65, 0x5C, 0xC9, 0xCD, 0xA9, | ||
1334 | 0x33, 0xED, 0xB0, 0xC9, 0x62, 0x6B, 0xCD, 0xA9, 0x33, 0xD9, | ||
1335 | 0xE5, 0xD9, 0xE3, 0xC5, 0x7E, 0xE6, 0xC0, 0x07, 0x07, 0x4F, | ||
1336 | 0x0C, 0x7E, 0xE6, 0x3F, 0x20, 0x02, 0x23, 0x7E, 0xC6, 0x50, | ||
1337 | 0x12, 0x3E, 0x05, 0x91, 0x23, 0x13, 0x06, 0x00, 0xED, 0xB0, | ||
1338 | 0xC1, 0xE3, 0xD9, 0xE1, 0xD9, 0x47, 0xAF, 0x05, 0xC8, 0x12, | ||
1339 | 0x13, 0x18, 0xFA, 0xA7, 0xC8, 0xF5, 0xD5, 0x11, 0x00, 0x00, | ||
1340 | 0xCD, 0xC8, 0x33, 0xD1, 0xF1, 0x3D, 0x18, 0xF2, 0x4F, 0x07, | ||
1341 | 0x07, 0x81, 0x4F, 0x06, 0x00, 0x09, 0xC9, 0xD5, 0x2A, 0x68, | ||
1342 | 0x5C, 0xCD, 0x06, 0x34, 0xCD, 0xC0, 0x33, 0xE1, 0xC9, 0x62, | ||
1343 | 0x6B, 0xD9, 0xE5, 0x21, 0xC5, 0x32, 0xD9, 0xCD, 0xF7, 0x33, | ||
1344 | 0xCD, 0xC8, 0x33, 0xD9, 0xE1, 0xD9, 0xC9, 0xE5, 0xEB, 0x2A, | ||
1345 | 0x68, 0x5C, 0xCD, 0x06, 0x34, 0xEB, 0xCD, 0xC0, 0x33, 0xEB, | ||
1346 | 0xE1, 0xC9, 0x06, 0x05, 0x1A, 0x4E, 0xEB, 0x12, 0x71, 0x23, | ||
1347 | 0x13, 0x10, 0xF7, 0xEB, 0xC9, 0x47, 0xCD, 0x5E, 0x33, 0x31, | ||
1348 | 0x0F, 0xC0, 0x02, 0xA0, 0xC2, 0x31, 0xE0, 0x04, 0xE2, 0xC1, | ||
1349 | 0x03, 0x38, 0xCD, 0xC6, 0x33, 0xCD, 0x62, 0x33, 0x0F, 0x01, | ||
1350 | 0xC2, 0x02, 0x35, 0xEE, 0xE1, 0x03, 0x38, 0xC9, 0x06, 0xFF, | ||
1351 | 0x18, 0x06, 0xCD, 0xE9, 0x34, 0xD8, 0x06, 0x00, 0x7E, 0xA7, | ||
1352 | 0x28, 0x0B, 0x23, 0x78, 0xE6, 0x80, 0xB6, 0x17, 0x3F, 0x1F, | ||
1353 | 0x77, 0x2B, 0xC9, 0xD5, 0xE5, 0xCD, 0x7F, 0x2D, 0xE1, 0x78, | ||
1354 | 0xB1, 0x2F, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xCD, 0xE9, | ||
1355 | 0x34, 0xD8, 0xD5, 0x11, 0x01, 0x00, 0x23, 0xCB, 0x16, 0x2B, | ||
1356 | 0x9F, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xCD, 0x99, 0x1E, | ||
1357 | 0xED, 0x78, 0x18, 0x04, 0xCD, 0x99, 0x1E, 0x0A, 0xC3, 0x28, | ||
1358 | 0x2D, 0xCD, 0x99, 0x1E, 0x21, 0x2B, 0x2D, 0xE5, 0xC5, 0xC9, | ||
1359 | 0xCD, 0xF1, 0x2B, 0x0B, 0x78, 0xB1, 0x20, 0x23, 0x1A, 0xCD, | ||
1360 | 0x8D, 0x2C, 0x38, 0x09, 0xD6, 0x90, 0x38, 0x19, 0xFE, 0x15, | ||
1361 | 0x30, 0x15, 0x3C, 0x3D, 0x87, 0x87, 0x87, 0xFE, 0xA8, 0x30, | ||
1362 | 0x0C, 0xED, 0x4B, 0x7B, 0x5C, 0x81, 0x4F, 0x30, 0x01, 0x04, | ||
1363 | 0xC3, 0x2B, 0x2D, 0xCF, 0x09, 0xE5, 0xC5, 0x47, 0x7E, 0x23, | ||
1364 | 0xB6, 0x23, 0xB6, 0x23, 0xB6, 0x78, 0xC1, 0xE1, 0xC0, 0x37, | ||
1365 | 0xC9, 0xCD, 0xE9, 0x34, 0xD8, 0x3E, 0xFF, 0x18, 0x06, 0xCD, | ||
1366 | 0xE9, 0x34, 0x18, 0x05, 0xAF, 0x23, 0xAE, 0x2B, 0x07, 0xE5, | ||
1367 | 0x3E, 0x00, 0x77, 0x23, 0x77, 0x23, 0x17, 0x77, 0x1F, 0x23, | ||
1368 | 0x77, 0x23, 0x77, 0xE1, 0xC9, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, | ||
1369 | 0xD8, 0x37, 0x18, 0xE7, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, 0xD0, | ||
1370 | 0xA7, 0x18, 0xDE, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, 0xD0, 0xD5, | ||
1371 | 0x1B, 0xAF, 0x12, 0x1B, 0x12, 0xD1, 0xC9, 0x78, 0xD6, 0x08, | ||
1372 | 0xCB, 0x57, 0x20, 0x01, 0x3D, 0x0F, 0x30, 0x08, 0xF5, 0xE5, | ||
1373 | 0xCD, 0x3C, 0x34, 0xD1, 0xEB, 0xF1, 0xCB, 0x57, 0x20, 0x07, | ||
1374 | 0x0F, 0xF5, 0xCD, 0x0F, 0x30, 0x18, 0x33, 0x0F, 0xF5, 0xCD, | ||
1375 | 0xF1, 0x2B, 0xD5, 0xC5, 0xCD, 0xF1, 0x2B, 0xE1, 0x7C, 0xB5, | ||
1376 | 0xE3, 0x78, 0x20, 0x0B, 0xB1, 0xC1, 0x28, 0x04, 0xF1, 0x3F, | ||
1377 | 0x18, 0x16, 0xF1, 0x18, 0x13, 0xB1, 0x28, 0x0D, 0x1A, 0x96, | ||
1378 | 0x38, 0x09, 0x20, 0xED, 0x0B, 0x13, 0x23, 0xE3, 0x2B, 0x18, | ||
1379 | 0xDF, 0xC1, 0xF1, 0xA7, 0xF5, 0xEF, 0xA0, 0x38, 0xF1, 0xF5, | ||
1380 | 0xDC, 0x01, 0x35, 0xF1, 0xF5, 0xD4, 0xF9, 0x34, 0xF1, 0x0F, | ||
1381 | 0xD4, 0x01, 0x35, 0xC9, 0xCD, 0xF1, 0x2B, 0xD5, 0xC5, 0xCD, | ||
1382 | 0xF1, 0x2B, 0xE1, 0xE5, 0xD5, 0xC5, 0x09, 0x44, 0x4D, 0xF7, | ||
1383 | 0xCD, 0xB2, 0x2A, 0xC1, 0xE1, 0x78, 0xB1, 0x28, 0x02, 0xED, | ||
1384 | 0xB0, 0xC1, 0xE1, 0x78, 0xB1, 0x28, 0x02, 0xED, 0xB0, 0x2A, | ||
1385 | 0x65, 0x5C, 0x11, 0xFB, 0xFF, 0xE5, 0x19, 0xD1, 0xC9, 0xCD, | ||
1386 | 0xD5, 0x2D, 0x38, 0x0E, 0x20, 0x0C, 0xF5, 0x01, 0x01, 0x00, | ||
1387 | 0xF7, 0xF1, 0x12, 0xCD, 0xB2, 0x2A, 0xEB, 0xC9, 0xCF, 0x0A, | ||
1388 | 0x2A, 0x5D, 0x5C, 0xE5, 0x78, 0xC6, 0xE3, 0x9F, 0xF5, 0xCD, | ||
1389 | 0xF1, 0x2B, 0xD5, 0x03, 0xF7, 0xE1, 0xED, 0x53, 0x5D, 0x5C, | ||
1390 | 0xD5, 0xED, 0xB0, 0xEB, 0x2B, 0x36, 0x0D, 0xFD, 0xCB, 0x01, | ||
1391 | 0xBE, 0xCD, 0xFB, 0x24, 0xDF, 0xFE, 0x0D, 0x20, 0x07, 0xE1, | ||
1392 | 0xF1, 0xFD, 0xAE, 0x01, 0xE6, 0x40, 0xC2, 0x8A, 0x1C, 0x22, | ||
1393 | 0x5D, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xCD, 0xFB, 0x24, 0xE1, | ||
1394 | 0x22, 0x5D, 0x5C, 0x18, 0xA0, 0x01, 0x01, 0x00, 0xF7, 0x22, | ||
1395 | 0x5B, 0x5C, 0xE5, 0x2A, 0x51, 0x5C, 0xE5, 0x3E, 0xFF, 0xCD, | ||
1396 | 0x01, 0x16, 0xCD, 0xE3, 0x2D, 0xE1, 0xCD, 0x15, 0x16, 0xD1, | ||
1397 | 0x2A, 0x5B, 0x5C, 0xA7, 0xED, 0x52, 0x44, 0x4D, 0xCD, 0xB2, | ||
1398 | 0x2A, 0xEB, 0xC9, 0xCD, 0x94, 0x1E, 0xFE, 0x10, 0xD2, 0x9F, | ||
1399 | 0x1E, 0x2A, 0x51, 0x5C, 0xE5, 0xCD, 0x01, 0x16, 0xCD, 0xE6, | ||
1400 | 0x15, 0x01, 0x00, 0x00, 0x30, 0x03, 0x0C, 0xF7, 0x12, 0xCD, | ||
1401 | 0xB2, 0x2A, 0xE1, 0xCD, 0x15, 0x16, 0xC3, 0xBF, 0x35, 0xCD, | ||
1402 | 0xF1, 0x2B, 0x78, 0xB1, 0x28, 0x01, 0x1A, 0xC3, 0x28, 0x2D, | ||
1403 | 0xCD, 0xF1, 0x2B, 0xC3, 0x2B, 0x2D, 0xD9, 0xE5, 0x21, 0x67, | ||
1404 | 0x5C, 0x35, 0xE1, 0x20, 0x04, 0x23, 0xD9, 0xC9, 0xD9, 0x5E, | ||
1405 | 0x7B, 0x17, 0x9F, 0x57, 0x19, 0xD9, 0xC9, 0x13, 0x13, 0x1A, | ||
1406 | 0x1B, 0x1B, 0xA7, 0x20, 0xEF, 0xD9, 0x23, 0xD9, 0xC9, 0xF1, | ||
1407 | 0xD9, 0xE3, 0xD9, 0xC9, 0xEF, 0xC0, 0x02, 0x31, 0xE0, 0x05, | ||
1408 | 0x27, 0xE0, 0x01, 0xC0, 0x04, 0x03, 0xE0, 0x38, 0xC9, 0xEF, | ||
1409 | 0x31, 0x36, 0x00, 0x04, 0x3A, 0x38, 0xC9, 0x31, 0x3A, 0xC0, | ||
1410 | 0x03, 0xE0, 0x01, 0x30, 0x00, 0x03, 0xA1, 0x03, 0x38, 0xC9, | ||
1411 | 0xEF, 0x3D, 0x34, 0xF1, 0x38, 0xAA, 0x3B, 0x29, 0x04, 0x31, | ||
1412 | 0x27, 0xC3, 0x03, 0x31, 0x0F, 0xA1, 0x03, 0x88, 0x13, 0x36, | ||
1413 | 0x58, 0x65, 0x66, 0x9D, 0x78, 0x65, 0x40, 0xA2, 0x60, 0x32, | ||
1414 | 0xC9, 0xE7, 0x21, 0xF7, 0xAF, 0x24, 0xEB, 0x2F, 0xB0, 0xB0, | ||
1415 | 0x14, 0xEE, 0x7E, 0xBB, 0x94, 0x58, 0xF1, 0x3A, 0x7E, 0xF8, | ||
1416 | 0xCF, 0xE3, 0x38, 0xCD, 0xD5, 0x2D, 0x20, 0x07, 0x38, 0x03, | ||
1417 | 0x86, 0x30, 0x09, 0xCF, 0x05, 0x38, 0x07, 0x96, 0x30, 0x04, | ||
1418 | 0xED, 0x44, 0x77, 0xC9, 0xEF, 0x02, 0xA0, 0x38, 0xC9, 0xEF, | ||
1419 | 0x3D, 0x31, 0x37, 0x00, 0x04, 0x38, 0xCF, 0x09, 0xA0, 0x02, | ||
1420 | 0x38, 0x7E, 0x36, 0x80, 0xCD, 0x28, 0x2D, 0xEF, 0x34, 0x38, | ||
1421 | 0x00, 0x03, 0x01, 0x31, 0x34, 0xF0, 0x4C, 0xCC, 0xCC, 0xCD, | ||
1422 | 0x03, 0x37, 0x00, 0x08, 0x01, 0xA1, 0x03, 0x01, 0x38, 0x34, | ||
1423 | 0xEF, 0x01, 0x34, 0xF0, 0x31, 0x72, 0x17, 0xF8, 0x04, 0x01, | ||
1424 | 0xA2, 0x03, 0xA2, 0x03, 0x31, 0x34, 0x32, 0x20, 0x04, 0xA2, | ||
1425 | 0x03, 0x8C, 0x11, 0xAC, 0x14, 0x09, 0x56, 0xDA, 0xA5, 0x59, | ||
1426 | 0x30, 0xC5, 0x5C, 0x90, 0xAA, 0x9E, 0x70, 0x6F, 0x61, 0xA1, | ||
1427 | 0xCB, 0xDA, 0x96, 0xA4, 0x31, 0x9F, 0xB4, 0xE7, 0xA0, 0xFE, | ||
1428 | 0x5C, 0xFC, 0xEA, 0x1B, 0x43, 0xCA, 0x36, 0xED, 0xA7, 0x9C, | ||
1429 | 0x7E, 0x5E, 0xF0, 0x6E, 0x23, 0x80, 0x93, 0x04, 0x0F, 0x38, | ||
1430 | 0xC9, 0xEF, 0x3D, 0x34, 0xEE, 0x22, 0xF9, 0x83, 0x6E, 0x04, | ||
1431 | 0x31, 0xA2, 0x0F, 0x27, 0x03, 0x31, 0x0F, 0x31, 0x0F, 0x31, | ||
1432 | 0x2A, 0xA1, 0x03, 0x31, 0x37, 0xC0, 0x00, 0x04, 0x02, 0x38, | ||
1433 | 0xC9, 0xA1, 0x03, 0x01, 0x36, 0x00, 0x02, 0x1B, 0x38, 0xC9, | ||
1434 | 0xEF, 0x39, 0x2A, 0xA1, 0x03, 0xE0, 0x00, 0x06, 0x1B, 0x33, | ||
1435 | 0x03, 0xEF, 0x39, 0x31, 0x31, 0x04, 0x31, 0x0F, 0xA1, 0x03, | ||
1436 | 0x86, 0x14, 0xE6, 0x5C, 0x1F, 0x0B, 0xA3, 0x8F, 0x38, 0xEE, | ||
1437 | 0xE9, 0x15, 0x63, 0xBB, 0x23, 0xEE, 0x92, 0x0D, 0xCD, 0xED, | ||
1438 | 0xF1, 0x23, 0x5D, 0x1B, 0xEA, 0x04, 0x38, 0xC9, 0xEF, 0x31, | ||
1439 | 0x1F, 0x01, 0x20, 0x05, 0x38, 0xC9, 0xCD, 0x97, 0x32, 0x7E, | ||
1440 | 0xFE, 0x81, 0x38, 0x0E, 0xEF, 0xA1, 0x1B, 0x01, 0x05, 0x31, | ||
1441 | 0x36, 0xA3, 0x01, 0x00, 0x06, 0x1B, 0x33, 0x03, 0xEF, 0xA0, | ||
1442 | 0x01, 0x31, 0x31, 0x04, 0x31, 0x0F, 0xA1, 0x03, 0x8C, 0x10, | ||
1443 | 0xB2, 0x13, 0x0E, 0x55, 0xE4, 0x8D, 0x58, 0x39, 0xBC, 0x5B, | ||
1444 | 0x98, 0xFD, 0x9E, 0x00, 0x36, 0x75, 0xA0, 0xDB, 0xE8, 0xB4, | ||
1445 | 0x63, 0x42, 0xC4, 0xE6, 0xB5, 0x09, 0x36, 0xBE, 0xE9, 0x36, | ||
1446 | 0x73, 0x1B, 0x5D, 0xEC, 0xD8, 0xDE, 0x63, 0xBE, 0xF0, 0x61, | ||
1447 | 0xA1, 0xB3, 0x0C, 0x04, 0x0F, 0x38, 0xC9, 0xEF, 0x31, 0x31, | ||
1448 | 0x04, 0xA1, 0x03, 0x1B, 0x28, 0xA1, 0x0F, 0x05, 0x24, 0x31, | ||
1449 | 0x0F, 0x38, 0xC9, 0xEF, 0x22, 0xA3, 0x03, 0x1B, 0x38, 0xC9, | ||
1450 | 0xEF, 0x31, 0x30, 0x00, 0x1E, 0xA2, 0x38, 0xEF, 0x01, 0x31, | ||
1451 | 0x30, 0x00, 0x07, 0x25, 0x04, 0x38, 0xC3, 0xC4, 0x36, 0x02, | ||
1452 | 0x31, 0x30, 0x00, 0x09, 0xA0, 0x01, 0x37, 0x00, 0x06, 0xA1, | ||
1453 | 0x01, 0x05, 0x02, 0xA1, 0x38, 0xC9, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1454 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1455 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1456 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1457 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1458 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1459 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1460 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1461 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1462 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1463 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1464 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1465 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1466 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1467 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1468 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1469 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1470 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1471 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1472 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1473 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1474 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1475 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1476 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1477 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1478 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1479 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1480 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1481 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1482 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1483 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1484 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1485 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1486 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1487 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1488 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1489 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1490 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1491 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1492 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1493 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1494 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1495 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1496 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1497 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1498 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1499 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1500 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1501 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1502 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1503 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1504 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1505 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1506 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1507 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1508 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1509 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1510 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1511 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1512 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1513 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1514 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1515 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1516 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1517 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1518 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1519 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1520 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1521 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1522 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1523 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1524 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1525 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1526 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1527 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1528 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1529 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1530 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1531 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1532 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1533 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1534 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1535 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1536 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1537 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1538 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1539 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1540 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1541 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1542 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1543 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1544 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1545 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1546 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1547 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1548 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1549 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1550 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1551 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1552 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1553 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1554 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1555 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1556 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1557 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1558 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1559 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1560 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1561 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1562 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1563 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1564 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1565 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1566 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1567 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1568 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1569 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
1570 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, | ||
1571 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, | ||
1572 | 0x10, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
1573 | 0x00, 0x24, 0x7E, 0x24, 0x24, 0x7E, 0x24, 0x00, 0x00, 0x08, | ||
1574 | 0x3E, 0x28, 0x3E, 0x0A, 0x3E, 0x08, 0x00, 0x62, 0x64, 0x08, | ||
1575 | 0x10, 0x26, 0x46, 0x00, 0x00, 0x10, 0x28, 0x10, 0x2A, 0x44, | ||
1576 | 0x3A, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
1577 | 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00, 0x00, 0x20, | ||
1578 | 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x14, 0x08, | ||
1579 | 0x3E, 0x08, 0x14, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, | ||
1580 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, | ||
1581 | 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
1582 | 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x02, 0x04, | ||
1583 | 0x08, 0x10, 0x20, 0x00, 0x00, 0x3C, 0x46, 0x4A, 0x52, 0x62, | ||
1584 | 0x3C, 0x00, 0x00, 0x18, 0x28, 0x08, 0x08, 0x08, 0x3E, 0x00, | ||
1585 | 0x00, 0x3C, 0x42, 0x02, 0x3C, 0x40, 0x7E, 0x00, 0x00, 0x3C, | ||
1586 | 0x42, 0x0C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x08, 0x18, 0x28, | ||
1587 | 0x48, 0x7E, 0x08, 0x00, 0x00, 0x7E, 0x40, 0x7C, 0x02, 0x42, | ||
1588 | 0x3C, 0x00, 0x00, 0x3C, 0x40, 0x7C, 0x42, 0x42, 0x3C, 0x00, | ||
1589 | 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00, 0x00, 0x3C, | ||
1590 | 0x42, 0x3C, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x3C, 0x42, 0x42, | ||
1591 | 0x3E, 0x02, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
1592 | 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, | ||
1593 | 0x00, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, | ||
1594 | 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, | ||
1595 | 0x04, 0x08, 0x10, 0x00, 0x00, 0x3C, 0x42, 0x04, 0x08, 0x00, | ||
1596 | 0x08, 0x00, 0x00, 0x3C, 0x4A, 0x56, 0x5E, 0x40, 0x3C, 0x00, | ||
1597 | 0x00, 0x3C, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, 0x00, 0x7C, | ||
1598 | 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00, 0x00, 0x3C, 0x42, 0x40, | ||
1599 | 0x40, 0x42, 0x3C, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x44, | ||
1600 | 0x78, 0x00, 0x00, 0x7E, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00, | ||
1601 | 0x00, 0x7E, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00, 0x3C, | ||
1602 | 0x42, 0x40, 0x4E, 0x42, 0x3C, 0x00, 0x00, 0x42, 0x42, 0x7E, | ||
1603 | 0x42, 0x42, 0x42, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, | ||
1604 | 0x3E, 0x00, 0x00, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3C, 0x00, | ||
1605 | 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x40, | ||
1606 | 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x42, 0x66, 0x5A, | ||
1607 | 0x42, 0x42, 0x42, 0x00, 0x00, 0x42, 0x62, 0x52, 0x4A, 0x46, | ||
1608 | 0x42, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, | ||
1609 | 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00, 0x00, 0x3C, | ||
1610 | 0x42, 0x42, 0x52, 0x4A, 0x3C, 0x00, 0x00, 0x7C, 0x42, 0x42, | ||
1611 | 0x7C, 0x44, 0x42, 0x00, 0x00, 0x3C, 0x40, 0x3C, 0x02, 0x42, | ||
1612 | 0x3C, 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, | ||
1613 | 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x42, | ||
1614 | 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00, 0x42, 0x42, 0x42, | ||
1615 | 0x42, 0x5A, 0x24, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x24, | ||
1616 | 0x42, 0x00, 0x00, 0x82, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, | ||
1617 | 0x00, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x0E, | ||
1618 | 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x40, 0x20, | ||
1619 | 0x10, 0x08, 0x04, 0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, | ||
1620 | 0x70, 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x00, | ||
1621 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x1C, | ||
1622 | 0x22, 0x78, 0x20, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x38, 0x04, | ||
1623 | 0x3C, 0x44, 0x3C, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, | ||
1624 | 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x00, | ||
1625 | 0x00, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3C, 0x00, 0x00, 0x00, | ||
1626 | 0x38, 0x44, 0x78, 0x40, 0x3C, 0x00, 0x00, 0x0C, 0x10, 0x18, | ||
1627 | 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x3C, | ||
1628 | 0x04, 0x38, 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x00, | ||
1629 | 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x00, 0x04, | ||
1630 | 0x00, 0x04, 0x04, 0x04, 0x24, 0x18, 0x00, 0x20, 0x28, 0x30, | ||
1631 | 0x30, 0x28, 0x24, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, | ||
1632 | 0x0C, 0x00, 0x00, 0x00, 0x68, 0x54, 0x54, 0x54, 0x54, 0x00, | ||
1633 | 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, | ||
1634 | 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x78, 0x44, | ||
1635 | 0x44, 0x78, 0x40, 0x40, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x3C, | ||
1636 | 0x04, 0x06, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x20, 0x00, | ||
1637 | 0x00, 0x00, 0x38, 0x40, 0x38, 0x04, 0x78, 0x00, 0x00, 0x10, | ||
1638 | 0x38, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x44, 0x44, | ||
1639 | 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x44, 0x44, 0x28, 0x28, | ||
1640 | 0x10, 0x00, 0x00, 0x00, 0x44, 0x54, 0x54, 0x54, 0x28, 0x00, | ||
1641 | 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, | ||
1642 | 0x44, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, 0x00, 0x7C, 0x08, | ||
1643 | 0x10, 0x20, 0x7C, 0x00, 0x00, 0x0E, 0x08, 0x30, 0x08, 0x08, | ||
1644 | 0x0E, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, | ||
1645 | 0x00, 0x70, 0x10, 0x0C, 0x10, 0x10, 0x70, 0x00, 0x00, 0x14, | ||
1646 | 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x99, 0xA1, | ||
1647 | 0xA1, 0x99, 0x42, 0x3C | ||
1648 | }; | ||
1649 | |||
1650 | const unsigned long rom_imag_size = 16384; | ||
1651 | |||
1652 | /* End of rom_imag.c */ | ||
diff --git a/apps/plugins/zxbox/snapshot.c b/apps/plugins/zxbox/snapshot.c new file mode 100644 index 0000000000..e1a3552382 --- /dev/null +++ b/apps/plugins/zxbox/snapshot.c | |||
@@ -0,0 +1,727 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "misc.h" | ||
22 | #include "helpers.h" | ||
23 | #include "spperif.h" | ||
24 | #include "z80.h" | ||
25 | |||
26 | #include "snapshot.h" | ||
27 | #include "compr.h" | ||
28 | #include "interf.h" | ||
29 | |||
30 | #include "spconf.h" | ||
31 | |||
32 | #include "interf.h" | ||
33 | |||
34 | #include <stdio.h> | ||
35 | #include <stdlib.h> | ||
36 | /*#include <errno.h>*/ | ||
37 | /*#include "string.h"*/ | ||
38 | #include <sys/types.h> | ||
39 | |||
40 | #define COMPRESS_SAVE 1 | ||
41 | |||
42 | static char quick_snap_file[MAXFILENAME]; | ||
43 | static int qsnap_created = 0; | ||
44 | typedef struct { | ||
45 | int isfile; | ||
46 | /*FILE *fp;*/ | ||
47 | int fd; | ||
48 | |||
49 | unsigned len; | ||
50 | byte *at; | ||
51 | } SNFILE; | ||
52 | |||
53 | |||
54 | #define sngetc(snfp) ((snfp)->isfile ? getc((snfp)->fd) : snmgetc(snfp)) | ||
55 | |||
56 | static int snmgetc(SNFILE *snfp) | ||
57 | { | ||
58 | if(!snfp->len) return EOF; | ||
59 | snfp->len--; | ||
60 | return *snfp->at++; | ||
61 | } | ||
62 | |||
63 | static int snread(void *ptr, int size, SNFILE *snfp) | ||
64 | { | ||
65 | int i; | ||
66 | byte *dest; | ||
67 | |||
68 | if(snfp->isfile) /*return (int) fread(ptr, 1, (size_t) size, snfp->fp);*/ | ||
69 | return (int) rb->read( snfp->fd,ptr, (size_t) size); | ||
70 | |||
71 | dest = (byte *) ptr; | ||
72 | for(i = 0; snfp->len && size; i++, snfp->len--, size--) | ||
73 | *dest++ = *snfp->at++; | ||
74 | |||
75 | return i; | ||
76 | } | ||
77 | |||
78 | |||
79 | |||
80 | /* These structures are taken from 'spconv' by Henk de Groot */ | ||
81 | |||
82 | struct sna_s { | ||
83 | byte i; | ||
84 | byte lbk; | ||
85 | byte hbk; | ||
86 | byte ebk; | ||
87 | byte dbk; | ||
88 | byte cbk; | ||
89 | byte bbk; | ||
90 | byte fbk; | ||
91 | byte abk; | ||
92 | byte l; | ||
93 | byte h; | ||
94 | byte e; | ||
95 | byte d; | ||
96 | byte c; | ||
97 | byte b; | ||
98 | byte iyl; | ||
99 | byte iyh; | ||
100 | byte ixl; | ||
101 | byte ixh; | ||
102 | byte iff2; | ||
103 | byte r; | ||
104 | byte f; | ||
105 | byte a; | ||
106 | byte spl; | ||
107 | byte sph; | ||
108 | byte im; | ||
109 | byte border; | ||
110 | }; | ||
111 | |||
112 | #define sna_size 27 /* sizeof(struct sna_s)=27 */ | ||
113 | |||
114 | |||
115 | struct z80_1_s { | ||
116 | byte a; /*00*/ | ||
117 | byte f; /*01*/ | ||
118 | byte c; /*02*/ | ||
119 | byte b; /*03*/ | ||
120 | byte l; /*04*/ | ||
121 | byte h; /*05*/ | ||
122 | byte pcl; /*06*/ | ||
123 | byte pch; /*07*/ | ||
124 | byte spl; /*08*/ | ||
125 | byte sph; /*09*/ | ||
126 | byte i; /*0A*/ | ||
127 | byte r; /*0B*/ | ||
128 | byte data; /*0C*/ | ||
129 | byte e; /*0D*/ | ||
130 | byte d; /*0E*/ | ||
131 | byte cbk; /*0F*/ | ||
132 | byte bbk; /*10*/ | ||
133 | byte ebk; /*11*/ | ||
134 | byte dbk; /*12*/ | ||
135 | byte lbk; /*13*/ | ||
136 | byte hbk; /*14*/ | ||
137 | byte abk; /*15*/ | ||
138 | byte fbk; /*16*/ | ||
139 | byte iyl; /*17*/ | ||
140 | byte iyh; /*18*/ | ||
141 | byte ixl; /*19*/ | ||
142 | byte ixh; /*1A*/ | ||
143 | byte iff1; /*1B*/ | ||
144 | byte iff2; /*1C*/ | ||
145 | byte im; /*1D*/ | ||
146 | }; | ||
147 | |||
148 | #define z80_145_size 0x1e /* length of z80 V1.45 header */ | ||
149 | |||
150 | |||
151 | struct z80_2_s { | ||
152 | /* Extended 2.01 and 3.0 header, flagged with PC=0 */ | ||
153 | byte h2_len_l; /*1E*/ | ||
154 | byte h2_len_h; /*1F*/ | ||
155 | byte n_pcl; /*20*/ | ||
156 | byte n_pch; /*21*/ | ||
157 | byte hardware; /*22*/ | ||
158 | byte samram; /*23*/ | ||
159 | byte if1_paged; /*24*/ | ||
160 | byte r_ldir_emu; /*25*/ | ||
161 | byte last_out; /*26*/ | ||
162 | byte sound_reg[16]; /*27*/ | ||
163 | |||
164 | /* Continues with extended 3.0 header, but this part is not used anyway */ | ||
165 | }; | ||
166 | |||
167 | #define z80_201_ext_size 23 /* length of extended z80 V2.01 header */ | ||
168 | #define z80_300_ext_size 54 /* length of extended z80 V3.0 header */ | ||
169 | |||
170 | |||
171 | struct z80_page_s { | ||
172 | byte blklen_l; /*00*/ | ||
173 | byte blklen_h; /*01*/ | ||
174 | byte page_num; /*02*/ | ||
175 | }; | ||
176 | |||
177 | #define z80_pg_size 3 /* sizeof(struct z80_page_s)=3 */ | ||
178 | |||
179 | |||
180 | /*static FILE *savfp;*/ | ||
181 | static int savfd; | ||
182 | static int memptr; | ||
183 | |||
184 | int compr_read_byte(void) | ||
185 | { | ||
186 | if(memptr < 0x10000) return z80_proc.mem[memptr++]; | ||
187 | else return -1; | ||
188 | } | ||
189 | |||
190 | void compr_put_byte(int i) | ||
191 | { | ||
192 | putc(i, savfd); | ||
193 | } | ||
194 | |||
195 | |||
196 | #define STORE_NORMAL_REGS(head) \ | ||
197 | head.f = RF; /* F reg */ \ | ||
198 | head.a = RA; /* A reg */ \ | ||
199 | head.b = RB; /* B reg */ \ | ||
200 | head.c = RC; /* C reg */ \ | ||
201 | head.d = RD; /* D reg */ \ | ||
202 | head.e = RE; /* E reg */ \ | ||
203 | head.h = RH; /* H reg */ \ | ||
204 | head.l = RL; /* L reg */ \ | ||
205 | head.fbk = FBK; /* F' reg */ \ | ||
206 | head.abk = ABK; /* A' reg */ \ | ||
207 | head.bbk = BBK; /* B' reg */ \ | ||
208 | head.cbk = CBK; /* C' reg */ \ | ||
209 | head.dbk = DBK; /* D' reg */ \ | ||
210 | head.ebk = EBK; /* E' reg */ \ | ||
211 | head.hbk = HBK; /* H' reg */ \ | ||
212 | head.lbk = LBK; /* L' reg */ \ | ||
213 | head.iyh = YH; /* IY reg */ \ | ||
214 | head.iyl = YL; \ | ||
215 | head.ixh = XH; /* IX reg */ \ | ||
216 | head.ixl = XL | ||
217 | |||
218 | |||
219 | #define LOAD_NORMAL_REGS(head) \ | ||
220 | RF = head.f; /* F reg */ \ | ||
221 | RA = head.a; /* A reg */ \ | ||
222 | RB = head.b; /* B reg */ \ | ||
223 | RC = head.c; /* C reg */ \ | ||
224 | RD = head.d; /* D reg */ \ | ||
225 | RE = head.e; /* E reg */ \ | ||
226 | RH = head.h; /* H reg */ \ | ||
227 | RL = head.l; /* L reg */ \ | ||
228 | FBK = head.fbk; /* F' reg */ \ | ||
229 | ABK = head.abk; /* A' reg */ \ | ||
230 | BBK = head.bbk; /* B' reg */ \ | ||
231 | CBK = head.cbk; /* C' reg */ \ | ||
232 | DBK = head.dbk; /* D' reg */ \ | ||
233 | EBK = head.ebk; /* E' reg */ \ | ||
234 | HBK = head.hbk; /* H' reg */ \ | ||
235 | LBK = head.lbk; /* L' reg */ \ | ||
236 | YH = head.iyh; /* IY reg */ \ | ||
237 | YL = head.iyl; \ | ||
238 | XH = head.ixh; /* IX reg */ \ | ||
239 | XL = head.ixl | ||
240 | |||
241 | |||
242 | static void snsh_z80_save(int fd) | ||
243 | { | ||
244 | struct z80_1_s z80; | ||
245 | |||
246 | int to_comp = COMPRESS_SAVE; | ||
247 | |||
248 | STORE_NORMAL_REGS(z80); | ||
249 | |||
250 | z80.i = RI; /* I reg */ | ||
251 | z80.r = RR; /* R reg */ | ||
252 | |||
253 | z80.sph = SPH; /* SP reg */ | ||
254 | z80.spl = SPL; | ||
255 | z80.pch = PCH; /* PC reg */ | ||
256 | z80.pcl = PCL; | ||
257 | |||
258 | z80.iff1 = z80_proc.iff1; /* iff1 */ | ||
259 | z80.iff2 = z80_proc.iff2; /* iff2 */ | ||
260 | |||
261 | z80.im = (z80_proc.it_mode & 0x03) | 0x60; | ||
262 | /* | ||
263 | Bit 0-1: Interrupt mode (0, 1 or 2) | ||
264 | Bit 2 : 1=Issue 2 emulation | ||
265 | Bit 3 : 1=Double interrupt frequency | ||
266 | Bit 4-5: 1=High video synchronisation | ||
267 | 3=Low video synchronisation | ||
268 | 0,2=Normal | ||
269 | Bit 6-7: 0=Cursor/Protek/AGF joystick | ||
270 | 1=Kempston joystick | ||
271 | 2=Sinclair 1 joystick | ||
272 | 3=Sinclair 2 joystick | ||
273 | */ | ||
274 | |||
275 | z80.data = ((RR >> 7) & 0x01) | | ||
276 | ((z80_proc.ula_outport & 0x07) << 1) | | ||
277 | (to_comp ? 0x20 : 0); | ||
278 | /* | ||
279 | Bit 0 : Bit 7 of the R-register | ||
280 | Bit 1-3: Border colour | ||
281 | Bit 4 : 1=Basic SamRom switched in | ||
282 | Bit 5 : 1=Block of data is compressed | ||
283 | Bit 6-7: No meaning | ||
284 | */ | ||
285 | |||
286 | |||
287 | /*fwrite(&z80, z80_145_size, 1, fp);*/ | ||
288 | rb->write(fd,&z80,z80_145_size); | ||
289 | |||
290 | if(!to_comp) | ||
291 | /*fwrite(z80_proc.mem + 0x4000, 0xC000, 1, fp);*/ | ||
292 | rb->write(fd,z80_proc.mem + 0x4000,0xC000); | ||
293 | else { | ||
294 | memptr = 0x4000; | ||
295 | savfd = fd; | ||
296 | compr(); | ||
297 | } | ||
298 | } | ||
299 | |||
300 | |||
301 | |||
302 | static void snsh_sna_save(int fd) | ||
303 | { | ||
304 | struct sna_s sna; | ||
305 | byte saves1, saves2; | ||
306 | |||
307 | STORE_NORMAL_REGS(sna); | ||
308 | |||
309 | sna.i = RI; /* I reg */ | ||
310 | sna.r = RR; /* R reg */ | ||
311 | |||
312 | sna.border = z80_proc.ula_outport & 0x07; | ||
313 | |||
314 | SP -= 2; | ||
315 | |||
316 | sna.sph = SPH; /* SP reg */ | ||
317 | sna.spl = SPL; | ||
318 | |||
319 | saves1 = z80_proc.mem[SP]; | ||
320 | saves2 = z80_proc.mem[(dbyte)(SP+1)]; | ||
321 | if(SP >= 0x4000) { | ||
322 | z80_proc.mem[SP] = PCL; | ||
323 | if(SP < 0xFFFF) z80_proc.mem[SP+1] = PCH; | ||
324 | } | ||
325 | |||
326 | sna.iff2 = z80_proc.iff2 ? 0xff : 0x00; /* iff2 */ | ||
327 | |||
328 | sna.im = z80_proc.it_mode & 0x03; | ||
329 | |||
330 | /*fwrite(&sna, sna_size, 1, fp); | ||
331 | fwrite(z80_proc.mem + 0x4000, 0xC000, 1, fp);*/ | ||
332 | rb->write(fd,&sna, sna_size); | ||
333 | rb->write(fd,z80_proc.mem + 0x4000, 0xC000); | ||
334 | |||
335 | if(SP > 0x4000) { | ||
336 | z80_proc.mem[SP] = saves1; | ||
337 | if(SP < 0xFFFF) z80_proc.mem[SP+1] = saves2; | ||
338 | } | ||
339 | |||
340 | SP += 2; | ||
341 | } | ||
342 | |||
343 | #define GET_DATA(c) { \ | ||
344 | if(!datalen) break; \ | ||
345 | c = sngetc(fp); \ | ||
346 | if(c == EOF) break; \ | ||
347 | if(datalen > 0) datalen--; \ | ||
348 | } | ||
349 | |||
350 | |||
351 | static void read_compressed_data(SNFILE *fp, byte *start, unsigned size, | ||
352 | long datalen) | ||
353 | { | ||
354 | int j; | ||
355 | int times, last_ed, ch; | ||
356 | byte *p, *end; | ||
357 | |||
358 | p = start; | ||
359 | end = start+size; | ||
360 | last_ed = 0; | ||
361 | while(p < end) { | ||
362 | GET_DATA(ch); | ||
363 | if(ch != 0xED) { | ||
364 | last_ed = 0; | ||
365 | *p++ = ch; | ||
366 | } | ||
367 | else { | ||
368 | if(last_ed) { | ||
369 | last_ed = 0; | ||
370 | p--; | ||
371 | GET_DATA(times); | ||
372 | if(times == 0) break; | ||
373 | |||
374 | GET_DATA(ch); | ||
375 | if(p + times > end) { | ||
376 | put_msg("Warning: Repeat parameter too large in snapshot"); | ||
377 | times = (int) ((long) end - (long) p); | ||
378 | } | ||
379 | for(j = 0; j < times; j++) *p++ = ch; | ||
380 | } | ||
381 | else { | ||
382 | last_ed = 1; | ||
383 | *p++ = 0xED; | ||
384 | } | ||
385 | } | ||
386 | } | ||
387 | |||
388 | if(datalen < 0) { | ||
389 | if(sngetc(fp) != 0 || sngetc(fp) != 0xED || | ||
390 | sngetc(fp) != 0xED || sngetc(fp) != 0) | ||
391 | put_msg("Warning: Illegal ending of snapshot"); | ||
392 | } | ||
393 | |||
394 | if(datalen > 0) { | ||
395 | while(datalen) { | ||
396 | if(sngetc(fp) == EOF) break; | ||
397 | datalen--; | ||
398 | } | ||
399 | put_msg("Warning: Page too long in snapshot"); | ||
400 | } | ||
401 | |||
402 | if(p < end) put_msg("Warning: Page too short in snapshot"); | ||
403 | } | ||
404 | |||
405 | static int read_header(void *p, int size, SNFILE *fp) | ||
406 | { | ||
407 | int res; | ||
408 | |||
409 | res = snread(p, size, fp); | ||
410 | if(res != size) { | ||
411 | put_msg("Error, End Of File in snapshot header"); | ||
412 | return 0; | ||
413 | } | ||
414 | return 1; | ||
415 | } | ||
416 | |||
417 | static int read_z80_page(SNFILE *fp) | ||
418 | { | ||
419 | struct z80_page_s page; | ||
420 | unsigned datalen; | ||
421 | unsigned pos = 0; | ||
422 | int validpage; | ||
423 | |||
424 | int res; | ||
425 | |||
426 | res = snread(&page, z80_pg_size, fp); | ||
427 | if(res == 0) return 0; | ||
428 | if(res != z80_pg_size) { | ||
429 | put_msg("Error, End Of File in page header"); | ||
430 | return 0; | ||
431 | } | ||
432 | |||
433 | datalen = (page.blklen_h << 8) | page.blklen_l; | ||
434 | |||
435 | validpage = 1; | ||
436 | switch(page.page_num) { | ||
437 | case 4: | ||
438 | pos = 0x8000; | ||
439 | break; | ||
440 | |||
441 | case 5: | ||
442 | pos = 0xC000; | ||
443 | break; | ||
444 | |||
445 | case 8: | ||
446 | pos = 0x4000; | ||
447 | break; | ||
448 | |||
449 | default: | ||
450 | validpage = 0; | ||
451 | while(datalen) { | ||
452 | if(sngetc(fp) == EOF) { | ||
453 | put_msg("Warning: Page too short in snapshot"); | ||
454 | break; | ||
455 | } | ||
456 | datalen--; | ||
457 | } | ||
458 | } | ||
459 | |||
460 | if(validpage) read_compressed_data(fp, z80_proc.mem+pos, 0x4000, | ||
461 | (long) datalen); | ||
462 | return 1; | ||
463 | } | ||
464 | |||
465 | |||
466 | static void snsh_z80_load(SNFILE *fp) | ||
467 | { | ||
468 | struct z80_1_s z80; | ||
469 | |||
470 | if(!read_header(&z80, z80_145_size, fp)) return; | ||
471 | if(z80.pch == 0 && z80.pcl == 0) { | ||
472 | struct z80_2_s z80_2; | ||
473 | int ext_size, rem; | ||
474 | if(!read_header(&z80_2, 2, fp)) return; | ||
475 | ext_size = z80_2.h2_len_l | (z80_2.h2_len_h << 8); | ||
476 | if(ext_size < z80_201_ext_size) { | ||
477 | put_msg("Error in Z80 header"); | ||
478 | return; | ||
479 | } | ||
480 | if(!read_header(&z80_2.n_pcl, z80_201_ext_size, fp)) return; | ||
481 | rem = ext_size - z80_201_ext_size; | ||
482 | for(; rem; rem--) sngetc(fp); | ||
483 | |||
484 | if(z80_2.hardware >= 3 && (ext_size == z80_201_ext_size || | ||
485 | z80_2.hardware >= 4)) { | ||
486 | put_msg("Can't load non 48k snapshot"); | ||
487 | return; | ||
488 | } | ||
489 | if(z80_2.if1_paged) { | ||
490 | put_msg("Can't load snapshot: IF1 roma paged in"); | ||
491 | return; | ||
492 | } | ||
493 | |||
494 | PCH = z80_2.n_pch; | ||
495 | PCL = z80_2.n_pcl; | ||
496 | |||
497 | while(read_z80_page(fp)); | ||
498 | } | ||
499 | else { | ||
500 | if(z80.data == 0xFF) z80.data = 1; | ||
501 | if(z80.data & 0x20) | ||
502 | read_compressed_data(fp, z80_proc.mem + 0x4000, 0xC000, -1); | ||
503 | else { | ||
504 | if(snread(z80_proc.mem + 0x4000, 0xC000, fp) != 0xC000) | ||
505 | put_msg("Warning: Snapshot file too short (z80)"); | ||
506 | else if(sngetc(fp) != EOF) | ||
507 | put_msg("Warning: Snapshot file too long"); | ||
508 | } | ||
509 | |||
510 | PCH = z80.pch; | ||
511 | PCL = z80.pcl; | ||
512 | } | ||
513 | |||
514 | |||
515 | LOAD_NORMAL_REGS(z80); | ||
516 | |||
517 | RI = z80.i; /* I reg */ | ||
518 | RR = (z80.r & 0x7F) | ((z80.data & 0x01) << 7); /* R reg */ | ||
519 | |||
520 | SPH = z80.sph; /* SP reg */ | ||
521 | SPL = z80.spl; | ||
522 | |||
523 | z80_proc.ula_outport = (z80_proc.ula_outport & ~(0x07)) | | ||
524 | ((z80.data >> 1) & 0x07); | ||
525 | |||
526 | /* | ||
527 | Bit 0 : Bit 7 of the R-register | ||
528 | Bit 1-3: Border colour | ||
529 | Bit 4 : 1=Basic SamRom switched in | ||
530 | Bit 5 : 1=Block of data is compressed | ||
531 | Bit 6-7: No meaning | ||
532 | */ | ||
533 | |||
534 | z80_proc.iff1 = z80.iff1 ? 1 : 0; | ||
535 | z80_proc.iff2 = z80.iff2 ? 1 : 0; | ||
536 | |||
537 | z80_proc.it_mode = z80.im & 0x03; | ||
538 | |||
539 | /* | ||
540 | Bit 0-1: Interrupt mode (0, 1 or 2) | ||
541 | Bit 2 : 1=Issue 2 emulation | ||
542 | Bit 3 : 1=Double interrupt frequency | ||
543 | Bit 4-5: 1=High video synchronisation | ||
544 | 3=Low video synchronisation | ||
545 | 0,2=Normal | ||
546 | Bit 6-7: 0=Cursor/Protek/AGF joystick | ||
547 | 1=Kempston joystick | ||
548 | 2=Sinclair 1 joystick | ||
549 | 3=Sinclair 2 joystick | ||
550 | */ | ||
551 | |||
552 | z80_proc.haltstate = 0; | ||
553 | |||
554 | sp_init_screen_mark(); | ||
555 | } | ||
556 | |||
557 | static void snsh_sna_load(SNFILE *fp) | ||
558 | { | ||
559 | struct sna_s sna; | ||
560 | |||
561 | if(!read_header(&sna, sna_size, fp)) return; | ||
562 | |||
563 | if(snread(z80_proc.mem+0x4000, 0xC000, fp) != 0xC000) | ||
564 | put_msg("Warning: Snapshot file too short (sna)"); | ||
565 | else if(sngetc(fp) != EOF) | ||
566 | put_msg("Warning: Snapshot file too long"); | ||
567 | |||
568 | LOAD_NORMAL_REGS(sna); | ||
569 | |||
570 | RI = sna.i; /* I reg */ | ||
571 | RR = sna.r; /* R reg */ | ||
572 | |||
573 | z80_proc.ula_outport = (z80_proc.ula_outport & ~(0x07)) | | ||
574 | (sna.border & 0x07); | ||
575 | |||
576 | SPH = sna.sph; /* SP reg */ | ||
577 | SPL = sna.spl; | ||
578 | |||
579 | PCL = z80_proc.mem[SP]; | ||
580 | if(SP >= 0x4000) z80_proc.mem[SP] = 0; | ||
581 | SP++; | ||
582 | PCH = z80_proc.mem[SP]; | ||
583 | if(SP >= 0x4000) z80_proc.mem[SP] = 0; | ||
584 | SP++; | ||
585 | |||
586 | z80_proc.iff1 = z80_proc.iff2 = sna.iff2 ? 1 : 0; | ||
587 | z80_proc.it_mode = sna.im & 0x03; | ||
588 | |||
589 | z80_proc.haltstate = 0; | ||
590 | |||
591 | sp_init_screen_mark(); | ||
592 | } | ||
593 | /* | ||
594 | static void cleanup_qsnap(void) | ||
595 | { | ||
596 | if(qsnap_created) rb->remove(quick_snap_file); | ||
597 | } | ||
598 | */ | ||
599 | static void save_snapshot_file_type(char *name, int type) | ||
600 | { | ||
601 | /*FILE *snsh;*/ | ||
602 | int snsh; | ||
603 | snsh = rb->open(name, O_WRONLY); | ||
604 | if(snsh < 0) { | ||
605 | snsh = rb->creat(name, O_WRONLY); | ||
606 | /* sprintf(msgbuf, "Could not open snapshot file `%s', %s", | ||
607 | name, strerror(errno));*/ | ||
608 | if(snsh < 0) { | ||
609 | put_msg("Could not create snapshot file"); | ||
610 | return; | ||
611 | } | ||
612 | } | ||
613 | |||
614 | if(type == SN_SNA) snsh_sna_save(snsh); | ||
615 | else if(type == SN_Z80) snsh_z80_save(snsh); | ||
616 | |||
617 | rb->close(snsh); | ||
618 | } | ||
619 | |||
620 | void save_snapshot_file(char *name) | ||
621 | { | ||
622 | int type; | ||
623 | |||
624 | rb->strncpy(filenamebuf, name, MAXFILENAME-10); | ||
625 | filenamebuf[MAXFILENAME-10] = '\0'; | ||
626 | |||
627 | type = SN_Z80; | ||
628 | if(check_ext(filenamebuf, "z80")) type = SN_Z80; | ||
629 | else if(check_ext(filenamebuf, "sna")) type = SN_SNA; | ||
630 | else { | ||
631 | add_extension(filenamebuf, "z80"); | ||
632 | type = SN_Z80; | ||
633 | } | ||
634 | |||
635 | save_snapshot_file_type(filenamebuf, type); | ||
636 | |||
637 | /* sprintf(msgbuf, "Saved snapshot to file %s", filenamebuf); | ||
638 | put_msg(msgbuf);*/ | ||
639 | } | ||
640 | |||
641 | void save_quick_snapshot(void) | ||
642 | { | ||
643 | /* if(!qsnap_created) { | ||
644 | if(tmpnam(quick_snap_file) == NULL) { | ||
645 | put_msg("Could not create temporary file for quick snapshot"); | ||
646 | return; | ||
647 | } | ||
648 | qsnap_created = 1; | ||
649 | atexit(cleanup_qsnap); | ||
650 | } | ||
651 | save_snapshot_file_type(quick_snap_file, SN_Z80);*/ | ||
652 | } | ||
653 | |||
654 | void save_snapshot(void) | ||
655 | { | ||
656 | char name[MAXFILENAME]; | ||
657 | name[0]='/'; | ||
658 | name[1]='\0'; | ||
659 | put_msg("Enter name of snapshot file to save:"); | ||
660 | if (!rb->kbd_input((char*)&name, sizeof name)) | ||
661 | save_snapshot_file(&name[0]); | ||
662 | } | ||
663 | |||
664 | |||
665 | void load_snapshot_file_type(char *name, int type) | ||
666 | { | ||
667 | int filetype = FT_SNAPSHOT; | ||
668 | /*FILE *snsh;*/ | ||
669 | int snsh; | ||
670 | SNFILE snfil; | ||
671 | |||
672 | rb->strncpy(filenamebuf, name, MAXFILENAME-10); | ||
673 | filenamebuf[MAXFILENAME-10] = '\0'; | ||
674 | |||
675 | spcf_find_file_type(filenamebuf, &filetype, &type); | ||
676 | if(type < 0) type = SN_Z80; | ||
677 | |||
678 | snsh = rb->open(filenamebuf, O_RDONLY); | ||
679 | if(snsh < 0) { | ||
680 | #ifndef USE_GRAY | ||
681 | rb->splash(HZ,true, "Could not open snapshot file `%s'",filenamebuf); | ||
682 | #endif | ||
683 | return; | ||
684 | } | ||
685 | |||
686 | snfil.isfile = 1; | ||
687 | snfil.fd = snsh; | ||
688 | |||
689 | if(type == SN_SNA) snsh_sna_load(&snfil); | ||
690 | else if(type == SN_Z80) snsh_z80_load(&snfil); | ||
691 | |||
692 | rb->close(snsh); | ||
693 | } | ||
694 | |||
695 | void snsh_z80_load_intern(byte *p, unsigned len) | ||
696 | { | ||
697 | SNFILE snfil; | ||
698 | |||
699 | snfil.isfile = 0; | ||
700 | snfil.at = p; | ||
701 | snfil.len = len; | ||
702 | |||
703 | snsh_z80_load(&snfil); | ||
704 | } | ||
705 | |||
706 | void load_quick_snapshot(void) | ||
707 | { | ||
708 | if(!qsnap_created) { | ||
709 | put_msg("No quick snapshot saved yet"); | ||
710 | return; | ||
711 | } | ||
712 | load_snapshot_file_type(quick_snap_file, SN_Z80); | ||
713 | } | ||
714 | |||
715 | |||
716 | void load_snapshot(void) | ||
717 | { | ||
718 | char *name; | ||
719 | |||
720 | put_msg("Enter name of snapshot file to load:"); | ||
721 | |||
722 | name = spif_get_filename(); | ||
723 | if(name == NULL) return; | ||
724 | |||
725 | load_snapshot_file_type(name, -1); | ||
726 | } | ||
727 | |||
diff --git a/apps/plugins/zxbox/snapshot.h b/apps/plugins/zxbox/snapshot.h new file mode 100644 index 0000000000..e5b6dbfd04 --- /dev/null +++ b/apps/plugins/zxbox/snapshot.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SNAPSHOT_H | ||
22 | #define SNAPSHOT_H | ||
23 | |||
24 | #define SN_SNA 0 | ||
25 | #define SN_Z80 1 | ||
26 | |||
27 | extern void save_snapshot_file(char *snsh_name); | ||
28 | extern void load_snapshot_file_type(char *snsh_name, int type); | ||
29 | extern void snsh_z80_load_intern(unsigned char *p, unsigned len); | ||
30 | |||
31 | extern void save_snapshot(void); | ||
32 | extern void load_snapshot(void); | ||
33 | |||
34 | extern void save_quick_snapshot(void); | ||
35 | extern void load_quick_snapshot(void); | ||
36 | |||
37 | #endif /* SNAPSHOT_H */ | ||
diff --git a/apps/plugins/zxbox/sp_def.h b/apps/plugins/zxbox/sp_def.h new file mode 100644 index 0000000000..1030be120c --- /dev/null +++ b/apps/plugins/zxbox/sp_def.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "spperif.h" | ||
22 | |||
23 | #define MARK_SCR(addr) SPNM(scr_mark)[(addr) >> 5] |= 1 << ((addr) & 0x1F) | ||
24 | |||
25 | #define PUTMEM(addr, ptr, val) \ | ||
26 | { \ | ||
27 | register byte addrhi; \ | ||
28 | addrhi = (dbyte) (addr) >> 8; \ | ||
29 | if(addrhi >= 0x5B) *(ptr) = (val); \ | ||
30 | else if(addrhi & 0x40) { \ | ||
31 | *(ptr) = (val); \ | ||
32 | MARK_SCR((dbyte) (addr)); \ | ||
33 | if(DANM(next_scri) >= 0 && DANM(tc) > 86) \ | ||
34 | DANM(tc) -= 2; \ | ||
35 | } \ | ||
36 | } | ||
37 | |||
38 | #define SOUNDPORT 0x10 | ||
39 | |||
40 | /* TODO: attribute or pixel byte is present on unused ports? */ | ||
41 | |||
42 | |||
43 | #define IN(porth, portl, dest) \ | ||
44 | { \ | ||
45 | if(!((portl) & DANM(inport_mask))) { \ | ||
46 | dest = PORT(inports)[portl]; \ | ||
47 | } \ | ||
48 | else if(!((portl) & 1)) { \ | ||
49 | if(DANM(imp_change) > DANM(tc)) { \ | ||
50 | DANM(imp_change) = 0; \ | ||
51 | DANM(ula_inport) ^= 0x40; \ | ||
52 | } \ | ||
53 | dest = SPECP(fe_inport_high)[porth] & DANM(ula_inport); \ | ||
54 | DANM(tc) -= 1; \ | ||
55 | } \ | ||
56 | else { \ | ||
57 | register int scri; \ | ||
58 | scri = DANM(next_scri); \ | ||
59 | dest = (scri < 0 || DANM(tc) <= 96) \ | ||
60 | ? 0xFF : DANM(mem)[(scri<<5)+((224-DANM(tc))>>2)]; \ | ||
61 | } \ | ||
62 | } | ||
63 | |||
64 | |||
65 | #define OUT(porth, portl, source) \ | ||
66 | { \ | ||
67 | if(!((portl) & 1)) { \ | ||
68 | if((DANM(ula_outport) ^ (source)) & SOUNDPORT) { \ | ||
69 | DANM(sound_change) = 1; \ | ||
70 | if((source) & SOUNDPORT) DANM(sound_sam) += DANM(tc); \ | ||
71 | else DANM(sound_sam) -= DANM(tc); \ | ||
72 | } \ | ||
73 | DANM(ula_outport) = (source); \ | ||
74 | DANM(tc) -= 1; \ | ||
75 | } \ | ||
76 | PORT(outports)[portl] = (source); \ | ||
77 | } | ||
78 | |||
79 | #define DI_CHECK \ | ||
80 | if(PC == LOAD_DI+1 && SPNM(quick_load)) \ | ||
81 | SPNM(load_trapped) = 1, \ | ||
82 | DANM(haltstate) = 1, \ | ||
83 | DANM(tc) = 0; | ||
84 | |||
diff --git a/apps/plugins/zxbox/spconf.c b/apps/plugins/zxbox/spconf.c new file mode 100644 index 0000000000..7c49269fa3 --- /dev/null +++ b/apps/plugins/zxbox/spconf.c | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | #include "misc.h" | ||
21 | #include "spconf_p.h" | ||
22 | #include "spver.h" | ||
23 | #include "interf.h" | ||
24 | #include "spscr_p.h" | ||
25 | #include "spkey.h" | ||
26 | |||
27 | #include "snapshot.h" /* for SN_Z80 and SN_SNA */ | ||
28 | #include "tapefile.h" /* for TAP_TAP and TAP_TZX */ | ||
29 | #include "zxconfig.h" | ||
30 | #include "stdio.h" | ||
31 | #include "string.h" | ||
32 | /*#include <errno.h>*/ | ||
33 | #include "sys/types.h" | ||
34 | #include "helpers.h" | ||
35 | #include "ctype.h" | ||
36 | |||
37 | |||
38 | extern const char *spcf_keynames_ascii[]; | ||
39 | extern const char *spcf_keynames_misc[]; | ||
40 | |||
41 | char *spcf_init_snapshot = NULL; | ||
42 | int spcf_init_snapshot_type; | ||
43 | char *spcf_init_tapefile = NULL; | ||
44 | int spcf_init_tapefile_type; | ||
45 | #ifndef USE_GRAY | ||
46 | #define exit(i) rb->splash(HZ*1,true,"Exit: %d",i) | ||
47 | #else | ||
48 | #define exit(i) i=i | ||
49 | #endif | ||
50 | #define MAXLINELEN 512 | ||
51 | /*static int linectr; | ||
52 | static FILE *conffp; | ||
53 | static int conffd; | ||
54 | static const char *conffile; | ||
55 | */ | ||
56 | |||
57 | static int file_type = -1; | ||
58 | static int file_subtype; | ||
59 | |||
60 | struct ext_type { | ||
61 | const char *ext; | ||
62 | int type; | ||
63 | int subtype; | ||
64 | }; | ||
65 | |||
66 | static struct ext_type extensions[] = { | ||
67 | {"z80", FT_SNAPSHOT, SN_Z80}, | ||
68 | {"sna", FT_SNAPSHOT, SN_SNA}, | ||
69 | {"tzx", FT_TAPEFILE, TAP_TZX}, | ||
70 | {"tap", FT_TAPEFILE, TAP_TAP}, | ||
71 | |||
72 | {NULL, 0, 0} | ||
73 | }; | ||
74 | |||
75 | int spcf_find_file_type(char *filename, int *ftp, int *ftsubp) | ||
76 | { | ||
77 | int i; | ||
78 | int found; | ||
79 | |||
80 | if(*ftp >= 0 && *ftsubp >= 0) return 1; | ||
81 | |||
82 | found = 0; | ||
83 | |||
84 | for(i = 0; extensions[i].ext != NULL; i++) | ||
85 | if((*ftp < 0 || *ftp == extensions[i].type) && | ||
86 | (*ftsubp < 0 || *ftsubp == extensions[i].subtype) && | ||
87 | check_ext(filename, extensions[i].ext)) { | ||
88 | found = 1; | ||
89 | *ftp = extensions[i].type; | ||
90 | *ftsubp = extensions[i].subtype; | ||
91 | break; | ||
92 | } | ||
93 | |||
94 | if(!found) for(i = 0; extensions[i].ext != NULL; i++) | ||
95 | if((*ftp < 0 || *ftp == extensions[i].type) && | ||
96 | (*ftsubp < 0 || *ftsubp == extensions[i].subtype) && | ||
97 | try_extension(filename, extensions[i].ext)) { | ||
98 | found = 1; | ||
99 | *ftp = extensions[i].type; | ||
100 | *ftsubp = extensions[i].subtype; | ||
101 | break; | ||
102 | } | ||
103 | |||
104 | return found; | ||
105 | } | ||
106 | |||
107 | static int find_extension(const char *ext) | ||
108 | { | ||
109 | int i; | ||
110 | for(i = 0; extensions[i].ext != NULL; i++) | ||
111 | if(rb->strcasecmp(extensions[i].ext, ext) == 0) return i; | ||
112 | |||
113 | return -1; | ||
114 | } | ||
115 | |||
116 | |||
117 | /* now actually a snapshot/tape loader*/ | ||
118 | void spcf_read_command_line(void* parameter) | ||
119 | { | ||
120 | int ix; | ||
121 | |||
122 | ix = find_extension( parameter - 3 + rb->strlen (parameter) ); | ||
123 | |||
124 | file_type = extensions[ix].type; | ||
125 | file_subtype = extensions[ix].subtype; | ||
126 | rb->strncpy(filenamebuf, parameter, MAXFILENAME - 10); | ||
127 | filenamebuf[MAXFILENAME-10] = '\0'; | ||
128 | if(file_type < 0) file_subtype = -1; | ||
129 | if(!spcf_find_file_type(filenamebuf, &file_type, &file_subtype)) | ||
130 | return; | ||
131 | |||
132 | if(file_type == FT_SNAPSHOT) { | ||
133 | spcf_init_snapshot = make_string(spcf_init_snapshot, filenamebuf); | ||
134 | spcf_init_snapshot_type = file_subtype; | ||
135 | } | ||
136 | else if(file_type == FT_TAPEFILE) { | ||
137 | spcf_init_tapefile = make_string(spcf_init_tapefile, filenamebuf); | ||
138 | spcf_init_tapefile_type = file_subtype; | ||
139 | } | ||
140 | } | ||
141 | |||
diff --git a/apps/plugins/zxbox/spconf.h b/apps/plugins/zxbox/spconf.h new file mode 100644 index 0000000000..b7b89a22f7 --- /dev/null +++ b/apps/plugins/zxbox/spconf.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPCONF_H | ||
22 | #define SPCONF_H | ||
23 | |||
24 | #define FT_SNAPSHOT 0 | ||
25 | #define FT_TAPEFILE 1 | ||
26 | |||
27 | extern char *spcf_init_snapshot; | ||
28 | extern int spcf_init_snapshot_type; | ||
29 | extern char *spcf_init_tapefile; | ||
30 | extern int spcf_init_tapefile_type; | ||
31 | |||
32 | |||
33 | /*extern int spcf_read_conf_file(const char *filename);*/ | ||
34 | extern void spcf_read_command_line(void* parameter); | ||
35 | extern void spcf_read_xresources(void); | ||
36 | extern int spcf_find_file_type(char *filename, int *ftp, int *ftsubp); | ||
37 | |||
38 | |||
39 | #endif /* SPCONF_H */ | ||
diff --git a/apps/plugins/zxbox/spconf_p.h b/apps/plugins/zxbox/spconf_p.h new file mode 100644 index 0000000000..fa7c587ace --- /dev/null +++ b/apps/plugins/zxbox/spconf_p.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPCONF_P_H | ||
22 | #define SPCONF_P_H | ||
23 | |||
24 | #include "spconf.h" | ||
25 | |||
26 | struct sp_options { | ||
27 | const char *option; | ||
28 | |||
29 | int argtype; | ||
30 | void *argvalp; | ||
31 | const char **enums; | ||
32 | int disp; | ||
33 | }; | ||
34 | |||
35 | extern struct sp_options spcf_options[]; | ||
36 | |||
37 | #define SA_BOOL 1 | ||
38 | #define SA_INT 2 | ||
39 | #define SA_STR 3 | ||
40 | #define SA_ENUM 4 | ||
41 | |||
42 | |||
43 | extern int showframe; | ||
44 | extern int scrmul; | ||
45 | extern int privatemap; | ||
46 | extern int use_shm; | ||
47 | |||
48 | extern int small_screen; | ||
49 | |||
50 | extern int sound_on; | ||
51 | extern int bufframes; | ||
52 | extern const char *sound_dev_name; | ||
53 | extern int sound_sample_rate; | ||
54 | extern int sound_to_autoclose; | ||
55 | extern int sound_dsp_setfrag; | ||
56 | |||
57 | extern int keyboard_type; | ||
58 | extern int cursor_type; | ||
59 | extern int color_type; | ||
60 | extern int pause_on_iconify; | ||
61 | extern int vga_pause_bg; | ||
62 | extern int sp_quick_load; | ||
63 | extern int sp_paused; | ||
64 | extern int load_immed; | ||
65 | extern int spt_auto_stop; | ||
66 | extern int spkb_allow_ascii; | ||
67 | extern int spkb_trueshift; | ||
68 | extern int spkb_funcshift; | ||
69 | |||
70 | extern void spcf_set_val(int ix, const char *val, const char *name, | ||
71 | int ctr, int fatal); | ||
72 | |||
73 | extern void spcf_set_color(int ix, const char *val, const char *name, | ||
74 | int ctr, int fatal); | ||
75 | extern void spcf_set_key(int ix, const char *val, const char *name, | ||
76 | int ctr, int fatal); | ||
77 | extern int spcf_match_keydef(const char *attr, const char *beg); | ||
78 | extern int spcf_parse_conf_line(char *line, char **attrp, char **valp); | ||
79 | |||
80 | |||
81 | #endif /* SPCONF_P_H */ | ||
diff --git a/apps/plugins/zxbox/spect.c b/apps/plugins/zxbox/spect.c new file mode 100644 index 0000000000..8e9291f704 --- /dev/null +++ b/apps/plugins/zxbox/spect.c | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80.h" | ||
22 | #include "spperif.h" | ||
23 | #include "spscr.h" | ||
24 | |||
25 | #define SOUNDPORT 0x10 | ||
26 | |||
27 | int SPNM(halfframe)(int firsttick, int numlines) | ||
28 | { | ||
29 | |||
30 | int tc, linesleft; | ||
31 | int feport, scline, border; | ||
32 | byte *scrptr; | ||
33 | qbyte cmark = 0; | ||
34 | |||
35 | scrptr = (byte *) SPNM(image); | ||
36 | |||
37 | tc = firsttick - CHKTICK; | ||
38 | |||
39 | for(linesleft = numlines; linesleft; linesleft--) { | ||
40 | DANM(next_scri) = SPNM(scri)[SPNM(scline)]; | ||
41 | tc += CHKTICK; | ||
42 | |||
43 | tc = PRNM(step)(tc); | ||
44 | |||
45 | scline = SPNM(scline); | ||
46 | |||
47 | /* store sound */ | ||
48 | SPNM(sound_buf)[scline] = DANM(sound_sam); | ||
49 | feport = DANM(ula_outport); | ||
50 | |||
51 | if(feport & SOUNDPORT) DANM(sound_sam) = 240; | ||
52 | else DANM(sound_sam) = 16; | ||
53 | |||
54 | /* change EAR bit, store MIC bit*/ | ||
55 | |||
56 | SPNM(fe_outport_time)[scline] = feport; | ||
57 | if(DANM(imp_change)) DANM(ula_inport) ^= 0x40; | ||
58 | DANM(imp_change) = SPNM(tape_impinfo)[scline]; | ||
59 | |||
60 | /* Check if updating screen */ | ||
61 | |||
62 | if(SPNM(updating)) { | ||
63 | border = SPNM(lastborder); | ||
64 | if((feport & 0x07) != border) { | ||
65 | SPNM(border_update) = 2; | ||
66 | SPNM(lastborder) = feport & 0x07; | ||
67 | } | ||
68 | scrptr = update_screen_line(scrptr, SPNM(coli)[scline], DANM(next_scri), | ||
69 | border, &cmark); | ||
70 | |||
71 | } | ||
72 | SPNM(scline)++; | ||
73 | } | ||
74 | return tc; | ||
75 | } | ||
diff --git a/apps/plugins/zxbox/spectkey.c b/apps/plugins/zxbox/spectkey.c new file mode 100644 index 0000000000..3b986d67ba --- /dev/null +++ b/apps/plugins/zxbox/spectkey.c | |||
@@ -0,0 +1,1602 @@ | |||
1 | /* spectkey.c */ | ||
2 | |||
3 | /* | ||
4 | This file was generated by ./bin_to_c from binary image | ||
5 | file `spectkey.srl' | ||
6 | */ | ||
7 | |||
8 | unsigned char spectkey[] = { | ||
9 | 0xFF, 0x72, 0x07, 0xFF, 0x72, 0x07, 0xFF, 0x72, 0x07, 0xFE, | ||
10 | 0x72, 0x07, 0x7F, 0xE7, 0x20, 0x77, 0xFE, 0x72, 0x07, 0x7F, | ||
11 | 0xD7, 0x20, 0xA7, 0xFD, 0x72, 0x0A, 0x7F, 0xD7, 0x20, 0xA7, | ||
12 | 0xFC, 0x72, 0x0B, 0x7F, 0xC7, 0x20, 0xB7, 0xFC, 0x72, 0x0B, | ||
13 | 0x7F, 0xB7, 0x20, 0xC7, 0xFB, 0x72, 0x0C, 0x7F, 0xB7, 0x20, | ||
14 | 0xC7, 0xFA, 0x72, 0x0D, 0x7F, 0xA7, 0x20, 0xD7, 0xFA, 0x72, | ||
15 | 0x0D, 0x7F, 0x97, 0x20, 0xE0, 0x7F, 0x97, 0x20, 0xE0, 0x7F, | ||
16 | 0x97, 0x20, 0xE0, 0x7F, 0x97, 0x20, 0xE0, 0x7F, 0x87, 0x20, | ||
17 | 0xE1, 0x7F, 0x87, 0x20, 0xE1, 0x7F, 0x87, 0x20, 0xE1, 0x7F, | ||
18 | 0x87, 0x20, 0xE1, 0x7F, 0x77, 0x20, 0xE2, 0x7F, 0x77, 0x20, | ||
19 | 0xE2, 0x7F, 0x77, 0x20, 0xE2, 0x7F, 0x67, 0x20, 0xE3, 0x7F, | ||
20 | 0x67, 0x20, 0xE3, 0x7F, 0x67, 0x20, 0xE3, 0x7F, 0x67, 0x20, | ||
21 | 0xE3, 0x7F, 0x57, 0x20, 0xE4, 0x7F, 0x57, 0x20, 0xE4, 0x7F, | ||
22 | 0x57, 0x20, 0xE4, 0x7F, 0x57, 0x20, 0xE3, 0x78, 0xF4, 0x72, | ||
23 | 0x0E, 0x47, 0x8F, 0x47, 0x20, 0xE4, 0x78, 0xF4, 0x72, 0x0E, | ||
24 | 0x37, 0x88, 0xF3, 0x72, 0x0E, 0x47, 0x88, 0xF3, 0x72, 0x0E, | ||
25 | 0x47, 0x88, 0xF3, 0x72, 0x0E, 0x47, 0x88, 0xF3, 0x72, 0x0E, | ||
26 | 0x37, 0xA8, 0xF2, 0x72, 0x0E, 0x47, 0xA8, 0xF2, 0x72, 0x0E, | ||
27 | 0x47, 0xA8, 0xF2, 0x72, 0x0E, 0x47, 0xA8, 0xF2, 0x72, 0x0E, | ||
28 | 0x37, 0xB8, 0xF1, 0x72, 0x0E, 0x47, 0xB8, 0xF1, 0x72, 0x0E, | ||
29 | 0x47, 0xB8, 0xF1, 0x72, 0x0E, 0x37, 0xC8, 0xF0, 0x72, 0x0E, | ||
30 | 0x47, 0xC8, 0xF0, 0x72, 0x0E, 0x47, 0xC8, 0xF0, 0x72, 0x0E, | ||
31 | 0x47, 0xC8, 0xF0, 0x72, 0x0E, 0x37, 0xD8, 0xFF, 0x62, 0x0E, | ||
32 | 0x47, 0xD8, 0xFF, 0x62, 0x0E, 0x47, 0xD8, 0xFF, 0x62, 0x0E, | ||
33 | 0x47, 0xD8, 0xFE, 0x62, 0x0E, 0x47, 0xE0, 0x8F, 0xE6, 0x20, | ||
34 | 0xE4, 0x7E, 0x08, 0xFE, 0x62, 0x0E, 0x47, 0xE0, 0x8F, 0xE6, | ||
35 | 0x20, 0xE3, 0x7E, 0x18, 0xFD, 0x62, 0x0E, 0x47, 0xE1, 0x8F, | ||
36 | 0xD6, 0x20, 0xE4, 0x7E, 0x18, 0xF3, 0x12, 0x0F, 0x32, 0x09, | ||
37 | 0xF7, 0x30, 0x0E, 0x47, 0xE1, 0x8F, 0x31, 0x20, 0xF3, 0x20, | ||
38 | 0x9F, 0x73, 0x00, 0xE3, 0x7E, 0x28, 0xF3, 0x12, 0x0A, 0x9B, | ||
39 | 0x09, 0x90, 0xE0, 0x90, 0xB9, 0xA0, 0x99, 0x0A, 0x90, 0xA9, | ||
40 | 0xF6, 0x30, 0x0E, 0x47, 0xE2, 0x8F, 0x31, 0x20, 0xA9, 0x0A, | ||
41 | 0x90, 0x90, 0xD9, 0x09, 0x09, 0x90, 0xA9, 0x09, 0x09, 0x90, | ||
42 | 0xB9, 0xF6, 0x30, 0x0E, 0x47, 0xE2, 0x8F, 0x52, 0x00, 0xB1, | ||
43 | 0x00, 0x1C, 0x01, 0xA0, 0x10, 0xC1, 0xFF, 0x10, 0x0B, 0x70, | ||
44 | 0x0C, 0x70, 0xA7, 0xF7, 0x20, 0x03, 0xA0, 0x3A, 0x03, 0xB0, | ||
45 | 0xA3, 0x00, 0xC3, 0x03, 0xA0, 0x30, 0xC3, 0xA0, 0x3E, 0xB0, | ||
46 | 0xA2, 0x00, 0xB2, 0x00, 0xC2, 0x0C, 0x20, 0x2A, 0x02, 0xFC, | ||
47 | 0x10, 0x0A, 0x60, 0x06, 0xA0, 0x6A, 0x06, 0xA0, 0x6A, 0x06, | ||
48 | 0xFF, 0x10, 0x08, 0xA0, 0x80, 0xC8, 0x08, 0xC0, 0x8D, 0x0A, | ||
49 | 0x80, 0x08, 0xA0, 0x8E, 0xF0, 0x9A, 0x09, 0x09, 0xA0, 0x90, | ||
50 | 0xA9, 0x0C, 0x90, 0xC9, 0xF8, 0x80, 0x0A, 0x90, 0xA9, 0x09, | ||
51 | 0x0C, 0x90, 0xA9, 0x09, 0x0C, 0x90, 0x90, 0xC9, 0xF6, 0x30, | ||
52 | 0x0E, 0x37, 0xE3, 0x8F, 0x52, 0x00, 0x1A, 0x01, 0x01, 0xC0, | ||
53 | 0x1A, 0x01, 0x01, 0xF3, 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, | ||
54 | 0x00, 0x7F, 0x62, 0x00, 0x33, 0x03, 0x30, 0x03, 0x03, 0x00, | ||
55 | 0x3A, 0x03, 0x03, 0xC0, 0x33, 0x00, 0x3A, 0x03, 0xB0, 0x30, | ||
56 | 0x3E, 0x90, 0x2A, 0x02, 0x02, 0xA0, 0x20, 0x2C, 0x02, 0xC0, | ||
57 | 0x22, 0x00, 0x2F, 0xB1, 0x00, 0x6A, 0x06, 0x06, 0xA0, 0x60, | ||
58 | 0x06, 0x06, 0x00, 0x66, 0x00, 0x6F, 0xF1, 0x00, 0x8A, 0x08, | ||
59 | 0x08, 0xC0, 0x8C, 0x08, 0xC0, 0x8A, 0x08, 0x08, 0xA0, 0x8E, | ||
60 | 0xF0, 0x9A, 0x09, 0x09, 0xA0, 0x90, 0x09, 0xB0, 0x9A, 0x09, | ||
61 | 0xFC, 0x80, 0x0A, 0x9B, 0x09, 0x90, 0xC9, 0x0A, 0x90, 0x90, | ||
62 | 0xC9, 0x00, 0xD9, 0xF5, 0x30, 0x0E, 0x47, 0xE3, 0x8F, 0x52, | ||
63 | 0x00, 0x1A, 0x01, 0x01, 0xC0, 0x1A, 0x01, 0x01, 0xF3, 0x20, | ||
64 | 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xA0, 0x7F, 0x52, 0x00, 0x30, | ||
65 | 0x30, 0x30, 0x3A, 0x03, 0x03, 0xC0, 0x3C, 0x03, 0x03, 0x03, | ||
66 | 0xA0, 0x3A, 0x03, 0xA0, 0x3E, 0x80, 0x2C, 0x02, 0xA0, 0x20, | ||
67 | 0x2C, 0x02, 0xC0, 0x20, 0x20, 0x2F, 0xB1, 0x00, 0x6C, 0x06, | ||
68 | 0xA0, 0x60, 0x6A, 0x06, 0x06, 0x06, 0x06, 0xFF, 0x10, 0x08, | ||
69 | 0xA0, 0x80, 0x8C, 0x08, 0xC0, 0x8C, 0x08, 0xA0, 0x80, 0x8A, | ||
70 | 0x08, 0xEF, 0x09, 0xA0, 0x90, 0x9A, 0x09, 0x00, 0x9B, 0x09, | ||
71 | 0xA0, 0x9F, 0xC8, 0x00, 0xA9, 0x0A, 0x90, 0x90, 0xC9, 0xC0, | ||
72 | 0x90, 0xC9, 0x09, 0x0C, 0x9F, 0x53, 0x00, 0xE4, 0x7E, 0x38, | ||
73 | 0xF5, 0x20, 0x0B, 0x10, 0x01, 0xC0, 0x1A, 0x01, 0x0A, 0x1F, | ||
74 | 0x12, 0x00, 0xB7, 0x00, 0xA7, 0xA0, 0x7A, 0x07, 0xF5, 0x20, | ||
75 | 0x03, 0x03, 0x03, 0x03, 0xA0, 0x30, 0x30, 0xA3, 0x0A, 0x3A, | ||
76 | 0x03, 0x03, 0x03, 0xA0, 0x3A, 0x03, 0xA0, 0x3E, 0x80, 0x20, | ||
77 | 0xA2, 0x0B, 0x20, 0x0A, 0x2A, 0x0A, 0x2A, 0x02, 0x02, 0x02, | ||
78 | 0xFB, 0x10, 0x06, 0xD0, 0xA6, 0x00, 0x6A, 0x06, 0x06, 0x06, | ||
79 | 0x06, 0xF0, 0x20, 0x0A, 0x80, 0x0A, 0x8A, 0x08, 0xC0, 0x8C, | ||
80 | 0x08, 0xA0, 0x80, 0x8A, 0x08, 0xEF, 0x09, 0xA0, 0x90, 0xC9, | ||
81 | 0x00, 0x9B, 0x09, 0xA0, 0xA9, 0xFA, 0x80, 0x0A, 0x90, 0xA9, | ||
82 | 0x09, 0x0C, 0x90, 0xA9, 0x09, 0x0A, 0x90, 0x90, 0x99, 0x0B, | ||
83 | 0x9F, 0x53, 0x00, 0xE4, 0x7E, 0x38, 0xF5, 0x20, 0x01, 0xA0, | ||
84 | 0x10, 0x1C, 0x01, 0xA0, 0x10, 0x1F, 0x32, 0x00, 0x70, 0x7A, | ||
85 | 0x07, 0xC0, 0x7A, 0x07, 0xF5, 0x20, 0x03, 0xA0, 0x30, 0xC3, | ||
86 | 0x03, 0xA0, 0x30, 0x3C, 0x03, 0x00, 0x33, 0xA0, 0x3A, 0x0C, | ||
87 | 0x3E, 0x80, 0x2A, 0x02, 0x02, 0x02, 0xA0, 0x2C, 0x02, 0xC0, | ||
88 | 0x20, 0x02, 0x2F, 0xB1, 0x00, 0x6E, 0x00, 0x6A, 0x0C, 0x60, | ||
89 | 0x60, 0x06, 0x6F, 0x12, 0x00, 0x8A, 0x08, 0xC0, 0x8C, 0x08, | ||
90 | 0xC0, 0x8A, 0x08, 0x08, 0x08, 0x08, 0xEF, 0x09, 0x09, 0x09, | ||
91 | 0x09, 0xA0, 0x90, 0x09, 0xB0, 0x9A, 0x09, 0xFC, 0x80, 0x0A, | ||
92 | 0x9B, 0x09, 0x9C, 0x09, 0x0A, 0x90, 0x99, 0xA0, 0x99, 0x0A, | ||
93 | 0x90, 0xA9, 0xF5, 0x30, 0x0E, 0x37, 0xE4, 0x8F, 0x52, 0x00, | ||
94 | 0x1A, 0x01, 0x01, 0xC0, 0x1A, 0x01, 0x01, 0xF3, 0x20, 0x07, | ||
95 | 0x00, 0x70, 0x07, 0xC0, 0x70, 0x07, 0xF6, 0x20, 0x03, 0xA0, | ||
96 | 0x30, 0x3A, 0x03, 0x03, 0xA0, 0x30, 0x3C, 0x03, 0xA0, 0x3A, | ||
97 | 0x03, 0xA0, 0x3A, 0x03, 0xE8, 0x02, 0xA0, 0x20, 0x20, 0x02, | ||
98 | 0x00, 0x2C, 0x02, 0xC0, 0x2A, 0x02, 0xFB, 0x10, 0x06, 0xA0, | ||
99 | 0x6A, 0x06, 0xA0, 0x6A, 0x06, 0x06, 0xA0, 0x6F, 0x12, 0x00, | ||
100 | 0x8A, 0x08, 0xC0, 0x8C, 0x08, 0xC0, 0x8A, 0x08, 0x08, 0x08, | ||
101 | 0x08, 0xEF, 0x09, 0x09, 0x09, 0x09, 0xA0, 0x90, 0x09, 0xB0, | ||
102 | 0x9A, 0x09, 0xFC, 0x80, 0x0F, 0x32, 0x09, 0xF4, 0x30, 0x0E, | ||
103 | 0x47, 0xE4, 0x8F, 0x52, 0x00, 0xB1, 0x00, 0xC1, 0x00, 0xA1, | ||
104 | 0x00, 0xC1, 0xFF, 0x10, 0x07, 0xA0, 0x70, 0xC7, 0x0A, 0x7F, | ||
105 | 0x72, 0x00, 0x3A, 0x03, 0x03, 0xA0, 0x30, 0x0B, 0x30, 0xC3, | ||
106 | 0x03, 0xA0, 0x3A, 0x03, 0xA0, 0x3A, 0x03, 0xE9, 0x0B, 0x20, | ||
107 | 0x2A, 0x02, 0x0C, 0x20, 0xC2, 0x02, 0xA0, 0x2F, 0xC1, 0x00, | ||
108 | 0xA6, 0xB0, 0x6A, 0x06, 0xA0, 0x60, 0x6A, 0x06, 0xF1, 0x20, | ||
109 | 0x08, 0xA0, 0xC8, 0x0C, 0x80, 0xC8, 0x00, 0xA8, 0xA0, 0x80, | ||
110 | 0x8F, 0x81, 0x00, 0x90, 0x90, 0x09, 0xA0, 0x90, 0xA9, 0xA0, | ||
111 | 0x9A, 0x0C, 0x9F, 0x88, 0x00, 0xF3, 0x20, 0x9F, 0x43, 0x00, | ||
112 | 0xE4, 0x7E, 0x48, 0xFA, 0x62, 0x0E, 0x47, 0xE4, 0x8F, 0xA6, | ||
113 | 0x20, 0xE3, 0x7E, 0x58, 0xF9, 0x62, 0x0E, 0x47, 0xE5, 0x8F, | ||
114 | 0x96, 0x20, 0xE4, 0x7E, 0x58, 0xF9, 0x62, 0x0E, 0x37, 0xE6, | ||
115 | 0x8F, 0x52, 0x00, 0xC9, 0x0A, 0x9A, 0x0A, 0x90, 0xC9, 0xFF, | ||
116 | 0x10, 0x0A, 0x9B, 0x09, 0xA0, 0xB9, 0xA0, 0xB9, 0xA0, 0x9D, | ||
117 | 0x0A, 0x9A, 0x0A, 0x90, 0x09, 0xA0, 0x9D, 0x0C, 0x90, 0xB9, | ||
118 | 0x00, 0x9A, 0x09, 0x0C, 0x9A, 0x09, 0xA0, 0x90, 0xA9, 0x0A, | ||
119 | 0x9A, 0x0C, 0x90, 0x0A, 0x9E, 0x00, 0xA9, 0x09, 0xA0, 0x90, | ||
120 | 0x9A, 0x09, 0xB0, 0x9A, 0x09, 0x0A, 0x90, 0xA9, 0xA0, 0xC9, | ||
121 | 0x00, 0xA9, 0xEB, 0x09, 0x9F, 0x23, 0x00, 0xB9, 0xF4, 0x30, | ||
122 | 0x09, 0x9F, 0x73, 0x00, 0x99, 0xFE, 0x20, 0x0A, 0x90, 0x0B, | ||
123 | 0x9B, 0x09, 0xA0, 0xB9, 0x00, 0x9A, 0x09, 0x0A, 0x90, 0x0A, | ||
124 | 0x9A, 0x0B, 0x9E, 0x30, 0xA9, 0xA0, 0xC9, 0x09, 0xC0, 0xC9, | ||
125 | 0x0C, 0x90, 0xC9, 0xF1, 0x30, 0x0E, 0x47, 0xE6, 0x8F, 0x52, | ||
126 | 0x00, 0x9C, 0x09, 0x00, 0x9A, 0x09, 0xB0, 0x9F, 0x02, 0x00, | ||
127 | 0x9A, 0x09, 0x00, 0x90, 0x90, 0x09, 0xA0, 0x90, 0x9E, 0x00, | ||
128 | 0x9C, 0x09, 0xA0, 0x90, 0x9A, 0x09, 0x09, 0x00, 0x9E, 0x20, | ||
129 | 0x9A, 0x09, 0xA0, 0x90, 0x9A, 0x09, 0x09, 0xE0, 0x09, 0xA0, | ||
130 | 0x90, 0x09, 0x00, 0x90, 0x09, 0x00, 0x9C, 0x09, 0xA0, 0x9E, | ||
131 | 0x00, 0x90, 0x09, 0x90, 0x09, 0x09, 0xA0, 0x9B, 0x09, 0xA0, | ||
132 | 0x90, 0x09, 0x00, 0x90, 0x09, 0x00, 0x9C, 0x09, 0xA0, 0x9E, | ||
133 | 0x80, 0x99, 0x09, 0xF2, 0x30, 0x09, 0x00, 0x9F, 0x23, 0x00, | ||
134 | 0x99, 0x00, 0x99, 0xF5, 0x30, 0x09, 0x09, 0x9F, 0xB2, 0x00, | ||
135 | 0x9A, 0x09, 0x09, 0xA0, 0x90, 0x09, 0x09, 0x00, 0x9A, 0x09, | ||
136 | 0x09, 0xA0, 0x90, 0x09, 0x00, 0x9A, 0x09, 0x09, 0xE7, 0x09, | ||
137 | 0x00, 0x90, 0x09, 0xC0, 0x9C, 0x09, 0xE0, 0x09, 0xA0, 0x9F, | ||
138 | 0x53, 0x00, 0xE4, 0x7E, 0x68, 0xF5, 0x20, 0x09, 0xC0, 0x9A, | ||
139 | 0x09, 0x00, 0x9B, 0x09, 0xF0, 0x20, 0x09, 0xC0, 0x9A, 0x09, | ||
140 | 0x09, 0xA0, 0x90, 0x9E, 0x00, 0x9C, 0x09, 0xA0, 0x90, 0x9C, | ||
141 | 0x09, 0x09, 0xE3, 0x09, 0xA0, 0x9A, 0x09, 0x09, 0xA0, 0x90, | ||
142 | 0x9E, 0x00, 0x9A, 0x09, 0x00, 0x90, 0x09, 0xA0, 0x90, 0x9C, | ||
143 | 0x09, 0xA0, 0x9E, 0x00, 0x90, 0x09, 0x09, 0x09, 0x09, 0xA0, | ||
144 | 0x9B, 0x09, 0xA0, 0x90, 0x09, 0x00, 0x9A, 0x09, 0x09, 0xC0, | ||
145 | 0x9A, 0x09, 0xE6, 0x09, 0x9A, 0x0E, 0x09, 0xFC, 0x20, 0x09, | ||
146 | 0x00, 0x9F, 0x03, 0x00, 0x99, 0xD0, 0x99, 0xFD, 0x20, 0x0E, | ||
147 | 0x09, 0xA0, 0x99, 0xF9, 0x20, 0x09, 0xC0, 0x9A, 0x09, 0x09, | ||
148 | 0xA0, 0x90, 0x9A, 0x09, 0x09, 0xA0, 0x90, 0x09, 0x00, 0x9C, | ||
149 | 0x09, 0xE7, 0x09, 0xA0, 0x90, 0x9C, 0x09, 0xC0, 0x9E, 0x00, | ||
150 | 0x9A, 0x09, 0xF5, 0x30, 0x0E, 0x47, 0xE5, 0x82, 0xF5, 0x20, | ||
151 | 0x0A, 0x9A, 0x09, 0xA0, 0x90, 0x09, 0xB0, 0x9F, 0x02, 0x00, | ||
152 | 0x9C, 0x09, 0xA0, 0x90, 0xB9, 0xA0, 0xA9, 0xB0, 0x9C, 0x09, | ||
153 | 0xA0, 0x90, 0x9C, 0x09, 0x9E, 0x40, 0x9A, 0x0B, 0x90, 0x09, | ||
154 | 0xA0, 0x90, 0xA9, 0xC0, 0x9A, 0x09, 0x00, 0x90, 0x09, 0xA0, | ||
155 | 0x90, 0xA9, 0xA0, 0x9A, 0x09, 0xE0, 0x09, 0x00, 0x90, 0x90, | ||
156 | 0x90, 0x9A, 0x09, 0xB0, 0x9A, 0x09, 0x00, 0x90, 0x09, 0xA0, | ||
157 | 0x90, 0xA9, 0xA0, 0x9A, 0x09, 0xE4, 0x09, 0x9E, 0x40, 0x9F, | ||
158 | 0x92, 0x00, 0xB9, 0x00, 0xB9, 0xFD, 0x20, 0x0B, 0x90, 0x0B, | ||
159 | 0x9F, 0xD2, 0x00, 0x9E, 0x40, 0x99, 0xF7, 0x20, 0x09, 0x0A, | ||
160 | 0x90, 0xB9, 0x00, 0x9A, 0x09, 0x0B, 0x90, 0x0C, 0x90, 0x09, | ||
161 | 0x00, 0x9D, 0x0A, 0x9E, 0x40, 0x9A, 0x09, 0x0A, 0x9A, 0x09, | ||
162 | 0xC0, 0xA9, 0xC0, 0x9A, 0x0A, 0x9F, 0x33, 0x00, 0xE3, 0x7E, | ||
163 | 0x68, 0x2F, 0x52, 0x00, 0x9C, 0x09, 0xA0, 0x90, 0x09, 0xB0, | ||
164 | 0x9F, 0x02, 0x00, 0x9C, 0x0C, 0x90, 0x9E, 0x20, 0x9A, 0x09, | ||
165 | 0xC0, 0x9A, 0x09, 0x09, 0xC0, 0x90, 0x9E, 0x30, 0x9A, 0x09, | ||
166 | 0x09, 0xA0, 0x9A, 0x09, 0x09, 0xE1, 0x09, 0x09, 0xA0, 0x90, | ||
167 | 0x09, 0xA0, 0x90, 0x9C, 0x09, 0xA0, 0x9E, 0x00, 0x90, 0x09, | ||
168 | 0x00, 0x99, 0x00, 0x90, 0x9D, 0x09, 0x09, 0xA0, 0x90, 0x09, | ||
169 | 0xA0, 0x90, 0x9C, 0x09, 0xA0, 0x9E, 0x60, 0x99, 0xA0, 0xE0, | ||
170 | 0x9F, 0x92, 0x00, 0x99, 0xD0, 0x99, 0xF0, 0x30, 0x09, 0x00, | ||
171 | 0x9F, 0x03, 0x00, 0xE0, 0x9A, 0x09, 0x9F, 0x92, 0x00, 0x9A, | ||
172 | 0x09, 0x09, 0x09, 0xA0, 0xC9, 0x09, 0xC0, 0x9A, 0x09, 0x00, | ||
173 | 0x90, 0x09, 0xE2, 0x09, 0xE3, 0x09, 0xA0, 0x90, 0x9C, 0x09, | ||
174 | 0xC0, 0x9E, 0x00, 0x9A, 0x09, 0xF4, 0x30, 0x0E, 0x47, 0xE6, | ||
175 | 0x82, 0xF5, 0x20, 0x09, 0xC0, 0x90, 0x09, 0xA0, 0x9B, 0x09, | ||
176 | 0xF0, 0x20, 0x09, 0xA0, 0x90, 0x9A, 0x09, 0x09, 0xE2, 0x09, | ||
177 | 0xA0, 0x9C, 0x09, 0xA0, 0x90, 0x9A, 0x09, 0x09, 0x00, 0x9E, | ||
178 | 0x20, 0x9A, 0x09, 0x00, 0x90, 0x09, 0xA0, 0x90, 0x9E, 0x10, | ||
179 | 0x90, 0x9A, 0x09, 0x00, 0x90, 0x09, 0x00, 0x9C, 0x09, 0xA0, | ||
180 | 0x9E, 0x00, 0x90, 0x09, 0xA0, 0x90, 0x09, 0x09, 0x00, 0x99, | ||
181 | 0x00, 0x90, 0x9A, 0x09, 0x00, 0x90, 0x09, 0x00, 0x9C, 0x09, | ||
182 | 0xA0, 0x9E, 0x80, 0x99, 0x09, 0xF1, 0x30, 0x09, 0x90, 0x09, | ||
183 | 0x9F, 0x23, 0x00, 0x90, 0x09, 0xF6, 0x30, 0x09, 0x09, 0x9F, | ||
184 | 0xB2, 0x00, 0x9A, 0x09, 0x09, 0x00, 0x90, 0x09, 0xA0, 0x90, | ||
185 | 0x9C, 0x09, 0xA0, 0x90, 0x09, 0x00, 0x9A, 0x09, 0xC0, 0x9E, | ||
186 | 0x30, 0x90, 0x09, 0x00, 0x9C, 0x09, 0xC0, 0x9E, 0x00, 0x9A, | ||
187 | 0x09, 0xF4, 0x30, 0x0E, 0x47, 0xE6, 0x82, 0xF5, 0x20, 0x0C, | ||
188 | 0x90, 0xA9, 0xA0, 0xA9, 0xA0, 0x9F, 0x12, 0x00, 0xA9, 0x00, | ||
189 | 0x9A, 0x09, 0x09, 0xC0, 0xB9, 0xB0, 0xC9, 0x00, 0xA9, 0xA0, | ||
190 | 0xA9, 0x00, 0x9A, 0x09, 0xE1, 0x09, 0xA0, 0x9A, 0x09, 0x00, | ||
191 | 0xA9, 0x00, 0xC9, 0xC0, 0x9A, 0x0A, 0x90, 0xA9, 0xA0, 0xC9, | ||
192 | 0x00, 0xA9, 0xE0, 0x0A, 0x90, 0x9A, 0x09, 0xA0, 0x9A, 0x09, | ||
193 | 0x9A, 0x09, 0xA0, 0xA9, 0x0A, 0x9A, 0x0C, 0x90, 0x0A, 0x9E, | ||
194 | 0xB0, 0x99, 0xF3, 0x30, 0x09, 0x9F, 0x43, 0x00, 0xB9, 0xF6, | ||
195 | 0x30, 0x09, 0x9F, 0xE2, 0x00, 0xB9, 0x09, 0xA0, 0x90, 0x9A, | ||
196 | 0x09, 0x09, 0xC0, 0x9A, 0x09, 0x0A, 0x90, 0x0A, 0x90, 0x0B, | ||
197 | 0x9E, 0x40, 0xA9, 0xA0, 0xC9, 0x0C, 0x90, 0xC9, 0xA0, 0x9A, | ||
198 | 0x0C, 0x9F, 0x03, 0x00, 0xE4, 0x7E, 0x58, 0x22, 0xF7, 0x62, | ||
199 | 0x0E, 0x37, 0xE6, 0x82, 0x2F, 0x66, 0x20, 0xE4, 0x7E, 0x68, | ||
200 | 0x22, 0xF6, 0x62, 0x0E, 0x47, 0xE5, 0x8A, 0x2F, 0x52, 0x00, | ||
201 | 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, | ||
202 | 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, | ||
203 | 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, | ||
204 | 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5F, 0xC2, | ||
205 | 0x00, 0xE3, 0x7E, 0x68, 0xA2, 0xF5, 0x20, 0x0F, 0x62, 0x05, | ||
206 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
207 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
208 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
209 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
210 | 0x54, 0xFA, 0x20, 0x0E, 0x47, 0xE6, 0x8A, 0x2F, 0x52, 0x00, | ||
211 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
212 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
213 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
214 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
215 | 0x0F, 0x62, 0x05, 0x4F, 0xA2, 0x00, 0xE4, 0x7E, 0x68, 0xA2, | ||
216 | 0xF5, 0x20, 0x0F, 0x81, 0x05, 0xE1, 0x9D, 0x54, 0xE9, 0x0F, | ||
217 | 0x81, 0x05, 0xE1, 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0xE1, | ||
218 | 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0xE1, 0x9D, 0x54, 0xE9, | ||
219 | 0x0F, 0x81, 0x05, 0xE1, 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, | ||
220 | 0xE1, 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0xE1, 0x9D, 0x54, | ||
221 | 0xE9, 0x0F, 0x81, 0x05, 0xE1, 0x9D, 0x54, 0xE9, 0x0F, 0x62, | ||
222 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xFA, 0x20, 0x0E, 0x47, | ||
223 | 0xE5, 0x8B, 0x2F, 0x52, 0x00, 0xF8, 0x10, 0x5B, 0x9A, 0x59, | ||
224 | 0xD5, 0x4E, 0x90, 0xF8, 0x10, 0x59, 0xA5, 0xB9, 0xD5, 0x4E, | ||
225 | 0x90, 0xF8, 0x10, 0x59, 0xD5, 0x9D, 0x54, 0xE9, 0x0F, 0x81, | ||
226 | 0x05, 0xE1, 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0xB9, 0xA5, | ||
227 | 0x9D, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0x9A, 0x5B, 0x9D, 0x54, | ||
228 | 0xE9, 0x0F, 0x81, 0x05, 0x9D, 0x59, 0xD5, 0x4E, 0x90, 0xF8, | ||
229 | 0x10, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
230 | 0x0F, 0x62, 0x05, 0x4F, 0xA2, 0x00, 0xE3, 0x7E, 0x68, 0xB2, | ||
231 | 0xF5, 0x20, 0x0E, 0x15, 0x99, 0xE7, 0x5B, 0x9A, 0x59, 0xD5, | ||
232 | 0x4E, 0x90, 0xD5, 0xC9, 0xE6, 0x59, 0xA5, 0xB9, 0xD5, 0x4E, | ||
233 | 0x90, 0xD5, 0xC9, 0xE6, 0x59, 0xD5, 0x9D, 0x54, 0xE9, 0x0E, | ||
234 | 0x25, 0x99, 0xE6, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xC5, 0xD9, | ||
235 | 0xE6, 0x5B, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xD5, 0xC9, 0xE6, | ||
236 | 0x59, 0xA5, 0xB9, 0xD5, 0x4E, 0x90, 0xB5, 0xE0, 0x9E, 0x65, | ||
237 | 0x9D, 0x59, 0xD5, 0x4E, 0x90, 0xC5, 0xC9, 0xE7, 0x5E, 0x19, | ||
238 | 0xD5, 0x4E, 0x90, 0xC5, 0xC9, 0xFC, 0x10, 0x54, 0xE9, 0x0C, | ||
239 | 0x5C, 0x9F, 0xC1, 0x05, 0x4F, 0x92, 0x00, 0xE4, 0x7E, 0x68, | ||
240 | 0xB2, 0xF5, 0x20, 0x0E, 0x05, 0xA9, 0xE7, 0x5B, 0x9A, 0x59, | ||
241 | 0xD5, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE5, 0x59, 0xA5, | ||
242 | 0xB9, 0xD5, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE5, 0x59, | ||
243 | 0xD5, 0x9D, 0x54, 0xE9, 0x0E, 0x15, 0xA9, 0xE6, 0x5E, 0x19, | ||
244 | 0xD5, 0x4E, 0x90, 0xC5, 0x99, 0xEA, 0x5B, 0x9A, 0x59, 0xD5, | ||
245 | 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE5, 0x59, 0xA5, 0xB9, | ||
246 | 0xD5, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE6, 0x59, 0xD5, | ||
247 | 0x9D, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x65, 0xE1, | ||
248 | 0x9D, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, | ||
249 | 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xF9, | ||
250 | 0x20, 0x0E, 0x47, 0xE6, 0x8B, 0x2F, 0x52, 0x00, 0xD5, 0xB9, | ||
251 | 0xE7, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xE3, 0x59, 0x9E, 0x55, | ||
252 | 0xE1, 0x9D, 0x54, 0xE9, 0x0E, 0x35, 0x99, 0xE5, 0x5E, 0x19, | ||
253 | 0xD5, 0x4E, 0x90, 0xE0, 0x5B, 0x9E, 0x65, 0xB9, 0xA5, 0x9D, | ||
254 | 0x54, 0xE9, 0x0C, 0x59, 0x9E, 0xA5, 0xB9, 0xA5, 0x9D, 0x54, | ||
255 | 0xE9, 0x0C, 0x59, 0x9E, 0xA5, 0xB9, 0xA5, 0x9D, 0x54, 0xE9, | ||
256 | 0x0E, 0x25, 0x99, 0xE6, 0x5B, 0x9A, 0x59, 0xD5, 0x4E, 0x90, | ||
257 | 0xB5, 0x99, 0xA5, 0x99, 0xE6, 0x5E, 0x19, 0xD5, 0x4E, 0x90, | ||
258 | 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0B, 0x59, | ||
259 | 0x95, 0x5A, 0x9F, 0xB1, 0x05, 0x4F, 0x92, 0x00, 0xE4, 0x7E, | ||
260 | 0x58, 0xC2, 0xF5, 0x20, 0x0E, 0x15, 0x99, 0xE7, 0x5E, 0x19, | ||
261 | 0xD5, 0x4E, 0x90, 0xE3, 0x59, 0x9E, 0x55, 0xE1, 0x9D, 0x54, | ||
262 | 0xE9, 0x0E, 0x35, 0x99, 0xE5, 0x5E, 0x19, 0xD5, 0x4E, 0x90, | ||
263 | 0xE0, 0x5B, 0x9E, 0x65, 0xB9, 0xA5, 0x9D, 0x54, 0xE9, 0x0C, | ||
264 | 0x5C, 0x9E, 0x75, 0xB9, 0xA5, 0x9D, 0x54, 0xE9, 0x0C, 0x59, | ||
265 | 0x9E, 0xA5, 0xB9, 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x15, 0x99, | ||
266 | 0xE7, 0x5B, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xB5, 0x99, 0xA5, | ||
267 | 0x99, 0xE6, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xB5, 0x99, 0xA5, | ||
268 | 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x95, 0x5A, 0x9F, | ||
269 | 0xB1, 0x05, 0x4F, 0x92, 0x00, 0xE3, 0x7E, 0x68, 0xC2, 0xF5, | ||
270 | 0x20, 0x0E, 0x15, 0x99, 0xE7, 0x5E, 0x19, 0xD5, 0x4E, 0x90, | ||
271 | 0xE3, 0x59, 0x9E, 0x55, 0xE1, 0x9D, 0x54, 0xE9, 0x0E, 0x05, | ||
272 | 0xB9, 0xE6, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xD5, 0x99, 0x59, | ||
273 | 0x9E, 0x65, 0xB9, 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x25, 0x99, | ||
274 | 0xE6, 0x5B, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xC5, 0xD9, 0xE6, | ||
275 | 0x5B, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE1, 0x59, 0x9E, 0x75, | ||
276 | 0xB9, 0xA5, 0x9D, 0x54, 0xE9, 0x0C, 0x5C, 0x9E, 0x75, 0xE1, | ||
277 | 0x9D, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, | ||
278 | 0x4E, 0x90, 0xB5, 0x99, 0x59, 0x59, 0x9F, 0xB1, 0x05, 0x4F, | ||
279 | 0x82, 0x00, 0xE4, 0x7E, 0x68, 0xC2, 0xF5, 0x20, 0x0E, 0x15, | ||
280 | 0x99, 0xE7, 0x5E, 0x19, 0xD5, 0x4E, 0x90, 0xE2, 0x59, 0x9E, | ||
281 | 0x65, 0xE1, 0x9D, 0x54, 0xE9, 0x0E, 0x35, 0x99, 0xE5, 0x5E, | ||
282 | 0x19, 0xD5, 0x4E, 0x90, 0xD5, 0x99, 0x59, 0x9E, 0x65, 0xE1, | ||
283 | 0x9D, 0x54, 0xE9, 0x0E, 0x35, 0x99, 0xE5, 0x5E, 0x19, 0xD5, | ||
284 | 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE5, 0x5E, 0x19, 0xD5, | ||
285 | 0x4E, 0x90, 0xE0, 0x59, 0x9E, 0x85, 0xE1, 0x9D, 0x54, 0xE9, | ||
286 | 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x65, 0xE1, 0x9D, 0x54, 0xE9, | ||
287 | 0x0C, 0x5D, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xB5, 0x99, 0x59, | ||
288 | 0x59, 0x9F, 0xB1, 0x05, 0x4F, 0x82, 0x00, 0xE4, 0x7E, 0x58, | ||
289 | 0xD2, 0xF5, 0x20, 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, | ||
290 | 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0E, 0x35, 0x99, | ||
291 | 0xFA, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x59, 0x9F, 0xB1, | ||
292 | 0x05, 0x4E, 0x90, 0xE3, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x90, | ||
293 | 0xC5, 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, 0x0E, 0x05, | ||
294 | 0x99, 0xFD, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9F, | ||
295 | 0xB1, 0x05, 0x4E, 0x90, 0xE2, 0x59, 0x9F, 0xB1, 0x05, 0x4E, | ||
296 | 0x90, 0xB5, 0xA9, 0x55, 0x99, 0xFB, 0x10, 0x54, 0xF8, 0x20, | ||
297 | 0x0E, 0x37, 0xE6, 0x8D, 0x2F, 0x52, 0x00, 0xE1, 0x59, 0x9F, | ||
298 | 0xC1, 0x05, 0x4E, 0x90, 0xE0, 0x59, 0x9F, 0xD1, 0x05, 0x4E, | ||
299 | 0x90, 0xE3, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xC5, 0xE0, | ||
300 | 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xE3, 0x59, 0x9F, 0xA1, 0x05, | ||
301 | 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, | ||
302 | 0x0D, 0x59, 0x9F, 0xE1, 0x05, 0x4E, 0x90, 0xB5, 0x99, 0xA5, | ||
303 | 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0E, 0x25, 0x99, 0xFB, 0x10, | ||
304 | 0x54, 0xE9, 0x0B, 0x5A, 0x95, 0x59, 0x9F, 0xB1, 0x05, 0x4F, | ||
305 | 0x72, 0x00, 0xE4, 0x7E, 0x68, 0xD2, 0xF5, 0x20, 0x0E, 0x15, | ||
306 | 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9F, 0xE1, 0x05, | ||
307 | 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, | ||
308 | 0x0E, 0x25, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x95, | ||
309 | 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, | ||
310 | 0xFA, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9F, 0xE1, 0x05, 0x4E, | ||
311 | 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0B, | ||
312 | 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xB5, 0x99, | ||
313 | 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xF7, 0x20, 0x0E, 0x47, 0xE6, | ||
314 | 0x8D, 0x2F, 0x52, 0x00, 0xD5, 0xD9, 0xE4, 0x57, 0xE7, 0x54, | ||
315 | 0xE9, 0x0C, 0x5E, 0x09, 0xE6, 0x5A, 0x7E, 0x35, 0x4E, 0x90, | ||
316 | 0xD5, 0xC9, 0xE6, 0x57, 0x57, 0xE4, 0x54, 0xE9, 0x0E, 0x25, | ||
317 | 0x99, 0xE6, 0x57, 0xE6, 0x54, 0xE9, 0x0D, 0x5B, 0x9E, 0x45, | ||
318 | 0x77, 0x55, 0x7E, 0x55, 0x4E, 0x90, 0xD5, 0xC9, 0xE3, 0x57, | ||
319 | 0xE9, 0x54, 0xE9, 0x0D, 0x59, 0x9E, 0x55, 0x7E, 0xA5, 0x4E, | ||
320 | 0x90, 0xC5, 0xC9, 0xE5, 0x57, 0xE8, 0x54, 0xE9, 0x0C, 0x5C, | ||
321 | 0x9E, 0x65, 0x7E, 0x75, 0x4E, 0x90, 0xC5, 0xC9, 0xFC, 0x10, | ||
322 | 0x54, 0xF7, 0x20, 0x0E, 0x47, 0xE5, 0x8E, 0x02, 0xF5, 0x20, | ||
323 | 0x0F, 0x71, 0x05, 0x7E, 0x75, 0x4E, 0x90, 0xF8, 0x10, 0x57, | ||
324 | 0xA5, 0x7E, 0x25, 0x4E, 0x90, 0xF8, 0x10, 0x57, 0x57, 0xE4, | ||
325 | 0x54, 0xE9, 0x0F, 0x71, 0x05, 0xB7, 0xE4, 0x54, 0xE9, 0x0E, | ||
326 | 0xE5, 0x77, 0x57, 0xE6, 0x54, 0xE9, 0x0E, 0xD5, 0x75, 0x7E, | ||
327 | 0x85, 0x4E, 0x90, 0xED, 0x57, 0xEA, 0x54, 0xE9, 0x0E, 0xE5, | ||
328 | 0x7E, 0x95, 0x4E, 0x90, 0xF8, 0x10, 0x57, 0xE6, 0x54, 0xE9, | ||
329 | 0x0F, 0x62, 0x05, 0x4F, 0x72, 0x00, 0xE3, 0x7E, 0x68, 0xE0, | ||
330 | 0x2F, 0x52, 0x00, 0xF7, 0x10, 0x57, 0xE7, 0x54, 0xE9, 0x0F, | ||
331 | 0x81, 0x05, 0x75, 0xA7, 0xE2, 0x54, 0xE9, 0x0F, 0x71, 0x05, | ||
332 | 0xC7, 0xE3, 0x54, 0xE9, 0x0E, 0xF5, 0x75, 0x7E, 0x65, 0x4E, | ||
333 | 0x90, 0xF8, 0x10, 0x57, 0xE6, 0x54, 0xE9, 0x0E, 0xE5, 0x7E, | ||
334 | 0x95, 0x4E, 0x90, 0xEC, 0x57, 0xEB, 0x54, 0xE9, 0x0E, 0xE5, | ||
335 | 0x7E, 0x95, 0x4E, 0x90, 0xF8, 0x10, 0x57, 0xE6, 0x54, 0xE9, | ||
336 | 0x0F, 0x62, 0x05, 0x4F, 0x62, 0x00, 0xE4, 0x7E, 0x68, 0xE0, | ||
337 | 0x2F, 0x52, 0x00, 0xF7, 0x10, 0x57, 0xE7, 0x54, 0xE9, 0x0F, | ||
338 | 0x81, 0x05, 0x75, 0x75, 0x7E, 0x25, 0x4E, 0x90, 0xF8, 0x10, | ||
339 | 0x57, 0x57, 0xE4, 0x54, 0xE9, 0x0F, 0x71, 0x05, 0xA7, 0xE5, | ||
340 | 0x54, 0xE9, 0x0F, 0x71, 0x05, 0x7E, 0x75, 0x4E, 0x90, 0xED, | ||
341 | 0x57, 0x57, 0x57, 0xE6, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
342 | 0x90, 0xEE, 0x57, 0xE9, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0x7E, | ||
343 | 0x65, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xF6, 0x20, 0x0E, 0x47, | ||
344 | 0xE5, 0x8E, 0x12, 0xF5, 0x20, 0x0F, 0x71, 0x05, 0x7E, 0x75, | ||
345 | 0x4E, 0x90, 0xF8, 0x10, 0x57, 0x5A, 0x7E, 0x25, 0x4E, 0x90, | ||
346 | 0xF7, 0x10, 0x5C, 0x7E, 0x35, 0x4E, 0x90, 0xF8, 0x10, 0x57, | ||
347 | 0x57, 0xE4, 0x54, 0xE9, 0x0E, 0xF5, 0x7E, 0x85, 0x4E, 0x90, | ||
348 | 0xED, 0x57, 0x55, 0x7E, 0x75, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
349 | 0xE9, 0x0E, 0xE5, 0x7E, 0x95, 0x4E, 0x90, 0xF8, 0x10, 0x57, | ||
350 | 0xE6, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4F, 0x62, 0x00, 0xE4, | ||
351 | 0x7E, 0x58, 0xE1, 0x2F, 0x52, 0x00, 0xF6, 0x20, 0x54, 0xE9, | ||
352 | 0x0F, 0x81, 0x05, 0x7E, 0x65, 0x4E, 0x90, 0xF8, 0x10, 0x57, | ||
353 | 0x57, 0xE4, 0x54, 0xE9, 0x0E, 0xF5, 0xB7, 0xE5, 0x54, 0xE9, | ||
354 | 0x0E, 0xF5, 0x75, 0x77, 0xE5, 0x54, 0xE9, 0x0E, 0xD5, 0x75, | ||
355 | 0x57, 0xE7, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xEE, | ||
356 | 0x57, 0xE9, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0x7E, 0x65, 0x4E, | ||
357 | 0x90, 0xEC, 0x5E, 0x37, 0xE2, 0x54, 0xF6, 0x20, 0x0E, 0x37, | ||
358 | 0xE6, 0x8E, 0x12, 0xF5, 0x20, 0x0F, 0x71, 0x05, 0x7E, 0x75, | ||
359 | 0x4E, 0x90, 0xF9, 0x10, 0x5A, 0x7E, 0x35, 0x4E, 0x90, 0xF8, | ||
360 | 0x10, 0x57, 0x57, 0xE4, 0x54, 0xE9, 0x0F, 0x81, 0x05, 0x7E, | ||
361 | 0x65, 0x4E, 0x90, 0xEE, 0x57, 0x55, 0x77, 0xE5, 0x54, 0xE9, | ||
362 | 0x0E, 0xE5, 0x77, 0x57, 0xE6, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
363 | 0x4E, 0x90, 0xEF, 0x57, 0xE8, 0x54, 0xE9, 0x0F, 0x71, 0x05, | ||
364 | 0x7E, 0x75, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xF5, 0x20, 0x0E, | ||
365 | 0x47, 0xE6, 0x8E, 0x12, 0xF5, 0x20, 0x0F, 0x62, 0x05, 0x4E, | ||
366 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
367 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
368 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
369 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
370 | 0xF5, 0x20, 0x0E, 0x47, 0xE5, 0x8E, 0x22, 0xF5, 0x20, 0x0F, | ||
371 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
372 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
373 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
374 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
375 | 0xF6, 0x20, 0x54, 0xF5, 0x20, 0x0E, 0x37, 0xE6, 0x8E, 0x22, | ||
376 | 0xF5, 0x20, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
377 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
378 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
379 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
380 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xF4, 0x20, 0x0E, 0x47, | ||
381 | 0xE6, 0x8E, 0x22, 0xF6, 0x20, 0x0F, 0x62, 0x04, 0xEA, 0x0F, | ||
382 | 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, | ||
383 | 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, | ||
384 | 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, | ||
385 | 0xEA, 0x0F, 0x62, 0x04, 0xF4, 0x20, 0x0E, 0x47, 0xE6, 0x8E, | ||
386 | 0x22, 0xFF, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x32, 0xFF, 0x52, | ||
387 | 0x0E, 0x37, 0xE6, 0x8E, 0x32, 0xF5, 0x20, 0x0A, 0x7A, 0x0C, | ||
388 | 0x70, 0xC7, 0xB0, 0xC7, 0x07, 0xA0, 0x7F, 0x71, 0x00, 0xC7, | ||
389 | 0x07, 0xA0, 0x7F, 0xC2, 0x00, 0x7C, 0x0A, 0x70, 0x7A, 0x07, | ||
390 | 0x0C, 0x7F, 0x32, 0x00, 0xA7, 0x00, 0xB7, 0x00, 0xC7, 0x07, | ||
391 | 0xA0, 0x7D, 0x07, 0x07, 0xF8, 0x10, 0x0A, 0x70, 0x07, 0xD0, | ||
392 | 0xA7, 0xA0, 0xB7, 0x0C, 0x7D, 0x07, 0x07, 0xEA, 0x07, 0xA0, | ||
393 | 0x70, 0x0A, 0x70, 0x07, 0xA0, 0x70, 0xC7, 0xF0, 0x20, 0x0C, | ||
394 | 0x70, 0xB7, 0xB0, 0x7B, 0x0B, 0x70, 0xC7, 0xFA, 0x10, 0x0B, | ||
395 | 0x7A, 0x0A, 0x70, 0x0A, 0x70, 0x7A, 0x07, 0x0C, 0x7F, 0xD1, | ||
396 | 0x00, 0xA7, 0xB0, 0x7A, 0x0C, 0x7F, 0x62, 0x00, 0xC7, 0x00, | ||
397 | 0xA7, 0x00, 0xB7, 0x00, 0x7A, 0x07, 0xA0, 0x7A, 0x0C, 0x7F, | ||
398 | 0x72, 0x00, 0xE4, 0x7E, 0x68, 0xE3, 0x2F, 0x52, 0x00, 0x70, | ||
399 | 0x07, 0x00, 0x7C, 0x07, 0xE1, 0x07, 0xC0, 0x77, 0x00, 0x7F, | ||
400 | 0x71, 0x00, 0x7C, 0x07, 0x70, 0x07, 0xFC, 0x20, 0x07, 0xD0, | ||
401 | 0x70, 0x07, 0x70, 0x07, 0x07, 0xF6, 0x20, 0x07, 0xA0, 0x70, | ||
402 | 0x7A, 0x07, 0x07, 0xC0, 0x77, 0x00, 0x7D, 0x07, 0x07, 0xF7, | ||
403 | 0x10, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xA0, 0x70, 0x7C, 0x07, | ||
404 | 0xE3, 0x07, 0x07, 0xEA, 0x07, 0x70, 0x77, 0x07, 0xA0, 0x70, | ||
405 | 0x7A, 0x07, 0x07, 0xF4, 0x20, 0x07, 0xC0, 0x7A, 0x07, 0x00, | ||
406 | 0x70, 0x70, 0x07, 0xC0, 0x7F, 0xE1, 0x00, 0x7A, 0x07, 0x07, | ||
407 | 0xA0, 0x70, 0x07, 0x00, 0x77, 0x00, 0x7A, 0x07, 0xFE, 0x10, | ||
408 | 0x07, 0xA0, 0x70, 0x07, 0x07, 0xB0, 0x7F, 0x82, 0x00, 0x7C, | ||
409 | 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x07, 0x70, 0x77, 0x00, 0x70, | ||
410 | 0x7B, 0x07, 0xF9, 0x20, 0x0E, 0x47, 0xE5, 0x8E, 0x42, 0xF5, | ||
411 | 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xE1, 0x07, 0xC0, 0x70, | ||
412 | 0x70, 0x7F, 0x71, 0x00, 0x7C, 0x07, 0x07, 0x07, 0xFC, 0x20, | ||
413 | 0x07, 0xD0, 0x70, 0x07, 0x07, 0x07, 0x07, 0xF6, 0x20, 0x07, | ||
414 | 0xA0, 0x70, 0x7A, 0x07, 0x07, 0xC0, 0x70, 0x70, 0x7C, 0x0C, | ||
415 | 0x7E, 0xF0, 0x7C, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0xC0, 0x7E, | ||
416 | 0x20, 0xC7, 0xE9, 0x07, 0x07, 0x07, 0x07, 0xA0, 0x70, 0x7A, | ||
417 | 0x07, 0x07, 0xF4, 0x20, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0xA0, | ||
418 | 0x70, 0x7C, 0x07, 0xFE, 0x10, 0x07, 0xA0, 0x70, 0x7A, 0x07, | ||
419 | 0x00, 0x70, 0x07, 0x07, 0x07, 0xA0, 0x7F, 0xE1, 0x00, 0x7C, | ||
420 | 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x20, 0x07, 0xC0, 0x7A, 0x07, | ||
421 | 0x07, 0xA0, 0x70, 0x70, 0x70, 0x70, 0x7A, 0x07, 0xA0, 0x7F, | ||
422 | 0x92, 0x00, 0xE4, 0x7E, 0x58, 0xE4, 0x2F, 0x52, 0x00, 0x7A, | ||
423 | 0x07, 0x0A, 0x7A, 0x0A, 0x7D, 0x0A, 0x7A, 0x07, 0x07, 0x07, | ||
424 | 0xF7, 0x10, 0x0A, 0x7A, 0x07, 0x07, 0x07, 0xFC, 0x20, 0x07, | ||
425 | 0xD0, 0x70, 0x07, 0x07, 0x07, 0x0A, 0x7F, 0x42, 0x00, 0x7A, | ||
426 | 0x07, 0x0B, 0x70, 0x0A, 0x7A, 0x07, 0x07, 0x07, 0xD0, 0x70, | ||
427 | 0x7F, 0x71, 0x00, 0x7C, 0x07, 0xC0, 0x7A, 0x07, 0x00, 0xA7, | ||
428 | 0x00, 0xA7, 0xE1, 0x07, 0x07, 0xEA, 0x07, 0x07, 0x07, 0x07, | ||
429 | 0xA0, 0x70, 0x7A, 0x07, 0x0A, 0x7F, 0x22, 0x00, 0xA7, 0xA0, | ||
430 | 0xB7, 0x00, 0x7A, 0x07, 0x00, 0xA7, 0x00, 0xA7, 0xFC, 0x10, | ||
431 | 0x0B, 0x70, 0x07, 0xA0, 0x70, 0x07, 0x00, 0x70, 0x70, 0x7A, | ||
432 | 0x07, 0xFE, 0x10, 0x07, 0xC0, 0x7A, 0x07, 0xA0, 0x7F, 0x82, | ||
433 | 0x00, 0xA7, 0xA0, 0x7A, 0x07, 0x0B, 0x70, 0x07, 0x07, 0x07, | ||
434 | 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x20, 0x0E, 0x47, 0xE6, 0x8E, | ||
435 | 0x42, 0xF5, 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xE1, 0x07, | ||
436 | 0xC0, 0x70, 0x07, 0x7F, 0x71, 0x00, 0x7C, 0x07, 0x00, 0x77, | ||
437 | 0xFC, 0x20, 0x07, 0xD0, 0x70, 0x07, 0x00, 0x77, 0x07, 0xF6, | ||
438 | 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xC0, 0x70, 0x07, 0x7C, | ||
439 | 0x0C, 0x7E, 0xF0, 0x7C, 0x07, 0xC0, 0x7A, 0x07, 0xC0, 0x70, | ||
440 | 0x7E, 0x20, 0xC7, 0xE9, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x00, | ||
441 | 0x70, 0x70, 0x07, 0xF4, 0x20, 0x07, 0xC0, 0x70, 0x7A, 0x0C, | ||
442 | 0x7C, 0x07, 0x07, 0xFE, 0x10, 0x07, 0xC0, 0x7A, 0x07, 0x00, | ||
443 | 0x70, 0x07, 0x00, 0x77, 0xA0, 0x7F, 0xE1, 0x00, 0x7C, 0x0C, | ||
444 | 0x7A, 0x07, 0xF8, 0x20, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0x07, | ||
445 | 0xA0, 0x7A, 0x07, 0x0C, 0x7A, 0x07, 0xF8, 0x20, 0x0E, 0x47, | ||
446 | 0xE6, 0x8E, 0x42, 0xF5, 0x20, 0x07, 0x00, 0x70, 0x07, 0xC0, | ||
447 | 0x7E, 0x10, 0x7C, 0x07, 0xA0, 0x7F, 0x71, 0x00, 0x7C, 0x07, | ||
448 | 0xA0, 0x7F, 0xC2, 0x00, 0x7D, 0x07, 0x00, 0x7A, 0x07, 0x07, | ||
449 | 0xF6, 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xC0, 0x7A, 0x07, | ||
450 | 0xD0, 0x70, 0x7F, 0x71, 0x00, 0x7A, 0x07, 0x07, 0xC0, 0x7A, | ||
451 | 0x07, 0xC0, 0x70, 0x7E, 0x30, 0x70, 0x7E, 0xA0, 0x7A, 0x07, | ||
452 | 0x07, 0xA0, 0x70, 0x07, 0x07, 0x00, 0x7F, 0x42, 0x00, 0x7C, | ||
453 | 0x07, 0x00, 0x70, 0x07, 0xA0, 0x7C, 0x07, 0x07, 0xFE, 0x10, | ||
454 | 0x07, 0xC0, 0x7A, 0x07, 0x00, 0x70, 0x07, 0xA0, 0x7A, 0x07, | ||
455 | 0xFE, 0x10, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0xA0, 0x7F, 0x82, | ||
456 | 0x00, 0x7C, 0x07, 0xA0, 0x70, 0x70, 0x07, 0x00, 0x7A, 0x07, | ||
457 | 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x20, 0x0E, 0x47, 0xE5, 0x8E, | ||
458 | 0x52, 0xF5, 0x20, 0x0A, 0x7A, 0x0C, 0x70, 0x7E, 0x10, 0x7C, | ||
459 | 0x07, 0xA0, 0x7F, 0x71, 0x00, 0x7C, 0x07, 0xA0, 0x7F, 0xC2, | ||
460 | 0x00, 0xC7, 0x0A, 0x70, 0x7A, 0x07, 0x0C, 0x7F, 0x32, 0x00, | ||
461 | 0xA7, 0x00, 0x7C, 0x0C, 0x70, 0x7A, 0x07, 0xD0, 0x70, 0x7F, | ||
462 | 0x81, 0x00, 0xA7, 0x00, 0xC7, 0x00, 0xA7, 0x00, 0xB7, 0x00, | ||
463 | 0xC7, 0xD0, 0x70, 0x7E, 0xA0, 0x7A, 0x07, 0x00, 0xA7, 0xB0, | ||
464 | 0x7A, 0x0C, 0x7F, 0x02, 0x00, 0xC7, 0x07, 0xA0, 0x70, 0x7A, | ||
465 | 0x07, 0x0B, 0x70, 0x0C, 0x7F, 0xA1, 0x00, 0x7D, 0x0A, 0x70, | ||
466 | 0x0A, 0x70, 0x7A, 0x07, 0xA0, 0x7F, 0xF1, 0x00, 0xA7, 0x00, | ||
467 | 0x7A, 0x07, 0xA0, 0x7F, 0x82, 0x00, 0x7D, 0x0A, 0x70, 0x07, | ||
468 | 0xA0, 0x70, 0x7A, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x20, | ||
469 | 0x0E, 0x37, 0xE6, 0x8E, 0x52, 0xFC, 0x52, 0x0E, 0x47, 0xE6, | ||
470 | 0x8E, 0x52, 0xFC, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xFC, | ||
471 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xFC, 0x52, 0x0E, 0x37, | ||
472 | 0xE6, 0x8E, 0x62, 0xFB, 0x52, 0x0E, 0x47, 0xE6, 0x8E, 0x52, | ||
473 | 0x1F, 0xB5, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x21, 0xFB, 0x52, | ||
474 | 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0x1F, 0xA5, 0x20, 0xE4, 0x7E, | ||
475 | 0x68, 0xE6, 0x21, 0xFA, 0x52, 0x0E, 0x47, 0xE6, 0x8E, 0x52, | ||
476 | 0x11, 0xFA, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0x11, 0xFA, | ||
477 | 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0x11, 0xF9, 0x52, 0x0E, | ||
478 | 0x47, 0xE6, 0x8E, 0x52, 0xA1, 0xF1, 0x40, 0x0B, 0x20, 0xA2, | ||
479 | 0x02, 0xA0, 0x2F, 0x92, 0x00, 0xA2, 0xA0, 0xA2, 0xA0, 0xB2, | ||
480 | 0xF5, 0x20, 0x0C, 0x2A, 0x02, 0xA0, 0x2A, 0x02, 0xF7, 0x20, | ||
481 | 0x0A, 0x20, 0x2A, 0x02, 0x0C, 0x2F, 0x82, 0x00, 0xB2, 0x00, | ||
482 | 0x2A, 0x02, 0x0A, 0x2F, 0x92, 0x00, 0xB2, 0x0C, 0x20, 0xB2, | ||
483 | 0xE1, 0x02, 0xFF, 0x10, 0x0A, 0x20, 0x02, 0xA0, 0x20, 0xB2, | ||
484 | 0xE1, 0x02, 0xFF, 0x10, 0x0A, 0x2A, 0x0A, 0x20, 0x0A, 0x2A, | ||
485 | 0x0C, 0x2F, 0x02, 0x00, 0xB2, 0x00, 0xC2, 0x0C, 0x20, 0x2A, | ||
486 | 0x02, 0xF0, 0x20, 0x0C, 0x2A, 0x02, 0xA0, 0xB2, 0xFA, 0x10, | ||
487 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xA1, 0xF0, 0x40, 0x02, 0xD0, | ||
488 | 0x20, 0x02, 0x20, 0x02, 0xF8, 0x20, 0x02, 0xA0, 0x20, 0x2A, | ||
489 | 0x02, 0x02, 0xFB, 0x20, 0x02, 0xB0, 0x20, 0x20, 0x02, 0x20, | ||
490 | 0x02, 0xF8, 0x20, 0x02, 0x00, 0x22, 0x00, 0x2A, 0x02, 0xFA, | ||
491 | 0x20, 0x02, 0xA0, 0x20, 0x22, 0x00, 0x20, 0x20, 0x02, 0xF7, | ||
492 | 0x20, 0x02, 0xE0, 0x02, 0xA0, 0x2A, 0x02, 0xD0, 0xB2, 0xFC, | ||
493 | 0x10, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0x02, 0xA0, 0x2D, 0x0B, | ||
494 | 0x2F, 0xC1, 0x00, 0x2A, 0x02, 0x02, 0xA0, 0x20, 0x20, 0x02, | ||
495 | 0x00, 0x2F, 0x42, 0x00, 0x2A, 0x02, 0x02, 0xC0, 0x2C, 0x02, | ||
496 | 0x00, 0x2F, 0x32, 0x00, 0x2B, 0x02, 0x02, 0x00, 0x2A, 0x02, | ||
497 | 0xF9, 0x10, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xA1, 0xF0, 0x40, | ||
498 | 0x02, 0xD0, 0x20, 0x02, 0x02, 0x02, 0xF8, 0x20, 0x02, 0xC0, | ||
499 | 0x2A, 0x02, 0x02, 0xFB, 0x20, 0x02, 0xA0, 0x2A, 0x02, 0x02, | ||
500 | 0x02, 0x02, 0xF8, 0x20, 0x02, 0x00, 0x20, 0x20, 0x2A, 0x02, | ||
501 | 0xFA, 0x20, 0x02, 0xA0, 0x20, 0x20, 0x20, 0x20, 0x2A, 0x02, | ||
502 | 0xF6, 0x20, 0x02, 0xE0, 0x02, 0xA0, 0x2A, 0x02, 0xC0, 0x20, | ||
503 | 0x2F, 0xE1, 0x00, 0x2C, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0xC0, | ||
504 | 0x20, 0x2F, 0xE1, 0x00, 0x2C, 0x02, 0xA0, 0x20, 0x2A, 0x02, | ||
505 | 0x02, 0xF4, 0x20, 0x02, 0xA0, 0x20, 0x2C, 0x02, 0xC0, 0x20, | ||
506 | 0x2F, 0x42, 0x00, 0x2A, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0xF9, | ||
507 | 0x10, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xA1, 0xF1, 0x40, 0x0A, | ||
508 | 0x2A, 0x02, 0x00, 0x20, 0x20, 0x2F, 0x82, 0x00, 0x2C, 0x02, | ||
509 | 0xA0, 0x20, 0x0A, 0x2F, 0x82, 0x00, 0x2A, 0x02, 0xA0, 0x20, | ||
510 | 0x20, 0x20, 0x2F, 0x82, 0x00, 0x20, 0x02, 0x02, 0x02, 0xA0, | ||
511 | 0x2F, 0xA2, 0x00, 0xB2, 0x00, 0x20, 0x20, 0x20, 0x2A, 0x02, | ||
512 | 0xF7, 0x20, 0x0A, 0x2B, 0x02, 0xA0, 0xB2, 0xE0, 0x0A, 0x2F, | ||
513 | 0xD1, 0x00, 0x2C, 0x0C, 0x20, 0xB2, 0xE0, 0x0A, 0x2F, 0xD1, | ||
514 | 0x00, 0x2C, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0x0A, 0x2F, 0x22, | ||
515 | 0x00, 0xB2, 0x00, 0xA2, 0xA0, 0xA2, 0xA0, 0x22, 0xF5, 0x20, | ||
516 | 0x02, 0xA0, 0x2A, 0x02, 0x0B, 0x2F, 0x91, 0x00, 0xE4, 0x7E, | ||
517 | 0x68, 0xE5, 0x2B, 0x1F, 0x44, 0x00, 0x20, 0x02, 0x00, 0x20, | ||
518 | 0x02, 0x2F, 0x82, 0x00, 0x2C, 0x02, 0xA0, 0x2C, 0x02, 0xF7, | ||
519 | 0x20, 0x02, 0xA0, 0xC2, 0x02, 0x00, 0x22, 0xF8, 0x20, 0x02, | ||
520 | 0x00, 0x20, 0x02, 0x2A, 0x02, 0xFA, 0x20, 0x02, 0x02, 0xA0, | ||
521 | 0x20, 0x02, 0x20, 0x2A, 0x02, 0xFA, 0x20, 0x02, 0xA0, 0x2A, | ||
522 | 0x02, 0x02, 0xE2, 0x02, 0x02, 0xFC, 0x10, 0x02, 0xC0, 0x2A, | ||
523 | 0x02, 0x02, 0x02, 0xE2, 0x02, 0x02, 0xFC, 0x10, 0x02, 0xC0, | ||
524 | 0x2A, 0x02, 0x02, 0xA0, 0x20, 0x2F, 0x42, 0x00, 0x2C, 0x02, | ||
525 | 0xC0, 0x2C, 0x02, 0x02, 0xF4, 0x20, 0x02, 0xA0, 0xC2, 0x02, | ||
526 | 0xA0, 0x2F, 0x81, 0x00, 0xE4, 0x7E, 0x58, 0xE6, 0x2B, 0x1F, | ||
527 | 0x44, 0x00, 0x20, 0x02, 0x00, 0x2A, 0x02, 0xF8, 0x20, 0x02, | ||
528 | 0xA0, 0x20, 0x2A, 0x02, 0xC0, 0x2F, 0x72, 0x00, 0x2A, 0x02, | ||
529 | 0xA0, 0x20, 0x2A, 0x02, 0xF8, 0x20, 0x02, 0x00, 0x2A, 0x02, | ||
530 | 0xA0, 0x2F, 0xA2, 0x00, 0x20, 0x02, 0x00, 0x2A, 0x02, 0x02, | ||
531 | 0x00, 0x2F, 0xB2, 0x00, 0x2A, 0x02, 0xA0, 0x20, 0x02, 0xD0, | ||
532 | 0xB2, 0xFD, 0x10, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0x02, 0x00, | ||
533 | 0x2D, 0x0B, 0x2F, 0xD1, 0x00, 0x2A, 0x02, 0x02, 0xA0, 0x20, | ||
534 | 0x20, 0x02, 0x00, 0x2F, 0x42, 0x00, 0x2C, 0x02, 0xC0, 0x2C, | ||
535 | 0x02, 0x00, 0x2F, 0x32, 0x00, 0x2A, 0x02, 0xA0, 0x20, 0x2A, | ||
536 | 0x02, 0xF8, 0x10, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xB1, 0xF0, | ||
537 | 0x40, 0x0B, 0x20, 0x0A, 0x20, 0x2A, 0x02, 0xF9, 0x20, 0x0A, | ||
538 | 0x2A, 0x0A, 0x20, 0x0B, 0x2F, 0x82, 0x00, 0x2A, 0x02, 0xA0, | ||
539 | 0x20, 0x2A, 0x02, 0xF7, 0x20, 0x0A, 0x20, 0x2A, 0x02, 0xA0, | ||
540 | 0x2F, 0xA2, 0x00, 0x2A, 0x02, 0x02, 0xA0, 0x20, 0xA2, 0xF8, | ||
541 | 0x20, 0x0B, 0x2B, 0x02, 0xA0, 0x2A, 0x02, 0xE0, 0x02, 0xFF, | ||
542 | 0x10, 0x0A, 0x20, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0xE0, 0x02, | ||
543 | 0xFF, 0x10, 0x0A, 0x2A, 0x0A, 0x20, 0x0A, 0x2A, 0x0C, 0x2F, | ||
544 | 0x02, 0x00, 0x2C, 0x0C, 0x20, 0xC2, 0x02, 0xA0, 0x2F, 0x22, | ||
545 | 0x00, 0x2A, 0x02, 0xA0, 0x20, 0xB2, 0xF8, 0x10, 0x0E, 0x47, | ||
546 | 0xE6, 0x8E, 0x52, 0xC1, 0xF7, 0x52, 0x0E, 0x47, 0xE6, 0x8E, | ||
547 | 0x52, 0xC1, 0xF7, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xC1, | ||
548 | 0xF7, 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xC1, 0xF0, 0x40, | ||
549 | 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, | ||
550 | 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, | ||
551 | 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, | ||
552 | 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0x0E, | ||
553 | 0x47, 0xE6, 0x8E, 0x52, 0xD1, 0xF0, 0x40, 0x0F, 0x62, 0x05, | ||
554 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
555 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
556 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
557 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
558 | 0x54, 0xE4, 0x7E, 0x68, 0xE5, 0x2D, 0x1F, 0x04, 0x00, 0xF6, | ||
559 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
560 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
561 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
562 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
563 | 0x62, 0x05, 0x4E, 0x47, 0xE5, 0x8E, 0x62, 0xD1, 0xF0, 0x40, | ||
564 | 0x0D, 0x5C, 0x9E, 0x45, 0x7E, 0x85, 0x4E, 0x90, 0xC5, 0x99, | ||
565 | 0xA5, 0x99, 0xE5, 0x57, 0x57, 0xE4, 0x54, 0xE9, 0x0C, 0x5E, | ||
566 | 0x09, 0xD5, 0x7E, 0xC5, 0x4E, 0x90, 0xB5, 0xD9, 0xE8, 0x57, | ||
567 | 0xE5, 0x54, 0xE9, 0x0D, 0x5D, 0x9E, 0x35, 0x7E, 0x85, 0x4E, | ||
568 | 0x90, 0xD5, 0x99, 0x55, 0x99, 0xE1, 0x57, 0xA5, 0x7A, 0x57, | ||
569 | 0x5A, 0x7C, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x65, | ||
570 | 0xA7, 0x55, 0xB7, 0xC5, 0x4E, 0x90, 0xD5, 0xD9, 0xE5, 0x57, | ||
571 | 0xA5, 0xC7, 0xC5, 0x4E, 0x90, 0xD5, 0xC9, 0xFB, 0x10, 0x54, | ||
572 | 0xE9, 0x0C, 0x5D, 0x9F, 0xB1, 0x05, 0x4E, 0x37, 0xE6, 0x8E, | ||
573 | 0x62, 0xD1, 0xF0, 0x40, 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x25, | ||
574 | 0x7E, 0x95, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE4, 0x57, | ||
575 | 0xA5, 0x7E, 0x35, 0x4E, 0x90, 0xC5, 0x99, 0xE5, 0x57, 0xEB, | ||
576 | 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x65, 0x7E, 0x65, | ||
577 | 0x4E, 0x90, 0xE1, 0x59, 0x9E, 0x65, 0x7E, 0x75, 0x4E, 0x90, | ||
578 | 0xD5, 0x99, 0x55, 0x99, 0xE0, 0x57, 0x57, 0x55, 0x77, 0x55, | ||
579 | 0x75, 0x75, 0x57, 0xB5, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, | ||
580 | 0xE5, 0x57, 0xA5, 0x75, 0x7A, 0x57, 0xB5, 0x4E, 0x90, 0xE1, | ||
581 | 0x59, 0x9E, 0x65, 0x75, 0x7B, 0x57, 0xE0, 0x54, 0xE9, 0x0C, | ||
582 | 0x59, 0x9A, 0x59, 0x9E, 0x85, 0x77, 0xE2, 0x54, 0xE9, 0x0C, | ||
583 | 0x59, 0x9A, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x37, 0xE6, 0x8E, | ||
584 | 0x52, 0xE0, 0x1F, 0x04, 0x00, 0xC5, 0x99, 0xA5, 0x99, 0xE1, | ||
585 | 0x57, 0xA5, 0xC7, 0xE2, 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x95, | ||
586 | 0x99, 0xE3, 0x57, 0xC5, 0x7E, 0x25, 0x4E, 0x90, 0xC5, 0x99, | ||
587 | 0xE6, 0x57, 0x55, 0xC7, 0xE3, 0x54, 0xE9, 0x0B, 0x59, 0x9A, | ||
588 | 0x59, 0x9E, 0x55, 0x7E, 0x75, 0x4E, 0x90, 0xE1, 0x59, 0x9E, | ||
589 | 0x75, 0x7E, 0x65, 0x4E, 0x90, 0xD5, 0x99, 0x55, 0x99, 0xD5, | ||
590 | 0x7A, 0x57, 0x57, 0x57, 0x57, 0x57, 0xA5, 0x7A, 0x54, 0xE9, | ||
591 | 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x55, 0x7A, 0x57, 0x57, 0xA5, | ||
592 | 0x7B, 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xE5, 0x57, 0xA5, 0x7A, | ||
593 | 0x57, 0xE0, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x85, | ||
594 | 0x77, 0xE2, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9F, 0xA1, | ||
595 | 0x05, 0x4E, 0x37, 0xE5, 0x8E, 0x62, 0xE0, 0x1F, 0x04, 0x00, | ||
596 | 0xC5, 0x99, 0xA5, 0x99, 0xE0, 0x57, 0xEB, 0x54, 0xE9, 0x0C, | ||
597 | 0x59, 0x95, 0x95, 0x99, 0xE2, 0x57, 0xE0, 0x57, 0xE1, 0x54, | ||
598 | 0xE9, 0x0C, 0x59, 0x9E, 0x75, 0x7E, 0x95, 0x4E, 0x90, 0xB5, | ||
599 | 0x99, 0xA5, 0x99, 0xE4, 0x57, 0xE8, 0x54, 0xE9, 0x0E, 0x15, | ||
600 | 0x99, 0xE8, 0x57, 0xE5, 0x54, 0xE9, 0x0D, 0x59, 0x95, 0x59, | ||
601 | 0x9D, 0x57, 0xA5, 0x75, 0x75, 0x75, 0x75, 0x7A, 0x57, 0xA5, | ||
602 | 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE5, 0x57, 0xA5, 0x75, | ||
603 | 0xB7, 0xC5, 0x4E, 0x90, 0xE1, 0x59, 0x9E, 0x55, 0x7A, 0x57, | ||
604 | 0xA5, 0x7E, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xFA, | ||
605 | 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0xA5, 0x75, | ||
606 | 0x7D, 0x54, 0xE2, 0x7E, 0x68, 0xE6, 0x2E, 0x01, 0xF0, 0x40, | ||
607 | 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x15, 0x7E, 0xA5, 0x4E, 0x90, | ||
608 | 0xC5, 0x99, 0x59, 0x59, 0x9E, 0x35, 0x7C, 0x57, 0xE2, 0x54, | ||
609 | 0xE9, 0x0C, 0x5C, 0x9E, 0x35, 0x7E, 0xA5, 0x4E, 0x90, 0xB5, | ||
610 | 0xD9, 0xE6, 0x57, 0xE7, 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xE7, | ||
611 | 0x57, 0xE6, 0x54, 0xE9, 0x0E, 0x05, 0xB9, 0xE0, 0x5C, 0x75, | ||
612 | 0x75, 0x57, 0x75, 0x7A, 0x57, 0xA5, 0x4E, 0x90, 0xB5, 0x99, | ||
613 | 0xA5, 0x99, 0xE5, 0x57, 0xA5, 0x75, 0x75, 0x7D, 0x54, 0xE9, | ||
614 | 0x0E, 0x15, 0x99, 0xE5, 0x5C, 0x7A, 0x57, 0xE0, 0x54, 0xE9, | ||
615 | 0x0C, 0x59, 0x9A, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xC5, | ||
616 | 0xD9, 0xEB, 0x57, 0x57, 0xD5, 0x4E, 0x27, 0xE6, 0x8E, 0x52, | ||
617 | 0xE1, 0x1F, 0x04, 0x00, 0xC5, 0x99, 0xA5, 0x99, 0xE2, 0x57, | ||
618 | 0x55, 0xC7, 0xE2, 0x54, 0xE9, 0x0C, 0x5E, 0x09, 0xE4, 0x57, | ||
619 | 0xA5, 0x7E, 0x35, 0x4E, 0x90, 0xC5, 0x99, 0xE5, 0x57, 0xA5, | ||
620 | 0xC7, 0xE3, 0x54, 0xE9, 0x0B, 0x59, 0x95, 0x99, 0xE8, 0x57, | ||
621 | 0xE6, 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xE6, 0x57, 0xE7, 0x54, | ||
622 | 0xE9, 0x0E, 0x15, 0x99, 0xE1, 0x57, 0xA5, 0x75, 0x7A, 0x57, | ||
623 | 0x57, 0x55, 0x7B, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, | ||
624 | 0x55, 0x7A, 0x57, 0x57, 0x55, 0x7C, 0x54, 0xE9, 0x0E, 0x15, | ||
625 | 0x99, 0xE5, 0x57, 0xA5, 0x7A, 0x57, 0xE0, 0x54, 0xE9, 0x0C, | ||
626 | 0x59, 0x9A, 0x59, 0x9E, 0x85, 0x77, 0xE2, 0x54, 0xE9, 0x0C, | ||
627 | 0x59, 0x9F, 0xF1, 0x05, 0x4E, 0x27, 0xE6, 0x8E, 0x52, 0xE1, | ||
628 | 0x1F, 0x04, 0x00, 0xC5, 0x99, 0xA5, 0x99, 0xE3, 0x57, 0xE8, | ||
629 | 0x54, 0xE9, 0x0C, 0x5E, 0x09, 0xE5, 0x57, 0x57, 0xE4, 0x54, | ||
630 | 0xE9, 0x0C, 0x59, 0x9E, 0x45, 0x7E, 0xC5, 0x4E, 0x90, 0xB5, | ||
631 | 0x99, 0x55, 0x99, 0xE8, 0x57, 0xE5, 0x54, 0xE9, 0x0E, 0x15, | ||
632 | 0x99, 0xE5, 0x57, 0xE8, 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xE1, | ||
633 | 0x57, 0xA5, 0x75, 0x7A, 0x57, 0x5A, 0x7C, 0x54, 0xE9, 0x0B, | ||
634 | 0x59, 0x9A, 0x59, 0x9E, 0x65, 0xA7, 0x55, 0x7A, 0x57, 0xB5, | ||
635 | 0x4E, 0x90, 0xE1, 0x59, 0x9E, 0x55, 0x7A, 0x57, 0xA5, 0x7E, | ||
636 | 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE9, 0x57, 0xE2, | ||
637 | 0x54, 0xE9, 0x0C, 0x59, 0x9F, 0xF1, 0x05, 0x4E, 0x27, 0xE5, | ||
638 | 0x8E, 0x62, 0xE1, 0x1F, 0x04, 0x00, 0xC5, 0xB9, 0x59, 0x9F, | ||
639 | 0xA1, 0x05, 0x4E, 0x90, 0xD5, 0xC9, 0xFB, 0x10, 0x54, 0xE9, | ||
640 | 0x0C, 0x59, 0x9F, 0xF1, 0x05, 0x4E, 0x90, 0xB5, 0x99, 0x55, | ||
641 | 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xFC, 0x10, | ||
642 | 0x54, 0xE9, 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0B, | ||
643 | 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xE1, 0x59, | ||
644 | 0x9F, 0xC1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE8, | ||
645 | 0x57, 0xE3, 0x54, 0xE9, 0x0C, 0x59, 0x9F, 0xF1, 0x05, 0x4E, | ||
646 | 0x17, 0xE6, 0x8E, 0x62, 0xE1, 0x1F, 0x04, 0x00, 0xC5, 0x99, | ||
647 | 0x5B, 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0x59, 0x9F, | ||
648 | 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xFF, 0x10, 0x54, 0xE9, | ||
649 | 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xE1, | ||
650 | 0x59, 0x9F, 0xC1, 0x05, 0x4E, 0x90, 0xE1, 0x59, 0x9F, 0xC1, | ||
651 | 0x05, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, | ||
652 | 0xE9, 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0C, 0x59, | ||
653 | 0x9A, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xFF, | ||
654 | 0x10, 0x54, 0xE1, 0x7E, 0x68, 0xE5, 0x2E, 0x21, 0xF0, 0x40, | ||
655 | 0x0D, 0x5C, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0x59, | ||
656 | 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0xE0, 0x9F, 0xA1, 0x05, | ||
657 | 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, | ||
658 | 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0E, 0x15, 0x99, | ||
659 | 0xFC, 0x10, 0x54, 0xE9, 0x0C, 0x5C, 0x9F, 0xC1, 0x05, 0x4E, | ||
660 | 0x90, 0xD5, 0xD9, 0xFA, 0x10, 0x54, 0xE9, 0x0D, 0x5C, 0x9F, | ||
661 | 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xFF, 0x10, 0x54, 0xE1, | ||
662 | 0x7E, 0x68, 0xE5, 0x2E, 0x21, 0xF0, 0x40, 0x0E, 0x35, 0x99, | ||
663 | 0xFA, 0x10, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
664 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
665 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
666 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
667 | 0x0F, 0x62, 0x05, 0x4E, 0x17, 0xE5, 0x8E, 0x62, 0xE2, 0x1F, | ||
668 | 0x04, 0x00, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
669 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
670 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
671 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
672 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x07, 0xE6, 0x8E, 0x62, | ||
673 | 0xE2, 0x1F, 0x04, 0x00, 0xE3, 0x5B, 0x95, 0x59, 0xD5, 0xA9, | ||
674 | 0x55, 0xC9, 0xC5, 0x4E, 0x90, 0xE2, 0x5A, 0x9A, 0x5B, 0x9B, | ||
675 | 0x59, 0xA5, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE9, 0x5B, 0x95, | ||
676 | 0x5C, 0x95, 0x9A, 0x59, 0xC5, 0x4E, 0x90, 0xE9, 0x5B, 0x95, | ||
677 | 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xC5, 0x4E, 0x90, 0xE4, 0x5B, | ||
678 | 0x9B, 0x59, 0xA5, 0x9A, 0x59, 0x5A, 0x9D, 0x54, 0xE9, 0x05, | ||
679 | 0x5B, 0x95, 0x5C, 0x95, 0xC9, 0x59, 0xA5, 0x95, 0xB9, 0x55, | ||
680 | 0x9A, 0x59, 0x54, 0xE9, 0x0F, 0x91, 0x05, 0xA9, 0x5C, 0x9B, | ||
681 | 0x54, 0xE9, 0x0E, 0x05, 0xA9, 0x59, 0xA5, 0x95, 0xB9, 0x55, | ||
682 | 0x9A, 0x59, 0x5C, 0x9B, 0x54, 0xE9, 0x0E, 0x35, 0xB9, 0xA5, | ||
683 | 0xA9, 0x55, 0x9A, 0x59, 0x5C, 0x9C, 0x54, 0xE9, 0x0E, 0x25, | ||
684 | 0xB9, 0x55, 0xB9, 0x55, 0xA9, 0x59, 0xA5, 0x95, 0xC9, 0x55, | ||
685 | 0x4E, 0x07, 0xE6, 0x8E, 0x52, 0xE3, 0x1F, 0x04, 0x00, 0xE3, | ||
686 | 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xE0, 0x54, | ||
687 | 0xE9, 0x0E, 0x25, 0x95, 0x59, 0x55, 0x9A, 0x59, 0x55, 0x95, | ||
688 | 0x95, 0x59, 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x95, 0x9A, 0x59, | ||
689 | 0x59, 0xC5, 0x99, 0x59, 0x9C, 0x54, 0xE9, 0x0E, 0x95, 0x9A, | ||
690 | 0x59, 0x59, 0xA5, 0x95, 0x99, 0x55, 0x9C, 0x54, 0xE9, 0x0E, | ||
691 | 0x45, 0x9A, 0x59, 0x55, 0x95, 0x95, 0x59, 0x95, 0x59, 0x59, | ||
692 | 0x55, 0x9C, 0x54, 0xE9, 0x05, 0x59, 0xA5, 0x95, 0x9E, 0x05, | ||
693 | 0x9A, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0x95, 0x59, 0x54, | ||
694 | 0xE9, 0x0F, 0xA1, 0x05, 0x95, 0x59, 0xE1, 0x54, 0xE9, 0x0E, | ||
695 | 0x15, 0x95, 0x59, 0x95, 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, | ||
696 | 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x35, 0x9A, 0x59, 0x59, 0xA5, | ||
697 | 0x95, 0x95, 0x59, 0x55, 0x9E, 0x25, 0x4E, 0x90, 0xE2, 0x59, | ||
698 | 0xA5, 0x95, 0x9A, 0x59, 0x55, 0x95, 0x59, 0x95, 0x59, 0xA5, | ||
699 | 0x9B, 0x54, 0xE0, 0x7E, 0x58, 0xE6, 0x2E, 0x31, 0xF0, 0x40, | ||
700 | 0x0E, 0x35, 0x9A, 0x59, 0x59, 0xC5, 0x9A, 0x59, 0xA5, 0x9E, | ||
701 | 0x05, 0x4E, 0x90, 0xE2, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, | ||
702 | 0xA5, 0x95, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE9, 0x59, 0xA5, | ||
703 | 0x95, 0x9C, 0x59, 0x59, 0x59, 0xC5, 0x4E, 0x90, 0xE9, 0x59, | ||
704 | 0xA5, 0x95, 0x9A, 0x59, 0x59, 0x59, 0x59, 0xC5, 0x4E, 0x90, | ||
705 | 0xE4, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0x59, 0x59, 0x59, | ||
706 | 0xA5, 0x9B, 0x54, 0xE9, 0x05, 0x59, 0xA5, 0x95, 0x9E, 0x05, | ||
707 | 0x9A, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0x59, 0x59, 0x54, | ||
708 | 0xE9, 0x0F, 0xA1, 0x05, 0x95, 0x59, 0xE1, 0x54, 0xE9, 0x0E, | ||
709 | 0x15, 0x95, 0x59, 0x59, 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, | ||
710 | 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x35, 0x9A, 0x59, 0x59, 0xA5, | ||
711 | 0x95, 0x95, 0x9A, 0x59, 0xE2, 0x54, 0xE9, 0x0E, 0x25, 0x9A, | ||
712 | 0x59, 0x59, 0xA5, 0x95, 0x59, 0x55, 0x95, 0x95, 0x9A, 0x59, | ||
713 | 0xB5, 0x4D, 0x7E, 0x68, 0xE6, 0x2E, 0x31, 0xF0, 0x40, 0x0E, | ||
714 | 0x35, 0xB9, 0x55, 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xE0, 0x54, | ||
715 | 0xE9, 0x0E, 0x25, 0x9A, 0x59, 0x5B, 0x95, 0x59, 0xA5, 0x95, | ||
716 | 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE9, 0x5B, 0x95, 0x5A, 0x9A, | ||
717 | 0x59, 0x59, 0x59, 0xC5, 0x4E, 0x90, 0xE9, 0x5B, 0x95, 0x59, | ||
718 | 0xA5, 0x95, 0x95, 0x95, 0x9C, 0x54, 0xE9, 0x0E, 0x45, 0xB9, | ||
719 | 0x55, 0x9A, 0x59, 0x59, 0x59, 0x59, 0x59, 0xA5, 0x9B, 0x54, | ||
720 | 0xE9, 0x05, 0x5B, 0x95, 0x5A, 0x9C, 0x59, 0xA5, 0x9A, 0x59, | ||
721 | 0x5B, 0x95, 0x59, 0x59, 0x59, 0x54, 0xE9, 0x0F, 0xA1, 0x05, | ||
722 | 0x95, 0x5A, 0x9D, 0x54, 0xE9, 0x0E, 0x15, 0x95, 0x59, 0x59, | ||
723 | 0x59, 0x5B, 0x95, 0x59, 0xA5, 0x9A, 0x59, 0xD5, 0x4E, 0x90, | ||
724 | 0xE3, 0x5B, 0x95, 0x59, 0xA5, 0x95, 0x99, 0xB5, 0xA9, 0xE0, | ||
725 | 0x54, 0xE9, 0x0E, 0x25, 0xB9, 0x55, 0xB9, 0xA5, 0x95, 0x59, | ||
726 | 0x59, 0x59, 0xA5, 0x9B, 0x54, 0xD7, 0xE6, 0x8E, 0x52, 0xE4, | ||
727 | 0x1F, 0x04, 0x00, 0xE3, 0x59, 0xC5, 0x9C, 0x59, 0xA5, 0x9A, | ||
728 | 0x59, 0xE0, 0x54, 0xE9, 0x0E, 0x25, 0x9A, 0x59, 0x59, 0x59, | ||
729 | 0xA5, 0xC9, 0x59, 0x59, 0x59, 0xD5, 0x4E, 0x90, 0xE9, 0x59, | ||
730 | 0x59, 0xA5, 0x9C, 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x95, | ||
731 | 0x95, 0x9A, 0x59, 0xA5, 0x95, 0x95, 0x59, 0x9C, 0x54, 0xE9, | ||
732 | 0x0E, 0x45, 0x95, 0x9A, 0x5C, 0x95, 0x95, 0x59, 0x95, 0x9A, | ||
733 | 0x59, 0xB5, 0x4E, 0x90, 0x55, 0x95, 0x9A, 0x59, 0xE0, 0x59, | ||
734 | 0xA5, 0x9A, 0x59, 0x59, 0x59, 0xA5, 0x95, 0x59, 0x95, 0x4E, | ||
735 | 0x90, 0xFA, 0x10, 0x59, 0x55, 0x9E, 0x15, 0x4E, 0x90, 0xE1, | ||
736 | 0x59, 0x55, 0x95, 0x59, 0x95, 0x9C, 0x59, 0xA5, 0x9A, 0x59, | ||
737 | 0xD5, 0x4E, 0x90, 0xE3, 0x59, 0xC5, 0x9A, 0x59, 0x59, 0x59, | ||
738 | 0xA5, 0x9E, 0x25, 0x4E, 0x90, 0xE2, 0x59, 0xC5, 0x95, 0x9B, | ||
739 | 0x59, 0x55, 0x95, 0x59, 0x9A, 0x59, 0xB5, 0x4D, 0x7E, 0x68, | ||
740 | 0xE5, 0x2E, 0x41, 0xF0, 0x40, 0x0E, 0x35, 0x9C, 0x59, 0xC5, | ||
741 | 0x9A, 0x59, 0xA5, 0x9E, 0x05, 0x4E, 0x90, 0xE2, 0x59, 0x55, | ||
742 | 0x95, 0x59, 0x55, 0x95, 0x59, 0xA5, 0x95, 0x95, 0x95, 0x9D, | ||
743 | 0x54, 0xE9, 0x0E, 0x95, 0x95, 0x59, 0x55, 0x9C, 0x59, 0xA5, | ||
744 | 0x9C, 0x54, 0xE9, 0x0E, 0x95, 0x95, 0x59, 0x55, 0x9A, 0x59, | ||
745 | 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x45, 0x95, 0x59, 0x55, | ||
746 | 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x95, 0x59, 0xC5, 0x4E, 0x90, | ||
747 | 0x55, 0x95, 0x59, 0x55, 0x9E, 0x05, 0x9A, 0x59, 0xA5, 0x95, | ||
748 | 0x95, 0x59, 0x55, 0x9A, 0x59, 0x54, 0xE9, 0x0F, 0xA1, 0x05, | ||
749 | 0x95, 0x59, 0xE1, 0x54, 0xE9, 0x0E, 0x15, 0x95, 0x59, 0xA5, | ||
750 | 0x95, 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE3, | ||
751 | 0x59, 0xC5, 0x9A, 0x59, 0x59, 0x55, 0x95, 0x59, 0xE2, 0x54, | ||
752 | 0xE9, 0x0E, 0x25, 0x9C, 0x59, 0x55, 0x9A, 0x59, 0x55, 0x9A, | ||
753 | 0x59, 0xA5, 0x9B, 0x54, 0xD7, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, | ||
754 | 0x04, 0x00, 0xE3, 0x59, 0xC5, 0xC9, 0x55, 0xA9, 0xB5, 0x9E, | ||
755 | 0x05, 0x4E, 0x90, 0xE2, 0x5A, 0x9A, 0x59, 0xA5, 0x95, 0x9A, | ||
756 | 0x59, 0x55, 0x95, 0x9E, 0x05, 0x4E, 0x90, 0xE9, 0x59, 0xA5, | ||
757 | 0x95, 0xC9, 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x95, 0x9A, | ||
758 | 0x59, 0x55, 0xA9, 0x55, 0x9A, 0x59, 0xC5, 0x4E, 0x90, 0xE4, | ||
759 | 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0xA9, 0xD5, | ||
760 | 0x4E, 0x90, 0x55, 0x9A, 0x59, 0x5C, 0x9A, 0x59, 0xB5, 0xA9, | ||
761 | 0x55, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x4E, 0x90, 0xF9, 0x10, | ||
762 | 0x5A, 0x95, 0x9E, 0x15, 0x4E, 0x90, 0xE0, 0x5A, 0x95, 0x9A, | ||
763 | 0x59, 0x59, 0xD5, 0xA9, 0xB5, 0x9D, 0x54, 0xE9, 0x0E, 0x35, | ||
764 | 0x9D, 0x5A, 0x95, 0x59, 0xA5, 0x95, 0xC9, 0xC5, 0x4E, 0x90, | ||
765 | 0xE2, 0x59, 0xC5, 0x9A, 0x59, 0x5A, 0x95, 0x9A, 0x59, 0xA5, | ||
766 | 0x9B, 0x54, 0xC7, 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0x04, 0x00, | ||
767 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
768 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
769 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
770 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
771 | 0x0F, 0x62, 0x05, 0x4C, 0x7E, 0x68, 0xE5, 0x2E, 0x51, 0xF0, | ||
772 | 0x40, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
773 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
774 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
775 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
776 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xC7, 0xE5, 0x8E, 0x62, 0xE4, | ||
777 | 0x1F, 0x24, 0x00, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, 0x20, 0x4E, | ||
778 | 0xA0, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, | ||
779 | 0x20, 0x4E, 0xA0, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, 0x20, 0x4E, | ||
780 | 0xA0, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, 0x20, 0x4E, 0xA0, 0xF6, | ||
781 | 0x20, 0x4C, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, | ||
782 | 0x37, 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0x05, 0x20, 0xE4, 0x7E, | ||
783 | 0x68, 0xE5, 0x2E, 0x51, 0xF3, 0x40, 0x07, 0xB0, 0xB7, 0x07, | ||
784 | 0xA0, 0x7F, 0x82, 0x00, 0x7B, 0x0A, 0x7A, 0x0B, 0x7F, 0x82, | ||
785 | 0x00, 0x7A, 0x0C, 0x70, 0x7A, 0x07, 0xF6, 0x20, 0x07, 0xA0, | ||
786 | 0x70, 0xC7, 0x0B, 0x70, 0x0A, 0x70, 0xC7, 0x07, 0xA0, 0x7E, | ||
787 | 0xF0, 0x7A, 0x07, 0x0C, 0x70, 0xB7, 0xA0, 0xA7, 0x00, 0xC7, | ||
788 | 0xFA, 0x10, 0x0A, 0x7F, 0x43, 0x00, 0xA7, 0xF5, 0x30, 0x0A, | ||
789 | 0x70, 0x7A, 0x07, 0xFE, 0x20, 0x0A, 0x70, 0x07, 0xA0, 0x70, | ||
790 | 0xC7, 0xF9, 0x20, 0x0B, 0x7F, 0x91, 0x00, 0xE4, 0x7E, 0x58, | ||
791 | 0xE6, 0x2E, 0x41, 0xF3, 0x40, 0x07, 0x07, 0x00, 0x7C, 0x07, | ||
792 | 0x70, 0x07, 0xF7, 0x20, 0x07, 0x07, 0x00, 0x7A, 0x07, 0x07, | ||
793 | 0xFB, 0x20, 0x07, 0x07, 0xB0, 0x7A, 0x07, 0x70, 0x07, 0xF6, | ||
794 | 0x20, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xA0, 0x70, 0x07, 0x00, | ||
795 | 0x7C, 0x07, 0xA0, 0x7E, 0xF0, 0x77, 0x07, 0x70, 0x7C, 0x07, | ||
796 | 0xA0, 0x70, 0x7A, 0x07, 0x07, 0xFE, 0x10, 0x07, 0xF8, 0x30, | ||
797 | 0x07, 0xF6, 0x30, 0x07, 0x00, 0x77, 0x00, 0x7F, 0xD2, 0x00, | ||
798 | 0x7A, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0xFA, 0x20, 0x07, 0xB0, | ||
799 | 0x7F, 0x81, 0x00, 0xE3, 0x7E, 0x68, 0xE6, 0x2E, 0x41, 0xF2, | ||
800 | 0x40, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0x07, 0x07, 0xF6, 0x20, | ||
801 | 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xFA, 0x20, 0x07, 0xA0, 0x7A, | ||
802 | 0x07, 0xA0, 0x70, 0x70, 0x7F, 0x62, 0x00, 0x7A, 0x07, 0x07, | ||
803 | 0xC0, 0x7A, 0x07, 0x00, 0x70, 0x07, 0xC0, 0x7A, 0x07, 0xEF, | ||
804 | 0x07, 0x07, 0x07, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0xC0, 0x7F, | ||
805 | 0xE1, 0x00, 0x7F, 0x83, 0x00, 0x7F, 0x63, 0x00, 0x70, 0x07, | ||
806 | 0x07, 0x07, 0xFD, 0x20, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0xA0, | ||
807 | 0x7F, 0x92, 0x00, 0x70, 0x07, 0x70, 0x07, 0xEF, 0x0E, 0x47, | ||
808 | 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0x24, 0x00, 0x7A, 0x07, 0x00, | ||
809 | 0xA7, 0x00, 0x70, 0x70, 0x7F, 0x62, 0x00, 0x7A, 0x07, 0x07, | ||
810 | 0xD0, 0xA7, 0xF7, 0x20, 0x07, 0xA0, 0x7A, 0x07, 0xA0, 0x70, | ||
811 | 0x70, 0x7F, 0x62, 0x00, 0x7A, 0x07, 0x0A, 0x7A, 0x0B, 0x7A, | ||
812 | 0x07, 0x00, 0xA7, 0xB0, 0xA7, 0xF7, 0x10, 0x07, 0x07, 0x07, | ||
813 | 0x0A, 0x7A, 0x0B, 0x70, 0x07, 0x0A, 0x70, 0xA7, 0xFC, 0x10, | ||
814 | 0x07, 0xF8, 0x30, 0x07, 0xF6, 0x30, 0x07, 0x00, 0x70, 0x70, | ||
815 | 0x7F, 0xD2, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0xF9, | ||
816 | 0x20, 0x07, 0x07, 0xB0, 0x7E, 0xF0, 0xE4, 0x7E, 0x68, 0xE5, | ||
817 | 0x2E, 0x41, 0xF3, 0x40, 0x0C, 0x7C, 0x07, 0x07, 0x00, 0x77, | ||
818 | 0xF6, 0x20, 0x0C, 0x70, 0x7E, 0x20, 0x7F, 0x62, 0x00, 0xC7, | ||
819 | 0xA0, 0x7A, 0x07, 0x00, 0x77, 0xF7, 0x20, 0x07, 0x07, 0x00, | ||
820 | 0x7C, 0x07, 0x07, 0xB0, 0x70, 0x07, 0xE0, 0x07, 0xF8, 0x10, | ||
821 | 0x07, 0xA0, 0x70, 0x7C, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0x07, | ||
822 | 0xFE, 0x10, 0x07, 0xF8, 0x30, 0x07, 0xF6, 0x30, 0x07, 0x00, | ||
823 | 0x70, 0x07, 0x7F, 0xD2, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x7A, | ||
824 | 0x07, 0xF9, 0x20, 0x07, 0x07, 0xB0, 0x7E, 0xF0, 0xE4, 0x7E, | ||
825 | 0x58, 0xE6, 0x2E, 0x41, 0xF3, 0x40, 0x07, 0xA0, 0x7C, 0x07, | ||
826 | 0x07, 0xA0, 0x7F, 0x62, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x7C, | ||
827 | 0x07, 0xF6, 0x20, 0x07, 0xA0, 0x7A, 0x07, 0xA0, 0x7A, 0x07, | ||
828 | 0xF7, 0x20, 0x07, 0x07, 0x00, 0x7C, 0x07, 0x00, 0x7A, 0x07, | ||
829 | 0x00, 0x7E, 0x00, 0x7F, 0x81, 0x00, 0x7A, 0x07, 0x07, 0xC0, | ||
830 | 0x70, 0x07, 0x00, 0x7A, 0x07, 0x07, 0xFE, 0x10, 0x07, 0xF8, | ||
831 | 0x30, 0x07, 0xF6, 0x30, 0x07, 0x00, 0x7A, 0x07, 0xFD, 0x20, | ||
832 | 0x07, 0xA0, 0x70, 0x7A, 0x07, 0xA0, 0x7F, 0x92, 0x00, 0x70, | ||
833 | 0x07, 0x70, 0x07, 0xEF, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xE4, | ||
834 | 0x1F, 0x34, 0x00, 0x7A, 0x07, 0x0B, 0x70, 0x07, 0xA0, 0x7F, | ||
835 | 0x62, 0x00, 0x7A, 0x07, 0x00, 0xA7, 0x00, 0xB7, 0xF7, 0x20, | ||
836 | 0x07, 0xA0, 0x7A, 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x20, 0x07, | ||
837 | 0xA0, 0xC7, 0x07, 0xA0, 0x70, 0xA7, 0x07, 0xE0, 0x07, 0xF8, | ||
838 | 0x10, 0x07, 0xA0, 0x70, 0xC7, 0x07, 0xA0, 0x70, 0x0B, 0x70, | ||
839 | 0xC7, 0xFA, 0x10, 0x0A, 0x7F, 0x43, 0x00, 0xA7, 0xF5, 0x30, | ||
840 | 0x0A, 0x70, 0x7A, 0x07, 0xFE, 0x20, 0x0A, 0x7A, 0x0A, 0x7B, | ||
841 | 0x07, 0xFA, 0x20, 0x07, 0xB0, 0x7E, 0xF0, 0xE4, 0x7E, 0x68, | ||
842 | 0xE5, 0x2E, 0x51, 0xF5, 0x32, 0x0B, 0x7F, 0x71, 0x00, 0xE4, | ||
843 | 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, | ||
844 | 0x8E, 0x62, 0xE4, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x68, 0xE5, | ||
845 | 0x2E, 0x51, 0xF0, 0x52, 0x0E, 0x47, 0xE6, 0x8E, 0x52, 0xE5, | ||
846 | 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
847 | 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0x05, 0x20, | ||
848 | 0xE4, 0x7E, 0x68, 0xE5, 0x2E, 0x51, 0xF0, 0x52, 0x0E, 0x47, | ||
849 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, | ||
850 | 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, | ||
851 | 0xE4, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x68, 0xE5, 0x2E, 0x51, | ||
852 | 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x35, | ||
853 | 0x00, 0xB2, 0x00, 0xC2, 0xA0, 0x2A, 0x0A, 0x2F, 0x22, 0x00, | ||
854 | 0xB2, 0x00, 0xC2, 0x00, 0xB2, 0x0C, 0x20, 0x0A, 0x20, 0x0B, | ||
855 | 0x20, 0x0C, 0x2E, 0x70, 0xA2, 0xC0, 0x2A, 0x0C, 0x2A, 0x02, | ||
856 | 0xF3, 0x20, 0x0B, 0x20, 0x0A, 0x20, 0x02, 0xA0, 0x2F, 0x82, | ||
857 | 0x00, 0x2A, 0x0B, 0x2A, 0x0B, 0x2F, 0x72, 0x00, 0xB2, 0x00, | ||
858 | 0xA2, 0x00, 0xB2, 0xF7, 0x20, 0x02, 0xA0, 0x2A, 0x02, 0xA0, | ||
859 | 0x2F, 0xA2, 0x00, 0x2C, 0x0C, 0x20, 0x2A, 0x02, 0xF6, 0x20, | ||
860 | 0x02, 0xA0, 0x20, 0x0B, 0x20, 0xB2, 0xF6, 0x30, 0x0E, 0x37, | ||
861 | 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0x35, 0x00, 0x2A, 0x02, 0x02, | ||
862 | 0xD0, 0x20, 0x20, 0x02, 0x00, 0x2F, 0x12, 0x00, 0x2A, 0x02, | ||
863 | 0x02, 0xC0, 0x2E, 0x00, 0x2A, 0x02, 0xA0, 0x20, 0x2A, 0x02, | ||
864 | 0x02, 0xEB, 0x02, 0x00, 0x2A, 0x02, 0x02, 0xB0, 0x2B, 0x02, | ||
865 | 0x02, 0xF1, 0x20, 0x02, 0xC0, 0x2A, 0x02, 0x02, 0x20, 0x02, | ||
866 | 0xF7, 0x20, 0x02, 0x02, 0x00, 0x2A, 0x02, 0x02, 0xFA, 0x20, | ||
867 | 0x02, 0xC0, 0x2A, 0x02, 0x02, 0xA0, 0x2F, 0x62, 0x00, 0x2A, | ||
868 | 0x02, 0x00, 0x20, 0x20, 0x02, 0xFA, 0x20, 0x02, 0xC0, 0x2C, | ||
869 | 0x02, 0x20, 0x02, 0xF6, 0x20, 0x02, 0xA0, 0x20, 0x2C, 0x02, | ||
870 | 0xA0, 0x2F, 0x43, 0x00, 0xE4, 0x7E, 0x68, 0xE5, 0x2E, 0x51, | ||
871 | 0xF3, 0x50, 0x02, 0xA0, 0x20, 0x2C, 0x02, 0xA0, 0x20, 0x2A, | ||
872 | 0x02, 0xF0, 0x20, 0x02, 0xA0, 0x20, 0x2C, 0x02, 0xE0, 0x02, | ||
873 | 0xA0, 0x2A, 0x02, 0x02, 0xA0, 0x20, 0x2E, 0xB0, 0x2A, 0x02, | ||
874 | 0x02, 0xA0, 0x2A, 0x02, 0xA0, 0x2A, 0x02, 0xF0, 0x20, 0x02, | ||
875 | 0xC0, 0x2C, 0x02, 0x02, 0x02, 0xF6, 0x20, 0x02, 0xA0, 0x20, | ||
876 | 0x2A, 0x02, 0x02, 0xFA, 0x20, 0x02, 0xC0, 0x2A, 0x02, 0x02, | ||
877 | 0xA0, 0x2F, 0x62, 0x00, 0x2A, 0x02, 0x02, 0xA0, 0x20, 0x2F, | ||
878 | 0xA2, 0x00, 0x2C, 0x02, 0xC0, 0x20, 0x20, 0x2F, 0x62, 0x00, | ||
879 | 0x2A, 0x02, 0x02, 0xC0, 0x2A, 0x02, 0xF4, 0x30, 0x0E, 0x47, | ||
880 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x45, 0x00, 0xB2, 0x00, 0xA2, | ||
881 | 0xA0, 0x2A, 0x02, 0x02, 0xA0, 0x2F, 0x02, 0x00, 0xB2, 0x00, | ||
882 | 0xA2, 0xB0, 0xA2, 0xB0, 0x2A, 0x02, 0xA0, 0x20, 0xB2, 0x00, | ||
883 | 0xA2, 0xE9, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0xA0, 0x2A, 0x02, | ||
884 | 0xA0, 0x2F, 0x12, 0x00, 0xA2, 0x00, 0x20, 0xA2, 0x02, 0x02, | ||
885 | 0x02, 0xF6, 0x20, 0x02, 0xA0, 0x20, 0xB2, 0xA0, 0xA2, 0xF8, | ||
886 | 0x20, 0x0A, 0x20, 0x02, 0xA0, 0x20, 0xB2, 0xF7, 0x20, 0x02, | ||
887 | 0xA0, 0x20, 0x2A, 0x02, 0x02, 0xFA, 0x20, 0x02, 0xC0, 0xA2, | ||
888 | 0xA0, 0x20, 0x20, 0x2F, 0x62, 0x00, 0x2A, 0x02, 0x00, 0xA2, | ||
889 | 0x00, 0xB2, 0xF5, 0x30, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, | ||
890 | 0x1F, 0x45, 0x00, 0x20, 0x2A, 0x02, 0xC0, 0xC2, 0x02, 0xA0, | ||
891 | 0x2F, 0x02, 0x00, 0x20, 0x2A, 0x02, 0xE2, 0x02, 0xA0, 0x2A, | ||
892 | 0x02, 0xA0, 0x20, 0x20, 0x2A, 0x02, 0xEB, 0x02, 0xA0, 0x20, | ||
893 | 0xC2, 0xA0, 0x2A, 0x0C, 0x2F, 0x42, 0x00, 0x20, 0x2A, 0x02, | ||
894 | 0x02, 0x00, 0x22, 0xF6, 0x20, 0x0C, 0x20, 0x2A, 0x02, 0xC0, | ||
895 | 0x2F, 0xA2, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x92, | ||
896 | 0x00, 0x20, 0x20, 0x0C, 0x20, 0x2F, 0xA2, 0x00, 0x2C, 0x02, | ||
897 | 0xC0, 0x20, 0x02, 0x2F, 0x62, 0x00, 0x2A, 0x02, 0xC0, 0x20, | ||
898 | 0x20, 0x2F, 0x63, 0x00, 0xE3, 0x7E, 0x68, 0xE6, 0x2E, 0x41, | ||
899 | 0xF4, 0x50, 0x02, 0x00, 0x20, 0x02, 0xC0, 0x2A, 0x02, 0x02, | ||
900 | 0x00, 0x2F, 0x12, 0x00, 0x20, 0x02, 0x00, 0x2E, 0x20, 0x2A, | ||
901 | 0x02, 0xA0, 0x2A, 0x02, 0x02, 0x00, 0x20, 0x02, 0xEB, 0x02, | ||
902 | 0x00, 0x20, 0x02, 0xA0, 0x2A, 0x02, 0xA0, 0x2A, 0x02, 0xF4, | ||
903 | 0x20, 0x02, 0x02, 0xA0, 0x20, 0x2A, 0x02, 0xF6, 0x20, 0x02, | ||
904 | 0xA0, 0x20, 0x2A, 0x02, 0xC0, 0x2F, 0xA2, 0x00, 0x20, 0x20, | ||
905 | 0x02, 0x00, 0x20, 0x02, 0xF8, 0x20, 0x02, 0x02, 0x00, 0x2A, | ||
906 | 0x02, 0x02, 0xFA, 0x20, 0x02, 0xC0, 0x2C, 0x02, 0xA0, 0x2F, | ||
907 | 0x62, 0x00, 0x2A, 0x02, 0xC0, 0x20, 0x20, 0x02, 0xF4, 0x30, | ||
908 | 0x0E, 0x47, 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0x45, 0x00, 0x2A, | ||
909 | 0x02, 0x0C, 0x20, 0x2A, 0x02, 0x0A, 0x2F, 0x22, 0x00, 0x2A, | ||
910 | 0x02, 0x0C, 0x20, 0xB2, 0xB0, 0x2B, 0x0A, 0x20, 0x02, 0xA0, | ||
911 | 0x20, 0xC2, 0xE7, 0x0A, 0x2A, 0x02, 0xA0, 0x2A, 0x02, 0xA0, | ||
912 | 0x2A, 0x02, 0xF0, 0x20, 0x0B, 0x2A, 0x0B, 0x20, 0x2A, 0x02, | ||
913 | 0xF6, 0x20, 0x02, 0xA0, 0x20, 0xB2, 0x00, 0xB2, 0xF7, 0x20, | ||
914 | 0x0B, 0x2A, 0x02, 0x20, 0x20, 0x2A, 0x02, 0xF8, 0x20, 0x02, | ||
915 | 0xA0, 0x2A, 0x02, 0x0C, 0x2F, 0x62, 0x00, 0xC2, 0x0C, 0x20, | ||
916 | 0x2A, 0x02, 0xF7, 0x20, 0x0A, 0x20, 0x0B, 0x20, 0x02, 0xA0, | ||
917 | 0x2F, 0x33, 0x00, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
918 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, | ||
919 | 0xE3, 0x7E, 0x68, 0xE6, 0x2E, 0x41, 0xF0, 0x52, 0x0E, 0x47, | ||
920 | 0xE5, 0x8E, 0x62, 0xE5, 0x1F, 0x55, 0x00, 0xF6, 0x20, 0x5E, | ||
921 | 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, | ||
922 | 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, | ||
923 | 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0xA0, 0xF6, | ||
924 | 0x20, 0x5E, 0xA0, 0xF6, 0x20, 0x5E, 0x32, 0xE4, 0x1F, 0x65, | ||
925 | 0x00, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
926 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
927 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
928 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
929 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x22, 0xE4, 0x1F, 0x65, 0x00, | ||
930 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
931 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
932 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
933 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
934 | 0x0F, 0x62, 0x05, 0x4E, 0x12, 0xE5, 0x1F, 0x65, 0x00, 0xD5, | ||
935 | 0xA9, 0xC5, 0xB7, 0x5C, 0x75, 0x5A, 0x75, 0x5B, 0x7A, 0x54, | ||
936 | 0xE9, 0x0C, 0x5C, 0x9E, 0x15, 0x7A, 0x57, 0x55, 0xA7, 0x55, | ||
937 | 0xC7, 0xA5, 0x4E, 0x90, 0xB5, 0xC9, 0xD5, 0xB7, 0x5C, 0x75, | ||
938 | 0xC7, 0x5B, 0x75, 0x54, 0xE9, 0x0B, 0x5E, 0x09, 0xE1, 0x5C, | ||
939 | 0x75, 0x5A, 0x7E, 0x25, 0x4E, 0x90, 0xE0, 0x5B, 0x9A, 0x5C, | ||
940 | 0x75, 0x7A, 0x57, 0x5C, 0x75, 0x7A, 0x57, 0x54, 0xE9, 0x0C, | ||
941 | 0x59, 0x9A, 0x59, 0x9E, 0x45, 0x7E, 0x75, 0x4E, 0x90, 0xE2, | ||
942 | 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, | ||
943 | 0xFA, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9F, 0xE1, 0x05, 0x4E, | ||
944 | 0x90, 0xF6, 0x20, 0x54, 0xE1, 0x2E, 0x41, 0xF7, 0x50, 0x0C, | ||
945 | 0x59, 0x95, 0x99, 0xA5, 0x7E, 0x05, 0x7A, 0x57, 0xA5, 0x75, | ||
946 | 0x7A, 0x57, 0x55, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE0, | ||
947 | 0x57, 0x75, 0x57, 0x57, 0xA5, 0x7A, 0x57, 0xC5, 0x4E, 0x90, | ||
948 | 0xB5, 0x99, 0x55, 0x99, 0xB5, 0x7E, 0x05, 0x7A, 0x57, 0xC5, | ||
949 | 0x7A, 0x57, 0x54, 0xE9, 0x0B, 0x59, 0x9E, 0x85, 0x7A, 0x57, | ||
950 | 0xA5, 0x7E, 0x15, 0x4E, 0x90, 0xD5, 0x99, 0x55, 0x99, 0xB5, | ||
951 | 0x7A, 0x57, 0xA5, 0x75, 0x7C, 0x57, 0x75, 0x57, 0x54, 0xE9, | ||
952 | 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x35, 0xA7, 0xE6, 0x54, 0xE9, | ||
953 | 0x0E, 0x25, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x9A, | ||
954 | 0x59, 0x9E, 0x55, 0x7E, 0x65, 0x4E, 0x90, 0xD5, 0x99, 0xFE, | ||
955 | 0x10, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x12, 0xE4, 0x1F, | ||
956 | 0x75, 0x00, 0xC5, 0x99, 0x59, 0x9A, 0x57, 0xE0, 0x57, 0xA5, | ||
957 | 0x7A, 0x57, 0x57, 0xA5, 0x75, 0x54, 0xE9, 0x0B, 0x59, 0x9E, | ||
958 | 0x55, 0x75, 0x75, 0x75, 0x7A, 0x57, 0xA5, 0x7C, 0x54, 0xE9, | ||
959 | 0x0B, 0x59, 0x9A, 0x59, 0x9A, 0x57, 0xE0, 0x57, 0xA5, 0x7C, | ||
960 | 0x57, 0xA5, 0x75, 0x4E, 0x90, 0xB5, 0x99, 0xE8, 0x57, 0xA5, | ||
961 | 0x7A, 0x57, 0xE1, 0x54, 0xE9, 0x0C, 0x59, 0x9E, 0x25, 0x7A, | ||
962 | 0x57, 0xA5, 0x75, 0x7C, 0x57, 0x57, 0x57, 0x54, 0xE9, 0x0C, | ||
963 | 0x59, 0x9A, 0x59, 0x9E, 0x25, 0x75, 0x75, 0x7E, 0x55, 0x4E, | ||
964 | 0x90, 0xE2, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0x99, | ||
965 | 0x55, 0x99, 0xE6, 0x57, 0xE6, 0x54, 0xE9, 0x0D, 0x59, 0x9E, | ||
966 | 0x65, 0xC7, 0xE5, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x12, | ||
967 | 0xE4, 0x1F, 0x75, 0x00, 0xB5, 0x99, 0xA5, 0x99, 0xA5, 0xA7, | ||
968 | 0xB5, 0x7A, 0x57, 0xA5, 0x75, 0xB7, 0xA5, 0x4E, 0x90, 0xB5, | ||
969 | 0x99, 0xE5, 0x57, 0x57, 0x57, 0x57, 0xA5, 0x7A, 0x57, 0xC5, | ||
970 | 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xB5, 0xA7, 0xB5, 0x7A, | ||
971 | 0x5A, 0x7A, 0x5B, 0x75, 0x54, 0xE9, 0x0B, 0x59, 0x9E, 0x85, | ||
972 | 0x7A, 0x57, 0xA5, 0x7E, 0x15, 0x4E, 0x90, 0xC5, 0x99, 0xE2, | ||
973 | 0x57, 0xA5, 0xC7, 0x5A, 0x7A, 0x57, 0x57, 0x57, 0x54, 0xE9, | ||
974 | 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x45, 0x7E, 0x75, 0x4E, 0x90, | ||
975 | 0xE2, 0x59, 0x9E, 0x25, 0xC7, 0xE6, 0x54, 0xE9, 0x0C, 0x59, | ||
976 | 0x95, 0x99, 0xE5, 0x5C, 0x7E, 0x45, 0x4E, 0x90, 0xD5, 0x99, | ||
977 | 0xFE, 0x10, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x02, 0xE5, | ||
978 | 0x1F, 0x75, 0x00, 0xB5, 0x99, 0xA5, 0x99, 0xD5, 0x7A, 0x57, | ||
979 | 0xA5, 0x7A, 0x57, 0x57, 0xD5, 0x4E, 0x90, 0xC5, 0xA9, 0xE3, | ||
980 | 0x57, 0x55, 0x77, 0x57, 0xA5, 0x7A, 0x57, 0xC5, 0x4E, 0x90, | ||
981 | 0xB5, 0x99, 0xA5, 0x99, 0xE0, 0x57, 0xA5, 0x7A, 0x57, 0xC5, | ||
982 | 0x7C, 0x54, 0xE9, 0x0B, 0x5C, 0x9E, 0x55, 0x7A, 0x57, 0xA5, | ||
983 | 0x7E, 0x15, 0x4E, 0x90, 0xC5, 0x99, 0xE2, 0x57, 0xA5, 0x7A, | ||
984 | 0x57, 0x57, 0xC5, 0x75, 0x57, 0x75, 0x4E, 0x90, 0xC5, 0xE0, | ||
985 | 0x9E, 0x45, 0x7E, 0x75, 0x4E, 0x90, 0xE2, 0x59, 0x9F, 0xB1, | ||
986 | 0x05, 0x4E, 0x90, 0xC5, 0xB9, 0xE8, 0x57, 0xE6, 0x54, 0xE9, | ||
987 | 0x0D, 0x59, 0x9F, 0xE1, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
988 | 0xE0, 0x2E, 0x41, 0xF8, 0x50, 0x0B, 0x59, 0x9A, 0x59, 0x9D, | ||
989 | 0x57, 0xA5, 0x7A, 0x57, 0xA5, 0x75, 0x7D, 0x54, 0xE9, 0x0E, | ||
990 | 0x05, 0xA9, 0xE1, 0x57, 0xA5, 0x75, 0x7A, 0x57, 0xA5, 0x7C, | ||
991 | 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x05, 0x7A, 0x57, | ||
992 | 0xA5, 0x7C, 0x57, 0xC5, 0x4E, 0x90, 0xB5, 0x99, 0xE8, 0x57, | ||
993 | 0xA5, 0x7A, 0x57, 0xE1, 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x5A, | ||
994 | 0x9B, 0x57, 0xA5, 0x7A, 0x57, 0x57, 0xC5, 0x7A, 0x57, 0x54, | ||
995 | 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9E, 0x45, 0x7E, 0x75, 0x4E, | ||
996 | 0x90, 0xE2, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, 0xB9, | ||
997 | 0xE8, 0x57, 0xE6, 0x54, 0xE9, 0x0D, 0x59, 0x9E, 0x65, 0xC7, | ||
998 | 0xE5, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x02, 0xE4, 0x1F, | ||
999 | 0x85, 0x00, 0xB5, 0xE0, 0x95, 0x5B, 0x7B, 0x57, 0xB5, 0xA7, | ||
1000 | 0x55, 0x7D, 0x54, 0xE9, 0x0E, 0x25, 0x99, 0xE0, 0x57, 0xA5, | ||
1001 | 0x75, 0x5A, 0x7B, 0x57, 0xC5, 0x4E, 0x90, 0xB5, 0x99, 0xA5, | ||
1002 | 0x99, 0xA5, 0xB7, 0xB5, 0x7A, 0x5C, 0x75, 0x7C, 0x54, 0xE9, | ||
1003 | 0x0B, 0x59, 0x9E, 0x85, 0x7B, 0x5A, 0x7E, 0x25, 0x4E, 0x90, | ||
1004 | 0xC5, 0x99, 0xA5, 0x99, 0xB5, 0x7A, 0x57, 0xA5, 0x75, 0xC7, | ||
1005 | 0x57, 0xA5, 0x75, 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE4, | ||
1006 | 0x57, 0xE7, 0x54, 0xE9, 0x0E, 0x25, 0x99, 0xFB, 0x10, 0x54, | ||
1007 | 0xE9, 0x0C, 0x59, 0x95, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0D, | ||
1008 | 0x59, 0x9F, 0xE1, 0x05, 0x4E, 0x90, 0xC5, 0xC9, 0x59, 0xA5, | ||
1009 | 0x95, 0xC9, 0x5C, 0x95, 0xB9, 0xC5, 0x4E, 0x02, 0xE4, 0x1F, | ||
1010 | 0x85, 0x00, 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, | ||
1011 | 0x0E, 0x25, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, | ||
1012 | 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xB5, 0x99, 0xF0, 0x20, | ||
1013 | 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9F, 0xA1, 0x05, 0x4E, | ||
1014 | 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xE4, 0x57, 0xE7, 0x54, 0xE9, | ||
1015 | 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, | ||
1016 | 0x99, 0x55, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9F, | ||
1017 | 0xE1, 0x05, 0x4E, 0x90, 0xC5, 0x9C, 0x59, 0x95, 0x59, 0xA5, | ||
1018 | 0x9A, 0x59, 0xC5, 0x9A, 0x59, 0xB5, 0x4D, 0x2E, 0x41, 0xF9, | ||
1019 | 0x50, 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, | ||
1020 | 0xB5, 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0B, 0x59, | ||
1021 | 0x95, 0x59, 0x9F, 0xC1, 0x05, 0x4E, 0x90, 0xB5, 0x99, 0xF0, | ||
1022 | 0x20, 0x54, 0xE9, 0x0D, 0x59, 0x95, 0x59, 0x9F, 0xA1, 0x05, | ||
1023 | 0x4E, 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, | ||
1024 | 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xC5, | ||
1025 | 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9F, | ||
1026 | 0xE1, 0x05, 0x4E, 0x90, 0xC5, 0x9C, 0x59, 0x59, 0x59, 0xA5, | ||
1027 | 0x9A, 0x59, 0xC5, 0x9A, 0x59, 0xB5, 0x4D, 0x2E, 0x41, 0xF9, | ||
1028 | 0x50, 0x0B, 0x59, 0x9A, 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, | ||
1029 | 0xC5, 0xC9, 0xFC, 0x10, 0x54, 0xE9, 0x0B, 0x5C, 0x9F, 0xD1, | ||
1030 | 0x05, 0x4E, 0x90, 0xB5, 0x99, 0xF0, 0x20, 0x54, 0xE9, 0x0E, | ||
1031 | 0x05, 0xC9, 0xFA, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, | ||
1032 | 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xC5, 0xC9, 0xFC, 0x10, 0x54, | ||
1033 | 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9F, 0xA1, 0x05, 0x4E, 0x90, | ||
1034 | 0xD5, 0xD9, 0xFA, 0x10, 0x54, 0xE9, 0x0C, 0x5A, 0x9A, 0x59, | ||
1035 | 0x59, 0x59, 0xA5, 0x9A, 0x5A, 0x9A, 0x5B, 0x9C, 0x54, 0xD2, | ||
1036 | 0xE4, 0x1F, 0x95, 0x00, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1037 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
1038 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
1039 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
1040 | 0xF6, 0x20, 0x54, 0xE9, 0x0C, 0x59, 0xC5, 0x95, 0x59, 0x9A, | ||
1041 | 0x59, 0xA5, 0x9C, 0x59, 0x59, 0xD5, 0x4C, 0x2E, 0x51, 0xF9, | ||
1042 | 0x50, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
1043 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
1044 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1045 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
1046 | 0x4E, 0x90, 0xC5, 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xA5, 0x9C, | ||
1047 | 0x59, 0x55, 0x9C, 0x54, 0xC2, 0xE4, 0x1F, 0xA5, 0x00, 0xE7, | ||
1048 | 0x59, 0xA5, 0x95, 0xC9, 0x59, 0xA5, 0x9E, 0x05, 0x4E, 0x90, | ||
1049 | 0xE5, 0x5B, 0x9A, 0x59, 0xA5, 0x9A, 0x59, 0x5C, 0x9B, 0x54, | ||
1050 | 0xE9, 0x0E, 0x95, 0xA9, 0xA5, 0xA9, 0x59, 0xA5, 0x9E, 0x05, | ||
1051 | 0x4E, 0x90, 0xE8, 0x5C, 0x95, 0x5A, 0x95, 0x5B, 0x9E, 0x05, | ||
1052 | 0x4E, 0x90, 0xE5, 0x5A, 0x9A, 0x5A, 0x95, 0x5C, 0x95, 0x5A, | ||
1053 | 0x9C, 0x54, 0xE9, 0x0C, 0x5A, 0x9A, 0x5A, 0x9A, 0x5B, 0x95, | ||
1054 | 0x9A, 0x59, 0x5B, 0x9D, 0x54, 0xE9, 0x0E, 0x45, 0x9D, 0x5A, | ||
1055 | 0x9B, 0x59, 0xA5, 0xA9, 0xD5, 0x4E, 0x90, 0xE3, 0x59, 0xC5, | ||
1056 | 0xA9, 0x55, 0xB9, 0x5C, 0x9E, 0x05, 0x4E, 0x90, 0xE7, 0x59, | ||
1057 | 0xC5, 0xC9, 0x5C, 0x9E, 0x05, 0x4E, 0x90, 0xC5, 0xC9, 0x59, | ||
1058 | 0xA5, 0x9A, 0x59, 0xA5, 0xC9, 0x59, 0xA5, 0x9B, 0x54, 0xC2, | ||
1059 | 0xE4, 0x1F, 0xA5, 0x00, 0xE7, 0x59, 0x95, 0x59, 0x59, 0xC5, | ||
1060 | 0x9A, 0x59, 0xE0, 0x54, 0xE9, 0x0E, 0x45, 0x9D, 0x59, 0x59, | ||
1061 | 0x55, 0x9A, 0x59, 0x59, 0xE1, 0x54, 0xE9, 0x0E, 0x95, 0x95, | ||
1062 | 0x59, 0xA5, 0x95, 0x59, 0x95, 0x99, 0xE0, 0x54, 0xE9, 0x0E, | ||
1063 | 0x85, 0x9C, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xD5, 0x4E, 0x90, | ||
1064 | 0xE4, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xA5, 0x9A, 0x59, 0xA5, | ||
1065 | 0x9B, 0x54, 0xE9, 0x0B, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, | ||
1066 | 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x45, | ||
1067 | 0x9C, 0x59, 0xA5, 0x95, 0x59, 0x59, 0x55, 0x95, 0x59, 0xC5, | ||
1068 | 0x4E, 0x90, 0xE3, 0x59, 0xD5, 0x95, 0x59, 0xE0, 0x59, 0xE2, | ||
1069 | 0x54, 0xE9, 0x0E, 0x75, 0x9C, 0x59, 0xE0, 0x59, 0xE2, 0x54, | ||
1070 | 0xE9, 0x0F, 0x62, 0x05, 0x4C, 0x2E, 0x41, 0xFA, 0x50, 0x0E, | ||
1071 | 0x75, 0x95, 0x95, 0x95, 0x9C, 0x59, 0xA5, 0x9E, 0x05, 0x4E, | ||
1072 | 0x90, 0xE4, 0x59, 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9E, | ||
1073 | 0x15, 0x4E, 0x90, 0xE9, 0x59, 0xA5, 0x95, 0x59, 0x55, 0x95, | ||
1074 | 0x95, 0x9E, 0x05, 0x4E, 0x90, 0xE8, 0x59, 0xC5, 0x9A, 0x59, | ||
1075 | 0x59, 0xA5, 0x9D, 0x54, 0xE9, 0x0E, 0x45, 0x9C, 0x59, 0xA5, | ||
1076 | 0x9A, 0x59, 0xA5, 0x9A, 0x59, 0xB5, 0x4E, 0x90, 0xB5, 0x9C, | ||
1077 | 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xC5, | ||
1078 | 0x4E, 0x90, 0xE4, 0x59, 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x95, | ||
1079 | 0x9A, 0x59, 0xB5, 0x4E, 0x90, 0xE3, 0x59, 0xD5, 0x95, 0x59, | ||
1080 | 0xE0, 0x59, 0xE2, 0x54, 0xE9, 0x0E, 0x75, 0x9C, 0x59, 0xE0, | ||
1081 | 0x59, 0xE2, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4B, 0x2E, 0x51, | ||
1082 | 0xFA, 0x50, 0x0E, 0x75, 0x95, 0x95, 0x95, 0xA9, 0xA5, 0x9A, | ||
1083 | 0x59, 0xE0, 0x54, 0xE9, 0x0E, 0x55, 0xA9, 0x55, 0x9A, 0x59, | ||
1084 | 0x59, 0xA5, 0x95, 0xA9, 0xD5, 0x4E, 0x90, 0xE9, 0x59, 0xA5, | ||
1085 | 0x95, 0x59, 0x55, 0x95, 0x95, 0x9E, 0x05, 0x4E, 0x90, 0xE8, | ||
1086 | 0x5A, 0x9A, 0x59, 0xA5, 0x95, 0xB9, 0xE0, 0x54, 0xE9, 0x0E, | ||
1087 | 0x45, 0x95, 0xA9, 0x59, 0xA5, 0x9A, 0x59, 0xA5, 0x9A, 0x59, | ||
1088 | 0xB5, 0x4E, 0x90, 0xB5, 0x95, 0xA9, 0x59, 0xA5, 0x95, 0x5A, | ||
1089 | 0x95, 0x59, 0xA5, 0x95, 0xB9, 0xD5, 0x4E, 0x90, 0xE4, 0x59, | ||
1090 | 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xB5, 0x4E, | ||
1091 | 0x90, 0xE3, 0x59, 0xD5, 0x9A, 0x5A, 0x9B, 0x59, 0xE2, 0x54, | ||
1092 | 0xE9, 0x0E, 0x75, 0x9C, 0x5A, 0x9C, 0x59, 0xE2, 0x54, 0xE9, | ||
1093 | 0x0F, 0x62, 0x05, 0x4B, 0x2E, 0x41, 0xFB, 0x50, 0x0E, 0x75, | ||
1094 | 0x95, 0x59, 0x95, 0x9C, 0x59, 0x59, 0x59, 0xE0, 0x54, 0xE9, | ||
1095 | 0x0E, 0x85, 0x95, 0xC9, 0x55, 0x95, 0x95, 0x59, 0xE1, 0x54, | ||
1096 | 0xE9, 0x0E, 0x95, 0x9A, 0x59, 0x55, 0x95, 0x59, 0xA5, 0x9E, | ||
1097 | 0x05, 0x4E, 0x90, 0xE8, 0x59, 0xC5, 0x9A, 0x59, 0x59, 0x59, | ||
1098 | 0xE1, 0x54, 0xE9, 0x0E, 0x45, 0x9A, 0x59, 0x59, 0xA5, 0x9A, | ||
1099 | 0x59, 0xA5, 0x9A, 0x59, 0xB5, 0x4E, 0x90, 0xB5, 0x9A, 0x59, | ||
1100 | 0x59, 0xA5, 0x9C, 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xC5, | ||
1101 | 0x4E, 0x90, 0xE4, 0x59, 0xC5, 0x9A, 0x59, 0x5C, 0x95, 0x9A, | ||
1102 | 0x59, 0xB5, 0x4E, 0x90, 0xE3, 0x59, 0xD5, 0x9D, 0x59, 0xA5, | ||
1103 | 0x9E, 0x25, 0x4E, 0x90, 0xE7, 0x59, 0xC5, 0x9E, 0x05, 0x9E, | ||
1104 | 0x25, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xB2, 0xE4, 0x1F, 0xB5, | ||
1105 | 0x00, 0xE7, 0x59, 0xA5, 0x95, 0x9C, 0x59, 0x59, 0x59, 0xE0, | ||
1106 | 0x54, 0xE9, 0x0E, 0x85, 0x95, 0x9A, 0x59, 0x55, 0x95, 0x95, | ||
1107 | 0x59, 0xE1, 0x54, 0xE9, 0x0E, 0x95, 0x95, 0x59, 0xA5, 0x95, | ||
1108 | 0x59, 0xA5, 0x9E, 0x05, 0x4E, 0x90, 0xE8, 0x59, 0xC5, 0x9A, | ||
1109 | 0x59, 0x59, 0x55, 0x9E, 0x05, 0x4E, 0x90, 0xE4, 0x59, 0xA5, | ||
1110 | 0x95, 0x9A, 0x59, 0xA5, 0x9A, 0x59, 0xA5, 0x9B, 0x54, 0xE9, | ||
1111 | 0x0B, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0xC5, 0x95, 0x9A, 0x59, | ||
1112 | 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x45, 0x9C, 0x59, 0xA5, | ||
1113 | 0x95, 0x9A, 0x59, 0x59, 0x55, 0x9C, 0x54, 0xE9, 0x0E, 0x35, | ||
1114 | 0x9D, 0x59, 0xD5, 0x9A, 0x59, 0xE2, 0x54, 0xE9, 0x0E, 0x75, | ||
1115 | 0x9C, 0x59, 0xE0, 0x59, 0xE2, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
1116 | 0x4B, 0x2E, 0x41, 0xFB, 0x50, 0x0E, 0x75, 0x9A, 0x59, 0x5C, | ||
1117 | 0x95, 0x59, 0x59, 0xE1, 0x54, 0xE9, 0x0E, 0x45, 0xB9, 0x55, | ||
1118 | 0x9A, 0x59, 0xA5, 0x9A, 0x5C, 0x9B, 0x54, 0xE9, 0x0E, 0x95, | ||
1119 | 0xA9, 0xA5, 0xA9, 0x59, 0xA5, 0x9E, 0x05, 0x4E, 0x90, 0xE8, | ||
1120 | 0x59, 0xD5, 0xA9, 0x55, 0x9A, 0x59, 0xD5, 0x4E, 0x90, 0xE5, | ||
1121 | 0x5B, 0x95, 0x5A, 0x9B, 0x59, 0xB5, 0xA9, 0xC5, 0x4E, 0x90, | ||
1122 | 0xC5, 0xB9, 0x55, 0xA9, 0x55, 0xB9, 0xA5, 0xA9, 0x55, 0xB9, | ||
1123 | 0xD5, 0x4E, 0x90, 0xE4, 0x5C, 0x95, 0x5A, 0x95, 0x59, 0xA5, | ||
1124 | 0x95, 0xA9, 0xD5, 0x4E, 0x90, 0xE3, 0x5C, 0x95, 0xA9, 0x5B, | ||
1125 | 0x9B, 0x59, 0xE2, 0x54, 0xE9, 0x0E, 0x75, 0xC9, 0x5C, 0x9A, | ||
1126 | 0x59, 0xE2, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4A, 0x2E, 0x41, | ||
1127 | 0xFC, 0x50, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
1128 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
1129 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
1130 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1131 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xA2, 0xE4, 0x1F, 0xC5, | ||
1132 | 0x00, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
1133 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
1134 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
1135 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
1136 | 0xE9, 0x0F, 0x62, 0x05, 0x4A, 0x2E, 0x41, 0xFD, 0x50, 0x0F, | ||
1137 | 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, | ||
1138 | 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, | ||
1139 | 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, | ||
1140 | 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0x22, 0xE5, | ||
1141 | 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1142 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x49, 0x00, | ||
1143 | 0x7F, 0x63, 0x00, 0x7F, 0x93, 0x00, 0x7F, 0x33, 0x00, 0x7F, | ||
1144 | 0x73, 0x00, 0xA7, 0x00, 0xA7, 0x0B, 0x7A, 0x0A, 0x70, 0x07, | ||
1145 | 0xC0, 0xC7, 0xEF, 0x07, 0xA0, 0x7A, 0x07, 0xA0, 0x7E, 0x40, | ||
1146 | 0x7F, 0xF1, 0x00, 0xB7, 0x00, 0xA7, 0x00, 0xB7, 0x00, 0xC7, | ||
1147 | 0x0C, 0x70, 0x7A, 0x07, 0xE0, 0x07, 0xE7, 0x07, 0xA0, 0xC7, | ||
1148 | 0x0C, 0x70, 0xB7, 0xF6, 0x20, 0x0E, 0x37, 0xE6, 0x8E, 0x62, | ||
1149 | 0xE4, 0x1F, 0xE5, 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x73, 0x00, | ||
1150 | 0x7F, 0x73, 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x53, 0x00, 0x7A, | ||
1151 | 0x07, 0x00, 0x70, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x07, 0xC0, | ||
1152 | 0x7F, 0xA1, 0x00, 0x7A, 0x07, 0x00, 0x70, 0x70, 0x07, 0xE3, | ||
1153 | 0x0B, 0x7F, 0xC1, 0x00, 0x7C, 0x07, 0xA0, 0x70, 0x7A, 0x07, | ||
1154 | 0x07, 0xC0, 0x7C, 0x07, 0x70, 0x07, 0xD0, 0xB7, 0xE4, 0x07, | ||
1155 | 0x07, 0xB0, 0x7C, 0x07, 0xA0, 0x7A, 0x07, 0xF4, 0x20, 0x0E, | ||
1156 | 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0xE5, 0x00, 0x70, 0x70, | ||
1157 | 0x7F, 0x23, 0x00, 0x7F, 0x73, 0x00, 0x7F, 0x73, 0x00, 0x7F, | ||
1158 | 0x53, 0x00, 0x7F, 0x53, 0x00, 0x7D, 0x07, 0x00, 0x7A, 0x07, | ||
1159 | 0x07, 0xC0, 0x7C, 0x07, 0xFA, 0x10, 0x07, 0xA0, 0x70, 0x7A, | ||
1160 | 0x07, 0x07, 0xE2, 0x07, 0x07, 0xFE, 0x10, 0x07, 0xC0, 0x7C, | ||
1161 | 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xC0, 0x70, 0x70, 0x7C, 0x07, | ||
1162 | 0x07, 0xE5, 0x07, 0xA0, 0x7A, 0x07, 0xC0, 0x7A, 0x07, 0xA0, | ||
1163 | 0x7F, 0x42, 0x00, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1164 | 0x60, 0x07, 0xF3, 0x30, 0x07, 0xF8, 0x30, 0x07, 0xF5, 0x30, | ||
1165 | 0x07, 0xF7, 0x30, 0x07, 0xF4, 0x30, 0x07, 0xD0, 0x70, 0x0B, | ||
1166 | 0x70, 0x07, 0xC0, 0x7C, 0x0A, 0x7F, 0x81, 0x00, 0x7A, 0x07, | ||
1167 | 0x07, 0xA0, 0x70, 0x7E, 0x30, 0xA7, 0xFE, 0x10, 0x0A, 0x70, | ||
1168 | 0x07, 0xC0, 0xB7, 0x00, 0xA7, 0xA0, 0xA7, 0xA0, 0x70, 0x70, | ||
1169 | 0x7D, 0x0A, 0x7E, 0x40, 0x7A, 0x07, 0xA0, 0x7C, 0x07, 0xA0, | ||
1170 | 0xB7, 0xF5, 0x20, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, | ||
1171 | 0x59, 0x00, 0x7F, 0x93, 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x53, | ||
1172 | 0x00, 0x7F, 0x53, 0x00, 0x7D, 0x07, 0x00, 0x70, 0x7A, 0x07, | ||
1173 | 0xC0, 0x7C, 0x07, 0xFB, 0x10, 0x07, 0x07, 0x00, 0xC7, 0x07, | ||
1174 | 0xE4, 0x07, 0x07, 0xF0, 0x20, 0x07, 0x07, 0xC0, 0x70, 0x7A, | ||
1175 | 0x07, 0xC0, 0x7C, 0x07, 0x00, 0x77, 0xE0, 0x07, 0x07, 0xE3, | ||
1176 | 0x0C, 0x7A, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0xF6, 0x20, 0x0E, | ||
1177 | 0x37, 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0x59, 0x00, 0x7F, 0x93, | ||
1178 | 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x53, 0x00, | ||
1179 | 0x7A, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0xA0, 0x70, | ||
1180 | 0x7C, 0x07, 0xFB, 0x10, 0x07, 0x07, 0x00, 0x7A, 0x07, 0x07, | ||
1181 | 0xE2, 0x0B, 0x7F, 0x12, 0x00, 0x70, 0x7A, 0x07, 0x07, 0x00, | ||
1182 | 0x70, 0x07, 0xC0, 0x7C, 0x07, 0xA0, 0x7C, 0x0B, 0x7E, 0x40, | ||
1183 | 0x7A, 0x07, 0xA0, 0x7C, 0x07, 0xA0, 0x70, 0x07, 0xF4, 0x20, | ||
1184 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x69, 0x00, 0x7F, | ||
1185 | 0xA3, 0x00, 0x7F, 0x53, 0x00, 0x7F, 0x33, 0x00, 0x7F, 0x73, | ||
1186 | 0x00, 0xA7, 0x00, 0xA7, 0x07, 0xA0, 0x70, 0x0A, 0x70, 0x0C, | ||
1187 | 0x70, 0xC7, 0xF8, 0x10, 0x07, 0xA0, 0x7A, 0x07, 0x0C, 0x7E, | ||
1188 | 0x00, 0x7F, 0xE1, 0x00, 0xB7, 0xA0, 0xA7, 0x00, 0x7A, 0x07, | ||
1189 | 0x0C, 0x70, 0xC7, 0x07, 0xA0, 0x7E, 0x00, 0x7E, 0x50, 0x7A, | ||
1190 | 0x07, 0xA0, 0x7C, 0x07, 0xA0, 0x7A, 0x07, 0xF3, 0x20, 0x0E, | ||
1191 | 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE3, 0x7E, | ||
1192 | 0x68, 0xE6, 0x2E, 0x41, 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, | ||
1193 | 0x62, 0xE5, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, | ||
1194 | 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, | ||
1195 | 0x15, 0x20, 0xE3, 0x7E, 0x68, 0xE5, 0x2E, 0x51, 0xF0, 0x52, | ||
1196 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, | ||
1197 | 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, | ||
1198 | 0x8E, 0x62, 0xE4, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x68, 0xE5, | ||
1199 | 0x2E, 0x51, 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, | ||
1200 | 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1201 | 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0xD7, 0x00, | ||
1202 | 0x2C, 0x02, 0xA0, 0x2F, 0xC2, 0x00, 0xC2, 0x02, 0xA0, 0x20, | ||
1203 | 0xB2, 0xF7, 0x20, 0x02, 0xC0, 0xB2, 0x00, 0xB2, 0x00, 0xA2, | ||
1204 | 0x02, 0xA0, 0x20, 0xC2, 0xEF, 0x02, 0xC0, 0x2C, 0x0A, 0x20, | ||
1205 | 0x0B, 0x20, 0xC2, 0xFC, 0x10, 0x0B, 0x20, 0x0A, 0x20, 0x2A, | ||
1206 | 0x02, 0xF8, 0x20, 0x0A, 0x20, 0x2A, 0x02, 0x02, 0xA0, 0x20, | ||
1207 | 0xC2, 0x02, 0xA0, 0x2E, 0x00, 0x2E, 0xD0, 0xB2, 0x00, 0xA2, | ||
1208 | 0xF0, 0x80, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0xE7, | ||
1209 | 0x00, 0x2C, 0x02, 0x20, 0x02, 0xFC, 0x20, 0x02, 0xC0, 0x2A, | ||
1210 | 0x02, 0x02, 0xA0, 0x2F, 0x62, 0x00, 0x2C, 0x02, 0xA0, 0x20, | ||
1211 | 0x2A, 0x02, 0x00, 0x20, 0x02, 0x20, 0x02, 0xA0, 0x2F, 0x81, | ||
1212 | 0x00, 0x2C, 0x02, 0xD0, 0x20, 0x02, 0xE0, 0x02, 0xFE, 0x10, | ||
1213 | 0x02, 0xA0, 0x20, 0x02, 0x00, 0x22, 0x00, 0x2F, 0x92, 0x00, | ||
1214 | 0x20, 0x02, 0x20, 0x02, 0x02, 0x00, 0x20, 0x02, 0xC0, 0x2A, | ||
1215 | 0x02, 0xD0, 0xB2, 0xEB, 0x02, 0xA0, 0x20, 0x02, 0xF1, 0x80, | ||
1216 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0xE7, 0x00, 0x2C, | ||
1217 | 0x02, 0x02, 0x02, 0xFC, 0x20, 0x02, 0xD0, 0x20, 0x20, 0x02, | ||
1218 | 0xA0, 0x2F, 0x62, 0x00, 0x2C, 0x02, 0xA0, 0x20, 0x2A, 0x02, | ||
1219 | 0x00, 0x20, 0x02, 0x02, 0x02, 0xA0, 0x2F, 0x81, 0x00, 0x2C, | ||
1220 | 0x02, 0xD0, 0x20, 0x02, 0xE0, 0x02, 0xFE, 0x10, 0x02, 0xA0, | ||
1221 | 0x20, 0x02, 0x00, 0x20, 0x20, 0x2F, 0x92, 0x00, 0x20, 0x02, | ||
1222 | 0x02, 0x02, 0x02, 0x02, 0xA0, 0x2C, 0x02, 0xA0, 0x2C, 0x02, | ||
1223 | 0x02, 0xED, 0x02, 0xA0, 0x20, 0x02, 0xF1, 0x80, 0x0E, 0x47, | ||
1224 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0xE7, 0x00, 0x2C, 0x02, 0x02, | ||
1225 | 0x02, 0xFC, 0x20, 0x0A, 0x2C, 0x02, 0xA0, 0xB2, 0xF7, 0x20, | ||
1226 | 0x02, 0xC0, 0xB2, 0x00, 0xB2, 0xA0, 0x20, 0x02, 0x02, 0x02, | ||
1227 | 0xA0, 0x2F, 0x81, 0x00, 0x2C, 0x02, 0xD0, 0x2A, 0x0A, 0x2B, | ||
1228 | 0x02, 0xFE, 0x10, 0x0B, 0x2A, 0x02, 0x00, 0x20, 0x20, 0x2F, | ||
1229 | 0x92, 0x00, 0x20, 0x02, 0x02, 0x02, 0x02, 0x2B, 0x0A, 0x2B, | ||
1230 | 0x0A, 0x2E, 0x00, 0xA2, 0xEC, 0x0B, 0x2A, 0x02, 0xF1, 0x80, | ||
1231 | 0x0E, 0x37, 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0xE7, 0x00, 0x2C, | ||
1232 | 0x02, 0x00, 0x22, 0xFC, 0x20, 0x02, 0xD0, 0x20, 0x20, 0x02, | ||
1233 | 0xFA, 0x20, 0x02, 0xC0, 0x2C, 0x02, 0x02, 0xB0, 0x20, 0x02, | ||
1234 | 0x00, 0x22, 0xA0, 0x2F, 0x81, 0x00, 0x2C, 0x02, 0xD0, 0x2D, | ||
1235 | 0x02, 0xA0, 0x2F, 0xE1, 0x00, 0x2A, 0x02, 0x00, 0x20, 0x02, | ||
1236 | 0x00, 0x22, 0xF9, 0x20, 0x02, 0x00, 0x20, 0x02, 0x20, 0x20, | ||
1237 | 0x2A, 0x02, 0xE0, 0x02, 0xE2, 0x02, 0x02, 0xEB, 0x02, 0xD0, | ||
1238 | 0x2F, 0x08, 0x00, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x51, 0xFE, | ||
1239 | 0x70, 0x02, 0xC0, 0x2A, 0x02, 0xFC, 0x20, 0x02, 0xC0, 0x2A, | ||
1240 | 0x02, 0x02, 0xFA, 0x20, 0x02, 0xC0, 0x2C, 0x02, 0x00, 0x2A, | ||
1241 | 0x02, 0x00, 0x2A, 0x02, 0xA0, 0x2F, 0x81, 0x00, 0x2C, 0x02, | ||
1242 | 0xD0, 0x2D, 0x02, 0xA0, 0x2F, 0xE1, 0x00, 0x2A, 0x02, 0x00, | ||
1243 | 0x20, 0x02, 0xA0, 0x2F, 0x92, 0x00, 0x20, 0x02, 0xA0, 0x20, | ||
1244 | 0x20, 0x02, 0x00, 0x2E, 0x00, 0x2E, 0x00, 0xB2, 0xEC, 0x02, | ||
1245 | 0xD0, 0x2F, 0x08, 0x00, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, | ||
1246 | 0xFF, 0x70, 0x0C, 0x20, 0x2A, 0x02, 0xFC, 0x20, 0x0C, 0x20, | ||
1247 | 0x2A, 0x02, 0x02, 0xFA, 0x20, 0x0C, 0x20, 0x2C, 0x02, 0xA0, | ||
1248 | 0x20, 0xA2, 0x02, 0xA0, 0x2A, 0x02, 0xF8, 0x10, 0x0C, 0x20, | ||
1249 | 0xC2, 0x0A, 0x20, 0xB2, 0xB0, 0x2F, 0xE1, 0x00, 0xB2, 0x00, | ||
1250 | 0xA2, 0x02, 0xA0, 0x2F, 0x82, 0x00, 0xA2, 0x02, 0xA0, 0x20, | ||
1251 | 0x2A, 0x02, 0x0C, 0x2A, 0x02, 0xE2, 0x02, 0xED, 0x02, 0xC0, | ||
1252 | 0xA2, 0xFF, 0x70, 0x0E, 0x37, 0xE6, 0x8E, 0x62, 0xE4, 0x1F, | ||
1253 | 0x05, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x51, 0xF0, 0x52, | ||
1254 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, | ||
1255 | 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xFE, 0x30, 0x0F, 0x13, 0x05, | ||
1256 | 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, | ||
1257 | 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, | ||
1258 | 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, 0x62, 0x05, 0xEA, 0x0F, | ||
1259 | 0x62, 0x05, 0xEA, 0x0F, 0x24, 0x05, 0xD1, 0xFE, 0x30, 0x0F, | ||
1260 | 0x13, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1261 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
1262 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
1263 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
1264 | 0xF2, 0x40, 0x54, 0xC1, 0xFE, 0x30, 0x0F, 0x13, 0x05, 0x4E, | ||
1265 | 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
1266 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, | ||
1267 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
1268 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xEC, 0x5B, 0x95, | ||
1269 | 0x5B, 0x95, 0x5C, 0x9A, 0x59, 0xA5, 0x9A, 0x59, 0xEB, 0x54, | ||
1270 | 0xB1, 0xFF, 0x30, 0x0E, 0x25, 0xC9, 0xB5, 0xA9, 0xB5, 0xD9, | ||
1271 | 0xA5, 0xC9, 0xE3, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, | ||
1272 | 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x71, 0x05, 0xA7, 0xE5, 0x54, | ||
1273 | 0xE9, 0x0F, 0x91, 0x05, 0x7E, 0x55, 0x4E, 0x90, 0xF6, 0x20, | ||
1274 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
1275 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xEC, 0x59, 0xA5, 0x95, | ||
1276 | 0x9A, 0x59, 0x59, 0xD5, 0x95, 0x95, 0x59, 0x55, 0x9E, 0xC5, | ||
1277 | 0x4B, 0x1F, 0xF3, 0x00, 0xE1, 0x59, 0x9A, 0x59, 0x95, 0x59, | ||
1278 | 0x95, 0x99, 0xA5, 0x99, 0xA5, 0x99, 0x59, 0x9A, 0x59, 0x9E, | ||
1279 | 0x25, 0x4E, 0x90, 0xC5, 0xE0, 0x9E, 0x25, 0x77, 0xE8, 0x54, | ||
1280 | 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x25, 0xA7, 0xE8, 0x54, | ||
1281 | 0xE9, 0x0E, 0x05, 0xB9, 0xE4, 0x57, 0xA5, 0x7E, 0x45, 0x4E, | ||
1282 | 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE6, 0x57, 0xE6, 0x54, 0xE9, | ||
1283 | 0x0B, 0x5D, 0x9E, 0x85, 0x7E, 0x55, 0x4E, 0x90, 0xD5, 0x99, | ||
1284 | 0xA5, 0x99, 0xF9, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, | ||
1285 | 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0E, | ||
1286 | 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xA5, 0x95, | ||
1287 | 0x95, 0x9E, 0xD5, 0x4B, 0x1F, 0xF3, 0x00, 0xE1, 0x59, 0x9D, | ||
1288 | 0x59, 0x9A, 0x59, 0x95, 0x59, 0x9A, 0x59, 0x95, 0x99, 0xE7, | ||
1289 | 0x54, 0xE9, 0x0E, 0x25, 0x99, 0xE3, 0x57, 0x7E, 0x85, 0x4E, | ||
1290 | 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE1, 0x57, 0xA5, 0x7E, 0x75, | ||
1291 | 0x4E, 0x90, 0xD5, 0x99, 0x55, 0x99, 0xE7, 0x57, 0xE4, 0x54, | ||
1292 | 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x65, 0x7E, 0x65, 0x4E, | ||
1293 | 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE5, 0x57, 0x57, 0x57, 0xE3, | ||
1294 | 0x54, 0xE9, 0x0D, 0x5A, 0x95, 0x59, 0x9F, 0x91, 0x05, 0x4E, | ||
1295 | 0x90, 0xC5, 0x99, 0xA5, 0x99, 0xFA, 0x10, 0x54, 0xE9, 0x0A, | ||
1296 | 0x5B, 0x75, 0x7A, 0x57, 0x57, 0xA5, 0x75, 0xB7, 0xA5, 0xA7, | ||
1297 | 0x55, 0x7C, 0x54, 0xE9, 0x0E, 0xC5, 0xB9, 0x55, 0xB9, 0x55, | ||
1298 | 0xA9, 0xA5, 0x9A, 0x59, 0x59, 0x9E, 0xE5, 0x4B, 0x1F, 0xF3, | ||
1299 | 0x00, 0xE1, 0x59, 0x9D, 0x59, 0x9A, 0x59, 0x95, 0x5D, 0x9A, | ||
1300 | 0x5C, 0x9E, 0x35, 0x4E, 0x90, 0xE2, 0x59, 0x9F, 0xB1, 0x05, | ||
1301 | 0x4E, 0x90, 0xC5, 0x99, 0x59, 0x9E, 0x35, 0x7E, 0xA5, 0x4E, | ||
1302 | 0x90, 0xC5, 0x99, 0xEB, 0x57, 0xE5, 0x54, 0xE9, 0x0B, 0x59, | ||
1303 | 0x9A, 0x59, 0x9E, 0x55, 0x7E, 0x75, 0x4E, 0x90, 0xB5, 0x99, | ||
1304 | 0xA5, 0x99, 0xE6, 0x5A, 0x7E, 0x45, 0x4E, 0x90, 0xD5, 0xA9, | ||
1305 | 0x55, 0x99, 0xF9, 0x10, 0x54, 0xE9, 0x0C, 0x5A, 0x95, 0xA9, | ||
1306 | 0xFA, 0x10, 0x54, 0xE9, 0x05, 0x57, 0xC5, 0x7A, 0x57, 0x57, | ||
1307 | 0x75, 0x77, 0x57, 0xA5, 0x75, 0x7A, 0x57, 0x57, 0xC5, 0x4E, | ||
1308 | 0x90, 0xEC, 0x59, 0xA5, 0x95, 0x95, 0x9A, 0x59, 0xC5, 0xC9, | ||
1309 | 0x59, 0x59, 0xED, 0x54, 0xA1, 0xF0, 0x40, 0x0E, 0x15, 0x99, | ||
1310 | 0xD5, 0xE0, 0x95, 0x59, 0x9E, 0x45, 0x99, 0xE2, 0x54, 0xE9, | ||
1311 | 0x0E, 0x15, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x95, | ||
1312 | 0x99, 0xE2, 0x5A, 0x7E, 0x95, 0x4E, 0x90, 0xC5, 0x99, 0xEA, | ||
1313 | 0x57, 0xE6, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9E, 0x45, | ||
1314 | 0x7E, 0x85, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xE5, 0x57, | ||
1315 | 0x57, 0x57, 0xE3, 0x54, 0xE9, 0x0D, 0x5B, 0x95, 0x99, 0xE2, | ||
1316 | 0x57, 0x7E, 0x75, 0x4E, 0x90, 0xC5, 0xA9, 0x5A, 0x9E, 0x55, | ||
1317 | 0x77, 0xE5, 0x54, 0xE9, 0x05, 0x57, 0xC5, 0x7A, 0x57, 0x57, | ||
1318 | 0x57, 0x57, 0x57, 0xA5, 0x75, 0x7A, 0x57, 0x57, 0xC5, 0x4E, | ||
1319 | 0x90, 0xEC, 0x59, 0xA5, 0x95, 0x95, 0x59, 0x55, 0x9C, 0x59, | ||
1320 | 0xA5, 0x95, 0x95, 0x59, 0xEC, 0x54, 0xA1, 0xF0, 0x40, 0x0E, | ||
1321 | 0x15, 0x99, 0xA5, 0x99, 0x59, 0x9A, 0x59, 0x95, 0x59, 0x9D, | ||
1322 | 0x59, 0x9A, 0x59, 0x9E, 0x25, 0x4E, 0x90, 0xE1, 0x59, 0x9E, | ||
1323 | 0x45, 0x77, 0xE8, 0x54, 0xE9, 0x0D, 0x5A, 0x9E, 0x45, 0x7E, | ||
1324 | 0xA5, 0x4E, 0x90, 0xC5, 0x99, 0xFF, 0x10, 0x54, 0xE9, 0x0C, | ||
1325 | 0x59, 0x95, 0x99, 0xE5, 0x57, 0xE8, 0x54, 0xE9, 0x0B, 0x5D, | ||
1326 | 0x9E, 0x85, 0x7E, 0x55, 0x4E, 0x90, 0xD5, 0x99, 0x59, 0x59, | ||
1327 | 0x9E, 0x35, 0x7E, 0x75, 0x4E, 0x90, 0xC5, 0xE0, 0x9E, 0x55, | ||
1328 | 0x77, 0xE5, 0x54, 0xE9, 0x0A, 0x5A, 0x7A, 0x5A, 0x75, 0x57, | ||
1329 | 0x57, 0x57, 0x5B, 0x75, 0x57, 0xA5, 0x75, 0x7C, 0x54, 0xE9, | ||
1330 | 0x0E, 0xC5, 0xB9, 0x55, 0x9A, 0x59, 0x5C, 0x95, 0x9A, 0x59, | ||
1331 | 0x59, 0xA5, 0x9E, 0xB5, 0x4A, 0x1F, 0x04, 0x00, 0xE2, 0x5C, | ||
1332 | 0x95, 0x59, 0x9A, 0x59, 0x95, 0x59, 0x9E, 0x05, 0xC9, 0xE3, | ||
1333 | 0x54, 0xE9, 0x0E, 0x05, 0x99, 0xE5, 0x57, 0x7E, 0x85, 0x4E, | ||
1334 | 0x90, 0xD5, 0xA9, 0xE3, 0x57, 0xEB, 0x54, 0xE9, 0x0C, 0x59, | ||
1335 | 0x9E, 0xA5, 0x7E, 0x65, 0x4E, 0x90, 0xC5, 0x99, 0x59, 0x9E, | ||
1336 | 0x45, 0x7E, 0x95, 0x4E, 0x90, 0xB5, 0x99, 0xA5, 0x99, 0xFB, | ||
1337 | 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x95, 0xB9, 0xE2, 0x57, 0xE8, | ||
1338 | 0x54, 0xE9, 0x0C, 0x5E, 0x09, 0xFA, 0x10, 0x54, 0xE9, 0x0D, | ||
1339 | 0x57, 0xA5, 0x7A, 0x57, 0xA5, 0x75, 0x7A, 0x57, 0x57, 0xA5, | ||
1340 | 0x75, 0x7C, 0x54, 0xE9, 0x0F, 0x24, 0x05, 0x41, 0x1F, 0x14, | ||
1341 | 0x00, 0xF1, 0x30, 0x54, 0xE9, 0x0E, 0x05, 0x99, 0xFD, 0x10, | ||
1342 | 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x99, 0xE2, 0x5C, 0x7E, 0x75, | ||
1343 | 0x4E, 0x90, 0xC5, 0x99, 0xFF, 0x10, 0x54, 0xE9, 0x0C, 0x59, | ||
1344 | 0x95, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, | ||
1345 | 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0x55, 0xA9, 0xF9, | ||
1346 | 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x95, 0x99, 0xFA, 0x10, | ||
1347 | 0x54, 0xE9, 0x0D, 0x57, 0xA5, 0x7A, 0x57, 0xA5, 0x75, 0x7A, | ||
1348 | 0x57, 0x57, 0xA5, 0x75, 0x7C, 0x54, 0xE9, 0x0F, 0x24, 0x05, | ||
1349 | 0x41, 0x1F, 0x14, 0x00, 0xF1, 0x30, 0x54, 0xE9, 0x0D, 0x59, | ||
1350 | 0x9F, 0xE1, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0x59, 0x9F, 0xC1, | ||
1351 | 0x05, 0x4E, 0x90, 0xC5, 0x99, 0xFF, 0x10, 0x54, 0xE9, 0x0C, | ||
1352 | 0x59, 0x95, 0x99, 0xFC, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, | ||
1353 | 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0x55, 0xA9, | ||
1354 | 0xF9, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x95, 0x95, 0x99, 0xFA, | ||
1355 | 0x10, 0x54, 0xE9, 0x05, 0x5B, 0x7B, 0x57, 0xA5, 0x7A, 0x57, | ||
1356 | 0x5B, 0x7A, 0x5A, 0x75, 0x5C, 0x75, 0x4E, 0x90, 0xE8, 0x5C, | ||
1357 | 0x95, 0x5D, 0x9B, 0x5A, 0x9C, 0x5B, 0x95, 0x5E, 0x09, 0xE6, | ||
1358 | 0x54, 0x11, 0xF1, 0x40, 0x0F, 0x13, 0x05, 0x4E, 0x90, 0xD5, | ||
1359 | 0x99, 0xFE, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, 0x59, 0x9F, | ||
1360 | 0xB1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0x55, 0x99, 0xFA, 0x10, | ||
1361 | 0x54, 0xE9, 0x0D, 0x5A, 0x9F, 0xD1, 0x05, 0x4E, 0x90, 0xB5, | ||
1362 | 0x99, 0xA5, 0x99, 0xFB, 0x10, 0x54, 0xE9, 0x0D, 0x59, 0x9A, | ||
1363 | 0x59, 0x9F, 0x91, 0x05, 0x4E, 0x90, 0xC5, 0x99, 0x59, 0x59, | ||
1364 | 0x9F, 0xA1, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0E, | ||
1365 | 0x75, 0xE0, 0x95, 0xE0, 0x9A, 0x5A, 0x9B, 0x5D, 0x95, 0xE0, | ||
1366 | 0x9E, 0x65, 0x41, 0x1F, 0x14, 0x00, 0xD5, 0xC9, 0x55, 0x99, | ||
1367 | 0xA5, 0x99, 0x5D, 0x95, 0xE0, 0x95, 0xD9, 0xE0, 0x54, 0xE9, | ||
1368 | 0x0C, 0x5E, 0x09, 0xFA, 0x10, 0x54, 0xE9, 0x0B, 0x59, 0x9A, | ||
1369 | 0x59, 0x9F, 0xB1, 0x05, 0x4E, 0x90, 0xE0, 0x5B, 0x9F, 0xB1, | ||
1370 | 0x05, 0x4E, 0x90, 0xD5, 0xA9, 0xFD, 0x10, 0x54, 0xE9, 0x0B, | ||
1371 | 0x5D, 0x9F, 0xC1, 0x05, 0x4E, 0x90, 0xD5, 0x99, 0xA5, 0x99, | ||
1372 | 0xF9, 0x10, 0x54, 0xE9, 0x0C, 0x59, 0x9A, 0x59, 0x9F, 0xA1, | ||
1373 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0E, 0x75, 0x99, | ||
1374 | 0xA5, 0x99, 0x59, 0x9A, 0x59, 0x95, 0x59, 0x95, 0x99, 0x55, | ||
1375 | 0xA9, 0x55, 0x99, 0x59, 0x9E, 0xB5, 0x41, 0xF2, 0x40, 0x0C, | ||
1376 | 0x59, 0x9A, 0x59, 0x95, 0x99, 0xA5, 0x99, 0xA5, 0x99, 0xA5, | ||
1377 | 0x99, 0xE1, 0x59, 0x9E, 0x25, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
1378 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
1379 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
1380 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1381 | 0x05, 0x4E, 0x90, 0xE7, 0x59, 0x9D, 0x59, 0x9A, 0x59, 0x95, | ||
1382 | 0x59, 0x95, 0x99, 0x55, 0x99, 0xD5, 0x99, 0xEB, 0x54, 0x1F, | ||
1383 | 0x24, 0x00, 0xC5, 0x99, 0xD5, 0x99, 0xA5, 0x99, 0xA5, 0x99, | ||
1384 | 0xA5, 0x99, 0xE1, 0x59, 0x9E, 0x25, 0x4E, 0x90, 0xE5, 0x5A, | ||
1385 | 0x9A, 0x5A, 0x95, 0x5B, 0x95, 0x59, 0xA5, 0x9B, 0x54, 0xE9, | ||
1386 | 0x0C, 0x5A, 0x95, 0x59, 0xC5, 0xC9, 0xA5, 0x9A, 0x5B, 0x9D, | ||
1387 | 0x54, 0xE9, 0x0E, 0x35, 0xA9, 0xA5, 0xA9, 0x55, 0x9A, 0x59, | ||
1388 | 0x5C, 0x9D, 0x54, 0xE9, 0x0E, 0x85, 0xA9, 0x55, 0x9D, 0x5B, | ||
1389 | 0x9E, 0x05, 0x4E, 0x90, 0x5B, 0x9A, 0x5A, 0x95, 0x5B, 0x95, | ||
1390 | 0x5A, 0x9A, 0x5C, 0x95, 0xB9, 0xA5, 0x4E, 0x90, 0xE3, 0x59, | ||
1391 | 0xA5, 0x95, 0xC9, 0x59, 0xA5, 0x95, 0xC9, 0xC5, 0x4E, 0x90, | ||
1392 | 0xD5, 0xB9, 0xB5, 0x9A, 0x59, 0xA5, 0x95, 0x5B, 0x95, 0xC9, | ||
1393 | 0xA5, 0x4E, 0x90, 0xD5, 0xB7, 0x57, 0xA5, 0x75, 0xA7, 0x5C, | ||
1394 | 0x75, 0xC7, 0xD5, 0x4E, 0x90, 0xE7, 0x5B, 0x9B, 0x59, 0x9A, | ||
1395 | 0x59, 0x95, 0x99, 0xA5, 0x99, 0x59, 0x9D, 0x5C, 0x9E, 0x85, | ||
1396 | 0x41, 0xF2, 0x40, 0x0D, 0x5C, 0x95, 0x5E, 0x09, 0xA5, 0x99, | ||
1397 | 0xA5, 0xC9, 0xC5, 0x99, 0xE2, 0x54, 0xE9, 0x0E, 0x45, 0x9A, | ||
1398 | 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0xA5, 0x9B, 0x54, | ||
1399 | 0xE9, 0x0B, 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xD5, 0x95, 0x95, | ||
1400 | 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x25, 0x9A, 0x59, 0x59, | ||
1401 | 0xA5, 0x95, 0x99, 0x55, 0x9A, 0x59, 0xE1, 0x54, 0xE9, 0x0E, | ||
1402 | 0x75, 0x9A, 0x59, 0x59, 0xC5, 0x9E, 0x45, 0x4E, 0x90, 0x59, | ||
1403 | 0xA5, 0x95, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x95, 0x59, 0x55, | ||
1404 | 0x9C, 0x59, 0xA5, 0x95, 0x54, 0xE9, 0x0E, 0x35, 0x99, 0x55, | ||
1405 | 0x95, 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xE0, 0x54, 0xE9, 0x0D, | ||
1406 | 0x59, 0xA5, 0x95, 0x59, 0x59, 0x55, 0x9A, 0x59, 0x59, 0xC5, | ||
1407 | 0x9E, 0x05, 0x4E, 0x90, 0xC5, 0x7C, 0x57, 0xA5, 0x75, 0x57, | ||
1408 | 0x55, 0x7E, 0x05, 0x7E, 0x15, 0x4E, 0x90, 0xE8, 0x5C, 0x95, | ||
1409 | 0x5E, 0x09, 0x59, 0x9A, 0x59, 0x95, 0x99, 0xD5, 0xC9, 0xE8, | ||
1410 | 0x54, 0xF3, 0x40, 0x0E, 0x35, 0x99, 0x59, 0x9A, 0x59, 0x9A, | ||
1411 | 0x59, 0x9A, 0x59, 0x9E, 0x15, 0x99, 0xE2, 0x54, 0xE9, 0x0E, | ||
1412 | 0x45, 0x9C, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0xA5, 0x9B, | ||
1413 | 0x54, 0xE9, 0x0B, 0x59, 0xC5, 0x9C, 0x59, 0xC5, 0x9A, 0x59, | ||
1414 | 0x59, 0xA5, 0x9C, 0x54, 0xE9, 0x0E, 0x25, 0x9C, 0x59, 0xA5, | ||
1415 | 0x95, 0x95, 0x95, 0x9A, 0x59, 0xE1, 0x54, 0xE9, 0x0E, 0x75, | ||
1416 | 0x9C, 0x59, 0xC5, 0x9E, 0x45, 0x4E, 0x90, 0x59, 0xA5, 0x95, | ||
1417 | 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9A, 0x59, 0x59, 0xC5, 0x9A, | ||
1418 | 0x59, 0x55, 0x4E, 0x90, 0xE3, 0x59, 0x59, 0x59, 0x59, 0xD5, | ||
1419 | 0x95, 0x9B, 0x59, 0xE0, 0x54, 0xE9, 0x0D, 0x59, 0xA5, 0x95, | ||
1420 | 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xE0, 0x54, 0xE9, | ||
1421 | 0x0C, 0x57, 0xC5, 0x7A, 0x57, 0x55, 0x75, 0x57, 0xE0, 0x57, | ||
1422 | 0xE1, 0x54, 0xE9, 0x0E, 0xA5, 0xB9, 0x5D, 0x95, 0x5E, 0x09, | ||
1423 | 0x59, 0x9D, 0x59, 0x9E, 0xB5, 0x4F, 0x34, 0x00, 0xC5, 0x99, | ||
1424 | 0xA5, 0x99, 0x59, 0x9A, 0x59, 0x9A, 0x59, 0x9A, 0x59, 0x9E, | ||
1425 | 0x15, 0x99, 0xE2, 0x54, 0xE9, 0x0E, 0x45, 0x9C, 0x59, 0xA5, | ||
1426 | 0x95, 0xB9, 0xA5, 0xA9, 0xC5, 0x4E, 0x90, 0xB5, 0x9C, 0x59, | ||
1427 | 0xC5, 0xA9, 0xA5, 0x9A, 0x59, 0x5B, 0x9D, 0x54, 0xE9, 0x0E, | ||
1428 | 0x25, 0x9C, 0x59, 0xA5, 0x95, 0x95, 0x95, 0x9A, 0x59, 0xE1, | ||
1429 | 0x54, 0xE9, 0x0E, 0x75, 0x9C, 0x59, 0xD5, 0xA9, 0xE1, 0x54, | ||
1430 | 0xE9, 0x05, 0xB9, 0x55, 0x9A, 0x59, 0x5B, 0x95, 0x59, 0xA5, | ||
1431 | 0x95, 0xA9, 0xA5, 0xB9, 0xA5, 0x4E, 0x90, 0xE3, 0x59, 0x59, | ||
1432 | 0x59, 0x5A, 0x9C, 0x59, 0xC5, 0x9E, 0x05, 0x4E, 0x90, 0xD5, | ||
1433 | 0xB9, 0x55, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x5A, 0x95, 0x5A, | ||
1434 | 0x9C, 0x54, 0xE9, 0x0D, 0x5A, 0x75, 0x5C, 0x75, 0x57, 0x55, | ||
1435 | 0xA7, 0xC5, 0x7E, 0x15, 0x4E, 0x90, 0xEC, 0x59, 0x95, 0x99, | ||
1436 | 0xD5, 0xE0, 0x95, 0x99, 0xD5, 0x99, 0xEB, 0x54, 0xF3, 0x40, | ||
1437 | 0x0D, 0x5C, 0x95, 0x59, 0x9A, 0x59, 0x95, 0xD9, 0x59, 0x9E, | ||
1438 | 0x15, 0x99, 0xE2, 0x54, 0xE9, 0x0E, 0x45, 0x9C, 0x59, 0xA5, | ||
1439 | 0x95, 0x9E, 0x05, 0x9D, 0x54, 0xE9, 0x0B, 0x59, 0xC5, 0x9C, | ||
1440 | 0x59, 0xC5, 0xC9, 0x59, 0x59, 0xE0, 0x54, 0xE9, 0x0E, 0x25, | ||
1441 | 0x9C, 0x59, 0xA5, 0x95, 0x95, 0x59, 0x9A, 0x59, 0xE1, 0x54, | ||
1442 | 0xE9, 0x0E, 0x75, 0x9C, 0x59, 0xE2, 0x59, 0xE0, 0x54, 0xE9, | ||
1443 | 0x05, 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x95, 0x9A, 0x59, 0xA5, | ||
1444 | 0x95, 0x9C, 0x59, 0x59, 0xB5, 0x4E, 0x90, 0xE3, 0x59, 0x55, | ||
1445 | 0x99, 0x59, 0xD5, 0x95, 0x9B, 0x59, 0xE0, 0x54, 0xE9, 0x0D, | ||
1446 | 0x59, 0xC5, 0xC9, 0x59, 0xA5, 0x9C, 0x59, 0x59, 0xE0, 0x54, | ||
1447 | 0xE9, 0x0E, 0x25, 0x75, 0x7A, 0x57, 0x55, 0x75, 0x57, 0xE0, | ||
1448 | 0x57, 0xE1, 0x54, 0xE9, 0x0E, 0x75, 0x99, 0xA5, 0x99, 0x59, | ||
1449 | 0x9D, 0x59, 0x9A, 0x59, 0x95, 0xA9, 0x55, 0x99, 0x59, 0x9E, | ||
1450 | 0xB5, 0x4F, 0x34, 0x00, 0xF1, 0x30, 0x54, 0xE9, 0x0E, 0x45, | ||
1451 | 0x9A, 0x59, 0x59, 0xA5, 0x95, 0x9E, 0x05, 0x9D, 0x54, 0xE9, | ||
1452 | 0x0B, 0x59, 0xA5, 0x95, 0x9C, 0x59, 0xC5, 0x9A, 0x59, 0x59, | ||
1453 | 0x55, 0x9D, 0x54, 0xE9, 0x0E, 0x25, 0x9A, 0x59, 0x59, 0xA5, | ||
1454 | 0x95, 0x9A, 0x59, 0xA5, 0x9E, 0x15, 0x4E, 0x90, 0xE7, 0x59, | ||
1455 | 0xA5, 0x95, 0x9E, 0x25, 0x9E, 0x05, 0x4E, 0x90, 0x59, 0xA5, | ||
1456 | 0x95, 0x9A, 0x59, 0x59, 0x55, 0x95, 0x59, 0x55, 0x95, 0x59, | ||
1457 | 0xC5, 0x95, 0x59, 0xA5, 0x4E, 0x90, 0xE3, 0x59, 0xA5, 0x95, | ||
1458 | 0x9C, 0x59, 0xA5, 0x9A, 0x59, 0xE0, 0x54, 0xE9, 0x0D, 0x59, | ||
1459 | 0xC5, 0x9A, 0x59, 0x59, 0xA5, 0x9C, 0x59, 0x59, 0xE0, 0x54, | ||
1460 | 0xE9, 0x0E, 0x25, 0x75, 0x7A, 0x57, 0x55, 0x75, 0x57, 0xE0, | ||
1461 | 0x57, 0xE1, 0x54, 0xE9, 0x0E, 0x75, 0xE0, 0x95, 0x99, 0xD5, | ||
1462 | 0x99, 0xA5, 0x99, 0x55, 0xD9, 0x5E, 0x09, 0xE6, 0x54, 0xF3, | ||
1463 | 0x40, 0x0F, 0x13, 0x05, 0x4E, 0x90, 0xE5, 0x5A, 0x9A, 0x5A, | ||
1464 | 0x95, 0x59, 0xE0, 0x59, 0xD5, 0x4E, 0x90, 0xC5, 0xA9, 0x55, | ||
1465 | 0xC9, 0x5C, 0x95, 0x9A, 0x59, 0x59, 0xA5, 0x9C, 0x54, 0xE9, | ||
1466 | 0x0E, 0x35, 0xA9, 0xA5, 0xA9, 0x55, 0x9A, 0x59, 0xA5, 0x9E, | ||
1467 | 0x15, 0x4E, 0x90, 0xE8, 0x5A, 0x95, 0x5C, 0x95, 0xB9, 0xE1, | ||
1468 | 0x54, 0xE9, 0x05, 0xB9, 0xA5, 0xA9, 0x55, 0x9A, 0x59, 0x5A, | ||
1469 | 0x9A, 0x5C, 0x95, 0x9A, 0x59, 0x55, 0x4E, 0x90, 0xE3, 0x59, | ||
1470 | 0xA5, 0x95, 0xC9, 0x59, 0xA5, 0x9A, 0x59, 0xE0, 0x54, 0xE9, | ||
1471 | 0x0D, 0x59, 0xC5, 0x9A, 0x59, 0x55, 0xA9, 0x55, 0xB9, 0x55, | ||
1472 | 0xC9, 0xA5, 0x4E, 0x90, 0xC5, 0xB7, 0x55, 0x7A, 0x57, 0x5A, | ||
1473 | 0x75, 0x7E, 0x05, 0x7E, 0x15, 0x4E, 0x90, 0xE8, 0x5C, 0x95, | ||
1474 | 0x59, 0x9D, 0x59, 0x9A, 0x59, 0x9A, 0x5B, 0x95, 0x5E, 0x09, | ||
1475 | 0xE6, 0x54, 0xF3, 0x40, 0x0F, 0x13, 0x05, 0x4E, 0x90, 0xF6, | ||
1476 | 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, | ||
1477 | 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, | ||
1478 | 0xE9, 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, | ||
1479 | 0x0F, 0x62, 0x05, 0x4E, 0x90, 0xF2, 0x40, 0x54, 0xF3, 0x40, | ||
1480 | 0x0F, 0x13, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, | ||
1481 | 0x62, 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, | ||
1482 | 0x05, 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, | ||
1483 | 0x4E, 0x90, 0xF6, 0x20, 0x54, 0xE9, 0x0F, 0x62, 0x05, 0x4E, | ||
1484 | 0x90, 0xF2, 0x40, 0x54, 0xF4, 0x40, 0x0F, 0x13, 0x04, 0xEA, | ||
1485 | 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, | ||
1486 | 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, | ||
1487 | 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, 0x04, 0xEA, 0x0F, 0x62, | ||
1488 | 0x04, 0xEA, 0x0F, 0x24, 0x04, 0xFF, 0x42, 0x0E, 0x47, 0xE5, | ||
1489 | 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE3, 0x7E, 0x68, 0xE5, | ||
1490 | 0x2E, 0x51, 0xF7, 0x80, 0x0B, 0x70, 0x0C, 0x70, 0xC7, 0x0B, | ||
1491 | 0x7F, 0x12, 0x00, 0xA7, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0xF8, | ||
1492 | 0x20, 0x0B, 0x7B, 0x07, 0xA0, 0xB7, 0x00, 0xC7, 0x0B, 0x7F, | ||
1493 | 0xB1, 0x00, 0xC7, 0x07, 0xE0, 0x07, 0xB0, 0xB7, 0x07, 0xA0, | ||
1494 | 0x7F, 0xA1, 0x00, 0xB7, 0x00, 0xB7, 0x00, 0xA7, 0x00, 0xA7, | ||
1495 | 0x00, 0x7A, 0x07, 0x0C, 0x7F, 0x71, 0x00, 0xA7, 0x00, 0x7A, | ||
1496 | 0x07, 0x0C, 0x70, 0xB7, 0xF1, 0x20, 0x0A, 0x70, 0x7A, 0x07, | ||
1497 | 0x07, 0xA0, 0x70, 0xC7, 0x0B, 0x7A, 0x0B, 0x70, 0xC7, 0xF8, | ||
1498 | 0x50, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x88, 0x00, | ||
1499 | 0x7A, 0x07, 0x07, 0xC0, 0x7C, 0x07, 0xA0, 0x7F, 0x12, 0x00, | ||
1500 | 0x70, 0x07, 0x70, 0x07, 0x07, 0x00, 0x7F, 0x92, 0x00, 0x7A, | ||
1501 | 0x07, 0x00, 0x70, 0x70, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xA0, | ||
1502 | 0x7F, 0xA1, 0x00, 0x7C, 0x07, 0xD0, 0x70, 0x70, 0x07, 0xC0, | ||
1503 | 0x7A, 0x07, 0xFA, 0x10, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x00, | ||
1504 | 0x70, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0xA0, 0x7F, 0x81, 0x00, | ||
1505 | 0x7A, 0x07, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xA0, 0x7F, 0x12, | ||
1506 | 0x00, 0x70, 0x07, 0x70, 0x07, 0x07, 0xA0, 0x70, 0x7C, 0x07, | ||
1507 | 0xA0, 0x70, 0x7C, 0x07, 0xFC, 0x50, 0x0E, 0x47, 0xE5, 0x8E, | ||
1508 | 0x62, 0xE4, 0x1F, 0x88, 0x00, 0x7A, 0x07, 0x07, 0xC0, 0x7C, | ||
1509 | 0x07, 0xA0, 0x7F, 0x12, 0x00, 0x70, 0x07, 0x07, 0x07, 0x07, | ||
1510 | 0x07, 0xFA, 0x20, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x07, 0xA0, | ||
1511 | 0x70, 0x7C, 0x07, 0xA0, 0x7F, 0xA1, 0x00, 0x7C, 0x07, 0xC0, | ||
1512 | 0x7A, 0x07, 0x07, 0xC0, 0x7A, 0x07, 0xFA, 0x10, 0x07, 0xA0, | ||
1513 | 0x70, 0x7A, 0x07, 0x00, 0x70, 0x07, 0xC0, 0x7A, 0x07, 0xA0, | ||
1514 | 0x7F, 0x81, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x70, 0x7C, 0x07, | ||
1515 | 0xA0, 0x7F, 0x12, 0x00, 0x70, 0x07, 0x07, 0x07, 0x07, 0xA0, | ||
1516 | 0x70, 0x7C, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xFC, 0x50, 0x0E, | ||
1517 | 0x37, 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0x88, 0x00, 0xB7, 0x00, | ||
1518 | 0xA7, 0xA0, 0xA7, 0xA0, 0xB7, 0xF2, 0x20, 0x07, 0x00, 0x70, | ||
1519 | 0x70, 0x70, 0x77, 0xFB, 0x20, 0x0B, 0x70, 0x07, 0xA0, 0x70, | ||
1520 | 0xB7, 0x00, 0xA7, 0xA0, 0xB7, 0xFB, 0x10, 0x0A, 0x7A, 0x07, | ||
1521 | 0xC0, 0x7A, 0x07, 0x00, 0xA7, 0x00, 0xC7, 0xFA, 0x10, 0x0B, | ||
1522 | 0x70, 0x0B, 0x7A, 0x07, 0x00, 0x70, 0xA7, 0x0C, 0x7A, 0x07, | ||
1523 | 0xF8, 0x10, 0x07, 0xA0, 0x70, 0x7A, 0x07, 0x0A, 0x7A, 0x0B, | ||
1524 | 0x7F, 0x22, 0x00, 0x70, 0x07, 0x07, 0x07, 0x07, 0xA0, 0x70, | ||
1525 | 0xA7, 0xA0, 0xB7, 0xA0, 0xA7, 0x00, 0xA7, 0xF9, 0x50, 0x0E, | ||
1526 | 0x47, 0xE6, 0x8E, 0x52, 0xE5, 0x1F, 0x88, 0x00, 0x7A, 0x07, | ||
1527 | 0x07, 0xC0, 0x7C, 0x07, 0xF5, 0x20, 0x07, 0x00, 0x70, 0x07, | ||
1528 | 0x70, 0x70, 0x7F, 0xA2, 0x00, 0x7C, 0x0C, 0x70, 0x7C, 0x07, | ||
1529 | 0xC0, 0x70, 0x7F, 0xC1, 0x00, 0x7C, 0x07, 0xC0, 0xC7, 0xC0, | ||
1530 | 0x70, 0x7A, 0x07, 0xFA, 0x10, 0x07, 0xA0, 0x70, 0x70, 0x7B, | ||
1531 | 0x07, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0xF8, 0x10, | ||
1532 | 0x07, 0xA0, 0x70, 0x07, 0x07, 0x00, 0x7C, 0x07, 0x07, 0xF3, | ||
1533 | 0x20, 0x07, 0x00, 0x70, 0x07, 0x70, 0x07, 0x07, 0x00, 0x7C, | ||
1534 | 0x07, 0x07, 0xE0, 0x07, 0x07, 0xFB, 0x50, 0x0E, 0x47, 0xE5, | ||
1535 | 0x8E, 0x62, 0xE4, 0x1F, 0x98, 0x00, 0x7A, 0x07, 0x07, 0xC0, | ||
1536 | 0x7C, 0x07, 0xF5, 0x20, 0x07, 0x00, 0x7A, 0x07, 0x07, 0x00, | ||
1537 | 0x7F, 0x92, 0x00, 0x7C, 0x07, 0xA0, 0x70, 0x7C, 0x07, 0xC0, | ||
1538 | 0x70, 0x07, 0xFB, 0x10, 0x07, 0xC0, 0x7C, 0x07, 0xA0, 0x7C, | ||
1539 | 0x07, 0x07, 0xA0, 0x7F, 0xA1, 0x00, 0x7A, 0x07, 0x07, 0x00, | ||
1540 | 0x7A, 0x07, 0x00, 0x7A, 0x07, 0x07, 0xA0, 0x7A, 0x07, 0xF8, | ||
1541 | 0x10, 0x07, 0xA0, 0x70, 0x07, 0x07, 0x00, 0x7C, 0x07, 0x00, | ||
1542 | 0x7F, 0x22, 0x00, 0x70, 0x07, 0xA0, 0x70, 0x07, 0x07, 0x00, | ||
1543 | 0x7C, 0x07, 0x00, 0x7D, 0x07, 0x07, 0xFB, 0x50, 0x0E, 0x47, | ||
1544 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x98, 0x00, 0xB7, 0x00, 0xC7, | ||
1545 | 0x0C, 0x70, 0x7F, 0x42, 0x00, 0xA7, 0x07, 0xA0, 0x70, 0x7A, | ||
1546 | 0x07, 0xF8, 0x20, 0x07, 0xC0, 0x7A, 0x07, 0x07, 0xC0, 0xC7, | ||
1547 | 0x07, 0xA0, 0x7F, 0xA1, 0x00, 0x7C, 0x0C, 0x70, 0x7A, 0x07, | ||
1548 | 0x0B, 0x70, 0x07, 0xA0, 0x7F, 0xA1, 0x00, 0xB7, 0x00, 0x7A, | ||
1549 | 0x07, 0x0A, 0x70, 0x0B, 0x70, 0x7A, 0x07, 0xA0, 0x7F, 0x91, | ||
1550 | 0x00, 0xA7, 0xB0, 0x7A, 0x0C, 0x70, 0x7A, 0x07, 0xF0, 0x20, | ||
1551 | 0x0A, 0x70, 0x7A, 0x07, 0xA0, 0x7A, 0x0C, 0x70, 0x7A, 0x07, | ||
1552 | 0x0B, 0x70, 0x0C, 0x7F, 0x75, 0x00, 0xE3, 0x7E, 0x68, 0xE6, | ||
1553 | 0x2E, 0x41, 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, | ||
1554 | 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1555 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, | ||
1556 | 0xE3, 0x7E, 0x68, 0xE5, 0x2E, 0x51, 0xF0, 0x52, 0x0E, 0x47, | ||
1557 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, | ||
1558 | 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x37, 0xE6, 0x8E, 0x62, | ||
1559 | 0xE4, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x51, | ||
1560 | 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, | ||
1561 | 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, | ||
1562 | 0x37, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, | ||
1563 | 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, | ||
1564 | 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, | ||
1565 | 0x41, 0xF0, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, | ||
1566 | 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, | ||
1567 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE3, | ||
1568 | 0x7E, 0x68, 0xE5, 0x2E, 0x51, 0xF0, 0x52, 0x0E, 0x47, 0xE5, | ||
1569 | 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, | ||
1570 | 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, | ||
1571 | 0x1F, 0x15, 0x20, 0xE3, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1572 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, | ||
1573 | 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x37, | ||
1574 | 0xE6, 0x8E, 0x62, 0xE4, 0x1F, 0x05, 0x20, 0xE4, 0x7E, 0x58, | ||
1575 | 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, | ||
1576 | 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, | ||
1577 | 0xF1, 0x52, 0x0E, 0x37, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, | ||
1578 | 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, | ||
1579 | 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, | ||
1580 | 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x37, 0xE5, 0x8E, | ||
1581 | 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, | ||
1582 | 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, | ||
1583 | 0x15, 0x20, 0xE3, 0x7E, 0x68, 0xE6, 0x2E, 0x41, 0xF0, 0x52, | ||
1584 | 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, | ||
1585 | 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, | ||
1586 | 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE3, 0x7E, 0x58, 0xE6, | ||
1587 | 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, | ||
1588 | 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, | ||
1589 | 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, | ||
1590 | 0xE3, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x47, | ||
1591 | 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, | ||
1592 | 0xE6, 0x2E, 0x41, 0xF1, 0x52, 0x0E, 0x37, 0xE5, 0x8E, 0x62, | ||
1593 | 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, | ||
1594 | 0xF1, 0x52, 0x0E, 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, | ||
1595 | 0x20, 0xE4, 0x7E, 0x58, 0xE6, 0x2E, 0x41, 0xF0, 0x52, 0x0E, | ||
1596 | 0x47, 0xE5, 0x8E, 0x62, 0xE4, 0x1F, 0x15, 0x20, 0xE4, 0x7E, | ||
1597 | 0x58, 0xE6, 0x2E, 0x41, 0xF1, 0x30, 0x0A | ||
1598 | }; | ||
1599 | |||
1600 | const unsigned long spectkey_size = 15887; | ||
1601 | |||
1602 | /* End of spectkey.c */ | ||
diff --git a/apps/plugins/zxbox/spkey.c b/apps/plugins/zxbox/spkey.c new file mode 100644 index 0000000000..28a390ae2e --- /dev/null +++ b/apps/plugins/zxbox/spkey.c | |||
@@ -0,0 +1,983 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* #define DEBUG_KEYS */ | ||
22 | #include "misc.h" | ||
23 | |||
24 | #include "spkey.h" | ||
25 | #include "spkey_p.h" | ||
26 | |||
27 | #include "spperif.h" | ||
28 | #include "z80.h" | ||
29 | |||
30 | #include "sptape.h" | ||
31 | #include "snapshot.h" | ||
32 | #include "spsound.h" | ||
33 | #include "spscr.h" | ||
34 | |||
35 | #include "interf.h" | ||
36 | |||
37 | #include <stdlib.h> | ||
38 | #include <stdio.h> | ||
39 | #include <ctype.h> | ||
40 | |||
41 | int keyboard_type = 0; | ||
42 | |||
43 | /* for kempston support via SK_KP_Up and so on.... */ | ||
44 | int cursor_type = 2; | ||
45 | |||
46 | |||
47 | int spkb_allow_ascii = 1; | ||
48 | int spkb_trueshift = -1; | ||
49 | int spkb_funcshift = -1; | ||
50 | |||
51 | static unsigned trueshift; | ||
52 | static unsigned funcshift; | ||
53 | |||
54 | struct spkeydef { | ||
55 | int type; | ||
56 | spkeyboard kb; | ||
57 | }; | ||
58 | |||
59 | struct spbasekey { | ||
60 | int index; | ||
61 | spkeyboard kb; | ||
62 | spkeyboard misc; | ||
63 | }; | ||
64 | |||
65 | struct spnamedkey { | ||
66 | const char *name; | ||
67 | spkeyboard kb; | ||
68 | spkeyboard misc; | ||
69 | }; | ||
70 | |||
71 | extern int endofsingle; | ||
72 | extern int sp_nosync; | ||
73 | extern int showframe; | ||
74 | extern int privatemap; | ||
75 | |||
76 | spkeyboard spkey_state; | ||
77 | spkeyboard spmisc_state; | ||
78 | |||
79 | static spkeyboard oldstate = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; | ||
80 | |||
81 | struct keystate spkb_kbstate[NR_SPKEYS]; | ||
82 | struct onekey spkb_last; | ||
83 | |||
84 | int spkb_state_changed; | ||
85 | |||
86 | #define SKE {0, 0, 0, 0, 0, 0, 0, 0} | ||
87 | |||
88 | #define SKP(x) (1 << x) | ||
89 | |||
90 | #define SKN0(x) {SKP(x), 0, 0, 0, 0, 0, 0, 0} | ||
91 | #define SKN1(x) {0, SKP(x), 0, 0, 0, 0, 0, 0} | ||
92 | #define SKN2(x) {0, 0, SKP(x), 0, 0, 0, 0, 0} | ||
93 | #define SKN3(x) {0, 0, 0, SKP(x), 0, 0, 0, 0} | ||
94 | #define SKN4(x) {0, 0, 0, 0, SKP(x), 0, 0, 0} | ||
95 | #define SKN5(x) {0, 0, 0, 0, 0, SKP(x), 0, 0} | ||
96 | #define SKN6(x) {0, 0, 0, 0, 0, 0, SKP(x), 0} | ||
97 | #define SKN7(x) {0, 0, 0, 0, 0, 0, 0, SKP(x)} | ||
98 | |||
99 | #define SKCS0(x) {SKP(0) | SKP(x), 0, 0, 0, 0, 0, 0, 0} | ||
100 | #define SKCS1(x) {SKP(0), SKP(x), 0, 0, 0, 0, 0, 0} | ||
101 | #define SKCS2(x) {SKP(0), 0, SKP(x), 0, 0, 0, 0, 0} | ||
102 | #define SKCS3(x) {SKP(0), 0, 0, SKP(x), 0, 0, 0, 0} | ||
103 | #define SKCS4(x) {SKP(0), 0, 0, 0, SKP(x), 0, 0, 0} | ||
104 | #define SKCS5(x) {SKP(0), 0, 0, 0, 0, SKP(x), 0, 0} | ||
105 | #define SKCS6(x) {SKP(0), 0, 0, 0, 0, 0, SKP(x), 0} | ||
106 | #define SKCS7(x) {SKP(0), 0, 0, 0, 0, 0, 0, SKP(x)} | ||
107 | |||
108 | |||
109 | #define SKSS0(x) {SKP(x), 0, 0, 0, 0, 0, 0, SKP(1)} | ||
110 | #define SKSS1(x) {0, SKP(x), 0, 0, 0, 0, 0, SKP(1)} | ||
111 | #define SKSS2(x) {0, 0, SKP(x), 0, 0, 0, 0, SKP(1)} | ||
112 | #define SKSS3(x) {0, 0, 0, SKP(x), 0, 0, 0, SKP(1)} | ||
113 | #define SKSS4(x) {0, 0, 0, 0, SKP(x), 0, 0, SKP(1)} | ||
114 | #define SKSS5(x) {0, 0, 0, 0, 0, SKP(x), 0, SKP(1)} | ||
115 | #define SKSS6(x) {0, 0, 0, 0, 0, 0, SKP(x), SKP(1)} | ||
116 | #define SKSS7(x) {0, 0, 0, 0, 0, 0, 0, SKP(x) | SKP(1)} | ||
117 | |||
118 | |||
119 | #define KEMP(x) {x, 0, 0, 0, 0, 0, 0, 0} | ||
120 | |||
121 | #define KEMPR 0x01 | ||
122 | #define KEMPL 0x02 | ||
123 | #define KEMPD 0x04 | ||
124 | #define KEMPU 0x08 | ||
125 | #define KEMPF 0x10 | ||
126 | |||
127 | #define KEMP_PORT 0x1F | ||
128 | |||
129 | |||
130 | #define T_MAIN 0 | ||
131 | #define T_CMPX 1 | ||
132 | #define T_EXTR 2 | ||
133 | |||
134 | #define SPK_SPACE SKN7(0) | ||
135 | |||
136 | #define SPK_0 SKN4(0) | ||
137 | #define SPK_1 SKN3(0) | ||
138 | #define SPK_2 SKN3(1) | ||
139 | #define SPK_3 SKN3(2) | ||
140 | #define SPK_4 SKN3(3) | ||
141 | #define SPK_5 SKN3(4) | ||
142 | #define SPK_6 SKN4(4) | ||
143 | #define SPK_7 SKN4(3) | ||
144 | #define SPK_8 SKN4(2) | ||
145 | #define SPK_9 SKN4(1) | ||
146 | |||
147 | #define SPK_A SKN1(0) | ||
148 | #define SPK_B SKN7(4) | ||
149 | #define SPK_C SKN0(3) | ||
150 | #define SPK_D SKN1(2) | ||
151 | #define SPK_E SKN2(2) | ||
152 | #define SPK_F SKN1(3) | ||
153 | #define SPK_G SKN1(4) | ||
154 | #define SPK_H SKN6(4) | ||
155 | #define SPK_I SKN5(2) | ||
156 | #define SPK_J SKN6(3) | ||
157 | #define SPK_K SKN6(2) | ||
158 | #define SPK_L SKN6(1) | ||
159 | #define SPK_M SKN7(2) | ||
160 | #define SPK_N SKN7(3) | ||
161 | #define SPK_O SKN5(1) | ||
162 | #define SPK_P SKN5(0) | ||
163 | #define SPK_Q SKN2(0) | ||
164 | #define SPK_R SKN2(3) | ||
165 | #define SPK_S SKN1(1) | ||
166 | #define SPK_T SKN2(4) | ||
167 | #define SPK_U SKN5(3) | ||
168 | #define SPK_V SKN0(4) | ||
169 | #define SPK_W SKN2(1) | ||
170 | #define SPK_X SKN0(2) | ||
171 | #define SPK_Y SKN5(4) | ||
172 | #define SPK_Z SKN0(1) | ||
173 | |||
174 | #define SPK_ENTER SKN6(0) | ||
175 | #define SPK_CAPSSHIFT SKN0(0) | ||
176 | #define SPK_SYMBOLSHIFT SKN7(1) | ||
177 | |||
178 | #define SPK_BS SKCS4(0) | ||
179 | #define SPK_UP SKCS4(3) | ||
180 | #define SPK_DOWN SKCS4(4) | ||
181 | #define SPK_LEFT SKCS3(4) | ||
182 | #define SPK_RIGHT SKCS4(2) | ||
183 | #define SPK_CAPSLOCK SKCS3(1) | ||
184 | #define SPK_EXTRA SKCS7(1) | ||
185 | #define SPK_EDIT SKCS3(0) | ||
186 | |||
187 | static spkeyboard spk_extra = SPK_EXTRA; | ||
188 | |||
189 | static struct spkeydef spkey_ascii[] = { | ||
190 | {T_MAIN, SPK_SPACE}, /* space */ | ||
191 | {T_CMPX, SKSS3(0)}, /* ! */ | ||
192 | {T_CMPX, SKSS5(0)}, /* " */ | ||
193 | {T_CMPX, SKSS3(2)}, /* # */ | ||
194 | {T_CMPX, SKSS3(3)}, /* $ */ | ||
195 | {T_CMPX, SKSS3(4)}, /* % */ | ||
196 | {T_CMPX, SKSS4(4)}, /* & */ | ||
197 | {T_CMPX, SKSS4(3)}, /* ' */ | ||
198 | {T_CMPX, SKSS4(2)}, /* ( */ | ||
199 | {T_CMPX, SKSS4(1)}, /* ) */ | ||
200 | {T_CMPX, SKSS7(4)}, /* * */ | ||
201 | {T_CMPX, SKSS6(2)}, /* + */ | ||
202 | {T_CMPX, SKSS7(3)}, /* , */ | ||
203 | {T_CMPX, SKSS6(3)}, /* - */ | ||
204 | {T_CMPX, SKSS7(2)}, /* . */ | ||
205 | {T_CMPX, SKSS0(4)}, /* / */ | ||
206 | |||
207 | {T_MAIN, SPK_0}, /* 0 */ | ||
208 | {T_MAIN, SPK_1}, /* 1 */ | ||
209 | {T_MAIN, SPK_2}, /* 2 */ | ||
210 | {T_MAIN, SPK_3}, /* 3 */ | ||
211 | {T_MAIN, SPK_4}, /* 4 */ | ||
212 | {T_MAIN, SPK_5}, /* 5 */ | ||
213 | {T_MAIN, SPK_6}, /* 6 */ | ||
214 | {T_MAIN, SPK_7}, /* 7 */ | ||
215 | {T_MAIN, SPK_8}, /* 8 */ | ||
216 | {T_MAIN, SPK_9}, /* 9 */ | ||
217 | |||
218 | {T_CMPX, SKSS0(1)}, /* : */ | ||
219 | {T_CMPX, SKSS5(1)}, /* ; */ | ||
220 | {T_CMPX, SKSS2(3)}, /* < */ | ||
221 | {T_CMPX, SKSS6(1)}, /* = */ | ||
222 | {T_CMPX, SKSS2(4)}, /* > */ | ||
223 | {T_CMPX, SKSS0(3)}, /* ? */ | ||
224 | {T_CMPX, SKSS3(1)}, /* @ */ | ||
225 | |||
226 | {T_CMPX, SKCS1(0)}, /* A */ | ||
227 | {T_CMPX, SKCS7(4)}, /* B */ | ||
228 | {T_CMPX, SKCS0(3)}, /* C */ | ||
229 | {T_CMPX, SKCS1(2)}, /* D */ | ||
230 | {T_CMPX, SKCS2(2)}, /* E */ | ||
231 | {T_CMPX, SKCS1(3)}, /* F */ | ||
232 | {T_CMPX, SKCS1(4)}, /* G */ | ||
233 | {T_CMPX, SKCS6(4)}, /* H */ | ||
234 | {T_CMPX, SKCS5(2)}, /* I */ | ||
235 | {T_CMPX, SKCS6(3)}, /* J */ | ||
236 | {T_CMPX, SKCS6(2)}, /* K */ | ||
237 | {T_CMPX, SKCS6(1)}, /* L */ | ||
238 | {T_CMPX, SKCS7(2)}, /* M */ | ||
239 | {T_CMPX, SKCS7(3)}, /* N */ | ||
240 | {T_CMPX, SKCS5(1)}, /* O */ | ||
241 | {T_CMPX, SKCS5(0)}, /* P */ | ||
242 | {T_CMPX, SKCS2(0)}, /* Q */ | ||
243 | {T_CMPX, SKCS2(3)}, /* R */ | ||
244 | {T_CMPX, SKCS1(1)}, /* S */ | ||
245 | {T_CMPX, SKCS2(4)}, /* T */ | ||
246 | {T_CMPX, SKCS5(3)}, /* U */ | ||
247 | {T_CMPX, SKCS0(4)}, /* V */ | ||
248 | {T_CMPX, SKCS2(1)}, /* W */ | ||
249 | {T_CMPX, SKCS0(2)}, /* X */ | ||
250 | {T_CMPX, SKCS5(4)}, /* Y */ | ||
251 | {T_CMPX, SKCS0(1)}, /* Z */ | ||
252 | |||
253 | {T_EXTR, SKCS5(4)}, /* [ */ | ||
254 | {T_EXTR, SKCS1(2)}, /* backslash */ | ||
255 | {T_EXTR, SKCS5(3)}, /* ] */ | ||
256 | {T_CMPX, SKSS6(4)}, /* ^ */ | ||
257 | {T_CMPX, SKSS4(0)}, /* _ */ | ||
258 | {T_CMPX, SKSS0(2)}, /* ` */ | ||
259 | |||
260 | {T_MAIN, SPK_A}, /* a */ | ||
261 | {T_MAIN, SPK_B}, /* b */ | ||
262 | {T_MAIN, SPK_C}, /* c */ | ||
263 | {T_MAIN, SPK_D}, /* d */ | ||
264 | {T_MAIN, SPK_E}, /* e */ | ||
265 | {T_MAIN, SPK_F}, /* f */ | ||
266 | {T_MAIN, SPK_G}, /* g */ | ||
267 | {T_MAIN, SPK_H}, /* h */ | ||
268 | {T_MAIN, SPK_I}, /* i */ | ||
269 | {T_MAIN, SPK_J}, /* j */ | ||
270 | {T_MAIN, SPK_K}, /* k */ | ||
271 | {T_MAIN, SPK_L}, /* l */ | ||
272 | {T_MAIN, SPK_M}, /* m */ | ||
273 | {T_MAIN, SPK_N}, /* n */ | ||
274 | {T_MAIN, SPK_O}, /* o */ | ||
275 | {T_MAIN, SPK_P}, /* p */ | ||
276 | {T_MAIN, SPK_Q}, /* q */ | ||
277 | {T_MAIN, SPK_R}, /* r */ | ||
278 | {T_MAIN, SPK_S}, /* s */ | ||
279 | {T_MAIN, SPK_T}, /* t */ | ||
280 | {T_MAIN, SPK_U}, /* u */ | ||
281 | {T_MAIN, SPK_V}, /* v */ | ||
282 | {T_MAIN, SPK_W}, /* w */ | ||
283 | {T_MAIN, SPK_X}, /* x */ | ||
284 | {T_MAIN, SPK_Y}, /* y */ | ||
285 | {T_MAIN, SPK_Z}, /* z */ | ||
286 | |||
287 | {T_EXTR, SKCS1(3)}, /* { */ | ||
288 | {T_EXTR, SKCS1(1)}, /* | */ | ||
289 | {T_EXTR, SKCS1(4)}, /* } */ | ||
290 | {T_EXTR, SKCS1(0)}, /* ~ */ | ||
291 | }; | ||
292 | |||
293 | static struct spnamedkey spkey_misc[] = { | ||
294 | {"none", SKE, SKE}, | ||
295 | |||
296 | {"space", SPK_SPACE, SKE}, | ||
297 | {"enter", SPK_ENTER, SKE}, | ||
298 | {"capsshift", SPK_CAPSSHIFT, SKE}, | ||
299 | {"symbolshift", SPK_SYMBOLSHIFT, SKE}, | ||
300 | |||
301 | {"kempston_up", SKE, KEMP(KEMPU)}, | ||
302 | {"kempston_down", SKE, KEMP(KEMPD)}, | ||
303 | {"kempston_left", SKE, KEMP(KEMPL)}, | ||
304 | {"kempston_right", SKE, KEMP(KEMPR)}, | ||
305 | {"kempston_fire", SKE, KEMP(KEMPF)}, | ||
306 | |||
307 | {NULL, SKE, SKE} | ||
308 | }; | ||
309 | |||
310 | #define MAXBASEKEYS 128 | ||
311 | |||
312 | static struct spbasekey basekeys[MAXBASEKEYS]; | ||
313 | static int numbasekeys; | ||
314 | |||
315 | static struct spbasekey customkeys[MAXBASEKEYS]; | ||
316 | static int numcustomkeys = 0; | ||
317 | |||
318 | static struct spbasekey normalkeys[] = { | ||
319 | {'0', SPK_0, SKE}, /* 0 */ | ||
320 | {'1', SPK_1, SKE}, /* 1 */ | ||
321 | {'2', SPK_2, SKE}, /* 2 */ | ||
322 | {'3', SPK_3, SKE}, /* 3 */ | ||
323 | {'4', SPK_4, SKE}, /* 4 */ | ||
324 | {'5', SPK_5, SKE}, /* 5 */ | ||
325 | {'6', SPK_6, SKE}, /* 6 */ | ||
326 | {'7', SPK_7, SKE}, /* 7 */ | ||
327 | {'8', SPK_8, SKE}, /* 8 */ | ||
328 | {'9', SPK_9, SKE}, /* 9 */ | ||
329 | |||
330 | {'a', SPK_A, SKE}, /* a */ | ||
331 | {'b', SPK_B, SKE}, /* b */ | ||
332 | {'c', SPK_C, SKE}, /* c */ | ||
333 | {'d', SPK_D, SKE}, /* d */ | ||
334 | {'e', SPK_E, SKE}, /* e */ | ||
335 | {'f', SPK_F, SKE}, /* f */ | ||
336 | {'g', SPK_G, SKE}, /* g */ | ||
337 | {'h', SPK_H, SKE}, /* h */ | ||
338 | {'i', SPK_I, SKE}, /* i */ | ||
339 | {'j', SPK_J, SKE}, /* j */ | ||
340 | {'k', SPK_K, SKE}, /* k */ | ||
341 | {'l', SPK_L, SKE}, /* l */ | ||
342 | {'m', SPK_M, SKE}, /* m */ | ||
343 | {'n', SPK_N, SKE}, /* n */ | ||
344 | {'o', SPK_O, SKE}, /* o */ | ||
345 | {'p', SPK_P, SKE}, /* p */ | ||
346 | {'q', SPK_Q, SKE}, /* q */ | ||
347 | {'r', SPK_R, SKE}, /* r */ | ||
348 | {'s', SPK_S, SKE}, /* s */ | ||
349 | {'t', SPK_T, SKE}, /* t */ | ||
350 | {'u', SPK_U, SKE}, /* u */ | ||
351 | {'v', SPK_V, SKE}, /* v */ | ||
352 | {'w', SPK_W, SKE}, /* w */ | ||
353 | {'x', SPK_X, SKE}, /* x */ | ||
354 | {'y', SPK_Y, SKE}, /* y */ | ||
355 | {'z', SPK_Z, SKE}, /* z */ | ||
356 | |||
357 | {-1, SKE, SKE} | ||
358 | }; | ||
359 | |||
360 | static struct spbasekey extendedkeys[] = { | ||
361 | {' ', SPK_SPACE, SKE}, /* space */ | ||
362 | {TRKS(SK_Return), SPK_ENTER, SKE}, /* enter */ | ||
363 | {TRKS(SK_KP_Enter), SPK_ENTER, SKE}, | ||
364 | {TRKS(SK_Shift_L), SPK_CAPSSHIFT, SKE}, /* caps shift */ | ||
365 | {TRKS(SK_Shift_R), SPK_SYMBOLSHIFT, SKE}, /* symbol shift */ | ||
366 | {TRKS(SK_BackSpace), SPK_BS, SKE}, /* backspace */ | ||
367 | {TRKS(SK_Delete), SPK_BS, SKE}, | ||
368 | {TRKS(SK_KP_Delete), SPK_BS, SKE}, | ||
369 | {TRKS(SK_Escape), SPK_EDIT, SKE}, /* caps shift + '1' */ | ||
370 | |||
371 | {-1, SKE, SKE} | ||
372 | }; | ||
373 | |||
374 | static struct spbasekey spectrumkeys[] = { | ||
375 | {',', SPK_SYMBOLSHIFT, SKE}, | ||
376 | {'.', SPK_SPACE, SKE}, | ||
377 | {';', SPK_ENTER, SKE}, | ||
378 | |||
379 | {-1, SKE, SKE} | ||
380 | }; | ||
381 | |||
382 | |||
383 | static struct spbasekey compatkeys[] = { | ||
384 | {TRKS(SK_Shift_L), SPK_CAPSSHIFT, SKE}, /* caps shift */ | ||
385 | {TRKS(SK_Shift_R), SPK_CAPSSHIFT, SKE}, | ||
386 | {TRKS(SK_Alt_L), SPK_SYMBOLSHIFT, SKE}, /* symbol shift */ | ||
387 | {TRKS(SK_Alt_R), SPK_SYMBOLSHIFT, SKE}, | ||
388 | {TRKS(SK_Meta_L), SPK_SYMBOLSHIFT, SKE}, | ||
389 | {TRKS(SK_Meta_R), SPK_SYMBOLSHIFT, SKE}, | ||
390 | #if TRUEKOMPAT | ||
391 | {TRKS(SK_Control_L), SPK_EXTRA, SKE}, /* caps shift + symbol shift */ | ||
392 | {TRKS(SK_Control_R), SPK_EXTRA, SKE}, | ||
393 | #endif | ||
394 | |||
395 | {-1, SKE, SKE} | ||
396 | }; | ||
397 | |||
398 | static struct spbasekey shiftedcurs[] = { | ||
399 | {TRKS(SK_Up), SPK_UP, SKE}, /* up */ | ||
400 | {TRKS(SK_KP_Up), SPK_UP, SKE}, | ||
401 | {TRKS(SK_Down), SPK_DOWN, SKE}, /* down */ | ||
402 | {TRKS(SK_KP_Down), SPK_DOWN, SKE}, | ||
403 | {TRKS(SK_Left), SPK_LEFT, SKE}, /* left */ | ||
404 | {TRKS(SK_KP_Left), SPK_LEFT, SKE}, | ||
405 | {TRKS(SK_Right), SPK_RIGHT, SKE}, /* right */ | ||
406 | {TRKS(SK_KP_Right), SPK_RIGHT, SKE}, | ||
407 | |||
408 | {-1, SKE, SKE} | ||
409 | }; | ||
410 | |||
411 | static struct spbasekey rawcurs[] = { | ||
412 | {TRKS(SK_Up), SPK_7, SKE}, /* up */ | ||
413 | {TRKS(SK_KP_Up), SPK_7, SKE}, | ||
414 | {TRKS(SK_Down), SPK_6, SKE}, /* down */ | ||
415 | {TRKS(SK_KP_Down), SPK_6, SKE}, | ||
416 | {TRKS(SK_Left), SPK_5, SKE}, /* left */ | ||
417 | {TRKS(SK_KP_Left), SPK_5, SKE}, | ||
418 | {TRKS(SK_Right), SPK_8, SKE}, /* right */ | ||
419 | {TRKS(SK_KP_Right), SPK_8, SKE}, | ||
420 | |||
421 | {-1, SKE, SKE} | ||
422 | }; | ||
423 | |||
424 | static struct spbasekey joycurs[] = { | ||
425 | {TRKS(SK_Up), SKE, KEMP(KEMPU)}, /* up */ | ||
426 | {TRKS(SK_KP_Up), SKE, KEMP(KEMPU)}, | ||
427 | {TRKS(SK_Down), SKE, KEMP(KEMPD)}, /* down */ | ||
428 | {TRKS(SK_KP_Down), SKE, KEMP(KEMPD)}, | ||
429 | {TRKS(SK_Left), SKE, KEMP(KEMPL)}, /* left */ | ||
430 | {TRKS(SK_KP_Left), SKE, KEMP(KEMPL)}, | ||
431 | {TRKS(SK_Right), SKE, KEMP(KEMPR)}, /* right */ | ||
432 | {TRKS(SK_KP_Right), SKE, KEMP(KEMPR)}, | ||
433 | {TRKS(SK_KP_Insert), SKE, KEMP(KEMPF)}, /* fire */ | ||
434 | {TRKS(SK_Insert), SKE, KEMP(KEMPF)}, | ||
435 | {TRKS(SK_KP_Delete), SKE, KEMP(KEMPF)}, | ||
436 | {TRKS(SK_KP_Home), SKE, KEMP(KEMPU | KEMPL)}, /* up + left*/ | ||
437 | {TRKS(SK_Home), SKE, KEMP(KEMPU | KEMPL)}, | ||
438 | {TRKS(SK_KP_Page_Up), SKE, KEMP(KEMPU | KEMPR)}, /* up + right*/ | ||
439 | {TRKS(SK_Page_Up), SKE, KEMP(KEMPU | KEMPR)}, | ||
440 | {TRKS(SK_KP_End), SKE, KEMP(KEMPD | KEMPL)}, /* down + left*/ | ||
441 | {TRKS(SK_End), SKE, KEMP(KEMPD | KEMPL)}, | ||
442 | {TRKS(SK_KP_Page_Down), SKE, KEMP(KEMPD | KEMPR)}, /* down + right*/ | ||
443 | {TRKS(SK_Page_Down), SKE, KEMP(KEMPD | KEMPR)}, | ||
444 | |||
445 | {-1, SKE, SKE} | ||
446 | }; | ||
447 | |||
448 | int spkey_new_custom(int key) | ||
449 | { | ||
450 | if(numcustomkeys >= MAXBASEKEYS) return 0; | ||
451 | |||
452 | customkeys[numcustomkeys].index = key; | ||
453 | SP_SETEMPTY(customkeys[numcustomkeys].kb); | ||
454 | SP_SETEMPTY(customkeys[numcustomkeys].misc); | ||
455 | numcustomkeys++; | ||
456 | |||
457 | return 1; | ||
458 | } | ||
459 | |||
460 | int spkey_add_custom(const char *name) | ||
461 | { | ||
462 | int curr; | ||
463 | |||
464 | curr = numcustomkeys - 1; | ||
465 | |||
466 | if(!name[1] && isalnum(name[0])) { | ||
467 | int ai; | ||
468 | ai = tolower(name[0])-32; | ||
469 | SP_COMBINE(customkeys[curr].kb, spkey_ascii[ai].kb); | ||
470 | return 1; | ||
471 | } | ||
472 | else { | ||
473 | int i; | ||
474 | |||
475 | for(i = 0; spkey_misc[i].name != NULL; i++) { | ||
476 | if(mis_strcasecmp(spkey_misc[i].name, name) == 0) { | ||
477 | SP_COMBINE(customkeys[curr].kb, spkey_misc[i].kb); | ||
478 | SP_COMBINE(customkeys[curr].misc, spkey_misc[i].misc); | ||
479 | return 1; | ||
480 | } | ||
481 | } | ||
482 | } | ||
483 | return 0; | ||
484 | } | ||
485 | |||
486 | static int key_reset(struct keystate *ck) | ||
487 | { | ||
488 | if(ck->state == 2 && sp_int_ctr >= ck->frame) { | ||
489 | ck->state = 0; | ||
490 | return 1; | ||
491 | } | ||
492 | else return 0; | ||
493 | } | ||
494 | |||
495 | |||
496 | void process_keys(void) | ||
497 | { | ||
498 | int i; | ||
499 | struct keystate *ck; | ||
500 | int tsh; | ||
501 | int kalone; | ||
502 | static int extrai = 0; | ||
503 | static qbyte extraendframe; | ||
504 | |||
505 | if(extrai && !spkb_kbstate[extrai].state) extrai = 0; | ||
506 | |||
507 | if(!spkb_state_changed && (!extrai || !extraendframe)) return; | ||
508 | |||
509 | SP_SETEMPTY(spkey_state); | ||
510 | SP_SETEMPTY(spmisc_state); | ||
511 | |||
512 | kalone = 0; | ||
513 | ck = spkb_kbstate + spkb_last.index; | ||
514 | tsh = spkb_last.modif & trueshift; | ||
515 | key_reset(ck); | ||
516 | |||
517 | |||
518 | if(spkb_allow_ascii && ck->state && (!ck->base || tsh)) { | ||
519 | unsigned ks; | ||
520 | ks = tsh ? spkb_last.shifted : spkb_last.keysym; | ||
521 | if(ks >= 32 && ks < 127) { | ||
522 | if(spkey_ascii[ks-32].type <= T_CMPX) { | ||
523 | SP_COMBINE(spkey_state, spkey_ascii[ks-32].kb); | ||
524 | kalone = 1; | ||
525 | } | ||
526 | else if(spkey_ascii[ks-32].type == T_EXTR) { | ||
527 | if(!extrai || sp_int_ctr < extraendframe) { | ||
528 | if(!extrai) { | ||
529 | extrai = spkb_last.index; | ||
530 | extraendframe = sp_int_ctr + 1; | ||
531 | } | ||
532 | SP_COMBINE(spkey_state, spk_extra); | ||
533 | } | ||
534 | else { | ||
535 | SP_COMBINE(spkey_state, spkey_ascii[ks-32].kb); | ||
536 | extraendframe = 0; | ||
537 | } | ||
538 | kalone = 1; | ||
539 | } | ||
540 | } | ||
541 | } | ||
542 | |||
543 | if(!kalone) { | ||
544 | for(i = 0; i < numbasekeys; i++) { | ||
545 | ck = spkb_kbstate + basekeys[i].index; | ||
546 | key_reset(ck); | ||
547 | if(ck->state) { | ||
548 | SP_COMBINE(spkey_state, basekeys[i].kb); | ||
549 | SP_COMBINE(spmisc_state, basekeys[i].misc); | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | SP_COMBINE(spkey_state, kb_mkey); | ||
554 | |||
555 | spkb_refresh(); | ||
556 | spkb_state_changed = 0; | ||
557 | } | ||
558 | |||
559 | void clear_keystates(void) | ||
560 | { | ||
561 | int i; | ||
562 | for(i = 0; i < NR_SPKEYS; i++) spkb_kbstate[i].state = 0; | ||
563 | spkb_last.index = 0; | ||
564 | SP_SETEMPTY(spkey_state); | ||
565 | SP_SETEMPTY(kb_mkey); | ||
566 | SP_SETEMPTY(spmisc_state); | ||
567 | spkb_refresh(); | ||
568 | } | ||
569 | |||
570 | static void keycpy(struct spbasekey *to, struct spbasekey *from) | ||
571 | { | ||
572 | to->index = from->index; | ||
573 | SP_COPY(to->kb, from->kb); | ||
574 | SP_COPY(to->misc, from->misc); | ||
575 | } | ||
576 | |||
577 | static void copy_key(struct spbasekey *addk) | ||
578 | { | ||
579 | int i; | ||
580 | int nindex; | ||
581 | |||
582 | nindex = addk->index; | ||
583 | |||
584 | if(SP_NONEMPTY(addk->kb) || SP_NONEMPTY(addk->misc)) { | ||
585 | for(i = 0; i < numbasekeys; i++) { | ||
586 | if(basekeys[i].index == nindex) { /* Replace */ | ||
587 | keycpy(&basekeys[i], addk); | ||
588 | return; | ||
589 | } | ||
590 | } | ||
591 | if(numbasekeys < MAXBASEKEYS - 1) { /* Add */ | ||
592 | keycpy(&basekeys[numbasekeys], addk); | ||
593 | spkb_kbstate[nindex].base = 1; | ||
594 | numbasekeys++; | ||
595 | } | ||
596 | } | ||
597 | else { /* Delete */ | ||
598 | for(i = 0; i < numbasekeys; i++) { | ||
599 | if(basekeys[i].index == nindex) { | ||
600 | i++; | ||
601 | for(; i < numbasekeys; i++) keycpy(&basekeys[i-1], &basekeys[i]); | ||
602 | spkb_kbstate[nindex].base = 0; | ||
603 | numbasekeys--; | ||
604 | break; | ||
605 | } | ||
606 | } | ||
607 | } | ||
608 | } | ||
609 | |||
610 | static void copy_basekeys(struct spbasekey *addk) | ||
611 | { | ||
612 | int i; | ||
613 | |||
614 | for(i = 0; addk[i].index >= 0; i++) copy_key(&addk[i]); | ||
615 | } | ||
616 | |||
617 | static unsigned transform_shift(int modif) | ||
618 | { | ||
619 | if(!modif) return 0; | ||
620 | else return (1 << (modif - 1)); | ||
621 | } | ||
622 | |||
623 | |||
624 | void init_basekeys(void) | ||
625 | { | ||
626 | int i; | ||
627 | numbasekeys = 0; | ||
628 | |||
629 | for(i = 0; i < NR_SPKEYS; i++) spkb_kbstate[i].base = 0; | ||
630 | |||
631 | customkeys[numcustomkeys].index = -1; | ||
632 | |||
633 | copy_basekeys(normalkeys); | ||
634 | copy_basekeys(extendedkeys); | ||
635 | copy_basekeys(shiftedcurs); | ||
636 | |||
637 | switch(keyboard_type) { | ||
638 | case 0: | ||
639 | break; | ||
640 | |||
641 | case 1: | ||
642 | copy_basekeys(spectrumkeys); | ||
643 | break; | ||
644 | |||
645 | case 2: | ||
646 | if(spkb_trueshift == -1) spkb_trueshift = 0; | ||
647 | #if TRUEKOMPAT | ||
648 | if(spkb_funcshift == -1) spkb_funcshift = 0; | ||
649 | #endif | ||
650 | |||
651 | copy_basekeys(compatkeys); | ||
652 | break; | ||
653 | |||
654 | case 3: | ||
655 | copy_basekeys(customkeys); | ||
656 | break; | ||
657 | } | ||
658 | |||
659 | switch(cursor_type) { | ||
660 | case 0: | ||
661 | break; | ||
662 | |||
663 | case 1: | ||
664 | copy_basekeys(rawcurs); | ||
665 | break; | ||
666 | |||
667 | case 2: | ||
668 | copy_basekeys(joycurs); | ||
669 | break; | ||
670 | } | ||
671 | |||
672 | if(spkb_trueshift == -1) spkb_trueshift = 4; /* mod1 */ | ||
673 | if(spkb_funcshift == -1) spkb_funcshift = 3; /* control */ | ||
674 | |||
675 | trueshift = transform_shift(spkb_trueshift); | ||
676 | funcshift = transform_shift(spkb_funcshift); | ||
677 | } | ||
678 | |||
679 | |||
680 | void spkb_refresh(void) | ||
681 | { | ||
682 | int port, pb; | ||
683 | int i, j, changed; | ||
684 | byte *km, *kmo; | ||
685 | byte mm; | ||
686 | byte pv; | ||
687 | spkeyboard statemx; | ||
688 | |||
689 | km = spkey_state; | ||
690 | kmo = oldstate; | ||
691 | changed = 0; | ||
692 | for(i = 8; i; i--) { | ||
693 | if(*km != *kmo) *kmo = *km, changed = 1; | ||
694 | km++, kmo++; | ||
695 | } | ||
696 | |||
697 | if(changed) { | ||
698 | |||
699 | /* Matrix behavior: ONLY 1 level, does anybody need more ? */ | ||
700 | |||
701 | for(i = 0; i < 8; i++) { | ||
702 | pv = spkey_state[i]; | ||
703 | mm = pv; | ||
704 | if(pv) { | ||
705 | km = spkey_state; | ||
706 | for(j = 8; j; j--) { | ||
707 | if((*km & pv) & 0x1F) mm |= *km; | ||
708 | km++; | ||
709 | } | ||
710 | } | ||
711 | statemx[i] = mm; | ||
712 | } | ||
713 | |||
714 | for(port = 0; port < 256; port++) { | ||
715 | km = statemx; | ||
716 | pv = 0; | ||
717 | pb = port; | ||
718 | for(i = 8; i; i--) { | ||
719 | if(!(pb & 1)) pv |= *km; | ||
720 | pb >>= 1; | ||
721 | km++; | ||
722 | } | ||
723 | sp_fe_inport_high[port] = | ||
724 | (sp_fe_inport_high[port] | 0x1F) & ~(pv & 0x1F); | ||
725 | } | ||
726 | } | ||
727 | |||
728 | pv = spmisc_state[0]; | ||
729 | |||
730 | if((pv & KEMPR) && (pv & KEMPL)) pv &= ~(KEMPR | KEMPL); | ||
731 | if((pv & KEMPU) && (pv & KEMPD)) pv &= ~(KEMPD | KEMPU); | ||
732 | z80_inports[KEMP_PORT] = pv; | ||
733 | } | ||
734 | |||
735 | |||
736 | |||
737 | |||
738 | #if 0 | ||
739 | static void print_help(int lev) | ||
740 | { | ||
741 | lev=lev; | ||
742 | #if 0 | ||
743 | switch(lev) { | ||
744 | case 0: | ||
745 | printf(" = ZX Spectrum Emulation (C) Szeredi Miklos 1996-98 = \n" | ||
746 | " ----------------------------------------------------------\n" | ||
747 | " Left Shift Spectrum - CAPS SHIFT \n" | ||
748 | " Right Shift Spectrum - SYMBOL SHIFT \n" | ||
749 | " Alt \"True\" Shift \n" | ||
750 | " Ctrl Commands \n" | ||
751 | " ----------------------------------------------------------\n" | ||
752 | " Ctrl-c F10 Quit \n" | ||
753 | " Ctrl-h F1 More help \n" | ||
754 | " Ctrl-t F2 Save snapshot \n" | ||
755 | " Ctrl-l F3 Load snapshot \n" | ||
756 | " Ctrl-p F4 Play tape \n" | ||
757 | " Ctrl-q F5 Reset \n" | ||
758 | " Ctrl-o F6 Pause/unpause tape \n" | ||
759 | " Ctrl-s F7 Stop tape \n" | ||
760 | " Ctrl-f Fast \n" | ||
761 | " Ctrl-n Normal speed \n" | ||
762 | " Ctrl-b Pause/Unpause emulator \n" | ||
763 | " Ctrl-m Toggle sound \n" | ||
764 | " Ctrl-y Toggle quick loading of tapes \n" | ||
765 | " Ctrl-\\ F9 Refresh screen / reset keyboard \n" | ||
766 | " ==========================================================\n"); | ||
767 | break; | ||
768 | |||
769 | case 1: | ||
770 | printf(" = ZX Spectrum Emulation (C) Szeredi Miklos 1996-98 = \n" | ||
771 | " ----------------------------------------------------------\n" | ||
772 | " More help: \n" | ||
773 | " ----------------------------------------------------------\n" | ||
774 | " Ctrl-h F1 Normal help \n" | ||
775 | " Ctrl-k Display (undisplay) keyboard \n" | ||
776 | " Ctrl-w Ctrl-F2 Save temporary snapshot \n" | ||
777 | " Ctrl-e Ctrl-F3 Load temporary snapshot \n" | ||
778 | " Ctrl-r Save to tapefile \n" | ||
779 | " Ctrl-, Reduce screen size (X only) \n" | ||
780 | " Ctrl-. Increase screen size (X only) \n" | ||
781 | " Ctrl-. Toggle private color-map (X only) \n" | ||
782 | " Ctrl-= Decrease frame frequency \n" | ||
783 | " Ctrl-- Increase frame frequency \n" | ||
784 | " Ctrl-] Increase sound buffer size \n" | ||
785 | " Ctrl-[ Decrease sound buffer size \n" | ||
786 | " ==========================================================\n"); | ||
787 | break; | ||
788 | |||
789 | case 2: | ||
790 | printf( | ||
791 | " --------------------------------------------------------------------- \n" | ||
792 | "|BLUE |RED |MAGENT|GREEN |CYAN |YELLOW|WHITE | | |BLACK | \n" | ||
793 | "| 1 ! | 2 @ | 3 # | 4 $ | 5 %% | 6 & | 7 ' | 8 ( | 9 ) | 0 _ | \n" | ||
794 | "|EDIT |CAPS |TRU VD|INV VD| <- | v | ^ | -> |GRAPH |DELETE| \n" | ||
795 | "|DEF FN|FN |LINE |OPEN# |CLOSE#|MOVE |ERASE |POINT |CAT |FORMAT| \n" | ||
796 | " ------------------------------------------------------------------------ \n" | ||
797 | " |SIN |COS |TAN |INT |RND |STR$ |CHR$ |CODE |PEEK |TAB | \n" | ||
798 | " | Q <= | W <> | E >= | R < | T > | Y AND| U OR | I AT | O ; | P \" | \n" | ||
799 | " |PLOT |DRAW |REM |RUN |RAND |RETURN|IF |INPUT |POKE |PRINT | \n" | ||
800 | " |ASN |ACS |ATN |VERIFY|MERGE | [ | ] |IN |OUT |(C) | \n" | ||
801 | " ------------------------------------------------------------------------ \n" | ||
802 | " |READ |RESTOR|DATA |SGN |ABS |SQR |VAL |LEN |USR | |\n" | ||
803 | " |A STOP| S NOT|D STEP| F TO |G THEN| H ^ | J - | K + | L = | |\n" | ||
804 | " |NEW |SAVE |DIM |FOR |GO TO |GO SUB|LOAD |LIST |LET |ENTER|\n" | ||
805 | " | ~ | | | \\ | { | } |CIRCLE|VAL$ |SCRN$ |ATTR | |\n" | ||
806 | " -------------------------------------------------------------------------- \n" | ||
807 | " | |LN |EXP |LPRINT|LLIST |BIN |INKEY$| PI | | | \n" | ||
808 | " | CAPS | Z : | X GBP| C ? | V / | B * | N , | M . |SYMBOL| BREAK | \n" | ||
809 | " | SHIFT |COPY |CLEAR |CONT |CLS |BORDER|NEXT |PAUSE |SHIFT | SPACE | \n" | ||
810 | " | |BEEP |INK |PAPER |FLASH |BRIGHT|OVER |INVERS| | | \n" | ||
811 | " ----------------------------------------------------------------------- \n" | ||
812 | ); | ||
813 | break; | ||
814 | |||
815 | } | ||
816 | /* if(need_switch_mode) { | ||
817 | printf(" Press ENTER to continue! \n"); | ||
818 | while(getchar() != '\n'); | ||
819 | }*/ | ||
820 | #endif | ||
821 | } | ||
822 | #endif | ||
823 | #ifdef DEBUG_Z80 | ||
824 | extern int deb_steps; | ||
825 | #endif | ||
826 | |||
827 | #define CF(x) ((x) + 12) | ||
828 | |||
829 | int spkey_keyfuncs(void) | ||
830 | { | ||
831 | static int help_mode = 0; | ||
832 | int lch; | ||
833 | int new_help_mode; | ||
834 | |||
835 | lch = spkb_last.keysym; | ||
836 | |||
837 | if(!(spkb_last.modif & funcshift) && | ||
838 | (lch < SK_F1 || lch > SK_F12 || | ||
839 | (spkb_last.modif & SKMod1Mask))) return 0; | ||
840 | |||
841 | if(lch >= 'A' && lch <= 'Z') lch += 32; | ||
842 | if((spkb_last.modif & funcshift) && lch >= SK_F1 && lch <= SK_F12) | ||
843 | lch = CF(lch); | ||
844 | |||
845 | new_help_mode = 0; | ||
846 | |||
847 | switch(lch) { | ||
848 | case 'c': | ||
849 | /* case SK_F10: | ||
850 | exit(0);*/ | ||
851 | case 'p': | ||
852 | case SK_F4: | ||
853 | spkey_textmode(); | ||
854 | start_play(); | ||
855 | spkey_screenmode(); | ||
856 | break; | ||
857 | case 'r': | ||
858 | spkey_textmode(); | ||
859 | start_rec(); | ||
860 | spkey_screenmode(); | ||
861 | break; | ||
862 | case 'o': | ||
863 | case SK_F6: | ||
864 | pause_play(); | ||
865 | break; | ||
866 | case 's': | ||
867 | case SK_F7: | ||
868 | stop_play(); | ||
869 | break; | ||
870 | case 'f': | ||
871 | sp_nosync = 1; | ||
872 | sp_paused = 0; | ||
873 | autoclose_sound(); | ||
874 | break; | ||
875 | case 'n': | ||
876 | sp_nosync = 0; | ||
877 | sp_paused = 0; | ||
878 | break; | ||
879 | case 'b': | ||
880 | sp_paused = !sp_paused; | ||
881 | if(sp_paused) clear_keystates(); | ||
882 | /*sprintf(msgbuf, "%s emulator", sp_paused ? "Paused" : "Unpaused"); | ||
883 | put_msg(msgbuf);*/ | ||
884 | /* rb->splash (HZ*2, true,sp_paused ? "Paused" : "Unpaused");*/ | ||
885 | break; | ||
886 | case 'q': | ||
887 | case SK_F5: | ||
888 | z80_reset(); | ||
889 | break; | ||
890 | case 't': | ||
891 | case SK_F2: | ||
892 | spkey_textmode(); | ||
893 | save_snapshot(); | ||
894 | spkey_screenmode(); | ||
895 | break; | ||
896 | case 'l': | ||
897 | case SK_F3: | ||
898 | spkey_textmode(); | ||
899 | load_snapshot(); | ||
900 | spkey_screenmode(); | ||
901 | break; | ||
902 | #ifdef DEBUG_Z80 | ||
903 | case 'v': | ||
904 | deb_steps = 0; | ||
905 | break; | ||
906 | #endif | ||
907 | case '=': | ||
908 | if(showframe < 10) showframe++; | ||
909 | /* sprintf(msgbuf, "showframe: %i", showframe); | ||
910 | put_msg(msgbuf);*/ | ||
911 | break; | ||
912 | case '-': | ||
913 | if(showframe > 1) showframe--; | ||
914 | /* sprintf(msgbuf, "showframe: %i", showframe); | ||
915 | put_msg(msgbuf);*/ | ||
916 | break; | ||
917 | case ']': | ||
918 | if(bufframes < 25) bufframes++; | ||
919 | /* sprintf(msgbuf, "msgbuf, bufframes: %i", bufframes); | ||
920 | put_msg(msgbuf);*/ | ||
921 | setbufsize(); | ||
922 | break; | ||
923 | case '[': | ||
924 | if(bufframes > 1) bufframes--; | ||
925 | /* sprintf(msgbuf, "bufframes: %i", bufframes); | ||
926 | put_msg(msgbuf);*/ | ||
927 | setbufsize(); | ||
928 | break; | ||
929 | case 'm': | ||
930 | sound_on = !sound_on; | ||
931 | /* sprintf(msgbuf, "sound %s", sound_on ? "on" : "off"); | ||
932 | put_msg(msgbuf);*/ | ||
933 | break; | ||
934 | case 'h': | ||
935 | case SK_F1: | ||
936 | /* case SK_Help: | ||
937 | spkey_textmode(); | ||
938 | print_help(help_mode); | ||
939 | spkey_screenmode(); | ||
940 | new_help_mode = 1 - help_mode; | ||
941 | break;*/ | ||
942 | /* case 'k': | ||
943 | spkey_textmode(); | ||
944 | if(!display_keyboard()) print_help(2); | ||
945 | spkey_screenmode(); | ||
946 | break;*/ | ||
947 | case '\\': | ||
948 | case SK_F9: | ||
949 | spscr_refresh_colors(); | ||
950 | /* sp_init_screen_mark(); already donde in prev fn. */ | ||
951 | clear_keystates(); | ||
952 | break; | ||
953 | case '.': | ||
954 | resize_spect_scr(scrmul+1); | ||
955 | break; | ||
956 | case ',': | ||
957 | resize_spect_scr(scrmul-1); | ||
958 | break; | ||
959 | case 'y': | ||
960 | sp_quick_load = !sp_quick_load; | ||
961 | /* sprintf(msgbuf, "Quick load %s", sp_quick_load ? "on" : "off"); | ||
962 | put_msg(msgbuf);*/ | ||
963 | break; | ||
964 | case 'w': | ||
965 | case CF(SK_F2): | ||
966 | save_quick_snapshot(); | ||
967 | break; | ||
968 | case 'e': | ||
969 | case CF(SK_F3): | ||
970 | load_quick_snapshot(); | ||
971 | break; | ||
972 | case 'j': | ||
973 | privatemap = !privatemap; | ||
974 | /* sprintf(msgbuf, "Private colormap %s", privatemap ? "on" : "off"); | ||
975 | put_msg(msgbuf);*/ | ||
976 | spscr_refresh_colors(); | ||
977 | break; | ||
978 | } | ||
979 | |||
980 | help_mode = new_help_mode; | ||
981 | |||
982 | return 1; | ||
983 | } | ||
diff --git a/apps/plugins/zxbox/spkey.h b/apps/plugins/zxbox/spkey.h new file mode 100644 index 0000000000..a61d209471 --- /dev/null +++ b/apps/plugins/zxbox/spkey.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPKEY_H | ||
22 | #define SPKEY_H | ||
23 | |||
24 | extern void spkb_process_events(int evenframe); | ||
25 | extern void init_spect_key(void); | ||
26 | |||
27 | extern int spkey_new_custom(int key); | ||
28 | extern int spkey_add_custom(const char *name); | ||
29 | |||
30 | #endif /* SPKEY_H */ | ||
diff --git a/apps/plugins/zxbox/spkey_p.h b/apps/plugins/zxbox/spkey_p.h new file mode 100644 index 0000000000..e73ef8deaa --- /dev/null +++ b/apps/plugins/zxbox/spkey_p.h | |||
@@ -0,0 +1,217 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPKEY_P_H | ||
22 | #define SPKEY_P_H | ||
23 | |||
24 | #include "z80_type.h" | ||
25 | |||
26 | struct keystate { | ||
27 | dbyte press; | ||
28 | byte state; | ||
29 | byte base; | ||
30 | qbyte frame; | ||
31 | }; | ||
32 | |||
33 | struct onekey { | ||
34 | int index; | ||
35 | unsigned keysym; | ||
36 | unsigned shifted; | ||
37 | unsigned modif; | ||
38 | }; | ||
39 | |||
40 | typedef byte spkeyboard[8]; | ||
41 | |||
42 | #define SPIP(spk, h) (((qbyte *) (spk))[h]) | ||
43 | |||
44 | #define SP_COMBINE(spk1, spk2) \ | ||
45 | SPIP(spk1, 0) |= SPIP(spk2, 0), \ | ||
46 | SPIP(spk1, 1) |= SPIP(spk2, 1) | ||
47 | |||
48 | |||
49 | #define SP_SUBSTRACT(spk1, spk2) \ | ||
50 | SPIP(spk1, 0) &= ~SPIP(spk2, 0), \ | ||
51 | SPIP(spk1, 1) &= ~SPIP(spk2, 1) | ||
52 | |||
53 | |||
54 | #define SP_NONEMPTY(spk) (SPIP(spk, 0) || SPIP(spk, 1)) | ||
55 | |||
56 | #define SP_CONTAINS(spk1, spk2) \ | ||
57 | ((SPIP(spk1, 0) & SPIP(spk2, 0)) || (SPIP(spk1, 1) & SPIP(spk2, 1))) | ||
58 | |||
59 | #define SP_SETEMPTY(spk) \ | ||
60 | SPIP(spk, 0) = 0, \ | ||
61 | SPIP(spk, 1) = 0 | ||
62 | |||
63 | #define SP_COPY(spk1, spk2) \ | ||
64 | SPIP(spk1, 0) = SPIP(spk2, 0), \ | ||
65 | SPIP(spk1, 1) = SPIP(spk2, 1) | ||
66 | |||
67 | |||
68 | #define TRKS(ks) ((ks) - 0xFF00 + 0x100) | ||
69 | #define KS_TO_KEY(ks) \ | ||
70 | (((ks) >= 0x0000 && (ks) <= 0x00FF) ? (int) (ks) : \ | ||
71 | (((ks) >= 0xFF00 && (ks) <= 0xFFFF) ? (int) TRKS(ks) : -1)) | ||
72 | |||
73 | |||
74 | |||
75 | /* These are _accidently_ the same as the XK_ counterparts */ | ||
76 | |||
77 | #define SK_BackSpace 0xFF08 /* back space, back char */ | ||
78 | #define SK_Tab 0xFF09 | ||
79 | #define SK_Linefeed 0xFF0A /* Linefeed, LF */ | ||
80 | #define SK_Clear 0xFF0B | ||
81 | #define SK_Return 0xFF0D /* Return, enter */ | ||
82 | #define SK_Pause 0xFF13 /* Pause, hold */ | ||
83 | #define SK_Scroll_Lock 0xFF14 | ||
84 | #define SK_Sys_Req 0xFF15 | ||
85 | #define SK_Escape 0xFF1B | ||
86 | #define SK_Delete 0xFFFF /* Delete, rubout */ | ||
87 | |||
88 | #define SK_Home 0xFF50 | ||
89 | #define SK_Left 0xFF51 /* Move left, left arrow */ | ||
90 | #define SK_Up 0xFF52 /* Move up, up arrow */ | ||
91 | #define SK_Right 0xFF53 /* Move right, right arrow */ | ||
92 | #define SK_Down 0xFF54 /* Move down, down arrow */ | ||
93 | #define SK_Page_Up 0xFF55 /* Prior, previous */ | ||
94 | #define SK_Page_Down 0xFF56 /* Next */ | ||
95 | #define SK_End 0xFF57 /* EOL */ | ||
96 | #define SK_Begin 0xFF58 /* BOL */ | ||
97 | |||
98 | #define SK_Select 0xFF60 /* Select, mark */ | ||
99 | #define SK_Print 0xFF61 | ||
100 | #define SK_Execute 0xFF62 /* Execute, run, do */ | ||
101 | #define SK_Insert 0xFF63 /* Insert, insert here */ | ||
102 | #define SK_Undo 0xFF65 /* Undo, oops */ | ||
103 | #define SK_Redo 0xFF66 /* redo, again */ | ||
104 | #define SK_Menu 0xFF67 | ||
105 | #define SK_Find 0xFF68 /* Find, search */ | ||
106 | #define SK_Cancel 0xFF69 /* Cancel, stop, abort, exit */ | ||
107 | #define SK_Help 0xFF6A /* Help */ | ||
108 | #define SK_Break 0xFF6B | ||
109 | #define SK_Mode_switch 0xFF7E /* Character set switch */ | ||
110 | #define SK_Num_Lock 0xFF7F | ||
111 | |||
112 | #define SK_KP_Space 0xFF80 /* space */ | ||
113 | #define SK_KP_Tab 0xFF89 | ||
114 | #define SK_KP_Enter 0xFF8D /* enter */ | ||
115 | #define SK_KP_F1 0xFF91 /* PF1, KP_A, ... */ | ||
116 | #define SK_KP_F2 0xFF92 | ||
117 | #define SK_KP_F3 0xFF93 | ||
118 | #define SK_KP_F4 0xFF94 | ||
119 | #define SK_KP_Home 0xFF95 | ||
120 | #define SK_KP_Left 0xFF96 | ||
121 | #define SK_KP_Up 0xFF97 | ||
122 | #define SK_KP_Right 0xFF98 | ||
123 | #define SK_KP_Down 0xFF99 | ||
124 | #define SK_KP_Page_Up 0xFF9A | ||
125 | #define SK_KP_Page_Down 0xFF9B | ||
126 | #define SK_KP_End 0xFF9C | ||
127 | #define SK_KP_Begin 0xFF9D | ||
128 | #define SK_KP_Insert 0xFF9E | ||
129 | #define SK_KP_Delete 0xFF9F | ||
130 | #define SK_KP_Equal 0xFFBD /* equals */ | ||
131 | #define SK_KP_Multiply 0xFFAA | ||
132 | #define SK_KP_Add 0xFFAB | ||
133 | #define SK_KP_Separator 0xFFAC /* separator, often comma */ | ||
134 | #define SK_KP_Subtract 0xFFAD | ||
135 | #define SK_KP_Decimal 0xFFAE | ||
136 | #define SK_KP_Divide 0xFFAF | ||
137 | |||
138 | #define SK_KP_0 0xFFB0 | ||
139 | #define SK_KP_1 0xFFB1 | ||
140 | #define SK_KP_2 0xFFB2 | ||
141 | #define SK_KP_3 0xFFB3 | ||
142 | #define SK_KP_4 0xFFB4 | ||
143 | #define SK_KP_5 0xFFB5 | ||
144 | #define SK_KP_6 0xFFB6 | ||
145 | #define SK_KP_7 0xFFB7 | ||
146 | #define SK_KP_8 0xFFB8 | ||
147 | #define SK_KP_9 0xFFB9 | ||
148 | |||
149 | #define SK_F1 0xFFBE | ||
150 | #define SK_F2 0xFFBF | ||
151 | #define SK_F3 0xFFC0 | ||
152 | #define SK_F4 0xFFC1 | ||
153 | #define SK_F5 0xFFC2 | ||
154 | #define SK_F6 0xFFC3 | ||
155 | #define SK_F7 0xFFC4 | ||
156 | #define SK_F8 0xFFC5 | ||
157 | #define SK_F9 0xFFC6 | ||
158 | #define SK_F10 0xFFC7 | ||
159 | #define SK_F11 0xFFC8 | ||
160 | #define SK_F12 0xFFC9 | ||
161 | |||
162 | #define SK_Shift_L 0xFFE1 /* Left shift */ | ||
163 | #define SK_Shift_R 0xFFE2 /* Right shift */ | ||
164 | #define SK_Control_L 0xFFE3 /* Left control */ | ||
165 | #define SK_Control_R 0xFFE4 /* Right control */ | ||
166 | #define SK_Caps_Lock 0xFFE5 /* Caps lock */ | ||
167 | #define SK_Shift_Lock 0xFFE6 /* Shift lock */ | ||
168 | |||
169 | #define SK_Meta_L 0xFFE7 /* Left meta */ | ||
170 | #define SK_Meta_R 0xFFE8 /* Right meta */ | ||
171 | #define SK_Alt_L 0xFFE9 /* Left alt */ | ||
172 | #define SK_Alt_R 0xFFEA /* Right alt */ | ||
173 | #define SK_Super_L 0xFFEB /* Left super */ | ||
174 | #define SK_Super_R 0xFFEC /* Right super */ | ||
175 | #define SK_Hyper_L 0xFFED /* Left hyper */ | ||
176 | #define SK_Hyper_R 0xFFEE /* Right hyper */ | ||
177 | |||
178 | /* Modifier masks */ | ||
179 | |||
180 | #define SKShiftMask (1<<0) | ||
181 | #define SKLockMask (1<<1) | ||
182 | #define SKControlMask (1<<2) | ||
183 | #define SKMod1Mask (1<<3) | ||
184 | #define SKMod2Mask (1<<4) | ||
185 | #define SKMod3Mask (1<<5) | ||
186 | #define SKMod4Mask (1<<6) | ||
187 | #define SKMod5Mask (1<<7) | ||
188 | |||
189 | |||
190 | #define NR_SPKEYS 512 | ||
191 | |||
192 | #define ISFKEY(ks) ((ks) >= SK_F1 && (ks) <= SK_F12) | ||
193 | |||
194 | extern volatile int accept_keys; | ||
195 | |||
196 | extern qbyte sp_int_ctr; | ||
197 | extern struct keystate spkb_kbstate[]; | ||
198 | extern struct onekey spkb_last; | ||
199 | |||
200 | extern int spkb_state_changed; | ||
201 | |||
202 | extern spkeyboard spkey_state; | ||
203 | extern spkeyboard kb_mkey; | ||
204 | |||
205 | extern void spkey_textmode(void); | ||
206 | extern void spkey_screenmode(void); | ||
207 | |||
208 | extern const int need_switch_mode; | ||
209 | |||
210 | extern int spkey_keyfuncs(void); | ||
211 | extern void spkb_refresh(void); | ||
212 | extern void clear_keystates(void); | ||
213 | extern int display_keyboard(void); | ||
214 | extern void process_keys(void); | ||
215 | extern void init_basekeys(void); | ||
216 | |||
217 | #endif /* SPKEY_P_H */ | ||
diff --git a/apps/plugins/zxbox/spmain.c b/apps/plugins/zxbox/spmain.c new file mode 100644 index 0000000000..2460164e4f --- /dev/null +++ b/apps/plugins/zxbox/spmain.c | |||
@@ -0,0 +1,567 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | #include "misc.h" | ||
21 | #include "zxconfig.h" | ||
22 | #include "lib/configfile.h" | ||
23 | |||
24 | #include "spperif.h" | ||
25 | #include "z80.h" | ||
26 | #include "spmain.h" | ||
27 | #include "sptiming.h" | ||
28 | #include "spscr.h" | ||
29 | #include "spkey_p.h" | ||
30 | #include "spkey.h" | ||
31 | #include "sptape.h" | ||
32 | #include "spsound.h" | ||
33 | #include "snapshot.h" | ||
34 | #include "spver.h" | ||
35 | |||
36 | #include "spconf.h" | ||
37 | |||
38 | #include "interf.h" | ||
39 | |||
40 | |||
41 | #include <stdio.h> | ||
42 | #include <string.h> | ||
43 | #include <stdlib.h> | ||
44 | #include <errno.h> | ||
45 | #ifdef USE_GRAY | ||
46 | #include "../lib/gray.h" | ||
47 | #endif | ||
48 | |||
49 | #include "zxbox_keyb.h" | ||
50 | |||
51 | int endofsingle; | ||
52 | |||
53 | int sp_nosync = 0; | ||
54 | |||
55 | int showframe = 1; | ||
56 | int load_immed = 1; | ||
57 | |||
58 | qbyte sp_int_ctr = 0; | ||
59 | int intkeys[5]; | ||
60 | |||
61 | #ifdef USE_DJGPP | ||
62 | #define DOS | ||
63 | #endif | ||
64 | |||
65 | #define GLOBALCFG "zxbox.cfg" | ||
66 | |||
67 | /* here goes settings hadling */ | ||
68 | |||
69 | /*static struct zxbox_settings settings;*/ | ||
70 | static struct zxbox_settings old_settings; | ||
71 | |||
72 | static char* noyes_options[] = { "No", "Yes" }; | ||
73 | /*static char* kempston_options[] = { "No", "Yes" }; | ||
74 | static char* showfps_options[] = {"No", "Yes"};*/ | ||
75 | |||
76 | static struct configdata config[] = | ||
77 | { | ||
78 | {TYPE_ENUM, 0, 2, &settings.invert_colors, "Invert Colors", noyes_options, NULL}, | ||
79 | {TYPE_ENUM, 0, 2, &settings.kempston, "Map keys to kempston", noyes_options, NULL}, | ||
80 | {TYPE_ENUM, 0, 2, &settings.showfps, "Show Speed", noyes_options, NULL}, | ||
81 | {TYPE_ENUM, 0, 2, &settings.sound, "Sound", noyes_options, NULL}, | ||
82 | {TYPE_INT, 0, 9, &settings.frameskip, "Frameskip", NULL, NULL}, | ||
83 | {TYPE_INT, 1, 10, &settings.volume, "Volume", NULL, NULL}, | ||
84 | {TYPE_STRING, 0, 5, NULL,"Key Mapping", NULL, (char*)&settings.keymap}, | ||
85 | }; | ||
86 | int spcf_read_conf_file(const char *filename) | ||
87 | { | ||
88 | settings.volume = 10; | ||
89 | settings.showfps=1; | ||
90 | settings.keymap[0]='2'; | ||
91 | settings.keymap[1]='w'; | ||
92 | settings.keymap[2]='9'; | ||
93 | settings.keymap[3]='0'; | ||
94 | settings.keymap[4]='z'; | ||
95 | settings.kempston = 1 ; | ||
96 | settings.invert_colors=0; | ||
97 | settings.sound = 0; | ||
98 | settings.frameskip = 0; | ||
99 | |||
100 | |||
101 | configfile_init(rb); | ||
102 | if (configfile_load(filename, config, | ||
103 | sizeof(config)/sizeof(*config), | ||
104 | SETTINGS_MIN_VERSION | ||
105 | ) < 0) | ||
106 | { | ||
107 | /* If the loading failed, save a new config file (as the disk is | ||
108 | already spinning) */ | ||
109 | configfile_save(filename, config, | ||
110 | sizeof(config)/sizeof(*config), | ||
111 | SETTINGS_VERSION); | ||
112 | } | ||
113 | /* Keep a copy of the saved version of the settings - so we can check if | ||
114 | the settings have changed when we quit */ | ||
115 | old_settings = settings; | ||
116 | sound_on = settings.sound; | ||
117 | showframe = settings.frameskip+1; | ||
118 | int i; | ||
119 | for ( i=0 ; i<5 ; i++){ | ||
120 | if (settings.keymap[i] == 'E') | ||
121 | intkeys[i]=SK_KP_Enter; | ||
122 | else if ( settings.keymap[i] == 'S' ) | ||
123 | intkeys[i]=SK_KP_Space; | ||
124 | else | ||
125 | intkeys[i] = (unsigned) settings.keymap[i]; | ||
126 | } | ||
127 | return 1; | ||
128 | } | ||
129 | |||
130 | /* and here it stops (settings loading ;) )*/ | ||
131 | |||
132 | /* set keys */ | ||
133 | static void set_keys(void){ | ||
134 | int m; | ||
135 | char c; | ||
136 | int result; | ||
137 | int menu_quit=0; | ||
138 | static const struct menu_item items[] = { | ||
139 | { "Map Up key", NULL }, | ||
140 | { "Map Down key", NULL }, | ||
141 | { "Map Left key", NULL }, | ||
142 | { "Map Right key", NULL }, | ||
143 | { "Map Fire/Jump key", NULL }, | ||
144 | }; | ||
145 | |||
146 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | ||
147 | NULL, NULL, NULL, NULL); | ||
148 | |||
149 | rb->button_clear_queue(); | ||
150 | |||
151 | while (!menu_quit) { | ||
152 | result=rb->menu_show(m); | ||
153 | |||
154 | switch(result) | ||
155 | { | ||
156 | case 0: | ||
157 | if (!zx_kbd_input((char*) &c)) | ||
158 | { | ||
159 | settings.keymap[0]=c; | ||
160 | } | ||
161 | break; | ||
162 | case 1: | ||
163 | if (!zx_kbd_input((char*) &c)) | ||
164 | { | ||
165 | settings.keymap[1]=c; | ||
166 | } | ||
167 | break; | ||
168 | case 2: | ||
169 | if (!zx_kbd_input((char*) &c)) | ||
170 | { | ||
171 | settings.keymap[2]=c; | ||
172 | } | ||
173 | break; | ||
174 | case 3: | ||
175 | if (!zx_kbd_input((char*) &c)) | ||
176 | { | ||
177 | settings.keymap[3]=c; | ||
178 | } | ||
179 | break; | ||
180 | case 4: | ||
181 | if (!zx_kbd_input((char*) &c)) | ||
182 | { | ||
183 | settings.keymap[4]=c; | ||
184 | } | ||
185 | break; | ||
186 | default: | ||
187 | menu_quit=1; | ||
188 | break; | ||
189 | } | ||
190 | } | ||
191 | |||
192 | rb->menu_exit(m); | ||
193 | } | ||
194 | |||
195 | /* select predefined keymap */ | ||
196 | static void select_keymap(void){ | ||
197 | int m; | ||
198 | int result; | ||
199 | int menu_quit=0; | ||
200 | static const struct menu_item items[] = { | ||
201 | { "2w90z", NULL }, | ||
202 | { "qaopS", NULL }, | ||
203 | { "7658S", NULL }, | ||
204 | }; | ||
205 | |||
206 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | ||
207 | NULL, NULL, NULL, NULL); | ||
208 | |||
209 | rb->button_clear_queue(); | ||
210 | |||
211 | while (!menu_quit) { | ||
212 | result=rb->menu_show(m); | ||
213 | |||
214 | switch(result) | ||
215 | { | ||
216 | case 0: | ||
217 | rb->memcpy ( (void*)&settings.keymap[0] , (void*)items[0].desc , sizeof(items[0].desc)); | ||
218 | menu_quit=1; | ||
219 | break; | ||
220 | case 1: | ||
221 | rb->memcpy ( (void*)&settings.keymap[0] , (void*)items[1].desc , sizeof(items[1].desc)); | ||
222 | menu_quit=1; | ||
223 | break; | ||
224 | case 2: | ||
225 | rb->memcpy ( (void*)&settings.keymap[0] , (void*)items[2].desc , sizeof(items[2].desc)); | ||
226 | menu_quit=1; | ||
227 | break; | ||
228 | default: | ||
229 | menu_quit=1; | ||
230 | break; | ||
231 | } | ||
232 | } | ||
233 | |||
234 | rb->menu_exit(m); | ||
235 | } | ||
236 | |||
237 | /* options menu */ | ||
238 | static void options_menu(void){ | ||
239 | static const struct opt_items no_yes[2] = { | ||
240 | { "No", NULL }, | ||
241 | { "Yes", NULL }, | ||
242 | }; | ||
243 | int m; | ||
244 | int result; | ||
245 | int menu_quit=0; | ||
246 | int new_setting; | ||
247 | static const struct menu_item items[] = { | ||
248 | { "Map Keys to kempston", NULL }, | ||
249 | { "Display Speed", NULL }, | ||
250 | { "Invert Colors", NULL }, | ||
251 | { "Frameskip", NULL }, | ||
252 | { "Sound", NULL }, | ||
253 | { "Volume", NULL }, | ||
254 | { "Predefined keymap", NULL }, | ||
255 | { "Custom keymap", NULL }, | ||
256 | }; | ||
257 | static struct opt_items frameskip_items[] = { | ||
258 | { "0", NULL }, | ||
259 | { "1", NULL }, | ||
260 | { "2", NULL }, | ||
261 | { "3", NULL }, | ||
262 | { "4", NULL }, | ||
263 | { "5", NULL }, | ||
264 | { "6", NULL }, | ||
265 | { "7", NULL }, | ||
266 | { "8", NULL }, | ||
267 | { "9", NULL }, | ||
268 | }; | ||
269 | |||
270 | |||
271 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | ||
272 | NULL, NULL, NULL, NULL); | ||
273 | |||
274 | rb->button_clear_queue(); | ||
275 | |||
276 | while (!menu_quit) { | ||
277 | result=rb->menu_show(m); | ||
278 | |||
279 | switch(result) | ||
280 | { | ||
281 | case 0: | ||
282 | new_setting=settings.kempston; | ||
283 | rb->set_option("Map Keys to kempston",&new_setting,INT, | ||
284 | no_yes, 2, NULL); | ||
285 | if (new_setting != settings.kempston ) | ||
286 | settings.kempston=new_setting; | ||
287 | break; | ||
288 | case 1: | ||
289 | new_setting = settings.showfps; | ||
290 | rb->set_option("Display Speed",&new_setting,INT, | ||
291 | no_yes, 2, NULL); | ||
292 | if (new_setting != settings.showfps ) | ||
293 | settings.showfps=new_setting; | ||
294 | break; | ||
295 | case 2: | ||
296 | new_setting = settings.invert_colors; | ||
297 | rb->set_option("Invert Colors",&new_setting,INT, | ||
298 | no_yes, 2, NULL); | ||
299 | if (new_setting != settings.invert_colors ) | ||
300 | settings.invert_colors=new_setting; | ||
301 | rb->splash(HZ, true , "Restart to see effect"); | ||
302 | break; | ||
303 | case 3: | ||
304 | new_setting = settings.frameskip; | ||
305 | rb->set_option("Frameskip",&new_setting,INT, | ||
306 | frameskip_items, 10, NULL); | ||
307 | if (new_setting != settings.frameskip ) | ||
308 | settings.frameskip=new_setting; | ||
309 | break; | ||
310 | case 4: | ||
311 | new_setting = settings.sound; | ||
312 | rb->set_option("Sound",&new_setting,INT, | ||
313 | no_yes, 2, NULL); | ||
314 | if (new_setting != settings.sound ) | ||
315 | settings.sound=new_setting; | ||
316 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
317 | rb->pcm_play_stop(); | ||
318 | #endif | ||
319 | break; | ||
320 | case 5: | ||
321 | new_setting = 9 - settings.volume; | ||
322 | rb->set_option("Volume",&new_setting,INT, | ||
323 | frameskip_items, 10, NULL); | ||
324 | new_setting = 9 - new_setting; | ||
325 | if (new_setting != settings.volume ) | ||
326 | settings.volume=new_setting; | ||
327 | break; | ||
328 | case 6: | ||
329 | select_keymap(); | ||
330 | break; | ||
331 | case 7: | ||
332 | set_keys(); | ||
333 | break; | ||
334 | default: | ||
335 | menu_quit=1; | ||
336 | break; | ||
337 | } | ||
338 | } | ||
339 | |||
340 | rb->menu_exit(m); | ||
341 | } | ||
342 | |||
343 | /* menu */ | ||
344 | static bool zxbox_menu(void) | ||
345 | { | ||
346 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
347 | rb->pcm_play_stop(); | ||
348 | #endif | ||
349 | int m; | ||
350 | int result; | ||
351 | int menu_quit=0; | ||
352 | int exit=0; | ||
353 | char c; | ||
354 | static const struct menu_item items[] = { | ||
355 | { "VKeyboard", NULL }, | ||
356 | { "Play/Pause Tape", NULL }, | ||
357 | { "Save Snapshot", NULL }, | ||
358 | { "Toggle \"fast\" mode", NULL }, | ||
359 | { "Options", NULL }, | ||
360 | { "Quit", NULL }, | ||
361 | }; | ||
362 | |||
363 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | ||
364 | NULL, NULL, NULL, NULL); | ||
365 | |||
366 | rb->button_clear_queue(); | ||
367 | |||
368 | while (!menu_quit) { | ||
369 | result=rb->menu_show(m); | ||
370 | |||
371 | switch(result) | ||
372 | { | ||
373 | case 0: | ||
374 | if (!zx_kbd_input((char*) &c)) | ||
375 | { | ||
376 | press_key(c); | ||
377 | } | ||
378 | clear_kbd=1; | ||
379 | menu_quit=1; | ||
380 | break; | ||
381 | case 1: | ||
382 | pause_play(); | ||
383 | /* SPNM(load_trapped) = 1; | ||
384 | DANM(haltstate) = 1; | ||
385 | DANM(tc) = 0;*/ | ||
386 | menu_quit=1; | ||
387 | break; | ||
388 | case 2: | ||
389 | save_snapshot(); | ||
390 | break; | ||
391 | case 3: | ||
392 | sp_nosync=!sp_nosync; | ||
393 | menu_quit=1; | ||
394 | break; | ||
395 | case 4: | ||
396 | options_menu(); | ||
397 | break; | ||
398 | case 5: | ||
399 | menu_quit=1; | ||
400 | exit=1; | ||
401 | break; | ||
402 | default: | ||
403 | menu_quit=1; | ||
404 | break; | ||
405 | } | ||
406 | } | ||
407 | |||
408 | rb->menu_exit(m); | ||
409 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
410 | rb->cpu_boost(true); | ||
411 | #endif | ||
412 | |||
413 | int i; | ||
414 | for ( i=0 ; i<5 ; i++){ | ||
415 | if (settings.keymap[i] == 'E') | ||
416 | intkeys[i]=SK_KP_Enter; | ||
417 | else if ( settings.keymap[i] == 'S' ) | ||
418 | intkeys[i]=SK_KP_Space; | ||
419 | else | ||
420 | intkeys[i] = (unsigned) settings.keymap[i]; | ||
421 | } | ||
422 | #ifdef USE_GRAY | ||
423 | gray_show(true); | ||
424 | #endif | ||
425 | return (exit); | ||
426 | } | ||
427 | |||
428 | |||
429 | /* */ | ||
430 | extern unsigned char loadim[]; | ||
431 | extern unsigned long loadim_size; | ||
432 | |||
433 | #define SHOW_OFFS 1 | ||
434 | |||
435 | static void update(void) | ||
436 | { | ||
437 | update_screen(); | ||
438 | sp_border_update >>= 1; | ||
439 | sp_imag_vert = sp_imag_horiz = 0; | ||
440 | } | ||
441 | |||
442 | static void run_singlemode(void) | ||
443 | { | ||
444 | int t = 0; | ||
445 | int evenframe, halfsec, updateframe; | ||
446 | |||
447 | sp_int_ctr = 0; | ||
448 | endofsingle = 0; | ||
449 | spti_reset(); | ||
450 | |||
451 | while(!endofsingle) { | ||
452 | video_frames++; | ||
453 | if (clear_kbd){ | ||
454 | clear_keystates(); | ||
455 | clear_kbd=0; | ||
456 | } | ||
457 | if(exit_requested){ | ||
458 | if (zxbox_menu()){ | ||
459 | /* Save the user settings if they have changed */ | ||
460 | if (rb->memcmp(&settings,&old_settings,sizeof(settings))!=0) { | ||
461 | #ifdef USE_GRAY | ||
462 | gray_show(false); | ||
463 | #endif | ||
464 | rb->splash(0,true,"Saving settings..."); | ||
465 | configfile_save(GLOBALCFG, config,sizeof(config)/sizeof(*config),SETTINGS_VERSION); | ||
466 | } | ||
467 | |||
468 | return; | ||
469 | } | ||
470 | exit_requested = 0; | ||
471 | video_frames=-1; | ||
472 | start_time = *rb->current_tick; | ||
473 | sound_on = settings.sound; | ||
474 | showframe = settings.frameskip+1; | ||
475 | spti_reset(); | ||
476 | } | ||
477 | if(sp_paused) { | ||
478 | autoclose_sound(); | ||
479 | while(sp_paused) { | ||
480 | spkb_process_events(1); | ||
481 | spti_sleep(SKIPTICKS); | ||
482 | translate_screen(); | ||
483 | update(); | ||
484 | } | ||
485 | spti_reset(); | ||
486 | } | ||
487 | halfsec = !(sp_int_ctr % 25); | ||
488 | evenframe = !(sp_int_ctr & 1); | ||
489 | |||
490 | if(screen_visible) updateframe = sp_nosync ? halfsec : | ||
491 | !((sp_int_ctr+SHOW_OFFS) % showframe); | ||
492 | else updateframe = 0; | ||
493 | if(halfsec) { | ||
494 | sp_flash_state = ~sp_flash_state; | ||
495 | flash_change(); | ||
496 | } | ||
497 | if(evenframe) { | ||
498 | play_tape(); | ||
499 | sp_scline = 0; | ||
500 | } | ||
501 | spkb_process_events(evenframe); | ||
502 | sp_updating = updateframe; | ||
503 | t += CHKTICK; | ||
504 | t = sp_halfframe(t, evenframe ? EVENHF : ODDHF); | ||
505 | if(SPNM(load_trapped)) { | ||
506 | SPNM(load_trapped) = 0; | ||
507 | DANM(haltstate) = 0; | ||
508 | qload(); | ||
509 | } | ||
510 | z80_interrupt(0xFF); | ||
511 | sp_int_ctr++; | ||
512 | if(!evenframe) rec_tape(); | ||
513 | if(!sp_nosync) { | ||
514 | if(!sound_avail) spti_wait(); | ||
515 | |||
516 | if(updateframe) update(); | ||
517 | play_sound(evenframe); | ||
518 | } | ||
519 | else if(updateframe) update(); | ||
520 | } | ||
521 | |||
522 | } | ||
523 | |||
524 | |||
525 | void check_params(void* parameter) | ||
526 | { | ||
527 | spcf_read_conf_file(GLOBALCFG); | ||
528 | spcf_read_command_line(parameter); | ||
529 | } | ||
530 | |||
531 | static void init_load(void *parameter) | ||
532 | { | ||
533 | if(load_immed) snsh_z80_load_intern(loadim, loadim_size); | ||
534 | |||
535 | check_params (parameter); | ||
536 | if(spcf_init_snapshot != NULL) { | ||
537 | #ifndef USE_GRAY | ||
538 | rb->splash(HZ,true, "Loading snapshot '%s'", spcf_init_snapshot); | ||
539 | #endif | ||
540 | |||
541 | load_snapshot_file_type(spcf_init_snapshot, spcf_init_snapshot_type); | ||
542 | free_string(spcf_init_snapshot); | ||
543 | } | ||
544 | |||
545 | if(spcf_init_tapefile != NULL) { | ||
546 | /*sprintf(msgbuf, "Loading tape '%s'", spcf_init_tapefile); | ||
547 | put_msg(msgbuf);*/ | ||
548 | start_play_file_type(spcf_init_tapefile, 0, spcf_init_tapefile_type); | ||
549 | if(!load_immed) pause_play(); | ||
550 | free_string(spcf_init_tapefile); | ||
551 | } | ||
552 | } | ||
553 | |||
554 | void start_spectemu(void *parameter) | ||
555 | { | ||
556 | spti_init(); | ||
557 | init_load(parameter); | ||
558 | init_spect_scr(); | ||
559 | init_spect_sound(); | ||
560 | init_spect_key(); | ||
561 | |||
562 | run_singlemode(); | ||
563 | } | ||
564 | |||
565 | |||
566 | |||
567 | |||
diff --git a/apps/plugins/zxbox/spmain.h b/apps/plugins/zxbox/spmain.h new file mode 100644 index 0000000000..8168b261f6 --- /dev/null +++ b/apps/plugins/zxbox/spmain.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPMAIN_H | ||
22 | #define SPMAIN_H | ||
23 | |||
24 | extern void check_params(void* parameter); | ||
25 | extern void start_spectemu(void* parameter); | ||
26 | extern struct zxbox_settings settings; | ||
27 | struct zxbox_settings { | ||
28 | int invert_colors; | ||
29 | int kempston; | ||
30 | char keymap[5]; | ||
31 | int showfps; | ||
32 | int volume; | ||
33 | int sound; | ||
34 | int frameskip; | ||
35 | }; | ||
36 | |||
37 | #endif /* SPMAIN_H */ | ||
diff --git a/apps/plugins/zxbox/spperif.c b/apps/plugins/zxbox/spperif.c new file mode 100644 index 0000000000..6255ba689a --- /dev/null +++ b/apps/plugins/zxbox/spperif.c | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "spperif.h" | ||
22 | #include "z80.h" | ||
23 | |||
24 | extern unsigned char rom_imag[]; | ||
25 | |||
26 | int SPNM(quick_load) = 1; | ||
27 | int SPNM(load_trapped); | ||
28 | |||
29 | qbyte SPNM(scr_mark)[SCRMARK_SIZE]; | ||
30 | byte SPNM(fe_inport_high)[256]; | ||
31 | |||
32 | int SPNM(scline); | ||
33 | |||
34 | |||
35 | unsigned char SPNM(colors)[16]; | ||
36 | |||
37 | int SPNM(flash_state); | ||
38 | |||
39 | qbyte *SPNM(scr_f0_table); | ||
40 | qbyte *SPNM(scr_f1_table); | ||
41 | |||
42 | byte SPNM(tape_impinfo)[PORT_TIME_NUM]; | ||
43 | byte SPNM(fe_inport_default); | ||
44 | byte SPNM(fe_outport_time)[PORT_TIME_NUM]; | ||
45 | byte SPNM(sound_buf)[PORT_TIME_NUM]; | ||
46 | signed char SPNM(tape_sound)[TMNUM]; | ||
47 | int SPNM(scri)[PORT_TIME_NUM]; | ||
48 | int SPNM(coli)[PORT_TIME_NUM]; | ||
49 | |||
50 | int SPNM(playing_tape) = 0; | ||
51 | int SPNM(paused) = 0; | ||
52 | |||
53 | char *SPNM(image); | ||
54 | int SPNM(updating); | ||
55 | qbyte SPNM(imag_mark)[192]; | ||
56 | qbyte SPNM(imag_horiz); | ||
57 | qbyte SPNM(imag_vert); | ||
58 | int SPNM(border_update); | ||
59 | int SPNM(lastborder); | ||
60 | |||
61 | void SPNM(init_screen_mark)(void) | ||
62 | { | ||
63 | int i; | ||
64 | |||
65 | for(i = 0x200; i < 0x2D8; i++) SPNM(scr_mark)[i] = ~((qbyte) 0); | ||
66 | |||
67 | SPNM(border_update) = 1; | ||
68 | } | ||
69 | |||
70 | void SPNM(init)(void) | ||
71 | { | ||
72 | int i; | ||
73 | |||
74 | PRNM(init)(); | ||
75 | PRNM(reset)(); | ||
76 | |||
77 | SPNM(load_trapped) = 0; | ||
78 | |||
79 | for(i = 0; i < PORTNUM; i++) PRNM(inports)[i] = 0x00; | ||
80 | |||
81 | DANM(inport_mask) = 0x20; | ||
82 | /* TODO: Kempston is always present, this is not nice */ | ||
83 | |||
84 | SPNM(fe_inport_default) = 0xBF; /* Issue 3 */ | ||
85 | |||
86 | DANM(ula_outport) = 0xFF; | ||
87 | |||
88 | for(i = 0; i < 256; i++) SPNM(fe_inport_high)[i] = 0xFF; | ||
89 | |||
90 | for(i = 0; i < PORT_TIME_NUM; i++) SPNM(tape_impinfo)[i] = 0; | ||
91 | DANM(imp_change) = 0; | ||
92 | DANM(ula_inport) = SPNM(fe_inport_default); | ||
93 | |||
94 | SPNM(scline) = 0; | ||
95 | |||
96 | for(i = 0; i < 0x4000; i++) PRNM(proc).mem[i] = rom_imag[i]; | ||
97 | |||
98 | SPNM(init_screen_mark)(); | ||
99 | } | ||
diff --git a/apps/plugins/zxbox/spperif.h b/apps/plugins/zxbox/spperif.h new file mode 100644 index 0000000000..cb0d550072 --- /dev/null +++ b/apps/plugins/zxbox/spperif.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPPERIF_H | ||
22 | #define SPPERIF_H | ||
23 | |||
24 | #ifndef COMPARISON | ||
25 | #define SPNM(x) sp_ ## x | ||
26 | #else | ||
27 | #define SPNM(x) spx_ ## x | ||
28 | #endif | ||
29 | |||
30 | #include "z80_type.h" | ||
31 | |||
32 | #define ST 140000 | ||
33 | #define CHKTICK 224 | ||
34 | |||
35 | /* #define TMNUM (ST / CHKTICK) */ | ||
36 | |||
37 | #if 0 | ||
38 | # define TMNUM 625 | ||
39 | # define EVENHF 313 | ||
40 | # define ODDHF 312 | ||
41 | #else | ||
42 | # define TMNUM 624 | ||
43 | # define EVENHF 312 | ||
44 | # define ODDHF 312 | ||
45 | #endif | ||
46 | |||
47 | |||
48 | #define LOAD_DI 0x0559 | ||
49 | #define SA_LD_RET 0x053F | ||
50 | |||
51 | extern int SPNM(quick_load); | ||
52 | extern int SPNM(load_trapped); | ||
53 | |||
54 | #define SCRMARK_SIZE 2048 | ||
55 | extern qbyte SPNM(scr_mark)[]; | ||
56 | extern byte SPNM(fe_inport_high)[]; | ||
57 | extern int SPNM(playing_tape); | ||
58 | extern int SPNM(paused); | ||
59 | |||
60 | extern int SPNM(scline); | ||
61 | |||
62 | extern unsigned char SPNM(colors)[]; | ||
63 | |||
64 | extern int SPNM(flash_state); | ||
65 | |||
66 | extern qbyte *SPNM(scr_f0_table); | ||
67 | extern qbyte *SPNM(scr_f1_table); | ||
68 | |||
69 | extern int SPNM(scri)[]; | ||
70 | extern int SPNM(coli)[]; | ||
71 | |||
72 | #define PORT_TIME_NUM 1024 | ||
73 | extern byte SPNM(tape_impinfo)[]; | ||
74 | extern byte SPNM(fe_inport_default); | ||
75 | extern byte SPNM(fe_outport_time)[]; | ||
76 | extern signed char SPNM(tape_sound)[]; | ||
77 | extern byte SPNM(sound_buf)[]; | ||
78 | |||
79 | |||
80 | extern char *SPNM(image); | ||
81 | extern int SPNM(updating); | ||
82 | extern qbyte SPNM(imag_mark)[]; | ||
83 | extern qbyte SPNM(imag_horiz); | ||
84 | extern qbyte SPNM(imag_vert); | ||
85 | extern int SPNM(border_update); | ||
86 | extern int SPNM(lastborder); | ||
87 | |||
88 | extern void SPNM(init_screen_mark)(void); | ||
89 | extern void SPNM(init)(void); | ||
90 | extern int SPNM(halfframe)(int firsttick, int numlines); | ||
91 | |||
92 | #endif /* SPPERIF_H */ | ||
diff --git a/apps/plugins/zxbox/spscr.c b/apps/plugins/zxbox/spscr.c new file mode 100644 index 0000000000..4cae8654ae --- /dev/null +++ b/apps/plugins/zxbox/spscr.c | |||
@@ -0,0 +1,270 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "spscr_p.h" | ||
22 | #include "spscr.h" | ||
23 | |||
24 | #include "spperif.h" | ||
25 | #include "z80.h" | ||
26 | |||
27 | |||
28 | #include <stdlib.h> | ||
29 | #include <stdio.h> | ||
30 | |||
31 | int color_type = 0; | ||
32 | |||
33 | #define N0 0x04 | ||
34 | #define N1 0x34 | ||
35 | |||
36 | #define B0 0x08 | ||
37 | #define B1 0x3F | ||
38 | |||
39 | |||
40 | struct rgb *spscr_crgb; | ||
41 | |||
42 | static struct rgb norm_colors[COLORNUM]={ | ||
43 | {0,0,0},{N0,N0,N1},{N1,N0,N0},{N1,N0,N1}, | ||
44 | {N0,N1,N0},{N0,N1,N1},{N1,N1,N0},{N1,N1,N1}, | ||
45 | |||
46 | {0x15,0x15,0x15},{B0,B0,B1},{B1,B0,B0},{B1,B0,B1}, | ||
47 | {B0,B1,B0},{B0,B1,B1},{B1,B1,B0},{B1,B1,B1} | ||
48 | }; | ||
49 | |||
50 | static struct rgb gray_colors[COLORNUM]={ | ||
51 | {0,0,0},{20,20,20},{26,26,26},{32,32,32}, | ||
52 | {38,38,38},{44,44,44},{50,50,50},{56,56,56}, | ||
53 | |||
54 | {16,16,16},{23,23,23},{30,30,30},{36,36,36}, | ||
55 | {43,43,43},{50,50,50},{56,56,56},{63,63,63} | ||
56 | }; | ||
57 | |||
58 | struct rgb custom_colors[COLORNUM]={ | ||
59 | {0,0,0},{N0,N0,N1},{N1,N0,N0},{N1,N0,N1}, | ||
60 | {N0,N1,N0},{N0,N1,N1},{N1,N1,N0},{N1,N1,N1}, | ||
61 | |||
62 | {0x15,0x15,0x15},{B0,B0,B1},{B1,B0,B0},{B1,B0,B1}, | ||
63 | {B0,B1,B0},{B0,B1,B1},{B1,B1,B0},{B1,B1,B1} | ||
64 | }; | ||
65 | |||
66 | |||
67 | #define TABOFFS 2 | ||
68 | |||
69 | volatile int screen_visible = 1; | ||
70 | volatile int accept_keys = 1; | ||
71 | |||
72 | |||
73 | byte *update_screen_line(byte *scrp, int coli, int scri, int border, | ||
74 | qbyte *cmarkp) | ||
75 | { | ||
76 | qbyte *scrptr; | ||
77 | qbyte brd_color; | ||
78 | int i; | ||
79 | qbyte *tmptr, *mptr; | ||
80 | qbyte mark, cmark; | ||
81 | |||
82 | cmark = *cmarkp; | ||
83 | scrptr = (qbyte *) scrp; | ||
84 | if(scri >= 0) { /* normal line */ | ||
85 | if(SPNM(border_update)) { | ||
86 | brd_color = SPNM(colors)[border]; | ||
87 | brd_color |= brd_color << 8; | ||
88 | brd_color |= brd_color << 16; | ||
89 | for(i = 8; i; i--) *scrptr++ = brd_color; | ||
90 | scrptr += 0x40; | ||
91 | for(i = 8; i; i--) *scrptr++ = brd_color; | ||
92 | scrptr -= 0x48; | ||
93 | } | ||
94 | else scrptr += 0x08; | ||
95 | tmptr = SPNM(scr_mark) + 0x2C0 + (coli >> 3); | ||
96 | mark = *tmptr; | ||
97 | if(!(coli & 0x07)) { | ||
98 | cmark = mark; | ||
99 | *tmptr = 0; | ||
100 | } | ||
101 | else cmark |= mark; | ||
102 | mptr = SPNM(scr_mark) + scri; | ||
103 | |||
104 | mark = *mptr | cmark; | ||
105 | if(mark) { | ||
106 | byte *spmp, *spcp; | ||
107 | qbyte *scr_tab; | ||
108 | |||
109 | *mptr = 0; | ||
110 | SPNM(imag_mark)[coli] |= mark; | ||
111 | SPNM(imag_horiz) |= mark; | ||
112 | coli >>= 3; | ||
113 | SPNM(imag_vert) |= (1 << coli); | ||
114 | |||
115 | spmp = PRNM(proc).mem + (scri << 5); | ||
116 | spcp = PRNM(proc).mem + 0x5800 + (coli << 5); | ||
117 | |||
118 | if(!SPNM(flash_state)) scr_tab = SPNM(scr_f0_table); | ||
119 | else scr_tab = SPNM(scr_f1_table); | ||
120 | for(i = 32; i; i--) { | ||
121 | register dbyte spcx, spmx; | ||
122 | spcx = (*spcp++) << 6; | ||
123 | spmx = *spmp++; | ||
124 | *scrptr++ = scr_tab[spcx|((spmx & 0xf0) >> 4)]; | ||
125 | *scrptr++ = scr_tab[spcx|((spmx & 0x0f))]; | ||
126 | } | ||
127 | scrptr +=0x08; | ||
128 | } | ||
129 | else scrptr += 0x48; | ||
130 | } | ||
131 | else if(scri == -1) { /* only border */ | ||
132 | if(SPNM(border_update)) { | ||
133 | brd_color = SPNM(colors)[border]; | ||
134 | brd_color |= brd_color << 8; | ||
135 | brd_color |= brd_color << 16; | ||
136 | for(i = 0x50; i; i--) *scrptr++ = brd_color; | ||
137 | } | ||
138 | else scrptr += 0x50; | ||
139 | } | ||
140 | |||
141 | *cmarkp = cmark; | ||
142 | return (byte *) scrptr; | ||
143 | } | ||
144 | |||
145 | void translate_screen(void) | ||
146 | { | ||
147 | int border, scline; | ||
148 | byte *scrptr; | ||
149 | qbyte cmark = 0; | ||
150 | |||
151 | scrptr = (byte *) SPNM(image); | ||
152 | |||
153 | border = DANM(ula_outport) & 0x07; | ||
154 | if(border != SPNM(lastborder)) { | ||
155 | SPNM(border_update) = 2; | ||
156 | SPNM(lastborder) = border; | ||
157 | } | ||
158 | |||
159 | for(scline = 0; scline < (TMNUM / 2); scline++) | ||
160 | scrptr = update_screen_line(scrptr, SPNM(coli)[scline], SPNM(scri)[scline], | ||
161 | border, &cmark); | ||
162 | |||
163 | } | ||
164 | |||
165 | |||
166 | void spscr_init_mask_color(void) | ||
167 | { | ||
168 | int clb; | ||
169 | int bwb; | ||
170 | int hb; | ||
171 | int ix, j; | ||
172 | int bc, fc; | ||
173 | byte *tab_f0, *tab_f1; | ||
174 | |||
175 | sp_scr_f0_table = (qbyte *) (PRNM(proc).mem + 0x10000); | ||
176 | sp_scr_f1_table = (qbyte *) (PRNM(proc).mem + 0x20000); | ||
177 | |||
178 | sp_colors[8] = sp_colors[0]; | ||
179 | |||
180 | for(clb = 0; clb < 256; clb++) | ||
181 | for(hb = 0; hb < 16; hb++) { | ||
182 | |||
183 | bc = (clb & 0x38) >> 3; | ||
184 | fc = clb & 0x07; | ||
185 | |||
186 | if(clb & 0x40) { | ||
187 | fc |= 0x08; | ||
188 | bc |= 0x08; | ||
189 | } | ||
190 | bwb = hb; | ||
191 | |||
192 | ix = (clb << 8) + (hb << TABOFFS); | ||
193 | tab_f0 = ((byte *) sp_scr_f0_table) + ix + 3; | ||
194 | tab_f1 = ((byte *) sp_scr_f1_table) + ix + 3; | ||
195 | |||
196 | for(j = 4; j; bwb >>= 1, j--) { | ||
197 | *tab_f0-- = (byte) sp_colors[(bwb & 0x01) ? fc : bc]; | ||
198 | *tab_f1-- = (byte) sp_colors[(clb & 0x80) ? | ||
199 | ((bwb & 0x01) ? bc : fc) : | ||
200 | ((bwb & 0x01) ? fc : bc)]; | ||
201 | } | ||
202 | } | ||
203 | } | ||
204 | |||
205 | void flash_change(void) | ||
206 | { | ||
207 | int i,j; | ||
208 | byte *scp; | ||
209 | qbyte *mcp; | ||
210 | register unsigned int val; | ||
211 | |||
212 | mcp = sp_scr_mark + 0x2C0; | ||
213 | scp = z80_proc.mem + 0x5800; | ||
214 | |||
215 | for(i = 24; i; mcp++, i--) { | ||
216 | val = 0; | ||
217 | for(j = 32; j; scp++, j--) { | ||
218 | val >>= 1; | ||
219 | if(*scp & 0x80) val |= (1 << 31); | ||
220 | } | ||
221 | *mcp |= val; | ||
222 | } | ||
223 | } | ||
224 | |||
225 | void spscr_init_line_pointers(int lines) | ||
226 | { | ||
227 | int i; | ||
228 | int bs; | ||
229 | int y; | ||
230 | int scline; | ||
231 | |||
232 | bs = (lines - 192) / 2; | ||
233 | |||
234 | for(i = 0; i < PORT_TIME_NUM; i++) { | ||
235 | |||
236 | sp_scri[i] = -2; | ||
237 | |||
238 | if(i < ODDHF) scline = i; | ||
239 | else scline = i - ODDHF; | ||
240 | |||
241 | if(scline >= 64-bs && scline < 256+bs) { | ||
242 | if(scline >= 64 && scline < 256) { | ||
243 | y = scline - 64; | ||
244 | sp_coli[i] = y; | ||
245 | sp_scri[i] = 0x200 + | ||
246 | (y & 0xC0) + ((y & 0x07) << 3) + ((y & 0x38) >> 3); | ||
247 | } | ||
248 | else sp_scri[i] = -1; | ||
249 | } | ||
250 | } | ||
251 | } | ||
252 | |||
253 | void spscr_init_colors(void) | ||
254 | { | ||
255 | spscr_crgb = norm_colors; | ||
256 | |||
257 | switch(color_type) { | ||
258 | case 0: | ||
259 | spscr_crgb = norm_colors; | ||
260 | break; | ||
261 | |||
262 | case 1: | ||
263 | spscr_crgb = gray_colors; | ||
264 | break; | ||
265 | |||
266 | case 2: | ||
267 | spscr_crgb = custom_colors; | ||
268 | break; | ||
269 | } | ||
270 | } | ||
diff --git a/apps/plugins/zxbox/spscr.h b/apps/plugins/zxbox/spscr.h new file mode 100644 index 0000000000..028e676dcf --- /dev/null +++ b/apps/plugins/zxbox/spscr.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPSCR_H | ||
22 | #define SPSCR_H | ||
23 | |||
24 | #include "z80_type.h" | ||
25 | |||
26 | extern int scrmul; | ||
27 | extern volatile int screen_visible; | ||
28 | |||
29 | extern void init_spect_scr(void); | ||
30 | extern void destroy_spect_scr(void); | ||
31 | extern void resize_spect_scr(int newsize); | ||
32 | extern void update_screen(void); | ||
33 | extern void flash_change(void); | ||
34 | extern void translate_screen(void); | ||
35 | |||
36 | extern byte *update_screen_line(byte *scrp, int coli, int scri, int border, | ||
37 | qbyte *cmarkp); | ||
38 | |||
39 | extern void spscr_refresh_colors(void); | ||
40 | |||
41 | #endif /* SPSCR_H */ | ||
diff --git a/apps/plugins/zxbox/spscr_p.h b/apps/plugins/zxbox/spscr_p.h new file mode 100644 index 0000000000..394ce2abd9 --- /dev/null +++ b/apps/plugins/zxbox/spscr_p.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPSCR_P_H | ||
22 | #define SPSCR_P_H | ||
23 | |||
24 | #define COLORNUM 16 | ||
25 | |||
26 | struct rgb { | ||
27 | int r, g, b; | ||
28 | }; | ||
29 | |||
30 | #define SCRSIZE 6912 | ||
31 | #define COLORBEG 6144 | ||
32 | |||
33 | extern struct rgb *spscr_crgb; | ||
34 | extern struct rgb custom_colors[]; | ||
35 | |||
36 | extern void spscr_init_mask_color(void); | ||
37 | extern void spscr_init_line_pointers(int lines); | ||
38 | extern void spscr_init_colors(void); | ||
39 | |||
40 | #endif /* SPSCR_P_H */ | ||
diff --git a/apps/plugins/zxbox/spsound.c b/apps/plugins/zxbox/spsound.c new file mode 100644 index 0000000000..3ff2690d00 --- /dev/null +++ b/apps/plugins/zxbox/spsound.c | |||
@@ -0,0 +1,288 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos 2006 Anton Romanov | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* #define DEBUG_AUDIO */ | ||
22 | |||
23 | #include "spsound.h" | ||
24 | |||
25 | #include "zxconfig.h" | ||
26 | #include "spperif.h" | ||
27 | #include "z80.h" | ||
28 | #include "misc.h" | ||
29 | #include "interf.h" | ||
30 | #include "spmain.h" | ||
31 | |||
32 | #include <stdio.h> | ||
33 | |||
34 | int bufframes = 1; | ||
35 | |||
36 | int sound_avail = 0; | ||
37 | int sound_on = 1; | ||
38 | |||
39 | int sound_to_autoclose = 0; | ||
40 | int doneplay=0; | ||
41 | |||
42 | |||
43 | #ifdef HAVE_SOUND | ||
44 | |||
45 | #include "stdlib.h" | ||
46 | #include "file.h" | ||
47 | #include "time.h" | ||
48 | #include "errno.h" | ||
49 | #include "string.h" | ||
50 | |||
51 | |||
52 | |||
53 | #define SKIPTIME 5000 | ||
54 | |||
55 | static int last_not_played=0; | ||
56 | |||
57 | #define SPS_OPENED 0 | ||
58 | #define SPS_AUTOCLOSED -1 | ||
59 | #define SPS_BUSY -2 | ||
60 | #define SPS_CLOSED -3 | ||
61 | #define SPS_NONEXIST -4 | ||
62 | |||
63 | static int sndstate = SPS_CLOSED; | ||
64 | |||
65 | static void close_snd(int normal); | ||
66 | unsigned short my_buf[TMNUM*2*3*2] IBSS_ATTR; | ||
67 | |||
68 | |||
69 | const byte lin8_ulaw[] = { | ||
70 | 31, 31, 31, 32, 32, 32, 32, 33, | ||
71 | 33, 33, 33, 34, 34, 34, 34, 35, | ||
72 | 35, 35, 35, 36, 36, 36, 36, 37, | ||
73 | 37, 37, 37, 38, 38, 38, 38, 39, | ||
74 | 39, 39, 39, 40, 40, 40, 40, 41, | ||
75 | 41, 41, 41, 42, 42, 42, 42, 43, | ||
76 | 43, 43, 43, 44, 44, 44, 44, 45, | ||
77 | 45, 45, 45, 46, 46, 46, 46, 47, | ||
78 | 47, 47, 47, 48, 48, 49, 49, 50, | ||
79 | 50, 51, 51, 52, 52, 53, 53, 54, | ||
80 | 54, 55, 55, 56, 56, 57, 57, 58, | ||
81 | 58, 59, 59, 60, 60, 61, 61, 62, | ||
82 | 62, 63, 63, 64, 65, 66, 67, 68, | ||
83 | 69, 70, 71, 72, 73, 74, 75, 76, | ||
84 | 77, 78, 79, 81, 83, 85, 87, 89, | ||
85 | 91, 93, 95, 99, 103, 107, 111, 119, | ||
86 | 255, 247, 239, 235, 231, 227, 223, 221, | ||
87 | 219, 217, 215, 213, 211, 209, 207, 206, | ||
88 | 205, 204, 203, 202, 201, 200, 199, 198, | ||
89 | 197, 196, 195, 194, 193, 192, 191, 191, | ||
90 | 190, 190, 189, 189, 188, 188, 187, 187, | ||
91 | 186, 186, 185, 185, 184, 184, 183, 183, | ||
92 | 182, 182, 181, 181, 180, 180, 179, 179, | ||
93 | 178, 178, 177, 177, 176, 176, 175, 175, | ||
94 | 175, 175, 174, 174, 174, 174, 173, 173, | ||
95 | 173, 173, 172, 172, 172, 172, 171, 171, | ||
96 | 171, 171, 170, 170, 170, 170, 169, 169, | ||
97 | 169, 169, 168, 168, 168, 168, 167, 167, | ||
98 | 167, 167, 166, 166, 166, 166, 165, 165, | ||
99 | 165, 165, 164, 164, 164, 164, 163, 163, | ||
100 | 163, 163, 162, 162, 162, 162, 161, 161, | ||
101 | 161, 161, 160, 160, 160, 160, 159, 159, | ||
102 | }; | ||
103 | |||
104 | static void open_snd(void) | ||
105 | { | ||
106 | sndstate = SPS_OPENED; | ||
107 | sound_avail=1; | ||
108 | rb->pcm_play_stop(); | ||
109 | rb->pcm_set_frequency(44100); | ||
110 | |||
111 | } | ||
112 | |||
113 | static void close_snd(int normal) | ||
114 | { | ||
115 | (void)normal; | ||
116 | sound_avail = 0; | ||
117 | rb->pcm_play_stop(); | ||
118 | rb->pcm_set_frequency(44100); | ||
119 | } | ||
120 | |||
121 | |||
122 | |||
123 | void init_spect_sound(void) | ||
124 | { | ||
125 | #if 1 /* TODO: Is this OK? */ | ||
126 | open_snd(); | ||
127 | #endif | ||
128 | } | ||
129 | |||
130 | |||
131 | //#define VOLREDUCE settings.volume | ||
132 | // | ||
133 | #ifndef VOLREDUCE | ||
134 | #define VOLREDUCE 0 | ||
135 | #endif | ||
136 | |||
137 | #define CONVU8(x) ((byte) (((x) >> VOLREDUCE) + 128)) | ||
138 | |||
139 | #ifdef CONVERT_TO_ULAW | ||
140 | # define CONV(x) lin8_ulaw[(int) CONVU8(x)] | ||
141 | #else | ||
142 | # define CONV(x) CONVU8(x) | ||
143 | #endif | ||
144 | |||
145 | #define HIGH_PASS(hp, sv) (((hp) * 15 + (sv)) >> 4) | ||
146 | #define TAPESOUND(tsp) ((*tsp) >> 4) | ||
147 | |||
148 | static void process_sound(void) | ||
149 | { | ||
150 | static int soundhp; | ||
151 | int i; | ||
152 | byte *sb; | ||
153 | register int sv; | ||
154 | |||
155 | sb = sp_sound_buf; | ||
156 | if(last_not_played) { | ||
157 | soundhp = *sb; | ||
158 | last_not_played = 0; | ||
159 | } | ||
160 | |||
161 | if(!sp_playing_tape) { | ||
162 | for(i = TMNUM; i; sb++,i--) { | ||
163 | sv = *sb; | ||
164 | soundhp = HIGH_PASS(soundhp, sv); | ||
165 | *sb = CONV(sv - soundhp); | ||
166 | } | ||
167 | } | ||
168 | else { | ||
169 | signed char *tsp; | ||
170 | |||
171 | tsp = sp_tape_sound; | ||
172 | for(i = TMNUM; i; sb++,tsp++,i--) { | ||
173 | sv = *sb + TAPESOUND(tsp); | ||
174 | soundhp = (soundhp * 15 + sv)>>4; | ||
175 | *sb = CONV(sv - soundhp); | ||
176 | } | ||
177 | } | ||
178 | } | ||
179 | |||
180 | void autoclose_sound(void) | ||
181 | { | ||
182 | /* do we have any reason to autoclose sound? */ | ||
183 | #if 0 | ||
184 | if(sound_on && sound_to_autoclose && sndstate >= SPS_CLOSED) { | ||
185 | close_snd(1); | ||
186 | sndstate = SPS_AUTOCLOSED; | ||
187 | } | ||
188 | #endif | ||
189 | } | ||
190 | void get_more(unsigned char** start, size_t* size) | ||
191 | { | ||
192 | doneplay = 1; | ||
193 | *start = (unsigned char*)(my_buf); | ||
194 | *size = TMNUM*4*3*2; | ||
195 | } | ||
196 | |||
197 | /* sp_sound_buf is Unsigned 8 bit, Rate 8000 Hz, Mono */ | ||
198 | |||
199 | void write_buf(void){ | ||
200 | int i,j; | ||
201 | |||
202 | /* still not sure what is the best way to do this */ | ||
203 | #if 0 | ||
204 | my_buf[i] = /*(sp_sound_buf[i]<<8)-0x8000*/sp_sound_buf[i]<<8; | ||
205 | |||
206 | |||
207 | for (i = 0, j = 0; i<TMNUM; i++, j+=6) | ||
208 | my_buf[j] = my_buf[j+1] = my_buf[j+2] = my_buf[j+3] = my_buf[j+4] = my_buf[j+5] = (((byte)sp_sound_buf[i])<<8) >> settings.volume; | ||
209 | #endif | ||
210 | |||
211 | |||
212 | for (i = 0, j = 0; i<TMNUM; i++, j+=12) | ||
213 | my_buf[j] = my_buf[j+1] = my_buf[j+2] = my_buf[j+3]\ | ||
214 | = my_buf[j+4] = my_buf[j+5] = my_buf[j+6]\ | ||
215 | = my_buf[j+7] = my_buf[j+8] = my_buf[j+9] \ | ||
216 | = my_buf[j+10] = my_buf[j+11] \ | ||
217 | = (((byte)sp_sound_buf[i])<<8) >> settings.volume; | ||
218 | |||
219 | rb->pcm_play_data(&get_more,NULL,0); | ||
220 | |||
221 | #if 0 | ||
222 | /* can use to save and later analyze what we produce */ | ||
223 | i = rb->open ( "/sound.raw" , O_WRONLY | O_APPEND | O_CREAT ); | ||
224 | rb->write ( i , sp_sound_buf , TMNUM ); | ||
225 | rb->close (i); | ||
226 | |||
227 | |||
228 | i = rb->open ( "/sound2.raw" , O_WRONLY | O_APPEND |O_CREAT); | ||
229 | rb->write ( i , (unsigned char *)my_buf , TMNUM*4*3 ); | ||
230 | rb->close (i); | ||
231 | #endif | ||
232 | |||
233 | |||
234 | while(!doneplay) | ||
235 | rb->yield(); | ||
236 | |||
237 | } | ||
238 | void play_sound(int evenframe) | ||
239 | { | ||
240 | if(evenframe) return; | ||
241 | if(!sound_on) { | ||
242 | if(sndstate <= SPS_CLOSED) return; | ||
243 | if(sndstate < SPS_OPENED) { | ||
244 | sndstate = SPS_CLOSED; | ||
245 | return; | ||
246 | } | ||
247 | close_snd(1); | ||
248 | return; | ||
249 | } | ||
250 | |||
251 | z80_proc.sound_change = 0; | ||
252 | |||
253 | process_sound(); | ||
254 | |||
255 | write_buf(); | ||
256 | } | ||
257 | |||
258 | |||
259 | void setbufsize(void) | ||
260 | { | ||
261 | |||
262 | } | ||
263 | |||
264 | |||
265 | #else /* HAVE_SOUND */ | ||
266 | |||
267 | /* Dummy functions */ | ||
268 | |||
269 | void setbufsize(void) | ||
270 | { | ||
271 | } | ||
272 | |||
273 | void init_spect_sound(void) | ||
274 | { | ||
275 | } | ||
276 | |||
277 | void play_sound(int evenframe) | ||
278 | { | ||
279 | (void)evenframe; | ||
280 | } | ||
281 | |||
282 | void autoclose_sound(void) | ||
283 | { | ||
284 | } | ||
285 | |||
286 | #endif /* NO_SOUND */ | ||
287 | |||
288 | |||
diff --git a/apps/plugins/zxbox/spsound.h b/apps/plugins/zxbox/spsound.h new file mode 100644 index 0000000000..09bf6c8f01 --- /dev/null +++ b/apps/plugins/zxbox/spsound.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPSOUND_H | ||
22 | #define SPSOUND_H | ||
23 | |||
24 | extern int bufframes; | ||
25 | extern int sound_avail; | ||
26 | extern void setbufsize(void); | ||
27 | |||
28 | extern void autoclose_sound(void); | ||
29 | extern void init_spect_sound(void); | ||
30 | extern void play_sound(int evenframe); | ||
31 | |||
32 | extern int sound_on; | ||
33 | |||
34 | #endif /* SPSOUND_H */ | ||
diff --git a/apps/plugins/zxbox/sptape.c b/apps/plugins/zxbox/sptape.c new file mode 100644 index 0000000000..d3642eea4c --- /dev/null +++ b/apps/plugins/zxbox/sptape.c | |||
@@ -0,0 +1,765 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | #include "misc.h" | ||
21 | |||
22 | #include "sptape.h" | ||
23 | #include "tapefile.h" | ||
24 | |||
25 | #include "spperif.h" | ||
26 | #include "z80.h" | ||
27 | #include "interf.h" | ||
28 | #include "spconf.h" | ||
29 | |||
30 | #include <stdio.h> | ||
31 | #include <stdlib.h> | ||
32 | #include <string.h> | ||
33 | #include <errno.h> | ||
34 | #include <sys/types.h> | ||
35 | |||
36 | #define MAXLINELEN 256 | ||
37 | |||
38 | int spt_auto_stop = 1; | ||
39 | |||
40 | static int playing = 0; | ||
41 | static int paused = 0; | ||
42 | /*static FILE *tapefp;*/ | ||
43 | /*static int *tapefp;*/ | ||
44 | |||
45 | static char tapename[MAXFILENAME]; | ||
46 | static int tapetype; | ||
47 | |||
48 | #define EARBIT 0x40 | ||
49 | |||
50 | #define IMPBUFLEN 1024 | ||
51 | |||
52 | static int ingroup; | ||
53 | static int segtype; | ||
54 | |||
55 | static int lastdatak; | ||
56 | |||
57 | static int currseg; | ||
58 | |||
59 | static void stop_playing(void) | ||
60 | { | ||
61 | if(playing) close_tapefile(); | ||
62 | playing = 0; | ||
63 | } | ||
64 | |||
65 | static void pause_playing(void) | ||
66 | { | ||
67 | if(playing) { | ||
68 | paused = 1; | ||
69 | playing = 0; | ||
70 | } | ||
71 | } | ||
72 | |||
73 | static void unpause_playing(void) | ||
74 | { | ||
75 | if(paused) { | ||
76 | paused = 0; | ||
77 | playing = 1; | ||
78 | segtype = SEG_END; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | #define MAXDESCLEN 256 | ||
83 | |||
84 | static void put_seg_desc(void) | ||
85 | { | ||
86 | if(segtype != SEG_VIRTUAL) { | ||
87 | if(segtype > SEG_END) { | ||
88 | if(!ingroup) { | ||
89 | long len; | ||
90 | int i, ml; | ||
91 | char *me; | ||
92 | |||
93 | len = get_seglen(); | ||
94 | |||
95 | me = msgbuf; | ||
96 | rb->snprintf(me,MAXDESCLEN, "%4i: ", currseg); | ||
97 | me = me+rb->strlen(me); | ||
98 | if(segtype >= SEG_DATA && len) { | ||
99 | rb->snprintf(me,MAXDESCLEN, "%5li bytes, ", len); | ||
100 | me = me+rb->strlen(me); | ||
101 | } | ||
102 | |||
103 | ml = 0; | ||
104 | for(i = 0; seg_desc[i]; i++) { | ||
105 | if(seg_desc[i] == '\n') { | ||
106 | *me = '\0'; | ||
107 | put_msg(msgbuf); | ||
108 | |||
109 | me = msgbuf; | ||
110 | rb->snprintf(me,MAXDESCLEN, " "); | ||
111 | me = me+rb->strlen(me); | ||
112 | ml = 0; | ||
113 | } | ||
114 | else { | ||
115 | if(ml < MAXDESCLEN) *me++ = seg_desc[i]; | ||
116 | ml++; | ||
117 | } | ||
118 | } | ||
119 | *me = '\0'; | ||
120 | put_msg(msgbuf); | ||
121 | } | ||
122 | else { | ||
123 | rb->snprintf(msgbuf,MAXDESCLEN, "%4i:", currseg); | ||
124 | put_tmp_msg(msgbuf); | ||
125 | } | ||
126 | } | ||
127 | else put_msg(seg_desc); | ||
128 | } | ||
129 | #ifdef DEBUG_TAPE | ||
130 | else fprintf(stderr, "virtual segment\n"); | ||
131 | #endif | ||
132 | } | ||
133 | |||
134 | static void get_next_segment(void) | ||
135 | { | ||
136 | int propseg; | ||
137 | |||
138 | do { | ||
139 | propseg = 1; | ||
140 | |||
141 | segtype = next_segment(); | ||
142 | currseg = segment_pos(); | ||
143 | |||
144 | put_seg_desc(); | ||
145 | |||
146 | switch(segtype) { | ||
147 | case SEG_ERROR: | ||
148 | case SEG_END: | ||
149 | stop_playing(); | ||
150 | break; | ||
151 | |||
152 | case SEG_STOP: | ||
153 | pause_playing(); | ||
154 | put_msg(" * Tape paused; Press Ctrl-o to restart * "); | ||
155 | break; | ||
156 | |||
157 | case SEG_SKIP: | ||
158 | propseg = 0; | ||
159 | break; | ||
160 | |||
161 | case SEG_GRP_BEG: | ||
162 | ingroup = 1; | ||
163 | propseg = 0; | ||
164 | break; | ||
165 | |||
166 | case SEG_GRP_END: | ||
167 | ingroup = 0; | ||
168 | propseg = 0; | ||
169 | break; | ||
170 | } | ||
171 | } while(!propseg); | ||
172 | |||
173 | lastdatak = 0; | ||
174 | } | ||
175 | |||
176 | |||
177 | void play_tape(void) | ||
178 | { | ||
179 | static dbyte impbuf[IMPBUFLEN]; | ||
180 | |||
181 | static int clevel; | ||
182 | static dbyte *impbufp; | ||
183 | static int impbufrem; | ||
184 | static long imprem; | ||
185 | |||
186 | static int cleared_buffers = 1; | ||
187 | |||
188 | int tsn; | ||
189 | dbyte *ibp; | ||
190 | byte *tsp; | ||
191 | int ibr; | ||
192 | long ir; | ||
193 | int cl; | ||
194 | signed char *op; | ||
195 | int ov; | ||
196 | int ca; | ||
197 | |||
198 | tsp = sp_tape_impinfo; | ||
199 | op = sp_tape_sound; | ||
200 | tsn = TMNUM; | ||
201 | |||
202 | if(!playing) { | ||
203 | if(cleared_buffers) return; | ||
204 | |||
205 | sp_playing_tape = 0; | ||
206 | |||
207 | if(!clevel) { | ||
208 | ca = CHKTICK; | ||
209 | clevel = ~clevel; | ||
210 | } | ||
211 | else { | ||
212 | ca = 0; | ||
213 | cleared_buffers = 1; | ||
214 | } | ||
215 | imprem = CHKTICK * TMNUM; | ||
216 | } | ||
217 | else if(!sp_playing_tape) { | ||
218 | sp_playing_tape = 1; | ||
219 | cleared_buffers = 0; | ||
220 | |||
221 | impbufrem = 0; | ||
222 | imprem = 0; | ||
223 | clevel = get_level() ? ~(0) : 0; | ||
224 | if(clevel) ca = 0; | ||
225 | else ca = 1; | ||
226 | } | ||
227 | else ca = 0; | ||
228 | |||
229 | #ifdef DEBUG_TAPE | ||
230 | if(((clevel ? 1 : 0) ^ | ||
231 | (DANM(ula_inport) & EARBIT ? 1 : 0) ^ | ||
232 | (DANM(imp_change) ? 1 : 0) ^ | ||
233 | (ca ? 1 : 0)) == 0) | ||
234 | fprintf(stderr, "Levels don't match %i %i\n", imprem, impbufrem); | ||
235 | #endif | ||
236 | |||
237 | cl = clevel; | ||
238 | ibr = impbufrem; | ||
239 | ir = imprem; | ||
240 | ibp = impbufp; | ||
241 | |||
242 | if(cl) ov = CHKTICK/2; | ||
243 | else ov = -(CHKTICK/2); | ||
244 | |||
245 | do { | ||
246 | if(ir > 0) { | ||
247 | *tsp++ = ca; | ||
248 | *op++ = ov; | ||
249 | ir -= CHKTICK; | ||
250 | tsn--; | ||
251 | if(!tsn) goto done; | ||
252 | |||
253 | if(cl) ov = CHKTICK/2; | ||
254 | else ov = -(CHKTICK/2); | ||
255 | |||
256 | while(ir > 0) { | ||
257 | *tsp++ = 0; | ||
258 | *op++ = ov; | ||
259 | ir -= CHKTICK; | ||
260 | tsn--; | ||
261 | if(!tsn) goto done; | ||
262 | } | ||
263 | ca = 0; | ||
264 | } | ||
265 | if(ibr) { | ||
266 | if(!ca) { | ||
267 | if(cl) { | ||
268 | ov += ir; | ||
269 | ca = (CHKTICK/2) - ov + 1; | ||
270 | } | ||
271 | else { | ||
272 | ov -= ir; | ||
273 | ca = ov + (CHKTICK/2) + 1; | ||
274 | } | ||
275 | } | ||
276 | else { | ||
277 | ca = 0; | ||
278 | if(cl) ov += ir; | ||
279 | else ov -= ir; | ||
280 | } | ||
281 | ir += *ibp++; | ||
282 | ibr--; | ||
283 | cl = ~cl; | ||
284 | } | ||
285 | else { | ||
286 | ibp = impbuf; | ||
287 | do { | ||
288 | ibr = next_imps(impbuf, IMPBUFLEN, CHKTICK * tsn); | ||
289 | if(ibr) break; | ||
290 | get_next_segment(); | ||
291 | if(!playing) { | ||
292 | if(!cl) { | ||
293 | if(ca) ca = 0; | ||
294 | else ca = CHKTICK; | ||
295 | cl = ~cl; | ||
296 | } | ||
297 | ir = tsn*CHKTICK; | ||
298 | ov = -(CHKTICK/2); | ||
299 | break; | ||
300 | } | ||
301 | } while(1); | ||
302 | } | ||
303 | |||
304 | } while(1); | ||
305 | |||
306 | done: | ||
307 | |||
308 | clevel = cl; | ||
309 | impbufrem = ibr; | ||
310 | imprem = ir; | ||
311 | impbufp = ibp; | ||
312 | |||
313 | if(segtype >= SEG_DATA) { | ||
314 | int datak; | ||
315 | |||
316 | datak = (int) (get_segpos() / 1000); | ||
317 | if(datak > lastdatak) { | ||
318 | /* if(ingroup) sprintf(msgbuf, "%4i: ", currseg); | ||
319 | else sprintf(msgbuf, " "); | ||
320 | sprintf(msgbuf+strlen(msgbuf), "%3ik", datak); | ||
321 | put_tmp_msg(msgbuf); | ||
322 | */ | ||
323 | lastdatak = datak; | ||
324 | } | ||
325 | } | ||
326 | } | ||
327 | |||
328 | /* | ||
329 | |||
330 | 2168 | ||
331 | 2168 (9-10) | ||
332 | |||
333 | 667 | ||
334 | 735 (2-4) | ||
335 | |||
336 | 855 | ||
337 | 855 (3-5) | ||
338 | |||
339 | 1710 | ||
340 | 1710 (7-9) | ||
341 | |||
342 | 945 (4-5) | ||
343 | |||
344 | hosszu: 7..9 | ||
345 | rovid: 2..5 | ||
346 | |||
347 | */ | ||
348 | |||
349 | #define MICBIT 0x08 | ||
350 | |||
351 | |||
352 | #define RC_NONE 0 | ||
353 | #define RC_LEADER 1 | ||
354 | #define RC_SYNC 2 | ||
355 | #define RC_DATA 3 | ||
356 | |||
357 | #define MAXLEN TMNUM | ||
358 | |||
359 | #define LEADER_MIN 9 | ||
360 | #define LEADER_MAX 10 | ||
361 | #define SYNC_MIN 2 | ||
362 | #define SYNC_MAX 4 | ||
363 | |||
364 | #define BIT0_MIN 3 | ||
365 | #define BIT0_MAX 5 | ||
366 | #define BIT1_MIN 7 | ||
367 | #define BIT1_MAX 9 | ||
368 | |||
369 | #define LEADER_MIN_COUNT 512 | ||
370 | /* | ||
371 | static int rec_segment; | ||
372 | static int rec_state = RC_NONE; | ||
373 | static byte *recbuf = NULL; | ||
374 | static const char *waitchars = "-\\|/"; | ||
375 | */ | ||
376 | static int recording = 0; | ||
377 | |||
378 | |||
379 | |||
380 | void rec_tape(void) | ||
381 | { | ||
382 | /* static byte lastmic = 0; | ||
383 | static int lastlen = 0; | ||
384 | static int whole; | ||
385 | static int leadercount; | ||
386 | static byte data; | ||
387 | static byte parity; | ||
388 | static int bitnum; | ||
389 | static int bytecount; | ||
390 | static int recbufsize; | ||
391 | static int firsthalf; | ||
392 | static int frameswait = 0; | ||
393 | |||
394 | int tsl; | ||
395 | byte *fep; | ||
396 | int thishalf; | ||
397 | |||
398 | |||
399 | if(!recording) return; | ||
400 | |||
401 | for(fep = sp_fe_outport_time, tsl = TMNUM; tsl; fep++, tsl--) { | ||
402 | lastlen++; | ||
403 | if((*fep & MICBIT) == lastmic) { | ||
404 | if(lastlen < MAXLEN) continue; | ||
405 | } | ||
406 | else lastmic = ~lastmic & MICBIT; | ||
407 | |||
408 | switch(rec_state) { | ||
409 | case RC_NONE: | ||
410 | if(lastlen >= LEADER_MIN && lastlen <= LEADER_MAX) { | ||
411 | rec_state = RC_LEADER; | ||
412 | |||
413 | leadercount = 0; | ||
414 | break; | ||
415 | } | ||
416 | if((frameswait++ & 15)) break; | ||
417 | frameswait &= 0x3F; | ||
418 | sprintf(msgbuf, " %s: WAITING %c", | ||
419 | tapename, waitchars[(frameswait >> 4)]); | ||
420 | put_tmp_msg(msgbuf); | ||
421 | break; | ||
422 | case RC_LEADER: | ||
423 | if(lastlen >= LEADER_MIN && lastlen <= LEADER_MAX) { | ||
424 | leadercount++; | ||
425 | if(leadercount == LEADER_MIN_COUNT) { | ||
426 | sprintf(msgbuf, " %s: LEADER", tapename); | ||
427 | put_tmp_msg(msgbuf); | ||
428 | } | ||
429 | break; | ||
430 | } | ||
431 | if(leadercount >= LEADER_MIN_COUNT && | ||
432 | lastlen >= SYNC_MIN && lastlen <= SYNC_MAX) rec_state = RC_SYNC; | ||
433 | else rec_state = RC_NONE; | ||
434 | break; | ||
435 | case RC_SYNC: | ||
436 | if(lastlen >= SYNC_MIN && lastlen <= SYNC_MAX) { | ||
437 | rec_state = RC_DATA; | ||
438 | whole = 0; | ||
439 | data = 0; | ||
440 | bitnum = 0; | ||
441 | bytecount = 0; | ||
442 | recbuf = NULL; | ||
443 | recbufsize = 0; | ||
444 | parity = 0; | ||
445 | |||
446 | sprintf(msgbuf, " %s: DATA", tapename); | ||
447 | put_tmp_msg(msgbuf); | ||
448 | } | ||
449 | else rec_state = RC_NONE; | ||
450 | break; | ||
451 | case RC_DATA: | ||
452 | thishalf = -1; | ||
453 | if(lastlen >= BIT0_MIN && lastlen <= BIT0_MAX) thishalf = 0; | ||
454 | else if(lastlen >= BIT1_MIN && lastlen <= BIT1_MAX) thishalf = 1; | ||
455 | |||
456 | if(thishalf < 0 || (whole && firsthalf != thishalf)) { | ||
457 | char filename[11]; | ||
458 | int filesize; | ||
459 | int filetype; | ||
460 | |||
461 | sprintf(msgbuf, "%s: %03d", tapename, rec_segment); | ||
462 | if(bytecount >= 1) { | ||
463 | sprintf(msgbuf+strlen(msgbuf), | ||
464 | " %02X %5d %3s", recbuf[0], bytecount-2, | ||
465 | parity == 0 ? "OK" : "ERR"); | ||
466 | if(recbuf[0] == 0 && bytecount - 2 >= 17) { | ||
467 | filetype = recbuf[1]; | ||
468 | strncpy(filename, (char*) recbuf+2, 10); | ||
469 | filename[10] = '\0'; | ||
470 | filesize = recbuf[12] + (recbuf[13] << 8); | ||
471 | |||
472 | sprintf(msgbuf+strlen(msgbuf), | ||
473 | " %02X %10s %5i", filetype, filename, filesize); | ||
474 | } | ||
475 | } | ||
476 | put_msg(msgbuf); | ||
477 | |||
478 | putc(bytecount & 0xFF, tapefp); | ||
479 | putc((bytecount >> 8) & 0xFF, tapefp); | ||
480 | |||
481 | fwrite(recbuf, 1, (size_t) bytecount, tapefp); | ||
482 | fflush(tapefp); | ||
483 | |||
484 | rec_segment++; | ||
485 | free(recbuf); | ||
486 | recbuf = NULL; | ||
487 | rec_state = RC_NONE; | ||
488 | break; | ||
489 | } | ||
490 | |||
491 | if(!whole) { | ||
492 | whole = 1; | ||
493 | firsthalf = thishalf; | ||
494 | } | ||
495 | else { | ||
496 | whole = 0; | ||
497 | data |= thishalf; | ||
498 | bitnum++; | ||
499 | |||
500 | if(bitnum == 8) { | ||
501 | bitnum = 0; | ||
502 | if(recbufsize <= bytecount) { | ||
503 | recbufsize += 1024; | ||
504 | recbuf = realloc(recbuf, (size_t) recbufsize); | ||
505 | if(recbuf == NULL) { | ||
506 | //fprintf(stderr, "Out of memory\n"); | ||
507 | exit(1); | ||
508 | } | ||
509 | } | ||
510 | recbuf[bytecount] = data; | ||
511 | parity = parity ^ data; | ||
512 | data = 0; | ||
513 | bytecount++; | ||
514 | |||
515 | if(!(bytecount & 1023)) { | ||
516 | sprintf(msgbuf, " %s: DATA %i kB", | ||
517 | tapename, bytecount >> 10); | ||
518 | put_tmp_msg(msgbuf); | ||
519 | } | ||
520 | } | ||
521 | data <<= 1; | ||
522 | } | ||
523 | break; | ||
524 | } | ||
525 | |||
526 | lastlen = 0; | ||
527 | }*/ | ||
528 | } | ||
529 | |||
530 | static void stop_recording(void) | ||
531 | { | ||
532 | /* if(recording) { | ||
533 | recording = 0; | ||
534 | free(recbuf); | ||
535 | recbuf = NULL; | ||
536 | |||
537 | rb->close(tapefp); | ||
538 | }*/ | ||
539 | } | ||
540 | |||
541 | static void restart_playing(void) | ||
542 | { | ||
543 | int res; | ||
544 | struct tape_options tapeopt; | ||
545 | |||
546 | if(tapetype < 0) { | ||
547 | tapetype = TAP_TZX; | ||
548 | res = open_tapefile(tapename, tapetype); | ||
549 | if(!res) { | ||
550 | tapetype = TAP_TAP; | ||
551 | res = open_tapefile(tapename, tapetype); | ||
552 | } | ||
553 | } | ||
554 | else res = open_tapefile(tapename, tapetype); | ||
555 | |||
556 | if(!res) { | ||
557 | put_msg(seg_desc); | ||
558 | return; | ||
559 | } | ||
560 | |||
561 | INITTAPEOPT(tapeopt); | ||
562 | #ifndef DEBUG_Z80 | ||
563 | tapeopt.blanknoise = 1; | ||
564 | #endif | ||
565 | set_tapefile_options(&tapeopt); | ||
566 | |||
567 | if(currseg) { | ||
568 | res = goto_segment(currseg); | ||
569 | if(!res) { | ||
570 | put_msg(seg_desc); | ||
571 | return; | ||
572 | } | ||
573 | } | ||
574 | |||
575 | playing = 1; | ||
576 | segtype = SEG_END; | ||
577 | } | ||
578 | |||
579 | |||
580 | void pause_play(void) | ||
581 | { | ||
582 | if(playing) { | ||
583 | pause_playing(); | ||
584 | put_msg(" * Tape paused * "); | ||
585 | goto_segment(currseg); | ||
586 | } | ||
587 | else unpause_playing(); | ||
588 | } | ||
589 | |||
590 | |||
591 | void start_play_file_type(char *name, int seg, int type) | ||
592 | { | ||
593 | int filetype = FT_TAPEFILE; | ||
594 | |||
595 | rb->strncpy(tapename, name, MAXFILENAME-10); | ||
596 | tapename[MAXFILENAME-10] = '\0'; | ||
597 | |||
598 | currseg = seg; | ||
599 | tapetype = type; | ||
600 | |||
601 | spcf_find_file_type(tapename, &filetype, &tapetype); | ||
602 | if(currseg < 0) currseg = 0; | ||
603 | |||
604 | ingroup = 0; | ||
605 | restart_playing(); | ||
606 | } | ||
607 | |||
608 | void start_play(void) | ||
609 | { | ||
610 | char *name; | ||
611 | int t; | ||
612 | int seg; | ||
613 | |||
614 | if(playing || paused || recording) { | ||
615 | put_msg(" * Stop the tape first! * "); | ||
616 | return; | ||
617 | } | ||
618 | |||
619 | put_msg("Enter tape file path:"); | ||
620 | name = spif_get_tape_fileinfo(&seg, &t); | ||
621 | if(name == NULL) return; | ||
622 | |||
623 | start_play_file_type(name, seg, -1); | ||
624 | } | ||
625 | |||
626 | |||
627 | void stop_play(void) | ||
628 | { | ||
629 | |||
630 | if(playing || paused) { | ||
631 | put_msg(" * Stopped playing * "); | ||
632 | |||
633 | if(playing) stop_playing(); | ||
634 | if(paused) paused = 0; | ||
635 | } | ||
636 | else if(recording) { | ||
637 | /* sprintf(msgbuf, " * Stopped recording tape `%s' * ", tapename); | ||
638 | put_msg(msgbuf);*/ | ||
639 | stop_recording(); | ||
640 | } | ||
641 | } | ||
642 | |||
643 | void start_rec(void) | ||
644 | { | ||
645 | #if 0 | ||
646 | char *name; | ||
647 | |||
648 | if(playing || paused || recording) return; | ||
649 | |||
650 | put_msg("Enter tape file to record (default: '.tap'):"); | ||
651 | |||
652 | name = spif_get_filename(); | ||
653 | if(name == NULL) return; | ||
654 | |||
655 | strncpy(tapename, name, MAXFILENAME-10); | ||
656 | tapename[MAXFILENAME-10] = '\0'; | ||
657 | |||
658 | if(!check_ext(tapename, "tap")) add_extension(tapename, "tap"); | ||
659 | |||
660 | tapefp = fopen(tapename, "ab"); | ||
661 | if(tapefp == NULL) { | ||
662 | sprintf(msgbuf, "Could not open tape file `%s', %s", | ||
663 | tapename, strerror(errno)); | ||
664 | put_msg(msgbuf); | ||
665 | return; | ||
666 | } | ||
667 | |||
668 | recording = 1; | ||
669 | rec_segment = 0; | ||
670 | rec_state = RC_NONE; | ||
671 | |||
672 | sprintf(msgbuf, | ||
673 | "Recordind tape file `%s'. To stop press Ctrl-s", tapename); | ||
674 | put_msg(msgbuf); | ||
675 | #endif | ||
676 | } | ||
677 | |||
678 | #include "spkey_p.h" | ||
679 | |||
680 | #define CF 0x01 | ||
681 | #define ZF 0x40 | ||
682 | |||
683 | void qload(void) | ||
684 | { | ||
685 | byte type, parity; | ||
686 | dbyte length, dest, dtmp; | ||
687 | int verify, success, firstbyte; | ||
688 | int nextdata; | ||
689 | |||
690 | if(recording) { | ||
691 | put_msg("Can't quick load tape, because recording"); | ||
692 | return; | ||
693 | } | ||
694 | |||
695 | do { | ||
696 | if(!playing) { | ||
697 | if(paused) unpause_playing(); | ||
698 | else { | ||
699 | spkey_textmode(); | ||
700 | start_play(); | ||
701 | spkey_screenmode(); | ||
702 | } | ||
703 | } | ||
704 | if(!playing) { | ||
705 | put_msg("Not quick loading tape"); | ||
706 | return; | ||
707 | } | ||
708 | while(playing && (segtype != SEG_DATA || get_segpos() > 0)) | ||
709 | get_next_segment(); | ||
710 | |||
711 | } while(!playing); | ||
712 | |||
713 | dtmp = AFBK; | ||
714 | AFBK = AF; | ||
715 | AF = dtmp; | ||
716 | |||
717 | type = RA; | ||
718 | verify = !(RF & CF); | ||
719 | length = DE; | ||
720 | firstbyte = !(RF & ZF); | ||
721 | dest = IX; | ||
722 | |||
723 | parity = 0; | ||
724 | success = 0; | ||
725 | |||
726 | do { | ||
727 | nextdata = next_byte(); | ||
728 | if(nextdata < 0) break; | ||
729 | |||
730 | parity ^= nextdata; | ||
731 | |||
732 | if(!length) { | ||
733 | if(!parity) success = 1; | ||
734 | break; | ||
735 | } | ||
736 | |||
737 | if(firstbyte) { | ||
738 | firstbyte = 0; | ||
739 | if(nextdata != type) break; | ||
740 | } | ||
741 | else { | ||
742 | if(!verify) { | ||
743 | if(dest >= 0x4000) DANM(mem)[dest] = nextdata; | ||
744 | } | ||
745 | else { | ||
746 | if(DANM(mem)[dest] != nextdata) break; | ||
747 | } | ||
748 | dest++; | ||
749 | length--; | ||
750 | } | ||
751 | } while(1); | ||
752 | |||
753 | if(success) RF |= (CF | ZF); | ||
754 | else RF &= ~(CF | ZF); | ||
755 | IX = dest; | ||
756 | DE = length; | ||
757 | |||
758 | PC = SA_LD_RET; | ||
759 | DANM(iff1) = DANM(iff2) = 1; | ||
760 | DANM(haltstate) = 1; | ||
761 | |||
762 | sp_init_screen_mark(); | ||
763 | |||
764 | if(spt_auto_stop) pause_playing(); | ||
765 | } | ||
diff --git a/apps/plugins/zxbox/sptape.h b/apps/plugins/zxbox/sptape.h new file mode 100644 index 0000000000..5d4a8a8eaa --- /dev/null +++ b/apps/plugins/zxbox/sptape.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPTAPE_H | ||
22 | #define SPTAPE_H | ||
23 | |||
24 | extern void play_tape(void); | ||
25 | extern void rec_tape(void); | ||
26 | |||
27 | extern void stop_play(void); | ||
28 | extern void pause_play(void); | ||
29 | |||
30 | extern void start_play(void); | ||
31 | extern void start_play_file_type(char *name, int seg, int type); | ||
32 | |||
33 | extern void start_rec(void); | ||
34 | extern void qload(void); | ||
35 | |||
36 | #endif /* SPTAPE_H */ | ||
diff --git a/apps/plugins/zxbox/sptiming.c b/apps/plugins/zxbox/sptiming.c new file mode 100644 index 0000000000..e039cf4b2d --- /dev/null +++ b/apps/plugins/zxbox/sptiming.c | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos 2006 Anton Romanov | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "zxconfig.h" | ||
22 | |||
23 | #include "sptiming.h" | ||
24 | #include "interf.h" | ||
25 | /* not precise but .... anyway this is used only when not playing | ||
26 | * sound ... */ | ||
27 | long shouldbe_tick; | ||
28 | |||
29 | void spti_init(void){ | ||
30 | spti_reset(); | ||
31 | } | ||
32 | void spti_sleep(unsigned long usecs){ | ||
33 | /* unsigned long now,need; | ||
34 | now = *rb->current_tick; | ||
35 | need = now + usecs; | ||
36 | rb -> sleep ( need - now );*/ | ||
37 | rb->sleep ( usecs ); | ||
38 | } | ||
39 | void spti_reset(void){ | ||
40 | shouldbe_tick = *rb -> current_tick; | ||
41 | } | ||
42 | void spti_wait(void){ | ||
43 | long rem; | ||
44 | long now; | ||
45 | |||
46 | now = *rb -> current_tick; | ||
47 | shouldbe_tick+=SKIPTICKS; | ||
48 | rem = shouldbe_tick - now; | ||
49 | |||
50 | if(rem > 0) { | ||
51 | if(rem > SKIPTICKS) rem = SKIPTICKS; | ||
52 | spti_sleep((unsigned long) rem); | ||
53 | } | ||
54 | if(rem == SKIPTICKS || rem < -10 * SKIPTIME) spti_reset(); | ||
55 | } | ||
diff --git a/apps/plugins/zxbox/sptiming.h b/apps/plugins/zxbox/sptiming.h new file mode 100644 index 0000000000..577ce33836 --- /dev/null +++ b/apps/plugins/zxbox/sptiming.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef SPTIMING_H | ||
22 | #define SPTIMING_H | ||
23 | |||
24 | #define SKIPMS 20 | ||
25 | #define SKIPTIME (SKIPMS * 1000) | ||
26 | #define SKIPTICKS 20*HZ/1000 | ||
27 | |||
28 | extern void spti_init(void); | ||
29 | extern void spti_sleep(unsigned long usecs); | ||
30 | extern void spti_reset(void); | ||
31 | extern void spti_wait(void); | ||
32 | |||
33 | #endif /* SPTIMING_H */ | ||
diff --git a/apps/plugins/zxbox/spver.h b/apps/plugins/zxbox/spver.h new file mode 100644 index 0000000000..9c283d0982 --- /dev/null +++ b/apps/plugins/zxbox/spver.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "config.h" | ||
22 | |||
23 | #define SPECTEMU_VERSION "0.94" | ||
24 | |||
25 | #ifdef Z80C | ||
26 | #define SPECTEMU_TYPE "c" | ||
27 | #else | ||
28 | #define SPECTEMU_TYPE "i" | ||
29 | #endif | ||
diff --git a/apps/plugins/zxbox/tapef_p.h b/apps/plugins/zxbox/tapef_p.h new file mode 100644 index 0000000000..c677e09203 --- /dev/null +++ b/apps/plugins/zxbox/tapef_p.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef TAPEF_P_H | ||
22 | #define TAPEF_P_H | ||
23 | |||
24 | typedef unsigned char byte; | ||
25 | typedef unsigned short dbyte; | ||
26 | typedef unsigned long qbyte; | ||
27 | |||
28 | #define BYTE(arr, i) (arr[i]) | ||
29 | #define DBYTE(arr, i) (arr[i] + (arr[(i)+1] << 8)) | ||
30 | |||
31 | struct tapeinfo { | ||
32 | int type; | ||
33 | int tzxminver, tzxmajver; | ||
34 | }; | ||
35 | |||
36 | struct seginfo { | ||
37 | int type; | ||
38 | int segtype; | ||
39 | |||
40 | dbyte pulse; | ||
41 | dbyte num; | ||
42 | dbyte sync1p; | ||
43 | dbyte sync2p; | ||
44 | dbyte zerop; | ||
45 | dbyte onep; | ||
46 | |||
47 | dbyte pause; | ||
48 | |||
49 | byte bused; | ||
50 | |||
51 | long len; | ||
52 | long ptr; | ||
53 | }; | ||
54 | |||
55 | extern struct tapeinfo tf_tpi; | ||
56 | extern struct seginfo tf_cseg; | ||
57 | extern long tf_segoffs; | ||
58 | |||
59 | extern byte *tf_get_block(int i); | ||
60 | |||
61 | #endif /* TAPEF_P_H */ | ||
diff --git a/apps/plugins/zxbox/tapefile.c b/apps/plugins/zxbox/tapefile.c new file mode 100644 index 0000000000..19f6aba980 --- /dev/null +++ b/apps/plugins/zxbox/tapefile.c | |||
@@ -0,0 +1,1047 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* This module deals with the different tape file formats (.TAP and .TZX) */ | ||
22 | /* 'sptape.c' uses the functions provided by this module. */ | ||
23 | |||
24 | |||
25 | #include "tapefile.h" | ||
26 | #include "tapef_p.h" | ||
27 | |||
28 | #include <stdio.h> | ||
29 | #include <stdlib.h> | ||
30 | #include <string.h> | ||
31 | #include <errno.h> | ||
32 | #include <sys/types.h> | ||
33 | #include "zxconfig.h" | ||
34 | #include "helpers.h" | ||
35 | #define max(x, y) ((x) > (y) ? (x) : (y)) | ||
36 | |||
37 | #define DESC_LEN 256 | ||
38 | |||
39 | char seg_desc[DESC_LEN]; | ||
40 | |||
41 | #define TZXMAJPROG 1 | ||
42 | #define TZXMINPROG 2 | ||
43 | |||
44 | /*static FILE *tapefp = NULL;*/ | ||
45 | static int tapefd=-1; | ||
46 | |||
47 | static dbyte segi, currsegi; | ||
48 | static int segbeg; | ||
49 | |||
50 | static int endtype, endnext, endplay; | ||
51 | static dbyte endpause; | ||
52 | static int finished; | ||
53 | |||
54 | static long firstseg_offs; | ||
55 | |||
56 | static struct tape_options tapeopt; | ||
57 | |||
58 | long tf_segoffs; | ||
59 | struct tapeinfo tf_tpi; | ||
60 | |||
61 | static dbyte loopctr, loopbeg; | ||
62 | static dbyte callctr, callbeg; | ||
63 | |||
64 | #define ST_NORM 0 | ||
65 | #define ST_PSEQ 1 | ||
66 | #define ST_DIRE 2 | ||
67 | #define ST_MISC 3 | ||
68 | |||
69 | #define PL_NONE 0 | ||
70 | #define PL_PAUSE 1 | ||
71 | #define PL_LEADER 2 | ||
72 | #define PL_DATA 3 | ||
73 | #define PL_END 4 | ||
74 | #define PL_PSEQ 5 | ||
75 | #define PL_DIRE 6 | ||
76 | |||
77 | #define IMP_1MS 3500 | ||
78 | |||
79 | static dbyte lead_pause; | ||
80 | static int playstate = PL_NONE; | ||
81 | static int currlev; | ||
82 | |||
83 | #define DEF_LEAD_PAUSE 2000 | ||
84 | |||
85 | struct seginfo tf_cseg; | ||
86 | |||
87 | struct tzxblock { | ||
88 | int type; | ||
89 | int lenbytes; | ||
90 | int lenmul; | ||
91 | int hlen; | ||
92 | }; | ||
93 | |||
94 | #define NUMBLOCKID 0x60 | ||
95 | /* changed NONE because of warinigs */ | ||
96 | /*#define NONE 0*/ | ||
97 | #define NONE 0,0,0,0 | ||
98 | #define COMM 1 | ||
99 | #define STAN 2 | ||
100 | |||
101 | |||
102 | #define RBUFLEN 1024 | ||
103 | |||
104 | static byte rbuf[RBUFLEN]; | ||
105 | |||
106 | /* Table containing information on TZX blocks */ | ||
107 | |||
108 | static struct tzxblock tzxb[NUMBLOCKID] = { | ||
109 | { NONE }, /* ID: 00 */ | ||
110 | { NONE }, | ||
111 | { NONE }, | ||
112 | { NONE }, | ||
113 | { NONE }, | ||
114 | { NONE }, | ||
115 | { NONE }, | ||
116 | { NONE }, | ||
117 | |||
118 | { NONE }, /* ID: 08 */ | ||
119 | { NONE }, | ||
120 | { NONE }, | ||
121 | { NONE }, | ||
122 | { NONE }, | ||
123 | { NONE }, | ||
124 | { NONE }, | ||
125 | { NONE }, | ||
126 | |||
127 | { COMM, 2, 1, 0x04 }, /* ID: 10 */ | ||
128 | { COMM, 3, 1, 0x12 }, | ||
129 | { COMM, 0, 1, 0x04 }, | ||
130 | { COMM, 1, 2, 0x01 }, | ||
131 | { COMM, 3, 1, 0x0A }, | ||
132 | { COMM, 3, 1, 0x08 }, | ||
133 | { NONE }, | ||
134 | { NONE }, | ||
135 | |||
136 | { NONE }, /* ID: 18 */ | ||
137 | { NONE }, | ||
138 | { NONE }, | ||
139 | { NONE }, | ||
140 | { NONE }, | ||
141 | { NONE }, | ||
142 | { NONE }, | ||
143 | { NONE }, | ||
144 | |||
145 | { COMM, 0, 1, 0x02 }, /* ID: 20 */ | ||
146 | { COMM, 1, 1, 0x01 }, | ||
147 | { COMM, 0, 1, 0x00 }, | ||
148 | { COMM, 0, 1, 0x02 }, | ||
149 | { COMM, 0, 1, 0x02 }, | ||
150 | { COMM, 0, 1, 0x00 }, | ||
151 | { COMM, 2, 2, 0x02 }, | ||
152 | { COMM, 0, 1, 0x00 }, | ||
153 | |||
154 | { COMM, 2, 1, 0x02 }, /* ID: 28 */ | ||
155 | { NONE }, | ||
156 | { STAN, 0, 1, 0x00 }, | ||
157 | { NONE }, | ||
158 | { NONE }, | ||
159 | { NONE }, | ||
160 | { NONE }, | ||
161 | { NONE }, | ||
162 | |||
163 | { COMM, 1, 1, 0x01 }, /* ID: 30 */ | ||
164 | { COMM, 1, 1, 0x02 }, | ||
165 | { COMM, 2, 1, 0x02 }, | ||
166 | { COMM, 1, 3, 0x01 }, | ||
167 | { COMM, 0, 1, 0x08 }, | ||
168 | { COMM, 4, 1, 0x14 }, | ||
169 | { NONE }, | ||
170 | { NONE }, | ||
171 | |||
172 | { NONE }, /* ID: 38 */ | ||
173 | { NONE }, | ||
174 | { NONE }, | ||
175 | { NONE }, | ||
176 | { NONE }, | ||
177 | { NONE }, | ||
178 | { NONE }, | ||
179 | { NONE }, | ||
180 | |||
181 | { COMM, 3, 1, 0x04 }, /* ID: 40 */ | ||
182 | { NONE }, | ||
183 | { NONE }, | ||
184 | { NONE }, | ||
185 | { NONE }, | ||
186 | { NONE }, | ||
187 | { NONE }, | ||
188 | { NONE }, | ||
189 | |||
190 | { NONE }, /* ID: 48 */ | ||
191 | { NONE }, | ||
192 | { NONE }, | ||
193 | { NONE }, | ||
194 | { NONE }, | ||
195 | { NONE }, | ||
196 | { NONE }, | ||
197 | { NONE }, | ||
198 | |||
199 | { NONE }, /* ID: 50 */ | ||
200 | { NONE }, | ||
201 | { NONE }, | ||
202 | { NONE }, | ||
203 | { NONE }, | ||
204 | { NONE }, | ||
205 | { NONE }, | ||
206 | { NONE }, | ||
207 | |||
208 | { NONE }, /* ID: 58 */ | ||
209 | { NONE }, | ||
210 | { COMM, 0, 1, 0x09 }, | ||
211 | { NONE }, | ||
212 | { NONE }, | ||
213 | { NONE }, | ||
214 | { NONE }, | ||
215 | { NONE } | ||
216 | }; | ||
217 | |||
218 | |||
219 | #define PTRDIFF(pe, ps) ((int) (((long) (pe) - (long) (ps)) / sizeof(*pe))) | ||
220 | |||
221 | static char tzxheader[] = {'Z','X','T','a','p','e','!',0x1A}; | ||
222 | |||
223 | static int readbuf(void *ptr, int size, /*FILE *fp*/ int fd) | ||
224 | { | ||
225 | /*return (int) fread(ptr, 1, (size_t) size, tapefp);*/ | ||
226 | return (int) rb->read(fd, ptr, (size_t) size); | ||
227 | } | ||
228 | |||
229 | static void premature(struct seginfo *csp) | ||
230 | { | ||
231 | csp->segtype = SEG_ERROR; | ||
232 | rb->snprintf(seg_desc,DESC_LEN, "Premature end of segment"); | ||
233 | } | ||
234 | |||
235 | static int read_tzx_header(byte *hb, struct seginfo *csp) | ||
236 | { | ||
237 | int res; | ||
238 | int segid, seght; | ||
239 | int lenoffs, lenbytes, lenmul, lenadd; | ||
240 | int hlen; | ||
241 | long length; | ||
242 | byte *hip; | ||
243 | |||
244 | segid = getc(tapefd); | ||
245 | if(segid == EOF) { | ||
246 | csp->segtype = SEG_END; | ||
247 | rb->snprintf(seg_desc,DESC_LEN, "End of Tape"); | ||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | hb[0] = (byte) segid; | ||
252 | |||
253 | if(segid < NUMBLOCKID) seght = tzxb[segid].type; | ||
254 | else seght = 0; /* was NONE here*/ | ||
255 | |||
256 | if(seght == COMM) { | ||
257 | lenbytes = tzxb[segid].lenbytes; | ||
258 | lenmul = tzxb[segid].lenmul; | ||
259 | hlen = tzxb[segid].hlen; | ||
260 | lenadd = hlen; | ||
261 | lenoffs = hlen - lenbytes; | ||
262 | } | ||
263 | else { | ||
264 | lenoffs = 0x00; | ||
265 | lenbytes = 4; | ||
266 | lenmul = 1; | ||
267 | lenadd = 0x00; | ||
268 | hlen = 0x04; | ||
269 | } | ||
270 | |||
271 | if(seght == STAN) hlen += tzxb[segid].hlen; | ||
272 | |||
273 | hip = hb+1; | ||
274 | res = readbuf(hip, hlen, tapefd); | ||
275 | if(res != hlen) { | ||
276 | premature(csp); | ||
277 | return 0; | ||
278 | } | ||
279 | length = 0; | ||
280 | for(;lenbytes; lenbytes--) | ||
281 | length = (length << 8) + hip[lenoffs + lenbytes - 1]; | ||
282 | |||
283 | length = (length * lenmul) + lenadd - hlen; | ||
284 | |||
285 | csp->len = length; | ||
286 | return 1; | ||
287 | } | ||
288 | |||
289 | static int read_tap_header(byte *hb, struct seginfo *csp) | ||
290 | { | ||
291 | int res; | ||
292 | |||
293 | res = readbuf(hb, 2, tapefd); | ||
294 | if(res < 2) { | ||
295 | if(res == 0) { | ||
296 | csp->segtype = SEG_END; | ||
297 | rb->snprintf(seg_desc,DESC_LEN, "End of Tape"); | ||
298 | } | ||
299 | else premature(csp); | ||
300 | return 0; | ||
301 | } | ||
302 | csp->len = DBYTE(hb, 0); | ||
303 | return 1; | ||
304 | } | ||
305 | |||
306 | static int read_header(byte *hb, struct seginfo *csp) | ||
307 | { | ||
308 | segbeg = 0; | ||
309 | csp->ptr = 0; | ||
310 | |||
311 | csp->segtype = SEG_OTHER; | ||
312 | if(tf_tpi.type == TAP_TAP) | ||
313 | return read_tap_header(hb, csp); | ||
314 | else if(tf_tpi.type == TAP_TZX) | ||
315 | return read_tzx_header(hb, csp); | ||
316 | |||
317 | return 0; | ||
318 | } | ||
319 | |||
320 | static void isbeg(void) | ||
321 | { | ||
322 | segbeg = 1; | ||
323 | tf_cseg.len = tf_cseg.ptr = 0; | ||
324 | } | ||
325 | |||
326 | |||
327 | static int end_seg(struct seginfo *csp) | ||
328 | { | ||
329 | if(!segbeg) { | ||
330 | if(csp->len != csp->ptr) { | ||
331 | /*fseek(tapefp, tf_cseg.len - tf_cseg.ptr - 1, SEEK_CUR);*/ | ||
332 | rb->lseek(tapefd, tf_cseg.len - tf_cseg.ptr - 1, SEEK_CUR); | ||
333 | |||
334 | if(getc(tapefd) == EOF) { | ||
335 | premature(csp); | ||
336 | return 0; | ||
337 | } | ||
338 | } | ||
339 | segi++; | ||
340 | isbeg(); | ||
341 | } | ||
342 | playstate = PL_NONE; | ||
343 | return 1; | ||
344 | } | ||
345 | |||
346 | |||
347 | static int jump_to_segment(int newsegi, struct seginfo *csp) | ||
348 | { | ||
349 | if(newsegi <= segi) { | ||
350 | segi = 0; | ||
351 | isbeg(); | ||
352 | /*fseek(tapefp, firstseg_offs, SEEK_SET);*/ | ||
353 | rb->lseek(tapefd, firstseg_offs, SEEK_SET); | ||
354 | } | ||
355 | else if(!end_seg(csp)) return 0; | ||
356 | |||
357 | while(segi != newsegi) { | ||
358 | if(!read_header(rbuf, csp)) return 0; | ||
359 | if(!end_seg(csp)) return 0; | ||
360 | } | ||
361 | return 1; | ||
362 | } | ||
363 | |||
364 | |||
365 | static int next_data(void) | ||
366 | { | ||
367 | int res; | ||
368 | if(tf_cseg.ptr == tf_cseg.len) return DAT_END; | ||
369 | |||
370 | res = getc(tapefd); | ||
371 | if(res == EOF) { | ||
372 | rb->snprintf(seg_desc, DESC_LEN,"Premature end of segment"); | ||
373 | return DAT_ERR; | ||
374 | } | ||
375 | tf_cseg.ptr++; | ||
376 | return res; | ||
377 | } | ||
378 | |||
379 | |||
380 | static void normal_segment(struct seginfo *csp) | ||
381 | { | ||
382 | rb->snprintf(seg_desc,DESC_LEN, "Data"); | ||
383 | csp->type = ST_NORM; | ||
384 | csp->segtype = SEG_DATA; | ||
385 | csp->pulse = 2168; /* 2016 */ | ||
386 | csp->num = 3220; | ||
387 | csp->sync1p = 667; | ||
388 | csp->sync2p = 735; | ||
389 | csp->zerop = 855; /* 672 */ | ||
390 | csp->onep = 1710; /* 1568 */ | ||
391 | csp->bused = 8; | ||
392 | } | ||
393 | |||
394 | |||
395 | static int interpret_tzx_header(byte *hb, struct seginfo *csp) | ||
396 | { | ||
397 | int res; | ||
398 | int segid; | ||
399 | byte *hip; | ||
400 | int offs; | ||
401 | dbyte dtmp; | ||
402 | |||
403 | segid = hb[0]; | ||
404 | hip = hb+1; | ||
405 | |||
406 | switch(segid) { | ||
407 | case 0x10: | ||
408 | normal_segment(csp); | ||
409 | csp->pause = DBYTE(hip, 0x00); | ||
410 | break; | ||
411 | |||
412 | case 0x11: | ||
413 | rb->snprintf(seg_desc,DESC_LEN, "Turbo Data"); | ||
414 | csp->type = ST_NORM; | ||
415 | csp->segtype = SEG_DATA_TURBO; | ||
416 | csp->pulse = DBYTE(hip, 0x00); | ||
417 | csp->sync1p = DBYTE(hip, 0x02); | ||
418 | csp->sync2p = DBYTE(hip, 0x04); | ||
419 | csp->zerop = DBYTE(hip, 0x06); | ||
420 | csp->onep = DBYTE(hip, 0x08); | ||
421 | csp->num = DBYTE(hip, 0x0A); | ||
422 | csp->bused = BYTE(hip, 0x0C); | ||
423 | csp->pause = DBYTE(hip, 0x0D); | ||
424 | break; | ||
425 | |||
426 | case 0x12: | ||
427 | rb->snprintf(seg_desc,DESC_LEN, "Pure Tone"); | ||
428 | csp->type = ST_NORM; | ||
429 | csp->segtype = SEG_OTHER; | ||
430 | csp->pulse = DBYTE(hip, 0x00); | ||
431 | csp->num = DBYTE(hip, 0x02); | ||
432 | csp->sync1p = 0; | ||
433 | csp->sync2p = 0; | ||
434 | csp->zerop = 0; | ||
435 | csp->onep = 0; | ||
436 | csp->bused = 0; | ||
437 | csp->pause = 0; | ||
438 | break; | ||
439 | |||
440 | case 0x13: | ||
441 | rb->snprintf(seg_desc,DESC_LEN, "Pulse Sequence"); | ||
442 | csp->type = ST_PSEQ; | ||
443 | csp->segtype = SEG_OTHER; | ||
444 | csp->pause = 0; | ||
445 | break; | ||
446 | |||
447 | case 0x14: | ||
448 | rb->snprintf(seg_desc,DESC_LEN, "Pure Data"); | ||
449 | csp->type = ST_NORM; | ||
450 | csp->segtype = SEG_DATA_PURE; | ||
451 | csp->zerop = DBYTE(hip, 0x00); | ||
452 | csp->onep = DBYTE(hip, 0x02); | ||
453 | csp->bused = BYTE(hip, 0x04); | ||
454 | csp->pause = DBYTE(hip, 0x05); | ||
455 | csp->pulse = 0; | ||
456 | csp->num = 0; | ||
457 | csp->sync1p = 0; | ||
458 | csp->sync2p = 0; | ||
459 | break; | ||
460 | |||
461 | case 0x15: | ||
462 | rb->snprintf(seg_desc,DESC_LEN, "Direct Recording"); | ||
463 | csp->type = ST_DIRE; | ||
464 | csp->segtype = SEG_OTHER; | ||
465 | csp->pulse = DBYTE(hip, 0x00); | ||
466 | csp->pause = DBYTE(hip, 0x02); | ||
467 | csp->bused = BYTE(hip, 0x04); | ||
468 | break; | ||
469 | |||
470 | case 0x20: | ||
471 | dtmp = DBYTE(hip, 0x00); | ||
472 | if(dtmp == 0) { | ||
473 | if(!tapeopt.stoppause) { | ||
474 | csp->type = ST_MISC; | ||
475 | csp->segtype = SEG_STOP; | ||
476 | } | ||
477 | else { | ||
478 | csp->pause = tapeopt.stoppause * 1000; | ||
479 | csp->type = ST_NORM; | ||
480 | csp->segtype = SEG_PAUSE; | ||
481 | } | ||
482 | rb->snprintf(seg_desc,DESC_LEN, "Stop the Tape Mark"); | ||
483 | } | ||
484 | else { | ||
485 | csp->pause = dtmp; | ||
486 | csp->type = ST_NORM; | ||
487 | csp->segtype = SEG_PAUSE; | ||
488 | rb->snprintf(seg_desc,DESC_LEN, "Pause for %i.%03is", | ||
489 | csp->pause / 1000, csp->pause % 1000); | ||
490 | } | ||
491 | csp->pulse = 0; | ||
492 | csp->num = 0; | ||
493 | csp->sync1p = 0; | ||
494 | csp->sync2p = 0; | ||
495 | csp->zerop = 0; | ||
496 | csp->onep = 0; | ||
497 | csp->bused = 0; | ||
498 | break; | ||
499 | |||
500 | case 0x21: | ||
501 | csp->type = ST_MISC; | ||
502 | csp->segtype = SEG_GRP_BEG; | ||
503 | res = readbuf(rbuf, csp->len, tapefd); | ||
504 | if(res != (int) csp->len) { | ||
505 | premature(csp); | ||
506 | return 0; | ||
507 | } | ||
508 | csp->ptr += csp->len; | ||
509 | { | ||
510 | int blen; | ||
511 | rb->snprintf(seg_desc,DESC_LEN, "Begin Group: "); | ||
512 | blen = (int) rb->strlen(seg_desc); | ||
513 | rb->strncpy(seg_desc+blen, (char *) rbuf, (unsigned) csp->len); | ||
514 | seg_desc[csp->len + blen] = '\0'; | ||
515 | } | ||
516 | break; | ||
517 | |||
518 | case 0x22: | ||
519 | rb->snprintf(seg_desc,DESC_LEN, "End Group"); | ||
520 | csp->type = ST_MISC; | ||
521 | csp->segtype = SEG_GRP_END; | ||
522 | break; | ||
523 | |||
524 | case 0x23: | ||
525 | offs = (signed short) DBYTE(hip, 0x00); | ||
526 | if(offs == 0) { | ||
527 | rb->snprintf(seg_desc,DESC_LEN, "Infinite loop"); | ||
528 | csp->type = ST_MISC; | ||
529 | csp->segtype = SEG_STOP; | ||
530 | } | ||
531 | else { | ||
532 | csp->type = ST_MISC; | ||
533 | csp->segtype = SEG_SKIP; | ||
534 | rb->snprintf(seg_desc,DESC_LEN, "Jump to %i", segi+offs); | ||
535 | jump_to_segment(segi + offs, csp); | ||
536 | } | ||
537 | break; | ||
538 | |||
539 | case 0x24: | ||
540 | loopctr = DBYTE(hip, 0x00); | ||
541 | rb->snprintf(seg_desc,DESC_LEN, "Loop %i times", loopctr); | ||
542 | loopbeg = segi+1; | ||
543 | csp->type = ST_MISC; | ||
544 | csp->segtype = SEG_SKIP; | ||
545 | break; | ||
546 | |||
547 | case 0x25: | ||
548 | csp->type = ST_MISC; | ||
549 | csp->segtype = SEG_SKIP; | ||
550 | if(loopctr) loopctr--; | ||
551 | if(loopctr) { | ||
552 | jump_to_segment(loopbeg, csp); | ||
553 | rb->snprintf(seg_desc,DESC_LEN, "Loop to: %i", loopbeg); | ||
554 | } | ||
555 | else rb->snprintf(seg_desc,DESC_LEN, "Loop End"); | ||
556 | break; | ||
557 | |||
558 | case 0x26: | ||
559 | csp->type = ST_MISC; | ||
560 | csp->segtype = SEG_SKIP; | ||
561 | dtmp = DBYTE(hip, 0x00); | ||
562 | if(callctr < dtmp) { | ||
563 | int offset; | ||
564 | callbeg = segi; | ||
565 | /*fseek(tapefp, callctr*2, SEEK_CUR);*/ | ||
566 | rb->lseek(tapefd, callctr*2, SEEK_CUR); | ||
567 | csp->ptr += callctr*2; | ||
568 | res = readbuf(rbuf, 2, tapefd); | ||
569 | if(res != 2) { | ||
570 | premature(csp); | ||
571 | return 0; | ||
572 | } | ||
573 | csp->ptr += 2; | ||
574 | offset = (signed short) DBYTE(rbuf, 0x00); | ||
575 | rb->snprintf(seg_desc,DESC_LEN, "Call to %i", segi+offset); | ||
576 | jump_to_segment(segi+offset, csp); | ||
577 | callctr++; | ||
578 | } | ||
579 | else { | ||
580 | callctr = 0; | ||
581 | rb->snprintf(seg_desc,DESC_LEN, "Call Sequence End"); | ||
582 | } | ||
583 | break; | ||
584 | |||
585 | case 0x27: | ||
586 | csp->type = ST_MISC; | ||
587 | csp->segtype = SEG_SKIP; | ||
588 | rb->snprintf(seg_desc,DESC_LEN, "Return"); | ||
589 | if(callctr > 0) jump_to_segment(callbeg, csp); | ||
590 | break; | ||
591 | |||
592 | case 0x28: | ||
593 | rb->snprintf(seg_desc,DESC_LEN, "Selection (Not yet supported)"); | ||
594 | csp->type = ST_MISC; | ||
595 | csp->segtype = SEG_SKIP; | ||
596 | break; | ||
597 | |||
598 | case 0x2A: | ||
599 | if(tapeopt.machine == MACHINE_48) { | ||
600 | rb->snprintf(seg_desc,DESC_LEN, "Stop the Tape in 48k Mode (Stopped)"); | ||
601 | csp->type = ST_MISC; | ||
602 | csp->segtype = SEG_STOP; | ||
603 | } | ||
604 | else { | ||
605 | rb->snprintf(seg_desc,DESC_LEN, "Stop the Tape in 48k Mode (Not Stopped)"); | ||
606 | csp->type = ST_MISC; | ||
607 | csp->segtype = SEG_SKIP; | ||
608 | } | ||
609 | break; | ||
610 | |||
611 | case 0x31: | ||
612 | case 0x30: | ||
613 | csp->type = ST_MISC; | ||
614 | csp->segtype = SEG_SKIP; | ||
615 | res = readbuf(rbuf, csp->len, tapefd); | ||
616 | if(res != (int) csp->len) { | ||
617 | premature(csp); | ||
618 | return 0; | ||
619 | } | ||
620 | csp->ptr += csp->len; | ||
621 | rb->strncpy(seg_desc, (char *) rbuf, (unsigned) csp->len); | ||
622 | seg_desc[csp->len] = '\0'; | ||
623 | break; | ||
624 | |||
625 | case 0x32: | ||
626 | csp->type = ST_MISC; | ||
627 | csp->segtype = SEG_SKIP; | ||
628 | { | ||
629 | int numstr, i; | ||
630 | |||
631 | i = 0; | ||
632 | numstr = next_data(); | ||
633 | for(;numstr > 0; numstr--) { | ||
634 | int tlen, tid, b; | ||
635 | |||
636 | tid = next_data(); | ||
637 | tlen = next_data(); | ||
638 | if(tid < 0 || tlen < 0) return 0; | ||
639 | |||
640 | for(; tlen; tlen--) { | ||
641 | b = next_data(); | ||
642 | if(b < 0) return 0; | ||
643 | seg_desc[i++] = b; | ||
644 | } | ||
645 | seg_desc[i++] = '\n'; | ||
646 | } | ||
647 | seg_desc[i] = '\0'; | ||
648 | } | ||
649 | break; | ||
650 | |||
651 | case 0x33: | ||
652 | rb->snprintf(seg_desc,DESC_LEN, "Hardware Information (Not yet supported)"); | ||
653 | csp->type = ST_MISC; | ||
654 | csp->segtype = SEG_SKIP; | ||
655 | break; | ||
656 | |||
657 | case 0x34: | ||
658 | rb->snprintf(seg_desc, DESC_LEN,"Emulation Information (Not yet supported)"); | ||
659 | csp->type = ST_MISC; | ||
660 | csp->segtype = SEG_SKIP; | ||
661 | break; | ||
662 | |||
663 | case 0x35: | ||
664 | rb->snprintf(seg_desc,DESC_LEN, "Custom Information (Not yet supported)"); | ||
665 | csp->type = ST_MISC; | ||
666 | csp->segtype = SEG_SKIP; | ||
667 | break; | ||
668 | |||
669 | case 0x40: | ||
670 | rb->snprintf(seg_desc, DESC_LEN,"Snapshot (Not yet supported)"); | ||
671 | csp->type = ST_MISC; | ||
672 | csp->segtype = SEG_SKIP; | ||
673 | break; | ||
674 | |||
675 | case 0x5A: | ||
676 | rb->snprintf(seg_desc, DESC_LEN,"Tapefile Concatenation Point"); | ||
677 | csp->type = ST_MISC; | ||
678 | csp->segtype = SEG_SKIP; | ||
679 | |||
680 | default: | ||
681 | csp->type = ST_MISC; | ||
682 | csp->segtype = SEG_SKIP; | ||
683 | rb->snprintf(seg_desc,DESC_LEN, "Unknown TZX block (id: %02X, version: %i.%02i)", | ||
684 | segid, tf_tpi.tzxmajver, tf_tpi.tzxminver); | ||
685 | break; | ||
686 | } | ||
687 | |||
688 | return 1; | ||
689 | } | ||
690 | |||
691 | static int interpret_header(byte *hb, struct seginfo *csp) | ||
692 | { | ||
693 | if(tf_tpi.type == TAP_TAP) { | ||
694 | normal_segment(csp); | ||
695 | csp->pause = DEF_LEAD_PAUSE; | ||
696 | |||
697 | return 1; | ||
698 | } | ||
699 | else if(tf_tpi.type == TAP_TZX) | ||
700 | return interpret_tzx_header(hb, csp); | ||
701 | |||
702 | return 0; | ||
703 | } | ||
704 | |||
705 | byte *tf_get_block(int i) | ||
706 | { | ||
707 | seg_desc[0] = '\0'; | ||
708 | |||
709 | if(jump_to_segment(i, &tf_cseg)) { | ||
710 | tf_segoffs = ftell(tapefd); | ||
711 | |||
712 | if(read_header(rbuf, &tf_cseg) && | ||
713 | interpret_header(rbuf, &tf_cseg)) return rbuf; | ||
714 | } | ||
715 | return NULL; | ||
716 | } | ||
717 | |||
718 | |||
719 | int next_byte(void) | ||
720 | { | ||
721 | playstate = PL_NONE; | ||
722 | return next_data(); | ||
723 | } | ||
724 | |||
725 | #define DPULSE(v1,v2) (*impbuf++=(v1), *impbuf++=(v2), timelen-=(v1)+(v2)) | ||
726 | #define PULSE(v) (*impbuf++=(v), currlev = !currlev, timelen-=(v)) | ||
727 | |||
728 | int next_imps(unsigned short *impbuf, int buflen, long timelen) | ||
729 | { | ||
730 | static int toput; | ||
731 | static int bitrem; | ||
732 | static dbyte dirpulse; | ||
733 | unsigned short *impbufend, *impbufstart; | ||
734 | |||
735 | impbufstart = impbuf; | ||
736 | impbufend = impbuf + buflen; | ||
737 | |||
738 | while(impbuf < impbufend - 1 && timelen > 0) { | ||
739 | switch(playstate) { | ||
740 | |||
741 | case PL_PAUSE: | ||
742 | if(currlev && lead_pause) { | ||
743 | PULSE(IMP_1MS); | ||
744 | lead_pause --; | ||
745 | } | ||
746 | else if(lead_pause > 10) { | ||
747 | if(tapeopt.blanknoise && !(rb->rand() % 64)) | ||
748 | DPULSE(IMP_1MS * 10 - 1000, 1000); | ||
749 | else | ||
750 | DPULSE(IMP_1MS * 10, 0); | ||
751 | lead_pause -= 10; | ||
752 | } | ||
753 | else if(lead_pause) { | ||
754 | DPULSE(IMP_1MS, 0); | ||
755 | lead_pause --; | ||
756 | } | ||
757 | else { | ||
758 | if(tf_cseg.num || tf_cseg.sync1p || tf_cseg.sync2p || | ||
759 | tf_cseg.ptr != tf_cseg.len) finished = 0; | ||
760 | |||
761 | switch (tf_cseg.type) { | ||
762 | case ST_NORM: playstate = PL_LEADER; break; | ||
763 | case ST_DIRE: playstate = PL_DIRE; dirpulse = 0; break; | ||
764 | case ST_PSEQ: playstate = PL_PSEQ; break; | ||
765 | default: playstate = PL_NONE; | ||
766 | } | ||
767 | } | ||
768 | break; | ||
769 | |||
770 | case PL_LEADER: | ||
771 | if(tf_cseg.num >= 2) { | ||
772 | DPULSE(tf_cseg.pulse, tf_cseg.pulse); | ||
773 | tf_cseg.num -= 2; | ||
774 | } | ||
775 | else | ||
776 | if(tf_cseg.num) { | ||
777 | PULSE(tf_cseg.pulse); | ||
778 | tf_cseg.num --; | ||
779 | } | ||
780 | else { /* PL_SYNC */ | ||
781 | if(tf_cseg.sync1p || tf_cseg.sync2p) | ||
782 | DPULSE(tf_cseg.sync1p, tf_cseg.sync2p); | ||
783 | bitrem = 0; | ||
784 | playstate = PL_DATA; | ||
785 | } | ||
786 | break; | ||
787 | |||
788 | case PL_DATA: | ||
789 | if(!bitrem) { | ||
790 | toput = next_data(); | ||
791 | if(toput < 0) { | ||
792 | playstate = PL_END; | ||
793 | break; | ||
794 | } | ||
795 | if(tf_cseg.ptr != tf_cseg.len) { | ||
796 | if(timelen > 16 * max(tf_cseg.onep, tf_cseg.zerop) && | ||
797 | impbuf <= impbufend - 16) { | ||
798 | int p1, p2, br, tp; | ||
799 | |||
800 | p1 = tf_cseg.onep; | ||
801 | p2 = tf_cseg.zerop; | ||
802 | br = 8; | ||
803 | tp = toput; | ||
804 | |||
805 | while(br) { | ||
806 | if(tp & 0x80) DPULSE(p1, p1); | ||
807 | else DPULSE(p2, p2); | ||
808 | br--; | ||
809 | tp <<= 1; | ||
810 | } | ||
811 | bitrem = 0; | ||
812 | break; | ||
813 | } | ||
814 | bitrem = 8; | ||
815 | } | ||
816 | else { | ||
817 | bitrem = tf_cseg.bused; | ||
818 | if(!bitrem) break; | ||
819 | } | ||
820 | } | ||
821 | if(toput & 0x80) DPULSE(tf_cseg.onep, tf_cseg.onep); | ||
822 | else DPULSE(tf_cseg.zerop, tf_cseg.zerop); | ||
823 | bitrem--, toput <<= 1; | ||
824 | break; | ||
825 | |||
826 | case PL_PSEQ: | ||
827 | { | ||
828 | int b1, b2; | ||
829 | dbyte pulse1, pulse2; | ||
830 | b1 = next_data(); | ||
831 | b2 = next_data(); | ||
832 | if(b1 < 0 || b2 < 0) { | ||
833 | playstate = PL_END; | ||
834 | break; | ||
835 | } | ||
836 | pulse1 = b1 + (b2 << 8); | ||
837 | |||
838 | b1 = next_data(); | ||
839 | b2 = next_data(); | ||
840 | if(b1 < 0 || b2 < 0) { | ||
841 | PULSE(pulse1); | ||
842 | playstate = PL_END; | ||
843 | break; | ||
844 | } | ||
845 | pulse2 = b1 + (b2 << 8); | ||
846 | DPULSE(pulse1, pulse2); | ||
847 | } | ||
848 | break; | ||
849 | |||
850 | case PL_DIRE: | ||
851 | for(;;) { | ||
852 | if(!bitrem) { | ||
853 | toput = next_data(); | ||
854 | if(toput < 0) { | ||
855 | playstate = PL_END; | ||
856 | DPULSE(dirpulse, 0); | ||
857 | break; | ||
858 | } | ||
859 | if(tf_cseg.ptr != tf_cseg.len) bitrem = 8; | ||
860 | else { | ||
861 | bitrem = tf_cseg.bused; | ||
862 | if(!bitrem) break; | ||
863 | } | ||
864 | } | ||
865 | bitrem--; | ||
866 | toput <<= 1; | ||
867 | if(((toput & 0x0100) ^ (currlev ? 0x0100 : 0x00))) { | ||
868 | PULSE(dirpulse); | ||
869 | dirpulse = tf_cseg.pulse; | ||
870 | break; | ||
871 | } | ||
872 | dirpulse += tf_cseg.pulse; | ||
873 | if(dirpulse >= 0x8000) { | ||
874 | DPULSE(dirpulse, 0); | ||
875 | dirpulse = 0; | ||
876 | break; | ||
877 | } | ||
878 | } | ||
879 | break; | ||
880 | |||
881 | case PL_END: | ||
882 | if(tf_cseg.pause) { | ||
883 | PULSE(IMP_1MS); | ||
884 | tf_cseg.pause--; | ||
885 | if(currlev) PULSE(0); | ||
886 | finished = 1; | ||
887 | } | ||
888 | playstate = PL_NONE; | ||
889 | break; | ||
890 | |||
891 | case PL_NONE: | ||
892 | default: | ||
893 | return PTRDIFF(impbuf, impbufstart); | ||
894 | } | ||
895 | } | ||
896 | |||
897 | return PTRDIFF(impbuf, impbufstart); | ||
898 | } | ||
899 | |||
900 | |||
901 | int next_segment(void) | ||
902 | { | ||
903 | if(endnext) { | ||
904 | endnext = 0; | ||
905 | tf_cseg.segtype = endtype; | ||
906 | tf_cseg.pause = endpause; | ||
907 | playstate = endplay; | ||
908 | return tf_cseg.segtype; | ||
909 | } | ||
910 | |||
911 | seg_desc[0] = '\0'; | ||
912 | lead_pause = tf_cseg.pause; | ||
913 | |||
914 | if(end_seg(&tf_cseg)) { | ||
915 | currsegi = segi; | ||
916 | if(read_header(rbuf, &tf_cseg)) interpret_header(rbuf, &tf_cseg); | ||
917 | } | ||
918 | |||
919 | if(tf_cseg.segtype >= SEG_DATA) { | ||
920 | playstate = PL_PAUSE; | ||
921 | if(lead_pause) finished = 1; | ||
922 | } | ||
923 | else playstate = PL_NONE; | ||
924 | |||
925 | if(tf_cseg.segtype <= SEG_STOP && !finished) { | ||
926 | endnext = 1; | ||
927 | endtype = tf_cseg.segtype; | ||
928 | endpause = tf_cseg.pause; | ||
929 | endplay = playstate; | ||
930 | if(lead_pause > 0) lead_pause--; | ||
931 | |||
932 | tf_cseg.pause = 1; | ||
933 | tf_cseg.segtype = SEG_VIRTUAL; | ||
934 | playstate = PL_END; | ||
935 | } | ||
936 | |||
937 | return tf_cseg.segtype; | ||
938 | } | ||
939 | |||
940 | int goto_segment(int at_seg) | ||
941 | { | ||
942 | int res; | ||
943 | |||
944 | res = jump_to_segment(at_seg, &tf_cseg); | ||
945 | tf_cseg.pause = DEF_LEAD_PAUSE; | ||
946 | |||
947 | return res; | ||
948 | } | ||
949 | |||
950 | unsigned segment_pos(void) | ||
951 | { | ||
952 | return currsegi; | ||
953 | } | ||
954 | |||
955 | void close_tapefile(void) | ||
956 | { | ||
957 | if(tapefd != -1) { | ||
958 | playstate = PL_NONE; | ||
959 | rb->close(tapefd); | ||
960 | tapefd = -1; | ||
961 | } | ||
962 | } | ||
963 | |||
964 | int open_tapefile(char *name, int type) | ||
965 | { | ||
966 | int res; | ||
967 | int ok; | ||
968 | |||
969 | seg_desc[0] = '\0'; | ||
970 | currlev = 0; | ||
971 | |||
972 | if(type != TAP_TAP && type != TAP_TZX) { | ||
973 | rb->snprintf(seg_desc,DESC_LEN, "Illegal tape type"); | ||
974 | return 0; | ||
975 | } | ||
976 | |||
977 | /*tapefp = fopen(name, "rb");*/ | ||
978 | tapefd = rb->open(name, O_RDONLY); | ||
979 | if(tapefd < 0 ) { | ||
980 | /*rb->snprintf(seg_desc,DESC_LEN, "Could not open `%s': %s", name, strerror(errno));*/ | ||
981 | return 0; | ||
982 | } | ||
983 | |||
984 | tf_tpi.type = type; | ||
985 | tf_cseg.pause = DEF_LEAD_PAUSE; | ||
986 | INITTAPEOPT(tapeopt); | ||
987 | |||
988 | currsegi = segi = 0; | ||
989 | isbeg(); | ||
990 | |||
991 | firstseg_offs = 0; | ||
992 | |||
993 | ok = 1; | ||
994 | |||
995 | if(tf_tpi.type == TAP_TZX) { | ||
996 | |||
997 | firstseg_offs = 10; | ||
998 | res = readbuf(rbuf, 10, tapefd); | ||
999 | if(res == 10 && rb->strncasecmp((char *)rbuf, tzxheader, 8) == 0) { | ||
1000 | tf_tpi.tzxmajver = rbuf[8]; | ||
1001 | tf_tpi.tzxminver = rbuf[9]; | ||
1002 | |||
1003 | if(tf_tpi.tzxmajver > TZXMAJPROG) { | ||
1004 | rb->snprintf(seg_desc, DESC_LEN, | ||
1005 | "Cannot handle TZX file version (%i.%02i)", | ||
1006 | tf_tpi.tzxmajver, tf_tpi.tzxminver); | ||
1007 | ok = 0; | ||
1008 | } | ||
1009 | } | ||
1010 | else { | ||
1011 | rb->snprintf(seg_desc,DESC_LEN, "Illegal TZX file header"); | ||
1012 | ok = 0; | ||
1013 | } | ||
1014 | } | ||
1015 | |||
1016 | if(!ok) { | ||
1017 | close_tapefile(); | ||
1018 | return 0; | ||
1019 | } | ||
1020 | endnext = 0; | ||
1021 | |||
1022 | loopctr = 0; | ||
1023 | callctr = 0; | ||
1024 | |||
1025 | return 1; | ||
1026 | } | ||
1027 | |||
1028 | int get_level(void) | ||
1029 | { | ||
1030 | return currlev; | ||
1031 | } | ||
1032 | |||
1033 | long get_seglen(void) | ||
1034 | { | ||
1035 | return tf_cseg.len; | ||
1036 | } | ||
1037 | |||
1038 | long get_segpos(void) | ||
1039 | { | ||
1040 | return tf_cseg.ptr; | ||
1041 | } | ||
1042 | |||
1043 | void set_tapefile_options(struct tape_options *to) | ||
1044 | { | ||
1045 | rb->memcpy(&tapeopt, to, sizeof(tapeopt)); | ||
1046 | } | ||
1047 | |||
diff --git a/apps/plugins/zxbox/tapefile.h b/apps/plugins/zxbox/tapefile.h new file mode 100644 index 0000000000..e7019f2fa2 --- /dev/null +++ b/apps/plugins/zxbox/tapefile.h | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef TAPEFILE_H | ||
22 | #define TAPEFILE_H | ||
23 | |||
24 | #define DAT_ERR -2 | ||
25 | #define DAT_END -1 | ||
26 | |||
27 | #define SEG_ERROR -1 | ||
28 | #define SEG_END 0 /* ^--- End of tape */ | ||
29 | |||
30 | #define SEG_STOP 1 | ||
31 | #define SEG_SKIP 2 | ||
32 | #define SEG_GRP_BEG 3 | ||
33 | #define SEG_GRP_END 4 | ||
34 | |||
35 | #define SEG_DATA 10 | ||
36 | #define SEG_DATA_TURBO 11 | ||
37 | #define SEG_DATA_PURE 12 | ||
38 | |||
39 | #define SEG_PAUSE 20 | ||
40 | #define SEG_OTHER 21 | ||
41 | |||
42 | #define SEG_VIRTUAL 30 | ||
43 | |||
44 | #define TAP_TAP 0 | ||
45 | #define TAP_TZX 1 | ||
46 | |||
47 | #define MACHINE_48 0 | ||
48 | #define MACHINE_128 1 | ||
49 | |||
50 | struct tape_options { | ||
51 | int blanknoise; | ||
52 | int stoppause; | ||
53 | int machine; | ||
54 | }; | ||
55 | |||
56 | #define INITTAPEOPT(to) \ | ||
57 | (to).blanknoise=0, \ | ||
58 | (to).stoppause=0, \ | ||
59 | (to).machine=MACHINE_48 | ||
60 | |||
61 | extern char seg_desc[]; | ||
62 | |||
63 | #ifdef __cplusplus | ||
64 | extern "C" { | ||
65 | #endif | ||
66 | |||
67 | extern int open_tapefile(char *name, int type); | ||
68 | extern void close_tapefile(void); | ||
69 | extern int goto_segment(int at_seg); | ||
70 | extern int next_segment(void); | ||
71 | extern int next_byte(void); | ||
72 | extern int next_imps(unsigned short *impbuf, int buflen, long timelen); | ||
73 | |||
74 | extern void set_tapefile_options(struct tape_options *to); | ||
75 | extern int get_level(void); | ||
76 | |||
77 | extern long get_seglen(void); | ||
78 | extern long get_segpos(void); | ||
79 | extern unsigned segment_pos(void); | ||
80 | |||
81 | #ifdef __cplusplus | ||
82 | } | ||
83 | #endif | ||
84 | |||
85 | #endif /* TAPEFILE_H */ | ||
diff --git a/apps/plugins/zxbox/z80.c b/apps/plugins/zxbox/z80.c new file mode 100644 index 0000000000..90b41c93d3 --- /dev/null +++ b/apps/plugins/zxbox/z80.c | |||
@@ -0,0 +1,132 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80.h" | ||
22 | |||
23 | #include <stdio.h> | ||
24 | #include <stdlib.h> | ||
25 | #include <time.h> | ||
26 | #include "zxconfig.h" | ||
27 | #include "helpers.h" | ||
28 | Z80 PRNM(proc); | ||
29 | |||
30 | byte PRNM(inports)[PORTNUM]; | ||
31 | byte PRNM(outports)[PORTNUM]; | ||
32 | |||
33 | |||
34 | #ifdef SPECT_MEM | ||
35 | #define NUM64KSEGS 3 | ||
36 | #endif | ||
37 | |||
38 | #ifndef NUM64KSEGS | ||
39 | #define NUM64KSEGS 1 | ||
40 | #endif | ||
41 | |||
42 | static byte *a64kmalloc(int num64ksegs) | ||
43 | { | ||
44 | byte *bigmem; | ||
45 | |||
46 | bigmem = (byte *) my_malloc((unsigned) (0x10000 * (num64ksegs + 1))); | ||
47 | if(bigmem == NULL) { | ||
48 | /*fprintf(stderr, "Out of memory!\n");*/ | ||
49 | /*exit(1);*/ | ||
50 | } | ||
51 | |||
52 | return (byte *) (( (long) bigmem & ~((long) 0xFFFF)) + 0x10000); | ||
53 | } | ||
54 | |||
55 | |||
56 | |||
57 | void PRNM(init)(void) | ||
58 | { | ||
59 | qbyte i; | ||
60 | |||
61 | DANM(mem) = a64kmalloc(NUM64KSEGS); | ||
62 | |||
63 | rb->srand((unsigned int)( rb->get_time()->tm_sec+rb->get_time()->tm_min*60 + rb->get_time()->tm_hour*3600)); | ||
64 | for(i = 0; i < 0x10000; i++) DANM(mem)[i] = (byte) rb->rand(); | ||
65 | |||
66 | for(i = 0; i < NUMDREGS; i++) { | ||
67 | DANM(nr)[i].p = DANM(mem); | ||
68 | DANM(nr)[i].d.d = (dbyte) rb->rand(); | ||
69 | } | ||
70 | |||
71 | for(i = 0; i < BACKDREGS; i++) { | ||
72 | DANM(br)[i].p = DANM(mem); | ||
73 | DANM(br)[i].d.d = (dbyte) rb->rand(); | ||
74 | } | ||
75 | |||
76 | for(i = 0; i < PORTNUM; i++) PRNM(inports)[i] = PRNM(outports)[i] = 0; | ||
77 | |||
78 | PRNM(local_init)(); | ||
79 | |||
80 | return; | ||
81 | } | ||
82 | |||
83 | /* TODO: no interrupt immediately afer EI (not important for spectrum) */ | ||
84 | |||
85 | void PRNM(nmi)(void) | ||
86 | { | ||
87 | DANM(iff2) = DANM(iff1); | ||
88 | DANM(iff1) = 0; | ||
89 | |||
90 | DANM(haltstate) = 0; | ||
91 | PRNM(pushpc)(); | ||
92 | |||
93 | PC = 0x0066; | ||
94 | } | ||
95 | |||
96 | /* TODO: IM 0 emulation */ | ||
97 | |||
98 | void PRNM(interrupt)(int data) | ||
99 | { | ||
100 | if(DANM(iff1)) { | ||
101 | |||
102 | DANM(haltstate) = 0; | ||
103 | DANM(iff1) = DANM(iff2) = 0; | ||
104 | |||
105 | switch(DANM(it_mode)) { | ||
106 | case 0: | ||
107 | PRNM(pushpc)(); | ||
108 | PC = 0x0038; | ||
109 | break; | ||
110 | case 1: | ||
111 | PRNM(pushpc)(); | ||
112 | PC = 0x0038; | ||
113 | break; | ||
114 | case 2: | ||
115 | PRNM(pushpc)(); | ||
116 | PCL = DANM(mem)[(dbyte) (((int) RI << 8) + (data & 0xFF))]; | ||
117 | PCH = DANM(mem)[(dbyte) (((int) RI << 8) + (data & 0xFF) + 1)]; | ||
118 | break; | ||
119 | } | ||
120 | } | ||
121 | } | ||
122 | |||
123 | |||
124 | void PRNM(reset)(void) | ||
125 | { | ||
126 | DANM(haltstate) = 0; | ||
127 | DANM(iff1) = DANM(iff2) = 0; | ||
128 | DANM(it_mode) = 0; | ||
129 | RI = 0; | ||
130 | RR = 0; | ||
131 | PC = 0; | ||
132 | } | ||
diff --git a/apps/plugins/zxbox/z80.h b/apps/plugins/zxbox/z80.h new file mode 100644 index 0000000000..996ea9d294 --- /dev/null +++ b/apps/plugins/zxbox/z80.h | |||
@@ -0,0 +1,193 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef Z80_H | ||
22 | #define Z80_H | ||
23 | |||
24 | #include "zxconfig.h" | ||
25 | #include "config.h" | ||
26 | |||
27 | #ifdef ROCKBOX_BIG_ENDIAN | ||
28 | #define WORDS_BIGENDIAN | ||
29 | #endif | ||
30 | |||
31 | #ifndef COMPARISON | ||
32 | #define PRNM(x) z80_ ## x | ||
33 | #else | ||
34 | #define PRNM(x) z80x_ ## x | ||
35 | #endif | ||
36 | |||
37 | #define DANM(x) PRNM(proc).x | ||
38 | |||
39 | #include "z80_type.h" | ||
40 | |||
41 | |||
42 | #ifndef WORDS_BIGENDIAN | ||
43 | union dregp { | ||
44 | struct { byte l, h, _b2, _b3; } s; | ||
45 | struct { dbyte d, _d1; } d; | ||
46 | byte* p; | ||
47 | }; | ||
48 | #else | ||
49 | union dregp { | ||
50 | struct { byte _b3, _b2, h, l; } s; | ||
51 | struct { dbyte _d1, d; } d; | ||
52 | byte* p; | ||
53 | }; | ||
54 | #endif | ||
55 | |||
56 | #define NUMDREGS 9 | ||
57 | #define BACKDREGS 4 | ||
58 | |||
59 | #define PORTNUM 256 | ||
60 | |||
61 | /* Do NOT change the order! */ | ||
62 | typedef struct { | ||
63 | union dregp nr[NUMDREGS]; | ||
64 | union dregp br[BACKDREGS]; | ||
65 | |||
66 | int haltstate; | ||
67 | int it_mode; | ||
68 | int iff1, iff2; | ||
69 | |||
70 | byte *mem; | ||
71 | |||
72 | int tc; | ||
73 | int rl7; | ||
74 | |||
75 | #ifdef SPECT_MEM /* WARNING: Do NOT change the order!!! */ | ||
76 | int next_scri; | ||
77 | int inport_mask; | ||
78 | int ula_inport; | ||
79 | int ula_outport; | ||
80 | int sound_sam; | ||
81 | int sound_change; | ||
82 | int imp_change; | ||
83 | #endif | ||
84 | |||
85 | #ifdef Z80C | ||
86 | dbyte cbaddr; | ||
87 | |||
88 | #ifdef PROCP | ||
89 | byte *incf_tbl; | ||
90 | byte *decf_tbl; | ||
91 | byte *addf_tbl; | ||
92 | byte *subf_tbl; | ||
93 | byte *orf_tbl; | ||
94 | |||
95 | byte *inports; | ||
96 | byte *outports; | ||
97 | #ifdef SPECT_MEM | ||
98 | byte *fe_inport_high; | ||
99 | #endif | ||
100 | #endif | ||
101 | #endif | ||
102 | |||
103 | } Z80; | ||
104 | |||
105 | |||
106 | extern Z80 PRNM(proc); | ||
107 | |||
108 | extern byte PRNM(inports)[]; | ||
109 | extern byte PRNM(outports)[]; | ||
110 | |||
111 | #define ZI_BC 0 | ||
112 | #define ZI_DE 1 | ||
113 | #define ZI_HL 2 | ||
114 | #define ZI_AF 3 | ||
115 | #define ZI_IR 4 | ||
116 | #define ZI_IX 5 | ||
117 | #define ZI_IY 6 | ||
118 | #define ZI_PC 7 | ||
119 | #define ZI_SP 8 | ||
120 | |||
121 | |||
122 | #define BC (DANM(nr)[ZI_BC].d.d) | ||
123 | #define DE (DANM(nr)[ZI_DE].d.d) | ||
124 | #define HL (DANM(nr)[ZI_HL].d.d) | ||
125 | #define AF (DANM(nr)[ZI_AF].d.d) | ||
126 | #define IR (DANM(nr)[ZI_IR].d.d) | ||
127 | #define IX (DANM(nr)[ZI_IX].d.d) | ||
128 | #define IY (DANM(nr)[ZI_IY].d.d) | ||
129 | #define PC (DANM(nr)[ZI_PC].d.d) | ||
130 | #define SP (DANM(nr)[ZI_SP].d.d) | ||
131 | |||
132 | #define BCP (DANM(nr)[ZI_BC].p) | ||
133 | #define DEP (DANM(nr)[ZI_DE].p) | ||
134 | #define HLP (DANM(nr)[ZI_HL].p) | ||
135 | #define PCP (DANM(nr)[ZI_PC].p) | ||
136 | #define SPP (DANM(nr)[ZI_SP].p) | ||
137 | #define IXP (DANM(nr)[ZI_IX].p) | ||
138 | #define IYP (DANM(nr)[ZI_IY].p) | ||
139 | |||
140 | |||
141 | #define RB (DANM(nr)[ZI_BC].s.h) | ||
142 | #define RC (DANM(nr)[ZI_BC].s.l) | ||
143 | #define RD (DANM(nr)[ZI_DE].s.h) | ||
144 | #define RE (DANM(nr)[ZI_DE].s.l) | ||
145 | #define RH (DANM(nr)[ZI_HL].s.h) | ||
146 | #define RL (DANM(nr)[ZI_HL].s.l) | ||
147 | #define RA (DANM(nr)[ZI_AF].s.h) | ||
148 | #define RF (DANM(nr)[ZI_AF].s.l) | ||
149 | #define RI (DANM(nr)[ZI_IR].s.h) | ||
150 | #define RR (DANM(nr)[ZI_IR].s.l) | ||
151 | #define XH (DANM(nr)[ZI_IX].s.h) | ||
152 | #define XL (DANM(nr)[ZI_IX].s.l) | ||
153 | #define YH (DANM(nr)[ZI_IY].s.h) | ||
154 | #define YL (DANM(nr)[ZI_IY].s.l) | ||
155 | #define PCH (DANM(nr)[ZI_PC].s.h) | ||
156 | #define PCL (DANM(nr)[ZI_PC].s.l) | ||
157 | #define SPH (DANM(nr)[ZI_SP].s.h) | ||
158 | #define SPL (DANM(nr)[ZI_SP].s.l) | ||
159 | |||
160 | #define BCBK (DANM(br)[ZI_BC].d.d) | ||
161 | #define DEBK (DANM(br)[ZI_DE].d.d) | ||
162 | #define HLBK (DANM(br)[ZI_HL].d.d) | ||
163 | #define AFBK (DANM(br)[ZI_AF].d.d) | ||
164 | |||
165 | #define BBK (DANM(br)[ZI_BC].s.h) | ||
166 | #define CBK (DANM(br)[ZI_BC].s.l) | ||
167 | #define DBK (DANM(br)[ZI_DE].s.h) | ||
168 | #define EBK (DANM(br)[ZI_DE].s.l) | ||
169 | #define HBK (DANM(br)[ZI_HL].s.h) | ||
170 | #define LBK (DANM(br)[ZI_HL].s.l) | ||
171 | #define ABK (DANM(br)[ZI_AF].s.h) | ||
172 | #define FBK (DANM(br)[ZI_AF].s.l) | ||
173 | |||
174 | #ifdef __cplusplus | ||
175 | extern "C" { | ||
176 | #endif | ||
177 | |||
178 | extern void PRNM(init)(void); | ||
179 | extern int PRNM(step)(int ticknum); | ||
180 | |||
181 | extern void PRNM(interrupt)(int data); | ||
182 | extern void PRNM(nmi)(void); | ||
183 | extern void PRNM(reset)(void); | ||
184 | |||
185 | extern void PRNM(pushpc)(void); | ||
186 | extern void PRNM(local_init)(void); | ||
187 | |||
188 | #ifdef __cplusplus | ||
189 | } | ||
190 | #endif | ||
191 | |||
192 | |||
193 | #endif /* Z80_H */ | ||
diff --git a/apps/plugins/zxbox/z80_ari.h b/apps/plugins/zxbox/z80_ari.h new file mode 100644 index 0000000000..4d1e644e78 --- /dev/null +++ b/apps/plugins/zxbox/z80_ari.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #define ADDSUB(r, op, tbl) \ | ||
22 | { \ | ||
23 | register byte res; \ | ||
24 | register int idx; \ | ||
25 | register int flag; \ | ||
26 | res = RA op; \ | ||
27 | idx = IDXCALC(RA, r, res); \ | ||
28 | RA = res; \ | ||
29 | flag = (RF & ~(AALLF)) | \ | ||
30 | TAB(tbl)[idx]; \ | ||
31 | if(!res) flag |= ZF; \ | ||
32 | RF = flag; \ | ||
33 | } | ||
34 | |||
35 | |||
36 | #define ADD(r) ADDSUB(r, + r, addf_tbl) | ||
37 | #define ADC(r) ADDSUB(r, + r + (RF & CF), addf_tbl) | ||
38 | #define SUB(r) ADDSUB(r, - r, subf_tbl) | ||
39 | #define SBC(r) ADDSUB(r, - r - (RF & CF), subf_tbl) | ||
40 | |||
41 | #define AND(r) \ | ||
42 | { \ | ||
43 | register byte res; \ | ||
44 | register byte flag; \ | ||
45 | res = RA & r; \ | ||
46 | RA = res; \ | ||
47 | flag = (RF & ~(AALLF)) | \ | ||
48 | TAB(orf_tbl)[res] | HF; \ | ||
49 | RF = flag; \ | ||
50 | } | ||
51 | |||
52 | |||
53 | #define XOR(r) \ | ||
54 | { \ | ||
55 | register byte res; \ | ||
56 | register byte flag; \ | ||
57 | res = RA ^ r; \ | ||
58 | RA = res; \ | ||
59 | flag = (RF & ~(AALLF)) | \ | ||
60 | TAB(orf_tbl)[res]; \ | ||
61 | RF = flag; \ | ||
62 | } | ||
63 | |||
64 | |||
65 | #define OR(r) \ | ||
66 | { \ | ||
67 | register byte res; \ | ||
68 | register byte flag; \ | ||
69 | res = RA | r; \ | ||
70 | RA = res; \ | ||
71 | flag = (RF & ~(AALLF)) | \ | ||
72 | TAB(orf_tbl)[res]; \ | ||
73 | RF = flag; \ | ||
74 | } | ||
75 | |||
76 | |||
77 | #define CP(r) \ | ||
78 | { \ | ||
79 | register byte res; \ | ||
80 | register int idx; \ | ||
81 | register int flag; \ | ||
82 | res = RA - r; \ | ||
83 | idx = IDXCALC(RA, r, res); \ | ||
84 | flag = (RF & ~(AALLF)) | \ | ||
85 | TAB(subf_tbl)[idx]; \ | ||
86 | if(!res) flag |= ZF; \ | ||
87 | RF = flag; \ | ||
88 | } | ||
diff --git a/apps/plugins/zxbox/z80_def.h b/apps/plugins/zxbox/z80_def.h new file mode 100644 index 0000000000..15b39cced5 --- /dev/null +++ b/apps/plugins/zxbox/z80_def.h | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80.h" | ||
22 | |||
23 | #ifdef PROCP | ||
24 | |||
25 | typedef Z80 *z80t; | ||
26 | |||
27 | #define OPDEF(name, num) z80t z80op_ ## name (z80t z80p) | ||
28 | #define ENDOP() return z80p | ||
29 | #undef DANM | ||
30 | #define DANM(x) z80p->x | ||
31 | |||
32 | #define TAB(t) DANM(t) | ||
33 | #define PORT(t) DANM(t) | ||
34 | #define SPECP(t) DANM(t) | ||
35 | |||
36 | #else | ||
37 | |||
38 | typedef void z80t; | ||
39 | |||
40 | #define OPDEF(name, num) void z80op_ ## name (z80t) | ||
41 | #define ENDOP() | ||
42 | |||
43 | #define TAB(t) z80c_ ## t | ||
44 | #define PORT(t) PRNM(t) | ||
45 | #define SPECP(t) SPNM(t) | ||
46 | |||
47 | #endif | ||
48 | |||
49 | |||
50 | typedef z80t (*op_f)(z80t); | ||
51 | extern op_f z80c_op_tab[]; | ||
52 | extern op_f z80c_op_tab_cb[]; | ||
53 | extern op_f z80c_op_tab_dd[]; | ||
54 | extern op_f z80c_op_tab_ed[]; | ||
55 | extern op_f z80c_op_tab_fd[]; | ||
56 | |||
57 | #define TIME(x) DANM(tc) -= (x) | ||
58 | |||
59 | #define ENTIME(x) { TIME(x); ENDOP(); } | ||
60 | |||
61 | #define READ(addr) (DANM(mem)[addr]) | ||
62 | #define WRITE(addr, val) PUTMEM(addr, DANM(mem) + (dbyte) (addr), val) | ||
63 | |||
64 | #define DREAD(addr) (DANM(mem)[addr] | (DANM(mem)[(dbyte)(addr+1)] << 8)) | ||
65 | #define DWRITE(addr, x) WRITE(addr, (byte) x); \ | ||
66 | WRITE((dbyte) (addr+1), (byte) (x >> 8)) | ||
67 | |||
68 | #define IPCS ((sbyte) *PCP) | ||
69 | |||
70 | |||
71 | #define MODMEM(func) \ | ||
72 | { \ | ||
73 | register byte bdef; \ | ||
74 | bdef = *HLP; \ | ||
75 | func(bdef); \ | ||
76 | PUTMEM(HL, HLP, bdef); \ | ||
77 | } | ||
78 | |||
79 | #define MODMEMADDR(func, addr) \ | ||
80 | { \ | ||
81 | register byte bdef; \ | ||
82 | bdef = READ(addr); \ | ||
83 | func(bdef); \ | ||
84 | WRITE(addr, bdef); \ | ||
85 | } | ||
86 | |||
87 | #define IXDGET(ixy, addr) addr = ((dbyte) (ixy + IPCS)), PC++ | ||
88 | |||
89 | #define FETCHD(x) \ | ||
90 | { \ | ||
91 | register dbyte ddef; \ | ||
92 | ddef = PC; \ | ||
93 | x = DREAD(ddef); \ | ||
94 | PC = ddef+2; \ | ||
95 | } | ||
96 | |||
97 | #define POP(x) \ | ||
98 | { \ | ||
99 | register dbyte ddef; \ | ||
100 | ddef = SP; \ | ||
101 | x = DREAD(ddef); \ | ||
102 | SP = ddef+2; \ | ||
103 | } | ||
104 | |||
105 | #define PUSH(x) \ | ||
106 | { \ | ||
107 | register dbyte ddef, dval; \ | ||
108 | dval = x; \ | ||
109 | ddef = SP-2; \ | ||
110 | DWRITE(ddef, dval); \ | ||
111 | SP = ddef; \ | ||
112 | } | ||
113 | |||
114 | #ifdef SPECT_MEM | ||
115 | #include "sp_def.h" | ||
116 | #else | ||
117 | |||
118 | #define PUTMEM(addr, ptr, val) *(ptr) = (val) | ||
119 | #define IN(porth, portl, dest) dest = PORT(inports)[portl] | ||
120 | #define OUT(porth, portl, source) PORT(outports)[portl] = (source) | ||
121 | #define DI_CHECK | ||
122 | |||
123 | #endif | ||
124 | |||
125 | |||
126 | #define SF 0x80 | ||
127 | #define ZF 0x40 | ||
128 | #define B5F 0x20 | ||
129 | #define HF 0x10 | ||
130 | #define B3F 0x08 | ||
131 | #define PVF 0x04 | ||
132 | #define NF 0x02 | ||
133 | #define CF 0x01 | ||
134 | |||
135 | #define ALLF (SF | ZF | HF | PVF | NF | CF) | ||
136 | #define BUTCF (SF | ZF | HF | PVF | NF) | ||
137 | |||
138 | #define AALLF 0xff | ||
139 | #define ABUTCF 0xfe | ||
140 | |||
141 | #define SETFLAGS(mask, val) (RF = (RF & ~(mask)) | (val)) | ||
142 | #define SET_FL(x) (RF |= (x)) | ||
143 | #define CLR_FL(x) (RF &= ~(x)) | ||
144 | |||
145 | |||
146 | #define TESTZF (RF & ZF) | ||
147 | #define TESTCF (RF & CF) | ||
148 | #define TESTSF (RF & SF) | ||
149 | #define TESTPF (RF & PVF) | ||
150 | #define TESTHF (RF & HF) | ||
151 | #define TESTNF (RF & NF) | ||
152 | |||
153 | |||
154 | #define IDXCALC(v1, v2, res) \ | ||
155 | ((res & 0xA8) | ((v1 & 0x88) >> 1) | ((v2 & 0x88) >> 3)) | ||
156 | |||
157 | #define DIDXCALC(v1, v2, res) \ | ||
158 | (((res & 0x8800) >> 8) | ((v1 & 0x8800) >> 9) | ((v2 & 0x8800) >> 11)) | ||
159 | |||
160 | |||
161 | extern byte z80c_incf_tbl[]; | ||
162 | extern byte z80c_decf_tbl[]; | ||
163 | extern byte z80c_addf_tbl[]; | ||
164 | extern byte z80c_subf_tbl[]; | ||
165 | extern byte z80c_orf_tbl[]; | ||
diff --git a/apps/plugins/zxbox/z80_op1.c b/apps/plugins/zxbox/z80_op1.c new file mode 100644 index 0000000000..d8d1a5d097 --- /dev/null +++ b/apps/plugins/zxbox/z80_op1.c | |||
@@ -0,0 +1,376 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op1.h" | ||
24 | #endif | ||
25 | |||
26 | OPDEF(nop, 0x00) | ||
27 | { | ||
28 | ENTIME(4); | ||
29 | } | ||
30 | |||
31 | OPDEF(ex_af_afb, 0x08) | ||
32 | { | ||
33 | register byte *ptmp; | ||
34 | |||
35 | ptmp = DANM(br)[ZI_AF].p; | ||
36 | DANM(br)[ZI_AF].p = DANM(nr)[ZI_AF].p; | ||
37 | DANM(nr)[ZI_AF].p = ptmp; | ||
38 | |||
39 | ENTIME(4); | ||
40 | } | ||
41 | |||
42 | OPDEF(djnz_e, 0x10) | ||
43 | { | ||
44 | if(!--RB) { | ||
45 | PC++; | ||
46 | ENTIME(8); | ||
47 | } | ||
48 | else { | ||
49 | PC += IPCS; PC++; | ||
50 | ENTIME(13); | ||
51 | } | ||
52 | } | ||
53 | |||
54 | OPDEF(jr_e, 0x18) | ||
55 | { | ||
56 | PC += IPCS; PC++; | ||
57 | ENTIME(12); | ||
58 | } | ||
59 | |||
60 | #define JR_CC_E(ccn, cc, n) \ | ||
61 | OPDEF(jr_ ## ccn ## _e, 0x20+n*8) \ | ||
62 | { \ | ||
63 | if(!(cc)) { \ | ||
64 | PC++; \ | ||
65 | ENTIME(7); \ | ||
66 | } \ | ||
67 | else { \ | ||
68 | PC += IPCS; PC++; \ | ||
69 | ENTIME(12); \ | ||
70 | } \ | ||
71 | } | ||
72 | |||
73 | JR_CC_E(nz, !TESTZF, 0) | ||
74 | JR_CC_E(z, TESTZF, 1) | ||
75 | JR_CC_E(nc, !TESTCF, 2) | ||
76 | JR_CC_E(c, TESTCF, 3) | ||
77 | |||
78 | |||
79 | #define LD_RR_NN(rrn, rr, n) \ | ||
80 | OPDEF(ld_ ## rrn ## _nn, 0x01+n*0x10) \ | ||
81 | { \ | ||
82 | FETCHD(rr); \ | ||
83 | ENTIME(10); \ | ||
84 | } | ||
85 | |||
86 | LD_RR_NN(bc, BC, 0) | ||
87 | LD_RR_NN(de, DE, 1) | ||
88 | LD_RR_NN(hl, HL, 2) | ||
89 | LD_RR_NN(sp, SP, 3) | ||
90 | |||
91 | #define DADD(rr1, rr2) \ | ||
92 | register dbyte dtmp; \ | ||
93 | register int idx; \ | ||
94 | dtmp = rr1; \ | ||
95 | rr1 = dtmp + rr2; \ | ||
96 | idx = DIDXCALC(dtmp, rr2, rr1); \ | ||
97 | SETFLAGS(CF | NF | HF, TAB(addf_tbl)[idx] & (CF | HF)) | ||
98 | |||
99 | |||
100 | #define ADD_RR_RR(rrn1, rr1, rrn2, rr2, n) \ | ||
101 | OPDEF(add_## rrn1 ## _ ## rrn2, 0x09+n*0x10) \ | ||
102 | { \ | ||
103 | DADD(rr1, rr2); \ | ||
104 | ENTIME(11); \ | ||
105 | } | ||
106 | |||
107 | ADD_RR_RR(hl, HL, bc, BC, 0) | ||
108 | ADD_RR_RR(hl, HL, de, DE, 1) | ||
109 | ADD_RR_RR(hl, HL, hl, HL, 2) | ||
110 | ADD_RR_RR(hl, HL, sp, SP, 3) | ||
111 | |||
112 | #define INC_RR(rrn, rr, n) \ | ||
113 | OPDEF(inc_ ## rrn, 0x03+n*0x10) \ | ||
114 | { \ | ||
115 | rr++; \ | ||
116 | ENTIME(6); \ | ||
117 | } | ||
118 | |||
119 | INC_RR(bc, BC, 0) | ||
120 | INC_RR(de, DE, 1) | ||
121 | INC_RR(hl, HL, 2) | ||
122 | INC_RR(sp, SP, 3) | ||
123 | |||
124 | #define DEC_RR(rrn, rr, n) \ | ||
125 | OPDEF(dec_ ## rrn, 0x0B+n*0x10) \ | ||
126 | { \ | ||
127 | rr--; \ | ||
128 | ENTIME(6); \ | ||
129 | } | ||
130 | |||
131 | DEC_RR(bc, BC, 0) | ||
132 | DEC_RR(de, DE, 1) | ||
133 | DEC_RR(hl, HL, 2) | ||
134 | DEC_RR(sp, SP, 3) | ||
135 | |||
136 | OPDEF(ld_ibc_a, 0x02) | ||
137 | { | ||
138 | PUTMEM(BC, BCP, RA); | ||
139 | ENTIME(7); | ||
140 | } | ||
141 | |||
142 | OPDEF(ld_ide_a, 0x12) | ||
143 | { | ||
144 | PUTMEM(DE, DEP, RA); | ||
145 | ENTIME(7); | ||
146 | } | ||
147 | |||
148 | #define LD_INN_RR(rrn, rr) \ | ||
149 | OPDEF(ld_inn_ ## rrn, 0x22) \ | ||
150 | { \ | ||
151 | register dbyte dtmp; \ | ||
152 | FETCHD(dtmp); \ | ||
153 | DWRITE(dtmp, rr); \ | ||
154 | ENTIME(16); \ | ||
155 | } | ||
156 | |||
157 | LD_INN_RR(hl, HL) | ||
158 | |||
159 | |||
160 | OPDEF(ld_inn_a, 0x32) | ||
161 | { | ||
162 | register dbyte dtmp; | ||
163 | FETCHD(dtmp); | ||
164 | WRITE(dtmp, RA); | ||
165 | ENTIME(13); | ||
166 | } | ||
167 | |||
168 | OPDEF(ld_a_ibc, 0x0A) | ||
169 | { | ||
170 | RA = *BCP; | ||
171 | ENTIME(7); | ||
172 | } | ||
173 | |||
174 | OPDEF(ld_a_ide, 0x1A) | ||
175 | { | ||
176 | RA = *DEP; | ||
177 | ENTIME(7); | ||
178 | } | ||
179 | |||
180 | |||
181 | #define LD_RR_INN(rrn, rr) \ | ||
182 | OPDEF(ld_ ## rrn ## _inn, 0x2A) \ | ||
183 | { \ | ||
184 | register dbyte dtmp; \ | ||
185 | FETCHD(dtmp); \ | ||
186 | rr = DREAD(dtmp); \ | ||
187 | ENTIME(16); \ | ||
188 | } | ||
189 | |||
190 | LD_RR_INN(hl, HL) | ||
191 | |||
192 | |||
193 | OPDEF(ld_a_inn, 0x3A) | ||
194 | { | ||
195 | register dbyte dtmp; | ||
196 | FETCHD(dtmp); | ||
197 | RA = READ(dtmp); | ||
198 | ENTIME(13); | ||
199 | } | ||
200 | |||
201 | |||
202 | #define INC(r) \ | ||
203 | r++; \ | ||
204 | SETFLAGS(SF | ZF | PVF | B3F | B5F, TAB(incf_tbl)[r]) | ||
205 | |||
206 | |||
207 | |||
208 | #define INC_R(rn, r, n) \ | ||
209 | OPDEF(inc_ ## rn, 0x04+n*8) \ | ||
210 | { \ | ||
211 | INC(r); \ | ||
212 | ENTIME(4); \ | ||
213 | } | ||
214 | |||
215 | INC_R(b, RB, 0) | ||
216 | INC_R(c, RC, 1) | ||
217 | INC_R(d, RD, 2) | ||
218 | INC_R(e, RE, 3) | ||
219 | INC_R(h, RH, 4) | ||
220 | INC_R(l, RL, 5) | ||
221 | INC_R(a, RA, 7) | ||
222 | |||
223 | |||
224 | OPDEF(inc_ihl, 0x34) | ||
225 | { | ||
226 | MODMEM(INC); | ||
227 | ENTIME(11); | ||
228 | } | ||
229 | |||
230 | |||
231 | #define DEC(r) \ | ||
232 | r--; \ | ||
233 | SETFLAGS(SF | ZF | PVF | B3F | B5F, TAB(decf_tbl)[r]) | ||
234 | |||
235 | |||
236 | #define DEC_R(rn, r, n) \ | ||
237 | OPDEF(dec_ ## rn, 0x05+n*8) \ | ||
238 | { \ | ||
239 | DEC(r); \ | ||
240 | ENTIME(4); \ | ||
241 | } | ||
242 | |||
243 | DEC_R(b, RB, 0) | ||
244 | DEC_R(c, RC, 1) | ||
245 | DEC_R(d, RD, 2) | ||
246 | DEC_R(e, RE, 3) | ||
247 | DEC_R(h, RH, 4) | ||
248 | DEC_R(l, RL, 5) | ||
249 | DEC_R(a, RA, 7) | ||
250 | |||
251 | |||
252 | OPDEF(dec_ihl, 0x35) | ||
253 | { | ||
254 | MODMEM(DEC); | ||
255 | ENTIME(11); | ||
256 | } | ||
257 | |||
258 | #define LD_R_N(rn, r, n) \ | ||
259 | OPDEF(ld_ ## rn ## _n, 0x06+n*8) \ | ||
260 | { \ | ||
261 | r = *PCP; \ | ||
262 | PC++; \ | ||
263 | ENTIME(7); \ | ||
264 | } | ||
265 | |||
266 | LD_R_N(b, RB, 0) | ||
267 | LD_R_N(c, RC, 1) | ||
268 | LD_R_N(d, RD, 2) | ||
269 | LD_R_N(e, RE, 3) | ||
270 | LD_R_N(h, RH, 4) | ||
271 | LD_R_N(l, RL, 5) | ||
272 | LD_R_N(a, RA, 7) | ||
273 | |||
274 | |||
275 | OPDEF(ld_ihl_n, 0x36) | ||
276 | { | ||
277 | PUTMEM(HL, HLP, *PCP); | ||
278 | PC++; | ||
279 | ENTIME(10); | ||
280 | } | ||
281 | |||
282 | OPDEF(rlca, 0x07) | ||
283 | { | ||
284 | register byte btmp; | ||
285 | btmp = (RA & 0x80) >> 7; | ||
286 | SETFLAGS(HF | NF | CF, btmp); | ||
287 | RA = (RA << 1) | btmp; | ||
288 | ENTIME(4); | ||
289 | } | ||
290 | |||
291 | OPDEF(rrca, 0x0F) | ||
292 | { | ||
293 | register byte btmp; | ||
294 | btmp = (RA & 0x01); | ||
295 | SETFLAGS(HF | NF | CF, btmp); | ||
296 | if(btmp) { | ||
297 | RA = (RA >> 1) | 0x80; | ||
298 | ENTIME(4); | ||
299 | } | ||
300 | else { | ||
301 | RA >>= 1; | ||
302 | ENTIME(4); | ||
303 | } | ||
304 | } | ||
305 | |||
306 | |||
307 | OPDEF(rla, 0x17) | ||
308 | { | ||
309 | register byte btmp; | ||
310 | btmp = RA & 0x80; | ||
311 | RA = (RA << 1) | (RF & CF); | ||
312 | SETFLAGS(HF | NF | CF, btmp >> 7); | ||
313 | ENTIME(4); | ||
314 | } | ||
315 | |||
316 | OPDEF(rra, 0x1F) | ||
317 | { | ||
318 | register byte btmp; | ||
319 | btmp = TESTCF; | ||
320 | SETFLAGS(HF | NF | CF, RA & 0x01); | ||
321 | if(btmp) { | ||
322 | RA = (RA >> 1) | 0x80; | ||
323 | ENTIME(4); | ||
324 | } | ||
325 | else { | ||
326 | RA >>= 1; | ||
327 | ENTIME(4); | ||
328 | } | ||
329 | } | ||
330 | |||
331 | OPDEF(daa, 0x27) | ||
332 | { | ||
333 | register int flag; | ||
334 | flag = RF; | ||
335 | |||
336 | if(!TESTNF) { | ||
337 | if(flag & CF) RA += 0x60; | ||
338 | else if(RA > 0x99) RA += 0x60, flag |= CF; | ||
339 | |||
340 | if(flag & HF) RA += 0x06; | ||
341 | else if((RA & 0x0F) > 9) RA += 0x06, flag |= HF; | ||
342 | } | ||
343 | else { | ||
344 | if(flag & CF) RA -= 0x60; | ||
345 | else if(RA > 0x99) RA -= 0x60, flag |= CF; | ||
346 | |||
347 | if(flag & HF) RA -= 0x06; | ||
348 | else if((RA & 0x0F) > 9) RA -= 0x06, flag |= HF; | ||
349 | } | ||
350 | flag = (flag & ~(SF | ZF | PVF | B3F | B5F)) | TAB(orf_tbl)[RA]; | ||
351 | RF = flag; | ||
352 | |||
353 | ENTIME(4); | ||
354 | } | ||
355 | |||
356 | OPDEF(cpl, 0x2F) | ||
357 | { | ||
358 | RA = ~RA; | ||
359 | SET_FL(HF | NF); | ||
360 | ENTIME(4); | ||
361 | } | ||
362 | |||
363 | OPDEF(scf, 0x37) | ||
364 | { | ||
365 | SETFLAGS(HF | NF, CF); | ||
366 | ENTIME(4); | ||
367 | } | ||
368 | |||
369 | OPDEF(ccf, 0x3F) | ||
370 | { | ||
371 | RF = (RF ^ CF) & ~(NF); | ||
372 | /* HF undefined */ | ||
373 | ENTIME(4); | ||
374 | } | ||
375 | |||
376 | #include "z80_op1x.c" | ||
diff --git a/apps/plugins/zxbox/z80_op1.h b/apps/plugins/zxbox/z80_op1.h new file mode 100644 index 0000000000..3d8e3bee2e --- /dev/null +++ b/apps/plugins/zxbox/z80_op1.h | |||
@@ -0,0 +1,130 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | extern z80t z80op_nop(z80t); | ||
22 | extern z80t z80op_ld_bc_nn(z80t); | ||
23 | extern z80t z80op_ld_ibc_a(z80t); | ||
24 | extern z80t z80op_inc_bc(z80t); | ||
25 | extern z80t z80op_inc_b(z80t); | ||
26 | extern z80t z80op_dec_b(z80t); | ||
27 | extern z80t z80op_ld_b_n(z80t); | ||
28 | extern z80t z80op_rlca(z80t); | ||
29 | extern z80t z80op_ex_af_afb(z80t); | ||
30 | extern z80t z80op_add_hl_bc(z80t); | ||
31 | extern z80t z80op_ld_a_ibc(z80t); | ||
32 | extern z80t z80op_dec_bc(z80t); | ||
33 | extern z80t z80op_inc_c(z80t); | ||
34 | extern z80t z80op_dec_c(z80t); | ||
35 | extern z80t z80op_ld_c_n(z80t); | ||
36 | extern z80t z80op_rrca(z80t); | ||
37 | |||
38 | extern z80t z80op_djnz_e(z80t); | ||
39 | extern z80t z80op_ld_de_nn(z80t); | ||
40 | extern z80t z80op_ld_ide_a(z80t); | ||
41 | extern z80t z80op_inc_de(z80t); | ||
42 | extern z80t z80op_inc_d(z80t); | ||
43 | extern z80t z80op_dec_d(z80t); | ||
44 | extern z80t z80op_ld_d_n(z80t); | ||
45 | extern z80t z80op_rla(z80t); | ||
46 | extern z80t z80op_jr_e(z80t); | ||
47 | extern z80t z80op_add_hl_de(z80t); | ||
48 | extern z80t z80op_ld_a_ide(z80t); | ||
49 | extern z80t z80op_dec_de(z80t); | ||
50 | extern z80t z80op_inc_e(z80t); | ||
51 | extern z80t z80op_dec_e(z80t); | ||
52 | extern z80t z80op_ld_e_n(z80t); | ||
53 | extern z80t z80op_rra(z80t); | ||
54 | |||
55 | extern z80t z80op_jr_nz_e(z80t); | ||
56 | extern z80t z80op_ld_hl_nn(z80t); | ||
57 | extern z80t z80op_ld_inn_hl(z80t); | ||
58 | extern z80t z80op_inc_hl(z80t); | ||
59 | extern z80t z80op_inc_h(z80t); | ||
60 | extern z80t z80op_dec_h(z80t); | ||
61 | extern z80t z80op_ld_h_n(z80t); | ||
62 | extern z80t z80op_daa(z80t); | ||
63 | extern z80t z80op_jr_z_e(z80t); | ||
64 | extern z80t z80op_add_hl_hl(z80t); | ||
65 | extern z80t z80op_ld_hl_inn(z80t); | ||
66 | extern z80t z80op_dec_hl(z80t); | ||
67 | extern z80t z80op_inc_l(z80t); | ||
68 | extern z80t z80op_dec_l(z80t); | ||
69 | extern z80t z80op_ld_l_n(z80t); | ||
70 | extern z80t z80op_cpl(z80t); | ||
71 | |||
72 | extern z80t z80op_jr_nc_e(z80t); | ||
73 | extern z80t z80op_ld_sp_nn(z80t); | ||
74 | extern z80t z80op_ld_inn_a(z80t); | ||
75 | extern z80t z80op_inc_sp(z80t); | ||
76 | extern z80t z80op_inc_ihl(z80t); | ||
77 | extern z80t z80op_dec_ihl(z80t); | ||
78 | extern z80t z80op_ld_ihl_n(z80t); | ||
79 | extern z80t z80op_scf(z80t); | ||
80 | extern z80t z80op_jr_c_e(z80t); | ||
81 | extern z80t z80op_add_hl_sp(z80t); | ||
82 | extern z80t z80op_ld_a_inn(z80t); | ||
83 | extern z80t z80op_dec_sp(z80t); | ||
84 | extern z80t z80op_inc_a(z80t); | ||
85 | extern z80t z80op_dec_a(z80t); | ||
86 | extern z80t z80op_ld_a_n(z80t); | ||
87 | extern z80t z80op_ccf(z80t); | ||
88 | |||
89 | /* IX */ | ||
90 | |||
91 | extern z80t z80op_add_ix_bc(z80t); | ||
92 | extern z80t z80op_add_ix_de(z80t); | ||
93 | extern z80t z80op_add_ix_ix(z80t); | ||
94 | extern z80t z80op_add_ix_sp(z80t); | ||
95 | extern z80t z80op_ld_ix_nn(z80t); | ||
96 | extern z80t z80op_ld_inn_ix(z80t); | ||
97 | extern z80t z80op_ld_ix_inn(z80t); | ||
98 | extern z80t z80op_inc_ix(z80t); | ||
99 | extern z80t z80op_dec_ix(z80t); | ||
100 | extern z80t z80op_inc_ixh(z80t); | ||
101 | extern z80t z80op_inc_ixl(z80t); | ||
102 | extern z80t z80op_inc_iixd(z80t); | ||
103 | extern z80t z80op_dec_ixh(z80t); | ||
104 | extern z80t z80op_dec_ixl(z80t); | ||
105 | extern z80t z80op_dec_iixd(z80t); | ||
106 | extern z80t z80op_ld_ixh_n(z80t); | ||
107 | extern z80t z80op_ld_ixl_n(z80t); | ||
108 | extern z80t z80op_ld_iixd_n(z80t); | ||
109 | |||
110 | /* IY */ | ||
111 | |||
112 | extern z80t z80op_add_iy_bc(z80t); | ||
113 | extern z80t z80op_add_iy_de(z80t); | ||
114 | extern z80t z80op_add_iy_iy(z80t); | ||
115 | extern z80t z80op_add_iy_sp(z80t); | ||
116 | extern z80t z80op_ld_iy_nn(z80t); | ||
117 | extern z80t z80op_ld_inn_iy(z80t); | ||
118 | extern z80t z80op_ld_iy_inn(z80t); | ||
119 | extern z80t z80op_inc_iy(z80t); | ||
120 | extern z80t z80op_dec_iy(z80t); | ||
121 | extern z80t z80op_inc_iyh(z80t); | ||
122 | extern z80t z80op_inc_iyl(z80t); | ||
123 | extern z80t z80op_inc_iiyd(z80t); | ||
124 | extern z80t z80op_dec_iyh(z80t); | ||
125 | extern z80t z80op_dec_iyl(z80t); | ||
126 | extern z80t z80op_dec_iiyd(z80t); | ||
127 | extern z80t z80op_ld_iyh_n(z80t); | ||
128 | extern z80t z80op_ld_iyl_n(z80t); | ||
129 | extern z80t z80op_ld_iiyd_n(z80t); | ||
130 | |||
diff --git a/apps/plugins/zxbox/z80_op1x.c b/apps/plugins/zxbox/z80_op1x.c new file mode 100644 index 0000000000..ca9b001486 --- /dev/null +++ b/apps/plugins/zxbox/z80_op1x.c | |||
@@ -0,0 +1,125 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* IX */ | ||
22 | |||
23 | LD_RR_NN(ix, IX, 2) | ||
24 | |||
25 | ADD_RR_RR(ix, IX, bc, BC, 0) | ||
26 | ADD_RR_RR(ix, IX, de, DE, 1) | ||
27 | ADD_RR_RR(ix, IX, ix, IX, 2) | ||
28 | ADD_RR_RR(ix, IX, sp, SP, 3) | ||
29 | |||
30 | INC_RR(ix, IX, 2) | ||
31 | |||
32 | DEC_RR(ix, IX, 2) | ||
33 | |||
34 | LD_INN_RR(ix, IX) | ||
35 | |||
36 | LD_RR_INN(ix, IX) | ||
37 | |||
38 | INC_R(ixh, XH, 4) | ||
39 | INC_R(ixl, XL, 5) | ||
40 | |||
41 | OPDEF(inc_iixd, 0x34) | ||
42 | { | ||
43 | register dbyte addr; | ||
44 | IXDGET(IX, addr); | ||
45 | MODMEMADDR(INC, addr); | ||
46 | ENTIME(19); | ||
47 | } | ||
48 | |||
49 | DEC_R(ixh, XH, 4) | ||
50 | DEC_R(ixl, XL, 5) | ||
51 | |||
52 | OPDEF(dec_iixd, 0x35) | ||
53 | { | ||
54 | register dbyte addr; | ||
55 | IXDGET(IX, addr); | ||
56 | MODMEMADDR(DEC, addr); | ||
57 | ENTIME(19); | ||
58 | } | ||
59 | |||
60 | |||
61 | LD_R_N(ixh, XH, 4) | ||
62 | LD_R_N(ixl, XL, 5) | ||
63 | |||
64 | OPDEF(ld_iixd_n, 0x36) | ||
65 | { | ||
66 | register dbyte addr; | ||
67 | IXDGET(IX, addr); | ||
68 | WRITE(addr, READ(PC)); | ||
69 | PC++; | ||
70 | ENTIME(15); | ||
71 | } | ||
72 | |||
73 | |||
74 | /* IY */ | ||
75 | |||
76 | LD_RR_NN(iy, IY, 2) | ||
77 | |||
78 | ADD_RR_RR(iy, IY, bc, BC, 0) | ||
79 | ADD_RR_RR(iy, IY, de, DE, 1) | ||
80 | ADD_RR_RR(iy, IY, iy, IY, 2) | ||
81 | ADD_RR_RR(iy, IY, sp, SP, 3) | ||
82 | |||
83 | INC_RR(iy, IY, 2) | ||
84 | |||
85 | DEC_RR(iy, IY, 2) | ||
86 | |||
87 | LD_INN_RR(iy, IY) | ||
88 | |||
89 | LD_RR_INN(iy, IY) | ||
90 | |||
91 | INC_R(iyh, YH, 4) | ||
92 | INC_R(iyl, YL, 5) | ||
93 | |||
94 | OPDEF(inc_iiyd, 0x34) | ||
95 | { | ||
96 | register dbyte addr; | ||
97 | IXDGET(IY, addr); | ||
98 | MODMEMADDR(INC, addr); | ||
99 | ENTIME(19); | ||
100 | } | ||
101 | |||
102 | DEC_R(iyh, YH, 4) | ||
103 | DEC_R(iyl, YL, 5) | ||
104 | |||
105 | OPDEF(dec_iiyd, 0x35) | ||
106 | { | ||
107 | register dbyte addr; | ||
108 | IXDGET(IY, addr); | ||
109 | MODMEMADDR(DEC, addr); | ||
110 | ENTIME(19); | ||
111 | } | ||
112 | |||
113 | |||
114 | LD_R_N(iyh, YH, 4) | ||
115 | LD_R_N(iyl, YL, 5) | ||
116 | |||
117 | OPDEF(ld_iiyd_n, 0x36) | ||
118 | { | ||
119 | register dbyte addr; | ||
120 | IXDGET(IY, addr); | ||
121 | WRITE(addr, READ(PC)); | ||
122 | PC++; | ||
123 | ENTIME(15); | ||
124 | } | ||
125 | |||
diff --git a/apps/plugins/zxbox/z80_op2.c b/apps/plugins/zxbox/z80_op2.c new file mode 100644 index 0000000000..89bb5af50b --- /dev/null +++ b/apps/plugins/zxbox/z80_op2.c | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op2.h" | ||
24 | #endif | ||
25 | |||
26 | OPDEF(halt, 0x76) | ||
27 | { | ||
28 | register int nn; | ||
29 | |||
30 | DANM(haltstate) = 1; | ||
31 | nn = (DANM(tc) - 1) / 4 + 1; | ||
32 | |||
33 | DANM(tc) -= 4 * nn; | ||
34 | RR += nn-1; | ||
35 | ENDOP(); | ||
36 | } | ||
37 | |||
38 | #define LD_R_R(rdn, rsn, rd, rs, n1, n2) \ | ||
39 | OPDEF(ld_ ## rdn ## _ ## rsn, 0x40 + n1 * 8 + n2) \ | ||
40 | { \ | ||
41 | rd = rs; \ | ||
42 | ENTIME(4); \ | ||
43 | } | ||
44 | |||
45 | #if 0 | ||
46 | |||
47 | #define LD_NOOP(rsd, n) \ | ||
48 | OPDEF(ld_ ## rsd ## _ ## rsd, 0x40 + n * 8 + n) \ | ||
49 | { \ | ||
50 | ENTIME(4); \ | ||
51 | } | ||
52 | |||
53 | LD_NOOP(b, 0) | ||
54 | LD_NOOP(c, 1) | ||
55 | LD_NOOP(d, 2) | ||
56 | LD_NOOP(e, 3) | ||
57 | LD_NOOP(h, 4) | ||
58 | LD_NOOP(l, 5) | ||
59 | LD_NOOP(a, 7) | ||
60 | |||
61 | #endif | ||
62 | |||
63 | LD_R_R(b, c, RB, RC, 0, 1) | ||
64 | LD_R_R(b, d, RB, RD, 0, 2) | ||
65 | LD_R_R(b, e, RB, RE, 0, 3) | ||
66 | LD_R_R(b, h, RB, RH, 0, 4) | ||
67 | LD_R_R(b, l, RB, RL, 0, 5) | ||
68 | LD_R_R(b, a, RB, RA, 0, 7) | ||
69 | |||
70 | LD_R_R(c, b, RC, RB, 1, 0) | ||
71 | LD_R_R(c, d, RC, RD, 1, 2) | ||
72 | LD_R_R(c, e, RC, RE, 1, 3) | ||
73 | LD_R_R(c, h, RC, RH, 1, 4) | ||
74 | LD_R_R(c, l, RC, RL, 1, 5) | ||
75 | LD_R_R(c, a, RC, RA, 1, 7) | ||
76 | |||
77 | LD_R_R(d, b, RD, RB, 2, 0) | ||
78 | LD_R_R(d, c, RD, RC, 2, 1) | ||
79 | LD_R_R(d, e, RD, RE, 2, 3) | ||
80 | LD_R_R(d, h, RD, RH, 2, 4) | ||
81 | LD_R_R(d, l, RD, RL, 2, 5) | ||
82 | LD_R_R(d, a, RD, RA, 2, 7) | ||
83 | |||
84 | |||
85 | LD_R_R(e, b, RE, RB, 3, 0) | ||
86 | LD_R_R(e, c, RE, RC, 3, 1) | ||
87 | LD_R_R(e, d, RE, RD, 3, 2) | ||
88 | LD_R_R(e, h, RE, RH, 3, 4) | ||
89 | LD_R_R(e, l, RE, RL, 3, 5) | ||
90 | LD_R_R(e, a, RE, RA, 3, 7) | ||
91 | |||
92 | LD_R_R(h, b, RH, RB, 4, 0) | ||
93 | LD_R_R(h, c, RH, RC, 4, 1) | ||
94 | LD_R_R(h, d, RH, RD, 4, 2) | ||
95 | LD_R_R(h, e, RH, RE, 4, 3) | ||
96 | LD_R_R(h, l, RH, RL, 4, 5) | ||
97 | LD_R_R(h, a, RH, RA, 4, 7) | ||
98 | |||
99 | LD_R_R(l, b, RL, RB, 5, 0) | ||
100 | LD_R_R(l, c, RL, RC, 5, 1) | ||
101 | LD_R_R(l, d, RL, RD, 5, 2) | ||
102 | LD_R_R(l, e, RL, RE, 5, 3) | ||
103 | LD_R_R(l, h, RL, RH, 5, 4) | ||
104 | LD_R_R(l, a, RL, RA, 5, 7) | ||
105 | |||
106 | LD_R_R(a, b, RA, RB, 7, 0) | ||
107 | LD_R_R(a, c, RA, RC, 7, 1) | ||
108 | LD_R_R(a, d, RA, RD, 7, 2) | ||
109 | LD_R_R(a, e, RA, RE, 7, 3) | ||
110 | LD_R_R(a, h, RA, RH, 7, 4) | ||
111 | LD_R_R(a, l, RA, RL, 7, 5) | ||
112 | |||
113 | |||
114 | #define LD_R_IHL(rdn, rd, n) \ | ||
115 | OPDEF(ld_ ## rdn ## _ihl, 0x46+n*8) \ | ||
116 | { \ | ||
117 | rd = *HLP; \ | ||
118 | ENTIME(7); \ | ||
119 | } | ||
120 | |||
121 | #define LD_R_ID(ixyn, ixy, rsn, rs, n) \ | ||
122 | OPDEF(ld_ ## rsn ## _i ## ixyn ## d, 0x46+n*8) \ | ||
123 | { \ | ||
124 | register dbyte addr; \ | ||
125 | IXDGET(ixy, addr); \ | ||
126 | rs = READ(addr); \ | ||
127 | ENTIME(15); \ | ||
128 | } | ||
129 | |||
130 | |||
131 | LD_R_IHL(b, RB, 0) | ||
132 | LD_R_IHL(c, RC, 1) | ||
133 | LD_R_IHL(d, RD, 2) | ||
134 | LD_R_IHL(e, RE, 3) | ||
135 | LD_R_IHL(h, RH, 4) | ||
136 | LD_R_IHL(l, RL, 5) | ||
137 | LD_R_IHL(a, RA, 7) | ||
138 | |||
139 | #define LD_IHL_R(rsn, rs, n) \ | ||
140 | OPDEF(ld_ihl_ ## rsn, 0x70+n) \ | ||
141 | { \ | ||
142 | PUTMEM(HL, HLP, rs); \ | ||
143 | ENTIME(7); \ | ||
144 | } | ||
145 | |||
146 | #define LD_ID_R(ixyn, ixy, rsn, rs, n) \ | ||
147 | OPDEF(ld_i ## ixyn ## d_ ## rsn, 0x70+n) \ | ||
148 | { \ | ||
149 | register dbyte addr; \ | ||
150 | IXDGET(ixy, addr); \ | ||
151 | WRITE(addr, rs); \ | ||
152 | ENTIME(15); \ | ||
153 | } | ||
154 | |||
155 | |||
156 | |||
157 | LD_IHL_R(b, RB, 0) | ||
158 | LD_IHL_R(c, RC, 1) | ||
159 | LD_IHL_R(d, RD, 2) | ||
160 | LD_IHL_R(e, RE, 3) | ||
161 | LD_IHL_R(h, RH, 4) | ||
162 | LD_IHL_R(l, RL, 5) | ||
163 | LD_IHL_R(a, RA, 7) | ||
164 | |||
165 | #include "z80_op2x.c" | ||
diff --git a/apps/plugins/zxbox/z80_op2.h b/apps/plugins/zxbox/z80_op2.h new file mode 100644 index 0000000000..1265f42309 --- /dev/null +++ b/apps/plugins/zxbox/z80_op2.h | |||
@@ -0,0 +1,188 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* extern z80t z80op_nop(z80t); */ | ||
22 | extern z80t z80op_ld_b_c(z80t); | ||
23 | extern z80t z80op_ld_b_d(z80t); | ||
24 | extern z80t z80op_ld_b_e(z80t); | ||
25 | extern z80t z80op_ld_b_h(z80t); | ||
26 | extern z80t z80op_ld_b_l(z80t); | ||
27 | extern z80t z80op_ld_b_ihl(z80t); | ||
28 | extern z80t z80op_ld_b_a(z80t); | ||
29 | extern z80t z80op_ld_c_b(z80t); | ||
30 | /* extern z80t z80op_nop(z80t); */ | ||
31 | extern z80t z80op_ld_c_d(z80t); | ||
32 | extern z80t z80op_ld_c_e(z80t); | ||
33 | extern z80t z80op_ld_c_h(z80t); | ||
34 | extern z80t z80op_ld_c_l(z80t); | ||
35 | extern z80t z80op_ld_c_ihl(z80t); | ||
36 | extern z80t z80op_ld_c_a(z80t); | ||
37 | |||
38 | extern z80t z80op_ld_d_b(z80t); | ||
39 | extern z80t z80op_ld_d_c(z80t); | ||
40 | /* extern z80t z80op_nop(z80t); */ | ||
41 | extern z80t z80op_ld_d_e(z80t); | ||
42 | extern z80t z80op_ld_d_h(z80t); | ||
43 | extern z80t z80op_ld_d_l(z80t); | ||
44 | extern z80t z80op_ld_d_ihl(z80t); | ||
45 | extern z80t z80op_ld_d_a(z80t); | ||
46 | extern z80t z80op_ld_e_b(z80t); | ||
47 | extern z80t z80op_ld_e_c(z80t); | ||
48 | extern z80t z80op_ld_e_d(z80t); | ||
49 | /* extern z80t z80op_nop(z80t); */ | ||
50 | extern z80t z80op_ld_e_h(z80t); | ||
51 | extern z80t z80op_ld_e_l(z80t); | ||
52 | extern z80t z80op_ld_e_ihl(z80t); | ||
53 | extern z80t z80op_ld_e_a(z80t); | ||
54 | |||
55 | extern z80t z80op_ld_h_b(z80t); | ||
56 | extern z80t z80op_ld_h_c(z80t); | ||
57 | extern z80t z80op_ld_h_d(z80t); | ||
58 | extern z80t z80op_ld_h_e(z80t); | ||
59 | /* extern z80t z80op_nop(z80t); */ | ||
60 | extern z80t z80op_ld_h_l(z80t); | ||
61 | extern z80t z80op_ld_h_ihl(z80t); | ||
62 | extern z80t z80op_ld_h_a(z80t); | ||
63 | extern z80t z80op_ld_l_b(z80t); | ||
64 | extern z80t z80op_ld_l_c(z80t); | ||
65 | extern z80t z80op_ld_l_d(z80t); | ||
66 | extern z80t z80op_ld_l_e(z80t); | ||
67 | extern z80t z80op_ld_l_h(z80t); | ||
68 | /* extern z80t z80op_nop(z80t); */ | ||
69 | extern z80t z80op_ld_l_ihl(z80t); | ||
70 | extern z80t z80op_ld_l_a(z80t); | ||
71 | |||
72 | extern z80t z80op_ld_ihl_b(z80t); | ||
73 | extern z80t z80op_ld_ihl_c(z80t); | ||
74 | extern z80t z80op_ld_ihl_d(z80t); | ||
75 | extern z80t z80op_ld_ihl_e(z80t); | ||
76 | extern z80t z80op_ld_ihl_h(z80t); | ||
77 | extern z80t z80op_ld_ihl_l(z80t); | ||
78 | extern z80t z80op_halt(z80t); | ||
79 | extern z80t z80op_ld_ihl_a(z80t); | ||
80 | extern z80t z80op_ld_a_b(z80t); | ||
81 | extern z80t z80op_ld_a_c(z80t); | ||
82 | extern z80t z80op_ld_a_d(z80t); | ||
83 | extern z80t z80op_ld_a_e(z80t); | ||
84 | extern z80t z80op_ld_a_h(z80t); | ||
85 | extern z80t z80op_ld_a_l(z80t); | ||
86 | extern z80t z80op_ld_a_ihl(z80t); | ||
87 | /* extern z80t z80op_nop(z80t); */ | ||
88 | |||
89 | |||
90 | /* IX */ | ||
91 | |||
92 | extern z80t z80op_ld_b_ixh(z80t); | ||
93 | extern z80t z80op_ld_b_ixl(z80t); | ||
94 | |||
95 | extern z80t z80op_ld_c_ixh(z80t); | ||
96 | extern z80t z80op_ld_c_ixl(z80t); | ||
97 | |||
98 | extern z80t z80op_ld_d_ixh(z80t); | ||
99 | extern z80t z80op_ld_d_ixl(z80t); | ||
100 | |||
101 | extern z80t z80op_ld_e_ixh(z80t); | ||
102 | extern z80t z80op_ld_e_ixl(z80t); | ||
103 | |||
104 | extern z80t z80op_ld_ixh_b(z80t); | ||
105 | extern z80t z80op_ld_ixh_c(z80t); | ||
106 | extern z80t z80op_ld_ixh_d(z80t); | ||
107 | extern z80t z80op_ld_ixh_e(z80t); | ||
108 | /* extern z80t z80op_ld_ixh_ixh(z80t); */ | ||
109 | extern z80t z80op_ld_ixh_ixl(z80t); | ||
110 | extern z80t z80op_ld_ixh_a(z80t); | ||
111 | |||
112 | |||
113 | extern z80t z80op_ld_ixl_b(z80t); | ||
114 | extern z80t z80op_ld_ixl_c(z80t); | ||
115 | extern z80t z80op_ld_ixl_d(z80t); | ||
116 | extern z80t z80op_ld_ixl_e(z80t); | ||
117 | extern z80t z80op_ld_ixl_ixh(z80t); | ||
118 | /* extern z80t z80op_ld_ixl_ixl(z80t); */ | ||
119 | extern z80t z80op_ld_ixl_a(z80t); | ||
120 | |||
121 | extern z80t z80op_ld_a_ixh(z80t); | ||
122 | extern z80t z80op_ld_a_ixl(z80t); | ||
123 | |||
124 | extern z80t z80op_ld_iixd_b(z80t); | ||
125 | extern z80t z80op_ld_iixd_c(z80t); | ||
126 | extern z80t z80op_ld_iixd_d(z80t); | ||
127 | extern z80t z80op_ld_iixd_e(z80t); | ||
128 | extern z80t z80op_ld_iixd_h(z80t); | ||
129 | extern z80t z80op_ld_iixd_l(z80t); | ||
130 | extern z80t z80op_ld_iixd_a(z80t); | ||
131 | |||
132 | extern z80t z80op_ld_b_iixd(z80t); | ||
133 | extern z80t z80op_ld_c_iixd(z80t); | ||
134 | extern z80t z80op_ld_d_iixd(z80t); | ||
135 | extern z80t z80op_ld_e_iixd(z80t); | ||
136 | extern z80t z80op_ld_h_iixd(z80t); | ||
137 | extern z80t z80op_ld_l_iixd(z80t); | ||
138 | extern z80t z80op_ld_a_iixd(z80t); | ||
139 | |||
140 | /* IY */ | ||
141 | |||
142 | extern z80t z80op_ld_b_iyh(z80t); | ||
143 | extern z80t z80op_ld_b_iyl(z80t); | ||
144 | |||
145 | extern z80t z80op_ld_c_iyh(z80t); | ||
146 | extern z80t z80op_ld_c_iyl(z80t); | ||
147 | |||
148 | extern z80t z80op_ld_d_iyh(z80t); | ||
149 | extern z80t z80op_ld_d_iyl(z80t); | ||
150 | |||
151 | extern z80t z80op_ld_e_iyh(z80t); | ||
152 | extern z80t z80op_ld_e_iyl(z80t); | ||
153 | |||
154 | extern z80t z80op_ld_iyh_b(z80t); | ||
155 | extern z80t z80op_ld_iyh_c(z80t); | ||
156 | extern z80t z80op_ld_iyh_d(z80t); | ||
157 | extern z80t z80op_ld_iyh_e(z80t); | ||
158 | /* extern z80t z80op_ld_iyh_iyh(z80t); */ | ||
159 | extern z80t z80op_ld_iyh_iyl(z80t); | ||
160 | extern z80t z80op_ld_iyh_a(z80t); | ||
161 | |||
162 | |||
163 | extern z80t z80op_ld_iyl_b(z80t); | ||
164 | extern z80t z80op_ld_iyl_c(z80t); | ||
165 | extern z80t z80op_ld_iyl_d(z80t); | ||
166 | extern z80t z80op_ld_iyl_e(z80t); | ||
167 | extern z80t z80op_ld_iyl_iyh(z80t); | ||
168 | /* extern z80t z80op_ld_iyl_iyl(z80t); */ | ||
169 | extern z80t z80op_ld_iyl_a(z80t); | ||
170 | |||
171 | extern z80t z80op_ld_a_iyh(z80t); | ||
172 | extern z80t z80op_ld_a_iyl(z80t); | ||
173 | |||
174 | extern z80t z80op_ld_iiyd_b(z80t); | ||
175 | extern z80t z80op_ld_iiyd_c(z80t); | ||
176 | extern z80t z80op_ld_iiyd_d(z80t); | ||
177 | extern z80t z80op_ld_iiyd_e(z80t); | ||
178 | extern z80t z80op_ld_iiyd_h(z80t); | ||
179 | extern z80t z80op_ld_iiyd_l(z80t); | ||
180 | extern z80t z80op_ld_iiyd_a(z80t); | ||
181 | |||
182 | extern z80t z80op_ld_b_iiyd(z80t); | ||
183 | extern z80t z80op_ld_c_iiyd(z80t); | ||
184 | extern z80t z80op_ld_d_iiyd(z80t); | ||
185 | extern z80t z80op_ld_e_iiyd(z80t); | ||
186 | extern z80t z80op_ld_h_iiyd(z80t); | ||
187 | extern z80t z80op_ld_l_iiyd(z80t); | ||
188 | extern z80t z80op_ld_a_iiyd(z80t); | ||
diff --git a/apps/plugins/zxbox/z80_op2x.c b/apps/plugins/zxbox/z80_op2x.c new file mode 100644 index 0000000000..40c85a2eda --- /dev/null +++ b/apps/plugins/zxbox/z80_op2x.c | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* IX */ | ||
22 | |||
23 | LD_R_R(b, ixh, RB, XH, 0, 4) | ||
24 | LD_R_R(b, ixl, RB, XL, 0, 5) | ||
25 | |||
26 | LD_R_R(c, ixh, RC, XH, 1, 4) | ||
27 | LD_R_R(c, ixl, RC, XL, 1, 5) | ||
28 | |||
29 | LD_R_R(d, ixh, RD, XH, 2, 4) | ||
30 | LD_R_R(d, ixl, RD, XL, 2, 5) | ||
31 | |||
32 | LD_R_R(e, ixh, RE, XH, 3, 4) | ||
33 | LD_R_R(e, ixl, RE, XL, 3, 5) | ||
34 | |||
35 | LD_R_R(ixh, b, XH, RB, 4, 0) | ||
36 | LD_R_R(ixh, c, XH, RC, 4, 1) | ||
37 | LD_R_R(ixh, d, XH, RD, 4, 2) | ||
38 | LD_R_R(ixh, e, XH, RE, 4, 3) | ||
39 | LD_R_R(ixh, ixl, XH, XL, 4, 5) | ||
40 | LD_R_R(ixh, a, XH, RA, 4, 7) | ||
41 | |||
42 | LD_R_R(ixl, b, XL, RB, 5, 0) | ||
43 | LD_R_R(ixl, c, XL, RC, 5, 1) | ||
44 | LD_R_R(ixl, d, XL, RD, 5, 2) | ||
45 | LD_R_R(ixl, e, XL, RE, 5, 3) | ||
46 | LD_R_R(ixl, ixh, XL, XH, 5, 4) | ||
47 | LD_R_R(ixl, a, XL, RA, 5, 7) | ||
48 | |||
49 | |||
50 | LD_R_R(a, ixh, RA, XH, 7, 4) | ||
51 | LD_R_R(a, ixl, RA, XL, 7, 5) | ||
52 | |||
53 | LD_ID_R(ix, IX, b, RB, 0) | ||
54 | LD_ID_R(ix, IX, c, RC, 1) | ||
55 | LD_ID_R(ix, IX, d, RD, 2) | ||
56 | LD_ID_R(ix, IX, e, RE, 3) | ||
57 | LD_ID_R(ix, IX, h, RH, 4) | ||
58 | LD_ID_R(ix, IX, l, RL, 5) | ||
59 | LD_ID_R(ix, IX, a, RA, 6) | ||
60 | |||
61 | LD_R_ID(ix, IX, b, RB, 0) | ||
62 | LD_R_ID(ix, IX, c, RC, 1) | ||
63 | LD_R_ID(ix, IX, d, RD, 2) | ||
64 | LD_R_ID(ix, IX, e, RE, 3) | ||
65 | LD_R_ID(ix, IX, h, RH, 4) | ||
66 | LD_R_ID(ix, IX, l, RL, 5) | ||
67 | LD_R_ID(ix, IX, a, RA, 6) | ||
68 | |||
69 | |||
70 | /* IY */ | ||
71 | |||
72 | LD_R_R(b, iyh, RB, YH, 0, 4) | ||
73 | LD_R_R(b, iyl, RB, YL, 0, 5) | ||
74 | |||
75 | LD_R_R(c, iyh, RC, YH, 1, 4) | ||
76 | LD_R_R(c, iyl, RC, YL, 1, 5) | ||
77 | |||
78 | LD_R_R(d, iyh, RD, YH, 2, 4) | ||
79 | LD_R_R(d, iyl, RD, YL, 2, 5) | ||
80 | |||
81 | LD_R_R(e, iyh, RE, YH, 3, 4) | ||
82 | LD_R_R(e, iyl, RE, YL, 3, 5) | ||
83 | |||
84 | LD_R_R(iyh, b, YH, RB, 4, 0) | ||
85 | LD_R_R(iyh, c, YH, RC, 4, 1) | ||
86 | LD_R_R(iyh, d, YH, RD, 4, 2) | ||
87 | LD_R_R(iyh, e, YH, RE, 4, 3) | ||
88 | LD_R_R(iyh, iyl, YH, YL, 4, 5) | ||
89 | LD_R_R(iyh, a, YH, RA, 4, 7) | ||
90 | |||
91 | LD_R_R(iyl, b, YL, RB, 5, 0) | ||
92 | LD_R_R(iyl, c, YL, RC, 5, 1) | ||
93 | LD_R_R(iyl, d, YL, RD, 5, 2) | ||
94 | LD_R_R(iyl, e, YL, RE, 5, 3) | ||
95 | LD_R_R(iyl, iyh, YL, YH, 5, 4) | ||
96 | LD_R_R(iyl, a, YL, RA, 5, 7) | ||
97 | |||
98 | |||
99 | LD_R_R(a, iyh, RA, YH, 7, 4) | ||
100 | LD_R_R(a, iyl, RA, YL, 7, 5) | ||
101 | |||
102 | LD_ID_R(iy, IY, b, RB, 0) | ||
103 | LD_ID_R(iy, IY, c, RC, 1) | ||
104 | LD_ID_R(iy, IY, d, RD, 2) | ||
105 | LD_ID_R(iy, IY, e, RE, 3) | ||
106 | LD_ID_R(iy, IY, h, RH, 4) | ||
107 | LD_ID_R(iy, IY, l, RL, 5) | ||
108 | LD_ID_R(iy, IY, a, RA, 6) | ||
109 | |||
110 | LD_R_ID(iy, IY, b, RB, 0) | ||
111 | LD_R_ID(iy, IY, c, RC, 1) | ||
112 | LD_R_ID(iy, IY, d, RD, 2) | ||
113 | LD_R_ID(iy, IY, e, RE, 3) | ||
114 | LD_R_ID(iy, IY, h, RH, 4) | ||
115 | LD_R_ID(iy, IY, l, RL, 5) | ||
116 | LD_R_ID(iy, IY, a, RA, 6) | ||
diff --git a/apps/plugins/zxbox/z80_op3.c b/apps/plugins/zxbox/z80_op3.c new file mode 100644 index 0000000000..dd0d43ad02 --- /dev/null +++ b/apps/plugins/zxbox/z80_op3.c | |||
@@ -0,0 +1,142 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op3.h" | ||
24 | #include "z80_ari.h" | ||
25 | #endif | ||
26 | |||
27 | #define ARIR(arin, func, an, rn, r, n) \ | ||
28 | OPDEF(arin ## _ ## rn, 0x80+an*8+n) \ | ||
29 | { \ | ||
30 | func(r); \ | ||
31 | ENTIME(4); \ | ||
32 | } | ||
33 | |||
34 | #define ARIIHL(arin, func, an) \ | ||
35 | OPDEF(arin ## _ihl, 0x86+an*8) \ | ||
36 | { \ | ||
37 | func(*HLP); \ | ||
38 | ENTIME(7); \ | ||
39 | } | ||
40 | |||
41 | #define ARIID(arin, func, an, ixyn, ixy) \ | ||
42 | OPDEF(arin ## _i ## ixyn ## d, 0x86+an*8)\ | ||
43 | { \ | ||
44 | register dbyte addr; \ | ||
45 | register byte val; \ | ||
46 | IXDGET(ixy, addr); \ | ||
47 | val = READ(addr); \ | ||
48 | func(val); \ | ||
49 | ENTIME(15); \ | ||
50 | } | ||
51 | |||
52 | |||
53 | #define ADD_A_R(rn, r, n) ARIR(add_a, ADD, 0, rn, r, n) | ||
54 | #define ADC_A_R(rn, r, n) ARIR(adc_a, ADC, 1, rn, r, n) | ||
55 | #define SUB_R(rn, r, n) ARIR(sub, SUB, 2, rn, r, n) | ||
56 | #define SBC_A_R(rn, r, n) ARIR(sbc_a, SBC, 3, rn, r, n) | ||
57 | #define AND_R(rn, r, n) ARIR(and, AND, 4, rn, r, n) | ||
58 | #define XOR_R(rn, r, n) ARIR(xor, XOR, 5, rn, r, n) | ||
59 | #define OR_R(rn, r, n) ARIR(or, OR, 6, rn, r, n) | ||
60 | #define CP_R(rn, r, n) ARIR(cp, CP, 7, rn, r, n) | ||
61 | |||
62 | ADD_A_R(b, RB, 0) | ||
63 | ADD_A_R(c, RC, 1) | ||
64 | ADD_A_R(d, RD, 2) | ||
65 | ADD_A_R(e, RE, 3) | ||
66 | ADD_A_R(h, RH, 4) | ||
67 | ADD_A_R(l, RL, 5) | ||
68 | ADD_A_R(a, RA, 7) | ||
69 | |||
70 | ADC_A_R(b, RB, 0) | ||
71 | ADC_A_R(c, RC, 1) | ||
72 | ADC_A_R(d, RD, 2) | ||
73 | ADC_A_R(e, RE, 3) | ||
74 | ADC_A_R(h, RH, 4) | ||
75 | ADC_A_R(l, RL, 5) | ||
76 | ADC_A_R(a, RA, 7) | ||
77 | |||
78 | SUB_R(b, RB, 0) | ||
79 | SUB_R(c, RC, 1) | ||
80 | SUB_R(d, RD, 2) | ||
81 | SUB_R(e, RE, 3) | ||
82 | SUB_R(h, RH, 4) | ||
83 | SUB_R(l, RL, 5) | ||
84 | SUB_R(a, RA, 7) | ||
85 | |||
86 | SBC_A_R(b, RB, 0) | ||
87 | SBC_A_R(c, RC, 1) | ||
88 | SBC_A_R(d, RD, 2) | ||
89 | SBC_A_R(e, RE, 3) | ||
90 | SBC_A_R(h, RH, 4) | ||
91 | SBC_A_R(l, RL, 5) | ||
92 | SBC_A_R(a, RA, 7) | ||
93 | |||
94 | AND_R(b, RB, 0) | ||
95 | AND_R(c, RC, 1) | ||
96 | AND_R(d, RD, 2) | ||
97 | AND_R(e, RE, 3) | ||
98 | AND_R(h, RH, 4) | ||
99 | AND_R(l, RL, 5) | ||
100 | AND_R(a, RA, 7) | ||
101 | |||
102 | XOR_R(b, RB, 0) | ||
103 | XOR_R(c, RC, 1) | ||
104 | XOR_R(d, RD, 2) | ||
105 | XOR_R(e, RE, 3) | ||
106 | XOR_R(h, RH, 4) | ||
107 | XOR_R(l, RL, 5) | ||
108 | /* XOR_R(a, RA, 7) */ | ||
109 | |||
110 | OPDEF(xor_a, 0xAF) | ||
111 | { | ||
112 | RA = 0; | ||
113 | RF = (RF & ~(ALLF)) | (ZF | PVF); | ||
114 | ENTIME(4); | ||
115 | } | ||
116 | |||
117 | OR_R(b, RB, 0) | ||
118 | OR_R(c, RC, 1) | ||
119 | OR_R(d, RD, 2) | ||
120 | OR_R(e, RE, 3) | ||
121 | OR_R(h, RH, 4) | ||
122 | OR_R(l, RL, 5) | ||
123 | OR_R(a, RA, 7) | ||
124 | |||
125 | CP_R(b, RB, 0) | ||
126 | CP_R(c, RC, 1) | ||
127 | CP_R(d, RD, 2) | ||
128 | CP_R(e, RE, 3) | ||
129 | CP_R(h, RH, 4) | ||
130 | CP_R(l, RL, 5) | ||
131 | CP_R(a, RA, 7) | ||
132 | |||
133 | ARIIHL(add_a, ADD, 0) | ||
134 | ARIIHL(adc_a, ADC, 1) | ||
135 | ARIIHL(sub, SUB, 2) | ||
136 | ARIIHL(sbc_a, SBC, 3) | ||
137 | ARIIHL(and, AND, 4) | ||
138 | ARIIHL(xor, XOR, 5) | ||
139 | ARIIHL(or, OR, 6) | ||
140 | ARIIHL(cp, CP, 7) | ||
141 | |||
142 | #include "z80_op3x.c" | ||
diff --git a/apps/plugins/zxbox/z80_op3.h b/apps/plugins/zxbox/z80_op3.h new file mode 100644 index 0000000000..481048e3f9 --- /dev/null +++ b/apps/plugins/zxbox/z80_op3.h | |||
@@ -0,0 +1,157 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | extern z80t z80op_add_a_b(z80t); | ||
22 | extern z80t z80op_add_a_c(z80t); | ||
23 | extern z80t z80op_add_a_d(z80t); | ||
24 | extern z80t z80op_add_a_e(z80t); | ||
25 | extern z80t z80op_add_a_h(z80t); | ||
26 | extern z80t z80op_add_a_l(z80t); | ||
27 | extern z80t z80op_add_a_ihl(z80t); | ||
28 | extern z80t z80op_add_a_a(z80t); | ||
29 | extern z80t z80op_adc_a_b(z80t); | ||
30 | extern z80t z80op_adc_a_c(z80t); | ||
31 | extern z80t z80op_adc_a_d(z80t); | ||
32 | extern z80t z80op_adc_a_e(z80t); | ||
33 | extern z80t z80op_adc_a_h(z80t); | ||
34 | extern z80t z80op_adc_a_l(z80t); | ||
35 | extern z80t z80op_adc_a_ihl(z80t); | ||
36 | extern z80t z80op_adc_a_a(z80t); | ||
37 | |||
38 | extern z80t z80op_sub_b(z80t); | ||
39 | extern z80t z80op_sub_c(z80t); | ||
40 | extern z80t z80op_sub_d(z80t); | ||
41 | extern z80t z80op_sub_e(z80t); | ||
42 | extern z80t z80op_sub_h(z80t); | ||
43 | extern z80t z80op_sub_l(z80t); | ||
44 | extern z80t z80op_sub_ihl(z80t); | ||
45 | extern z80t z80op_sub_a(z80t); | ||
46 | extern z80t z80op_sbc_a_b(z80t); | ||
47 | extern z80t z80op_sbc_a_c(z80t); | ||
48 | extern z80t z80op_sbc_a_d(z80t); | ||
49 | extern z80t z80op_sbc_a_e(z80t); | ||
50 | extern z80t z80op_sbc_a_h(z80t); | ||
51 | extern z80t z80op_sbc_a_l(z80t); | ||
52 | extern z80t z80op_sbc_a_ihl(z80t); | ||
53 | extern z80t z80op_sbc_a_a(z80t); | ||
54 | |||
55 | extern z80t z80op_and_b(z80t); | ||
56 | extern z80t z80op_and_c(z80t); | ||
57 | extern z80t z80op_and_d(z80t); | ||
58 | extern z80t z80op_and_e(z80t); | ||
59 | extern z80t z80op_and_h(z80t); | ||
60 | extern z80t z80op_and_l(z80t); | ||
61 | extern z80t z80op_and_ihl(z80t); | ||
62 | extern z80t z80op_and_a(z80t); | ||
63 | extern z80t z80op_xor_b(z80t); | ||
64 | extern z80t z80op_xor_c(z80t); | ||
65 | extern z80t z80op_xor_d(z80t); | ||
66 | extern z80t z80op_xor_e(z80t); | ||
67 | extern z80t z80op_xor_h(z80t); | ||
68 | extern z80t z80op_xor_l(z80t); | ||
69 | extern z80t z80op_xor_ihl(z80t); | ||
70 | extern z80t z80op_xor_a(z80t); | ||
71 | |||
72 | extern z80t z80op_or_b(z80t); | ||
73 | extern z80t z80op_or_c(z80t); | ||
74 | extern z80t z80op_or_d(z80t); | ||
75 | extern z80t z80op_or_e(z80t); | ||
76 | extern z80t z80op_or_h(z80t); | ||
77 | extern z80t z80op_or_l(z80t); | ||
78 | extern z80t z80op_or_ihl(z80t); | ||
79 | extern z80t z80op_or_a(z80t); | ||
80 | extern z80t z80op_cp_b(z80t); | ||
81 | extern z80t z80op_cp_c(z80t); | ||
82 | extern z80t z80op_cp_d(z80t); | ||
83 | extern z80t z80op_cp_e(z80t); | ||
84 | extern z80t z80op_cp_h(z80t); | ||
85 | extern z80t z80op_cp_l(z80t); | ||
86 | extern z80t z80op_cp_ihl(z80t); | ||
87 | extern z80t z80op_cp_a(z80t); | ||
88 | |||
89 | |||
90 | /* IX */ | ||
91 | |||
92 | extern z80t z80op_add_a_ixh(z80t); | ||
93 | extern z80t z80op_add_a_ixl(z80t); | ||
94 | extern z80t z80op_add_a_iixd(z80t); | ||
95 | |||
96 | extern z80t z80op_adc_a_ixh(z80t); | ||
97 | extern z80t z80op_adc_a_ixl(z80t); | ||
98 | extern z80t z80op_adc_a_iixd(z80t); | ||
99 | |||
100 | extern z80t z80op_sub_ixh(z80t); | ||
101 | extern z80t z80op_sub_ixl(z80t); | ||
102 | extern z80t z80op_sub_iixd(z80t); | ||
103 | |||
104 | extern z80t z80op_sbc_a_ixh(z80t); | ||
105 | extern z80t z80op_sbc_a_ixl(z80t); | ||
106 | extern z80t z80op_sbc_a_iixd(z80t); | ||
107 | |||
108 | extern z80t z80op_and_ixh(z80t); | ||
109 | extern z80t z80op_and_ixl(z80t); | ||
110 | extern z80t z80op_and_iixd(z80t); | ||
111 | |||
112 | extern z80t z80op_xor_ixh(z80t); | ||
113 | extern z80t z80op_xor_ixl(z80t); | ||
114 | extern z80t z80op_xor_iixd(z80t); | ||
115 | |||
116 | extern z80t z80op_or_ixh(z80t); | ||
117 | extern z80t z80op_or_ixl(z80t); | ||
118 | extern z80t z80op_or_iixd(z80t); | ||
119 | |||
120 | extern z80t z80op_cp_ixh(z80t); | ||
121 | extern z80t z80op_cp_ixl(z80t); | ||
122 | extern z80t z80op_cp_iixd(z80t); | ||
123 | |||
124 | |||
125 | /* IY */ | ||
126 | |||
127 | extern z80t z80op_add_a_iyh(z80t); | ||
128 | extern z80t z80op_add_a_iyl(z80t); | ||
129 | extern z80t z80op_add_a_iiyd(z80t); | ||
130 | |||
131 | extern z80t z80op_adc_a_iyh(z80t); | ||
132 | extern z80t z80op_adc_a_iyl(z80t); | ||
133 | extern z80t z80op_adc_a_iiyd(z80t); | ||
134 | |||
135 | extern z80t z80op_sub_iyh(z80t); | ||
136 | extern z80t z80op_sub_iyl(z80t); | ||
137 | extern z80t z80op_sub_iiyd(z80t); | ||
138 | |||
139 | extern z80t z80op_sbc_a_iyh(z80t); | ||
140 | extern z80t z80op_sbc_a_iyl(z80t); | ||
141 | extern z80t z80op_sbc_a_iiyd(z80t); | ||
142 | |||
143 | extern z80t z80op_and_iyh(z80t); | ||
144 | extern z80t z80op_and_iyl(z80t); | ||
145 | extern z80t z80op_and_iiyd(z80t); | ||
146 | |||
147 | extern z80t z80op_xor_iyh(z80t); | ||
148 | extern z80t z80op_xor_iyl(z80t); | ||
149 | extern z80t z80op_xor_iiyd(z80t); | ||
150 | |||
151 | extern z80t z80op_or_iyh(z80t); | ||
152 | extern z80t z80op_or_iyl(z80t); | ||
153 | extern z80t z80op_or_iiyd(z80t); | ||
154 | |||
155 | extern z80t z80op_cp_iyh(z80t); | ||
156 | extern z80t z80op_cp_iyl(z80t); | ||
157 | extern z80t z80op_cp_iiyd(z80t); | ||
diff --git a/apps/plugins/zxbox/z80_op3x.c b/apps/plugins/zxbox/z80_op3x.c new file mode 100644 index 0000000000..cafb5dfdad --- /dev/null +++ b/apps/plugins/zxbox/z80_op3x.c | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* IX */ | ||
22 | |||
23 | ADD_A_R(ixh, XH, 4) | ||
24 | ADD_A_R(ixl, XL, 5) | ||
25 | |||
26 | ADC_A_R(ixh, XH, 4) | ||
27 | ADC_A_R(ixl, XL, 5) | ||
28 | |||
29 | SUB_R(ixh, XH, 4) | ||
30 | SUB_R(ixl, XL, 5) | ||
31 | |||
32 | SBC_A_R(ixh, XH, 4) | ||
33 | SBC_A_R(ixl, XL, 5) | ||
34 | |||
35 | AND_R(ixh, XH, 4) | ||
36 | AND_R(ixl, XL, 5) | ||
37 | |||
38 | XOR_R(ixh, XH, 4) | ||
39 | XOR_R(ixl, XL, 5) | ||
40 | |||
41 | OR_R(ixh, XH, 4) | ||
42 | OR_R(ixl, XL, 5) | ||
43 | |||
44 | CP_R(ixh, XH, 4) | ||
45 | CP_R(ixl, XL, 5) | ||
46 | |||
47 | ARIID(add_a, ADD, 0, ix, IX) | ||
48 | ARIID(adc_a, ADC, 1, ix, IX) | ||
49 | ARIID(sub, SUB, 2, ix, IX) | ||
50 | ARIID(sbc_a, SBC, 3, ix, IX) | ||
51 | ARIID(and, AND, 4, ix, IX) | ||
52 | ARIID(xor, XOR, 5, ix, IX) | ||
53 | ARIID(or, OR, 6, ix, IX) | ||
54 | ARIID(cp, CP, 7, ix, IX) | ||
55 | |||
56 | /* IY */ | ||
57 | |||
58 | ADD_A_R(iyh, YH, 4) | ||
59 | ADD_A_R(iyl, YL, 5) | ||
60 | |||
61 | ADC_A_R(iyh, YH, 4) | ||
62 | ADC_A_R(iyl, YL, 5) | ||
63 | |||
64 | SUB_R(iyh, YH, 4) | ||
65 | SUB_R(iyl, YL, 5) | ||
66 | |||
67 | SBC_A_R(iyh, YH, 4) | ||
68 | SBC_A_R(iyl, YL, 5) | ||
69 | |||
70 | AND_R(iyh, YH, 4) | ||
71 | AND_R(iyl, YL, 5) | ||
72 | |||
73 | XOR_R(iyh, YH, 4) | ||
74 | XOR_R(iyl, YL, 5) | ||
75 | |||
76 | OR_R(iyh, YH, 4) | ||
77 | OR_R(iyl, YL, 5) | ||
78 | |||
79 | CP_R(iyh, YH, 4) | ||
80 | CP_R(iyl, YL, 5) | ||
81 | |||
82 | ARIID(add_a, ADD, 0, iy, IY) | ||
83 | ARIID(adc_a, ADC, 1, iy, IY) | ||
84 | ARIID(sub, SUB, 2, iy, IY) | ||
85 | ARIID(sbc_a, SBC, 3, iy, IY) | ||
86 | ARIID(and, AND, 4, iy, IY) | ||
87 | ARIID(xor, XOR, 5, iy, IY) | ||
88 | ARIID(or, OR, 6, iy, IY) | ||
89 | ARIID(cp, CP, 7, iy, IY) | ||
diff --git a/apps/plugins/zxbox/z80_op4.c b/apps/plugins/zxbox/z80_op4.c new file mode 100644 index 0000000000..99dba97b6b --- /dev/null +++ b/apps/plugins/zxbox/z80_op4.c | |||
@@ -0,0 +1,305 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op4.h" | ||
24 | #include "z80_ari.h" | ||
25 | #endif | ||
26 | |||
27 | #define RET_CC(ccn, cc, n) \ | ||
28 | OPDEF(ret_ ## ccn, 0xC0+n*8) \ | ||
29 | { \ | ||
30 | if(!(cc)) { \ | ||
31 | ENTIME(5); \ | ||
32 | } \ | ||
33 | else { \ | ||
34 | POP(PC); \ | ||
35 | ENTIME(11); \ | ||
36 | } \ | ||
37 | } | ||
38 | |||
39 | RET_CC(nz, !TESTZF, 0) | ||
40 | RET_CC(z, TESTZF, 1) | ||
41 | RET_CC(nc, !TESTCF, 2) | ||
42 | RET_CC(c, TESTCF, 3) | ||
43 | RET_CC(po, !TESTPF, 4) | ||
44 | RET_CC(pe, TESTPF, 5) | ||
45 | RET_CC(p, !TESTSF, 6) | ||
46 | RET_CC(m, TESTSF, 7) | ||
47 | |||
48 | #define POP_RR(rrn, rr, n) \ | ||
49 | OPDEF(pop_ ## rrn, 0xC1+n*0x10) \ | ||
50 | { \ | ||
51 | POP(rr); \ | ||
52 | ENTIME(10); \ | ||
53 | } | ||
54 | |||
55 | POP_RR(bc, BC, 0) | ||
56 | POP_RR(de, DE, 1) | ||
57 | POP_RR(hl, HL, 2) | ||
58 | POP_RR(af, AF, 3) | ||
59 | |||
60 | OPDEF(ret, 0xC9) | ||
61 | { | ||
62 | POP(PC); | ||
63 | ENTIME(10); | ||
64 | } | ||
65 | |||
66 | OPDEF(exx, 0xD9) | ||
67 | { | ||
68 | register dbyte dtmp; | ||
69 | |||
70 | dtmp = BCBK, BCBK = BC, BC = dtmp; | ||
71 | dtmp = DEBK, DEBK = DE, DE = dtmp; | ||
72 | dtmp = HLBK, HLBK = HL, HL = dtmp; | ||
73 | |||
74 | ENTIME(4); | ||
75 | } | ||
76 | |||
77 | #define JP_RR(rrn, rr) \ | ||
78 | OPDEF(jp_ ## rrn, 0xE9) \ | ||
79 | { \ | ||
80 | PC = rr; \ | ||
81 | ENTIME(4); \ | ||
82 | } | ||
83 | |||
84 | JP_RR(hl, HL) | ||
85 | |||
86 | #define LD_SP_RR(rrn, rr) \ | ||
87 | OPDEF(ld_sp_ ## rrn, 0xF9) \ | ||
88 | { \ | ||
89 | SP = rr; \ | ||
90 | ENTIME(6); \ | ||
91 | } | ||
92 | |||
93 | LD_SP_RR(hl, HL) | ||
94 | |||
95 | #define JP_CC(ccn, cc, n) \ | ||
96 | OPDEF(jp_ ## ccn ## _nn, 0xC2+n*8) \ | ||
97 | { \ | ||
98 | if(!(cc)) { \ | ||
99 | PC+=2; \ | ||
100 | ENTIME(10); \ | ||
101 | } \ | ||
102 | else { \ | ||
103 | PC = DREAD(PC); \ | ||
104 | ENTIME(10); \ | ||
105 | } \ | ||
106 | } | ||
107 | |||
108 | JP_CC(nz, !TESTZF, 0) | ||
109 | JP_CC(z, TESTZF, 1) | ||
110 | JP_CC(nc, !TESTCF, 2) | ||
111 | JP_CC(c, TESTCF, 3) | ||
112 | JP_CC(po, !TESTPF, 4) | ||
113 | JP_CC(pe, TESTPF, 5) | ||
114 | JP_CC(p, !TESTSF, 6) | ||
115 | JP_CC(m, TESTSF, 7) | ||
116 | |||
117 | OPDEF(jp_nn, 0xC3) | ||
118 | { | ||
119 | PC = DREAD(PC); | ||
120 | ENTIME(10); | ||
121 | } | ||
122 | |||
123 | |||
124 | OPDEF(out_in_a, 0xD3) | ||
125 | { | ||
126 | OUT(RA, *PCP, RA); | ||
127 | PC++; | ||
128 | ENTIME(11); | ||
129 | } | ||
130 | |||
131 | OPDEF(in_a_in, 0xDB) | ||
132 | { | ||
133 | IN(RA, *PCP, RA); | ||
134 | PC++; | ||
135 | ENTIME(11); | ||
136 | } | ||
137 | |||
138 | #define EX_ISP_RR(rrn, rr) \ | ||
139 | OPDEF(ex_isp_ ## rrn, 0xE3) \ | ||
140 | { \ | ||
141 | register dbyte dtmp; \ | ||
142 | dtmp = DREAD(SP); \ | ||
143 | DWRITE(SP, rr); \ | ||
144 | rr = dtmp; \ | ||
145 | ENTIME(19); \ | ||
146 | } | ||
147 | |||
148 | EX_ISP_RR(hl, HL) | ||
149 | |||
150 | OPDEF(ex_de_hl, 0xEB) | ||
151 | { | ||
152 | register dbyte dtmp; | ||
153 | dtmp = DE; | ||
154 | DE = HL; | ||
155 | HL = dtmp; | ||
156 | ENTIME(4); | ||
157 | } | ||
158 | |||
159 | OPDEF(di, 0xF3) | ||
160 | { | ||
161 | DANM(iff1) = 0; | ||
162 | DANM(iff2) = 0; | ||
163 | DI_CHECK | ||
164 | ENTIME(4); | ||
165 | } | ||
166 | |||
167 | OPDEF(ei, 0xFB) | ||
168 | { | ||
169 | DANM(iff1) = 1; | ||
170 | DANM(iff2) = 1; | ||
171 | ENTIME(4); | ||
172 | } | ||
173 | |||
174 | |||
175 | |||
176 | #define CALL_CC(ccn, cc, n) \ | ||
177 | OPDEF(call_ ## ccn ## _nn, 0xC4+n*8) \ | ||
178 | { \ | ||
179 | if(!(cc)) { \ | ||
180 | PC+=2; \ | ||
181 | ENTIME(10); \ | ||
182 | } \ | ||
183 | else { \ | ||
184 | register dbyte dtmp; \ | ||
185 | dtmp = PC; \ | ||
186 | PC = DREAD(dtmp); \ | ||
187 | dtmp += 2; \ | ||
188 | PUSH(dtmp); \ | ||
189 | ENTIME(17); \ | ||
190 | } \ | ||
191 | } | ||
192 | |||
193 | CALL_CC(nz, !TESTZF, 0) | ||
194 | CALL_CC(z, TESTZF, 1) | ||
195 | CALL_CC(nc, !TESTCF, 2) | ||
196 | CALL_CC(c, TESTCF, 3) | ||
197 | CALL_CC(po, !TESTPF, 4) | ||
198 | CALL_CC(pe, TESTPF, 5) | ||
199 | CALL_CC(p, !TESTSF, 6) | ||
200 | CALL_CC(m, TESTSF, 7) | ||
201 | |||
202 | |||
203 | |||
204 | #define PUSH_RR(rrn, rr, n) \ | ||
205 | OPDEF(push_ ## rrn, 0xC5+n*0x10) \ | ||
206 | { \ | ||
207 | PUSH(rr); \ | ||
208 | ENTIME(11); \ | ||
209 | } | ||
210 | |||
211 | PUSH_RR(bc, BC, 0) | ||
212 | PUSH_RR(de, DE, 1) | ||
213 | PUSH_RR(hl, HL, 2) | ||
214 | PUSH_RR(af, AF, 3) | ||
215 | |||
216 | |||
217 | OPDEF(call_nn, 0xCD) | ||
218 | { | ||
219 | register dbyte dtmp; | ||
220 | dtmp = PC; | ||
221 | PC = DREAD(dtmp); | ||
222 | dtmp += 2; | ||
223 | PUSH(dtmp); | ||
224 | ENTIME(17); | ||
225 | } | ||
226 | |||
227 | |||
228 | OPDEF(add_a_n, 0xC6) | ||
229 | { | ||
230 | ADD(*PCP); | ||
231 | PC++; | ||
232 | ENTIME(7); | ||
233 | } | ||
234 | |||
235 | |||
236 | OPDEF(adc_a_n, 0xCE) | ||
237 | { | ||
238 | ADC(*PCP); | ||
239 | PC++; | ||
240 | ENTIME(7); | ||
241 | } | ||
242 | |||
243 | OPDEF(sub_n, 0xD6) | ||
244 | { | ||
245 | SUB(*PCP); | ||
246 | PC++; | ||
247 | ENTIME(7); | ||
248 | } | ||
249 | |||
250 | |||
251 | OPDEF(sbc_a_n, 0xDE) | ||
252 | { | ||
253 | SBC(*PCP); | ||
254 | PC++; | ||
255 | ENTIME(7); | ||
256 | } | ||
257 | |||
258 | OPDEF(and_n, 0xE6) | ||
259 | { | ||
260 | AND(*PCP); | ||
261 | PC++; | ||
262 | ENTIME(7); | ||
263 | } | ||
264 | |||
265 | |||
266 | OPDEF(xor_n, 0xEE) | ||
267 | { | ||
268 | XOR(*PCP); | ||
269 | PC++; | ||
270 | ENTIME(7); | ||
271 | } | ||
272 | |||
273 | OPDEF(or_n, 0xF6) | ||
274 | { | ||
275 | OR(*PCP); | ||
276 | PC++; | ||
277 | ENTIME(7); | ||
278 | } | ||
279 | |||
280 | |||
281 | OPDEF(cp_n, 0xFE) | ||
282 | { | ||
283 | CP(*PCP); | ||
284 | PC++; | ||
285 | ENTIME(7); | ||
286 | } | ||
287 | |||
288 | #define RST_NN(nnn, n) \ | ||
289 | OPDEF(rst_ ## nnn, 0xC7+n*8) \ | ||
290 | { \ | ||
291 | PUSH(PC); \ | ||
292 | PC = n*8; \ | ||
293 | ENTIME(11); \ | ||
294 | } | ||
295 | |||
296 | RST_NN(00, 0) | ||
297 | RST_NN(08, 1) | ||
298 | RST_NN(10, 2) | ||
299 | RST_NN(18, 3) | ||
300 | RST_NN(20, 4) | ||
301 | RST_NN(28, 5) | ||
302 | RST_NN(30, 6) | ||
303 | RST_NN(38, 7) | ||
304 | |||
305 | #include "z80_op4x.c" | ||
diff --git a/apps/plugins/zxbox/z80_op4.h b/apps/plugins/zxbox/z80_op4.h new file mode 100644 index 0000000000..4e2cf8b073 --- /dev/null +++ b/apps/plugins/zxbox/z80_op4.h | |||
@@ -0,0 +1,105 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | extern z80t z80op_ret_nz(z80t); | ||
22 | extern z80t z80op_pop_bc(z80t); | ||
23 | extern z80t z80op_jp_nz_nn(z80t); | ||
24 | extern z80t z80op_jp_nn(z80t); | ||
25 | extern z80t z80op_call_nz_nn(z80t); | ||
26 | extern z80t z80op_push_bc(z80t); | ||
27 | extern z80t z80op_add_a_n(z80t); | ||
28 | extern z80t z80op_rst_00(z80t); | ||
29 | extern z80t z80op_ret_z(z80t); | ||
30 | extern z80t z80op_ret(z80t); | ||
31 | extern z80t z80op_jp_z_nn(z80t); | ||
32 | extern z80t z80op_special_cb(z80t); | ||
33 | extern z80t z80op_call_z_nn(z80t); | ||
34 | extern z80t z80op_call_nn(z80t); | ||
35 | extern z80t z80op_adc_a_n(z80t); | ||
36 | extern z80t z80op_rst_08(z80t); | ||
37 | |||
38 | extern z80t z80op_ret_nc(z80t); | ||
39 | extern z80t z80op_pop_de(z80t); | ||
40 | extern z80t z80op_jp_nc_nn(z80t); | ||
41 | extern z80t z80op_out_in_a(z80t); | ||
42 | extern z80t z80op_call_nc_nn(z80t); | ||
43 | extern z80t z80op_push_de(z80t); | ||
44 | extern z80t z80op_sub_n(z80t); | ||
45 | extern z80t z80op_rst_10(z80t); | ||
46 | extern z80t z80op_ret_c(z80t); | ||
47 | extern z80t z80op_exx(z80t); | ||
48 | extern z80t z80op_jp_c_nn(z80t); | ||
49 | extern z80t z80op_in_a_in(z80t); | ||
50 | extern z80t z80op_call_c_nn(z80t); | ||
51 | extern z80t z80op_special_dd(z80t); | ||
52 | extern z80t z80op_sbc_a_n(z80t); | ||
53 | extern z80t z80op_rst_18(z80t); | ||
54 | |||
55 | extern z80t z80op_ret_po(z80t); | ||
56 | extern z80t z80op_pop_hl(z80t); | ||
57 | extern z80t z80op_jp_po_nn(z80t); | ||
58 | extern z80t z80op_ex_isp_hl(z80t); | ||
59 | extern z80t z80op_call_po_nn(z80t); | ||
60 | extern z80t z80op_push_hl(z80t); | ||
61 | extern z80t z80op_and_n(z80t); | ||
62 | extern z80t z80op_rst_20(z80t); | ||
63 | extern z80t z80op_ret_pe(z80t); | ||
64 | extern z80t z80op_jp_hl(z80t); | ||
65 | extern z80t z80op_jp_pe_nn(z80t); | ||
66 | extern z80t z80op_ex_de_hl(z80t); | ||
67 | extern z80t z80op_call_pe_nn(z80t); | ||
68 | extern z80t z80op_special_ed(z80t); | ||
69 | extern z80t z80op_xor_n(z80t); | ||
70 | extern z80t z80op_rst_28(z80t); | ||
71 | |||
72 | extern z80t z80op_ret_p(z80t); | ||
73 | extern z80t z80op_pop_af(z80t); | ||
74 | extern z80t z80op_jp_p_nn(z80t); | ||
75 | extern z80t z80op_di(z80t); | ||
76 | extern z80t z80op_call_p_nn(z80t); | ||
77 | extern z80t z80op_push_af(z80t); | ||
78 | extern z80t z80op_or_n(z80t); | ||
79 | extern z80t z80op_rst_30(z80t); | ||
80 | extern z80t z80op_ret_m(z80t); | ||
81 | extern z80t z80op_ld_sp_hl(z80t); | ||
82 | extern z80t z80op_jp_m_nn(z80t); | ||
83 | extern z80t z80op_ei(z80t); | ||
84 | extern z80t z80op_call_m_nn(z80t); | ||
85 | extern z80t z80op_special_fd(z80t); | ||
86 | extern z80t z80op_cp_n(z80t); | ||
87 | extern z80t z80op_rst_38(z80t); | ||
88 | |||
89 | /* IX */ | ||
90 | |||
91 | extern z80t z80op_pop_ix(z80t); | ||
92 | extern z80t z80op_push_ix(z80t); | ||
93 | |||
94 | extern z80t z80op_jp_ix(z80t); | ||
95 | extern z80t z80op_ld_sp_ix(z80t); | ||
96 | extern z80t z80op_ex_isp_ix(z80t); | ||
97 | |||
98 | /* IY */ | ||
99 | |||
100 | extern z80t z80op_pop_iy(z80t); | ||
101 | extern z80t z80op_push_iy(z80t); | ||
102 | |||
103 | extern z80t z80op_jp_iy(z80t); | ||
104 | extern z80t z80op_ld_sp_iy(z80t); | ||
105 | extern z80t z80op_ex_isp_iy(z80t); | ||
diff --git a/apps/plugins/zxbox/z80_op4x.c b/apps/plugins/zxbox/z80_op4x.c new file mode 100644 index 0000000000..2d966163b4 --- /dev/null +++ b/apps/plugins/zxbox/z80_op4x.c | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | /* IX */ | ||
22 | |||
23 | POP_RR(ix, IX, 2) | ||
24 | PUSH_RR(ix, IX, 2) | ||
25 | |||
26 | JP_RR(ix, IX) | ||
27 | LD_SP_RR(ix, IX) | ||
28 | EX_ISP_RR(ix, IX) | ||
29 | |||
30 | |||
31 | /* IY */ | ||
32 | |||
33 | POP_RR(iy, IY, 2) | ||
34 | PUSH_RR(iy, IY, 2) | ||
35 | |||
36 | JP_RR(iy, IY) | ||
37 | LD_SP_RR(iy, IY) | ||
38 | EX_ISP_RR(iy, IY) | ||
diff --git a/apps/plugins/zxbox/z80_op5.c b/apps/plugins/zxbox/z80_op5.c new file mode 100644 index 0000000000..3edea79e3d --- /dev/null +++ b/apps/plugins/zxbox/z80_op5.c | |||
@@ -0,0 +1,449 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op5.h" | ||
24 | #endif | ||
25 | |||
26 | OPDEF(ill_ed, 0x00) | ||
27 | { | ||
28 | #ifdef DEBUG_Z80 | ||
29 | printf("ILL_ED: %04X - %02X\n", (dbyte) (PC-1), DANM(mem)[(dbyte) (PC-1)]); | ||
30 | #endif | ||
31 | |||
32 | ENTIME(8); | ||
33 | } | ||
34 | |||
35 | #define IN_R_IC(rn, r, n) \ | ||
36 | OPDEF(in_ ## rn ## _ic, 0x40+8*n) \ | ||
37 | { \ | ||
38 | register byte res, flag; \ | ||
39 | IN(RB, RC, res); \ | ||
40 | r = res; \ | ||
41 | flag = (RF & ~(ABUTCF)) | \ | ||
42 | TAB(orf_tbl)[res]; \ | ||
43 | RF = flag; \ | ||
44 | ENTIME(12); \ | ||
45 | } | ||
46 | |||
47 | IN_R_IC(b, RB, 0) | ||
48 | IN_R_IC(c, RC, 1) | ||
49 | IN_R_IC(d, RD, 2) | ||
50 | IN_R_IC(e, RE, 3) | ||
51 | IN_R_IC(h, RH, 4) | ||
52 | IN_R_IC(l, RL, 5) | ||
53 | IN_R_IC(f, res, 6) | ||
54 | IN_R_IC(a, RA, 7) | ||
55 | |||
56 | |||
57 | #define OUT_IC_R(rn, r, n) \ | ||
58 | OPDEF(out_ic_ ## rn, 0x41+8*n) \ | ||
59 | { \ | ||
60 | OUT(RB, RC, r); \ | ||
61 | ENTIME(12); \ | ||
62 | } | ||
63 | |||
64 | OUT_IC_R(b, RB, 0) | ||
65 | OUT_IC_R(c, RC, 1) | ||
66 | OUT_IC_R(d, RD, 2) | ||
67 | OUT_IC_R(e, RE, 3) | ||
68 | OUT_IC_R(h, RH, 4) | ||
69 | OUT_IC_R(l, RL, 5) | ||
70 | OUT_IC_R(0, 0, 6) | ||
71 | OUT_IC_R(a, RA, 7) | ||
72 | |||
73 | |||
74 | |||
75 | #define SBC_HL_RR(rrn, rr, n) \ | ||
76 | OPDEF(sbc_hl_ ## rrn, 0x42+0x10*n) \ | ||
77 | { \ | ||
78 | register dbyte res; \ | ||
79 | register int idx, flag; \ | ||
80 | flag = RF; \ | ||
81 | res = HL - rr - (flag & CF); \ | ||
82 | idx = DIDXCALC(HL, rr, res); \ | ||
83 | HL = res; \ | ||
84 | flag = (RF & ~(ALLF)) | \ | ||
85 | (TAB(subf_tbl)[idx] & ALLF); \ | ||
86 | if(!res) flag |= ZF; \ | ||
87 | RF = flag; \ | ||
88 | ENTIME(15); \ | ||
89 | } | ||
90 | |||
91 | SBC_HL_RR(bc, BC, 0) | ||
92 | SBC_HL_RR(de, DE, 1) | ||
93 | SBC_HL_RR(hl, HL, 2) | ||
94 | SBC_HL_RR(sp, SP, 3) | ||
95 | |||
96 | #define ADC_HL_RR(rrn, rr, n) \ | ||
97 | OPDEF(adc_hl_ ## rrn, 0x4A+0x10*n) \ | ||
98 | { \ | ||
99 | register dbyte res; \ | ||
100 | register int idx, flag; \ | ||
101 | flag = RF; \ | ||
102 | res = HL + rr + (flag & CF); \ | ||
103 | idx = DIDXCALC(HL, rr, res); \ | ||
104 | HL = res; \ | ||
105 | flag = (RF & ~(ALLF)) | \ | ||
106 | (TAB(addf_tbl)[idx] & ALLF); \ | ||
107 | if(!res) flag |= ZF; \ | ||
108 | RF = flag; \ | ||
109 | ENTIME(15); \ | ||
110 | } | ||
111 | |||
112 | ADC_HL_RR(bc, BC, 0) | ||
113 | ADC_HL_RR(de, DE, 1) | ||
114 | ADC_HL_RR(hl, HL, 2) | ||
115 | ADC_HL_RR(sp, SP, 3) | ||
116 | |||
117 | |||
118 | |||
119 | #define LD_INN_RR(rrn, pf, rr, n) \ | ||
120 | OPDEF(ld_inn_ ## rrn ## pf, 0x43+0x10*n) \ | ||
121 | { \ | ||
122 | register dbyte dtmp; \ | ||
123 | FETCHD(dtmp); \ | ||
124 | DWRITE(dtmp, rr); \ | ||
125 | ENTIME(20); \ | ||
126 | } | ||
127 | |||
128 | |||
129 | LD_INN_RR(bc, , BC, 0) | ||
130 | LD_INN_RR(de, , DE, 1) | ||
131 | LD_INN_RR(hl, _ed, HL, 2) | ||
132 | LD_INN_RR(sp, , SP, 3) | ||
133 | |||
134 | |||
135 | #define LD_RR_INN(rrn, pf, rr, n) \ | ||
136 | OPDEF(ld_## rrn ## _inn ## pf, 0x4B+0x10*n) \ | ||
137 | { \ | ||
138 | register dbyte dtmp; \ | ||
139 | FETCHD(dtmp); \ | ||
140 | rr = DREAD(dtmp); \ | ||
141 | ENTIME(20); \ | ||
142 | } | ||
143 | |||
144 | |||
145 | LD_RR_INN(bc, , BC, 0) | ||
146 | LD_RR_INN(de, , DE, 1) | ||
147 | LD_RR_INN(hl, _ed, HL, 2) | ||
148 | LD_RR_INN(sp, , SP, 3) | ||
149 | |||
150 | OPDEF(neg, 0x44 0x4C 0x54 0x5C 0x64 0x6C 0x74 0x7C) | ||
151 | { | ||
152 | register byte res; | ||
153 | register int idx; | ||
154 | register int flag; | ||
155 | |||
156 | res = 0 - RA; | ||
157 | idx = IDXCALC(0, RA, res); | ||
158 | RA = res; | ||
159 | flag = (RF & ~(AALLF)) | TAB(subf_tbl)[idx]; | ||
160 | if(!res) flag |= ZF; | ||
161 | RF = flag; | ||
162 | ENTIME(8); | ||
163 | } | ||
164 | |||
165 | OPDEF(retn, 0x45 0x55 0x5D 0x65 0x6D 0x75 0x7D) | ||
166 | { | ||
167 | DANM(iff1) = DANM(iff2); | ||
168 | POP(PC); | ||
169 | ENTIME(14); | ||
170 | } | ||
171 | |||
172 | |||
173 | OPDEF(reti, 0x4D) | ||
174 | { | ||
175 | POP(PC); | ||
176 | ENTIME(14); | ||
177 | } | ||
178 | |||
179 | OPDEF(im_0, 0x46 0x4E 0x56 0x5E) | ||
180 | { | ||
181 | DANM(it_mode) = 0; | ||
182 | ENTIME(8); | ||
183 | } | ||
184 | |||
185 | |||
186 | OPDEF(im_1, 0x56 0x76) | ||
187 | { | ||
188 | DANM(it_mode) = 1; | ||
189 | ENTIME(8); | ||
190 | } | ||
191 | |||
192 | |||
193 | OPDEF(im_2, 0x5E 0x7E) | ||
194 | { | ||
195 | DANM(it_mode) = 2; | ||
196 | ENTIME(8); | ||
197 | } | ||
198 | |||
199 | OPDEF(ld_i_a, 0x47) | ||
200 | { | ||
201 | RI = RA; | ||
202 | ENTIME(9); | ||
203 | } | ||
204 | |||
205 | OPDEF(ld_r_a, 0x4F) | ||
206 | { | ||
207 | DANM(rl7) = RA & 0x80; | ||
208 | RR = RA; | ||
209 | ENTIME(9); | ||
210 | } | ||
211 | |||
212 | OPDEF(ld_a_i, 0x57) | ||
213 | { | ||
214 | register int flag; | ||
215 | |||
216 | RA = RI; | ||
217 | flag = (RF & ~(BUTCF)) | (RA & SF); | ||
218 | if(!RA) flag |= ZF; | ||
219 | if(DANM(iff2)) flag |= PVF; | ||
220 | RF = flag; | ||
221 | |||
222 | ENTIME(9); | ||
223 | } | ||
224 | |||
225 | OPDEF(ld_a_r, 0x5F) | ||
226 | { | ||
227 | register int flag; | ||
228 | |||
229 | RA = (RR & 0x7F) | DANM(rl7); | ||
230 | flag = (RF & ~(BUTCF)) | (RA & SF); | ||
231 | if(!RA) flag |= ZF; | ||
232 | if(DANM(iff2)) flag |= PVF; | ||
233 | RF = flag; | ||
234 | |||
235 | ENTIME(9); | ||
236 | } | ||
237 | |||
238 | OPDEF(rrd, 0x67) | ||
239 | { | ||
240 | register dbyte dtmp; | ||
241 | |||
242 | dtmp = *HLP | (RA << 8); | ||
243 | RA = (RA & 0xF0) | (dtmp & 0x0F); | ||
244 | SETFLAGS(ABUTCF, TAB(orf_tbl)[RA]); | ||
245 | dtmp >>= 4; | ||
246 | PUTMEM(HL, HLP, (byte) dtmp); | ||
247 | |||
248 | ENTIME(18); | ||
249 | } | ||
250 | |||
251 | OPDEF(rld, 0x6F) | ||
252 | { | ||
253 | register dbyte dtmp; | ||
254 | |||
255 | dtmp = (*HLP << 4) | (RA & 0x0F); | ||
256 | RA = (RA & 0xF0) | ((dtmp >> 8) & 0x0F); | ||
257 | SETFLAGS(ABUTCF, TAB(orf_tbl)[RA]); | ||
258 | PUTMEM(HL, HLP, (byte) dtmp); | ||
259 | |||
260 | ENTIME(18); | ||
261 | } | ||
262 | |||
263 | #define NOREPEAT() \ | ||
264 | if(BC) RF |= PVF; \ | ||
265 | ENTIME(16) | ||
266 | |||
267 | #define LDREPEAT() \ | ||
268 | if(BC) { \ | ||
269 | RF |= PVF; \ | ||
270 | PC-=2; \ | ||
271 | ENTIME(21); \ | ||
272 | } \ | ||
273 | else { \ | ||
274 | ENTIME(16); \ | ||
275 | } | ||
276 | |||
277 | |||
278 | #define LDID(dir) \ | ||
279 | register byte res; \ | ||
280 | res = *HLP; \ | ||
281 | PUTMEM(DE, DEP, res); \ | ||
282 | DE dir, HL dir; \ | ||
283 | RF = RF & ~(HF | PVF | NF); \ | ||
284 | BC-- | ||
285 | |||
286 | OPDEF(ldi, 0xA0) | ||
287 | { | ||
288 | LDID(++); | ||
289 | NOREPEAT(); | ||
290 | } | ||
291 | |||
292 | OPDEF(ldd, 0xA8) | ||
293 | { | ||
294 | LDID(--); | ||
295 | NOREPEAT(); | ||
296 | } | ||
297 | |||
298 | OPDEF(ldir, 0xB0) | ||
299 | { | ||
300 | LDID(++); | ||
301 | LDREPEAT(); | ||
302 | } | ||
303 | |||
304 | |||
305 | OPDEF(lddr, 0xB8) | ||
306 | { | ||
307 | LDID(--); | ||
308 | LDREPEAT(); | ||
309 | } | ||
310 | |||
311 | #define CPREPEAT() \ | ||
312 | if(res && BC) { \ | ||
313 | RF |= PVF; \ | ||
314 | PC-=2; \ | ||
315 | ENTIME(21); \ | ||
316 | } \ | ||
317 | else { \ | ||
318 | ENTIME(16); \ | ||
319 | } | ||
320 | |||
321 | #define CPID(dir) \ | ||
322 | register byte res; \ | ||
323 | register int idx; \ | ||
324 | res = RA - *HLP; \ | ||
325 | idx = IDXCALC(RA, *HLP, res); \ | ||
326 | RF = (RF & ~BUTCF) | \ | ||
327 | (TAB(subf_tbl)[idx] & \ | ||
328 | (SF | HF | NF | B3F | B5F)); \ | ||
329 | if(!res) RF |= ZF; \ | ||
330 | HL dir; \ | ||
331 | BC-- | ||
332 | |||
333 | |||
334 | OPDEF(cpi, 0xA1) | ||
335 | { | ||
336 | CPID(++); | ||
337 | NOREPEAT(); | ||
338 | } | ||
339 | |||
340 | |||
341 | OPDEF(cpd, 0xA9) | ||
342 | { | ||
343 | CPID(--); | ||
344 | NOREPEAT(); | ||
345 | } | ||
346 | |||
347 | |||
348 | OPDEF(cpir, 0xB1) | ||
349 | { | ||
350 | CPID(++); | ||
351 | CPREPEAT(); | ||
352 | } | ||
353 | |||
354 | OPDEF(cpdr, 0xB9) | ||
355 | { | ||
356 | CPID(--); | ||
357 | CPREPEAT(); | ||
358 | } | ||
359 | |||
360 | #define IOREPEAT() \ | ||
361 | if(RB) { \ | ||
362 | PC-=2; \ | ||
363 | ENTIME(21); \ | ||
364 | } \ | ||
365 | else { \ | ||
366 | ENTIME(16); \ | ||
367 | } | ||
368 | |||
369 | |||
370 | #define INID(dir) \ | ||
371 | register byte res; \ | ||
372 | register int idx; \ | ||
373 | res = RB - 1; \ | ||
374 | idx = IDXCALC(RB, 1, res); \ | ||
375 | RF = (RF & ~BUTCF) | \ | ||
376 | (TAB(subf_tbl)[idx] & \ | ||
377 | (SF | HF | PVF | NF | B3F | B5F)); \ | ||
378 | if(!res) RF |= ZF; \ | ||
379 | RB = res; \ | ||
380 | IN(RB, RC, res); \ | ||
381 | PUTMEM(HL, HLP, res); \ | ||
382 | HL dir | ||
383 | |||
384 | |||
385 | OPDEF(ini, 0xA2) | ||
386 | { | ||
387 | INID(++); | ||
388 | ENTIME(16); | ||
389 | } | ||
390 | |||
391 | OPDEF(ind, 0xAA) | ||
392 | { | ||
393 | INID(--); | ||
394 | ENTIME(16); | ||
395 | } | ||
396 | |||
397 | OPDEF(inir, 0xB2) | ||
398 | { | ||
399 | INID(++); | ||
400 | IOREPEAT(); | ||
401 | } | ||
402 | |||
403 | OPDEF(indr, 0xBA) | ||
404 | { | ||
405 | INID(--); | ||
406 | IOREPEAT(); | ||
407 | } | ||
408 | |||
409 | |||
410 | |||
411 | #define OUTID(dir) \ | ||
412 | register byte res; \ | ||
413 | register int idx; \ | ||
414 | res = RB - 1; \ | ||
415 | idx = IDXCALC(RB, 1, res); \ | ||
416 | RF = (RF & ~BUTCF) | \ | ||
417 | (TAB(subf_tbl)[idx] & \ | ||
418 | (SF | HF | PVF | NF )); \ | ||
419 | if(!res) RF |= ZF; \ | ||
420 | RB = res; \ | ||
421 | OUT(RB, RC, *HLP); \ | ||
422 | HL dir | ||
423 | |||
424 | |||
425 | |||
426 | OPDEF(outi, 0xA3) | ||
427 | { | ||
428 | OUTID(++); | ||
429 | ENTIME(16); | ||
430 | } | ||
431 | |||
432 | OPDEF(outd, 0xAB) | ||
433 | { | ||
434 | OUTID(--); | ||
435 | ENTIME(16); | ||
436 | } | ||
437 | |||
438 | |||
439 | OPDEF(otir, 0xB3) | ||
440 | { | ||
441 | OUTID(++); | ||
442 | IOREPEAT(); | ||
443 | } | ||
444 | |||
445 | OPDEF(otdr, 0xBB) | ||
446 | { | ||
447 | OUTID(--); | ||
448 | IOREPEAT(); | ||
449 | } | ||
diff --git a/apps/plugins/zxbox/z80_op5.h b/apps/plugins/zxbox/z80_op5.h new file mode 100644 index 0000000000..251954cf69 --- /dev/null +++ b/apps/plugins/zxbox/z80_op5.h | |||
@@ -0,0 +1,109 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | extern z80t z80op_ill_ed(z80t); | ||
22 | |||
23 | extern z80t z80op_in_b_ic(z80t); | ||
24 | extern z80t z80op_out_ic_b(z80t); | ||
25 | extern z80t z80op_sbc_hl_bc(z80t); | ||
26 | extern z80t z80op_ld_inn_bc(z80t); | ||
27 | extern z80t z80op_neg(z80t); | ||
28 | extern z80t z80op_retn(z80t); | ||
29 | extern z80t z80op_im_0(z80t); | ||
30 | extern z80t z80op_ld_i_a(z80t); | ||
31 | extern z80t z80op_in_c_ic(z80t); | ||
32 | extern z80t z80op_out_ic_c(z80t); | ||
33 | extern z80t z80op_adc_hl_bc(z80t); | ||
34 | extern z80t z80op_ld_bc_inn(z80t); | ||
35 | /* extern z80t z80op_neg(z80t); */ | ||
36 | extern z80t z80op_reti(z80t); | ||
37 | /*extern z80t z80op_im_0(z80t); */ | ||
38 | extern z80t z80op_ld_r_a(z80t); | ||
39 | |||
40 | extern z80t z80op_in_d_ic(z80t); | ||
41 | extern z80t z80op_out_ic_d(z80t); | ||
42 | extern z80t z80op_sbc_hl_de(z80t); | ||
43 | extern z80t z80op_ld_inn_de(z80t); | ||
44 | /* extern z80t z80op_neg(z80t); */ | ||
45 | /* extern z80t z80op_retn(z80t); */ | ||
46 | extern z80t z80op_im_1(z80t); | ||
47 | extern z80t z80op_ld_a_i(z80t); | ||
48 | extern z80t z80op_in_e_ic(z80t); | ||
49 | extern z80t z80op_out_ic_e(z80t); | ||
50 | extern z80t z80op_adc_hl_de(z80t); | ||
51 | extern z80t z80op_ld_de_inn(z80t); | ||
52 | /* extern z80t z80op_neg(z80t); */ | ||
53 | /* extern z80t z80op_retn(z80t); */ | ||
54 | extern z80t z80op_im_2(z80t); | ||
55 | extern z80t z80op_ld_a_r(z80t); | ||
56 | |||
57 | extern z80t z80op_in_h_ic(z80t); | ||
58 | extern z80t z80op_out_ic_h(z80t); | ||
59 | extern z80t z80op_sbc_hl_hl(z80t); | ||
60 | extern z80t z80op_ld_inn_hl_ed(z80t); | ||
61 | /* extern z80t z80op_neg(z80t); */ | ||
62 | /* extern z80t z80op_retn(z80t); */ | ||
63 | /* extern z80t z80op_im_0(z80t); */ | ||
64 | extern z80t z80op_rrd(z80t); | ||
65 | extern z80t z80op_in_l_ic(z80t); | ||
66 | extern z80t z80op_out_ic_l(z80t); | ||
67 | extern z80t z80op_adc_hl_hl(z80t); | ||
68 | extern z80t z80op_ld_hl_inn_ed(z80t); | ||
69 | /* extern z80t z80op_neg(z80t); */ | ||
70 | /* extern z80t z80op_retn(z80t); */ | ||
71 | /* extern z80t z80op_im_0(z80t); */ | ||
72 | extern z80t z80op_rld(z80t); | ||
73 | |||
74 | extern z80t z80op_in_f_ic(z80t); | ||
75 | extern z80t z80op_out_ic_0(z80t); | ||
76 | extern z80t z80op_sbc_hl_sp(z80t); | ||
77 | extern z80t z80op_ld_inn_sp(z80t); | ||
78 | /* extern z80t z80op_neg(z80t); */ | ||
79 | /* extern z80t z80op_retn(z80t); */ | ||
80 | /* extern z80t z80op_im_1(z80t); */ | ||
81 | /* extern z80t z80op_ill_ed(z80t); */ | ||
82 | extern z80t z80op_in_a_ic(z80t); | ||
83 | extern z80t z80op_out_ic_a(z80t); | ||
84 | extern z80t z80op_adc_hl_sp(z80t); | ||
85 | extern z80t z80op_ld_sp_inn(z80t); | ||
86 | /* extern z80t z80op_neg(z80t); */ | ||
87 | /* extern z80t z80op_retn(z80t); */ | ||
88 | /* extern z80t z80op_im_2(z80t); */ | ||
89 | /* extern z80t z80op_ill_ed(z80t); */ | ||
90 | |||
91 | extern z80t z80op_ldi(z80t); | ||
92 | extern z80t z80op_cpi(z80t); | ||
93 | extern z80t z80op_ini(z80t); | ||
94 | extern z80t z80op_outi(z80t); | ||
95 | |||
96 | extern z80t z80op_ldd(z80t); | ||
97 | extern z80t z80op_cpd(z80t); | ||
98 | extern z80t z80op_ind(z80t); | ||
99 | extern z80t z80op_outd(z80t); | ||
100 | |||
101 | extern z80t z80op_ldir(z80t); | ||
102 | extern z80t z80op_cpir(z80t); | ||
103 | extern z80t z80op_inir(z80t); | ||
104 | extern z80t z80op_otir(z80t); | ||
105 | |||
106 | extern z80t z80op_lddr(z80t); | ||
107 | extern z80t z80op_cpdr(z80t); | ||
108 | extern z80t z80op_indr(z80t); | ||
109 | extern z80t z80op_otdr(z80t); | ||
diff --git a/apps/plugins/zxbox/z80_op6.c b/apps/plugins/zxbox/z80_op6.c new file mode 100644 index 0000000000..7bab122263 --- /dev/null +++ b/apps/plugins/zxbox/z80_op6.c | |||
@@ -0,0 +1,437 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NO_OPDEF | ||
22 | #include "z80_def.h" | ||
23 | #include "z80_op6.h" | ||
24 | #endif | ||
25 | |||
26 | #define GHL DANM(cbaddr) | ||
27 | |||
28 | #define B7(r) (((r) & 0x80) >> 7) | ||
29 | #define B0(r) ((r) & 0x01) | ||
30 | |||
31 | #define SHIFTROTL(r, mod) \ | ||
32 | { \ | ||
33 | register int carry; \ | ||
34 | carry = B7(r); \ | ||
35 | r = mod; \ | ||
36 | RF = (RF & ~(AALLF)) | carry | \ | ||
37 | TAB(orf_tbl)[(byte) r]; \ | ||
38 | } | ||
39 | |||
40 | |||
41 | #define SHIFTROTR(r, mod) \ | ||
42 | { \ | ||
43 | register int carry; \ | ||
44 | carry = B0(r); \ | ||
45 | r = mod; \ | ||
46 | RF = (RF & ~(AALLF)) | carry | \ | ||
47 | TAB(orf_tbl)[(byte) r]; \ | ||
48 | } | ||
49 | |||
50 | |||
51 | #define RLC(r) SHIFTROTL(r, (r << 1) | carry) | ||
52 | #define RRC(r) SHIFTROTR(r, (r >> 1) | (carry << 7)) | ||
53 | #define RLN(r) SHIFTROTL(r, (r << 1) | (RF & CF)) | ||
54 | #define RRN(r) SHIFTROTR(r, (r >> 1) | ((RF & CF) << 7)) | ||
55 | #define SLA(r) SHIFTROTL(r, r << 1) | ||
56 | #define SRA(r) SHIFTROTR(r, (byte) ((sbyte) r >> 1)) | ||
57 | #define SLL(r) SHIFTROTL(r, (r << 1) | 0x01) | ||
58 | #define SRL(r) SHIFTROTR(r, r >> 1) | ||
59 | |||
60 | |||
61 | #define SHRR(shrn, func, an, rn, r, n) \ | ||
62 | OPDEF(shrn ## _ ## rn, 0x00+an*8+n) \ | ||
63 | { \ | ||
64 | func(r); \ | ||
65 | ENTIME(8); \ | ||
66 | } | ||
67 | |||
68 | #define SHRIHL(shrn, func, an) \ | ||
69 | OPDEF(shrn ## _ihl, 0x06+an*8) \ | ||
70 | { \ | ||
71 | register byte btmp; \ | ||
72 | btmp = READ(GHL); \ | ||
73 | func(btmp); \ | ||
74 | WRITE(GHL, btmp); \ | ||
75 | ENTIME(15); \ | ||
76 | } | ||
77 | |||
78 | #define RLC_R(rn, r, n) SHRR(rlc, RLC, 0, rn, r, n) | ||
79 | #define RRC_R(rn, r, n) SHRR(rrc, RRC, 1, rn, r, n) | ||
80 | #define RL_R(rn, r, n) SHRR(rl, RLN, 2, rn, r, n) | ||
81 | #define RR_R(rn, r, n) SHRR(rr, RRN, 3, rn, r, n) | ||
82 | #define SLA_R(rn, r, n) SHRR(sla, SLA, 4, rn, r, n) | ||
83 | #define SRA_R(rn, r, n) SHRR(sra, SRA, 5, rn, r, n) | ||
84 | #define SLL_R(rn, r, n) SHRR(sll, SLL, 6, rn, r, n) | ||
85 | #define SRL_R(rn, r, n) SHRR(srl, SRL, 7, rn, r, n) | ||
86 | |||
87 | RLC_R(b, RB, 0) | ||
88 | RLC_R(c, RC, 1) | ||
89 | RLC_R(d, RD, 2) | ||
90 | RLC_R(e, RE, 3) | ||
91 | RLC_R(h, RH, 4) | ||
92 | RLC_R(l, RL, 5) | ||
93 | RLC_R(a, RA, 7) | ||
94 | |||
95 | RRC_R(b, RB, 0) | ||
96 | RRC_R(c, RC, 1) | ||
97 | RRC_R(d, RD, 2) | ||
98 | RRC_R(e, RE, 3) | ||
99 | RRC_R(h, RH, 4) | ||
100 | RRC_R(l, RL, 5) | ||
101 | RRC_R(a, RA, 7) | ||
102 | |||
103 | RL_R(b, RB, 0) | ||
104 | RL_R(c, RC, 1) | ||
105 | RL_R(d, RD, 2) | ||
106 | RL_R(e, RE, 3) | ||
107 | RL_R(h, RH, 4) | ||
108 | RL_R(l, RL, 5) | ||
109 | RL_R(a, RA, 7) | ||
110 | |||
111 | RR_R(b, RB, 0) | ||
112 | RR_R(c, RC, 1) | ||
113 | RR_R(d, RD, 2) | ||
114 | RR_R(e, RE, 3) | ||
115 | RR_R(h, RH, 4) | ||
116 | RR_R(l, RL, 5) | ||
117 | RR_R(a, RA, 7) | ||
118 | |||
119 | SLA_R(b, RB, 0) | ||
120 | SLA_R(c, RC, 1) | ||
121 | SLA_R(d, RD, 2) | ||
122 | SLA_R(e, RE, 3) | ||
123 | SLA_R(h, RH, 4) | ||
124 | SLA_R(l, RL, 5) | ||
125 | SLA_R(a, RA, 7) | ||
126 | |||
127 | SRA_R(b, RB, 0) | ||
128 | SRA_R(c, RC, 1) | ||
129 | SRA_R(d, RD, 2) | ||
130 | SRA_R(e, RE, 3) | ||
131 | SRA_R(h, RH, 4) | ||
132 | SRA_R(l, RL, 5) | ||
133 | SRA_R(a, RA, 7) | ||
134 | |||
135 | SLL_R(b, RB, 0) | ||
136 | SLL_R(c, RC, 1) | ||
137 | SLL_R(d, RD, 2) | ||
138 | SLL_R(e, RE, 3) | ||
139 | SLL_R(h, RH, 4) | ||
140 | SLL_R(l, RL, 5) | ||
141 | SLL_R(a, RA, 7) | ||
142 | |||
143 | SRL_R(b, RB, 0) | ||
144 | SRL_R(c, RC, 1) | ||
145 | SRL_R(d, RD, 2) | ||
146 | SRL_R(e, RE, 3) | ||
147 | SRL_R(h, RH, 4) | ||
148 | SRL_R(l, RL, 5) | ||
149 | SRL_R(a, RA, 7) | ||
150 | |||
151 | SHRIHL(rlc, RLC, 0) | ||
152 | SHRIHL(rrc, RRC, 1) | ||
153 | SHRIHL(rl, RLN, 2) | ||
154 | SHRIHL(rr, RRN, 3) | ||
155 | SHRIHL(sla, SLA, 4) | ||
156 | SHRIHL(sra, SRA, 5) | ||
157 | SHRIHL(sll, SLL, 6) | ||
158 | SHRIHL(srl, SRL, 7) | ||
159 | |||
160 | #define BIT(r, n) \ | ||
161 | RF = (RF & ~(SF | ZF | NF)) | (r & SF) | (((~r >> n) & 0x01) << 6) | ||
162 | |||
163 | #define BIT_N_R(bn, rn, r, n) \ | ||
164 | OPDEF(bit_ ## bn ## _ ## rn, 0x40+bn*8+n) \ | ||
165 | { \ | ||
166 | BIT(r, bn); \ | ||
167 | ENTIME(8); \ | ||
168 | } | ||
169 | |||
170 | #define BIT_N_IHL(bn) \ | ||
171 | OPDEF(bit_ ## bn ## _ihl, 0x46+bn*8) \ | ||
172 | { \ | ||
173 | register byte btmp; \ | ||
174 | btmp = READ(GHL); \ | ||
175 | BIT(btmp, bn); \ | ||
176 | ENTIME(12); \ | ||
177 | } | ||
178 | |||
179 | BIT_N_R(0, b, RB, 0) | ||
180 | BIT_N_R(0, c, RC, 1) | ||
181 | BIT_N_R(0, d, RD, 2) | ||
182 | BIT_N_R(0, e, RE, 3) | ||
183 | BIT_N_R(0, h, RH, 4) | ||
184 | BIT_N_R(0, l, RL, 5) | ||
185 | BIT_N_R(0, a, RA, 7) | ||
186 | |||
187 | BIT_N_R(1, b, RB, 0) | ||
188 | BIT_N_R(1, c, RC, 1) | ||
189 | BIT_N_R(1, d, RD, 2) | ||
190 | BIT_N_R(1, e, RE, 3) | ||
191 | BIT_N_R(1, h, RH, 4) | ||
192 | BIT_N_R(1, l, RL, 5) | ||
193 | BIT_N_R(1, a, RA, 7) | ||
194 | |||
195 | BIT_N_R(2, b, RB, 0) | ||
196 | BIT_N_R(2, c, RC, 1) | ||
197 | BIT_N_R(2, d, RD, 2) | ||
198 | BIT_N_R(2, e, RE, 3) | ||
199 | BIT_N_R(2, h, RH, 4) | ||
200 | BIT_N_R(2, l, RL, 5) | ||
201 | BIT_N_R(2, a, RA, 7) | ||
202 | |||
203 | BIT_N_R(3, b, RB, 0) | ||
204 | BIT_N_R(3, c, RC, 1) | ||
205 | BIT_N_R(3, d, RD, 2) | ||
206 | BIT_N_R(3, e, RE, 3) | ||
207 | BIT_N_R(3, h, RH, 4) | ||
208 | BIT_N_R(3, l, RL, 5) | ||
209 | BIT_N_R(3, a, RA, 7) | ||
210 | |||
211 | BIT_N_R(4, b, RB, 0) | ||
212 | BIT_N_R(4, c, RC, 1) | ||
213 | BIT_N_R(4, d, RD, 2) | ||
214 | BIT_N_R(4, e, RE, 3) | ||
215 | BIT_N_R(4, h, RH, 4) | ||
216 | BIT_N_R(4, l, RL, 5) | ||
217 | BIT_N_R(4, a, RA, 7) | ||
218 | |||
219 | BIT_N_R(5, b, RB, 0) | ||
220 | BIT_N_R(5, c, RC, 1) | ||
221 | BIT_N_R(5, d, RD, 2) | ||
222 | BIT_N_R(5, e, RE, 3) | ||
223 | BIT_N_R(5, h, RH, 4) | ||
224 | BIT_N_R(5, l, RL, 5) | ||
225 | BIT_N_R(5, a, RA, 7) | ||
226 | |||
227 | BIT_N_R(6, b, RB, 0) | ||
228 | BIT_N_R(6, c, RC, 1) | ||
229 | BIT_N_R(6, d, RD, 2) | ||
230 | BIT_N_R(6, e, RE, 3) | ||
231 | BIT_N_R(6, h, RH, 4) | ||
232 | BIT_N_R(6, l, RL, 5) | ||
233 | BIT_N_R(6, a, RA, 7) | ||
234 | |||
235 | BIT_N_R(7, b, RB, 0) | ||
236 | BIT_N_R(7, c, RC, 1) | ||
237 | BIT_N_R(7, d, RD, 2) | ||
238 | BIT_N_R(7, e, RE, 3) | ||
239 | BIT_N_R(7, h, RH, 4) | ||
240 | BIT_N_R(7, l, RL, 5) | ||
241 | BIT_N_R(7, a, RA, 7) | ||
242 | |||
243 | BIT_N_IHL(0) | ||
244 | BIT_N_IHL(1) | ||
245 | BIT_N_IHL(2) | ||
246 | BIT_N_IHL(3) | ||
247 | BIT_N_IHL(4) | ||
248 | BIT_N_IHL(5) | ||
249 | BIT_N_IHL(6) | ||
250 | BIT_N_IHL(7) | ||
251 | |||
252 | #define RES(r, n) r &= ~(1 << n) | ||
253 | |||
254 | #define RES_N_R(bn, rn, r, n) \ | ||
255 | OPDEF(res_ ## bn ## _ ## rn, 0x80+bn*8+n) \ | ||
256 | { \ | ||
257 | RES(r, bn); \ | ||
258 | ENTIME(8); \ | ||
259 | } | ||
260 | |||
261 | #define RES_N_IHL(bn) \ | ||
262 | OPDEF(res_ ## bn ## _ihl, 0x86+bn*8) \ | ||
263 | { \ | ||
264 | register byte btmp; \ | ||
265 | btmp = READ(GHL); \ | ||
266 | RES(btmp, bn); \ | ||
267 | WRITE(GHL, btmp); \ | ||
268 | ENTIME(15); \ | ||
269 | } | ||
270 | |||
271 | |||
272 | RES_N_R(0, b, RB, 0) | ||
273 | RES_N_R(0, c, RC, 1) | ||
274 | RES_N_R(0, d, RD, 2) | ||
275 | RES_N_R(0, e, RE, 3) | ||
276 | RES_N_R(0, h, RH, 4) | ||
277 | RES_N_R(0, l, RL, 5) | ||
278 | RES_N_R(0, a, RA, 7) | ||
279 | |||
280 | RES_N_R(1, b, RB, 0) | ||
281 | RES_N_R(1, c, RC, 1) | ||
282 | RES_N_R(1, d, RD, 2) | ||
283 | RES_N_R(1, e, RE, 3) | ||
284 | RES_N_R(1, h, RH, 4) | ||
285 | RES_N_R(1, l, RL, 5) | ||
286 | RES_N_R(1, a, RA, 7) | ||
287 | |||
288 | RES_N_R(2, b, RB, 0) | ||
289 | RES_N_R(2, c, RC, 1) | ||
290 | RES_N_R(2, d, RD, 2) | ||
291 | RES_N_R(2, e, RE, 3) | ||
292 | RES_N_R(2, h, RH, 4) | ||
293 | RES_N_R(2, l, RL, 5) | ||
294 | RES_N_R(2, a, RA, 7) | ||
295 | |||
296 | RES_N_R(3, b, RB, 0) | ||
297 | RES_N_R(3, c, RC, 1) | ||
298 | RES_N_R(3, d, RD, 2) | ||
299 | RES_N_R(3, e, RE, 3) | ||
300 | RES_N_R(3, h, RH, 4) | ||
301 | RES_N_R(3, l, RL, 5) | ||
302 | RES_N_R(3, a, RA, 7) | ||
303 | |||
304 | RES_N_R(4, b, RB, 0) | ||
305 | RES_N_R(4, c, RC, 1) | ||
306 | RES_N_R(4, d, RD, 2) | ||
307 | RES_N_R(4, e, RE, 3) | ||
308 | RES_N_R(4, h, RH, 4) | ||
309 | RES_N_R(4, l, RL, 5) | ||
310 | RES_N_R(4, a, RA, 7) | ||
311 | |||
312 | RES_N_R(5, b, RB, 0) | ||
313 | RES_N_R(5, c, RC, 1) | ||
314 | RES_N_R(5, d, RD, 2) | ||
315 | RES_N_R(5, e, RE, 3) | ||
316 | RES_N_R(5, h, RH, 4) | ||
317 | RES_N_R(5, l, RL, 5) | ||
318 | RES_N_R(5, a, RA, 7) | ||
319 | |||
320 | RES_N_R(6, b, RB, 0) | ||
321 | RES_N_R(6, c, RC, 1) | ||
322 | RES_N_R(6, d, RD, 2) | ||
323 | RES_N_R(6, e, RE, 3) | ||
324 | RES_N_R(6, h, RH, 4) | ||
325 | RES_N_R(6, l, RL, 5) | ||
326 | RES_N_R(6, a, RA, 7) | ||
327 | |||
328 | RES_N_R(7, b, RB, 0) | ||
329 | RES_N_R(7, c, RC, 1) | ||
330 | RES_N_R(7, d, RD, 2) | ||
331 | RES_N_R(7, e, RE, 3) | ||
332 | RES_N_R(7, h, RH, 4) | ||
333 | RES_N_R(7, l, RL, 5) | ||
334 | RES_N_R(7, a, RA, 7) | ||
335 | |||
336 | RES_N_IHL(0) | ||
337 | RES_N_IHL(1) | ||
338 | RES_N_IHL(2) | ||
339 | RES_N_IHL(3) | ||
340 | RES_N_IHL(4) | ||
341 | RES_N_IHL(5) | ||
342 | RES_N_IHL(6) | ||
343 | RES_N_IHL(7) | ||
344 | |||
345 | |||
346 | #define SET(r, n) r |= (1 << n) | ||
347 | |||
348 | #define SET_N_R(bn, rn, r, n) \ | ||
349 | OPDEF(set_ ## bn ## _ ## rn, 0xC0+bn*8+n) \ | ||
350 | { \ | ||
351 | SET(r, bn); \ | ||
352 | ENTIME(8); \ | ||
353 | } | ||
354 | |||
355 | #define SET_N_IHL(bn) \ | ||
356 | OPDEF(set_ ## bn ## _ihl, 0x86+bn*8) \ | ||
357 | { \ | ||
358 | register byte btmp; \ | ||
359 | btmp = READ(GHL); \ | ||
360 | SET(btmp, bn); \ | ||
361 | WRITE(GHL, btmp); \ | ||
362 | ENTIME(15); \ | ||
363 | } | ||
364 | |||
365 | |||
366 | SET_N_R(0, b, RB, 0) | ||
367 | SET_N_R(0, c, RC, 1) | ||
368 | SET_N_R(0, d, RD, 2) | ||
369 | SET_N_R(0, e, RE, 3) | ||
370 | SET_N_R(0, h, RH, 4) | ||
371 | SET_N_R(0, l, RL, 5) | ||
372 | SET_N_R(0, a, RA, 7) | ||
373 | |||
374 | SET_N_R(1, b, RB, 0) | ||
375 | SET_N_R(1, c, RC, 1) | ||
376 | SET_N_R(1, d, RD, 2) | ||
377 | SET_N_R(1, e, RE, 3) | ||
378 | SET_N_R(1, h, RH, 4) | ||
379 | SET_N_R(1, l, RL, 5) | ||
380 | SET_N_R(1, a, RA, 7) | ||
381 | |||
382 | SET_N_R(2, b, RB, 0) | ||
383 | SET_N_R(2, c, RC, 1) | ||
384 | SET_N_R(2, d, RD, 2) | ||
385 | SET_N_R(2, e, RE, 3) | ||
386 | SET_N_R(2, h, RH, 4) | ||
387 | SET_N_R(2, l, RL, 5) | ||
388 | SET_N_R(2, a, RA, 7) | ||
389 | |||
390 | SET_N_R(3, b, RB, 0) | ||
391 | SET_N_R(3, c, RC, 1) | ||
392 | SET_N_R(3, d, RD, 2) | ||
393 | SET_N_R(3, e, RE, 3) | ||
394 | SET_N_R(3, h, RH, 4) | ||
395 | SET_N_R(3, l, RL, 5) | ||
396 | SET_N_R(3, a, RA, 7) | ||
397 | |||
398 | SET_N_R(4, b, RB, 0) | ||
399 | SET_N_R(4, c, RC, 1) | ||
400 | SET_N_R(4, d, RD, 2) | ||
401 | SET_N_R(4, e, RE, 3) | ||
402 | SET_N_R(4, h, RH, 4) | ||
403 | SET_N_R(4, l, RL, 5) | ||
404 | SET_N_R(4, a, RA, 7) | ||
405 | |||
406 | SET_N_R(5, b, RB, 0) | ||
407 | SET_N_R(5, c, RC, 1) | ||
408 | SET_N_R(5, d, RD, 2) | ||
409 | SET_N_R(5, e, RE, 3) | ||
410 | SET_N_R(5, h, RH, 4) | ||
411 | SET_N_R(5, l, RL, 5) | ||
412 | SET_N_R(5, a, RA, 7) | ||
413 | |||
414 | SET_N_R(6, b, RB, 0) | ||
415 | SET_N_R(6, c, RC, 1) | ||
416 | SET_N_R(6, d, RD, 2) | ||
417 | SET_N_R(6, e, RE, 3) | ||
418 | SET_N_R(6, h, RH, 4) | ||
419 | SET_N_R(6, l, RL, 5) | ||
420 | SET_N_R(6, a, RA, 7) | ||
421 | |||
422 | SET_N_R(7, b, RB, 0) | ||
423 | SET_N_R(7, c, RC, 1) | ||
424 | SET_N_R(7, d, RD, 2) | ||
425 | SET_N_R(7, e, RE, 3) | ||
426 | SET_N_R(7, h, RH, 4) | ||
427 | SET_N_R(7, l, RL, 5) | ||
428 | SET_N_R(7, a, RA, 7) | ||
429 | |||
430 | SET_N_IHL(0) | ||
431 | SET_N_IHL(1) | ||
432 | SET_N_IHL(2) | ||
433 | SET_N_IHL(3) | ||
434 | SET_N_IHL(4) | ||
435 | SET_N_IHL(5) | ||
436 | SET_N_IHL(6) | ||
437 | SET_N_IHL(7) | ||
diff --git a/apps/plugins/zxbox/z80_op6.h b/apps/plugins/zxbox/z80_op6.h new file mode 100644 index 0000000000..09eac4af43 --- /dev/null +++ b/apps/plugins/zxbox/z80_op6.h | |||
@@ -0,0 +1,291 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | extern z80t z80op_rlc_b(z80t); | ||
22 | extern z80t z80op_rlc_c(z80t); | ||
23 | extern z80t z80op_rlc_d(z80t); | ||
24 | extern z80t z80op_rlc_e(z80t); | ||
25 | extern z80t z80op_rlc_h(z80t); | ||
26 | extern z80t z80op_rlc_l(z80t); | ||
27 | extern z80t z80op_rlc_ihl(z80t); | ||
28 | extern z80t z80op_rlc_a(z80t); | ||
29 | extern z80t z80op_rrc_b(z80t); | ||
30 | extern z80t z80op_rrc_c(z80t); | ||
31 | extern z80t z80op_rrc_d(z80t); | ||
32 | extern z80t z80op_rrc_e(z80t); | ||
33 | extern z80t z80op_rrc_h(z80t); | ||
34 | extern z80t z80op_rrc_l(z80t); | ||
35 | extern z80t z80op_rrc_ihl(z80t); | ||
36 | extern z80t z80op_rrc_a(z80t); | ||
37 | |||
38 | extern z80t z80op_rl_b(z80t); | ||
39 | extern z80t z80op_rl_c(z80t); | ||
40 | extern z80t z80op_rl_d(z80t); | ||
41 | extern z80t z80op_rl_e(z80t); | ||
42 | extern z80t z80op_rl_h(z80t); | ||
43 | extern z80t z80op_rl_l(z80t); | ||
44 | extern z80t z80op_rl_ihl(z80t); | ||
45 | extern z80t z80op_rl_a(z80t); | ||
46 | extern z80t z80op_rr_b(z80t); | ||
47 | extern z80t z80op_rr_c(z80t); | ||
48 | extern z80t z80op_rr_d(z80t); | ||
49 | extern z80t z80op_rr_e(z80t); | ||
50 | extern z80t z80op_rr_h(z80t); | ||
51 | extern z80t z80op_rr_l(z80t); | ||
52 | extern z80t z80op_rr_ihl(z80t); | ||
53 | extern z80t z80op_rr_a(z80t); | ||
54 | |||
55 | extern z80t z80op_sla_b(z80t); | ||
56 | extern z80t z80op_sla_c(z80t); | ||
57 | extern z80t z80op_sla_d(z80t); | ||
58 | extern z80t z80op_sla_e(z80t); | ||
59 | extern z80t z80op_sla_h(z80t); | ||
60 | extern z80t z80op_sla_l(z80t); | ||
61 | extern z80t z80op_sla_ihl(z80t); | ||
62 | extern z80t z80op_sla_a(z80t); | ||
63 | extern z80t z80op_sra_b(z80t); | ||
64 | extern z80t z80op_sra_c(z80t); | ||
65 | extern z80t z80op_sra_d(z80t); | ||
66 | extern z80t z80op_sra_e(z80t); | ||
67 | extern z80t z80op_sra_h(z80t); | ||
68 | extern z80t z80op_sra_l(z80t); | ||
69 | extern z80t z80op_sra_ihl(z80t); | ||
70 | extern z80t z80op_sra_a(z80t); | ||
71 | |||
72 | extern z80t z80op_sll_b(z80t); | ||
73 | extern z80t z80op_sll_c(z80t); | ||
74 | extern z80t z80op_sll_d(z80t); | ||
75 | extern z80t z80op_sll_e(z80t); | ||
76 | extern z80t z80op_sll_h(z80t); | ||
77 | extern z80t z80op_sll_l(z80t); | ||
78 | extern z80t z80op_sll_ihl(z80t); | ||
79 | extern z80t z80op_sll_a(z80t); | ||
80 | extern z80t z80op_srl_b(z80t); | ||
81 | extern z80t z80op_srl_c(z80t); | ||
82 | extern z80t z80op_srl_d(z80t); | ||
83 | extern z80t z80op_srl_e(z80t); | ||
84 | extern z80t z80op_srl_h(z80t); | ||
85 | extern z80t z80op_srl_l(z80t); | ||
86 | extern z80t z80op_srl_ihl(z80t); | ||
87 | extern z80t z80op_srl_a(z80t); | ||
88 | |||
89 | extern z80t z80op_bit_0_b(z80t); | ||
90 | extern z80t z80op_bit_0_c(z80t); | ||
91 | extern z80t z80op_bit_0_d(z80t); | ||
92 | extern z80t z80op_bit_0_e(z80t); | ||
93 | extern z80t z80op_bit_0_h(z80t); | ||
94 | extern z80t z80op_bit_0_l(z80t); | ||
95 | extern z80t z80op_bit_0_ihl(z80t); | ||
96 | extern z80t z80op_bit_0_a(z80t); | ||
97 | extern z80t z80op_bit_1_b(z80t); | ||
98 | extern z80t z80op_bit_1_c(z80t); | ||
99 | extern z80t z80op_bit_1_d(z80t); | ||
100 | extern z80t z80op_bit_1_e(z80t); | ||
101 | extern z80t z80op_bit_1_h(z80t); | ||
102 | extern z80t z80op_bit_1_l(z80t); | ||
103 | extern z80t z80op_bit_1_ihl(z80t); | ||
104 | extern z80t z80op_bit_1_a(z80t); | ||
105 | |||
106 | extern z80t z80op_bit_2_b(z80t); | ||
107 | extern z80t z80op_bit_2_c(z80t); | ||
108 | extern z80t z80op_bit_2_d(z80t); | ||
109 | extern z80t z80op_bit_2_e(z80t); | ||
110 | extern z80t z80op_bit_2_h(z80t); | ||
111 | extern z80t z80op_bit_2_l(z80t); | ||
112 | extern z80t z80op_bit_2_ihl(z80t); | ||
113 | extern z80t z80op_bit_2_a(z80t); | ||
114 | extern z80t z80op_bit_3_b(z80t); | ||
115 | extern z80t z80op_bit_3_c(z80t); | ||
116 | extern z80t z80op_bit_3_d(z80t); | ||
117 | extern z80t z80op_bit_3_e(z80t); | ||
118 | extern z80t z80op_bit_3_h(z80t); | ||
119 | extern z80t z80op_bit_3_l(z80t); | ||
120 | extern z80t z80op_bit_3_ihl(z80t); | ||
121 | extern z80t z80op_bit_3_a(z80t); | ||
122 | |||
123 | extern z80t z80op_bit_4_b(z80t); | ||
124 | extern z80t z80op_bit_4_c(z80t); | ||
125 | extern z80t z80op_bit_4_d(z80t); | ||
126 | extern z80t z80op_bit_4_e(z80t); | ||
127 | extern z80t z80op_bit_4_h(z80t); | ||
128 | extern z80t z80op_bit_4_l(z80t); | ||
129 | extern z80t z80op_bit_4_ihl(z80t); | ||
130 | extern z80t z80op_bit_4_a(z80t); | ||
131 | extern z80t z80op_bit_5_b(z80t); | ||
132 | extern z80t z80op_bit_5_c(z80t); | ||
133 | extern z80t z80op_bit_5_d(z80t); | ||
134 | extern z80t z80op_bit_5_e(z80t); | ||
135 | extern z80t z80op_bit_5_h(z80t); | ||
136 | extern z80t z80op_bit_5_l(z80t); | ||
137 | extern z80t z80op_bit_5_ihl(z80t); | ||
138 | extern z80t z80op_bit_5_a(z80t); | ||
139 | |||
140 | extern z80t z80op_bit_6_b(z80t); | ||
141 | extern z80t z80op_bit_6_c(z80t); | ||
142 | extern z80t z80op_bit_6_d(z80t); | ||
143 | extern z80t z80op_bit_6_e(z80t); | ||
144 | extern z80t z80op_bit_6_h(z80t); | ||
145 | extern z80t z80op_bit_6_l(z80t); | ||
146 | extern z80t z80op_bit_6_ihl(z80t); | ||
147 | extern z80t z80op_bit_6_a(z80t); | ||
148 | extern z80t z80op_bit_7_b(z80t); | ||
149 | extern z80t z80op_bit_7_c(z80t); | ||
150 | extern z80t z80op_bit_7_d(z80t); | ||
151 | extern z80t z80op_bit_7_e(z80t); | ||
152 | extern z80t z80op_bit_7_h(z80t); | ||
153 | extern z80t z80op_bit_7_l(z80t); | ||
154 | extern z80t z80op_bit_7_ihl(z80t); | ||
155 | extern z80t z80op_bit_7_a(z80t); | ||
156 | |||
157 | extern z80t z80op_res_0_b(z80t); | ||
158 | extern z80t z80op_res_0_c(z80t); | ||
159 | extern z80t z80op_res_0_d(z80t); | ||
160 | extern z80t z80op_res_0_e(z80t); | ||
161 | extern z80t z80op_res_0_h(z80t); | ||
162 | extern z80t z80op_res_0_l(z80t); | ||
163 | extern z80t z80op_res_0_ihl(z80t); | ||
164 | extern z80t z80op_res_0_a(z80t); | ||
165 | extern z80t z80op_res_1_b(z80t); | ||
166 | extern z80t z80op_res_1_c(z80t); | ||
167 | extern z80t z80op_res_1_d(z80t); | ||
168 | extern z80t z80op_res_1_e(z80t); | ||
169 | extern z80t z80op_res_1_h(z80t); | ||
170 | extern z80t z80op_res_1_l(z80t); | ||
171 | extern z80t z80op_res_1_ihl(z80t); | ||
172 | extern z80t z80op_res_1_a(z80t); | ||
173 | |||
174 | extern z80t z80op_res_2_b(z80t); | ||
175 | extern z80t z80op_res_2_c(z80t); | ||
176 | extern z80t z80op_res_2_d(z80t); | ||
177 | extern z80t z80op_res_2_e(z80t); | ||
178 | extern z80t z80op_res_2_h(z80t); | ||
179 | extern z80t z80op_res_2_l(z80t); | ||
180 | extern z80t z80op_res_2_ihl(z80t); | ||
181 | extern z80t z80op_res_2_a(z80t); | ||
182 | extern z80t z80op_res_3_b(z80t); | ||
183 | extern z80t z80op_res_3_c(z80t); | ||
184 | extern z80t z80op_res_3_d(z80t); | ||
185 | extern z80t z80op_res_3_e(z80t); | ||
186 | extern z80t z80op_res_3_h(z80t); | ||
187 | extern z80t z80op_res_3_l(z80t); | ||
188 | extern z80t z80op_res_3_ihl(z80t); | ||
189 | extern z80t z80op_res_3_a(z80t); | ||
190 | |||
191 | extern z80t z80op_res_4_b(z80t); | ||
192 | extern z80t z80op_res_4_c(z80t); | ||
193 | extern z80t z80op_res_4_d(z80t); | ||
194 | extern z80t z80op_res_4_e(z80t); | ||
195 | extern z80t z80op_res_4_h(z80t); | ||
196 | extern z80t z80op_res_4_l(z80t); | ||
197 | extern z80t z80op_res_4_ihl(z80t); | ||
198 | extern z80t z80op_res_4_a(z80t); | ||
199 | extern z80t z80op_res_5_b(z80t); | ||
200 | extern z80t z80op_res_5_c(z80t); | ||
201 | extern z80t z80op_res_5_d(z80t); | ||
202 | extern z80t z80op_res_5_e(z80t); | ||
203 | extern z80t z80op_res_5_h(z80t); | ||
204 | extern z80t z80op_res_5_l(z80t); | ||
205 | extern z80t z80op_res_5_ihl(z80t); | ||
206 | extern z80t z80op_res_5_a(z80t); | ||
207 | |||
208 | extern z80t z80op_res_6_b(z80t); | ||
209 | extern z80t z80op_res_6_c(z80t); | ||
210 | extern z80t z80op_res_6_d(z80t); | ||
211 | extern z80t z80op_res_6_e(z80t); | ||
212 | extern z80t z80op_res_6_h(z80t); | ||
213 | extern z80t z80op_res_6_l(z80t); | ||
214 | extern z80t z80op_res_6_ihl(z80t); | ||
215 | extern z80t z80op_res_6_a(z80t); | ||
216 | extern z80t z80op_res_7_b(z80t); | ||
217 | extern z80t z80op_res_7_c(z80t); | ||
218 | extern z80t z80op_res_7_d(z80t); | ||
219 | extern z80t z80op_res_7_e(z80t); | ||
220 | extern z80t z80op_res_7_h(z80t); | ||
221 | extern z80t z80op_res_7_l(z80t); | ||
222 | extern z80t z80op_res_7_ihl(z80t); | ||
223 | extern z80t z80op_res_7_a(z80t); | ||
224 | |||
225 | extern z80t z80op_set_0_b(z80t); | ||
226 | extern z80t z80op_set_0_c(z80t); | ||
227 | extern z80t z80op_set_0_d(z80t); | ||
228 | extern z80t z80op_set_0_e(z80t); | ||
229 | extern z80t z80op_set_0_h(z80t); | ||
230 | extern z80t z80op_set_0_l(z80t); | ||
231 | extern z80t z80op_set_0_ihl(z80t); | ||
232 | extern z80t z80op_set_0_a(z80t); | ||
233 | extern z80t z80op_set_1_b(z80t); | ||
234 | extern z80t z80op_set_1_c(z80t); | ||
235 | extern z80t z80op_set_1_d(z80t); | ||
236 | extern z80t z80op_set_1_e(z80t); | ||
237 | extern z80t z80op_set_1_h(z80t); | ||
238 | extern z80t z80op_set_1_l(z80t); | ||
239 | extern z80t z80op_set_1_ihl(z80t); | ||
240 | extern z80t z80op_set_1_a(z80t); | ||
241 | |||
242 | extern z80t z80op_set_2_b(z80t); | ||
243 | extern z80t z80op_set_2_c(z80t); | ||
244 | extern z80t z80op_set_2_d(z80t); | ||
245 | extern z80t z80op_set_2_e(z80t); | ||
246 | extern z80t z80op_set_2_h(z80t); | ||
247 | extern z80t z80op_set_2_l(z80t); | ||
248 | extern z80t z80op_set_2_ihl(z80t); | ||
249 | extern z80t z80op_set_2_a(z80t); | ||
250 | extern z80t z80op_set_3_b(z80t); | ||
251 | extern z80t z80op_set_3_c(z80t); | ||
252 | extern z80t z80op_set_3_d(z80t); | ||
253 | extern z80t z80op_set_3_e(z80t); | ||
254 | extern z80t z80op_set_3_h(z80t); | ||
255 | extern z80t z80op_set_3_l(z80t); | ||
256 | extern z80t z80op_set_3_ihl(z80t); | ||
257 | extern z80t z80op_set_3_a(z80t); | ||
258 | |||
259 | extern z80t z80op_set_4_b(z80t); | ||
260 | extern z80t z80op_set_4_c(z80t); | ||
261 | extern z80t z80op_set_4_d(z80t); | ||
262 | extern z80t z80op_set_4_e(z80t); | ||
263 | extern z80t z80op_set_4_h(z80t); | ||
264 | extern z80t z80op_set_4_l(z80t); | ||
265 | extern z80t z80op_set_4_ihl(z80t); | ||
266 | extern z80t z80op_set_4_a(z80t); | ||
267 | extern z80t z80op_set_5_b(z80t); | ||
268 | extern z80t z80op_set_5_c(z80t); | ||
269 | extern z80t z80op_set_5_d(z80t); | ||
270 | extern z80t z80op_set_5_e(z80t); | ||
271 | extern z80t z80op_set_5_h(z80t); | ||
272 | extern z80t z80op_set_5_l(z80t); | ||
273 | extern z80t z80op_set_5_ihl(z80t); | ||
274 | extern z80t z80op_set_5_a(z80t); | ||
275 | |||
276 | extern z80t z80op_set_6_b(z80t); | ||
277 | extern z80t z80op_set_6_c(z80t); | ||
278 | extern z80t z80op_set_6_d(z80t); | ||
279 | extern z80t z80op_set_6_e(z80t); | ||
280 | extern z80t z80op_set_6_h(z80t); | ||
281 | extern z80t z80op_set_6_l(z80t); | ||
282 | extern z80t z80op_set_6_ihl(z80t); | ||
283 | extern z80t z80op_set_6_a(z80t); | ||
284 | extern z80t z80op_set_7_b(z80t); | ||
285 | extern z80t z80op_set_7_c(z80t); | ||
286 | extern z80t z80op_set_7_d(z80t); | ||
287 | extern z80t z80op_set_7_e(z80t); | ||
288 | extern z80t z80op_set_7_h(z80t); | ||
289 | extern z80t z80op_set_7_l(z80t); | ||
290 | extern z80t z80op_set_7_ihl(z80t); | ||
291 | extern z80t z80op_set_7_a(z80t); | ||
diff --git a/apps/plugins/zxbox/z80_step.c b/apps/plugins/zxbox/z80_step.c new file mode 100644 index 0000000000..803079c970 --- /dev/null +++ b/apps/plugins/zxbox/z80_step.c | |||
@@ -0,0 +1,176 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80_def.h" | ||
22 | |||
23 | byte z80c_incf_tbl[256]; | ||
24 | byte z80c_decf_tbl[256]; | ||
25 | byte z80c_addf_tbl[256]; | ||
26 | byte z80c_subf_tbl[256]; | ||
27 | byte z80c_orf_tbl[256]; | ||
28 | |||
29 | |||
30 | void PRNM(pushpc)(void) | ||
31 | { | ||
32 | #ifdef PROCP | ||
33 | Z80 *z80p; | ||
34 | z80p = &PRNM(proc); | ||
35 | #endif | ||
36 | |||
37 | SP--; | ||
38 | PUTMEM(SP, SPP, PCH); | ||
39 | SP--; | ||
40 | PUTMEM(SP, SPP, PCL); | ||
41 | } | ||
42 | |||
43 | static int parity(int b) | ||
44 | { | ||
45 | int i; | ||
46 | int par; | ||
47 | |||
48 | par = 0; | ||
49 | for(i = 8; i; i--) par ^= (b & 1), b >>= 1; | ||
50 | return par; | ||
51 | } | ||
52 | |||
53 | void PRNM(local_init)(void) | ||
54 | { | ||
55 | int i; | ||
56 | |||
57 | #ifdef PROCP | ||
58 | Z80 *z80p; | ||
59 | z80p = &PRNM(proc); | ||
60 | #endif | ||
61 | |||
62 | for(i = 0; i < 0x100; i++) { | ||
63 | z80c_incf_tbl[i] = z80c_decf_tbl[i] = z80c_orf_tbl[i] = 0; | ||
64 | |||
65 | z80c_orf_tbl[i] |= i & (SF | B3F | B5F); | ||
66 | z80c_incf_tbl[i] |= i & (SF | B3F | B5F); | ||
67 | z80c_decf_tbl[i] |= i & (SF | B3F | B5F); | ||
68 | |||
69 | if(!parity(i)) z80c_orf_tbl[i] |= PVF; | ||
70 | } | ||
71 | |||
72 | z80c_incf_tbl[0] |= ZF; | ||
73 | z80c_decf_tbl[0] |= ZF; | ||
74 | z80c_orf_tbl[0] |= ZF; | ||
75 | |||
76 | z80c_incf_tbl[0x80] |= PVF; | ||
77 | z80c_decf_tbl[0x7F] |= PVF; | ||
78 | |||
79 | for(i = 0; i < 0x100; i++) { | ||
80 | int cr, c1, c2; | ||
81 | int hr, h1, h2; | ||
82 | int b5r; | ||
83 | |||
84 | cr = i & 0x80; | ||
85 | c1 = i & 0x40; | ||
86 | b5r = i & 0x20; | ||
87 | c2 = i & 0x10; | ||
88 | |||
89 | hr = i & 0x08; | ||
90 | h1 = i & 0x04; | ||
91 | h2 = i & 0x01; | ||
92 | |||
93 | z80c_addf_tbl[i] = 0; | ||
94 | z80c_subf_tbl[i] = 0; | ||
95 | if(cr) { | ||
96 | z80c_addf_tbl[i] |= SF; | ||
97 | z80c_subf_tbl[i] |= SF; | ||
98 | } | ||
99 | if(b5r) { | ||
100 | z80c_addf_tbl[i] |= B5F; | ||
101 | z80c_subf_tbl[i] |= B5F; | ||
102 | } | ||
103 | if(hr) { | ||
104 | z80c_addf_tbl[i] |= B3F; | ||
105 | z80c_subf_tbl[i] |= B3F; | ||
106 | } | ||
107 | |||
108 | if((c1 && c2) || (!cr && (c1 || c2))) z80c_addf_tbl[i] |= CF; | ||
109 | if((h1 && h2) || (!hr && (h1 || h2))) z80c_addf_tbl[i] |= HF; | ||
110 | |||
111 | if((!c1 && !c2 && cr) || (c1 && c2 && !cr)) z80c_addf_tbl[i] |= PVF; | ||
112 | |||
113 | |||
114 | if((c2 && cr) || (!c1 && (c2 || cr))) z80c_subf_tbl[i] |= CF; | ||
115 | if((h2 && hr) || (!h1 && (h2 || hr))) z80c_subf_tbl[i] |= HF; | ||
116 | |||
117 | if((!c2 && !cr && c1) || (c2 && cr && !c1)) z80c_subf_tbl[i] |= PVF; | ||
118 | |||
119 | |||
120 | z80c_subf_tbl[i] |= NF; | ||
121 | } | ||
122 | |||
123 | |||
124 | #ifdef PROCP | ||
125 | TAB(incf_tbl) = z80c_incf_tbl; | ||
126 | TAB(decf_tbl) = z80c_decf_tbl; | ||
127 | TAB(addf_tbl) = z80c_addf_tbl; | ||
128 | TAB(subf_tbl) = z80c_subf_tbl; | ||
129 | TAB(orf_tbl) = z80c_orf_tbl; | ||
130 | |||
131 | PORT(inports) = PRNM(inports); | ||
132 | PORT(outports) = PRNM(outports); | ||
133 | #ifdef SPECT_MEM | ||
134 | SPECP(fe_inport_high) = SPNM(fe_inport_high); | ||
135 | #endif | ||
136 | #endif | ||
137 | } | ||
138 | |||
139 | |||
140 | int PRNM(step)(int tc) | ||
141 | { | ||
142 | #ifdef PROCP | ||
143 | Z80 *z80p; | ||
144 | z80p = &PRNM(proc); | ||
145 | #endif | ||
146 | |||
147 | DANM(tc) = tc; | ||
148 | DANM(rl7) = RR & 0x80; | ||
149 | |||
150 | if(DANM(haltstate)) { | ||
151 | register int nn; | ||
152 | nn = (DANM(tc) - 1) / 4 + 1; | ||
153 | |||
154 | DANM(tc) -= 4 * nn; | ||
155 | RR += nn; | ||
156 | } | ||
157 | else do { | ||
158 | register int nextop; | ||
159 | |||
160 | #ifdef DEBUG_Z80 | ||
161 | debug_z80(); | ||
162 | #endif | ||
163 | nextop = *PCP; | ||
164 | PC++; | ||
165 | |||
166 | #ifdef PROCP | ||
167 | z80p = (*z80c_op_tab[nextop])(z80p); | ||
168 | #else | ||
169 | (*z80c_op_tab[nextop])(); | ||
170 | #endif | ||
171 | RR++; | ||
172 | } while(DANM(tc) > 0); | ||
173 | |||
174 | RR = (RR & 0x7F) | DANM(rl7); | ||
175 | return DANM(tc); | ||
176 | } | ||
diff --git a/apps/plugins/zxbox/z80_type.h b/apps/plugins/zxbox/z80_type.h new file mode 100644 index 0000000000..4fdddbe827 --- /dev/null +++ b/apps/plugins/zxbox/z80_type.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef Z80_TYPE_H | ||
22 | #define Z80_TYPE_H | ||
23 | |||
24 | typedef unsigned char byte; | ||
25 | typedef signed char sbyte; | ||
26 | typedef unsigned short dbyte; | ||
27 | typedef unsigned int qbyte; | ||
28 | |||
29 | typedef signed char gchar; | ||
30 | typedef signed short gshort; | ||
31 | typedef signed int gint; | ||
32 | |||
33 | #endif /* Z80_TYPE_H */ | ||
diff --git a/apps/plugins/zxbox/z80optab.c b/apps/plugins/zxbox/z80optab.c new file mode 100644 index 0000000000..da973277a2 --- /dev/null +++ b/apps/plugins/zxbox/z80optab.c | |||
@@ -0,0 +1,1470 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80_def.h" | ||
22 | #include "z80optab.h" | ||
23 | |||
24 | #ifdef PROCP | ||
25 | #define NEXTTAB(tab) \ | ||
26 | { \ | ||
27 | register byte nextop; \ | ||
28 | nextop = *PCP; \ | ||
29 | PC++; \ | ||
30 | return (*z80c_op_tab_ ## tab [nextop])(z80p); \ | ||
31 | } | ||
32 | #else | ||
33 | #define NEXTTAB(tab) \ | ||
34 | { \ | ||
35 | register byte nextop; \ | ||
36 | nextop = *PCP; \ | ||
37 | PC++; \ | ||
38 | (*z80c_op_tab_ ## tab [nextop])(); \ | ||
39 | } | ||
40 | #endif | ||
41 | |||
42 | |||
43 | OPDEF(special_cb, 0xCB) | ||
44 | { | ||
45 | RR++; | ||
46 | DANM(cbaddr) = HL; | ||
47 | NEXTTAB(cb); | ||
48 | } | ||
49 | |||
50 | OPDEF(special_dd, 0xDD) | ||
51 | { | ||
52 | RR++; | ||
53 | DANM(tc) -= 4; | ||
54 | NEXTTAB(dd); | ||
55 | } | ||
56 | |||
57 | |||
58 | OPDEF(special_ed, 0xED) | ||
59 | { | ||
60 | RR++; | ||
61 | NEXTTAB(ed); | ||
62 | } | ||
63 | |||
64 | OPDEF(special_fd, 0xFD) | ||
65 | { | ||
66 | RR++; | ||
67 | DANM(tc) -= 4; | ||
68 | NEXTTAB(fd); | ||
69 | } | ||
70 | |||
71 | OPDEF(special_xx, 0xDD 0xFD) | ||
72 | { | ||
73 | RR--; | ||
74 | PC--; | ||
75 | ENDOP(); | ||
76 | } | ||
77 | |||
78 | OPDEF(special_dd_cb, 0xCB) | ||
79 | { | ||
80 | DANM(tc) -= 4; | ||
81 | IXDGET(IX, DANM(cbaddr)); | ||
82 | #ifdef DEBUG_Z80 | ||
83 | if((*PCP & 0x07) != 6) | ||
84 | printf("DD_CB unimplemented!\n"); | ||
85 | #endif | ||
86 | NEXTTAB(cb); | ||
87 | } | ||
88 | |||
89 | OPDEF(special_fd_cb, 0xCB) | ||
90 | { | ||
91 | DANM(tc) -= 4; | ||
92 | IXDGET(IY, DANM(cbaddr)); | ||
93 | #ifdef DEBUG_Z80 | ||
94 | if((*PCP & 0x07) != 6) | ||
95 | printf("FD_CB unimplemented!\n"); | ||
96 | #endif | ||
97 | NEXTTAB(cb); | ||
98 | } | ||
99 | |||
100 | op_f z80c_op_tab[] = { | ||
101 | z80op_nop, | ||
102 | z80op_ld_bc_nn, | ||
103 | z80op_ld_ibc_a, | ||
104 | z80op_inc_bc, | ||
105 | z80op_inc_b, | ||
106 | z80op_dec_b, | ||
107 | z80op_ld_b_n, | ||
108 | z80op_rlca, | ||
109 | z80op_ex_af_afb, | ||
110 | z80op_add_hl_bc, | ||
111 | z80op_ld_a_ibc, | ||
112 | z80op_dec_bc, | ||
113 | z80op_inc_c, | ||
114 | z80op_dec_c, | ||
115 | z80op_ld_c_n, | ||
116 | z80op_rrca, | ||
117 | |||
118 | z80op_djnz_e, | ||
119 | z80op_ld_de_nn, | ||
120 | z80op_ld_ide_a, | ||
121 | z80op_inc_de, | ||
122 | z80op_inc_d, | ||
123 | z80op_dec_d, | ||
124 | z80op_ld_d_n, | ||
125 | z80op_rla, | ||
126 | z80op_jr_e, | ||
127 | z80op_add_hl_de, | ||
128 | z80op_ld_a_ide, | ||
129 | z80op_dec_de, | ||
130 | z80op_inc_e, | ||
131 | z80op_dec_e, | ||
132 | z80op_ld_e_n, | ||
133 | z80op_rra, | ||
134 | |||
135 | z80op_jr_nz_e, | ||
136 | z80op_ld_hl_nn, | ||
137 | z80op_ld_inn_hl, | ||
138 | z80op_inc_hl, | ||
139 | z80op_inc_h, | ||
140 | z80op_dec_h, | ||
141 | z80op_ld_h_n, | ||
142 | z80op_daa, | ||
143 | z80op_jr_z_e, | ||
144 | z80op_add_hl_hl, | ||
145 | z80op_ld_hl_inn, | ||
146 | z80op_dec_hl, | ||
147 | z80op_inc_l, | ||
148 | z80op_dec_l, | ||
149 | z80op_ld_l_n, | ||
150 | z80op_cpl, | ||
151 | |||
152 | z80op_jr_nc_e, | ||
153 | z80op_ld_sp_nn, | ||
154 | z80op_ld_inn_a, | ||
155 | z80op_inc_sp, | ||
156 | z80op_inc_ihl, | ||
157 | z80op_dec_ihl, | ||
158 | z80op_ld_ihl_n, | ||
159 | z80op_scf, | ||
160 | z80op_jr_c_e, | ||
161 | z80op_add_hl_sp, | ||
162 | z80op_ld_a_inn, | ||
163 | z80op_dec_sp, | ||
164 | z80op_inc_a, | ||
165 | z80op_dec_a, | ||
166 | z80op_ld_a_n, | ||
167 | z80op_ccf, | ||
168 | |||
169 | z80op_nop, | ||
170 | z80op_ld_b_c, | ||
171 | z80op_ld_b_d, | ||
172 | z80op_ld_b_e, | ||
173 | z80op_ld_b_h, | ||
174 | z80op_ld_b_l, | ||
175 | z80op_ld_b_ihl, | ||
176 | z80op_ld_b_a, | ||
177 | z80op_ld_c_b, | ||
178 | z80op_nop, | ||
179 | z80op_ld_c_d, | ||
180 | z80op_ld_c_e, | ||
181 | z80op_ld_c_h, | ||
182 | z80op_ld_c_l, | ||
183 | z80op_ld_c_ihl, | ||
184 | z80op_ld_c_a, | ||
185 | |||
186 | z80op_ld_d_b, | ||
187 | z80op_ld_d_c, | ||
188 | z80op_nop, | ||
189 | z80op_ld_d_e, | ||
190 | z80op_ld_d_h, | ||
191 | z80op_ld_d_l, | ||
192 | z80op_ld_d_ihl, | ||
193 | z80op_ld_d_a, | ||
194 | z80op_ld_e_b, | ||
195 | z80op_ld_e_c, | ||
196 | z80op_ld_e_d, | ||
197 | z80op_nop, | ||
198 | z80op_ld_e_h, | ||
199 | z80op_ld_e_l, | ||
200 | z80op_ld_e_ihl, | ||
201 | z80op_ld_e_a, | ||
202 | |||
203 | z80op_ld_h_b, | ||
204 | z80op_ld_h_c, | ||
205 | z80op_ld_h_d, | ||
206 | z80op_ld_h_e, | ||
207 | z80op_nop, | ||
208 | z80op_ld_h_l, | ||
209 | z80op_ld_h_ihl, | ||
210 | z80op_ld_h_a, | ||
211 | z80op_ld_l_b, | ||
212 | z80op_ld_l_c, | ||
213 | z80op_ld_l_d, | ||
214 | z80op_ld_l_e, | ||
215 | z80op_ld_l_h, | ||
216 | z80op_nop, | ||
217 | z80op_ld_l_ihl, | ||
218 | z80op_ld_l_a, | ||
219 | |||
220 | z80op_ld_ihl_b, | ||
221 | z80op_ld_ihl_c, | ||
222 | z80op_ld_ihl_d, | ||
223 | z80op_ld_ihl_e, | ||
224 | z80op_ld_ihl_h, | ||
225 | z80op_ld_ihl_l, | ||
226 | z80op_halt, | ||
227 | z80op_ld_ihl_a, | ||
228 | z80op_ld_a_b, | ||
229 | z80op_ld_a_c, | ||
230 | z80op_ld_a_d, | ||
231 | z80op_ld_a_e, | ||
232 | z80op_ld_a_h, | ||
233 | z80op_ld_a_l, | ||
234 | z80op_ld_a_ihl, | ||
235 | z80op_nop, | ||
236 | |||
237 | z80op_add_a_b, | ||
238 | z80op_add_a_c, | ||
239 | z80op_add_a_d, | ||
240 | z80op_add_a_e, | ||
241 | z80op_add_a_h, | ||
242 | z80op_add_a_l, | ||
243 | z80op_add_a_ihl, | ||
244 | z80op_add_a_a, | ||
245 | z80op_adc_a_b, | ||
246 | z80op_adc_a_c, | ||
247 | z80op_adc_a_d, | ||
248 | z80op_adc_a_e, | ||
249 | z80op_adc_a_h, | ||
250 | z80op_adc_a_l, | ||
251 | z80op_adc_a_ihl, | ||
252 | z80op_adc_a_a, | ||
253 | |||
254 | z80op_sub_b, | ||
255 | z80op_sub_c, | ||
256 | z80op_sub_d, | ||
257 | z80op_sub_e, | ||
258 | z80op_sub_h, | ||
259 | z80op_sub_l, | ||
260 | z80op_sub_ihl, | ||
261 | z80op_sub_a, | ||
262 | z80op_sbc_a_b, | ||
263 | z80op_sbc_a_c, | ||
264 | z80op_sbc_a_d, | ||
265 | z80op_sbc_a_e, | ||
266 | z80op_sbc_a_h, | ||
267 | z80op_sbc_a_l, | ||
268 | z80op_sbc_a_ihl, | ||
269 | z80op_sbc_a_a, | ||
270 | |||
271 | z80op_and_b, | ||
272 | z80op_and_c, | ||
273 | z80op_and_d, | ||
274 | z80op_and_e, | ||
275 | z80op_and_h, | ||
276 | z80op_and_l, | ||
277 | z80op_and_ihl, | ||
278 | z80op_and_a, | ||
279 | z80op_xor_b, | ||
280 | z80op_xor_c, | ||
281 | z80op_xor_d, | ||
282 | z80op_xor_e, | ||
283 | z80op_xor_h, | ||
284 | z80op_xor_l, | ||
285 | z80op_xor_ihl, | ||
286 | z80op_xor_a, | ||
287 | |||
288 | z80op_or_b, | ||
289 | z80op_or_c, | ||
290 | z80op_or_d, | ||
291 | z80op_or_e, | ||
292 | z80op_or_h, | ||
293 | z80op_or_l, | ||
294 | z80op_or_ihl, | ||
295 | z80op_or_a, | ||
296 | z80op_cp_b, | ||
297 | z80op_cp_c, | ||
298 | z80op_cp_d, | ||
299 | z80op_cp_e, | ||
300 | z80op_cp_h, | ||
301 | z80op_cp_l, | ||
302 | z80op_cp_ihl, | ||
303 | z80op_cp_a, | ||
304 | |||
305 | z80op_ret_nz, | ||
306 | z80op_pop_bc, | ||
307 | z80op_jp_nz_nn, | ||
308 | z80op_jp_nn, | ||
309 | z80op_call_nz_nn, | ||
310 | z80op_push_bc, | ||
311 | z80op_add_a_n, | ||
312 | z80op_rst_00, | ||
313 | z80op_ret_z, | ||
314 | z80op_ret, | ||
315 | z80op_jp_z_nn, | ||
316 | z80op_special_cb, | ||
317 | z80op_call_z_nn, | ||
318 | z80op_call_nn, | ||
319 | z80op_adc_a_n, | ||
320 | z80op_rst_08, | ||
321 | |||
322 | z80op_ret_nc, | ||
323 | z80op_pop_de, | ||
324 | z80op_jp_nc_nn, | ||
325 | z80op_out_in_a, | ||
326 | z80op_call_nc_nn, | ||
327 | z80op_push_de, | ||
328 | z80op_sub_n, | ||
329 | z80op_rst_10, | ||
330 | z80op_ret_c, | ||
331 | z80op_exx, | ||
332 | z80op_jp_c_nn, | ||
333 | z80op_in_a_in, | ||
334 | z80op_call_c_nn, | ||
335 | z80op_special_dd, | ||
336 | z80op_sbc_a_n, | ||
337 | z80op_rst_18, | ||
338 | |||
339 | z80op_ret_po, | ||
340 | z80op_pop_hl, | ||
341 | z80op_jp_po_nn, | ||
342 | z80op_ex_isp_hl, | ||
343 | z80op_call_po_nn, | ||
344 | z80op_push_hl, | ||
345 | z80op_and_n, | ||
346 | z80op_rst_20, | ||
347 | z80op_ret_pe, | ||
348 | z80op_jp_hl, | ||
349 | z80op_jp_pe_nn, | ||
350 | z80op_ex_de_hl, | ||
351 | z80op_call_pe_nn, | ||
352 | z80op_special_ed, | ||
353 | z80op_xor_n, | ||
354 | z80op_rst_28, | ||
355 | |||
356 | z80op_ret_p, | ||
357 | z80op_pop_af, | ||
358 | z80op_jp_p_nn, | ||
359 | z80op_di, | ||
360 | z80op_call_p_nn, | ||
361 | z80op_push_af, | ||
362 | z80op_or_n, | ||
363 | z80op_rst_30, | ||
364 | z80op_ret_m, | ||
365 | z80op_ld_sp_hl, | ||
366 | z80op_jp_m_nn, | ||
367 | z80op_ei, | ||
368 | z80op_call_m_nn, | ||
369 | z80op_special_fd, | ||
370 | z80op_cp_n, | ||
371 | z80op_rst_38 | ||
372 | }; | ||
373 | |||
374 | |||
375 | op_f z80c_op_tab_ed[] = { | ||
376 | z80op_ill_ed, | ||
377 | z80op_ill_ed, | ||
378 | z80op_ill_ed, | ||
379 | z80op_ill_ed, | ||
380 | z80op_ill_ed, | ||
381 | z80op_ill_ed, | ||
382 | z80op_ill_ed, | ||
383 | z80op_ill_ed, | ||
384 | z80op_ill_ed, | ||
385 | z80op_ill_ed, | ||
386 | z80op_ill_ed, | ||
387 | z80op_ill_ed, | ||
388 | z80op_ill_ed, | ||
389 | z80op_ill_ed, | ||
390 | z80op_ill_ed, | ||
391 | z80op_ill_ed, | ||
392 | |||
393 | z80op_ill_ed, | ||
394 | z80op_ill_ed, | ||
395 | z80op_ill_ed, | ||
396 | z80op_ill_ed, | ||
397 | z80op_ill_ed, | ||
398 | z80op_ill_ed, | ||
399 | z80op_ill_ed, | ||
400 | z80op_ill_ed, | ||
401 | z80op_ill_ed, | ||
402 | z80op_ill_ed, | ||
403 | z80op_ill_ed, | ||
404 | z80op_ill_ed, | ||
405 | z80op_ill_ed, | ||
406 | z80op_ill_ed, | ||
407 | z80op_ill_ed, | ||
408 | z80op_ill_ed, | ||
409 | |||
410 | z80op_ill_ed, | ||
411 | z80op_ill_ed, | ||
412 | z80op_ill_ed, | ||
413 | z80op_ill_ed, | ||
414 | z80op_ill_ed, | ||
415 | z80op_ill_ed, | ||
416 | z80op_ill_ed, | ||
417 | z80op_ill_ed, | ||
418 | z80op_ill_ed, | ||
419 | z80op_ill_ed, | ||
420 | z80op_ill_ed, | ||
421 | z80op_ill_ed, | ||
422 | z80op_ill_ed, | ||
423 | z80op_ill_ed, | ||
424 | z80op_ill_ed, | ||
425 | z80op_ill_ed, | ||
426 | |||
427 | z80op_ill_ed, | ||
428 | z80op_ill_ed, | ||
429 | z80op_ill_ed, | ||
430 | z80op_ill_ed, | ||
431 | z80op_ill_ed, | ||
432 | z80op_ill_ed, | ||
433 | z80op_ill_ed, | ||
434 | z80op_ill_ed, | ||
435 | z80op_ill_ed, | ||
436 | z80op_ill_ed, | ||
437 | z80op_ill_ed, | ||
438 | z80op_ill_ed, | ||
439 | z80op_ill_ed, | ||
440 | z80op_ill_ed, | ||
441 | z80op_ill_ed, | ||
442 | z80op_ill_ed, | ||
443 | |||
444 | z80op_in_b_ic, | ||
445 | z80op_out_ic_b, | ||
446 | z80op_sbc_hl_bc, | ||
447 | z80op_ld_inn_bc, | ||
448 | z80op_neg, | ||
449 | z80op_retn, | ||
450 | z80op_im_0, | ||
451 | z80op_ld_i_a, | ||
452 | z80op_in_c_ic, | ||
453 | z80op_out_ic_c, | ||
454 | z80op_adc_hl_bc, | ||
455 | z80op_ld_bc_inn, | ||
456 | z80op_neg, | ||
457 | z80op_reti, | ||
458 | z80op_im_0, | ||
459 | z80op_ld_r_a, | ||
460 | |||
461 | z80op_in_d_ic, | ||
462 | z80op_out_ic_d, | ||
463 | z80op_sbc_hl_de, | ||
464 | z80op_ld_inn_de, | ||
465 | z80op_neg, | ||
466 | z80op_retn, | ||
467 | z80op_im_1, | ||
468 | z80op_ld_a_i, | ||
469 | z80op_in_e_ic, | ||
470 | z80op_out_ic_e, | ||
471 | z80op_adc_hl_de, | ||
472 | z80op_ld_de_inn, | ||
473 | z80op_neg, | ||
474 | z80op_retn, | ||
475 | z80op_im_2, | ||
476 | z80op_ld_a_r, | ||
477 | |||
478 | z80op_in_h_ic, | ||
479 | z80op_out_ic_h, | ||
480 | z80op_sbc_hl_hl, | ||
481 | z80op_ld_inn_hl_ed, | ||
482 | z80op_neg, | ||
483 | z80op_retn, | ||
484 | z80op_im_0, | ||
485 | z80op_rrd, | ||
486 | z80op_in_l_ic, | ||
487 | z80op_out_ic_l, | ||
488 | z80op_adc_hl_hl, | ||
489 | z80op_ld_hl_inn_ed, | ||
490 | z80op_neg, | ||
491 | z80op_retn, | ||
492 | z80op_im_0, | ||
493 | z80op_rld, | ||
494 | |||
495 | z80op_in_f_ic, | ||
496 | z80op_out_ic_0, | ||
497 | z80op_sbc_hl_sp, | ||
498 | z80op_ld_inn_sp, | ||
499 | z80op_neg, | ||
500 | z80op_retn, | ||
501 | z80op_im_1, | ||
502 | z80op_ill_ed, | ||
503 | z80op_in_a_ic, | ||
504 | z80op_out_ic_a, | ||
505 | z80op_adc_hl_sp, | ||
506 | z80op_ld_sp_inn, | ||
507 | z80op_neg, | ||
508 | z80op_retn, | ||
509 | z80op_im_2, | ||
510 | z80op_ill_ed, | ||
511 | |||
512 | z80op_ill_ed, | ||
513 | z80op_ill_ed, | ||
514 | z80op_ill_ed, | ||
515 | z80op_ill_ed, | ||
516 | z80op_ill_ed, | ||
517 | z80op_ill_ed, | ||
518 | z80op_ill_ed, | ||
519 | z80op_ill_ed, | ||
520 | z80op_ill_ed, | ||
521 | z80op_ill_ed, | ||
522 | z80op_ill_ed, | ||
523 | z80op_ill_ed, | ||
524 | z80op_ill_ed, | ||
525 | z80op_ill_ed, | ||
526 | z80op_ill_ed, | ||
527 | z80op_ill_ed, | ||
528 | |||
529 | z80op_ill_ed, | ||
530 | z80op_ill_ed, | ||
531 | z80op_ill_ed, | ||
532 | z80op_ill_ed, | ||
533 | z80op_ill_ed, | ||
534 | z80op_ill_ed, | ||
535 | z80op_ill_ed, | ||
536 | z80op_ill_ed, | ||
537 | z80op_ill_ed, | ||
538 | z80op_ill_ed, | ||
539 | z80op_ill_ed, | ||
540 | z80op_ill_ed, | ||
541 | z80op_ill_ed, | ||
542 | z80op_ill_ed, | ||
543 | z80op_ill_ed, | ||
544 | z80op_ill_ed, | ||
545 | |||
546 | z80op_ldi, | ||
547 | z80op_cpi, | ||
548 | z80op_ini, | ||
549 | z80op_outi, | ||
550 | z80op_ill_ed, | ||
551 | z80op_ill_ed, | ||
552 | z80op_ill_ed, | ||
553 | z80op_ill_ed, | ||
554 | z80op_ldd, | ||
555 | z80op_cpd, | ||
556 | z80op_ind, | ||
557 | z80op_outd, | ||
558 | z80op_ill_ed, | ||
559 | z80op_ill_ed, | ||
560 | z80op_ill_ed, | ||
561 | z80op_ill_ed, | ||
562 | |||
563 | z80op_ldir, | ||
564 | z80op_cpir, | ||
565 | z80op_inir, | ||
566 | z80op_otir, | ||
567 | z80op_ill_ed, | ||
568 | z80op_ill_ed, | ||
569 | z80op_ill_ed, | ||
570 | z80op_ill_ed, | ||
571 | z80op_lddr, | ||
572 | z80op_cpdr, | ||
573 | z80op_indr, | ||
574 | z80op_otdr, | ||
575 | z80op_ill_ed, | ||
576 | z80op_ill_ed, | ||
577 | z80op_ill_ed, | ||
578 | z80op_ill_ed, | ||
579 | |||
580 | z80op_ill_ed, | ||
581 | z80op_ill_ed, | ||
582 | z80op_ill_ed, | ||
583 | z80op_ill_ed, | ||
584 | z80op_ill_ed, | ||
585 | z80op_ill_ed, | ||
586 | z80op_ill_ed, | ||
587 | z80op_ill_ed, | ||
588 | z80op_ill_ed, | ||
589 | z80op_ill_ed, | ||
590 | z80op_ill_ed, | ||
591 | z80op_ill_ed, | ||
592 | z80op_ill_ed, | ||
593 | z80op_ill_ed, | ||
594 | z80op_ill_ed, | ||
595 | z80op_ill_ed, | ||
596 | |||
597 | z80op_ill_ed, | ||
598 | z80op_ill_ed, | ||
599 | z80op_ill_ed, | ||
600 | z80op_ill_ed, | ||
601 | z80op_ill_ed, | ||
602 | z80op_ill_ed, | ||
603 | z80op_ill_ed, | ||
604 | z80op_ill_ed, | ||
605 | z80op_ill_ed, | ||
606 | z80op_ill_ed, | ||
607 | z80op_ill_ed, | ||
608 | z80op_ill_ed, | ||
609 | z80op_ill_ed, | ||
610 | z80op_ill_ed, | ||
611 | z80op_ill_ed, | ||
612 | z80op_ill_ed, | ||
613 | |||
614 | z80op_ill_ed, | ||
615 | z80op_ill_ed, | ||
616 | z80op_ill_ed, | ||
617 | z80op_ill_ed, | ||
618 | z80op_ill_ed, | ||
619 | z80op_ill_ed, | ||
620 | z80op_ill_ed, | ||
621 | z80op_ill_ed, | ||
622 | z80op_ill_ed, | ||
623 | z80op_ill_ed, | ||
624 | z80op_ill_ed, | ||
625 | z80op_ill_ed, | ||
626 | z80op_ill_ed, | ||
627 | z80op_ill_ed, | ||
628 | z80op_ill_ed, | ||
629 | z80op_ill_ed, | ||
630 | |||
631 | z80op_ill_ed, | ||
632 | z80op_ill_ed, | ||
633 | z80op_ill_ed, | ||
634 | z80op_ill_ed, | ||
635 | z80op_ill_ed, | ||
636 | z80op_ill_ed, | ||
637 | z80op_ill_ed, | ||
638 | z80op_ill_ed, | ||
639 | z80op_ill_ed, | ||
640 | z80op_ill_ed, | ||
641 | z80op_ill_ed, | ||
642 | z80op_ill_ed, | ||
643 | z80op_ill_ed, | ||
644 | z80op_ill_ed, | ||
645 | z80op_ill_ed, | ||
646 | z80op_ill_ed | ||
647 | }; | ||
648 | |||
649 | op_f z80c_op_tab_dd[] = { | ||
650 | z80op_nop, | ||
651 | z80op_ld_bc_nn, | ||
652 | z80op_ld_ibc_a, | ||
653 | z80op_inc_bc, | ||
654 | z80op_inc_b, | ||
655 | z80op_dec_b, | ||
656 | z80op_ld_b_n, | ||
657 | z80op_rlca, | ||
658 | z80op_ex_af_afb, | ||
659 | z80op_add_ix_bc, | ||
660 | z80op_ld_a_ibc, | ||
661 | z80op_dec_bc, | ||
662 | z80op_inc_c, | ||
663 | z80op_dec_c, | ||
664 | z80op_ld_c_n, | ||
665 | z80op_rrca, | ||
666 | |||
667 | z80op_djnz_e, | ||
668 | z80op_ld_de_nn, | ||
669 | z80op_ld_ide_a, | ||
670 | z80op_inc_de, | ||
671 | z80op_inc_d, | ||
672 | z80op_dec_d, | ||
673 | z80op_ld_d_n, | ||
674 | z80op_rla, | ||
675 | z80op_jr_e, | ||
676 | z80op_add_ix_de, | ||
677 | z80op_ld_a_ide, | ||
678 | z80op_dec_de, | ||
679 | z80op_inc_e, | ||
680 | z80op_dec_e, | ||
681 | z80op_ld_e_n, | ||
682 | z80op_rra, | ||
683 | |||
684 | z80op_jr_nz_e, | ||
685 | z80op_ld_ix_nn, | ||
686 | z80op_ld_inn_ix, | ||
687 | z80op_inc_ix, | ||
688 | z80op_inc_ixh, | ||
689 | z80op_dec_ixh, | ||
690 | z80op_ld_ixh_n, | ||
691 | z80op_daa, | ||
692 | z80op_jr_z_e, | ||
693 | z80op_add_ix_ix, | ||
694 | z80op_ld_ix_inn, | ||
695 | z80op_dec_ix, | ||
696 | z80op_inc_ixl, | ||
697 | z80op_dec_ixl, | ||
698 | z80op_ld_ixl_n, | ||
699 | z80op_cpl, | ||
700 | |||
701 | z80op_jr_nc_e, | ||
702 | z80op_ld_sp_nn, | ||
703 | z80op_ld_inn_a, | ||
704 | z80op_inc_sp, | ||
705 | z80op_inc_iixd, | ||
706 | z80op_dec_iixd, | ||
707 | z80op_ld_iixd_n, | ||
708 | z80op_scf, | ||
709 | z80op_jr_c_e, | ||
710 | z80op_add_ix_sp, | ||
711 | z80op_ld_a_inn, | ||
712 | z80op_dec_sp, | ||
713 | z80op_inc_a, | ||
714 | z80op_dec_a, | ||
715 | z80op_ld_a_n, | ||
716 | z80op_ccf, | ||
717 | |||
718 | z80op_nop, | ||
719 | z80op_ld_b_c, | ||
720 | z80op_ld_b_d, | ||
721 | z80op_ld_b_e, | ||
722 | z80op_ld_b_ixh, | ||
723 | z80op_ld_b_ixl, | ||
724 | z80op_ld_b_iixd, | ||
725 | z80op_ld_b_a, | ||
726 | z80op_ld_c_b, | ||
727 | z80op_nop, | ||
728 | z80op_ld_c_d, | ||
729 | z80op_ld_c_e, | ||
730 | z80op_ld_c_ixh, | ||
731 | z80op_ld_c_ixl, | ||
732 | z80op_ld_c_iixd, | ||
733 | z80op_ld_c_a, | ||
734 | |||
735 | z80op_ld_d_b, | ||
736 | z80op_ld_d_c, | ||
737 | z80op_nop, | ||
738 | z80op_ld_d_e, | ||
739 | z80op_ld_d_ixh, | ||
740 | z80op_ld_d_ixl, | ||
741 | z80op_ld_d_iixd, | ||
742 | z80op_ld_d_a, | ||
743 | z80op_ld_e_b, | ||
744 | z80op_ld_e_c, | ||
745 | z80op_ld_e_d, | ||
746 | z80op_nop, | ||
747 | z80op_ld_e_ixh, | ||
748 | z80op_ld_e_ixl, | ||
749 | z80op_ld_e_iixd, | ||
750 | z80op_ld_e_a, | ||
751 | |||
752 | z80op_ld_ixh_b, | ||
753 | z80op_ld_ixh_c, | ||
754 | z80op_ld_ixh_d, | ||
755 | z80op_ld_ixh_e, | ||
756 | z80op_nop, | ||
757 | z80op_ld_ixh_ixl, | ||
758 | z80op_ld_h_iixd, | ||
759 | z80op_ld_ixh_a, | ||
760 | z80op_ld_ixl_b, | ||
761 | z80op_ld_ixl_c, | ||
762 | z80op_ld_ixl_d, | ||
763 | z80op_ld_ixl_e, | ||
764 | z80op_ld_ixl_ixh, | ||
765 | z80op_nop, | ||
766 | z80op_ld_l_iixd, | ||
767 | z80op_ld_ixl_a, | ||
768 | |||
769 | z80op_ld_iixd_b, | ||
770 | z80op_ld_iixd_c, | ||
771 | z80op_ld_iixd_d, | ||
772 | z80op_ld_iixd_e, | ||
773 | z80op_ld_iixd_h, | ||
774 | z80op_ld_iixd_l, | ||
775 | z80op_halt, | ||
776 | z80op_ld_iixd_a, | ||
777 | z80op_ld_a_b, | ||
778 | z80op_ld_a_c, | ||
779 | z80op_ld_a_d, | ||
780 | z80op_ld_a_e, | ||
781 | z80op_ld_a_ixh, | ||
782 | z80op_ld_a_ixl, | ||
783 | z80op_ld_a_iixd, | ||
784 | z80op_nop, | ||
785 | |||
786 | z80op_add_a_b, | ||
787 | z80op_add_a_c, | ||
788 | z80op_add_a_d, | ||
789 | z80op_add_a_e, | ||
790 | z80op_add_a_ixh, | ||
791 | z80op_add_a_ixl, | ||
792 | z80op_add_a_iixd, | ||
793 | z80op_add_a_a, | ||
794 | z80op_adc_a_b, | ||
795 | z80op_adc_a_c, | ||
796 | z80op_adc_a_d, | ||
797 | z80op_adc_a_e, | ||
798 | z80op_adc_a_ixh, | ||
799 | z80op_adc_a_ixl, | ||
800 | z80op_adc_a_iixd, | ||
801 | z80op_adc_a_a, | ||
802 | |||
803 | z80op_sub_b, | ||
804 | z80op_sub_c, | ||
805 | z80op_sub_d, | ||
806 | z80op_sub_e, | ||
807 | z80op_sub_ixh, | ||
808 | z80op_sub_ixl, | ||
809 | z80op_sub_iixd, | ||
810 | z80op_sub_a, | ||
811 | z80op_sbc_a_b, | ||
812 | z80op_sbc_a_c, | ||
813 | z80op_sbc_a_d, | ||
814 | z80op_sbc_a_e, | ||
815 | z80op_sbc_a_ixh, | ||
816 | z80op_sbc_a_ixl, | ||
817 | z80op_sbc_a_iixd, | ||
818 | z80op_sbc_a_a, | ||
819 | |||
820 | z80op_and_b, | ||
821 | z80op_and_c, | ||
822 | z80op_and_d, | ||
823 | z80op_and_e, | ||
824 | z80op_and_ixh, | ||
825 | z80op_and_ixl, | ||
826 | z80op_and_iixd, | ||
827 | z80op_and_a, | ||
828 | z80op_xor_b, | ||
829 | z80op_xor_c, | ||
830 | z80op_xor_d, | ||
831 | z80op_xor_e, | ||
832 | z80op_xor_ixh, | ||
833 | z80op_xor_ixl, | ||
834 | z80op_xor_iixd, | ||
835 | z80op_xor_a, | ||
836 | |||
837 | z80op_or_b, | ||
838 | z80op_or_c, | ||
839 | z80op_or_d, | ||
840 | z80op_or_e, | ||
841 | z80op_or_ixh, | ||
842 | z80op_or_ixl, | ||
843 | z80op_or_iixd, | ||
844 | z80op_or_a, | ||
845 | z80op_cp_b, | ||
846 | z80op_cp_c, | ||
847 | z80op_cp_d, | ||
848 | z80op_cp_e, | ||
849 | z80op_cp_ixh, | ||
850 | z80op_cp_ixl, | ||
851 | z80op_cp_iixd, | ||
852 | z80op_cp_a, | ||
853 | |||
854 | z80op_ret_nz, | ||
855 | z80op_pop_bc, | ||
856 | z80op_jp_nz_nn, | ||
857 | z80op_jp_nn, | ||
858 | z80op_call_nz_nn, | ||
859 | z80op_push_bc, | ||
860 | z80op_add_a_n, | ||
861 | z80op_rst_00, | ||
862 | z80op_ret_z, | ||
863 | z80op_ret, | ||
864 | z80op_jp_z_nn, | ||
865 | z80op_special_dd_cb, | ||
866 | z80op_call_z_nn, | ||
867 | z80op_call_nn, | ||
868 | z80op_adc_a_n, | ||
869 | z80op_rst_08, | ||
870 | |||
871 | z80op_ret_nc, | ||
872 | z80op_pop_de, | ||
873 | z80op_jp_nc_nn, | ||
874 | z80op_out_in_a, | ||
875 | z80op_call_nc_nn, | ||
876 | z80op_push_de, | ||
877 | z80op_sub_n, | ||
878 | z80op_rst_10, | ||
879 | z80op_ret_c, | ||
880 | z80op_exx, | ||
881 | z80op_jp_c_nn, | ||
882 | z80op_in_a_in, | ||
883 | z80op_call_c_nn, | ||
884 | z80op_special_xx, | ||
885 | z80op_sbc_a_n, | ||
886 | z80op_rst_18, | ||
887 | |||
888 | z80op_ret_po, | ||
889 | z80op_pop_ix, | ||
890 | z80op_jp_po_nn, | ||
891 | z80op_ex_isp_ix, | ||
892 | z80op_call_po_nn, | ||
893 | z80op_push_ix, | ||
894 | z80op_and_n, | ||
895 | z80op_rst_20, | ||
896 | z80op_ret_pe, | ||
897 | z80op_jp_ix, | ||
898 | z80op_jp_pe_nn, | ||
899 | z80op_ex_de_hl, | ||
900 | z80op_call_pe_nn, | ||
901 | z80op_special_ed, | ||
902 | z80op_xor_n, | ||
903 | z80op_rst_28, | ||
904 | |||
905 | z80op_ret_p, | ||
906 | z80op_pop_af, | ||
907 | z80op_jp_p_nn, | ||
908 | z80op_di, | ||
909 | z80op_call_p_nn, | ||
910 | z80op_push_af, | ||
911 | z80op_or_n, | ||
912 | z80op_rst_30, | ||
913 | z80op_ret_m, | ||
914 | z80op_ld_sp_ix, | ||
915 | z80op_jp_m_nn, | ||
916 | z80op_ei, | ||
917 | z80op_call_m_nn, | ||
918 | z80op_special_xx, | ||
919 | z80op_cp_n, | ||
920 | z80op_rst_38 | ||
921 | }; | ||
922 | |||
923 | |||
924 | op_f z80c_op_tab_fd[] = { | ||
925 | z80op_nop, | ||
926 | z80op_ld_bc_nn, | ||
927 | z80op_ld_ibc_a, | ||
928 | z80op_inc_bc, | ||
929 | z80op_inc_b, | ||
930 | z80op_dec_b, | ||
931 | z80op_ld_b_n, | ||
932 | z80op_rlca, | ||
933 | z80op_ex_af_afb, | ||
934 | z80op_add_iy_bc, | ||
935 | z80op_ld_a_ibc, | ||
936 | z80op_dec_bc, | ||
937 | z80op_inc_c, | ||
938 | z80op_dec_c, | ||
939 | z80op_ld_c_n, | ||
940 | z80op_rrca, | ||
941 | |||
942 | z80op_djnz_e, | ||
943 | z80op_ld_de_nn, | ||
944 | z80op_ld_ide_a, | ||
945 | z80op_inc_de, | ||
946 | z80op_inc_d, | ||
947 | z80op_dec_d, | ||
948 | z80op_ld_d_n, | ||
949 | z80op_rla, | ||
950 | z80op_jr_e, | ||
951 | z80op_add_iy_de, | ||
952 | z80op_ld_a_ide, | ||
953 | z80op_dec_de, | ||
954 | z80op_inc_e, | ||
955 | z80op_dec_e, | ||
956 | z80op_ld_e_n, | ||
957 | z80op_rra, | ||
958 | |||
959 | z80op_jr_nz_e, | ||
960 | z80op_ld_iy_nn, | ||
961 | z80op_ld_inn_iy, | ||
962 | z80op_inc_iy, | ||
963 | z80op_inc_iyh, | ||
964 | z80op_dec_iyh, | ||
965 | z80op_ld_iyh_n, | ||
966 | z80op_daa, | ||
967 | z80op_jr_z_e, | ||
968 | z80op_add_iy_iy, | ||
969 | z80op_ld_iy_inn, | ||
970 | z80op_dec_iy, | ||
971 | z80op_inc_iyl, | ||
972 | z80op_dec_iyl, | ||
973 | z80op_ld_iyl_n, | ||
974 | z80op_cpl, | ||
975 | |||
976 | z80op_jr_nc_e, | ||
977 | z80op_ld_sp_nn, | ||
978 | z80op_ld_inn_a, | ||
979 | z80op_inc_sp, | ||
980 | z80op_inc_iiyd, | ||
981 | z80op_dec_iiyd, | ||
982 | z80op_ld_iiyd_n, | ||
983 | z80op_scf, | ||
984 | z80op_jr_c_e, | ||
985 | z80op_add_iy_sp, | ||
986 | z80op_ld_a_inn, | ||
987 | z80op_dec_sp, | ||
988 | z80op_inc_a, | ||
989 | z80op_dec_a, | ||
990 | z80op_ld_a_n, | ||
991 | z80op_ccf, | ||
992 | |||
993 | z80op_nop, | ||
994 | z80op_ld_b_c, | ||
995 | z80op_ld_b_d, | ||
996 | z80op_ld_b_e, | ||
997 | z80op_ld_b_iyh, | ||
998 | z80op_ld_b_iyl, | ||
999 | z80op_ld_b_iiyd, | ||
1000 | z80op_ld_b_a, | ||
1001 | z80op_ld_c_b, | ||
1002 | z80op_nop, | ||
1003 | z80op_ld_c_d, | ||
1004 | z80op_ld_c_e, | ||
1005 | z80op_ld_c_iyh, | ||
1006 | z80op_ld_c_iyl, | ||
1007 | z80op_ld_c_iiyd, | ||
1008 | z80op_ld_c_a, | ||
1009 | |||
1010 | z80op_ld_d_b, | ||
1011 | z80op_ld_d_c, | ||
1012 | z80op_nop, | ||
1013 | z80op_ld_d_e, | ||
1014 | z80op_ld_d_iyh, | ||
1015 | z80op_ld_d_iyl, | ||
1016 | z80op_ld_d_iiyd, | ||
1017 | z80op_ld_d_a, | ||
1018 | z80op_ld_e_b, | ||
1019 | z80op_ld_e_c, | ||
1020 | z80op_ld_e_d, | ||
1021 | z80op_nop, | ||
1022 | z80op_ld_e_iyh, | ||
1023 | z80op_ld_e_iyl, | ||
1024 | z80op_ld_e_iiyd, | ||
1025 | z80op_ld_e_a, | ||
1026 | |||
1027 | z80op_ld_iyh_b, | ||
1028 | z80op_ld_iyh_c, | ||
1029 | z80op_ld_iyh_d, | ||
1030 | z80op_ld_iyh_e, | ||
1031 | z80op_nop, | ||
1032 | z80op_ld_iyh_iyl, | ||
1033 | z80op_ld_h_iiyd, | ||
1034 | z80op_ld_iyh_a, | ||
1035 | z80op_ld_iyl_b, | ||
1036 | z80op_ld_iyl_c, | ||
1037 | z80op_ld_iyl_d, | ||
1038 | z80op_ld_iyl_e, | ||
1039 | z80op_ld_iyl_iyh, | ||
1040 | z80op_nop, | ||
1041 | z80op_ld_l_iiyd, | ||
1042 | z80op_ld_iyl_a, | ||
1043 | |||
1044 | z80op_ld_iiyd_b, | ||
1045 | z80op_ld_iiyd_c, | ||
1046 | z80op_ld_iiyd_d, | ||
1047 | z80op_ld_iiyd_e, | ||
1048 | z80op_ld_iiyd_h, | ||
1049 | z80op_ld_iiyd_l, | ||
1050 | z80op_halt, | ||
1051 | z80op_ld_iiyd_a, | ||
1052 | z80op_ld_a_b, | ||
1053 | z80op_ld_a_c, | ||
1054 | z80op_ld_a_d, | ||
1055 | z80op_ld_a_e, | ||
1056 | z80op_ld_a_iyh, | ||
1057 | z80op_ld_a_iyl, | ||
1058 | z80op_ld_a_iiyd, | ||
1059 | z80op_nop, | ||
1060 | |||
1061 | z80op_add_a_b, | ||
1062 | z80op_add_a_c, | ||
1063 | z80op_add_a_d, | ||
1064 | z80op_add_a_e, | ||
1065 | z80op_add_a_iyh, | ||
1066 | z80op_add_a_iyl, | ||
1067 | z80op_add_a_iiyd, | ||
1068 | z80op_add_a_a, | ||
1069 | z80op_adc_a_b, | ||
1070 | z80op_adc_a_c, | ||
1071 | z80op_adc_a_d, | ||
1072 | z80op_adc_a_e, | ||
1073 | z80op_adc_a_iyh, | ||
1074 | z80op_adc_a_iyl, | ||
1075 | z80op_adc_a_iiyd, | ||
1076 | z80op_adc_a_a, | ||
1077 | |||
1078 | z80op_sub_b, | ||
1079 | z80op_sub_c, | ||
1080 | z80op_sub_d, | ||
1081 | z80op_sub_e, | ||
1082 | z80op_sub_iyh, | ||
1083 | z80op_sub_iyl, | ||
1084 | z80op_sub_iiyd, | ||
1085 | z80op_sub_a, | ||
1086 | z80op_sbc_a_b, | ||
1087 | z80op_sbc_a_c, | ||
1088 | z80op_sbc_a_d, | ||
1089 | z80op_sbc_a_e, | ||
1090 | z80op_sbc_a_iyh, | ||
1091 | z80op_sbc_a_iyl, | ||
1092 | z80op_sbc_a_iiyd, | ||
1093 | z80op_sbc_a_a, | ||
1094 | |||
1095 | z80op_and_b, | ||
1096 | z80op_and_c, | ||
1097 | z80op_and_d, | ||
1098 | z80op_and_e, | ||
1099 | z80op_and_iyh, | ||
1100 | z80op_and_iyl, | ||
1101 | z80op_and_iiyd, | ||
1102 | z80op_and_a, | ||
1103 | z80op_xor_b, | ||
1104 | z80op_xor_c, | ||
1105 | z80op_xor_d, | ||
1106 | z80op_xor_e, | ||
1107 | z80op_xor_iyh, | ||
1108 | z80op_xor_iyl, | ||
1109 | z80op_xor_iiyd, | ||
1110 | z80op_xor_a, | ||
1111 | |||
1112 | z80op_or_b, | ||
1113 | z80op_or_c, | ||
1114 | z80op_or_d, | ||
1115 | z80op_or_e, | ||
1116 | z80op_or_iyh, | ||
1117 | z80op_or_iyl, | ||
1118 | z80op_or_iiyd, | ||
1119 | z80op_or_a, | ||
1120 | z80op_cp_b, | ||
1121 | z80op_cp_c, | ||
1122 | z80op_cp_d, | ||
1123 | z80op_cp_e, | ||
1124 | z80op_cp_iyh, | ||
1125 | z80op_cp_iyl, | ||
1126 | z80op_cp_iiyd, | ||
1127 | z80op_cp_a, | ||
1128 | |||
1129 | z80op_ret_nz, | ||
1130 | z80op_pop_bc, | ||
1131 | z80op_jp_nz_nn, | ||
1132 | z80op_jp_nn, | ||
1133 | z80op_call_nz_nn, | ||
1134 | z80op_push_bc, | ||
1135 | z80op_add_a_n, | ||
1136 | z80op_rst_00, | ||
1137 | z80op_ret_z, | ||
1138 | z80op_ret, | ||
1139 | z80op_jp_z_nn, | ||
1140 | z80op_special_fd_cb, | ||
1141 | z80op_call_z_nn, | ||
1142 | z80op_call_nn, | ||
1143 | z80op_adc_a_n, | ||
1144 | z80op_rst_08, | ||
1145 | |||
1146 | z80op_ret_nc, | ||
1147 | z80op_pop_de, | ||
1148 | z80op_jp_nc_nn, | ||
1149 | z80op_out_in_a, | ||
1150 | z80op_call_nc_nn, | ||
1151 | z80op_push_de, | ||
1152 | z80op_sub_n, | ||
1153 | z80op_rst_10, | ||
1154 | z80op_ret_c, | ||
1155 | z80op_exx, | ||
1156 | z80op_jp_c_nn, | ||
1157 | z80op_in_a_in, | ||
1158 | z80op_call_c_nn, | ||
1159 | z80op_special_xx, | ||
1160 | z80op_sbc_a_n, | ||
1161 | z80op_rst_18, | ||
1162 | |||
1163 | z80op_ret_po, | ||
1164 | z80op_pop_iy, | ||
1165 | z80op_jp_po_nn, | ||
1166 | z80op_ex_isp_iy, | ||
1167 | z80op_call_po_nn, | ||
1168 | z80op_push_iy, | ||
1169 | z80op_and_n, | ||
1170 | z80op_rst_20, | ||
1171 | z80op_ret_pe, | ||
1172 | z80op_jp_iy, | ||
1173 | z80op_jp_pe_nn, | ||
1174 | z80op_ex_de_hl, | ||
1175 | z80op_call_pe_nn, | ||
1176 | z80op_special_ed, | ||
1177 | z80op_xor_n, | ||
1178 | z80op_rst_28, | ||
1179 | |||
1180 | z80op_ret_p, | ||
1181 | z80op_pop_af, | ||
1182 | z80op_jp_p_nn, | ||
1183 | z80op_di, | ||
1184 | z80op_call_p_nn, | ||
1185 | z80op_push_af, | ||
1186 | z80op_or_n, | ||
1187 | z80op_rst_30, | ||
1188 | z80op_ret_m, | ||
1189 | z80op_ld_sp_iy, | ||
1190 | z80op_jp_m_nn, | ||
1191 | z80op_ei, | ||
1192 | z80op_call_m_nn, | ||
1193 | z80op_special_xx, | ||
1194 | z80op_cp_n, | ||
1195 | z80op_rst_38 | ||
1196 | }; | ||
1197 | |||
1198 | op_f z80c_op_tab_cb[] = { | ||
1199 | z80op_rlc_b, | ||
1200 | z80op_rlc_c, | ||
1201 | z80op_rlc_d, | ||
1202 | z80op_rlc_e, | ||
1203 | z80op_rlc_h, | ||
1204 | z80op_rlc_l, | ||
1205 | z80op_rlc_ihl, | ||
1206 | z80op_rlc_a, | ||
1207 | z80op_rrc_b, | ||
1208 | z80op_rrc_c, | ||
1209 | z80op_rrc_d, | ||
1210 | z80op_rrc_e, | ||
1211 | z80op_rrc_h, | ||
1212 | z80op_rrc_l, | ||
1213 | z80op_rrc_ihl, | ||
1214 | z80op_rrc_a, | ||
1215 | |||
1216 | z80op_rl_b, | ||
1217 | z80op_rl_c, | ||
1218 | z80op_rl_d, | ||
1219 | z80op_rl_e, | ||
1220 | z80op_rl_h, | ||
1221 | z80op_rl_l, | ||
1222 | z80op_rl_ihl, | ||
1223 | z80op_rl_a, | ||
1224 | z80op_rr_b, | ||
1225 | z80op_rr_c, | ||
1226 | z80op_rr_d, | ||
1227 | z80op_rr_e, | ||
1228 | z80op_rr_h, | ||
1229 | z80op_rr_l, | ||
1230 | z80op_rr_ihl, | ||
1231 | z80op_rr_a, | ||
1232 | |||
1233 | z80op_sla_b, | ||
1234 | z80op_sla_c, | ||
1235 | z80op_sla_d, | ||
1236 | z80op_sla_e, | ||
1237 | z80op_sla_h, | ||
1238 | z80op_sla_l, | ||
1239 | z80op_sla_ihl, | ||
1240 | z80op_sla_a, | ||
1241 | z80op_sra_b, | ||
1242 | z80op_sra_c, | ||
1243 | z80op_sra_d, | ||
1244 | z80op_sra_e, | ||
1245 | z80op_sra_h, | ||
1246 | z80op_sra_l, | ||
1247 | z80op_sra_ihl, | ||
1248 | z80op_sra_a, | ||
1249 | |||
1250 | z80op_sll_b, | ||
1251 | z80op_sll_c, | ||
1252 | z80op_sll_d, | ||
1253 | z80op_sll_e, | ||
1254 | z80op_sll_h, | ||
1255 | z80op_sll_l, | ||
1256 | z80op_sll_ihl, | ||
1257 | z80op_sll_a, | ||
1258 | z80op_srl_b, | ||
1259 | z80op_srl_c, | ||
1260 | z80op_srl_d, | ||
1261 | z80op_srl_e, | ||
1262 | z80op_srl_h, | ||
1263 | z80op_srl_l, | ||
1264 | z80op_srl_ihl, | ||
1265 | z80op_srl_a, | ||
1266 | |||
1267 | z80op_bit_0_b, | ||
1268 | z80op_bit_0_c, | ||
1269 | z80op_bit_0_d, | ||
1270 | z80op_bit_0_e, | ||
1271 | z80op_bit_0_h, | ||
1272 | z80op_bit_0_l, | ||
1273 | z80op_bit_0_ihl, | ||
1274 | z80op_bit_0_a, | ||
1275 | z80op_bit_1_b, | ||
1276 | z80op_bit_1_c, | ||
1277 | z80op_bit_1_d, | ||
1278 | z80op_bit_1_e, | ||
1279 | z80op_bit_1_h, | ||
1280 | z80op_bit_1_l, | ||
1281 | z80op_bit_1_ihl, | ||
1282 | z80op_bit_1_a, | ||
1283 | |||
1284 | z80op_bit_2_b, | ||
1285 | z80op_bit_2_c, | ||
1286 | z80op_bit_2_d, | ||
1287 | z80op_bit_2_e, | ||
1288 | z80op_bit_2_h, | ||
1289 | z80op_bit_2_l, | ||
1290 | z80op_bit_2_ihl, | ||
1291 | z80op_bit_2_a, | ||
1292 | z80op_bit_3_b, | ||
1293 | z80op_bit_3_c, | ||
1294 | z80op_bit_3_d, | ||
1295 | z80op_bit_3_e, | ||
1296 | z80op_bit_3_h, | ||
1297 | z80op_bit_3_l, | ||
1298 | z80op_bit_3_ihl, | ||
1299 | z80op_bit_3_a, | ||
1300 | |||
1301 | z80op_bit_4_b, | ||
1302 | z80op_bit_4_c, | ||
1303 | z80op_bit_4_d, | ||
1304 | z80op_bit_4_e, | ||
1305 | z80op_bit_4_h, | ||
1306 | z80op_bit_4_l, | ||
1307 | z80op_bit_4_ihl, | ||
1308 | z80op_bit_4_a, | ||
1309 | z80op_bit_5_b, | ||
1310 | z80op_bit_5_c, | ||
1311 | z80op_bit_5_d, | ||
1312 | z80op_bit_5_e, | ||
1313 | z80op_bit_5_h, | ||
1314 | z80op_bit_5_l, | ||
1315 | z80op_bit_5_ihl, | ||
1316 | z80op_bit_5_a, | ||
1317 | |||
1318 | z80op_bit_6_b, | ||
1319 | z80op_bit_6_c, | ||
1320 | z80op_bit_6_d, | ||
1321 | z80op_bit_6_e, | ||
1322 | z80op_bit_6_h, | ||
1323 | z80op_bit_6_l, | ||
1324 | z80op_bit_6_ihl, | ||
1325 | z80op_bit_6_a, | ||
1326 | z80op_bit_7_b, | ||
1327 | z80op_bit_7_c, | ||
1328 | z80op_bit_7_d, | ||
1329 | z80op_bit_7_e, | ||
1330 | z80op_bit_7_h, | ||
1331 | z80op_bit_7_l, | ||
1332 | z80op_bit_7_ihl, | ||
1333 | z80op_bit_7_a, | ||
1334 | |||
1335 | z80op_res_0_b, | ||
1336 | z80op_res_0_c, | ||
1337 | z80op_res_0_d, | ||
1338 | z80op_res_0_e, | ||
1339 | z80op_res_0_h, | ||
1340 | z80op_res_0_l, | ||
1341 | z80op_res_0_ihl, | ||
1342 | z80op_res_0_a, | ||
1343 | z80op_res_1_b, | ||
1344 | z80op_res_1_c, | ||
1345 | z80op_res_1_d, | ||
1346 | z80op_res_1_e, | ||
1347 | z80op_res_1_h, | ||
1348 | z80op_res_1_l, | ||
1349 | z80op_res_1_ihl, | ||
1350 | z80op_res_1_a, | ||
1351 | |||
1352 | z80op_res_2_b, | ||
1353 | z80op_res_2_c, | ||
1354 | z80op_res_2_d, | ||
1355 | z80op_res_2_e, | ||
1356 | z80op_res_2_h, | ||
1357 | z80op_res_2_l, | ||
1358 | z80op_res_2_ihl, | ||
1359 | z80op_res_2_a, | ||
1360 | z80op_res_3_b, | ||
1361 | z80op_res_3_c, | ||
1362 | z80op_res_3_d, | ||
1363 | z80op_res_3_e, | ||
1364 | z80op_res_3_h, | ||
1365 | z80op_res_3_l, | ||
1366 | z80op_res_3_ihl, | ||
1367 | z80op_res_3_a, | ||
1368 | |||
1369 | z80op_res_4_b, | ||
1370 | z80op_res_4_c, | ||
1371 | z80op_res_4_d, | ||
1372 | z80op_res_4_e, | ||
1373 | z80op_res_4_h, | ||
1374 | z80op_res_4_l, | ||
1375 | z80op_res_4_ihl, | ||
1376 | z80op_res_4_a, | ||
1377 | z80op_res_5_b, | ||
1378 | z80op_res_5_c, | ||
1379 | z80op_res_5_d, | ||
1380 | z80op_res_5_e, | ||
1381 | z80op_res_5_h, | ||
1382 | z80op_res_5_l, | ||
1383 | z80op_res_5_ihl, | ||
1384 | z80op_res_5_a, | ||
1385 | |||
1386 | z80op_res_6_b, | ||
1387 | z80op_res_6_c, | ||
1388 | z80op_res_6_d, | ||
1389 | z80op_res_6_e, | ||
1390 | z80op_res_6_h, | ||
1391 | z80op_res_6_l, | ||
1392 | z80op_res_6_ihl, | ||
1393 | z80op_res_6_a, | ||
1394 | z80op_res_7_b, | ||
1395 | z80op_res_7_c, | ||
1396 | z80op_res_7_d, | ||
1397 | z80op_res_7_e, | ||
1398 | z80op_res_7_h, | ||
1399 | z80op_res_7_l, | ||
1400 | z80op_res_7_ihl, | ||
1401 | z80op_res_7_a, | ||
1402 | |||
1403 | z80op_set_0_b, | ||
1404 | z80op_set_0_c, | ||
1405 | z80op_set_0_d, | ||
1406 | z80op_set_0_e, | ||
1407 | z80op_set_0_h, | ||
1408 | z80op_set_0_l, | ||
1409 | z80op_set_0_ihl, | ||
1410 | z80op_set_0_a, | ||
1411 | z80op_set_1_b, | ||
1412 | z80op_set_1_c, | ||
1413 | z80op_set_1_d, | ||
1414 | z80op_set_1_e, | ||
1415 | z80op_set_1_h, | ||
1416 | z80op_set_1_l, | ||
1417 | z80op_set_1_ihl, | ||
1418 | z80op_set_1_a, | ||
1419 | |||
1420 | z80op_set_2_b, | ||
1421 | z80op_set_2_c, | ||
1422 | z80op_set_2_d, | ||
1423 | z80op_set_2_e, | ||
1424 | z80op_set_2_h, | ||
1425 | z80op_set_2_l, | ||
1426 | z80op_set_2_ihl, | ||
1427 | z80op_set_2_a, | ||
1428 | z80op_set_3_b, | ||
1429 | z80op_set_3_c, | ||
1430 | z80op_set_3_d, | ||
1431 | z80op_set_3_e, | ||
1432 | z80op_set_3_h, | ||
1433 | z80op_set_3_l, | ||
1434 | z80op_set_3_ihl, | ||
1435 | z80op_set_3_a, | ||
1436 | |||
1437 | z80op_set_4_b, | ||
1438 | z80op_set_4_c, | ||
1439 | z80op_set_4_d, | ||
1440 | z80op_set_4_e, | ||
1441 | z80op_set_4_h, | ||
1442 | z80op_set_4_l, | ||
1443 | z80op_set_4_ihl, | ||
1444 | z80op_set_4_a, | ||
1445 | z80op_set_5_b, | ||
1446 | z80op_set_5_c, | ||
1447 | z80op_set_5_d, | ||
1448 | z80op_set_5_e, | ||
1449 | z80op_set_5_h, | ||
1450 | z80op_set_5_l, | ||
1451 | z80op_set_5_ihl, | ||
1452 | z80op_set_5_a, | ||
1453 | |||
1454 | z80op_set_6_b, | ||
1455 | z80op_set_6_c, | ||
1456 | z80op_set_6_d, | ||
1457 | z80op_set_6_e, | ||
1458 | z80op_set_6_h, | ||
1459 | z80op_set_6_l, | ||
1460 | z80op_set_6_ihl, | ||
1461 | z80op_set_6_a, | ||
1462 | z80op_set_7_b, | ||
1463 | z80op_set_7_c, | ||
1464 | z80op_set_7_d, | ||
1465 | z80op_set_7_e, | ||
1466 | z80op_set_7_h, | ||
1467 | z80op_set_7_l, | ||
1468 | z80op_set_7_ihl, | ||
1469 | z80op_set_7_a | ||
1470 | }; | ||
diff --git a/apps/plugins/zxbox/z80optab.h b/apps/plugins/zxbox/z80optab.h new file mode 100644 index 0000000000..098322f6ba --- /dev/null +++ b/apps/plugins/zxbox/z80optab.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1996-1998 Szeredi Miklos | ||
3 | * Email: mszeredi@inf.bme.hu | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. See the file COPYING. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include "z80_op1.h" | ||
22 | #include "z80_op2.h" | ||
23 | #include "z80_op3.h" | ||
24 | #include "z80_op4.h" | ||
25 | |||
26 | #include "z80_op5.h" | ||
27 | #include "z80_op6.h" | ||
28 | |||
29 | extern z80t z80op_special_xx(z80t); | ||
30 | extern z80t z80op_special_dd_cb(z80t); | ||
31 | extern z80t z80op_special_fd_cb(z80t); | ||
diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c new file mode 100644 index 0000000000..1ca63d0eb5 --- /dev/null +++ b/apps/plugins/zxbox/zxbox.c | |||
@@ -0,0 +1,293 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (c) 2006 Anton Romanov | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | |||
20 | #include "zxconfig.h" | ||
21 | |||
22 | PLUGIN_HEADER | ||
23 | |||
24 | struct plugin_api* rb; | ||
25 | |||
26 | #include "spkey_p.h" | ||
27 | |||
28 | spkeyboard kb_mkey; | ||
29 | bool exit_requested=false; | ||
30 | bool clear_kbd=0; | ||
31 | extern bool zxbox_menu(void); | ||
32 | |||
33 | /* DUMMIES ... to clean */ | ||
34 | unsigned int scrmul=0; | ||
35 | int privatemap; | ||
36 | int use_shm = 0; | ||
37 | int small_screen,pause_on_iconify; | ||
38 | int vga_pause_bg; | ||
39 | |||
40 | #ifdef USE_IRAM | ||
41 | extern char iramcopy[]; | ||
42 | extern char iramstart[]; | ||
43 | extern char iramend[]; | ||
44 | extern char iedata[]; | ||
45 | extern char iend[]; | ||
46 | #endif | ||
47 | |||
48 | #include "keymaps.h" | ||
49 | #include "zxvid_com.h" | ||
50 | #include "spmain.h" | ||
51 | #include "spperif.h" | ||
52 | |||
53 | struct zxbox_settings settings; | ||
54 | |||
55 | /* doesn't fit into .ibss */ | ||
56 | unsigned char image_array [ HEIGHT * WIDTH ]; | ||
57 | |||
58 | static int previous_state; | ||
59 | |||
60 | #ifdef USE_GRAY | ||
61 | static unsigned char *gbuf; | ||
62 | static unsigned int gbuf_size = 0; | ||
63 | #endif | ||
64 | |||
65 | long video_frames = 0; | ||
66 | long start_time = 0; | ||
67 | |||
68 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | ||
69 | { | ||
70 | |||
71 | rb = api; | ||
72 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
73 | rb->pcm_play_stop(); | ||
74 | #endif | ||
75 | rb->splash(HZ, true, "Welcome to ZXBox"); | ||
76 | sp_init(); | ||
77 | |||
78 | #ifdef USE_IRAM | ||
79 | /* We need to stop audio playback in order to use IRAM */ | ||
80 | rb->audio_stop(); | ||
81 | |||
82 | rb->memcpy(iramstart, iramcopy, iramend-iramstart); | ||
83 | rb->memset(iedata, 0, iend - iedata); | ||
84 | #endif | ||
85 | |||
86 | #ifdef USE_GRAY | ||
87 | /* get the remainder of the plugin buffer */ | ||
88 | gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); | ||
89 | #ifdef USE_BUFFERED_GRAY | ||
90 | gray_init(rb, gbuf, gbuf_size, true, LCD_WIDTH, LCD_HEIGHT, 15, 0, NULL); | ||
91 | #else | ||
92 | gray_init(rb, gbuf, gbuf_size, false, LCD_WIDTH, LCD_HEIGHT, 15, 0, NULL); | ||
93 | #endif /* USE_BUFFERED_GRAY */ | ||
94 | /* switch on grayscale overlay */ | ||
95 | gray_show(true); | ||
96 | #endif /* USE_GRAY */ | ||
97 | |||
98 | |||
99 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
100 | rb->cpu_boost(true); | ||
101 | #endif | ||
102 | |||
103 | start_time = *rb->current_tick; | ||
104 | start_spectemu(parameter); | ||
105 | |||
106 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
107 | rb->cpu_boost(false); | ||
108 | #endif | ||
109 | |||
110 | #ifdef USE_GRAY | ||
111 | gray_show(false); | ||
112 | gray_release(); | ||
113 | #endif | ||
114 | |||
115 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
116 | rb->pcm_play_stop(); | ||
117 | #endif | ||
118 | |||
119 | return PLUGIN_OK; | ||
120 | } | ||
121 | |||
122 | void init_spect_key(void) | ||
123 | { | ||
124 | clear_keystates(); | ||
125 | init_basekeys(); | ||
126 | } | ||
127 | |||
128 | void spkb_process_events( int evenframe ) | ||
129 | { | ||
130 | |||
131 | if(evenframe){ | ||
132 | int ki; | ||
133 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
134 | (CONFIG_KEYPAD == IPOD_3G_PAD) | ||
135 | if (rb->button_hold()) | ||
136 | { | ||
137 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
138 | rb->cpu_boost(false); | ||
139 | #endif | ||
140 | exit_requested=1; | ||
141 | #ifdef USE_GRAY | ||
142 | gray_show(false); | ||
143 | #endif | ||
144 | return; | ||
145 | } | ||
146 | #endif | ||
147 | int buttons = rb->button_status(); | ||
148 | if ( buttons == previous_state ) | ||
149 | return; | ||
150 | previous_state = buttons; | ||
151 | #if (CONFIG_KEYPAD != IPOD_4G_PAD) && \ | ||
152 | (CONFIG_KEYPAD != IPOD_3G_PAD) | ||
153 | if (buttons & ZX_MENU) | ||
154 | { | ||
155 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
156 | rb->cpu_boost(false); | ||
157 | #endif | ||
158 | exit_requested=1; | ||
159 | #ifdef USE_GRAY | ||
160 | gray_show(false); | ||
161 | #endif | ||
162 | return; | ||
163 | } | ||
164 | #endif | ||
165 | spkb_state_changed = 1; | ||
166 | if (settings.kempston){ | ||
167 | if ( buttons & ZX_RIGHT ){ | ||
168 | ki = KS_TO_KEY(SK_KP_Right); | ||
169 | spkb_kbstate[ki].state = 1; | ||
170 | } | ||
171 | else if (buttons & ZX_LEFT){ | ||
172 | ki = KS_TO_KEY(SK_KP_Left); | ||
173 | spkb_kbstate[ki].state = 1; | ||
174 | |||
175 | } | ||
176 | else{ | ||
177 | ki = KS_TO_KEY(SK_KP_Right); | ||
178 | spkb_kbstate[ki].state = 0; | ||
179 | ki = KS_TO_KEY(SK_KP_Left); | ||
180 | spkb_kbstate[ki].state = 0; | ||
181 | |||
182 | } | ||
183 | if ( buttons & ZX_UP ){ | ||
184 | ki = KS_TO_KEY(SK_KP_Up); | ||
185 | spkb_kbstate[ki].state = 1; | ||
186 | } | ||
187 | else if (buttons & ZX_DOWN){ | ||
188 | ki = KS_TO_KEY(SK_KP_Down); | ||
189 | spkb_kbstate[ki].state = 1; | ||
190 | } | ||
191 | else{ | ||
192 | ki = KS_TO_KEY(SK_KP_Up); | ||
193 | spkb_kbstate[ki].state = 0; | ||
194 | ki = KS_TO_KEY(SK_KP_Down); | ||
195 | spkb_kbstate[ki].state = 0; | ||
196 | } | ||
197 | |||
198 | if ( buttons & ZX_SELECT ){ | ||
199 | ki = KS_TO_KEY(SK_KP_Insert); | ||
200 | spkb_kbstate[ki].state = 1; | ||
201 | } | ||
202 | else{ | ||
203 | ki = KS_TO_KEY(SK_KP_Insert); | ||
204 | spkb_kbstate[ki].state = 0; | ||
205 | } | ||
206 | |||
207 | } | ||
208 | else { | ||
209 | |||
210 | if ( buttons & ZX_RIGHT ){ | ||
211 | ki = KS_TO_KEY(intkeys[3]); | ||
212 | spkb_kbstate[ki].state = 1; | ||
213 | } | ||
214 | else{ | ||
215 | ki = KS_TO_KEY(intkeys[3]); | ||
216 | spkb_kbstate[ki].state = 0; | ||
217 | } | ||
218 | |||
219 | if ( buttons & ZX_LEFT ){ | ||
220 | ki = KS_TO_KEY(intkeys[2]); | ||
221 | spkb_kbstate[ki].state = 1; | ||
222 | } | ||
223 | else{ | ||
224 | ki = KS_TO_KEY(intkeys[2]); | ||
225 | spkb_kbstate[ki].state = 0; | ||
226 | } | ||
227 | |||
228 | if ( buttons & ZX_UP ){ | ||
229 | ki = KS_TO_KEY(intkeys[0]); | ||
230 | spkb_kbstate[ki].state = 1; | ||
231 | } | ||
232 | else{ | ||
233 | ki = KS_TO_KEY(intkeys[0]); | ||
234 | spkb_kbstate[ki].state = 0; | ||
235 | } | ||
236 | |||
237 | if ( buttons & ZX_DOWN ){ | ||
238 | ki = KS_TO_KEY(intkeys[1]); | ||
239 | spkb_kbstate[ki].state = 1; | ||
240 | } | ||
241 | else{ | ||
242 | ki = KS_TO_KEY(intkeys[1]); | ||
243 | spkb_kbstate[ki].state = 0; | ||
244 | } | ||
245 | |||
246 | if ( buttons & ZX_SELECT ){ | ||
247 | ki = KS_TO_KEY(intkeys[4]); | ||
248 | spkb_kbstate[ki].state = 1; | ||
249 | } | ||
250 | else{ | ||
251 | ki = KS_TO_KEY(intkeys[4]); | ||
252 | spkb_kbstate[ki].state = 0; | ||
253 | } | ||
254 | } | ||
255 | process_keys(); | ||
256 | } | ||
257 | } | ||
258 | |||
259 | void press_key(int c){ | ||
260 | spkb_state_changed = 1; | ||
261 | int ki; | ||
262 | if ( c == 'E' ) | ||
263 | ki = KS_TO_KEY(SK_KP_Enter); | ||
264 | else if (c == 'S' ) | ||
265 | ki = KS_TO_KEY(SK_KP_Space); | ||
266 | else | ||
267 | ki = KS_TO_KEY(c); | ||
268 | spkb_kbstate[ki].state = 1; | ||
269 | process_keys(); | ||
270 | } | ||
271 | |||
272 | void spkey_textmode(void) | ||
273 | { | ||
274 | } | ||
275 | |||
276 | void spkey_screenmode(void) | ||
277 | { | ||
278 | } | ||
279 | |||
280 | void spscr_refresh_colors(void) | ||
281 | { | ||
282 | } | ||
283 | |||
284 | void resize_spect_scr(int s) | ||
285 | { | ||
286 | /* just to disable warning */ | ||
287 | (void)s; | ||
288 | } | ||
289 | |||
290 | int display_keyboard(void) | ||
291 | { | ||
292 | return 0; | ||
293 | } | ||
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c new file mode 100644 index 0000000000..685d9ce6bb --- /dev/null +++ b/apps/plugins/zxbox/zxbox_keyb.c | |||
@@ -0,0 +1,497 @@ | |||
1 | #include "zxconfig.h" | ||
2 | |||
3 | #ifndef O_BINARY | ||
4 | #define O_BINARY 0 | ||
5 | #endif | ||
6 | |||
7 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
8 | #define BUTTONBAR_HEIGHT 8 | ||
9 | #else | ||
10 | #define BUTTONBAR_HEIGHT 0 | ||
11 | #endif | ||
12 | |||
13 | #define DEFAULT_MARGIN 6 | ||
14 | #define KBD_BUF_SIZE 500 | ||
15 | #define kbd_loaded false | ||
16 | #define statusbar_size 0 | ||
17 | |||
18 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
19 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
20 | #define KBD_SELECT BUTTON_SELECT | ||
21 | #define KBD_ABORT BUTTON_OFF | ||
22 | #define KBD_LEFT BUTTON_LEFT | ||
23 | #define KBD_RIGHT BUTTON_RIGHT | ||
24 | #define KBD_UP BUTTON_UP | ||
25 | #define KBD_DOWN BUTTON_DOWN | ||
26 | |||
27 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
28 | #define KBD_SELECT BUTTON_PLAY | ||
29 | #define KBD_ABORT BUTTON_OFF | ||
30 | #define KBD_LEFT BUTTON_LEFT | ||
31 | #define KBD_RIGHT BUTTON_RIGHT | ||
32 | #define KBD_UP BUTTON_UP | ||
33 | #define KBD_DOWN BUTTON_DOWN | ||
34 | |||
35 | #elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */ | ||
36 | #define KBD_SELECT BUTTON_MENU | ||
37 | #define KBD_ABORT BUTTON_OFF | ||
38 | #define KBD_LEFT BUTTON_LEFT | ||
39 | #define KBD_RIGHT BUTTON_RIGHT | ||
40 | #define KBD_UP BUTTON_UP | ||
41 | #define KBD_DOWN BUTTON_DOWN | ||
42 | |||
43 | #elif CONFIG_KEYPAD == GMINI100_PAD | ||
44 | #define KBD_SELECT BUTTON_PLAY | ||
45 | #define KBD_ABORT BUTTON_OFF | ||
46 | #define KBD_LEFT BUTTON_LEFT | ||
47 | #define KBD_RIGHT BUTTON_RIGHT | ||
48 | #define KBD_UP BUTTON_UP | ||
49 | #define KBD_DOWN BUTTON_DOWN | ||
50 | |||
51 | #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) | ||
52 | |||
53 | #define KBD_SELECT BUTTON_SELECT | ||
54 | #define KBD_ABORT BUTTON_MENU | ||
55 | #define KBD_LEFT BUTTON_LEFT | ||
56 | #define KBD_RIGHT BUTTON_RIGHT | ||
57 | #define KBD_UP BUTTON_SCROLL_BACK | ||
58 | #define KBD_DOWN BUTTON_SCROLL_FWD | ||
59 | |||
60 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | ||
61 | |||
62 | /* TODO: Check keyboard mappings */ | ||
63 | |||
64 | #define KBD_SELECT BUTTON_SELECT | ||
65 | #define KBD_ABORT BUTTON_PLAY | ||
66 | #define KBD_LEFT BUTTON_LEFT | ||
67 | #define KBD_RIGHT BUTTON_RIGHT | ||
68 | #define KBD_UP BUTTON_UP | ||
69 | #define KBD_DOWN BUTTON_DOWN | ||
70 | |||
71 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
72 | |||
73 | /* TODO: Check keyboard mappings */ | ||
74 | |||
75 | #define KBD_SELECT BUTTON_SELECT | ||
76 | #define KBD_ABORT BUTTON_REC | ||
77 | #define KBD_LEFT BUTTON_LEFT | ||
78 | #define KBD_RIGHT BUTTON_RIGHT | ||
79 | #define KBD_UP BUTTON_UP | ||
80 | #define KBD_DOWN BUTTON_DOWN | ||
81 | |||
82 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | ||
83 | |||
84 | #define KBD_SELECT BUTTON_SELECT | ||
85 | #define KBD_ABORT BUTTON_A | ||
86 | #define KBD_LEFT BUTTON_LEFT | ||
87 | #define KBD_RIGHT BUTTON_RIGHT | ||
88 | #define KBD_UP BUTTON_UP | ||
89 | #define KBD_DOWN BUTTON_DOWN | ||
90 | |||
91 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
92 | |||
93 | /* TODO: Check keyboard mappings */ | ||
94 | |||
95 | #define KBD_SELECT BUTTON_REW | ||
96 | #define KBD_ABORT BUTTON_FF | ||
97 | #define KBD_LEFT BUTTON_LEFT | ||
98 | #define KBD_RIGHT BUTTON_RIGHT | ||
99 | #define KBD_UP BUTTON_SCROLL_UP | ||
100 | #define KBD_DOWN BUTTON_SCROLL_DOWN | ||
101 | |||
102 | #endif | ||
103 | |||
104 | |||
105 | struct keyboard_parameters { | ||
106 | const unsigned char* default_kbd; | ||
107 | int DEFAULT_LINES; | ||
108 | unsigned short kbd_buf[KBD_BUF_SIZE]; | ||
109 | int nchars; | ||
110 | int font_w; | ||
111 | int font_h; | ||
112 | struct font* font; | ||
113 | int curfont; | ||
114 | int main_x; | ||
115 | int main_y; | ||
116 | int max_chars; | ||
117 | int max_chars_text; | ||
118 | int lines; | ||
119 | int pages; | ||
120 | int keyboard_margin; | ||
121 | int old_main_y; | ||
122 | int curpos; | ||
123 | int leftpos; | ||
124 | int page; | ||
125 | int x; | ||
126 | int y; | ||
127 | }; | ||
128 | |||
129 | struct keyboard_parameters param[NB_SCREENS]; | ||
130 | |||
131 | int zx_kbd_input(char* text/*, int buflen*/) | ||
132 | { | ||
133 | bool done = false; | ||
134 | int i, j, k, w, l; | ||
135 | int text_w = 0; | ||
136 | int len_utf8/*, c = 0*/; | ||
137 | int editpos; | ||
138 | /* int statusbar_size = global_settings.statusbar ? STATUSBAR_HEIGHT : 0;*/ | ||
139 | unsigned short ch/*, tmp, hlead = 0, hvowel = 0, htail = 0*/; | ||
140 | /*bool hangul = false;*/ | ||
141 | unsigned char *utf8; | ||
142 | const unsigned char *p; | ||
143 | bool cur_blink = true; | ||
144 | int char_screen = 0; | ||
145 | |||
146 | FOR_NB_SCREENS(l) | ||
147 | { | ||
148 | param[l].default_kbd = | ||
149 | "1234567890\n" | ||
150 | "qwertyuiop\n" | ||
151 | "asdfghjkl\n" | ||
152 | "zxcvbnm\n" | ||
153 | "S\n" | ||
154 | "E"; | ||
155 | |||
156 | param[l].DEFAULT_LINES = 7; | ||
157 | } | ||
158 | |||
159 | char outline[256]; | ||
160 | int button, lastbutton = 0; | ||
161 | FOR_NB_SCREENS(l) | ||
162 | { | ||
163 | /* Copy default keyboard to buffer */ | ||
164 | i = 0; | ||
165 | param[l].curfont = FONT_SYSFIXED; | ||
166 | p = param[l].default_kbd; | ||
167 | while (*p != 0) | ||
168 | p = rb->utf8decode(p, ¶m[l].kbd_buf[i++]); | ||
169 | param[l].nchars = i; | ||
170 | /* param[l].curfont = FONT_UI;*/ | ||
171 | } | ||
172 | FOR_NB_SCREENS(l) | ||
173 | { | ||
174 | param[l].font = rb->font_get(param[l].curfont); | ||
175 | param[l].font_h = param[l].font->height; | ||
176 | |||
177 | /* check if FONT_UI fits the screen */ | ||
178 | if (2*param[l].font_h+3 + BUTTONBAR_HEIGHT > rb->screens[l]->height) { | ||
179 | param[l].font = rb->font_get(FONT_SYSFIXED); | ||
180 | param[l].font_h = param[l].font->height; | ||
181 | param[l].curfont = FONT_SYSFIXED; | ||
182 | } | ||
183 | |||
184 | rb->screens[l]->setfont(param[l].curfont); | ||
185 | /* find max width of keyboard glyphs */ | ||
186 | for (i=0; i<param[l].nchars; i++) { | ||
187 | w = rb->font_get_width(param[l].font, param[l].kbd_buf[i]); | ||
188 | if (w > param[l].font_w) | ||
189 | param[l].font_w = w; | ||
190 | } | ||
191 | /* Since we're going to be adding spaces, make sure that we check | ||
192 | * their width too */ | ||
193 | w = rb->font_get_width( param[l].font, ' ' ); | ||
194 | if( w > param[l].font_w ) | ||
195 | param[l].font_w = w; | ||
196 | } | ||
197 | FOR_NB_SCREENS(l) | ||
198 | { | ||
199 | i = 0; | ||
200 | /* Pad lines with spaces */ | ||
201 | while( i < param[l].nchars ) | ||
202 | { | ||
203 | if( param[l].kbd_buf[i] == '\n' ) | ||
204 | { | ||
205 | k = ( rb->screens[l]->width / param[l].font_w ) | ||
206 | - i % ( rb->screens[l]->width / param[l].font_w ) - 1; | ||
207 | if( k == ( rb->screens[l]->width / param[l].font_w ) - 1 ) | ||
208 | { | ||
209 | param[l].nchars--; | ||
210 | for( j = i; j < param[l].nchars; j++ ) | ||
211 | { | ||
212 | param[l].kbd_buf[j] = param[l].kbd_buf[j+1]; | ||
213 | } | ||
214 | } | ||
215 | else | ||
216 | { | ||
217 | if( param[l].nchars + k - 1 >= KBD_BUF_SIZE ) | ||
218 | { /* We don't want to overflow the buffer */ | ||
219 | k = KBD_BUF_SIZE - param[l].nchars; | ||
220 | } | ||
221 | for( j = param[l].nchars + k - 1; j > i+k; j-- ) | ||
222 | { | ||
223 | param[l].kbd_buf[j] = param[l].kbd_buf[j-k]; | ||
224 | } | ||
225 | param[l].nchars += k; | ||
226 | k++; | ||
227 | while( k-- ) | ||
228 | { | ||
229 | param[l].kbd_buf[i++] = ' '; | ||
230 | } | ||
231 | } | ||
232 | } | ||
233 | else | ||
234 | i++; | ||
235 | } | ||
236 | } | ||
237 | |||
238 | /* find max width for text string */ | ||
239 | utf8 = text; | ||
240 | FOR_NB_SCREENS(l) | ||
241 | { | ||
242 | text_w = param[l].font_w; | ||
243 | while (*utf8) { | ||
244 | utf8 = (unsigned char*)rb->utf8decode(utf8, &ch); | ||
245 | w = rb->font_get_width(param[l].font, ch); | ||
246 | if (w > text_w) | ||
247 | text_w = w; | ||
248 | } | ||
249 | param[l].max_chars_text = rb->screens[l]->width / text_w - 2; | ||
250 | |||
251 | /* calculate keyboard grid size */ | ||
252 | param[l].max_chars = rb->screens[l]->width / param[l].font_w; | ||
253 | if (!kbd_loaded) { | ||
254 | param[l].lines = param[l].DEFAULT_LINES; | ||
255 | param[l].keyboard_margin = DEFAULT_MARGIN; | ||
256 | } else { | ||
257 | param[l].lines = (rb->screens[l]->height - BUTTONBAR_HEIGHT - statusbar_size) / param[l].font_h - 1; | ||
258 | param[l].keyboard_margin = rb->screens[l]->height - BUTTONBAR_HEIGHT - | ||
259 | statusbar_size - (param[l].lines+1)*param[l].font_h; | ||
260 | if (param[l].keyboard_margin < 3) { | ||
261 | param[l].lines--; | ||
262 | param[l].keyboard_margin += param[l].font_h; | ||
263 | } | ||
264 | if (param[l].keyboard_margin > 6) | ||
265 | param[l].keyboard_margin = 6; | ||
266 | } | ||
267 | |||
268 | param[l].pages = (param[l].nchars + (param[l].lines*param[l].max_chars-1)) | ||
269 | /(param[l].lines*param[l].max_chars); | ||
270 | if (param[l].pages == 1 && kbd_loaded) | ||
271 | param[l].lines = (param[l].nchars + param[l].max_chars - 1) / param[l].max_chars; | ||
272 | |||
273 | param[l].main_y = param[l].font_h*param[l].lines + param[l].keyboard_margin + statusbar_size; | ||
274 | param[l].main_x = 0; | ||
275 | param[l].keyboard_margin -= param[l].keyboard_margin/2; | ||
276 | |||
277 | } | ||
278 | editpos = rb->utf8length(text); | ||
279 | |||
280 | |||
281 | |||
282 | while(!done) | ||
283 | { | ||
284 | len_utf8 = rb->utf8length(text); | ||
285 | FOR_NB_SCREENS(l) | ||
286 | rb->screens[l]->clear_display(); | ||
287 | |||
288 | |||
289 | /* draw page */ | ||
290 | FOR_NB_SCREENS(l) | ||
291 | { | ||
292 | rb->screens[l]->setfont(param[l].curfont); | ||
293 | k = param[l].page*param[l].max_chars*param[l].lines; | ||
294 | for (i=j=0; j < param[l].lines && k < param[l].nchars; k++) { | ||
295 | utf8 = rb->utf8encode(param[l].kbd_buf[k], outline); | ||
296 | *utf8 = 0; | ||
297 | rb->screens[l]->getstringsize(outline, &w, NULL); | ||
298 | rb->screens[l]->putsxy(i*param[l].font_w + (param[l].font_w-w)/2, j*param[l].font_h | ||
299 | + statusbar_size, outline); | ||
300 | if (++i == param[l].max_chars) { | ||
301 | i = 0; | ||
302 | j++; | ||
303 | } | ||
304 | } | ||
305 | } | ||
306 | |||
307 | |||
308 | /* separator */ | ||
309 | FOR_NB_SCREENS(l) | ||
310 | { | ||
311 | rb->screens[l]->hline(0, rb->screens[l]->width - 1, param[l].main_y - param[l].keyboard_margin); | ||
312 | |||
313 | /* write out the text */ | ||
314 | #if 0 | ||
315 | rb->screens[l]->setfont(param[l].curfont); | ||
316 | |||
317 | i=j=0; | ||
318 | param[l].curpos = MIN(editpos, param[l].max_chars_text | ||
319 | - MIN(len_utf8 - editpos, 2)); | ||
320 | param[l].leftpos = editpos - param[l].curpos; | ||
321 | utf8 = text + rb->utf8seek(text, param[l].leftpos); | ||
322 | |||
323 | text_w = param[l].font_w; | ||
324 | while (*utf8 && i < param[l].max_chars_text) { | ||
325 | outline[j++] = *utf8++; | ||
326 | if ((*utf8 & MASK) != COMP) { | ||
327 | outline[j] = 0; | ||
328 | j=0; | ||
329 | i++; | ||
330 | rb->screens[l]->getstringsize(outline, &w, NULL); | ||
331 | rb->screens[l]->putsxy(i*text_w + (text_w-w)/2, param[l].main_y, outline); | ||
332 | } | ||
333 | } | ||
334 | |||
335 | if (param[l].leftpos) { | ||
336 | rb->screens[l]->getstringsize("<", &w, NULL); | ||
337 | rb->screens[l]->putsxy(text_w - w, param[l].main_y, "<"); | ||
338 | } | ||
339 | if (len_utf8 - param[l].leftpos > param[l].max_chars_text) | ||
340 | rb->screens[l]->putsxy(rb->screens[l]->width - text_w, param[l].main_y, ">"); | ||
341 | |||
342 | /* cursor */ | ||
343 | i = (param[l].curpos + 1) * text_w; | ||
344 | if (cur_blink) | ||
345 | rb->screens[l]->vline(i, param[l].main_y, param[l].main_y + param[l].font_h-1); | ||
346 | |||
347 | if (hangul) /* draw underbar */ | ||
348 | rb->screens[l]->hline(param[l].curpos*text_w, (param[l].curpos+1)*text_w, | ||
349 | param[l].main_y+param[l].font_h-1); | ||
350 | #endif | ||
351 | } | ||
352 | cur_blink = !cur_blink; | ||
353 | |||
354 | |||
355 | /* highlight the key that has focus */ | ||
356 | FOR_NB_SCREENS(l) | ||
357 | { | ||
358 | rb->screens[l]->set_drawmode(DRMODE_COMPLEMENT); | ||
359 | rb->screens[l]->fillrect(param[l].font_w * param[l].x, | ||
360 | statusbar_size + param[l].font_h * param[l].y, | ||
361 | param[l].font_w, param[l].font_h); | ||
362 | rb->screens[l]->set_drawmode(DRMODE_SOLID); | ||
363 | } | ||
364 | |||
365 | |||
366 | /* gui_syncstatusbar_draw(&statusbars, true);*/ | ||
367 | FOR_NB_SCREENS(l) | ||
368 | rb->screens[l]->update(); | ||
369 | |||
370 | button = rb->button_get_w_tmo(HZ/2); | ||
371 | |||
372 | switch ( button ) { | ||
373 | |||
374 | case KBD_ABORT: | ||
375 | FOR_NB_SCREENS(l) | ||
376 | rb->screens[l]->setfont(FONT_UI); | ||
377 | |||
378 | return -1; | ||
379 | break; | ||
380 | |||
381 | case KBD_RIGHT: | ||
382 | case KBD_RIGHT | BUTTON_REPEAT: | ||
383 | { | ||
384 | FOR_NB_SCREENS(l) | ||
385 | { | ||
386 | if (++param[l].x == param[l].max_chars) { | ||
387 | param[l].x = 0; | ||
388 | /* no dedicated flip key - flip page on wrap */ | ||
389 | if (++param[l].page == param[l].pages) | ||
390 | param[l].page = 0; | ||
391 | } | ||
392 | k = (param[l].page*param[l].lines + param[l].y)*param[l].max_chars + param[l].x; | ||
393 | /*kbd_spellchar(param[l].kbd_buf[k]);*/ | ||
394 | } | ||
395 | } | ||
396 | break; | ||
397 | case KBD_LEFT: | ||
398 | case KBD_LEFT | BUTTON_REPEAT: | ||
399 | { | ||
400 | FOR_NB_SCREENS(l) | ||
401 | { | ||
402 | if (param[l].x) | ||
403 | param[l].x--; | ||
404 | else | ||
405 | { | ||
406 | /* no dedicated flip key - flip page on wrap */ | ||
407 | if (--param[l].page < 0) | ||
408 | param[l].page = (param[l].pages-1); | ||
409 | param[l].x = param[l].max_chars - 1; | ||
410 | } | ||
411 | k = (param[l].page*param[l].lines + | ||
412 | param[l].y)*param[l].max_chars + param[l].x; | ||
413 | /* kbd_spellchar(param[l].kbd_buf[k]);*/ | ||
414 | } | ||
415 | } | ||
416 | break; | ||
417 | |||
418 | case KBD_DOWN: | ||
419 | case KBD_DOWN | BUTTON_REPEAT: | ||
420 | { | ||
421 | FOR_NB_SCREENS(l) | ||
422 | { | ||
423 | if (param[l].y < param[l].lines - 1) | ||
424 | param[l].y++; | ||
425 | else | ||
426 | param[l].y=0; | ||
427 | } | ||
428 | FOR_NB_SCREENS(l) | ||
429 | { | ||
430 | k = (param[l].page*param[l].lines + param[l].y)* | ||
431 | param[l].max_chars + param[l].x; | ||
432 | /*kbd_spellchar(param[l].kbd_buf[k]);*/ | ||
433 | } | ||
434 | } | ||
435 | break; | ||
436 | |||
437 | case KBD_UP: | ||
438 | case KBD_UP | BUTTON_REPEAT: | ||
439 | { | ||
440 | FOR_NB_SCREENS(l) | ||
441 | { | ||
442 | if (param[l].y) | ||
443 | param[l].y--; | ||
444 | else | ||
445 | param[l].y = param[l].lines - 1; | ||
446 | } | ||
447 | FOR_NB_SCREENS(l) | ||
448 | { | ||
449 | k = (param[l].page*param[l].lines + param[l].y)* | ||
450 | param[l].max_chars + param[l].x; | ||
451 | /*kbd_spellchar(param[l].kbd_buf[k]);*/ | ||
452 | } | ||
453 | } | ||
454 | break; | ||
455 | |||
456 | case KBD_SELECT: | ||
457 | { | ||
458 | if (button == KBD_SELECT) | ||
459 | char_screen = 0; | ||
460 | |||
461 | /* inserts the selected char */ | ||
462 | |||
463 | /* find input char */ | ||
464 | k = (param[char_screen].page*param[char_screen].lines + | ||
465 | param[char_screen].y)*param[char_screen].max_chars + | ||
466 | param[char_screen].x; | ||
467 | if (k < param[char_screen].nchars) | ||
468 | ch = param[char_screen].kbd_buf[k]; | ||
469 | else | ||
470 | ch = ' '; | ||
471 | text[0]=ch; | ||
472 | done = true; | ||
473 | } | ||
474 | break; | ||
475 | |||
476 | case BUTTON_NONE: | ||
477 | /*gui_syncstatusbar_draw(&statusbars, false);*/ | ||
478 | |||
479 | break; | ||
480 | |||
481 | default: | ||
482 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
483 | FOR_NB_SCREENS(l) | ||
484 | rb->screens[l]->setfont(FONT_SYSFIXED); | ||
485 | break; | ||
486 | |||
487 | } | ||
488 | if (button != BUTTON_NONE) | ||
489 | { | ||
490 | lastbutton = button; | ||
491 | cur_blink = true; | ||
492 | } | ||
493 | } | ||
494 | FOR_NB_SCREENS(l) | ||
495 | rb->screens[l]->setfont(FONT_UI); | ||
496 | return 0; | ||
497 | } | ||
diff --git a/apps/plugins/zxbox/zxbox_keyb.h b/apps/plugins/zxbox/zxbox_keyb.h new file mode 100644 index 0000000000..7a62ab0e96 --- /dev/null +++ b/apps/plugins/zxbox/zxbox_keyb.h | |||
@@ -0,0 +1 @@ | |||
int zx_kbd_input(char* text/*, int buflen*/); | |||
diff --git a/apps/plugins/zxbox/zxconfig.h b/apps/plugins/zxbox/zxconfig.h new file mode 100644 index 0000000000..e28dc5d6b7 --- /dev/null +++ b/apps/plugins/zxbox/zxconfig.h | |||
@@ -0,0 +1,61 @@ | |||
1 | #ifndef ZXCONFIG_H | ||
2 | #define ZXCONFIG_H | ||
3 | |||
4 | #include <plugin.h> | ||
5 | extern int load_tap; | ||
6 | extern bool clear_kbd; | ||
7 | extern bool exit_requested; | ||
8 | extern struct plugin_api* rb; | ||
9 | extern void press_key(int c); | ||
10 | extern long video_frames; | ||
11 | extern long start_time; | ||
12 | extern int intkeys[5]; | ||
13 | |||
14 | #define ZX_WIDTH 256 | ||
15 | #define ZX_HEIGHT 192 | ||
16 | |||
17 | #define SETTINGS_MIN_VERSION 2 | ||
18 | #define SETTINGS_VERSION 2 | ||
19 | |||
20 | /* undef not to use grayscale lib */ | ||
21 | #if !defined HAVE_LCD_COLOR && LCD_PIXELFORMAT != HORIZONTAL_PACKING | ||
22 | #define USE_GRAY | ||
23 | #define USE_BUFFERED_GRAY | ||
24 | #endif | ||
25 | |||
26 | |||
27 | #define Z80C | ||
28 | #define MULTIUSER 0 | ||
29 | #define DATADIR "." | ||
30 | |||
31 | /* Always define this for the spectrum emulator. */ | ||
32 | #define SPECT_MEM 1 | ||
33 | |||
34 | /* Define if sound driver is available. */ | ||
35 | #if CONFIG_CODEC == SWCODEC && !defined SIMULATOR | ||
36 | #define HAVE_SOUND | ||
37 | #endif | ||
38 | |||
39 | /* Define this to use the inline intel assembly sections */ | ||
40 | #undef I386_ASM | ||
41 | |||
42 | /* Define this to use an alternative way of passing the z80 processor | ||
43 | data to the z80 instruction emulation functions. May make emulation | ||
44 | faster on some machines, but not on intel, and sparc. */ | ||
45 | #undef PROCP /* seems not to have effect on arm targets */ | ||
46 | /* #define PROCP */ | ||
47 | |||
48 | /* Define to empty if the keyword does not work. */ | ||
49 | /* #undef const */ | ||
50 | |||
51 | /* Define to `unsigned' if <sys/types.h> doesn't define. */ | ||
52 | /* #undef size_t */ | ||
53 | |||
54 | /* Define if you have the ANSI C header files. */ | ||
55 | #define STDC_HEADERS 1 | ||
56 | |||
57 | /* Define if your processor stores words with the most significant | ||
58 | byte first (like Motorola and SPARC, unlike Intel and VAX). */ | ||
59 | /* #undef WORDS_BIGENDIAN */ | ||
60 | |||
61 | #endif | ||
diff --git a/apps/plugins/zxbox/zxvid_16bpp.c b/apps/plugins/zxbox/zxvid_16bpp.c new file mode 100644 index 0000000000..235efcbcb2 --- /dev/null +++ b/apps/plugins/zxbox/zxvid_16bpp.c | |||
@@ -0,0 +1,99 @@ | |||
1 | #include "zxvid_com.h" | ||
2 | |||
3 | #if LCD_DEPTH > 4 | ||
4 | /* screen routines for color targets */ | ||
5 | |||
6 | /* | ||
7 | use for slightly different colors | ||
8 | #define N0 0x04 | ||
9 | #define N1 0x34 | ||
10 | |||
11 | #define B0 0x08 | ||
12 | #define B1 0x3F | ||
13 | */ | ||
14 | |||
15 | #define N0 0x00 | ||
16 | #define N1 0xAA | ||
17 | |||
18 | #define B0 0x55 | ||
19 | #define B1 0xFF | ||
20 | struct rgb norm_colors[COLORNUM]={ | ||
21 | {0,0,0},{N0,N0,N1},{N1,N0,N0},{N1,N0,N1}, | ||
22 | {N0,N1,N0},{N0,N1,N1},{N1,N1,N0},{N1,N1,N1}, | ||
23 | |||
24 | {0x15,0x15,0x15},{B0,B0,B1},{B1,B0,B0},{B1,B0,B1}, | ||
25 | {B0,B1,B0},{B0,B1,B1},{B1,B1,B0},{B1,B1,B1} | ||
26 | }; | ||
27 | |||
28 | |||
29 | /* since emulator uses array of bytes for screen representation | ||
30 | * short 16b colors won't fit there */ | ||
31 | short _16bpp_colors[16] IBSS_ATTR; | ||
32 | |||
33 | void init_spect_scr(void) | ||
34 | { | ||
35 | int i; | ||
36 | |||
37 | for(i = 0; i < 16; i++) | ||
38 | sp_colors[i] = i; | ||
39 | for(i = 0; i < 16; i++) | ||
40 | _16bpp_colors[i] = LCD_RGBPACK(norm_colors[i].r,norm_colors[i].g,norm_colors[i].b); | ||
41 | if ( settings.invert_colors ){ | ||
42 | for ( i = 0 ; i < 16 ; i++ ) | ||
43 | _16bpp_colors[i] = 0xFFFFFF - _16bpp_colors[i]; | ||
44 | } | ||
45 | sp_image = (char *) &image_array; | ||
46 | spscr_init_mask_color(); | ||
47 | spscr_init_line_pointers(HEIGHT); | ||
48 | |||
49 | } | ||
50 | |||
51 | void update_screen(void) | ||
52 | { | ||
53 | char str[80]; | ||
54 | fb_data *frameb; | ||
55 | |||
56 | int y=0; | ||
57 | |||
58 | #if LCD_HEIGHT >= ZX_HEIGHT && LCD_WIDTH >= ZX_WIDTH | ||
59 | byte *scrptr; | ||
60 | scrptr = (byte *) SPNM(image); | ||
61 | frameb = rb->lcd_framebuffer; | ||
62 | for ( y = 0 ; y < HEIGHT*WIDTH; y++ ){ | ||
63 | frameb[y] = _16bpp_colors[(unsigned)sp_image[y]]; | ||
64 | } | ||
65 | |||
66 | #else | ||
67 | int x=0; | ||
68 | int srcx, srcy=0; /* x / y coordinates in source image */ | ||
69 | unsigned char* image; | ||
70 | image = sp_image + ( (Y_OFF)*(WIDTH) ) + X_OFF; | ||
71 | frameb = rb->lcd_framebuffer; | ||
72 | for(y = 0; y < LCD_HEIGHT; y++) | ||
73 | { | ||
74 | srcx = 0; /* reset our x counter before each row... */ | ||
75 | for(x = 0; x < LCD_WIDTH; x++) | ||
76 | { | ||
77 | *frameb = _16bpp_colors[image[srcx>>16]]; | ||
78 | srcx += X_STEP; /* move through source image */ | ||
79 | frameb++; | ||
80 | } | ||
81 | srcy += Y_STEP; /* move through the source image... */ | ||
82 | image += (srcy>>16)*WIDTH; /* and possibly to the next row. */ | ||
83 | srcy &= 0xffff; /* set up the y-coordinate between 0 and 1 */ | ||
84 | } | ||
85 | |||
86 | #endif | ||
87 | if ( settings.showfps ) { | ||
88 | int percent=0; | ||
89 | int TPF = HZ/50;/* ticks per frame */ | ||
90 | if ((*rb->current_tick-start_time) > TPF ) | ||
91 | percent = 100*video_frames/((*rb->current_tick-start_time)/TPF); | ||
92 | rb->snprintf(str,sizeof(str),"%d %%",percent); | ||
93 | rb->lcd_putsxy(0,0,str); | ||
94 | } | ||
95 | rb -> lcd_update(); | ||
96 | } | ||
97 | |||
98 | |||
99 | #endif /* HAVE_LCD_COLOR */ | ||
diff --git a/apps/plugins/zxbox/zxvid_4bpp.c b/apps/plugins/zxbox/zxvid_4bpp.c new file mode 100644 index 0000000000..e9943d9571 --- /dev/null +++ b/apps/plugins/zxbox/zxvid_4bpp.c | |||
@@ -0,0 +1,81 @@ | |||
1 | #include "zxvid_com.h" | ||
2 | |||
3 | #if !defined USE_GRAY && LCD_PIXELFORMAT == HORIZONTAL_PACKING && LCD_DEPTH < 4 | ||
4 | /* screen routines for greyscale targets not using greyscale lib */ | ||
5 | #define FB_WIDTH ((LCD_WIDTH+3)/4) | ||
6 | unsigned char pixmask[4] ICONST_ATTR = { | ||
7 | 0xC0, 0x30, 0x0C, 0x03 | ||
8 | }; | ||
9 | |||
10 | void init_spect_scr(void) | ||
11 | { | ||
12 | sp_colors[0] = 0;/* BLACK ? */ | ||
13 | sp_colors[1] = 1;/* BLUE ? */ | ||
14 | sp_colors[2] = 1;/* RED ? */ | ||
15 | sp_colors[3] = 1;/* MAGENTA ? */ | ||
16 | sp_colors[4] = 2;/* GREEN ? */ | ||
17 | sp_colors[5] = 2;/* CYAN ? */ | ||
18 | sp_colors[6] = 3;/* YELLOW ? */ | ||
19 | sp_colors[7] = 3;/* WHITE ? */ | ||
20 | |||
21 | /* same but 'light/bright' colors */ | ||
22 | sp_colors[8] = 1; | ||
23 | sp_colors[9] = 1; | ||
24 | sp_colors[10] = 1; | ||
25 | sp_colors[11] = 1; | ||
26 | sp_colors[12] = 2; | ||
27 | sp_colors[13] = 2; | ||
28 | sp_colors[14] = 3; | ||
29 | sp_colors[15] = 3; | ||
30 | |||
31 | if ( !settings.invert_colors ){ | ||
32 | int i; | ||
33 | for ( i = 0 ; i < 16 ; i++ ) | ||
34 | sp_colors[i] = 3 - sp_colors[i]; | ||
35 | } | ||
36 | sp_image = (char *) &image_array; | ||
37 | spscr_init_mask_color(); | ||
38 | spscr_init_line_pointers(HEIGHT); | ||
39 | |||
40 | } | ||
41 | void update_screen(void) | ||
42 | { | ||
43 | char str[80]; | ||
44 | |||
45 | fb_data *frameb; | ||
46 | int y=0; | ||
47 | int x=0; | ||
48 | unsigned char* image; | ||
49 | int srcx, srcy=0; /* x / y coordinates in source image */ | ||
50 | image = sp_image + ( (Y_OFF)*(WIDTH) ) + X_OFF; | ||
51 | unsigned mask; | ||
52 | |||
53 | for(y = 0; y < LCD_HEIGHT; y++) | ||
54 | { | ||
55 | frameb = rb->lcd_framebuffer + (y) * FB_WIDTH; | ||
56 | srcx = 0; /* reset our x counter before each row... */ | ||
57 | for(x = 0; x < LCD_WIDTH; x++) | ||
58 | { | ||
59 | mask = pixmask[x & 3]; | ||
60 | frameb[x >> 2] = (frameb[x >> 2] & ~mask) | ((image[(srcx>>16)]&0x3) << ((3-(x & 3 )) * 2 )); | ||
61 | srcx += X_STEP; /* move through source image */ | ||
62 | } | ||
63 | srcy += Y_STEP; /* move through the source image... */ | ||
64 | image += (srcy>>16)*WIDTH; /* and possibly to the next row. */ | ||
65 | srcy &= 0xffff; /* set up the y-coordinate between 0 and 1 */ | ||
66 | } | ||
67 | |||
68 | if ( settings.showfps ) { | ||
69 | int percent=0; | ||
70 | int TPF = HZ/50;/* ticks per frame */ | ||
71 | if ((*rb->current_tick-start_time) > TPF ) | ||
72 | percent = 100*video_frames/((*rb->current_tick-start_time)/TPF); | ||
73 | rb->snprintf(str,sizeof(str),"%d %%",percent); | ||
74 | rb->lcd_putsxy(0,0,str); | ||
75 | } | ||
76 | |||
77 | |||
78 | rb -> lcd_update(); | ||
79 | } | ||
80 | |||
81 | #endif | ||
diff --git a/apps/plugins/zxbox/zxvid_com.h b/apps/plugins/zxbox/zxvid_com.h new file mode 100644 index 0000000000..0483251b96 --- /dev/null +++ b/apps/plugins/zxbox/zxvid_com.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef ZXVIDCOMMON_H | ||
2 | #define ZXVIDCOMMON_H | ||
3 | #include "zxconfig.h" | ||
4 | |||
5 | #ifdef USE_GRAY | ||
6 | #include "../lib/gray.h" | ||
7 | #endif | ||
8 | |||
9 | #include "spscr_p.h" | ||
10 | #include "spmain.h" | ||
11 | #include "spperif.h" | ||
12 | |||
13 | #if LCD_HEIGHT >= ZX_HEIGHT && LCD_WIDTH >= ZX_WIDTH | ||
14 | #define WIDTH LCD_WIDTH | ||
15 | #define HEIGHT LCD_HEIGHT | ||
16 | #else | ||
17 | #define WIDTH 320 /* 256 */ | ||
18 | #define HEIGHT 200 /* 192 */ | ||
19 | #define X_OFF ( (WIDTH - ZX_WIDTH)/2) | ||
20 | #define Y_OFF ( (HEIGHT - ZX_HEIGHT)/2) | ||
21 | /* calculate distance (in source) between pixels*/ | ||
22 | #define X_STEP ((ZX_WIDTH<<16) / LCD_WIDTH) | ||
23 | #define Y_STEP ((ZX_HEIGHT<<16) / LCD_HEIGHT) | ||
24 | #endif | ||
25 | |||
26 | extern unsigned char image_array [ HEIGHT * WIDTH ]; | ||
27 | |||
28 | #endif /* ZXVIDCOMMON_H */ | ||
diff --git a/apps/plugins/zxbox/zxvid_grey.c b/apps/plugins/zxbox/zxvid_grey.c new file mode 100644 index 0000000000..8491e6bf18 --- /dev/null +++ b/apps/plugins/zxbox/zxvid_grey.c | |||
@@ -0,0 +1,97 @@ | |||
1 | #include "zxvid_com.h" | ||
2 | #if !defined HAVE_LCD_COLOR && defined USE_GRAY | ||
3 | /* | ||
4 | use for slightly different colors | ||
5 | #define N0 0x04 | ||
6 | #define N1 0x34 | ||
7 | |||
8 | #define B0 0x08 | ||
9 | #define B1 0x3F | ||
10 | */ | ||
11 | |||
12 | /* these ones are the same as for color targets ... may be tweak for greyscale? */ | ||
13 | #define N0 0x00 | ||
14 | #define N1 0xAA | ||
15 | |||
16 | #define B0 0x55 | ||
17 | #define B1 0xFF | ||
18 | static unsigned char graybuffer[LCD_HEIGHT*LCD_WIDTH] IBSS_ATTR; /* off screen buffer */ | ||
19 | |||
20 | struct rgb norm_colors[COLORNUM]={ | ||
21 | {0,0,0},{N0,N0,N1},{N1,N0,N0},{N1,N0,N1}, | ||
22 | {N0,N1,N0},{N0,N1,N1},{N1,N1,N0},{N1,N1,N1}, | ||
23 | |||
24 | {0x15,0x15,0x15},{B0,B0,B1},{B1,B0,B0},{B1,B0,B1}, | ||
25 | {B0,B1,B0},{B0,B1,B1},{B1,B1,B0},{B1,B1,B1} | ||
26 | }; | ||
27 | |||
28 | void init_spect_scr(void) | ||
29 | { | ||
30 | int i; | ||
31 | for(i = 0; i < 16; i++) | ||
32 | sp_colors[i] = 0.3*norm_colors[i].r + 0.59*norm_colors[i].g + 0.11*norm_colors[i].b; | ||
33 | if ( settings.invert_colors ){ | ||
34 | int i; | ||
35 | for ( i = 0 ; i < 16 ; i++ ) | ||
36 | sp_colors[i] = 255 - sp_colors[i]; | ||
37 | } | ||
38 | |||
39 | sp_image = (char *) &image_array; | ||
40 | spscr_init_mask_color(); | ||
41 | spscr_init_line_pointers(HEIGHT); | ||
42 | } | ||
43 | |||
44 | |||
45 | void update_screen(void) | ||
46 | { | ||
47 | char str[80]; | ||
48 | |||
49 | int y=0; | ||
50 | int x=0; | ||
51 | unsigned char* image; | ||
52 | int srcx, srcy=0; /* x / y coordinates in source image */ | ||
53 | image = sp_image + ( (Y_OFF)*(WIDTH) ) + X_OFF; | ||
54 | unsigned char* buf_ptr; | ||
55 | buf_ptr = (unsigned char*) &graybuffer; | ||
56 | for(y = 0; y < LCD_HEIGHT; y++) | ||
57 | { | ||
58 | srcx = 0; /* reset our x counter before each row... */ | ||
59 | for(x = 0; x < LCD_WIDTH; x++) | ||
60 | { | ||
61 | *buf_ptr=image[(srcx>>16)]; | ||
62 | srcx += X_STEP; /* move through source image */ | ||
63 | buf_ptr++; | ||
64 | } | ||
65 | srcy += Y_STEP; /* move through the source image... */ | ||
66 | image += (srcy>>16)*WIDTH; /* and possibly to the next row. */ | ||
67 | srcy &= 0xffff; /* set up the y-coordinate between 0 and 1 */ | ||
68 | } | ||
69 | |||
70 | #ifdef USE_BUFFERED_GRAY | ||
71 | gray_gray_bitmap(graybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT); | ||
72 | #endif | ||
73 | |||
74 | if ( settings.showfps ) { | ||
75 | int percent=0; | ||
76 | int TPF = HZ/50;/* ticks per frame */ | ||
77 | if ((*rb->current_tick-start_time) > TPF ) | ||
78 | percent = 100*video_frames/((*rb->current_tick-start_time)/TPF); | ||
79 | rb->snprintf(str,sizeof(str),"%d %%",percent); | ||
80 | #if defined USE_BUFFERED_GRAY | ||
81 | gray_putsxy(0,0,str); | ||
82 | #else | ||
83 | LOGF(str); | ||
84 | #endif | ||
85 | |||
86 | } | ||
87 | |||
88 | |||
89 | #if defined USE_BUFFERED_GRAY | ||
90 | gray_update(); | ||
91 | #else | ||
92 | gray_ub_gray_bitmap(graybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT); | ||
93 | #endif | ||
94 | |||
95 | } | ||
96 | |||
97 | #endif | ||