├── .DS_Store ├── ._.DS_Store ├── ._README.md ├── README.md └── firmware ├── .DS_Store ├── ._LICENSE-gpl-3.0.txt ├── ._README.txt ├── ._SDISKII-OLED firmware upgrade instructions.txt ├── ._SDISKII.CFG ├── ._avrdude.conf ├── ._sdiskII_original_mod_nokia.jpg ├── ._sdiskii_original.jpg ├── ._sdiskii_original.pdf ├── ._sdiskii_original_mod_nokia.pdf ├── FlashOled.bat.bat ├── LICENSE-gpl-3.0.txt ├── README.txt ├── SDISKII-OLED firmware upgrade instructions.txt ├── SDISKII.CFG ├── avrdude.conf ├── sdiskII_original_mod_nokia.jpg ├── sdiskii_original.jpg ├── sdiskii_original.pdf ├── sdiskii_original_mod_nokia.pdf └── src ├── .DS_Store ├── ._.DS_Store ├── ._FAT32.c ├── ._SPI_routines.c ├── ._charset.h ├── ._i2c.h ├── ._logo.h ├── ._oled.c ├── ._oled.h ├── ._sub.S ├── FAT32.c ├── FAT32.h ├── SD_routines.c ├── SD_routines.h ├── SPI_routines.c ├── SPI_routines.h ├── charset.h ├── config.h ├── i2c.h ├── lcd.c ├── lcd.h ├── lcd_nokia.c ├── lcd_nokia.h ├── logo.h ├── main.c ├── main.h ├── make25novo.bat ├── oled.c ├── oled.h ├── sdisk2_oled.hex ├── sdisk2_original.hex ├── sdisk2_original_mod_nokia.hex └── sub.S /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/.DS_Store -------------------------------------------------------------------------------- /._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/._.DS_Store -------------------------------------------------------------------------------- /._README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/._README.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SDisk2 2 | SD card interface for Apple 2 computers 3 | 4 | # Authors 5 | * (c) 2010 Koichi NISHIDA 6 | * (c) 2012 Victor Trucco 7 | * (c) 2012 Fábio Belavenuto 8 | * (c) 2015 Alexandre Suaide 9 | 10 | # License 11 | This work is released under the version 3 of the GNU General Public License. 12 | 13 | '''NOTE:''' 14 | The current legal status of this code is uncertain. 15 | 16 | Fábio and Alexandre have published files with a header that references the version 3 of the GNU General Public License, but it is not clear yet what's the licensing chosen by the original author, Koichi Nishida. 17 | 18 | This repository will be updated once the actual licensing info is clarified by the authors. 19 | -------------------------------------------------------------------------------- /firmware/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/.DS_Store -------------------------------------------------------------------------------- /firmware/._LICENSE-gpl-3.0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._LICENSE-gpl-3.0.txt -------------------------------------------------------------------------------- /firmware/._README.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._README.txt -------------------------------------------------------------------------------- /firmware/._SDISKII-OLED firmware upgrade instructions.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._SDISKII-OLED firmware upgrade instructions.txt -------------------------------------------------------------------------------- /firmware/._SDISKII.CFG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._SDISKII.CFG -------------------------------------------------------------------------------- /firmware/._avrdude.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._avrdude.conf -------------------------------------------------------------------------------- /firmware/._sdiskII_original_mod_nokia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._sdiskII_original_mod_nokia.jpg -------------------------------------------------------------------------------- /firmware/._sdiskii_original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._sdiskii_original.jpg -------------------------------------------------------------------------------- /firmware/._sdiskii_original.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._sdiskii_original.pdf -------------------------------------------------------------------------------- /firmware/._sdiskii_original_mod_nokia.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/._sdiskii_original_mod_nokia.pdf -------------------------------------------------------------------------------- /firmware/FlashOled.bat.bat: -------------------------------------------------------------------------------- 1 | "C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" -C"avrdude.conf" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:.\src\sdisk2_oled.hex:i 2 | pause -------------------------------------------------------------------------------- /firmware/LICENSE-gpl-3.0.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /firmware/README.txt: -------------------------------------------------------------------------------- 1 | SDISKII 2 | ======= 3 | 4 | This package contains a new version of the firmware for the SDISKII with the LCD and 5 | buttons to select the NIC image. 6 | 7 | Images are saved in the card in NIC format. You can convert DSK to NIC and NIC to DSK 8 | using the utility provided by Nishida in his webpage 9 | 10 | http://tulip-house.ddo.jp/digital/SDISK2/english.html 11 | 12 | You can organize your images in subdirectories and you can nest them in as many levels 13 | as you want. In order to save your configuration and keep track of your last mounted 14 | NIC image and directory you need to have the SDISKII.CFG file saved in the top directory 15 | of your SD card. Please use the SDISKII.CFG file provided in this repository. 16 | 17 | FIRMWARE 18 | ======== 19 | 20 | The are 3 compiled versions of this firmware: 21 | 22 | 1. sdisk2_original.hex 23 | 24 | This is the original SDISK II with the 16 x 2 LCD done by Victor Trucco and Fabio 25 | Belavenuto. See sdisk2_original.jpg for a picture of it as sold by Victor Trucco. 26 | 27 | Please note the three buttons in the botton of the sdisk2. They are used for selecting 28 | the disk image and navigation as well as setup of the sdisk. 29 | 30 | The schematics for this version can be found in the file sdisk2_original.pdf 31 | 32 | 2. sdisk2_original_mod_nokia.hex 33 | 34 | Sometime ago I decided to replace the 16x2 LCD with a graphical Nokia 5110 LCD. I used 35 | the same board sold by Victor, took out the original LCD and replaced it by the Nokia 36 | LCD. I used some prototyping board to adapt the Nokia LCD to the original Sdisk. It is 37 | not pretty but it works very well. See sdisk2_original_mod_nokia.jpg for a picture of it. 38 | 39 | This is the original SDISK II hardware done by Victor Trucco and Fabio Belavenuto 40 | with the mod done by Alexandre Suaide in order to replace the 16 x 2 LCD with 41 | the Nokia 5110 graphical display 42 | 43 | the schematics for this version is the same as for original just replacing the 16x2 LCD 44 | in the original version by the Nokia 5110 display. The connections for this display 45 | can be found in the file sdisk2_original_mod_nokia.pdf 46 | 47 | 3. sdisk2_oled.hex 48 | 49 | This is for the second version of the SDISK II done by Victor Trucco already with the 50 | 128 x 64 OLED graphical display and USB connection to update the firmware. 51 | 52 | Photo and schematics for this layout will be posted as soon as the first batch is made and 53 | the firmware is well tested. It will come soon. 54 | 55 | Formatting the SD card 56 | ====================== 57 | 58 | You can use this version of the firmware with standard SD cards as well as with SDHC 59 | cards. You can format them in FAT16 or FAT32 only. The minimum cluster size is 32kB 60 | (or 64 blocks per cluster). In order to formar a SD card, use the command: 61 | 62 | Windows: (use windows 7 or older. Windows 10 does not work) 63 | 64 | format [letter:] /FS:FAT /A:32K 65 | 66 | you can replace FAT by FAT32 67 | 68 | MAC OS/X 69 | 70 | diskutil partitionDisk /dev/[disk name] MBR "MS-DOS FAT16" SDISKII 0b 71 | newfs_msdos -F 16 -c 64 /dev/[disk name] 72 | 73 | you can replace 16 (FAT16) by 32 (FAT32). The same for the partition scheme. 74 | 64 is the number of blocks per cluster and can be larger. 75 | 76 | Linux 77 | 78 | mkfs.msdos -F 16 -s 64 /dev/[disk name] 79 | 80 | you can replace 16 (FAT16) by 32 (FAT32). 64 is the number of blocks per cluster 81 | and can be larger. 82 | 83 | 84 | Selecting NIC image 85 | =================== 86 | 87 | When there is no disk activity (LED off), press the middle button (ENTER). A list 88 | of NIC files in the current directory as well as the subdirectories, will be created. 89 | Navigate through the list using the LEFT and RIGHT buttons. Use the ENTER button to 90 | select a NIC file or a directory. Directories are shown around [ ]. 91 | 92 | Only NIC files are supported. 93 | 94 | Selecting the delay of the SD card 95 | ================================== 96 | 97 | Standard SD and SDHC cards can differ by a large value in terms of speed. In order 98 | to compensate it a little bit the user can set the delay of the card from 1 (small delays) 99 | to 10 (long delays). The default value is 5 and it looks fine for the cards I testes. 100 | If you get a lot of problems reading NIC file, try to change it a little. I noticed 101 | that ProDOS images are more sensitive to this setting than DOS 3.3 images. 102 | 103 | When there is no disk activity (LED off), press the LEFT button. The SDISKII will 104 | prompt you to select the speed of the card. Use the LEFT and RIGHT buttons to 105 | navigate the available speeds and the ENTER (middle) button to select it. 106 | 107 | Swap between two disk images 108 | ============================ 109 | 110 | If you have the SDISKII.CFG file saved in your SD card (see bellow) we keep track of the 111 | previous mounted NIC image. In this case, if you press the RIGHT button we swap the current 112 | mounted NIC with the previous one. This may be useful if you are copying from one image to 113 | another or if you are playing a game that spans over two images. 114 | 115 | Saving the default values and last NIC mounted 116 | ============================================== 117 | 118 | In order to save your configurations (SD card speed and last NIC mounted) you need 119 | to copy the file SDISKII.CFG (provided here) in the root directory of your SD card. 120 | If this file is not present every time you turn on the SDISKII the first found NIC 121 | will be mounted and the speed of the SD card will be set to 5. 122 | 123 | Upgrading your SDISKII with this new firmware 124 | ============================================= 125 | 126 | In order to upgrade your SDISKII with this new firmware you will need a chip programmer, such 127 | as the MiniPro TL866CS. Remove the ATMEGA328P from your SDISKII, plug it in the programmer. 128 | Open the programmer software, load the firmware (sdisk2.hex for the old model with 16x2 LCD 129 | or sdisk2_nokia.hex for the Nokia5110 LCD). 130 | 131 | Check if the fuses are right. The values for the fuses are: 132 | 133 | LFUSE = 0xDE 134 | HFUSE = 0xD9 135 | EFUSE = 0x07 136 | 137 | then program your ATMEGA328P with this new firmware. Put it back to the SDISKII and you are set. 138 | -------------------------------------------------------------------------------- /firmware/SDISKII-OLED firmware upgrade instructions.txt: -------------------------------------------------------------------------------- 1 | Instructions for SDISK (OLED version) firmware update 2 | 3 | 1. First, instal the AVRDUDE 4 | 5 | for Windows 6 | 7 | download the program from http://savannah.nongnu.org/projects/avrdude 8 | 9 | and install it 10 | 11 | for MacOSX do 12 | 13 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null 14 | 15 | brew install avrdude 16 | 17 | for Linux 18 | 19 | check your distribution package manager software 20 | 21 | 2. Install the Pandora LAB CH340 driver (only WINDOWS or MacOSX). Not needed for linux if 22 | you are using a recent kernel 23 | 24 | https://pandoralab.com.br/arduino/driver-ch340-para-arduino/ 25 | 26 | OBS: In the case os Mac OS X Sierra the driver provided by Pandora Lab crashes the kernel. There is an updated 27 | driver with explanation at 28 | 29 | http://www.mblock.cc/docs/run-makeblock-ch340-ch341-on-mac-os-sierra/ 30 | 31 | 3. Upload the firmware using the command 32 | 33 | OBS: You need to remove the SD card from the slot in order to establish the proper connection from the computer to the SDISK ][ 34 | 35 | avrdude -C[config] -v -patmega328p -carduino -P[PORT] -b115200 -D -Uflash:w:[FIRMWARE]:i 36 | 37 | OBS: In some cases you need to leave a blank space between the flag and argument, for example 38 | -patmega328p —> -p atmega328p 39 | 40 | 41 | the arguments are: 42 | 43 | [config] is the avrdude config file (see avrdude.conf in this repository) 44 | 45 | for example, .\avrdude.conf 46 | 47 | [PORT] is the serial port attached to the SDISK II 48 | 49 | for example, in Windows, this could be PORT7 50 | in my case, since I use MacOSX, I got /dev/cu.wchusbserial1420 51 | 52 | [FIRMWARE] is the path to the firmware file 53 | 54 | for example, .\firmware\src\sdisk2_oled.hex 55 | 56 | A full example of the command line, in my computer, using MacOSX Sierra, is 57 | 58 | avrdude -C ../avrdude.conf -v -p atmega328p -c arduino -P /dev/cu.wchusbserial1420 -b 115200 -D -U flash:w:sdisk2_oled.hex:i -------------------------------------------------------------------------------- /firmware/SDISKII.CFG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/SDISKII.CFG -------------------------------------------------------------------------------- /firmware/sdiskII_original_mod_nokia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/sdiskII_original_mod_nokia.jpg -------------------------------------------------------------------------------- /firmware/sdiskii_original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/sdiskii_original.jpg -------------------------------------------------------------------------------- /firmware/sdiskii_original_mod_nokia.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/sdiskii_original_mod_nokia.pdf -------------------------------------------------------------------------------- /firmware/src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/.DS_Store -------------------------------------------------------------------------------- /firmware/src/._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._.DS_Store -------------------------------------------------------------------------------- /firmware/src/._FAT32.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._FAT32.c -------------------------------------------------------------------------------- /firmware/src/._SPI_routines.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._SPI_routines.c -------------------------------------------------------------------------------- /firmware/src/._charset.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._charset.h -------------------------------------------------------------------------------- /firmware/src/._i2c.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._i2c.h -------------------------------------------------------------------------------- /firmware/src/._logo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._logo.h -------------------------------------------------------------------------------- /firmware/src/._oled.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._oled.c -------------------------------------------------------------------------------- /firmware/src/._oled.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._oled.h -------------------------------------------------------------------------------- /firmware/src/._sub.S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/._sub.S -------------------------------------------------------------------------------- /firmware/src/FAT32.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/FAT32.c -------------------------------------------------------------------------------- /firmware/src/FAT32.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/FAT32.h -------------------------------------------------------------------------------- /firmware/src/SD_routines.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/SD_routines.c -------------------------------------------------------------------------------- /firmware/src/SD_routines.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/SD_routines.h -------------------------------------------------------------------------------- /firmware/src/SPI_routines.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/SPI_routines.c -------------------------------------------------------------------------------- /firmware/src/SPI_routines.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/SPI_routines.h -------------------------------------------------------------------------------- /firmware/src/charset.h: -------------------------------------------------------------------------------- 1 | #ifndef _CHARSET_H_ 2 | #define _CHARSET_H_ 3 | #include "avr/pgmspace.h" 4 | 5 | const unsigned char ASCII[][5] PROGMEM = 6 | { 7 | {0x00, 0x00, 0x00, 0x00, 0x00} // 20 8 | ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! 9 | ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " 10 | ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # 11 | ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ 12 | ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % 13 | ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & 14 | ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' 15 | ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( 16 | ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) 17 | ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * 18 | ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + 19 | ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , 20 | ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - 21 | ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . 22 | ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / 23 | ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 24 | ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 25 | ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 26 | ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 27 | ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 28 | ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 29 | ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 30 | ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 31 | ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 32 | ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 33 | ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : 34 | ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; 35 | ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < 36 | ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = 37 | ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > 38 | ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? 39 | ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ 40 | ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A 41 | ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B 42 | ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C 43 | ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D 44 | ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E 45 | ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F 46 | ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G 47 | ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H 48 | ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I 49 | ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J 50 | ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K 51 | ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L 52 | ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M 53 | ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N 54 | ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O 55 | ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P 56 | ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q 57 | ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R 58 | ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S 59 | ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T 60 | ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U 61 | ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V 62 | ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W 63 | ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X 64 | ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y 65 | ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z 66 | ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ 67 | ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥ 68 | ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] 69 | ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ 70 | ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ 71 | ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` 72 | ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a 73 | ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b 74 | ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c 75 | ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d 76 | ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e 77 | ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f 78 | ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g 79 | ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h 80 | ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i 81 | ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j 82 | ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k 83 | ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l 84 | ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m 85 | ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n 86 | ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o 87 | ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p 88 | ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q 89 | ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r 90 | ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s 91 | ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t 92 | ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u 93 | ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v 94 | ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w 95 | ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x 96 | ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y 97 | ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z 98 | ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { 99 | ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | 100 | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } 101 | ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← 102 | ,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f → 103 | }; 104 | 105 | const unsigned char ICONS[][12] PROGMEM = 106 | { 107 | {0x08, 0x14, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x36, 0x63, 0x63, 0x22} // config icon 108 | , {0x00, 0x00, 0xFF, 0xFF, 0xF7, 0xE3, 0xE3, 0xF7, 0xFF, 0xFD, 0x00, 0x00} // disquete icon 109 | , {0x00, 0x74, 0x32, 0x52, 0x42, 0x42, 0x42, 0x4A, 0x4C, 0x2E, 0x00, 0x00} // swictch 110 | , {0x00, 0x00, 0x00, 0x04, 0x02, 0xFF, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00} // seta para cima 111 | , {0x00, 0x00, 0x00, 0x20, 0x40, 0xFF, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00} // seta para baixo 112 | , {0x00, 0x00, 0x20, 0x70, 0xA8, 0x20, 0x20, 0x20, 0x3F, 0x00, 0x00, 0x00} // return 113 | , {0x00, 0x00, 0xFE, 0x82, 0x82, 0x82, 0x84, 0x84, 0xFC, 0x00, 0x00, 0x00} // folder 114 | }; 115 | 116 | #endif -------------------------------------------------------------------------------- /firmware/src/config.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/config.h -------------------------------------------------------------------------------- /firmware/src/i2c.h: -------------------------------------------------------------------------------- 1 | /* Arduino SoftI2C library. 2 | * 3 | * Copyright (C) 2013, Bernhard Nebel and Peter Fleury 4 | * 5 | * This is a very fast and very light-weight software I2C-master library 6 | * written in assembler. It is based on Peter Fleury's I2C software 7 | * library: http://homepage.hispeed.ch/peterfleury/avr-software.html 8 | * 9 | * This Library is free software: you can redistribute it and/or modify 10 | * it under the terms of the GNU General Public License as published by 11 | * the Free Software Foundation, either version 3 of the License, or 12 | * (at your option) any later version. 13 | * 14 | * This Library is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | * GNU General Public License for more details. 18 | * 19 | * You should have received a copy of the GNU General Public License 20 | * along with the Arduino I2cMaster Library. If not, see 21 | * . 22 | */ 23 | 24 | /* In order to use the library, you need to define SDA_PIN, SCL_PIN, 25 | * SDA_PORT and SCL_PORT before including this file. Have a look at 26 | * http://www.arduino.cc/en/Reference/PortManipulation for finding out 27 | * which values to use. For example, if you use digital pin 3 (corresponding 28 | * to PD3) for SDA and digital pin 13 (corresponding to PB5) 29 | * for SCL on a standard Arduino, 30 | * you have to use the following definitions: 31 | * #define SDA_PIN 3 32 | * #define SDA_PORT PORTD 33 | * #define SCL_PIN 5 34 | * #define SCL_PORT PORTB 35 | * 36 | * You can also define the following constants (see also below): 37 | * - I2C_CPUFREQ, when changing CPU clock frequency dynamically 38 | * - I2C_FASTMODE = 1 meaning that the I2C bus allows speeds up to 400 kHz 39 | * - I2C_SLOWMODE = 1 meaning that the I2C bus will allow only up to 25 kHz 40 | * - I2C_NOINTERRUPT = 1 in order to prohibit interrupts while 41 | * communicating (see below). This can be useful if you use the library 42 | * for communicationg with SMbus devices, which have timeouts. 43 | * Note, however, that interrupts are disabled from issuing a start condition 44 | * until issuing a stop condition. So use this option with care! 45 | * - I2C_TIMEOUT = 0..10000 mssec in order to return from the I2C functions 46 | * in case of a I2C bus lockup (i.e., SCL constantly low). 0 means no timeout 47 | */ 48 | 49 | /* Changelog: 50 | * Version 1.3: 51 | * - added "__attribute__ ((used))" for all functions declared with "__attribute__ ((noinline))" 52 | * Now the module is also usable in Arduino 1.6.11+ 53 | * Version 1.2: 54 | * - added pragma to avoid "unused parameter warnings" (suggestion by Walter) 55 | * - replaced wrong license file 56 | * Version 1.1: 57 | * - removed I2C_CLOCK_STRETCHING 58 | * - added I2C_TIMEOUT time in msec (0..10000) until timeout or 0 if no timeout 59 | * - changed i2c_init to return 1 iff both SDA and SCL are high 60 | * - changed interrupt disabling so that the previous IRQ state is restored 61 | * Version 1.0: basic functionality 62 | */ 63 | 64 | #include 65 | 66 | #ifndef _SOFTI2C_H 67 | #define _SOFTI2C_H 1 68 | 69 | #pragma GCC diagnostic push 70 | #pragma GCC diagnostic ignored "-Wunused-parameter" 71 | 72 | // Init function. Needs to be called once in the beginning. 73 | // Returns false if SDA or SCL are low, which probably means 74 | // a I2C bus lockup or that the lines are not pulled up. 75 | unsigned char __attribute__ ((noinline)) i2c_init(void) __attribute__ ((used)); 76 | 77 | // Start transfer function: is the 8-bit I2C address (including the R/W 78 | // bit). 79 | // Return: 1 if the slave replies with an "acknowledge", false otherwise 80 | unsigned char __attribute__ ((noinline)) i2c_start(uint8_t addr) __attribute__ ((used)); 81 | 82 | // Similar to start function, but wait for an ACK! Be careful, this can 83 | // result in an infinite loop! 84 | void __attribute__ ((noinline)) i2c_start_wait(uint8_t addr) __attribute__ ((used)); 85 | 86 | // Repeated start function: After having claimed the bus with a start condition, 87 | // you can address another or the same chip again without an intervening 88 | // stop condition. 89 | // Return: 1 if the slave replies with an "acknowledge", false otherwise 90 | unsigned char __attribute__ ((noinline)) i2c_rep_start(uint8_t addr) __attribute__ ((used)); 91 | 92 | // Issue a stop condition, freeing the bus. 93 | void __attribute__ ((noinline)) i2c_stop(void) asm("ass_i2c_stop") __attribute__ ((used)); 94 | 95 | // Write one byte to the slave chip that had been addressed 96 | // by the previous start call. is the byte to be sent. 97 | // Return: 1 if the slave replies with an "acknowledge", false otherwise 98 | unsigned char __attribute__ ((noinline)) i2c_write(uint8_t value) asm("ass_i2c_write") __attribute__ ((used)); 99 | 100 | 101 | // Read one byte. If is 1, we send a NAK after having received 102 | // the byte in order to terminate the read sequence. 103 | uint8_t __attribute__ ((noinline)) i2c_read(unsigned char last) __attribute__ ((used)); 104 | 105 | // You can set I2C_CPUFREQ independently of F_CPU if you 106 | // change the CPU frequency on the fly. If you do not define it, 107 | // it will use the value of F_CPU 108 | #ifndef I2C_CPUFREQ 109 | #define I2C_CPUFREQ F_CPU 110 | #endif 111 | 112 | // If I2C_FASTMODE is set to 1, then the highest possible frequency below 400kHz 113 | // is selected. Be aware that not all slave chips may be able to deal with that! 114 | #define I2C_FASTMODE 1 115 | #define I2C_SLOWMODE 0 116 | 117 | #ifndef I2C_FASTMODE 118 | #define I2C_FASTMODE 1 119 | #endif 120 | 121 | // If I2C_FASTMODE is not defined or defined to be 0, then you can set 122 | // I2C_SLOWMODE to 1. In this case, the I2C frequency will not be higher 123 | // than 25KHz. This could be useful for problematic buses. 124 | #ifndef I2C_SLOWMODE 125 | #define I2C_SLOWMODE 0 126 | #endif 127 | 128 | // if I2C_NOINTERRUPT is 1, then the I2C routines are not interruptable. 129 | // This is most probably only necessary if you are using a 1MHz system clock, 130 | // you are communicating with a SMBus device, and you want to avoid timeouts. 131 | // Be aware that the interrupt bit is enabled after each call. So the 132 | // I2C functions should not be called in interrupt routines or critical regions. 133 | #ifndef I2C_NOINTERRUPT 134 | #define I2C_NOINTERRUPT 0 135 | #endif 136 | 137 | // I2C_TIMEOUT can be set to a value between 1 and 10000. 138 | // If it is defined and nonzero, it leads to a timeout if the 139 | // SCL is low longer than I2C_TIMEOUT milliseconds, i.e., max timeout is 10 sec 140 | #ifndef I2C_TIMEOUT 141 | #define I2C_TIMEOUT 0 142 | #else 143 | #if I2C_TIMEOUT > 10000 144 | #error I2C_TIMEOUT is too large 145 | #endif 146 | #endif 147 | 148 | #define I2C_TIMEOUT_DELAY_LOOPS (I2C_CPUFREQ/1000UL)*I2C_TIMEOUT/4000UL 149 | #if I2C_TIMEOUT_DELAY_LOOPS < 1 150 | #define I2C_MAX_STRETCH 1 151 | #else 152 | #if I2C_TIMEOUT_DELAY_LOOPS > 60000UL 153 | #define I2C_MAX_STRETCH 60000UL 154 | #else 155 | #define I2C_MAX_STRETCH I2C_TIMEOUT_DELAY_LOOPS 156 | #endif 157 | #endif 158 | 159 | #if I2C_FASTMODE 160 | #define I2C_DELAY_COUNTER (((I2C_CPUFREQ/350000L)/2-18)/3) 161 | #else 162 | #if I2C_SLOWMODE 163 | #define I2C_DELAY_COUNTER (((I2C_CPUFREQ/23500L)/2-18)/3) 164 | #else 165 | #define I2C_DELAY_COUNTER (((I2C_CPUFREQ/90000L)/2-18)/3) 166 | #endif 167 | #endif 168 | 169 | // Table of I2C bus speed in kbit/sec: 170 | // CPU clock: 1MHz 2MHz 4MHz 8MHz 16MHz 20MHz 171 | // Fast I2C mode 40 80 150 300 400 400 172 | // Standard I2C mode 40 80 100 100 100 100 173 | // Slow I2C mode 25 25 25 25 25 25 174 | 175 | // constants for reading & writing 176 | #define I2C_READ 1 177 | #define I2C_WRITE 0 178 | 179 | // map the IO register back into the IO address space 180 | #define SDA_DDR (_SFR_IO_ADDR(SDA_PORT) - 1) 181 | #define SCL_DDR (_SFR_IO_ADDR(SCL_PORT) - 1) 182 | #define SDA_OUT _SFR_IO_ADDR(SDA_PORT) 183 | #define SCL_OUT _SFR_IO_ADDR(SCL_PORT) 184 | #define SDA_IN (_SFR_IO_ADDR(SDA_PORT) - 2) 185 | #define SCL_IN (_SFR_IO_ADDR(SCL_PORT) - 2) 186 | 187 | #ifndef __tmp_reg__ 188 | #define __tmp_reg__ 0 189 | #endif 190 | 191 | 192 | // Internal delay functions. 193 | void __attribute__ ((noinline)) i2c_delay_half(void) asm("ass_i2c_delay_half") __attribute__ ((used)); 194 | void __attribute__ ((noinline)) i2c_wait_scl_high(void) asm("ass_i2c_wait_scl_high") __attribute__ ((used)); 195 | 196 | void i2c_delay_half(void) 197 | { // function call 3 cycles => 3C 198 | #if I2C_DELAY_COUNTER < 1 199 | __asm__ __volatile__ (" ret"); 200 | // 7 cycles for call and return 201 | #else 202 | __asm__ __volatile__ 203 | ( 204 | " ldi r25, %[DELAY] ;load delay constant ;; 4C \n\t" 205 | "_Lidelay: \n\t" 206 | " dec r25 ;decrement counter ;; 4C+xC \n\t" 207 | " brne _Lidelay ;;5C+(x-1)2C+xC\n\t" 208 | " ret ;; 9C+(x-1)2C+xC = 7C+xC" 209 | : : [DELAY] "M" I2C_DELAY_COUNTER : "r25"); 210 | // 7 cycles + 3 times x cycles 211 | #endif 212 | } 213 | 214 | void i2c_wait_scl_high(void) 215 | { 216 | #if I2C_TIMEOUT <= 0 217 | __asm__ __volatile__ 218 | ("_Li2c_wait_stretch: \n\t" 219 | " sbis %[SCLIN],%[SCLPIN] ;wait for SCL high \n\t" 220 | " rjmp _Li2c_wait_stretch \n\t" 221 | " cln ;signal: no timeout \n\t" 222 | " ret " 223 | : : [SCLIN] "I" (SCL_IN), [SCLPIN] "I" (SCL_PIN)); 224 | #else 225 | __asm__ __volatile__ 226 | ( " ldi r27, %[HISTRETCH] ;load delay counter \n\t" 227 | " ldi r26, %[LOSTRETCH] \n\t" 228 | "_Lwait_stretch: \n\t" 229 | " clr __tmp_reg__ ;do next loop 255 times \n\t" 230 | "_Lwait_stretch_inner_loop: \n\t" 231 | " rcall _Lcheck_scl_level ;call check function ;; 12C \n\t" 232 | " brpl _Lstretch_done ;done if N=0 ;; +1 = 13C\n\t" 233 | " dec __tmp_reg__ ;dec inner loop counter;; +1 = 14C\n\t" 234 | " brne _Lwait_stretch_inner_loop ;; +2 = 16C\n\t" 235 | " sbiw r26,1 ;dec outer loop counter \n\t" 236 | " brne _Lwait_stretch ;continue with outer loop \n\t" 237 | " sen ;timeout -> set N-bit=1 \n\t" 238 | " rjmp _Lwait_return ;and return with N=1\n\t" 239 | "_Lstretch_done: ;SCL=1 sensed \n\t" 240 | " cln ;OK -> clear N-bit \n\t" 241 | " rjmp _Lwait_return ; and return with N=0 \n\t" 242 | 243 | "_Lcheck_scl_level: ;; call = 3C\n\t" 244 | " cln ;; +1C = 4C \n\t" 245 | " sbic %[SCLIN],%[SCLPIN] ;skip if SCL still low ;; +2C = 6C \n\t" 246 | " rjmp _Lscl_high ;; +0C = 6C \n\t" 247 | " sen ;; +1 = 7C\n\t " 248 | "_Lscl_high: " 249 | " nop ;; +1C = 8C \n\t" 250 | " ret ;return N-Bit=1 if low ;; +4 = 12C\n\t" 251 | 252 | "_Lwait_return:" 253 | : : [SCLIN] "I" (SCL_IN), [SCLPIN] "I" (SCL_PIN), 254 | [HISTRETCH] "M" (I2C_MAX_STRETCH>>8), 255 | [LOSTRETCH] "M" (I2C_MAX_STRETCH&0xFF) 256 | : "r26", "r27"); 257 | #endif 258 | } 259 | 260 | 261 | unsigned char i2c_init(void) 262 | { 263 | __asm__ __volatile__ 264 | (" cbi %[SDADDR],%[SDAPIN] ;release SDA \n\t" 265 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL \n\t" 266 | " cbi %[SDAOUT],%[SDAPIN] ;clear SDA output value \n\t" 267 | " cbi %[SCLOUT],%[SCLPIN] ;clear SCL output value \n\t" 268 | " clr r24 ;set return value to false \n\t" 269 | " clr r25 ;set return value to false \n\t" 270 | " sbis %[SDAIN],%[SDAPIN] ;check for SDA high\n\t" 271 | " ret ;if low return with false \n\t" 272 | " sbis %[SCLIN],%[SCLPIN] ;check for SCL high \n\t" 273 | " ret ;if low return with false \n\t" 274 | " ldi r24,1 ;set return value to 1 \n\t" 275 | " ret " 276 | : : 277 | [SCLDDR] "I" (SCL_DDR), [SCLPIN] "I" (SCL_PIN), 278 | [SCLIN] "I" (SCL_IN), [SCLOUT] "I" (SCL_OUT), 279 | [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN), 280 | [SDAIN] "I" (SDA_IN), [SDAOUT] "I" (SDA_OUT)); 281 | return 1; 282 | } 283 | 284 | unsigned char i2c_start(uint8_t addr) 285 | { 286 | __asm__ __volatile__ 287 | ( 288 | #if I2C_NOINTERRUPT 289 | " cli ;clear IRQ bit \n\t" 290 | #endif 291 | " sbis %[SCLIN],%[SCLPIN] ;check for clock stretching slave\n\t" 292 | " rcall ass_i2c_wait_scl_high ;wait until SCL=H\n\t" 293 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low \n\t" 294 | " rcall ass_i2c_delay_half ;wait T/2 \n\t" 295 | " rcall ass_i2c_write ;now write address \n\t" 296 | " ret" 297 | : : [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN), 298 | [SCLIN] "I" (SCL_IN),[SCLPIN] "I" (SCL_PIN)); 299 | return 1; // we never return here! 300 | } 301 | 302 | unsigned char i2c_rep_start(uint8_t addr) 303 | { 304 | __asm__ __volatile__ 305 | 306 | ( 307 | #if I2C_NOINTERRUPT 308 | " cli \n\t" 309 | #endif 310 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low \n\t" 311 | " rcall ass_i2c_delay_half ;delay T/2 \n\t" 312 | " cbi %[SDADDR],%[SDAPIN] ;release SDA \n\t" 313 | " rcall ass_i2c_delay_half ;delay T/2 \n\t" 314 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL \n\t" 315 | " rcall ass_i2c_delay_half ;delay T/2 \n\t" 316 | " sbis %[SCLIN],%[SCLPIN] ;check for clock stretching slave\n\t" 317 | " rcall ass_i2c_wait_scl_high ;wait until SCL=H\n\t" 318 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low \n\t" 319 | " rcall ass_i2c_delay_half ;delay T/2 \n\t" 320 | " rcall ass_i2c_write \n\t" 321 | " ret" 322 | : : [SCLDDR] "I" (SCL_DDR), [SCLPIN] "I" (SCL_PIN),[SCLIN] "I" (SCL_IN), 323 | [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN)); 324 | return 1; // just to fool the compiler 325 | } 326 | 327 | void i2c_start_wait(uint8_t addr) 328 | { 329 | __asm__ __volatile__ 330 | ( 331 | " push r24 ;save original parameter \n\t" 332 | "_Li2c_start_wait1: \n\t" 333 | " pop r24 ;restore original parameter\n\t" 334 | " push r24 ;and save again \n\t" 335 | #if I2C_NOINTERRUPT 336 | " cli ;disable interrupts \n\t" 337 | #endif 338 | " sbis %[SCLIN],%[SCLPIN] ;check for clock stretching slave\n\t" 339 | " rcall ass_i2c_wait_scl_high ;wait until SCL=H\n\t" 340 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low \n\t" 341 | " rcall ass_i2c_delay_half ;delay T/2 \n\t" 342 | " rcall ass_i2c_write ;write address \n\t" 343 | " tst r24 ;if device not busy -> done \n\t" 344 | " brne _Li2c_start_wait_done \n\t" 345 | " rcall ass_i2c_stop ;terminate write & enable IRQ \n\t" 346 | " rjmp _Li2c_start_wait1 ;device busy, poll ack again \n\t" 347 | "_Li2c_start_wait_done: \n\t" 348 | " pop __tmp_reg__ ;pop off orig argument \n\t" 349 | " ret " 350 | : : [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN), 351 | [SCLIN] "I" (SCL_IN),[SCLPIN] "I" (SCL_PIN)); 352 | } 353 | 354 | void i2c_stop(void) 355 | { 356 | __asm__ __volatile__ 357 | ( 358 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low \n\t" 359 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low \n\t" 360 | " rcall ass_i2c_delay_half ;T/2 delay \n\t" 361 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL \n\t" 362 | " rcall ass_i2c_delay_half ;T/2 delay \n\t" 363 | " sbis %[SCLIN],%[SCLPIN] ;check for clock stretching slave\n\t" 364 | " rcall ass_i2c_wait_scl_high ;wait until SCL=H\n\t" 365 | " cbi %[SDADDR],%[SDAPIN] ;release SDA \n\t" 366 | " rcall ass_i2c_delay_half \n\t" 367 | #if I2C_NOINTERRUPT 368 | " sei ;enable interrupts again!\n\t" 369 | #endif 370 | : : [SCLDDR] "I" (SCL_DDR), [SCLPIN] "I" (SCL_PIN), [SCLIN] "I" (SCL_IN), 371 | [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN)); 372 | } 373 | 374 | unsigned char i2c_write(uint8_t value) 375 | { 376 | __asm__ __volatile__ 377 | ( 378 | " sec ;set carry flag \n\t" 379 | " rol r24 ;shift in carry and shift out MSB \n\t" 380 | " rjmp _Li2c_write_first \n\t" 381 | "_Li2c_write_bit:\n\t" 382 | " lsl r24 ;left shift into carry ;; 1C\n\t" 383 | "_Li2c_write_first:\n\t" 384 | " breq _Li2c_get_ack ;jump if TXreg is empty;; +1 = 2C \n\t" 385 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low ;; +2 = 4C \n\t" 386 | " nop \n\t" 387 | " nop \n\t" 388 | " nop \n\t" 389 | " brcc _Li2c_write_low ;;+1/+2=5/6C\n\t" 390 | " nop ;; +1 = 7C \n\t" 391 | " cbi %[SDADDR],%[SDAPIN] ;release SDA ;; +2 = 9C \n\t" 392 | " rjmp _Li2c_write_high ;; +2 = 11C \n\t" 393 | "_Li2c_write_low: \n\t" 394 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low ;; +2 = 9C \n\t" 395 | " rjmp _Li2c_write_high ;;+2 = 11C \n\t" 396 | "_Li2c_write_high: \n\t" 397 | #if I2C_DELAY_COUNTER >= 1 398 | " rcall ass_i2c_delay_half ;delay T/2 ;;+X = 11C+X\n\t" 399 | #endif 400 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL ;;+2 = 13C+X\n\t" 401 | " cln ;clear N-bit ;;+1 = 14C+X\n\t" 402 | " nop \n\t" 403 | " nop \n\t" 404 | " nop \n\t" 405 | " sbis %[SCLIN],%[SCLPIN] ;check for SCL high ;;+2 = 16C+X\n\t" 406 | " rcall ass_i2c_wait_scl_high \n\t" 407 | " brpl _Ldelay_scl_high ;;+2 = 18C+X\n\t" 408 | "_Li2c_write_return_false: \n\t" 409 | " clr r24 ; return false because of timeout \n\t" 410 | " rjmp _Li2c_write_return \n\t" 411 | "_Ldelay_scl_high: \n\t" 412 | #if I2C_DELAY_COUNTER >= 1 413 | " rcall ass_i2c_delay_half ;delay T/2 ;;+X= 18C+2X\n\t" 414 | #endif 415 | " rjmp _Li2c_write_bit \n\t" 416 | " ;; +2 = 20C +2X for one bit-loop \n\t" 417 | "_Li2c_get_ack: \n\t" 418 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low ;; +2 = 5C \n\t" 419 | " nop \n\t" 420 | " nop \n\t" 421 | " cbi %[SDADDR],%[SDAPIN] ;release SDA ;;+2 = 7C \n\t" 422 | #if I2C_DELAY_COUNTER >= 1 423 | " rcall ass_i2c_delay_half ;delay T/2 ;; +X = 7C+X \n\t" 424 | #endif 425 | " clr r25 ;; 17C+2X \n\t" 426 | " clr r24 ;return 0 ;; 14C + X \n\t" 427 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL ;; +2 = 9C+X\n\t" 428 | "_Li2c_ack_wait: \n\t" 429 | " cln ; clear N-bit ;; 10C + X\n\t" 430 | " nop \n\t" 431 | " sbis %[SCLIN],%[SCLPIN] ;wait SCL high ;; 12C + X \n\t" 432 | " rcall ass_i2c_wait_scl_high \n\t" 433 | " brmi _Li2c_write_return_false ;; 13C + X \n\t " 434 | " sbis %[SDAIN],%[SDAPIN] ;if SDA hi -> return 0 ;; 15C + X \n\t" 435 | " ldi r24,1 ;return 1 ;; 16C + X \n\t" 436 | #if I2C_DELAY_COUNTER >= 1 437 | " rcall ass_i2c_delay_half ;delay T/2 ;; 16C + 2X \n\t" 438 | #endif 439 | "_Li2c_write_return: \n\t" 440 | " nop \n\t " 441 | " nop \n\t " 442 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low so SCL=H is short\n\t" 443 | " ret \n\t" 444 | " ;; + 4 = 17C + 2X for acknowldge bit" 445 | :: 446 | [SCLDDR] "I" (SCL_DDR), [SCLPIN] "I" (SCL_PIN), [SCLIN] "I" (SCL_IN), 447 | [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN), [SDAIN] "I" (SDA_IN)); 448 | return 1; // fooling the compiler 449 | } 450 | 451 | uint8_t i2c_read(unsigned char last) 452 | { 453 | __asm__ __volatile__ 454 | ( 455 | " ldi r23,0x01 \n\t" 456 | "_Li2c_read_bit: \n\t" 457 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low ;; 2C \n\t" 458 | " cbi %[SDADDR],%[SDAPIN] ;release SDA(prev. ACK);; 4C \n\t" 459 | " nop \n\t" 460 | " nop \n\t" 461 | " nop \n\t" 462 | #if I2C_DELAY_COUNTER >= 1 463 | " rcall ass_i2c_delay_half ;delay T/2 ;; 4C+X \n\t" 464 | #endif 465 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL ;; 6C + X \n\t" 466 | #if I2C_DELAY_COUNTER >= 1 467 | " rcall ass_i2c_delay_half ;delay T/2 ;; 6C + 2X \n\t" 468 | #endif 469 | " cln ; clear N-bit ;; 7C + 2X \n\t" 470 | " nop \n\t " 471 | " nop \n\t " 472 | " nop \n\t " 473 | " sbis %[SCLIN], %[SCLPIN] ;check for SCL high ;; 9C +2X \n\t" 474 | " rcall ass_i2c_wait_scl_high \n\t" 475 | " brmi _Li2c_read_return ;return if timeout ;; 10C + 2X\n\t" 476 | " clc ;clear carry flag ;; 11C + 2X\n\t" 477 | " sbic %[SDAIN],%[SDAPIN] ;if SDA is high ;; 11C + 2X\n\t" 478 | " sec ;set carry flag ;; 12C + 2X\n\t" 479 | " rol r23 ;store bit ;; 13C + 2X\n\t" 480 | " brcc _Li2c_read_bit ;while receiv reg not full \n\t" 481 | " ;; 15C + 2X for one bit loop \n\t" 482 | 483 | "_Li2c_put_ack: \n\t" 484 | " sbi %[SCLDDR],%[SCLPIN] ;force SCL low ;; 2C \n\t" 485 | " cpi r24,0 ;; 3C \n\t" 486 | " breq _Li2c_put_ack_low ;if (ack=0) ;; 5C \n\t" 487 | " cbi %[SDADDR],%[SDAPIN] ;release SDA \n\t" 488 | " rjmp _Li2c_put_ack_high \n\t" 489 | "_Li2c_put_ack_low: ;else \n\t" 490 | " sbi %[SDADDR],%[SDAPIN] ;force SDA low ;; 7C \n\t" 491 | "_Li2c_put_ack_high: \n\t" 492 | " nop \n\t " 493 | " nop \n\t " 494 | " nop \n\t " 495 | #if I2C_DELAY_COUNTER >= 1 496 | " rcall ass_i2c_delay_half ;delay T/2 ;; 7C + X \n\t" 497 | #endif 498 | " cbi %[SCLDDR],%[SCLPIN] ;release SCL ;; 9C +X \n\t" 499 | " cln ;clear N ;; +1 = 10C\n\t" 500 | " nop \n\t " 501 | " nop \n\t " 502 | " sbis %[SCLIN],%[SCLPIN] ;wait SCL high ;; 12C + X\n\t" 503 | " rcall ass_i2c_wait_scl_high \n\t" 504 | #if I2C_DELAY_COUNTER >= 1 505 | " rcall ass_i2c_delay_half ;delay T/2 ;; 11C + 2X\n\t" 506 | #endif 507 | "_Li2c_read_return: \n\t" 508 | " nop \n\t " 509 | " nop \n\t " 510 | "sbi %[SCLDDR],%[SCLPIN] ;force SCL low so SCL=H is short\n\t" 511 | " mov r24,r23 ;; 12C + 2X \n\t" 512 | " clr r25 ;; 13 C + 2X\n\t" 513 | " ret ;; 17C + X" 514 | :: 515 | [SCLDDR] "I" (SCL_DDR), [SCLPIN] "I" (SCL_PIN), [SCLIN] "I" (SCL_IN), 516 | [SDADDR] "I" (SDA_DDR), [SDAPIN] "I" (SDA_PIN), [SDAIN] "I" (SDA_IN) 517 | ); 518 | return ' '; // fool the compiler! 519 | } 520 | 521 | 522 | #pragma GCC diagnostic pop 523 | 524 | #endif 525 | 526 | 527 | 528 | 529 | -------------------------------------------------------------------------------- /firmware/src/lcd.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/lcd.c -------------------------------------------------------------------------------- /firmware/src/lcd.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/lcd.h -------------------------------------------------------------------------------- /firmware/src/lcd_nokia.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/lcd_nokia.c -------------------------------------------------------------------------------- /firmware/src/lcd_nokia.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/lcd_nokia.h -------------------------------------------------------------------------------- /firmware/src/logo.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | const unsigned char LOGO[] PROGMEM = 4 | { 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 6 | 0xe0, 0xf0, 0xf8, 0xf8, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 10 | 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf7, 0xf7, 0xff, 0xfb, 0xf9, 0xf8, 0xf8, 0xf8, 11 | 0xf8, 0xf8, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 15 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x00, 0x7c, 0xfe, 16 | 0xff, 0xc7, 0xc7, 0xc7, 0x07, 0x07, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x87, 0xc7, 0xc7, 17 | 0xef, 0xfe, 0xfe, 0x18, 0x00, 0xff, 0xff, 0xff, 0x07, 0xc7, 0xc7, 0xc7, 0xff, 0xfe, 0x7c, 0x00, 18 | 0xff, 0xff, 0xff, 0x00, 0x7c, 0xfe, 0xff, 0xc7, 0xc7, 0xe7, 0xf7, 0xff, 0xff, 0xdf, 0x07, 0x1f, 19 | 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 20 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0x38, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 21 | 0x01, 0x01, 0x00, 0x07, 0x0f, 0x0f, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0f, 22 | 0x0f, 0x07, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 23 | 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 24 | 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 25 | 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00 29 | }; 30 | 31 | -------------------------------------------------------------------------------- /firmware/src/main.h: -------------------------------------------------------------------------------- 1 | /*------------------------------------ 2 | 3 | SDISK II LCD Firmware 4 | 5 | 2010.11.11 by Koichi Nishida 6 | 2012.01.26 by Fábio Belavenuto 7 | 2015.07.02 by Alexandre Suaide 8 | 9 | ------------------------------------- 10 | */ 11 | 12 | /* 13 | 2015.07.02 by Alexandre Suaide 14 | Added support for SDHC cards and subdirectories 15 | Removed DSK to NIC conversion 16 | FAT16 and FAT32 disks should have at least 64 blocks per cluster 17 | */ 18 | 19 | /* 20 | 2012.01.26 by Fábio Belavenuto 21 | Added support for image exchange using a button added in the Brazilian version by Victor Trucco 22 | Added support for a 16x2 LCD 23 | */ 24 | 25 | /* 26 | This is a part of the firmware for DISK II emulator by Nishida Radio. 27 | 28 | Copyright (C) 2010 Koichi NISHIDA 29 | email to Koichi NISHIDA: tulip-house@msf.biglobe.ne.jp 30 | 31 | This program is free software; you can redistribute it and/or modify it 32 | under the terms of the GNU General Public License as published by 33 | the Free Software Foundation; either version 3 of the License. 34 | 35 | This program is distributed in the hope that it will be useful, 36 | but WITHOUT ANY WARRANTY; without even the implied warranty of 37 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 38 | See the GNU General Public License for more details. 39 | 40 | You should have received a copy of the GNU General Public License 41 | along with this program. If not, see . 42 | */ 43 | 44 | #include "config.h" 45 | 46 | #ifndef __SDISK2__ 47 | #define __SDISK2__ 48 | 49 | 50 | #define VER "5.5" 51 | #define YEAR "(2020)" 52 | 53 | // these are done during compilation 54 | //#define _LCD_ 55 | //#define _LCD_NOKIA_ 56 | 57 | 58 | #include 59 | #include 60 | #include 61 | #include 62 | #include 63 | #include "string.h" 64 | 65 | #ifdef _LCD_ 66 | #include "lcd.h" 67 | #endif 68 | 69 | #ifdef _LCD_NOKIA_ 70 | #include "lcd_nokia.h" 71 | #endif 72 | 73 | #ifdef _OLED_ 74 | #include "oled.h" 75 | #endif 76 | 77 | #include "SPI_routines.h" 78 | #include "SD_routines.h" 79 | #include "FAT32.h" 80 | 81 | #define MAXNIC 4 82 | 83 | #define enter_is_pressed() bit_is_clear(ENTER_PORT,ENTER_BIT) 84 | #define down_is_pressed() (bit_is_clear(DOWN_PORT,DOWN_BIT)*(flip_buttons==0) | bit_is_clear(UP_PORT,UP_BIT)*(flip_buttons==1)) 85 | #define up_is_pressed() (bit_is_clear(UP_PORT,UP_BIT)*(flip_buttons==0) | bit_is_clear(DOWN_PORT,DOWN_BIT)*(flip_buttons==1)) 86 | #define diskII_disable() bit_is_set(DISKII_PIN,DISKII_ENABLE) 87 | 88 | #define CHECKSUM_CONFIG 0X01AB02CD 89 | 90 | struct Sdisk_config_structure 91 | { 92 | unsigned long checksum; 93 | unsigned char sd_card_speed; 94 | unsigned long directory_of_last_mounted_nic; 95 | unsigned int id_of_last_mounted_nic; 96 | unsigned long directory_of_previous_mounted_nic; 97 | unsigned int id_of_previous_mounted_nic; 98 | unsigned char lcd_contrast; 99 | unsigned char nic_mounted; 100 | unsigned char EMPTY[64]; // just leave empty for future features 101 | unsigned long nic_dir[MAXNIC]; 102 | unsigned int nic_id[MAXNIC]; 103 | }; 104 | 105 | void init(char splash); 106 | void display_sd_ejected(); 107 | char init_sd(char splash); 108 | void verify_status(); 109 | void select_nic(); 110 | void find_previous_nic(); 111 | void swap_nic(); 112 | unsigned char is_a_nic(struct dir_Structure *file); 113 | unsigned char is_a_dir(struct dir_Structure *file); 114 | unsigned int mount_nic_image(int file_id, struct dir_Structure* file); 115 | void create_config_file(); 116 | void writeBackSub(); 117 | void writeBackSub2(unsigned char bn, unsigned char sc, unsigned char track); 118 | void writeBack(); 119 | void cancelRead(); 120 | void buffClear(); 121 | void set_speed(); 122 | void configButtons(); 123 | int main(void); 124 | 125 | #if defined(_LCD_NOKIA_) || defined(_OLED_) 126 | void set_contrast(); 127 | void setup(); 128 | void icons(unsigned char i1, unsigned char i2, unsigned char i3); 129 | #endif 130 | 131 | #endif 132 | -------------------------------------------------------------------------------- /firmware/src/make25novo.bat: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | avr-gcc -o "lcd.o" "lcd.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 7 | avr-gcc -o "SPI_routines.o" "SPI_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 8 | avr-gcc -o "SD_routines.o" "SD_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 9 | avr-gcc -o "FAT32.o" "FAT32.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 10 | avr-gcc -x assembler-with-cpp -mmcu=atmega328p -MMD -MP -D_SDISK_ORIGINAL_ -c -o "sub.o" "sub.S" 11 | avr-gcc -o "main.o" "main.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 12 | avr-gcc -Wl,-Map,sdisk2_original.map -mmcu=atmega328p -D_SDISK_ORIGINAL_ -o "sdisk2_original.elf" "main.o" "lcd.o" "SPI_routines.o" "SD_routines.o" "FAT32.o" "sub.o" 13 | avr-objcopy -R .eeprom -O ihex "sdisk2_original.elf" "sdisk2_original.hex" 14 | avr-size --format=avr --mcu=atmega328p "sdisk2_original.elf" 15 | 16 | 17 | 18 | avr-gcc -o "lcd_nokia.o" "lcd_nokia.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_MOD_NOKIA_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 19 | avr-gcc -o "SPI_routines.o" "SPI_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_MOD_NOKIA_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 20 | avr-gcc -o "SD_routines.o" "SD_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_MOD_NOKIA_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 21 | avr-gcc -o "FAT32.o" "FAT32.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_MOD_NOKIA_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 22 | avr-gcc -x assembler-with-cpp -mmcu=atmega328p -MMD -MP -D_SDISK_ORIGINAL_MOD_NOKIA_ -c -o "sub.o" "sub.S" 23 | avr-gcc -o "main.o" "main.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_ORIGINAL_MOD_NOKIA_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 24 | avr-gcc -Wl,-Map,sdisk2_original_mod_nokia.map -mmcu=atmega328p -D_SDISK_ORIGINAL_MOD_NOKIA_ -o "sdisk2_original_mod_nokia.elf" "main.o" "lcd_nokia.o" "SPI_routines.o" "SD_routines.o" "FAT32.o" "sub.o" 25 | avr-objcopy -R .eeprom -O ihex "sdisk2_original_mod_nokia.elf" "sdisk2_original_mod_nokia.hex" 26 | avr-size --format=avr --mcu=atmega328p "sdisk2_original_mod_nokia.elf" 27 | 28 | 29 | 30 | avr-gcc -o "oled.o" "oled.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_OLED_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 31 | avr-gcc -o "SPI_routines.o" "SPI_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_OLED_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 32 | avr-gcc -o "SD_routines.o" "SD_routines.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_OLED_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 33 | avr-gcc -o "FAT32.o" "FAT32.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_OLED_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 34 | avr-gcc -x assembler-with-cpp -mmcu=atmega328p -MMD -MP -D_SDISK_OLED_ -c -o "sub.o" "sub.S" 35 | avr-gcc -o "main.o" "main.c" -Wall -Os -Wno-deprecated-declarations -Wno-strict-aliasing -D__PROG_TYPES_COMPAT__ -D_SDISK_OLED_ -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=25000000UL -MMD -MP -c 36 | avr-gcc -Wl,-Map,sdisk2_oled.map -mmcu=atmega328p -D_SDISK_OLED_ -o "sdisk2_oled.elf" "main.o" "oled.o" "SPI_routines.o" "SD_routines.o" "FAT32.o" "sub.o" 37 | avr-objcopy -R .eeprom -O ihex "sdisk2_oled.elf" "sdisk2_oled.hex" 38 | avr-size --format=avr --mcu=atmega328p "sdisk2_oled.elf" 39 | 40 | 41 | del *.o 42 | del *.map 43 | del *.d 44 | del *.elf -------------------------------------------------------------------------------- /firmware/src/oled.c: -------------------------------------------------------------------------------- 1 | 2 | #include "oled.h" 3 | #include "charset.h" 4 | #include "logo.h" 5 | #include "i2c.h" 6 | #include 7 | #include "string.h" 8 | 9 | #define false 0 10 | #define true 1 11 | 12 | unsigned char ssd1306_contr; 13 | unsigned char ssd1306_inv; 14 | unsigned char ssd1306_under; 15 | unsigned char ssd1306_over; 16 | 17 | void ssd1306_command(int c) 18 | { 19 | int control = 0x00; // some use 0X00 other examples use 0X80. I tried both 20 | i2c_start((SSD1306_ADDRESS<<1) | I2C_WRITE); 21 | i2c_write(control); // This is Command 22 | i2c_write(c); 23 | i2c_stop(); 24 | } 25 | 26 | void ssd1306_data(unsigned char c) 27 | { 28 | i2c_start((SSD1306_ADDRESS<<1) | I2C_WRITE); 29 | i2c_write(0X40); // This byte is DATA 30 | i2c_write(c); 31 | i2c_stop(); 32 | } 33 | 34 | 35 | void ssd1306_contrast(unsigned char value) 36 | { 37 | ssd1306_command(SSD1306_SETCONTRAST); // 0x81 38 | ssd1306_command(value); 39 | ssd1306_contr = value; 40 | } 41 | 42 | void ssd1306_init() 43 | { 44 | i2c_init(); 45 | ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE 46 | ssd1306_command(SSD1306_NORMALDISPLAY); 47 | ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 48 | ssd1306_command(0x80); // the suggested ratio 0x80 49 | ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 50 | ssd1306_command(0x3F); 51 | ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 52 | ssd1306_command(0x0); // no offset 53 | ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 54 | ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D 55 | ssd1306_command(0x14); // using internal VCC 56 | ssd1306_command(SSD1306_MEMORYMODE); // 0x20 57 | ssd1306_command(0x00); // 0x00 horizontal addressing 58 | ssd1306_command(SSD1306_SEGREMAP); // rotate screen 180 59 | ssd1306_command(SSD1306_COMSCANDEC); // rotate screen 180 60 | 61 | ssd1306_command(SSD1306_SETCOMPINS); // 0xDA 62 | ssd1306_command(0x12); 63 | ssd1306_command(SSD1306_SETCONTRAST); // 0x81 64 | ssd1306_command(0xCF); 65 | ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 66 | ssd1306_command(0xF1); 67 | ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB 68 | ssd1306_command(0x40); 69 | ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 70 | ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 71 | ssd1306_command(SSD1306_DISPLAYON); //switch on OLED 72 | ssd1306_contr = 0xCF; 73 | lcd_contrast = ssd1306_contr; 74 | lcd_offset = 2; 75 | ssd1306_inv = 0; 76 | ssd1306_under = 0; 77 | ssd1306_over = 0; 78 | ssd1306_screenDown(); 79 | } 80 | void ssd1306_clear() 81 | { 82 | for(int line = 0 ; line<8; line++) 83 | { 84 | lcd_gotoxy(0,line); 85 | for(int col = 0; col<132; col++) ssd1306_data(0); 86 | } 87 | i2c_stop(); 88 | } 89 | 90 | void ssd1306_char(unsigned char c) 91 | { 92 | i2c_start((SSD1306_ADDRESS<<1) | I2C_WRITE); 93 | i2c_write(0X40); 94 | 95 | for (int index = 0; index < 5; index++) 96 | { 97 | unsigned char ascii = (unsigned char)pgm_read_byte(&ASCII[c - 0x20][index]); 98 | if(ssd1306_inv) ascii = 255-ascii; 99 | ascii = ascii | (1<<7)*(ssd1306_under==true) | (ssd1306_over==true); 100 | 101 | i2c_write(ascii); 102 | } 103 | i2c_write(255*(ssd1306_inv==true) | (1<<7)*(ssd1306_under==true) | (ssd1306_over==true)); 104 | i2c_stop(); 105 | } 106 | void ssd1306_string(char *string) 107 | { 108 | while (*string) 109 | { 110 | ssd1306_char(*string++); 111 | } 112 | } 113 | 114 | void ssd1306_screenUp() 115 | { 116 | ssd1306_command(SSD1306_SEGREMAP | 0x1); 117 | ssd1306_command(SSD1306_COMSCANDEC); 118 | ssd1306_clear(); 119 | } 120 | void ssd1306_screenDown() 121 | { 122 | ssd1306_command(SSD1306_SEGREMAP | 0x0); 123 | ssd1306_command(SSD1306_COMSCANINC); 124 | ssd1306_clear(); 125 | } 126 | void ssd1306_inverse() {ssd1306_inv=!ssd1306_inv;} 127 | void ssd1306_underline() {ssd1306_under=!ssd1306_under;} 128 | void ssd1306_overline() {ssd1306_over=!ssd1306_over;} 129 | 130 | void lcd_init() 131 | { 132 | ssd1306_init(); 133 | } 134 | void lcd_clear() 135 | { 136 | ssd1306_clear(); 137 | } 138 | void lcd_gotoxy(unsigned char x, unsigned char y) 139 | { 140 | ssd1306_command(0xB0+y); // Start Page address 141 | unsigned char col = x/8; 142 | ssd1306_command(lcd_offset+(8*col&0x0F)); 143 | ssd1306_command(0x10+((8*col>>4)&0x0F)); 144 | } 145 | void lcd_put_s(char *str) 146 | { 147 | ssd1306_string(str); 148 | } 149 | void lcd_put_i(unsigned int value) 150 | { 151 | char buffer[10]; 152 | itoa(value,buffer,10); 153 | ssd1306_string(buffer); 154 | } 155 | void lcd_put_l(unsigned long int value) 156 | { 157 | char buffer[10]; 158 | ltoa(value,buffer,10); 159 | ssd1306_string(buffer); 160 | } 161 | void lcd_put_p(const prog_char *progmem_s) 162 | { 163 | register char c; 164 | while ( (c = pgm_read_byte(progmem_s++)) ) ssd1306_char(c); 165 | } 166 | void lcd_icon(int icon) 167 | { 168 | for (int index = 0; index < 12; index++) 169 | { 170 | unsigned char ascii = 0; 171 | if(icon!=255) ascii = (unsigned char)pgm_read_byte(&ICONS[icon][index]); 172 | if(ssd1306_inv) ascii = 255-ascii; 173 | ascii = ascii | (1<<7)*(ssd1306_under==true) | (ssd1306_over==true); 174 | ssd1306_data(ascii); 175 | } 176 | ssd1306_data(255*(ssd1306_inv==true) | (1<<7)*(ssd1306_under==true) | (ssd1306_over==true) ); 177 | } 178 | void lcd_inverse() {ssd1306_inverse();} 179 | void lcd_underline() {ssd1306_underline();} 180 | void lcd_overline() {ssd1306_overline();} 181 | void logo() 182 | { 183 | for(int i = 0;i<5;i++) 184 | { 185 | lcd_gotoxy(25,i); 186 | 187 | for(int j = 0; j<74; j++) 188 | { 189 | unsigned char D = (unsigned char)pgm_read_byte(&LOGO[i*74+j]); 190 | ssd1306_data(D); 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /firmware/src/oled.h: -------------------------------------------------------------------------------- 1 | #ifndef __OLED__ 2 | #define __OLED__ 3 | 4 | #include 5 | #include 6 | 7 | // I2C pins at ATMEGA 8 | #ifndef SDA_PIN 9 | #define SDA_PIN 4 10 | #define SDA_PORT PORTC 11 | #endif 12 | 13 | #ifndef SCL_PIN 14 | #define SCL_PIN 5 15 | #define SCL_PORT PORTC 16 | #endif 17 | 18 | // I2C address of the display 19 | #ifndef SSD1306_ADDRESS 20 | #define SSD1306_ADDRESS 0x3C 21 | #endif 22 | 23 | // size of the display 24 | #define SSD1306_LCDWIDTH 128 25 | #define SSD1306_LCDHEIGHT 64 26 | 27 | // Commands for controling the display 28 | #define SSD1306_SETCONTRAST 0x81 29 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 30 | #define SSD1306_DISPLAYALLON 0xA5 31 | #define SSD1306_NORMALDISPLAY 0xA6 32 | #define SSD1306_INVERTDISPLAY 0xA7 33 | #define SSD1306_DISPLAYOFF 0xAE 34 | #define SSD1306_DISPLAYON 0xAF 35 | #define SSD1306_SETDISPLAYOFFSET 0xD3 36 | #define SSD1306_SETCOMPINS 0xDA 37 | #define SSD1306_SETVCOMDETECT 0xDB 38 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 39 | #define SSD1306_SETPRECHARGE 0xD9 40 | #define SSD1306_SETMULTIPLEX 0xA8 41 | #define SSD1306_SETLOWCOLUMN 0x00 42 | #define SSD1306_SETHIGHCOLUMN 0x10 43 | #define SSD1306_SETSTARTLINE 0x40 44 | #define SSD1306_MEMORYMODE 0x20 45 | #define SSD1306_COLUMNADDR 0x21 46 | #define SSD1306_PAGEADDR 0x22 47 | #define SSD1306_COMSCANINC 0xC0 48 | #define SSD1306_COMSCANDEC 0xC8 49 | #define SSD1306_SEGREMAP 0xA0 50 | #define SSD1306_CHARGEPUMP 0x8D 51 | #define SSD1306_EXTERNALVCC 0x1 52 | #define SSD1306_SWITCHCAPVCC 0x2 53 | 54 | #define MIN_CONTRAST 0 55 | #define MAX_CONTRAST 255 56 | 57 | unsigned char lcd_contrast; 58 | unsigned char lcd_offset; 59 | 60 | void ssd1306_command(int c); 61 | void ssd1306_data(unsigned char c); 62 | void ssd1306_init(); 63 | void ssd1306_clear(); 64 | void ssd1306_char(unsigned char c); 65 | void ssd1306_string(char *string); 66 | void ssd1306_contrast(unsigned char value); 67 | void ssd1306_screenUp(); 68 | void ssd1306_screenDown(); 69 | void ssd1306_inverse(); 70 | void ssd1306_underline(); 71 | void ssd1306_overline(); 72 | 73 | // these are just to maintain the same function scheme used for the other LCD screens 74 | 75 | void lcd_init(); 76 | void lcd_clear(); 77 | void lcd_gotoxy(unsigned char x, unsigned char y); 78 | void lcd_put_s(char *str); 79 | void lcd_put_i(unsigned int value); 80 | void lcd_put_l(unsigned long int value); 81 | void lcd_put_p(const prog_char *progmem_s); 82 | void lcd_icon(int icon); 83 | void lcd_inverse(); 84 | void lcd_underline(); 85 | void lcd_overline(); 86 | void logo(); 87 | 88 | #endif 89 | -------------------------------------------------------------------------------- /firmware/src/sdisk2_original.hex: -------------------------------------------------------------------------------- 1 | :100000000C94E9000C9482150C9406010C940601E2 2 | :100010000C9406010C9406010C9406010C94060144 3 | :100020000C9406010C9406010C9406010C94060134 4 | :100030000C9406010C9406010C9406010C94060124 5 | :100040000C9438150C9406010C9406010C940601CE 6 | :100050000C9406010C9406010C9406010C94060104 7 | :100060000C9406010C94060120000FED032153446B 8 | :1000700049534B494920434647004E6F2053442083 9 | :10008000696E73657274656400464154313600468A 10 | :100090004154333200547970653A2000436F6465EF 11 | :1000A0003A2000534420426C6F636B204552524FFC 12 | :1000B00052004D697373696E67204D4252202020B3 13 | :1000C00000436C7573746572203C2033326B4200C0 14 | :1000D0004E6F742046415431362F33322020004277 15 | :1000E0006F6F7420736563746F7220202000534417 16 | :1000F0002063616E277420696E6974200053442068 17 | :1001000063616E27742069646C652000452052206D 18 | :1001100052204F205200204E6F726D616C2053446C 19 | :1001200020636172642000202020534448432063F0 20 | :100130006172642020202000536F7274696E672002 21 | :1001400066696C65732E2E2E00204E6F7468696E82 22 | :10015000672068657265212020004275696C6469BA 23 | :100160006E67206C6973742E2E2E0053656C656368 24 | :1001700074204E494320696D6167650054523A20EE 25 | :100180000053656C6563742064656C61793A202066 26 | :100190000044656C61793A20002020202020202036 27 | :1001A000202020202020202020004E49433A2000FB 28 | :1001B00020204170706C65205D5B20425220202021 29 | :1001C00000534449534B32204C434420762E352E65 30 | :1001D000350011241FBECFEFD8E0DEBFCDBF11E048 31 | :1001E000A0E0B1E0E2E0F0E302C005900D92AA3099 32 | :1001F000B107D9F726E0AAE0B1E001C01D92A73F00 33 | :10020000B207E1F70E94E6150C94FF170C9400006A 34 | :100210000E94E20E60E080E00E94E80E8AE790E033 35 | :100220000E94380F61E081E00E94E80E89E991E0C8 36 | :100230000E94380F4B99FECF0895CF93C82F14B862 37 | :1002400017B81AB815B818B81BB8249A2C9A8AE3AC 38 | :1002500087B982E38AB982E088B98BB9399A3B9A27 39 | :10026000419A17BC14BC91E095BD85BF809369008D 40 | :10027000109297061092D1061092D0061092CF06D7 41 | :10028000109296061092950610929D069093A406E1 42 | :100290001092A3061092140110921C018DE191E0BE 43 | :1002A0009093A6068093A50680E090E00E94E9174F 44 | :1002B000823018F480939C0607C010929C0660E080 45 | :1002C00080E090E00E94F117CC23E9F00E949E0E9E 46 | :1002D0000E94E20E60E080E00E94E80E81EC91E076 47 | :1002E0000E94380F61E080E00E94E80E80EB91E010 48 | :1002F0000E94380F2FED80E792E721508040904018 49 | :10030000E1F700C00000CF910895FC01892B89F02E 50 | :100310008081882379F0853E61F08F3551F08085AA 51 | :100320008E3439F48185893421F481E092859334C7 52 | :1003300009F080E00895FC01892B59F08081882321 53 | :1003400049F0853E31F08F3521F0838582958170AB 54 | :10035000089580E00895CF92DF92EF92FF920F937D 55 | :100360001F93CF93DF938FEF9FEF909301018093C3 56 | :1003700000010E9481136B017C01672B682B692BA4 57 | :10038000D9F180E090E00E94B21400E010E0C801D2 58 | :100390000E940E14EC01892B49F18881853E11F0F1 59 | :1003A000811124C08B858F3009F1109301010093D6 60 | :1003B00000016EE670E0CE010E944D1781E08B8750 61 | :1003C000FD8AEC8ADB8ECA8E6091D7067091D806C2 62 | :1003D0008091D9069091DA06DF91CF911F910F910C 63 | :1003E000FF90EF90DF90CF900C941E110F5F1F4F86 64 | :1003F000003981E0180759F6DF91CF911F910F91D5 65 | :10040000FF90EF90DF90CF9008958F929F92AF92E0 66 | :10041000BF92CF92DF92EF92FF921F93CF93DF9321 67 | :10042000182FD62FC42F862F90E020E1429F800DF9 68 | :10043000911D1124FC010090F60602C0F695E79587 69 | :100440000A94E2F7EE0FFF1FEE0FFF1FE955F94F79 70 | :10045000408151816281738122E02BB91BB82091C8 71 | :10046000F50630E02150310982239323C090E20643 72 | :10047000D090E306E090E406F090E50646015701CF 73 | :10048000880E991EA11CB11C4250510961097109C5 74 | :100490000090F60604C0440F551F661F771F0A948C 75 | :1004A000D2F7480D591D6A1D7B1D88E10E94171067 76 | :1004B0008FEF0E944E0F8EEF0E944E0F80EB90E068 77 | :1004C00030E120E33BB92BB90197E1F71BB883E09A 78 | :1004D0000E944E0F8CEF0E944E0F8FEF0E944E0F26 79 | :1004E0008FE30E944E0F8FEC0E944E0F83EF0E940D 80 | :1004F0004E0F8CEF0E944E0F8FEF0E944E0F8FE336 81 | :100500000E944E0F8FEC0E944E0F83EF0E944E0F01 82 | :100510008CEF0E944E0F85ED0E944E0F8AEA0E94DA 83 | :100520004E0F86E90E944E0F8FEF0E944E0F8EEF06 84 | :100530000E944E0F8C2F86958A6A0E944E0F8C2F38 85 | :100540008A6A0E944E0F8D2F86958A6A0E944E0FEE 86 | :100550008D2F8A6A0E944E0F8EEFD827CD278C2FC1 87 | :1005600086958A6A0E944E0F8C2F8A6A0E944E0FCF 88 | :100570008EED0E944E0F8AEA0E944E0F8BEE0E9473 89 | :100580004E0F8FEF0E944E0F8FEF0E944E0F8FEF96 90 | :100590000E944E0F8FEF0E944E0F8FEF0E944E0F62 91 | :1005A0008EE591E0189FB001199F700D112480E035 92 | :1005B00090E050E2A0E1B0E3FB01E80FF91FE35E39 93 | :1005C000FE4FE08128E030E040E8FE2FF42319F0F0 94 | :1005D000ABB9BBB902C01BB85BB946952150310914 95 | :1005E000A1F701968D3521E0920731F71BB880E71E 96 | :1005F00090E030E120E33BB92BB90197E1F71BB85C 97 | :1006000080E093E020E21BB82BB90197E1F71BB81B 98 | :100610008FEF0E944E0F8FEF0E944E0F0E94620FCD 99 | :100620000E94271282E08BB91BB8DF91CF911F91F6 100 | :10063000FF90EF90DF90CF90BF90AF909F908F9002 101 | :100640000895CF92DF92EF92FF920F931F93CF9373 102 | :10065000DF934B9935C000E111E0F80181918F3FA4 103 | :1006600059F185E1C82E81E0D82E9DE1E92E91E077 104 | :10067000F92EC0E0DFEFF80160816F3F29F0F6014D 105 | :1006800040818C2F0E940502F801D1938F01F60161 106 | :10069000D1936F01F7011282CF5FF2EAEF1AFEEFFA 107 | :1006A000FF0AC43041F7109214018DE191E090935C 108 | :1006B000A6068093A50604C081E0E431F80771F630 109 | :1006C000DF91CF911F910F91FF90EF90DF90CF902E 110 | :1006D0000895809195069091960680399C40C0F4CB 111 | :1006E00080E18BB9809195069091960620E330E1E8 112 | :1006F000803140E1940730F44B990AC02BB93BB9E3 113 | :100700000196F6CF80E99CE090939606809395063B 114 | :1007100008954B996EC090911401292F30E04EE559 115 | :1007200051E0249FF001259FF00D349FF00D11241E 116 | :10073000E35EFE4F82818D3A09F042C080911C0138 117 | :10074000811131C080919706F901E05FFE4F8083EF 118 | :10075000F901EB5EFE4F4091A30646954695408316 119 | :10076000282F2D7F2D3011F48E5F01C08F5F8F7089 120 | :1007700080939706933029F40E9469030E94210315 121 | :100780001CC09F5F909314014EE551E0949F90012F 122 | :10079000959F300D1124C901835E9E4F9093A6064C 123 | :1007A0008093A5060DC080910E018093970610924C 124 | :1007B0001C018F30F1F40E94690381E08093A4064C 125 | :1007C000209114018EE591E0289FF001299FF00D02 126 | :1007D0001124E35EFE4F8281863959F48781857545 127 | :1007E000880F90859575892B80930E0181E0809309 128 | :1007F0001C0108952DE131E044E080E090E0F90132 129 | :10080000E80FF91F108201968E3551E09507B9F770 130 | :100810004150225A3E4F4111F0CF8FEF8093150186 131 | :10082000809310018093160180931101809317012A 132 | :100830008093120180931801809313010895CF9340 133 | :10084000C82F8FEF9FEF90930101809300010E94CA 134 | :100850000F1059984B9B03C00E9408014CC08DE1BA 135 | :1008600091E09093DC068093DB060E946C1181116D 136 | :1008700044C00E94E20E60E080E00E94E80E8CE03E 137 | :1008800091E00E94380F61E080E00E94E80E8091C4 138 | :10089000D406813019F48DEF90E004C0823029F441 139 | :1008A0008EEE90E00E94380F22C0833019F48FED55 140 | :1008B00090E0F8CF843019F480ED90E0F3CF8530EC 141 | :1008C00019F481EC90E0EECF863019F482EB90E0E1 142 | :1008D000E9CF873019F483EA90E0E4CF8CE990E027 143 | :1008E0000E94380F8091D40690E00E94FE0E109274 144 | :1008F000D1064B9BFECF80E0B0C0CC23D9F00E9444 145 | :10090000E20E60E080E00E94E80E8091DF06823017 146 | :1009100019F487E291E002C086E191E00E94380F6D 147 | :1009200059982FE38BE49CE4215080409040E1F7FC 148 | :1009300000C000000E942E12811143C00E94E20EEE 149 | :1009400060E080E00E94E80E8CE091E00E94380FA9 150 | :1009500061E080E00E94E80E8091D406813019F4B5 151 | :100960008DEF90E004C0823029F48EEE90E00E947A 152 | :10097000380F22C0833019F48FED90E0F8CF843027 153 | :1009800019F480ED90E0F3CF853019F481EC90E01C 154 | :10099000EECF863019F482EB90E0E9CF873019F47E 155 | :1009A00083EA90E0E4CF8CE990E00E94380F8091D8 156 | :1009B000D40690E00E94FE0E1092D1064B9BFECF13 157 | :1009C0009ACF4091F5062091EF063091F006429FB4 158 | :1009D000C001439F900D112481159047D0F485E00C 159 | :1009E0008093D4060E94E20E60E080E00E94E80E50 160 | :1009F0008CE091E00E94380F61E080E00E94E80EF8 161 | :100A000081EC90E00E94380F1092D1064B9BFECFF4 162 | :100A100072CFCC23E1F061E080E00E94E80E85E92E 163 | :100A200090E00E94380F8091E6068B3019F48FE831 164 | :100A300090E002C089E890E00E94380F8FE39BE4C9 165 | :100A40002CE4815090402040E1F700C0000059980C 166 | :100A50000E94FA030E940B1081E0CF9108958F92BB 167 | :100A60009F92AF92BF92CF92DF92EF92FF920F933D 168 | :100A70001F93CF93DF936115710519F480E090E027 169 | :100A80004CC17B01EC0160E080E00E94E80E8AEA44 170 | :100A900091E00E94380F6701570108E0A00EB11CD9 171 | :100AA000F60181916F01803211F00E94F00EAC14BA 172 | :100AB000BD04B1F789E991E00E94380F61E080E060 173 | :100AC0000E94E80E89E991E00E94380F61E080E021 174 | :100AD0000E94E80E81E991E00E94380F8091D606CD 175 | :100AE00090E00E94FE0ED0930B01C0930A0120916A 176 | :100AF000E606F701828D938D2B3091F44489558958 177 | :100B000060E070E0BA0155274427A0E0B0E08A0118 178 | :100B10009B01082B192B2A2B3B2BC901B80103C0C1 179 | :100B2000BC0180E090E0611571058105910509F433 180 | :100B3000A5CFE7EAF6E0119211921192119216E018 181 | :100B4000EF3CF107C1F76093A7067093A806809366 182 | :100B5000A9069093AA0611E0663FFFEF7F07810583 183 | :100B60009105A8F40E941B13663F2FEF72078105C1 184 | :100B7000910558F434E0139FF0011124E955F94F21 185 | :100B800060837183828393831F5F1A3028F3809080 186 | :100B9000EB069090EC06A090ED06B090EE068091EA 187 | :100BA000000190910101019609F488C080E090E075 188 | :100BB0000E94B2148FEF9FEFDC018093D7069093D1 189 | :100BC000D806A093D906B093DA06809100019091DF 190 | :100BD00001010E942115FC012091E606828D938D72 191 | :100BE0002B3071F4C488D588E12CF12C7601DD24FA 192 | :100BF000CC24A0E0B0E0C82AD92AEA2AFB2A03C004 193 | :100C00006C01E12CF12C02E0C01AD108E108F108D6 194 | :100C1000A091F506B0E0A70196010E94421700914D 195 | :100C2000E2061091E3062091E4063091E506600F9C 196 | :100C3000711F821F931F0E94C710E091DB06F09185 197 | :100C4000DC068DEC92E0ABEAB1E080839183A28375 198 | :100C5000B38345815681678170858185928584162D 199 | :100C60009506A606B70619F48C179D0731F0438741 200 | :100C7000548765877687908B878785829682A7823F 201 | :100C8000B086D287C1878091D60684838091A006E2 202 | :100C9000818BA091F506B0E0A70196010E94421752 203 | :100CA000C090E206D090E306E090E406F090E506FE 204 | :100CB0006C0D7D1D8E1D9F1D0E941E118092EB06E6 205 | :100CC0009092EC06A092ED06B092EE061092960677 206 | :100CD000109295061092D00610929D06C1E0C09326 207 | :100CE000A4061092A3061092970610921401109277 208 | :100CF0001C018DE191E09093A6068093A50659987A 209 | :100D000040E052E060E070E080E10E945C100E94F0 210 | :100D1000FA03C093D10681E090E0DF91CF911F915B 211 | :100D20000F91FF90EF90DF90CF90BF90AF909F908A 212 | :100D30008F900895CF92DF92EF92FF920F931F93BF 213 | :100D4000CF93DF93C090EB06D090EC06E090ED06D9 214 | :100D5000F090EE068091000190910101019609F456 215 | :100D600077C080E090E00E94B2148FEF9FEFDC012B 216 | :100D70008093D7069093D806A093D906B093DA064D 217 | :100D800080910001909101010E942115FC012091A8 218 | :100D9000E606828D938D2B3079F424893589A9015B 219 | :100DA00060E070E0BA0155274427A0E0B0E0842B52 220 | :100DB000952BA62BB72B02C0A0E0B0E09C01AD01A3 221 | :100DC0002250310941095109A091F506B0E00E9475 222 | :100DD00042170091E2061091E3062091E40630915B 223 | :100DE000E506600F711F821F931F0E94C710E091DC 224 | :100DF000DB06F091DC068FEF9FEFDC018093D706D6 225 | :100E00009093D806A093D906B093DA06838594858B 226 | :100E1000A585B6858093EB069093EC06A093ED062E 227 | :100E2000B093EE06C785D089CE010E9421158C01B2 228 | :100E30000E948501882361F0B801CE01DF91CF9136 229 | :100E40001F910F91FF90EF90DF90CF900C942F05A2 230 | :100E5000C092EB06D092EC06E092ED06F092EE0620 231 | :100E6000DF91CF911F910F91FF90EF90DF90CF9086 232 | :100E700008955E9A2D9A5F9A08957F928F929F921D 233 | :100E8000AF92BF92CF92DF92EF92FF920F931F9398 234 | :100E9000CF93DF930E94E20E60E080E00E94E80EB4 235 | :100EA00081E891E00E94380F61E080E00E94E80E46 236 | :100EB00081E991E00E94380F8091D60690E00E946F 237 | :100EC000FE0E9090D606A92CBB24B394772473947D 238 | :100ED000DAE08D2E0E9439078091D606A81699F087 239 | :100EE00061E080E00E94E80E81E991E00E94380F05 240 | :100EF0008091D60690E00E94FE0E88E690E00E9467 241 | :100F0000380FA090D6064B996BC189B120919C06F1 242 | :100F100041E050E0222311F040E050E093B161E065 243 | :100F200070E0213011F060E070E092959695977036 244 | :100F30009B259170C92F20E0D22FC69FF001C79F3B 245 | :100F4000F00DD69FF00D1124082E000C990B809502 246 | :100F500090958827990F881F9927849F9001859FD6 247 | :100F6000300D949F300D11242E2B3F2B232BB1F1EC 248 | :100F700089B193B19295969597709B25092F017031 249 | :100F800010E0069FF001079FF00D169FF00D112451 250 | :100F9000082E000C990B809590958827990F881F33 251 | :100FA0009927849F9001859F300D949F300D1124C7 252 | :100FB0002E2B3F2B232BE1F68FE392E42FE0815081 253 | :100FC00090402040E1F700C000008091D60681509B 254 | :100FD00019F08093D60602C08092D60693B1209174 255 | :100FE0009C0661E070E0222311F060E070E089B1BE 256 | :100FF00041E050E0213011F040E050E092959695AC 257 | :1010000097709B2590FBEE24E0F8F12CE69EF00112 258 | :10101000E79EF00DF69EF00D1124082E000C990BA2 259 | :10102000809590958827990F881F9927849F900114 260 | :10103000859F300D949F300D11242E2B3F2B232B99 261 | :10104000C1F193B189B19295969597709B2590FBCC 262 | :10105000CC24C0F8D12CC69EF001C79EF00DD69EC0 263 | :10106000F00D1124082E000C990B8095909588277F 264 | :10107000990F881F9927849F9001859F300D949F19 265 | :10108000300D11242E2B3F2B232BD9F68FE392E426 266 | :101090002FE0815090402040E1F700C00000809197 267 | :1010A000D6068F5F8B3018F48093D60602C07092FC 268 | :1010B000D6064E990FCF4E9BFECF8FE392E42FE0E2 269 | :1010C000815090402040E1F700C000008091D6069A 270 | :1010D000981609F485C08091000190910101019654 271 | :1010E00009F47EC080E090E00E94B2148DE191E0AE 272 | :1010F0009093DC068093DB060E94FA031092D706D9 273 | :101100001092D8061092D9061092DA06809100014A 274 | :10111000909101010E942115FC012091E606828D2B 275 | :10112000938D2B3071F4C488D588E12CF12C760195 276 | :10113000DD24CC24A0E0B0E0C82AD92AEA2AFB2A80 277 | :1011400003C06C01E12CF12C82E0C81AD108E1083F 278 | :10115000F108A091F506B0E0A70196010E944217A0 279 | :101160000091E2061091E3062091E4063091E50635 280 | :10117000600F711F821F931F0E94C710E091DB0652 281 | :10118000F091DC0680819181A281B3818D3C9240F7 282 | :10119000AB4AB14029F58091D6068483A091F5062B 283 | :1011A000B0E0A70196010E9442170091E20610915B 284 | :1011B000E3062091E4063091E506600F711F821F5F 285 | :1011C000931FDF91CF911F910F91FF90EF90DF90D0 286 | :1011D000CF90BF90AF909F908F907F900C941E11F6 287 | :1011E000DF91CF911F910F91FF90EF90DF90CF9003 288 | :1011F000BF90AF909F908F907F9008952F923F92D5 289 | :101200005F926F927F928F929F92AF92BF92CF9296 290 | :10121000DF92EF92FF920F931F93CF93DF93CDB79F 291 | :10122000DEB72A970FB6F894DEBF0FBECDBF10927F 292 | :101230000D0110920C018DE191E09093DC068093FA 293 | :10124000DB0689ED93E09093A2068093A1068FEFD1 294 | :101250009FEFDC018093D7069093D806A093D90620 295 | :10126000B093DA060E94FA0360E080E00E94E80E84 296 | :101270008BE691E00E94380F61E080E00E94E80E6A 297 | :101280008AE591E00E94380F00E010E0C8010E945A 298 | :1012900021157C01009799F0FC01808181110FC01C 299 | :1012A00080910C0190910D01892BC9F561E080E0DE 300 | :1012B0000E94E80E89E491E00E94380F06C2C7013F 301 | :1012C0000E948501811105C0C7010E949B018823EE 302 | :1012D000B9F0E0910C01F0910D01EE0FFF1F80912C 303 | :1012E000A1069091A206E80FF91F11830083809157 304 | :1012F0000C0190910D01019690930D0180930C01CA 305 | :101300000F5F1F4F80910C0190910D01883C91055A 306 | :101310003CF60039F1E01F0709F0B8CFC1CF61E01A 307 | :1013200080E00E94E80E88E391E00E94380F8091EF 308 | :101330000C0190910D0102971CF0812C912C5DC045 309 | :1013400020910C0130910D0140910A0150910B0147 310 | :10135000E091A106F091A20600E010E080E090E0AC 311 | :1013600062C08701000F111FE091A106F091A20653 312 | :10137000E00FF11F808191810E94211548E050E02B 313 | :10138000BC01CE0101960E946F17E091A106F09179 314 | :10139000A206EA0DFB1D808191810E94211548E083 315 | :1013A00050E0BC01CE0101960E94621797FF12C067 316 | :1013B000E091A106F091A206DF01A00FB11F8D916F 317 | :1013C0009C911197EA0DFB1D208131812D933C9357 318 | :1013D000918380832FEFE21AF20A32E0A30EB11C50 319 | :1013E00080910C0190910D0188199909E816F90670 320 | :1013F0000CF4B7CF8FEF881A980A80910C01909166 321 | :101400000D010197881699060CF09ACFA12CB12CEA 322 | :10141000EE24E394F12CE4CF619171916417750788 323 | :1014200009F48C01019682179307B4F3EE24EA9431 324 | :10143000FE2C552453940E9439074B9946C189B11B 325 | :1014400020919C0641E050E0222311F040E050E062 326 | :1014500093B161E070E0213011F060E070E09295AE 327 | :10146000969597709525917099871A8629853A8562 328 | :10147000269FF001279FF00D369FF00D1124082EB6 329 | :10148000000C990B809590958827990F881F9927B4 330 | :10149000849F9001859F300D949F300D11242E2B39 331 | :1014A0003F2B232BC9F189B193B1929596959770F3 332 | :1014B000952590FB222420F8312C269EF001279EB2 333 | :1014C000F00D369EF00D1124082E000C990B80951E 334 | :1014D00090958827990F881F9927849F9001859F51 335 | :1014E000300D949F300D11242E2B3F2B232BD9F63A 336 | :1014F0003FE382E49FE0315080409040E1F700C03C 337 | :1015000000000F5F1F4F80910C0190910D01081793 338 | :10151000190711F400E010E093B120919C0661E0FE 339 | :1015200070E0222311F060E070E089B141E050E00A 340 | :10153000213011F040E050E09295969597709525F6 341 | :1015400090FB662460F8712C669EF001679EF00D9A 342 | :10155000769EF00D1124082E000C990B8095909525 343 | :101560008827990F881F9927849F9001859F300DA8 344 | :10157000949F300D11242E2B3F2B232BC1F193B1BF 345 | :1015800089B1929596959770952590FBCC24C0F8DB 346 | :10159000D12CC69EF001C79EF00DD69EF00D1124F1 347 | :1015A000082E000C990B809590958827990F881F1D 348 | :1015B0009927849F9001859F300D949F300D1124B1 349 | :1015C0002E2B3F2B232BD9F6EFE3F2E42FE0E15053 350 | :1015D000F0402040E1F700C000000150110917FF62 351 | :1015E00006C000910C0110910D01015011094E9996 352 | :1015F0002FC04E9BFECF3FE382E49FE031508040FE 353 | :101600009040E1F700C00000000F111FE091A1061B 354 | :10161000F091A206E00FF11F808191810E942115B7 355 | :101620007C010E949B01882331F0C7010E94B21403 356 | :101630000E94FE084AC08091A1069091A206FC017A 357 | :10164000E00FF11FB701808191810E942F053DC0FD 358 | :101650000E151F0509F4EFCEE091A106F091A20648 359 | :10166000C801880F991FE80FF91F808191810E949E 360 | :1016700021157C0161E080E00E94E80EC7010E9414 361 | :101680009B01882321F083E091E00E94F20E570134 362 | :101690004701E8E08E0E911CF50181915F018032D7 363 | :1016A00011F00E94F00EA814B904B1F7C7010E940E 364 | :1016B0009B01882321F085E091E00E94F20E89E9E8 365 | :1016C00091E00E94380F7801B6CE2A960FB6F894B2 366 | :1016D000DEBF0FBECDBFDF91CF911F910F91FF9065 367 | :1016E000EF90DF90CF90BF90AF909F908F907F90C2 368 | :1016F0006F905F903F902F900895CF92DF92EF927E 369 | :10170000FF920F931F93CF93DF938DE191E090931E 370 | :10171000DC068093DB068FEF9FEFDC018093D7061A 371 | :101720009093D806A093D906B093DA0680E090E0B3 372 | :101730000E94B2148FEF9FEF9093010180930001FC 373 | :10174000CFEFDFEF00E010E0C8010E9421157C011F 374 | :10175000009709F484C0FC018081882309F486C0C5 375 | :10176000C7010E948501882329F0CF3FFFEFDF07E3 376 | :1017700009F4E8014BE050E06EE670E0C7010E941A 377 | :101780005417892B09F06BC01093010100930001DD 378 | :101790002091E606F701828D938D2B3079F4248910 379 | :1017A0003589A90160E070E0BA0155274427A0E01F 380 | :1017B000B0E0482B592B6A2B7B2B03C0AC0160E0B7 381 | :1017C00070E0A091F5069A01AB0122503109410960 382 | :1017D0005109B0E00E944217C090E206D090E306A3 383 | :1017E000E090E406F090E5066C0D7D1D8E1D9F1DBA 384 | :1017F0000E94C710E091DB06F091DC0680819181A8 385 | :10180000A281B3818D3C9240AB4AB14001F5848105 386 | :101810008093D60685819681A781B0858093EB065B 387 | :101820009093EC06A093ED06B093EE06E184F2846B 388 | :10183000C7010E942115009731F00E94850188237D 389 | :1018400011F0E70113C080E090E00E94B21480E044 390 | :1018500090E00E94B214CF3F8FEFD807E1F40F5F02 391 | :101860001F4F0039E1E01E0709F06ECFCF3FFFEFB9 392 | :10187000DF0789F4F8940E94FE084B991BC0809101 393 | :10188000D106882331F080916E00816080936E00D4 394 | :10189000E89A78940FC0CE010E942115BC01CE01B8 395 | :1018A000DF91CF911F910F91FF90EF90DF90CF903C 396 | :1018B0000C942F05DF91CF911F910F91FF90EF9026 397 | :1018C000DF90CF9008954F925F926F927F928F92A8 398 | :1018D0009F92AF92BF92CF92DF92EF92FF920F93BF 399 | :1018E0001F93CF93DF930E9439074B9B22C08FEF4A 400 | :1018F00090E04B9BC3C10197E1F780916E008E7F12 401 | :1019000080936E00E8981092D1061092A406DF91A1 402 | :10191000CF911F910F91FF90EF90DF90CF90BF90EC 403 | :10192000AF909F908F907F906F905F904F900C94AE 404 | :101930000801309B87C14E9B5AC089B140919C06DB 405 | :1019400061E070E0442311F060E070E093B121E0C9 406 | :1019500030E0413011F020E030E09295969597709C 407 | :10196000A1E09A2790FBAA24A0F8B12CA29EA00186 408 | :10197000A39E500DB29E500D1124082E000C990B01 409 | :10198000809590958827990F881F9927869FF00149 410 | :10199000879FF00D969FF00D11244E2B5F2B452B4A 411 | :1019A00031F593B189B1929596959770A927A0FBCF 412 | :1019B000CC24C0F8D12CC69EA001C79E500DD69E47 413 | :1019C000500D1124082E000C990B809590958827B6 414 | :1019D000990F881F9927829FB001839F700D929F56 415 | :1019E000700D1124462B572B452B09F42BC14E9912 416 | :1019F00010C084E690E021E04E9920E00197E1F7E5 417 | :101A0000222309F43BC14E9BFECFF8940E94FE08AE 418 | :101A100016C129B160919C0641E050E0662311F0A7 419 | :101A200040E050E033B181E090E0613011F080E0BF 420 | :101A300090E0329536953770A1E03A2730FBEE24DE 421 | :101A4000E0F8F12CE89EB001E99E700DF89E700D53 422 | :101A50001124022E000C330B209530952227330FD2 423 | :101A6000221F3327249FF001259FF00D349FF00D96 424 | :101A700011246E2B7F2B672B09F45FC064E670E0A6 425 | :101A8000FF24F394EE24E39429B133B132953695D3 426 | :101A900037703E25032F017010E0089FF001099F69 427 | :101AA000F00D189FF00D1124022E000C330B209521 428 | :101AB00030952227330F221F3327249FD001259FE3 429 | :101AC000B00D349FB00D11249F012A2B3B2B232BEB 430 | :101AD00009F4F12C61507109B9F6FF2009F4CEC068 431 | :101AE000A1E029B133B13295369537703A2731707C 432 | :101AF000C32F30E0D32FC89FF001C99FF00DD89FAE 433 | :101B0000F00D1124022E000C330B20953095222766 434 | :101B1000330F221F3327249FB001259F700D349F60 435 | :101B2000700D11249F01262B372B232BD1F6F8940F 436 | :101B30000E943D074B99A2C094C033B129B13295A0 437 | :101B400036953770A327A0FB882480F8912C849EBB 438 | :101B5000B001859E700D949E700D1124022E000C14 439 | :101B6000330B209530952227330F221F3327289FD0 440 | :101B7000F001299FF00D389FF00D11249B012E2BB1 441 | :101B80003F2B232B09F47AC064E670E0C1E0D1E07A 442 | :101B900033B129B13295369537703D2730FB662435 443 | :101BA00060F8712C649EF001659EF00D749EF00D3E 444 | :101BB0001124022E000C330B209530952227330F71 445 | :101BC000221F3327289FD001299FB00D389FB00DC9 446 | :101BD00011249F012A2B3B2B232B09F4C0E06150D9 447 | :101BE0007109B1F6CC2309F449C0A1E033B129B1A0 448 | :101BF0003295369537703A2730FB442440F8512C03 449 | :101C0000449EF001459EF00D549EF00D1124022ECD 450 | :101C1000000C330B209530952227330F221F3327DA 451 | :101C2000289FB001299F700D389F700D11249F01CE 452 | :101C3000262B372B232BD1F6F8940E949A064B9B28 453 | :101C400012C01CC08091D106811118C08FEF90E0A6 454 | :101C50004B9914C00197E1F7F89481E00E941F04AA 455 | :101C600081110E947D0B8091D106882331F08091F3 456 | :101C70006E00816080936E00E89A7894DF91CF9136 457 | :101C80001F910F91FF90EF90DF90CF90BF90AF909A 458 | :101C90009F908F907F906F905F904F9008954598A0 459 | :101CA00080FF02C0419A01C0419881FF02C0439A5F 460 | :101CB00001C0439882FF02C05C9A01C05C9883FF18 461 | :101CC00002C05D9A01C05D98459A88E08A95F1F757 462 | :101CD0000000459888E08A95F1F700000895CF93B9 463 | :101CE000C82F599A449882958F700E944F0E8C2F5E 464 | :101CF0008F700E944F0ECC7F29F086E791E001970C 465 | :101D0000F1F704C080E899E20197F1F700C0000004 466 | :101D1000CF910895CF93C82F599A449A82958F7086 467 | :101D20000E944F0E8C2F8F700E944F0E80E792E022 468 | :101D30000197F1F700C00000CF91089544982FE873 469 | :101D400080ED93E0215080409040E1F700C000001A 470 | :101D500083E00E944F0E81E19AE70197F1F700C0FE 471 | :101D6000000083E00E944F0E81E19AE70197F1F7AE 472 | :101D700000C0000083E00E944F0E81E19AE70197C6 473 | :101D8000F1F700C0000082E00E944F0E81E19AE767 474 | :101D90000197F1F700C0000088E20E946F0E88E012 475 | :101DA0000E946F0E81E00E946F0E82E00E946F0E13 476 | :101DB00086E00E946F0E8CE00E946F0E8AEA80938C 477 | :101DC000A006089581E00E946F0E82E00C946F0ED1 478 | :101DD0008F7060FD02C0805801C080540C946F0E5B 479 | :101DE0000C948A0ECF93DF93EC018991882319F02C 480 | :101DF0000E948A0EFACFDF91CF910895CF93DF939F 481 | :101E0000CDB7DEB72A970FB6F894DEBF0FBECDBFB1 482 | :101E10004AE0BE016F5F7F4F0E948317CE0101969B 483 | :101E20000E94F20E2A960FB6F894DEBF0FBECDBF09 484 | :101E3000DF91CF910895CF93DF93CDB7DEB72A9787 485 | :101E40000FB6F894DEBF0FBECDBF2AE0AE014F5FE4 486 | :101E50005F4F0E948E17CE0101960E94F20E2A96C5 487 | :101E60000FB6F894DEBF0FBECDBFDF91CF910895BE 488 | :101E7000CF93DF93FC018491EF012196882321F019 489 | :101E80000E948A0EFE01F7CFDF91CF910895519AFB 490 | :101E9000549A559A50981092D306089528E030E04D 491 | :101EA00090E840E250E160E3782F792319F05BB9C4 492 | :101EB0006BB902C01BB84BB9969521503109A1F7F7 493 | :101EC0001BB80895CF93DF931F92CDB7DEB780E1A3 494 | :101ED0008BB9198280E020E330E19981983051F08C 495 | :101EE0002BB999B1880F9170892B3BB999819F5F6C 496 | :101EF0009983F3CF0F90DF91CF91089582E38BB94F 497 | :101F000082E18BB9089528E100002A95E9F701974D 498 | :101F1000D1F708950895DF92EF92FF920F931F93E8 499 | :101F2000CF93DF93082FC8E0D0E010E880E2F82ECE 500 | :101F300090E1E92E20E3D22E802F812339F0EBB8F7 501 | :101F400081E090E00E94830FDBB806C01BB881E0FF 502 | :101F500090E00E94830FFBB81695219769F781E006 503 | :101F600090E00E94830F1BB8DF91CF911F910F91DA 504 | :101F7000FF90EF90DF9008959091D306911103C0E8 505 | :101F80000E948B0F02C00E944E0F80E00895FF92C6 506 | :101F90000F931F93CF93DF931F92CDB7DEB780E1EE 507 | :101FA0008BB981E090E00E94830F198210E000E37A 508 | :101FB00080E1F82E8981883091F00BB981E090E0C2 509 | :101FC0000E94830F89B1110F8170182BFBB881E03B 510 | :101FD00090E00E94830F89818F5F8983EBCF812FEF 511 | :101FE0000F90DF91CF911F910F91FF9008958091F5 512 | :101FF000D306811102C00C94C70F0C94620F82E3C8 513 | :102000008BB981E090E00E94830F82E18BB981E07F 514 | :1020100090E00C94830F81E08093D3060895109292 515 | :10202000D30608950E94620F87FDFCCF0895CF92DA 516 | :10203000DF92EF92FF92CF93C82F6A017B0100904D 517 | :10204000D50604C0CC0CDD1CEE1CFF1C0A94D2F794 518 | :102050008FEF0E944E0F8C2F80640E944E0F8F2DA9 519 | :102060000E944E0F8E2D0E944E0F8D2D0E944E0FFE 520 | :102070008C2D0E944E0F85E90E944E0F8FEF0E941B 521 | :102080004E0F0E9412108093E00681508E3FC8F3DD 522 | :10209000CF91FF90EF90DF90CF900895AB01BC01FE 523 | :1020A0001092DE0681E10E9417100E94620F809359 524 | :1020B000E1068E3FD1F70895CF92DF92EF92FF9223 525 | :1020C000CF93DF93C82F6A017B018091DD068111D8 526 | :1020D00013C08FEE8C0F823040F088EE8C0F823070 527 | :1020E00020F080EE8C0F823038F489E0CC0CDD1CBF 528 | :1020F000EE1CFF1C8A95D1F78FEF0E94BC0F8C2F2E 529 | :1021000080640E94BC0F8F2D0E94BC0F8E2D0E94F8 530 | :10211000BC0F8D2D0E94BC0F8C2D0E94BC0FC830AF 531 | :1021200011F487E801C085E90E94BC0FF12C0E94E0 532 | :10213000F70FD82F8F3F21F4FA94F110F8CF1DC07C 533 | :1021400081111BC0CA33C9F40E94F70F1092D50643 534 | :1021500086FF05C081E08093DD0682E006C0109214 535 | :10216000DD0689E08093D50681E08093DF060E943A 536 | :10217000F70F0E94F70F0E94F70F0E94F70F8D2FA5 537 | :10218000DF91CF91FF90EF90DF90CF900895CF92A5 538 | :10219000DF92EF92FF92CF93DF93C090D706D0905B 539 | :1021A000D806E090D906F090DA06C616D706E806FB 540 | :1021B000F906E1F16B017C016093D7067093D806B4 541 | :1021C0008093D9069093DA0659988FEF0E94BC0F3E 542 | :1021D0008FEF0E94BC0FB701A60181E10E945C1045 543 | :1021E000811125C0C0E0D0E00E94F70F8E3F29F09A 544 | :1021F0002197D1F7599A80E01AC0E12CF12CC091B7 545 | :10220000DB06D091DC06CE0DDF1D0E94F70F888320 546 | :102210008FEFE81AF80AE11482E0F80681F70E94CD 547 | :10222000F70F0E94F70F0E94F70F599A81E0DF9194 548 | :10223000CF91FF90EF90DF90CF900895CF93DF93F1 549 | :10224000AB01BC0188E10E945C1081113DC059982E 550 | :102250008EEF0E94BC0FC0E0D0E0E091DB06F09171 551 | :10226000DC06EC0FFD1F80810E94BC0F2196C1157A 552 | :1022700082E0D80791F78FEF0E94BC0F8FEF0E948A 553 | :10228000BC0F0E94F70F982F9F71953079F4C0E032 554 | :10229000D0E00E94F70F811103C02196D1F706C04C 555 | :1022A000599A8FEF0E94BC0F599808C0599A0CC0D8 556 | :1022B0009E012F5F3F4F2196C9F3E9010E94F70F5E 557 | :1022C0008823B1F3599A81E0DF91CF910895AB0152 558 | :1022D000BC0180E10C945C10CF92DF92EF92FF92F0 559 | :1022E0000F931F93CF93DF931092D40685E08093D2 560 | :1022F000D6060E94470F0E940F104B9998C080E1AC 561 | :1023000085B9599A8FE097E2A0E0B0E08093D706B4 562 | :102310009093D806A093D906B093DA06C4E60E943B 563 | :10232000FF0FC150E1F75998CCE08FEF0E94BC0F2E 564 | :10233000C150D9F700E018E040E050E0BA0180E079 565 | :102340000E945C100150110931F415B8599A81E0CE 566 | :102350008093D4066DC0813079F7CCE08FEF0E9476 567 | :10236000BC0FC150D9F7C1E0D2E04AEA51E060E0C9 568 | :1023700070E088E00E945C108A3A49F481E0809322 569 | :10238000DF06C12CD12CE12C80E4F82E09C081306D 570 | :10239000A9F3219751F71092DF06C12CD12C7601B9 571 | :1023A000CCE08FEF0E94BC0FC150D9F701E012E0E2 572 | :1023B00040E050E0BA0187E30E945C10B701A6013B 573 | :1023C00089E20E945C100150110931F482E080938F 574 | :1023D000D40615B8599A2CC08111EACF1092DD06A7 575 | :1023E00089E08093D5068091DF06813081F040E05E 576 | :1023F00050E0BA018BE30E945C1060E072E080E084 577 | :1024000090E00E94671115B8599AC1E011C0C5E665 578 | :10241000D0E08FEF0E94BC0F40E050E0BA018AE3A9 579 | :102420000E945C10219719F38111F3CFE0CFC0E037 580 | :102430008C2FDF91CF911F910F91FF90EF90DF9044 581 | :10244000CF90089580E185B9089515B808950E9448 582 | :10245000620F4B9902C08F3FD1F708958F929F92E0 583 | :10246000AF92BF92CF92DF92EF92FF921F93CF93E2 584 | :10247000DF9360E070E0CB010E94C710E091DB06C3 585 | :10248000F091DC0680818D7F893E51F1DF01A25001 586 | :10249000BE4F8D919C9185359A4A11F086E014C00B 587 | :1024A000E254FE4F84818093E606608571858285C3 588 | :1024B00093850E94C710E091DB06F091DC068081D5 589 | :1024C0008D7F893E29F083E08093D40680E0A7C009 590 | :1024D0008091E6068B3021F0863011F084E0F4CF55 591 | :1024E000C091DB06D091DC06438554855093F006FD 592 | :1024F0004093EF0615851093F50686859785C48C65 593 | :10250000D58CE68CF78CC80ED91EE11CF11CC0924C 594 | :10251000F106D092F206E092F306F092F406809172 595 | :10252000E606863019F4A689B78902C0ACA1BDA120 596 | :10253000208930E02A9FB0012B9F700D3A9F700DCB 597 | :10254000112446015701860E971EA11CB11C8092D2 598 | :10255000E2069092E306A092E406B092E506863089 599 | :10256000D9F08CA59DA5AEA5BFA59C01AD012250BB 600 | :10257000310941095109A12FB0E00E944217860E8E 601 | :10258000971EA81EB91E8092E7069092E806A092B8 602 | :10259000E906B092EA0624C00E943317C60ED71E81 603 | :1025A000E81EF91EC092E706D092E806E092E9061E 604 | :1025B000F092EA068189928935E0880F991F3A9551 605 | :1025C000E1F7BA010E94FD16C60ED71EE11CF11CF0 606 | :1025D000C092E206D092E306E092E406F092E506AD 607 | :1025E000812F90E020E031E0320F8130910521F021 608 | :1025F00096958795232FF7CF2093F6068091E706CF 609 | :102600009091E806A091E906B091EA068093EB0666 610 | :102610009093EC06A093ED06B093EE0681E0DF9177 611 | :10262000CF911F91FF90EF90DF90CF90BF90AF9030 612 | :102630009F908F9008954F925F926F927F928F92AA 613 | :102640009F92AF92BF92CF92DF92EF92FF92CF9381 614 | :102650002091E606263039F488248A94982CA12CFF 615 | :10266000B12C21E007C088248A94982CA82C2FE054 616 | :10267000B22E22E004C0660F771F881F991F2A958B 617 | :10268000D2F72091EF063091F00640E050E00E9432 618 | :1026900011176B017C018091F1069091F206A091D7 619 | :1026A000F306B091F40629013A01480E591E6A1E3C 620 | :1026B0007B1ECAE0C301B2010E94C710882311F03B 621 | :1026C000C150C1F78091DB069091DC06FC01EC0D56 622 | :1026D000FD1D80819181A281B381BC01CD01682162 623 | :1026E00079218A219B21CF91FF90EF90DF90CF90AD 624 | :1026F000BF90AF909F908F907F906F905F904F9022 625 | :1027000008954F925F926F927F928F929F92AF92B5 626 | :10271000BF92CF92DF92EF92FF92CF9388EEC82EB6 627 | :1027200083E0D82EE12CF12CC701B6010E941B13C7 628 | :10273000611571058105910591F030EAC31636E8FF 629 | :10274000D30631E0E306F10431F02FEFC21AD20ACA 630 | :10275000E20AF20AE9CF60E070E0CB0151C040EA42 631 | :10276000C41646E8D40641E0E406F10409F448C082 632 | :102770008091E606863011F481E001C082E0A70175 633 | :10278000960104C0220F331F441F551F8A95D2F7AC 634 | :10279000CA01B9012091EF063091F00640E050E007 635 | :1027A0000E9411172B013C018091F1069091F206D5 636 | :1027B000A091F306B091F40649015A01880E991EC2 637 | :1027C000AA1EBB1ECAE0C501B4010E94C71088231F 638 | :1027D00011F0C150C1F78091DB069091DC06FC013D 639 | :1027E000E40DF51D8FEF90E0A0E0B0E080839183D1 640 | :1027F000A283B383C501B4010E941E11C701B601B3 641 | :10280000CF91FF90EF90DF90CF90BF90AF909F90CF 642 | :102810008F907F906F905F904F9008958F929F92CE 643 | :10282000AF92BF92CF92DF92EF92FF920F931F93DE 644 | :10283000CF93DF93EC0155E0CC0FDD1F5A95E1F704 645 | :102840008E01012F112706952091F506622F70E069 646 | :10285000C8010E94FD167B018091EB069091EC0669 647 | :10286000A091ED06B091EE06672B09F44EC03091B1 648 | :10287000E606363071F48090E7069090E806A09066 649 | :10288000E906B090EA0688159905AA05BB0509F482 650 | :102890005AC08090E2069090E306A090E406B090C3 651 | :1028A000E506BC01CD01681979098A099B0930E068 652 | :1028B00040E050E00E941117CA01B9016E5F7F4FDE 653 | :1028C0008F4F9F4FC12CD12C0E941B132FEFC21A88 654 | :1028D000D20ACE14DF04C1F79B01AC0122503109AA 655 | :1028E00041095109A091F506B0E00E94421780907D 656 | :1028F000E2069090E306A090E406B090E506DC01C5 657 | :10290000CB01880D991DAA1DBB1D9801322F2227CE 658 | :10291000330FC21BD30B4091F5064E9D90014F9D86 659 | :10292000300D1124021B130BBC01CD01600F711F70 660 | :10293000811D911D0E94C7108091DB069091DC06DD 661 | :102940008C0F9D1F02C080E090E0DF91CF911F911E 662 | :102950000F91FF90EF90DF90CF90BF90AF909F903E 663 | :102960008F9008950F931F93FC01892B49F4809158 664 | :10297000E7069091E806A091E906B091EA0639C011 665 | :102980009385892F807194FF3DC02091E606828D4A 666 | :10299000938D2B3079F424893589A90160E070E0AA 667 | :1029A000BA0155274427A0E0B0E0842B952BA62B35 668 | :1029B000B72B02C0A0E0B0E00097A105B105B9F2C5 669 | :1029C0009C01AD012250310941095109A091F50640 670 | :1029D000B0E00E9442170091E2061091E3062091B8 671 | :1029E000E4063091E506DC01CB01800F911FA21FA8 672 | :1029F000B31F8093EB069093EC06A093ED06B09383 673 | :102A0000EE0681E01F910F910895FC01892BB1F032 674 | :102A10008081882399F0853E89F08E3221F481816E 675 | :102A20008E3219F00BC0853049F083858E3131F03C 676 | :102A30008F3021F0883211F0CF01089580E090E0CE 677 | :102A400008950E940E140C9405150000000000006B 678 | :102A500000000000000000000000000008950000D9 679 | :102A60000000000000002091D6062A95F1F7089595 680 | :102A7000AF93AFB7AF93BF932F93A091D0062091A0 681 | :102A8000CF06A22BA8B9A4EBA6BD20E0E8DFA09159 682 | :102A9000CF06A8B9B091A406BB2341F02093D0067D 683 | :102AA0002F91BF91AF91AFBFAF911895A0E3ABB994 684 | :102AB000A9B1A170AA0F2A2FA0E1ABB9A0919506E8 685 | :102AC000B09196061196A0939506B0939606A039FC 686 | :102AD00089F4BC3079F4A1E0A093A406CF93C0E7B9 687 | :102AE000A8E0B0E3BBB9B0E1BBB9AA95D1F7CA95EC 688 | :102AF000B9F7CF912093D0062F91BF91AF91AFBF7F 689 | :102B0000AF9118952F932FB72F9330995BC03F93B8 690 | :102B100030919D0626B124702327E1F326B124705D 691 | :102B200020939D0628E02A95F1F700004F935F93CC 692 | :102B30006F937F938F93EF93FF9360E0E091A506EF 693 | :102B4000F091A6063DE541E00DC050919D0676B19D 694 | :102B500074707527E1F376B1747070939D067EE012 695 | :102B60007A95F1F727E081E079B17470D9F400002B 696 | :102B700000007BE17A95F1F776B1747050919D0673 697 | :102B800070939D06752776957695880F872B2A95E5 698 | :102B900059F7853D09F461E06030B9F28193315015 699 | :102BA000404099F69F93AF93BF930E948903BF91D2 700 | :102BB000AF919F91FF91EF918F917F916F915F9175 701 | :102BC0004F913F912F912FBF2F91189581E00E9437 702 | :102BD0001D018FEF80931901CBE80E94630C309B9D 703 | :102BE00003C00E942512F9CF0E94221283B18F7078 704 | :102BF00090910F01891759F180930F01883049F0A6 705 | :102C0000843009F4F1C0823009F4F0C08130F9F465 706 | :102C1000EFC082E09091A306890FE82FE770E69558 707 | :102C2000F0E0E659FF4FE49180FFE295EF708E2FC0 708 | :102C3000887009F0E86FE90FE53C08F0DBC0E0932D 709 | :102C4000A3068091A3068C3810F0C093A306809150 710 | :102C5000D106882309F4C1CF8091A406882309F402 711 | :102C6000BCCFF894809197068F5F8F708093970602 712 | :102C70002091A306269526952093D20690E030E178 713 | :102C8000239F800D911D112490939F0680939E0693 714 | :102C90000090F60602C0969587950A94E2F7909305 715 | :102CA0001B0180931A01880F991F880F991FFC013F 716 | :102CB000E955F94F80819181A281B3818093980673 717 | :102CC00090939906A0939A06B0939B068091190160 718 | :102CD0002817B9F02093190161E08AE00E94E80EFC 719 | :102CE0008CE791E00E94380F8091D2068A3020F460 720 | :102CF00087E091E00E94F20E8091D20690E00E945F 721 | :102D0000FE0E8091970690911001981306C02091B5 722 | :102D100015019091D206291741F190911101891363 723 | :102D200006C0209116019091D2062917F1F09091DA 724 | :102D30001201891306C0209117019091D20629171C 725 | :102D4000A1F090911301891306C020911801909170 726 | :102D5000D206291751F090911401891308C090915F 727 | :102D600019018091D206981302C00E94210380911C 728 | :102D7000980690919906A0919A06B0919B060297A9 729 | :102D8000A109B109AC01BD010090F60604C0440FD1 730 | :102D9000551F661F771F0A94D2F78091E206909123 731 | :102DA000E306A091E406B091E506840F951FA61FE7 732 | :102DB000B71F2091F50630E02150310940919E0661 733 | :102DC00050919F0624233523BC01CD01620F731F50 734 | :102DD000811D911D0E944E1010929606109295062C 735 | :102DE0001092A4067894F9CE84E014CF86E012CF36 736 | :102DF00080E010CF1092A30624CFAA1BBB1B51E189 737 | :102E000007C0AA1FBB1FA617B70710F0A61BB70B5A 738 | :102E1000881F991F5A95A9F780959095BC01CD01FF 739 | :102E20000895A1E21A2EAA1BBB1BFD010DC0AA1F0B 740 | :102E3000BB1FEE1FFF1FA217B307E407F50720F023 741 | :102E4000A21BB30BE40BF50B661F771F881F991F9E 742 | :102E50001A9469F760957095809590959B01AC01E7 743 | :102E6000BD01CF010895A29FB001B39FC001A39FF0 744 | :102E7000700D811D1124911DB29F700D811D1124B3 745 | :102E8000911D08950E943317A59F900DB49F900D3A 746 | :102E9000A49F800D911D11240895FB01DC01059074 747 | :102EA0000D920020E1F70895FB01DC0141505040F4 748 | :102EB00030F08D910590801919F40020B9F7881B26 749 | :102EC000990B0895FB01DC0104C08D9101908019DC 750 | :102ED00021F441505040C8F7881B990B0895DC013C 751 | :102EE000FB014150504058F049F001900D920020F4 752 | :102EF000C1F7E61BF70B3197CF0108951C920190A3 753 | :102F00000020E9F7F6CFBB274A3031F4992322F4A9 754 | :102F1000BDE2909581959F4F0C94C017BB272A3036 755 | :102F200051F4992342F4BDE2909580957095619596 756 | :102F30007F4F8F4F9F4F0C949E17BB27FA01A62FF0 757 | :102F40006217710581059105330B30FB66F0AA27E6 758 | :102F5000660F771F881F991FAA1FA21710F0A21BC8 759 | :102F600063953850A9F7A05DAA3308F0A95DA19335 760 | :102F700036F7B111B1931082CA010C94D917BB274F 761 | :102F8000FB015527AA27880F991FAA1FA41710F025 762 | :102F9000A41B83955051B9F7A05DAA3308F0A95D31 763 | :102FA000A193009779F7B111B1931192CB010C94D1 764 | :102FB000D917DC01FC01672F71917723E1F7329774 765 | :102FC00004C07C916D9370836291AE17BF07C8F304 766 | :102FD0000895F999FECF92BD81BDF89A992780B5E1 767 | :102FE0000895262FF999FECF1FBA92BD81BD20BD4D 768 | :102FF0000FB6F894FA9AF99A0FBE01960895F894CC 769 | :02300000FFCF00 770 | :0A300200FFFFFE5B005D00200000F0 771 | :00000001FF 772 | -------------------------------------------------------------------------------- /firmware/src/sdisk2_original_mod_nokia.hex: -------------------------------------------------------------------------------- 1 | :100000000C9423020C94D81B0C9440020C944002D4 2 | :100010000C9440020C9440020C9440020C94400258 3 | :100020000C9440020C9440020C9440020C94400248 4 | :100030000C9440020C9440020C9440020C94400238 5 | :100040000C948E1B0C9440020C9440020C944002C1 6 | :100050000C9440020C9440020C9440020C94400218 7 | :100060000C9440020C944002200020000FED03216C 8 | :10007000534449534B494920434647004E6F205350 9 | :100080004420696E7365727465640046415431366C 10 | :1000900000464154333200547970653A2000436F72 11 | :1000A00064653A2000534420426C6F636B204552D4 12 | :1000B000524F52004D697373696E67204D42522052 13 | :1000C000202000436C7573746572203C2033326BC2 14 | :1000D00042004E6F742046415431362F3332202077 15 | :1000E00000426F6F7420736563746F72202020006C 16 | :1000F00053442063616E277420696E697420005335 17 | :10010000442063616E27742069646C65200045207B 18 | :10011000522052204F2052004E6F726D616C20535E 19 | :1001200044206361726400202020534448432063CC 20 | :1001300061726420200020536F7274696E672066BC 21 | :10014000696C657300204E6F7468696E672068651E 22 | :1001500072652100204275696C64696E67206C6964 23 | :100160007374002053454C454354204E494320208E 24 | :100170002000547261636B3A2000205344204445B0 25 | :100180004C4159202020202000204C434420434F44 26 | :100190004E545241535420002056616C75653A20EC 27 | :1001A000002053657420636F6E7472617374200055 28 | :1001B000205365742053442064656C6179200020CD 29 | :1001C000202020202020202020202020200020531C 30 | :1001D00045545550202020202020202000204E492A 31 | :1001E000432020202020202020202000762E203593 32 | :1001F0002E3520283230323029004170706C652055 33 | :100200005D5B202D20425200534469736B205D5B7F 34 | :100210000008141C1C1C1C1C1C366363220000FFFD 35 | :10022000FFF7E3E3F7FFFD00000074325242424261 36 | :100230004A4C2E00000000000402FF0204000000EF 37 | :10024000000000002040FF402000000000000020CF 38 | :1002500070A82020203F0000000000FE82828284DF 39 | :1002600084FC000000000000000000005F000000AF 40 | :1002700007000700147F147F14242A7F2A122313F7 41 | :1002800008646236495522500005030000001C2214 42 | :1002900041000041221C0014083E081408083E08D2 43 | :1002A00008005030000008080808080060600000DE 44 | :1002B00020100804023E5149453E00427F40004262 45 | :1002C000615149462141454B311814127F10274591 46 | :1002D0004545393C4A4949300171090503364949C8 47 | :1002E0004936064949291E003636000000563600B8 48 | :1002F000000814224100141414141400412214089C 49 | :100300000201510906324979413E7E1111117E7F69 50 | :10031000494949363E414141227F4141221C7F49A2 51 | :100320004949417F090909013E4149497A7F080845 52 | :10033000087F00417F41002040413F017F08142297 53 | :10034000417F404040407F020C027F7F0408107FC5 54 | :100350003E4141413E7F090909063E4151215E7FF0 55 | :1003600009192946464949493101017F01013F40A8 56 | :1003700040403F1F2040201F3F4038403F6314084B 57 | :10038000146307087008076151494543007F4141E4 58 | :100390000002040810200041417F00040201020411 59 | :1003A0004040404040000102040020545454787FF3 60 | :1003B000484444383844444420384444487F3854FE 61 | :1003C000545418087E0901020C5252523E7F080410 62 | :1003D000047800447D40002040443D007F102844C4 63 | :1003E0000000417F40007C041804787C08040478F5 64 | :1003F00038444444387C14141408081414187C7CC1 65 | :10040000080404084854545420043F4440203C400D 66 | :1004100040207C1C2040201C3C4030403C442810A4 67 | :1004200028440C5050503C4464544C44000836411D 68 | :100430000000007F00000041360800100808100886 69 | :1004400000060909060011241FBECFEFD8E0DEBF69 70 | :10045000CDBF11E0A0E0B1E0EEEAFCE302C0059000 71 | :100460000D92A630B107D9F726E0A6E0B1E001C0B1 72 | :100470001D92A63FB207E1F70E943C1C0C94551E4A 73 | :100480000C9400000E94431461E08FE00E9450141D 74 | :100490008EE091E00E94761563E080E00E945014A7 75 | :1004A0008CE790E00E9476154B99FECF0895CF938C 76 | :1004B000C82F14B817B81AB815B818B81BB8249AAA 77 | :1004C0002C9A399A3B9A419A17BC14BC81E085BD9D 78 | :1004D00092E095BF90936900109293061092D00617 79 | :1004E0001092CF061092CE061092920610929106AC 80 | :1004F000109299068093A3061092A2061092100102 81 | :100500001092180189E191E09093A5068093A406CA 82 | :1005100080E090E00E943F1E823018F4809398069D 83 | :1005200007C01092980660E080E090E00E94471EAD 84 | :10053000CC2359F10E9434140E94431460E080E0FF 85 | :100540000E9450140E945D1461E082E10E945014E8 86 | :1005500088E092E00E94761562E083E00E945014E9 87 | :100560008AEF91E00E94761564E083E00E945014C7 88 | :100570008CEE91E00E9476152FED80E792E72150F6 89 | :1005800080409040E1F700C00000CF9108951F9394 90 | :10059000CF93DF93182FD62FC42F65E080E00E9401 91 | :1005A00050140E9495158FEB91E00E94761565E03E 92 | :1005B00080E00E945014812F90E00E94901465E02A 93 | :1005C00084E20E9450148D2F90E00E94901465E008 94 | :1005D00087E40E9450148C2F90E00E949014DF91C9 95 | :1005E000CF911F910C949515FC01892B89F0808186 96 | :1005F000882379F0853E61F08F3551F080858E3407 97 | :1006000039F48185893421F481E09285933409F0AD 98 | :1006100080E00895FC01892B59F08081882349F0FE 99 | :10062000853E31F08F3521F0838582958170089564 100 | :1006300080E00895CF92DF92EF92FF920F931F9385 101 | :10064000CF93DF938FEF9FEF909301018093000191 102 | :100650000E94D7196B017C01672B682B692BD9F19C 103 | :1006600080E090E00E94081B00E010E0C8010E94BA 104 | :10067000641AEC01892B49F18881853E11F08111C2 105 | :1006800024C08B858F3009F1109301010093000184 106 | :1006900060E770E0CE010E94A31D81E08B87FD8A98 107 | :1006A000EC8ADB8ECA8E6091D6067091D706809157 108 | :1006B000D8069091D906DF91CF911F910F91FF90AD 109 | :1006C000EF90DF90CF900C9474170F5F1F4F00399D 110 | :1006D00081E0180759F6DF91CF911F910F91FF909C 111 | :1006E000EF90DF90CF9008958F929F92AF92BF923C 112 | :1006F000CF92DF92EF92FF921F93CF93DF93182F49 113 | :10070000D62FC42F862F90E020E1429F800D911DAF 114 | :100710001124FC010090F50602C0F695E7950A94B5 115 | :10072000E2F7EE0FFF1FEE0FFF1FEA55F94F408172 116 | :1007300051816281738122E02BB91BB82091F406AC 117 | :1007400030E02150310982239323C090E106D090FC 118 | :10075000E206E090E306F090E40646015701880EB9 119 | :10076000991EA11CB11C42505109610971090090E8 120 | :10077000F50604C0440F551F661F771F0A94D2F771 121 | :10078000480D591D6A1D7B1D88E10E946D168FEF73 122 | :100790000E94A4158EEF0E94A41580EB90E030E13A 123 | :1007A00020E33BB92BB90197E1F71BB883E00E9426 124 | :1007B000A4158CEF0E94A4158FEF0E94A4158FE35F 125 | :1007C0000E94A4158FEC0E94A41583EF0E94A4152B 126 | :1007D0008CEF0E94A4158FEF0E94A4158FE30E9456 127 | :1007E000A4158FEC0E94A41583EF0E94A4158CEF32 128 | :1007F0000E94A41585ED0E94A4158AEA0E94A41502 129 | :1008000086E90E94A4158FEF0E94A4158EEF0E9426 130 | :10081000A4158C2F86958A6A0E94A4158C2F8A6A4B 131 | :100820000E94A4158D2F86958A6A0E94A4158D2F8B 132 | :100830008A6A0E94A4158EEFD827CD278C2F869523 133 | :100840008A6A0E94A4158C2F8A6A0E94A4158EEDD4 134 | :100850000E94A4158AEA0E94A4158BEE0E94A4159A 135 | :100860008FEF0E94A4158FEF0E94A4158FEF0E94B6 136 | :10087000A4158FEF0E94A4158FEF0E94A4158EE59A 137 | :1008800091E0189FB001199F700D112480E090E055 138 | :1008900050E2A0E1B0E3FB01E80FF91FE75EFE4F75 139 | :1008A000E08128E030E040E8FE2FF42319F0ABB9F6 140 | :1008B000BBB902C01BB85BB9469521503109A1F7FD 141 | :1008C00001968D3521E0920731F71BB880E790E063 142 | :1008D00030E120E33BB92BB90197E1F71BB880E089 143 | :1008E00093E020E21BB82BB90197E1F71BB88FEF1B 144 | :1008F0000E94A4158FEF0E94A4150E94B8150E94B3 145 | :100900007D1882E08BB91BB8DF91CF911F91FF90CA 146 | :10091000EF90DF90CF90BF90AF909F908F90089511 147 | :10092000CF92DF92EF92FF920F931F93CF93DF93BB 148 | :100930004B9935C00CE011E0F80181918F3F59F1DE 149 | :1009400081E1C82E81E0D82E99E1E92E91E0F92EBF 150 | :10095000C0E0DFEFF80160816F3F29F0F6014081D0 151 | :100960008C2F0E947403F801D1938F01F601D1936B 152 | :100970006F01F7011282CF5FF2EAEF1AFEEFFF0A72 153 | :10098000C43041F71092100189E191E09093A506DF 154 | :100990008093A40604C081E0E031F80771F6DF918E 155 | :1009A000CF911F910F91FF90EF90DF90CF9008951E 156 | :1009B000809191069091920680399C40C0F480E12C 157 | :1009C0008BB9809191069091920620E330E18031BD 158 | :1009D00040E1940730F44B990AC02BB93BB901961A 159 | :1009E000F6CF80E99CE0909392068093910608955B 160 | :1009F0004B996EC090911001292F30E04EE551E0E7 161 | :100A0000249FF001259FF00D349FF00D1124E75E27 162 | :100A1000FE4F82818D3A09F042C080911801811108 163 | :100A200031C080919306F901E45FFE4F8083F901A4 164 | :100A3000EF5EFE4F4091A206469546954083282FD3 165 | :100A40002D7F2D3011F48E5F01C08F5F8F708093EA 166 | :100A50009306933029F40E94D8040E9490041CC08D 167 | :100A60009F5F909310014EE551E0949F9001959FF8 168 | :100A7000300D1124C901875E9E4F9093A506809387 169 | :100A8000A4060DC080910A0180939306109218016C 170 | :100A90008F30F1F40E94D80481E08093A306209166 171 | :100AA00010018EE591E0289FF001299FF00D11249F 172 | :100AB000E75EFE4F8281863959F487818575880FFC 173 | :100AC00090859575892B80930A0181E080931801A8 174 | :100AD000089529E131E044E080E090E0F901E80F79 175 | :100AE000F91F108201968E3551E09507B9F74150F4 176 | :100AF000225A3E4F4111F0CF8FEF80931101809326 177 | :100B00000C018093120180930D0180931301809357 178 | :100B10000E018093140180930F010895CF93C82F85 179 | :100B20008FEF9FEF90930101809300010E94651663 180 | :100B300059984B9B03C00E9442024CC089E191E04E 181 | :100B40009093DB068093DA060E94C217811144C09D 182 | :100B50000E94431461E08FE00E9450148EE091E007 183 | :100B60000E94761563E080E00E9450148091D306C5 184 | :100B7000813019F48FEF90E004C0823029F480EFC7 185 | :100B800090E00E94761522C0833019F481EE90E047 186 | :100B9000F8CF843019F482ED90E0F3CF853019F46A 187 | :100BA00083EC90E0EECF863019F484EB90E0E9CF4F 188 | :100BB000873019F485EA90E0E4CF8EE990E00E9456 189 | :100BC00076158091D30690E00E943C151092D006D5 190 | :100BD0004B9BFECF80E0B0C0CC23D9F00E944314E1 191 | :100BE00061E080E00E9450148091DE06823019F4AA 192 | :100BF00087E291E002C088E191E00E947615599861 193 | :100C00002FE38BE49CE4215080409040E1F700C04A 194 | :100C100000000E948418811143C00E94431461E0C7 195 | :100C20008FE00E9450148EE091E00E94761563E000 196 | :100C300080E00E9450148091D306813019F48FEF28 197 | :100C400090E004C0823029F480EF90E00E94761595 198 | :100C500022C0833019F481EE90E0F8CF843019F48B 199 | :100C600082ED90E0F3CF853019F483EC90E0EECF85 200 | :100C7000863019F484EB90E0E9CF873019F485EAE7 201 | :100C800090E0E4CF8EE990E00E9476158091D30643 202 | :100C900090E00E943C151092D0064B9BFECF9ACF5D 203 | :100CA0004091F4062091EE063091EF06429FC0017C 204 | :100CB000439F900D112481159047D0F485E08093D7 205 | :100CC000D3060E94431461E08FE00E9450148EE02E 206 | :100CD00091E00E94761563E080E00E94501483EC5E 207 | :100CE00090E00E9476151092D0064B9BFECF72CFFB 208 | :100CF000CC23E1F064E089E00E94501487E990E0A1 209 | :100D00000E9476158091E5068B3019F481E990E018 210 | :100D100002C08BE890E00E9476158FE39BE42CE400 211 | :100D2000815090402040E1F700C0000059980E9497 212 | :100D300069050E94611681E0CF9108958F929F927C 213 | :100D4000AF92BF92CF92DF92EF92FF920F931F93D9 214 | :100D5000CF93DF936115710519F480E090E055C1E0 215 | :100D60007B01EC010E94431460E080E00E9450147B 216 | :100D70000E948D158DED91E00E94761560E085E36F 217 | :100D80000E9450148091E5068B3019F481E990E0BF 218 | :100D900002C08BE890E00E9476150E948D1542E01B 219 | :100DA00061E080E00E94C70262E080E00E9450148F 220 | :100DB00081E090E00E9490146701570108E0A00EC6 221 | :100DC000B11CF60181916F01803211F00E94E5148F 222 | :100DD000AC14BD04B1F7D0930701C0930601209174 223 | :100DE000E506F701828D938D2B3091F44489558966 224 | :100DF00060E070E0BA0155274427A0E0B0E08A0126 225 | :100E00009B01082B192B2A2B3B2BC901B80103C0CE 226 | :100E1000BC0180E090E0611571058105910509F440 227 | :100E20009CCFE6EAF6E0119211921192119216E02F 228 | :100E3000EE3CF107C1F76093A6067093A706809376 229 | :100E4000A8069093A90611E0663FFFEF7F07810592 230 | :100E50009105A8F40E947119663F2FEF7207810572 231 | :100E6000910558F434E0139FF0011124EA55F94F2D 232 | :100E700060837183828393831F5F1A3028F380908D 233 | :100E8000EA069090EB06A090EC06B090ED068091FB 234 | :100E9000000190910101019609F488C080E090E082 235 | :100EA0000E94081B8FEF9FEFDC018093D606909382 236 | :100EB000D706A093D806B093D906809100019091EF 237 | :100EC00001010E94771BFC012091E506828D938D24 238 | :100ED0002B3071F4C488D588E12CF12C7601DD2407 239 | :100EE000CC24A0E0B0E0C82AD92AEA2AFB2A03C011 240 | :100EF0006C01E12CF12C02E0C01AD108E108F108E4 241 | :100F0000A091F406B0E0A70196010E94981D0091FF 242 | :100F1000E1061091E2062091E3063091E406600FAD 243 | :100F2000711F821F931F0E941D17E091DA06F09136 244 | :100F3000DB068DEC92E0ABEAB1E080839183A28383 245 | :100F4000B38345815681678170858185928584163A 246 | :100F50009506A606B70619F48C179D0731F043874E 247 | :100F6000548765877687908B878785829682A7824C 248 | :100F7000B086D287C1878091D506848380919C06F4 249 | :100F8000818BA091F406B0E0A70196010E94981D04 250 | :100F9000C090E106D090E206E090E306F090E4060F 251 | :100FA0006C0D7D1D8E1D9F1D0E9474178092EA0698 252 | :100FB0009092EB06A092EC06B092ED06109292068B 253 | :100FC000109291061092CF0610929906C1E0C0933C 254 | :100FD000A3061092A206109293061092100110928E 255 | :100FE000180189E191E09093A5068093A406599891 256 | :100FF00040E052E060E070E080E10E94B2160E94A2 257 | :101000006905C093D00681E090E0DF91CF911F91F8 258 | :101010000F91FF90EF90DF90CF90BF90AF909F9097 259 | :101020008F900895CF92DF92EF92FF920F931F93CC 260 | :10103000CF93DF93C090EA06D090EB06E090EC06E9 261 | :10104000F090ED068091000190910101019609F464 262 | :1010500077C080E090E00E94081B8FEF9FEFDC01DB 263 | :101060008093D6069093D706A093D806B093D9065E 264 | :1010700080910001909101010E94771BFC01209159 265 | :10108000E506828D938D2B3079F424893589A90169 266 | :1010900060E070E0BA0155274427A0E0B0E0842B5F 267 | :1010A000952BA62BB72B02C0A0E0B0E09C01AD01B0 268 | :1010B0002250310941095109A091F406B0E00E9483 269 | :1010C000981D0091E1061091E2062091E30630910F 270 | :1010D000E406600F711F821F931F0E941D17E0918D 271 | :1010E000DA06F091DB068FEF9FEFDC018093D606E6 272 | :1010F0009093D706A093D806B093D906838594859C 273 | :10110000A585B6858093EA069093EB06A093EC063E 274 | :10111000B093ED06C785D089CE010E94771B8C0164 275 | :101120000E94F402882361F0B801CE01DF91CF91D3 276 | :101130001F910F91FF90EF90DF90CF900C949E063F 277 | :10114000C092EA06D092EB06E092EC06F092ED0631 278 | :10115000DF91CF911F910F91FF90EF90DF90CF9093 279 | :1011600008955E9A2D9A5F9A08957F928F929F922A 280 | :10117000AF92BF92CF92DF92EF92FF920F931F93A5 281 | :10118000CF93DF938091000190910101019611F4BA 282 | :101190001FEA5BC080E090E00E94081B89E191E0BB 283 | :1011A0009093DB068093DA060E9469051092D606BA 284 | :1011B0001092D7061092D8061092D906809100019D 285 | :1011C000909101010E94771BFC012091E506828D20 286 | :1011D000938D2B3079F424893589A90160E070E082 287 | :1011E000BA0155274427A0E0B0E0482B592B6A2BC1 288 | :1011F0007B2B03C0AC0160E070E0A091F4069A0183 289 | :10120000AB012250310941095109B0E00E94981DFB 290 | :101210000091E1061091E2062091E3063091E40688 291 | :10122000600F711F821F931F0E941D17E091DA0645 292 | :10123000F091DB0680819181A281B3818D3C924047 293 | :10124000AB4AB14009F0A4CF11890E94431460E079 294 | :1012500080E00E9450140E948D1589E891E00E9460 295 | :1012600076150E948D1543E065E084E00E94C70278 296 | :1012700062E080E00E94501488E991E00E947615B7 297 | :10128000812F90E00E943C15712ED12F01E00E9429 298 | :10129000B108D71581F062E080E00E94501488E91F 299 | :1012A00091E00E9476158D2F90E00E943C158AE611 300 | :1012B00090E00E9476154B9972C189B120919806F1 301 | :1012C00041E050E0222311F040E050E093B161E0B2 302 | :1012D00070E0213011F060E070E092959695977083 303 | :1012E000902790FB882480F8912C869EF001879EA1 304 | :1012F000F00D969EF00D1124082E000C990B809590 305 | :1013000090958827990F881F9927849F9001859F22 306 | :10131000300D949F300D11242E2B3F2B232BB9F130 307 | :1013200089B193B1929596959770902790FBAA24D6 308 | :10133000A0F8B12CA69EF001A79EF00DB69EF00D70 309 | :101340001124082E000C990B809590958827990FF1 310 | :10135000881F9927849F9001859F300D949F300DA1 311 | :1013600011242E2B3F2B232BD9F68FE392E42FE071 312 | :10137000815090402040E1F700C00000CFEFCD0F3A 313 | :10138000CE3138F0C0939C060E94151403C0CD2FB7 314 | :1013900001C0CEE193B12091980661E070E0222374 315 | :1013A00011F060E070E089B141E050E0213011F0CF 316 | :1013B00040E050E0929596959770902790FBEE2430 317 | :1013C000E0F8F12CE69EF001E79EF00DF69EF00DA0 318 | :1013D0001124082E000C990B809590958827990F61 319 | :1013E000881F9927849F9001859F300D949F300D11 320 | :1013F00011242E2B3F2B232BB9F193B189B1929558 321 | :1014000096959770902790FBCC24C0F8D12CC69E5F 322 | :10141000F001C79EF00DD69EF00D1124082E000C91 323 | :10142000990B809590958827990F881F9927849FFD 324 | :101430009001859F300D949F300D11242E2B3F2B52 325 | :10144000232BD9F68FE392E42FE081509040204087 326 | :10145000E1F700C00000CF5FCD3328F4C0939C06B5 327 | :101460000E94151401C0CCE37D2E4E9B02C0DC2FE0 328 | :101470000ECF4E9BFECF8FE392E42FE08150904041 329 | :101480002040E1F700C000001C1709F488C0C09399 330 | :101490009C060E94151459988091000190910101B9 331 | :1014A000019609F47CC080E090E00E94081B89E16D 332 | :1014B00091E09093DB068093DA060E946905109212 333 | :1014C000D6061092D7061092D8061092D9068091AF 334 | :1014D0000001909101010E94771BFC012091E5061B 335 | :1014E000828D938D2B3071F4C488D588E12CF12C3A 336 | :1014F0007601DD24CC24A0E0B0E0C82AD92AEA2A6B 337 | :10150000FB2A03C06C01E12CF12C82E0C81AD1083F 338 | :10151000E108F108A091F406B0E0A70196010E944D 339 | :10152000981D0091E1061091E2062091E3063091AA 340 | :10153000E406600F711F821F931F0E941D17E09128 341 | :10154000DA06F091DB0680819181A281B3818D3C26 342 | :101550009240AB4AB14019F5C18BA091F406B0E0BE 343 | :10156000A70196010E94981D0091E1061091E206E4 344 | :101570002091E3063091E406600F711F821F931FD4 345 | :10158000DF91CF911F910F91FF90EF90DF90CF905F 346 | :10159000BF90AF909F908F907F900C947417DF91C5 347 | :1015A000CF911F910F91FF90EF90DF90CF90BF9060 348 | :1015B000AF909F908F907F9008957F928F929F928F 349 | :1015C000AF92BF92CF92DF92EF92FF920F931F9351 350 | :1015D000CF93DF930E94431460E080E00E94501498 351 | :1015E0000E948D158AE791E00E9476150E948D1564 352 | :1015F00043E065E084E00E94C70262E080E00E9470 353 | :10160000501488E991E00E9476158091D50690E00B 354 | :101610000E943C159090D506A92CBB24B394772446 355 | :101620007394DAE08D2E0E94B1088091D506A81639 356 | :1016300099F062E080E00E94501488E991E00E94F5 357 | :1016400076158091D50690E00E943C1588E690E0E2 358 | :101650000E947615A090D5064B996BC189B1209157 359 | :10166000980641E050E0222311F040E050E093B1B1 360 | :1016700061E070E0213011F060E070E092959695A5 361 | :1016800097709B259170C92F20E0D22FC69FF00143 362 | :10169000C79FF00DD69FF00D1124082E000C990B5A 363 | :1016A000809590958827990F881F9927849F90018E 364 | :1016B000859F300D949F300D11242E2B3F2B232B13 365 | :1016C000B1F189B193B19295969597709B25092FA9 366 | :1016D000017010E0069FF001079FF00D169FF00DBE 367 | :1016E0001124082E000C990B809590958827990F4E 368 | :1016F000881F9927849F9001859F300D949F300DFE 369 | :1017000011242E2B3F2B232BE1F68FE392E42FE0C5 370 | :10171000815090402040E1F700C000008091D50644 371 | :10172000815019F08093D50602C08092D50693B1FE 372 | :101730002091980661E070E0222311F060E070E0F3 373 | :1017400089B141E050E0213011F040E050E0929545 374 | :10175000969597709B2590FBEE24E0F8F12CE69E81 375 | :10176000F001E79EF00DF69EF00D1124082E000CFE 376 | :10177000990B809590958827990F881F9927849FAA 377 | :101780009001859F300D949F300D11242E2B3F2BFF 378 | :10179000232BC1F193B189B19295969597709B25B2 379 | :1017A00090FBCC24C0F8D12CC69EF001C79EF00D52 380 | :1017B000D69EF00D1124082E000C990B8095909563 381 | :1017C0008827990F881F9927849F9001859F300D46 382 | :1017D000949F300D11242E2B3F2B232BD9F68FE312 383 | :1017E00092E42FE0815090402040E1F700C00000DB 384 | :1017F0008091D5068F5F8B3018F48093D50602C098 385 | :101800007092D5064E990FCF4E9BFECF8FE392E498 386 | :101810002FE0815090402040E1F700C0000080910F 387 | :10182000D506981609F485C08091000190910101B8 388 | :10183000019609F47EC080E090E00E94081B89E1D7 389 | :1018400091E09093DB068093DA060E94690510927E 390 | :10185000D6061092D7061092D8061092D90680911B 391 | :101860000001909101010E94771BFC012091E50687 392 | :10187000828D938D2B3071F4C488D588E12CF12CA6 393 | :101880007601DD24CC24A0E0B0E0C82AD92AEA2AD7 394 | :10189000FB2A03C06C01E12CF12C82E0C81AD108AC 395 | :1018A000E108F108A091F406B0E0A70196010E94BA 396 | :1018B000981D0091E1061091E2062091E306309117 397 | :1018C000E406600F711F821F931F0E941D17E09195 398 | :1018D000DA06F091DB0680819181A281B3818D3C93 399 | :1018E0009240AB4AB14029F58091D5068483A091FE 400 | :1018F000F406B0E0A70196010E94981D0091E10650 401 | :101900001091E2062091E3063091E406600F711F0A 402 | :10191000821F931FDF91CF911F910F91FF90EF9046 403 | :10192000DF90CF90BF90AF909F908F907F900C945E 404 | :101930007417DF91CF911F910F91FF90EF90DF907F 405 | :10194000CF90BF90AF909F908F907F9008959F927F 406 | :10195000AF92BF92CF92DF92EF92FF920F931F93BD 407 | :10196000CF93DF930E94431460E080E00E94501404 408 | :101970000E948D158EEC91E00E9476150E948D15C7 409 | :1019800043E065E084E00E94C70262E080E00E94DC 410 | :1019900050140E94851580EB91E00E9476150E94FC 411 | :1019A000851563E080E00E94501481EA91E00E9476 412 | :1019B0007615C1E0992493940E94B10889B1609191 413 | :1019C000980621E030E0662311F020E030E093B18A 414 | :1019D00041E050E0613011F040E050E09295969582 415 | :1019E00097709925092F017010E0049FB001059FA1 416 | :1019F000700D149F700D1124082E000C990B80950A 417 | :101A000090958827990F881F9927829FF001839FBF 418 | :101A1000F00D929FF00D11246E2B7F2B672B09F494 419 | :101A200045C089B193B1929596959770992590FB91 420 | :101A3000EE24E0F8F12CE49EB001E59E700DF49EDA 421 | :101A4000700D1124082E000C990B80959095882715 422 | :101A5000990F881F9927829FF001839FF00D929F15 423 | :101A6000F00D11246E2B7F2B672BD9F62FE382E428 424 | :101A70009FE0215080409040E1F700C00000C1305D 425 | :101A8000A1F462E080E00E94501480EB91E00E949B 426 | :101A900076150E94851563E080E00E94501481EA6B 427 | :101AA00091E00E9476150E948515C2E093B1609185 428 | :101AB000980641E050E0662311F040E050E089B123 429 | :101AC00021E030E0613011F020E030E09295969511 430 | :101AD0009770992590FBCC24C0F8D12CC49EB001FE 431 | :101AE000C59E700DD49E700D1124082E000C990B0C 432 | :101AF000809590958827990F881F9927829FF001DC 433 | :101B0000839FF00D929FF00D11246E2B7F2B672B7E 434 | :101B100009F44FC093B189B1929596959770992524 435 | :101B200090FBAA24A0F8B12CA49EB001A59E700D34 436 | :101B3000B49E700D1124082E000C990B8095909581 437 | :101B40008827990F881F9927829FF001839FF00DA6 438 | :101B5000929FF00D11246E2B7F2B672BD9F62FE36C 439 | :101B600082E49FE0215080409040E1F700C00000F7 440 | :101B7000DFEFDC0F01F1D13011F40E94851562E036 441 | :101B800080E00E94501480EB91E00E947615C250D4 442 | :101B9000C23010F40E94851563E080E00E9450146A 443 | :101BA00081EA91E00E947615D23031F40E948515C9 444 | :101BB00003C0DC2F01C0D1E04E9B02C0CD2FFCCE74 445 | :101BC0004E9BFECF2FE382E49FE021508040904067 446 | :101BD000E1F700C00000D13069F4DF91CF911F918F 447 | :101BE0000F91FF90EF90DF90CF90BF90AF909F90BC 448 | :101BF0000C94DD0AD23069F4DF91CF911F910F91DF 449 | :101C0000FF90EF90DF90CF90BF90AF909F900C949B 450 | :101C1000B508DF91CF911F910F91FF90EF90DF906A 451 | :101C2000CF90BF90AF909F9008952F923F924F9288 452 | :101C30005F926F927F928F929F92AF92BF92CF925C 453 | :101C4000DF92EF92FF920F931F93CF93DF93CDB765 454 | :101C5000DEB728970FB6F894DEBF0FBECDBF109247 455 | :101C600009011092080189E191E09093DB068093CD 456 | :101C7000DA0685ED93E090939F0680939E068FEFA2 457 | :101C80009FEFDC018093D6069093D706A093D806E9 458 | :101C9000B093D9060E9469050E948D1560E080E02E 459 | :101CA0000E94501483E691E00E94761561E080E086 460 | :101CB0000E9450140E948D1543E065E084E00E946C 461 | :101CC000C70211E0612F80E00E9450148FEB91E079 462 | :101CD0000E9476151F5F1530A9F762E080E00E9430 463 | :101CE000501484E591E00E94761500E010E0C801F0 464 | :101CF0000E94771B7C01009799F0FC018081811183 465 | :101D00000FC08091080190910901892BC9F562E00B 466 | :101D100080E00E94501485E491E00E947615FEC197 467 | :101D2000C7010E94F402811105C0C7010E940A0385 468 | :101D30008823B9F0E0910801F0910901EE0FFF1F2F 469 | :101D400080919E0690919F06E80FF91F11830083F2 470 | :101D50008091080190910901019690930901809367 471 | :101D600008010F5F1F4F8091080190910901883C85 472 | :101D700091053CF60039F1E01F0709F0B8CFC1CF5B 473 | :101D800062E080E00E94501486E391E00E947615A4 474 | :101D9000809108019091090102971CF0A12CB12CAF 475 | :101DA0005DC02091080130910901409106015091D8 476 | :101DB0000701E0919E06F0919F0600E010E080E0B0 477 | :101DC00090E062C08701000F111FE0919E06F09124 478 | :101DD0009F06E00FF11F808191810E94771B48E0F0 479 | :101DE00050E0BC01CE0101960E94C51DE0919E0607 480 | :101DF000F0919F06EC0DFD1D808191810E94771B63 481 | :101E000048E050E0BC01CE0101960E94B81D97FF4A 482 | :101E100012C0E0919E06F0919F06DF01A00FB11F56 483 | :101E20008D919C911197EC0DFD1D208131812D9399 484 | :101E30003C93918380832FEFE21AF20A82E0C80E6E 485 | :101E4000D11C80910801909109018A199B09E8161B 486 | :101E5000F9060CF4B7CF9FEFA91AB90A80910801CF 487 | :101E6000909109010197A816B9060CF09ACFC12CE0 488 | :101E7000D12CEE24E394F12CE4CF6191719164179D 489 | :101E8000750709F48C01019682179307B4F3EE24C9 490 | :101E9000EA94FE2CDD24D3940E94B1084B993EC1F4 491 | :101EA00089B12091980641E050E0222311F040E0F2 492 | :101EB00050E093B161E070E0213011F060E070E03B 493 | :101EC0009295969597709D2590FB222420F8312CB1 494 | :101ED000269EF001279EF00D369EF00D1124082E4F 495 | :101EE000000C990B809590958827990F881F99274A 496 | :101EF000849F9001859F300D949F300D11242E2BCF 497 | :101F00003F2B232BC9F189B193B192959695977088 498 | :101F10009D2590FB442440F8512C469EF001479E9D 499 | :101F2000F00D569EF00D1124082E000C990B809593 500 | :101F300090958827990F881F9927849F9001859FE6 501 | :101F4000300D949F300D11242E2B3F2B232BD9F6CF 502 | :101F5000EFE3F2E42FE0E150F0402040E1F700C071 503 | :101F600000000F5F1F4F8091080190910901081731 504 | :101F7000190711F400E010E093B12091980661E098 505 | :101F800070E0222311F060E070E089B141E050E0A0 506 | :101F9000213011F040E050E09295969597709D2584 507 | :101FA00090FB662460F8712C669EF001679EF00D30 508 | :101FB000769EF00D1124082E000C990B80959095BB 509 | :101FC0008827990F881F9927849F9001859F300D3E 510 | :101FD000949F300D11242E2B3F2B232BC1F193B155 511 | :101FE00089B19295969597709D2590FB882480F8ED 512 | :101FF000912C869EF001879EF00D969EF00D112487 513 | :10200000082E000C990B809590958827990F881FB2 514 | :102010009927849F9001859F300D949F300D112446 515 | :102020002E2B3F2B232BD9F68FE392E4EFE0815048 516 | :102030009040E040E1F700C000000150110917FF97 517 | :1020400006C00091080110910901015011094E9933 518 | :102050002FC04E9BFECFFFE322E48FE0F1502040E3 519 | :102060008040E1F700C00000000F111FE0919E06C4 520 | :10207000F0919F06E00FF11F808191810E94771BF4 521 | :102080007C010E940A03882331F0C7010E94081BCB 522 | :102090000E94150E43C080919E0690919F06FC0100 523 | :1020A000E00FF11FB701808191810E949E0636C02A 524 | :1020B0000E151F0509F4F0CEE0919E06F0919F06E3 525 | :1020C000C801880F991FE80FF91F808191810E9434 526 | :1020D000771B7C0162E080E00E945014C7010E94DF 527 | :1020E0000A03882319F086E090E002C081E090E0C6 528 | :1020F0000E949014570198E0E90EF11CF5018191BE 529 | :102100005F01803211F00E94E514AE14BF04B1F7F4 530 | :102110008FEB91E00E9476157801BECE28960FB61F 531 | :10212000F894DEBF0FBECDBFDF91CF911F910F910D 532 | :10213000FF90EF90DF90CF90BF90AF909F908F90E7 533 | :102140007F906F905F904F903F902F9008958F9267 534 | :102150009F92AF92BF92CF92DF92EF92FF920F9336 535 | :102160001F93CF93DF9389E191E09093DB068093F7 536 | :10217000DA068FEF9FEFDC018093D6069093D706A7 537 | :10218000A093D806B093D90680E090E00E94081B87 538 | :102190008FEF9FEF9093010180930001CFEFDFEF6E 539 | :1021A00000E010E03EE1F32E4CE3E42EC8010E9473 540 | :1021B000771B6C01009709F49AC0FC018081882389 541 | :1021C00009F49CC0C6010E94F402882329F0CF3F85 542 | :1021D000FFEFDF0709F4E8014BE050E060E770E053 543 | :1021E000C6010E94AA1D892B09F081C0109301012C 544 | :1021F000009300012091E506F601828D938D2B302E 545 | :1022000079F424893589A90160E070E0BA01552785 546 | :102210004427A0E0B0E0482B592B6A2B7B2B03C04E 547 | :10222000AC0160E070E0A091F4069A01AB0122508D 548 | :10223000310941095109B0E00E94981D8090E106E2 549 | :102240009090E206A090E306B090E406680D791D38 550 | :102250008A1D9B1D0E941D17C090DA06D090DB06D8 551 | :10226000F60180819181A281B3818D3C9240AB4A7D 552 | :10227000B140A9F5F60184818093D50681898D331B 553 | :1022800018F480939C0602C0E0929C0680919C0604 554 | :102290008E3110F4F0929C060E9415145998F601A4 555 | :1022A00085819681A781B0858093EA069093EB069D 556 | :1022B000A093EC06B093ED06B184D2848B2D9D2DB6 557 | :1022C0000E94771B009739F00E94F402882319F0CE 558 | :1022D000CB2DDD2D13C080E090E00E94081B80E034 559 | :1022E00090E00E94081BCF3FFFEFDF07E1F40F5F94 560 | :1022F0001F4F003921E0120709F058CFCF3F8FEF71 561 | :10230000D80789F4F8940E94150E4B991FC080914C 562 | :10231000D006882331F080916E00816080936E003A 563 | :10232000E89A789413C0CE010E94771BBC01CE01BD 564 | :10233000DF91CF911F910F91FF90EF90DF90CF90A1 565 | :10234000BF90AF909F908F900C949E06DF91CF919D 566 | :102350001F910F91FF90EF90DF90CF90BF90AF90C3 567 | :102360009F908F9008954F925F926F927F928F927D 568 | :102370009F92AF92BF92CF92DF92EF92FF920F9314 569 | :102380001F93CF93DF930E94B1084B9B22C08FEF26 570 | :1023900090E04B9BC3C10197E1F780916E008E7F67 571 | :1023A00080936E00E8981092D0061092A306DF91F9 572 | :1023B000CF911F910F91FF90EF90DF90CF90BF9042 573 | :1023C000AF909F908F907F906F905F904F900C9404 574 | :1023D0004202309B87C14E9B5AC089B140919806FA 575 | :1023E00061E070E0442311F060E070E093B121E01F 576 | :1023F00030E0413011F020E030E0929596959770F2 577 | :10240000A1E09A2790FBAA24A0F8B12CA29EA001DB 578 | :10241000A39E500DB29E500D1124082E000C990B56 579 | :10242000809590958827990F881F9927869FF0019E 580 | :10243000879FF00D969FF00D11244E2B5F2B452B9F 581 | :1024400031F593B189B1929596959770A927A0FB24 582 | :10245000CC24C0F8D12CC69EA001C79E500DD69E9C 583 | :10246000500D1124082E000C990B8095909588270B 584 | :10247000990F881F9927829FB001839F700D929FAB 585 | :10248000700D1124462B572B452B09F42BC14E9967 586 | :1024900010C084E690E021E04E9920E00197E1F73A 587 | :1024A000222309F43BC14E9BFECFF8940E94150EE7 588 | :1024B00016C129B16091980641E050E0662311F001 589 | :1024C00040E050E033B181E090E0613011F080E015 590 | :1024D00090E0329536953770A1E03A2730FBEE2434 591 | :1024E000E0F8F12CE89EB001E99E700DF89E700DA9 592 | :1024F0001124022E000C330B209530952227330F28 593 | :10250000221F3327249FF001259FF00D349FF00DEB 594 | :1025100011246E2B7F2B672B09F45FC064E670E0FB 595 | :10252000FF24F394EE24E39429B133B13295369528 596 | :1025300037703E25032F017010E0089FF001099FBE 597 | :10254000F00D189FF00D1124022E000C330B209576 598 | :1025500030952227330F221F3327249FD001259F38 599 | :10256000B00D349FB00D11249F012A2B3B2B232B40 600 | :1025700009F4F12C61507109B9F6FF2009F4CEC0BD 601 | :10258000A1E029B133B13295369537703A273170D1 602 | :10259000C32F30E0D32FC89FF001C99FF00DD89F03 603 | :1025A000F00D1124022E000C330B209530952227BC 604 | :1025B000330F221F3327249FB001259F700D349FB6 605 | :1025C000700D11249F01262B372B232BD1F6F89465 606 | :1025D0000E94A70C4B99A2C094C033B129B1329587 607 | :1025E00036953770A327A0FB882480F8912C849E11 608 | :1025F000B001859E700D949E700D1124022E000C6A 609 | :10260000330B209530952227330F221F3327289F25 610 | :10261000F001299FF00D389FF00D11249B012E2B06 611 | :102620003F2B232B09F47AC064E670E0C1E0D1E0CF 612 | :1026300033B129B13295369537703D2730FB66248A 613 | :1026400060F8712C649EF001659EF00D749EF00D93 614 | :102650001124022E000C330B209530952227330FC6 615 | :10266000221F3327289FD001299FB00D389FB00D1E 616 | :1026700011249F012A2B3B2B232B09F4C0E061502E 617 | :102680007109B1F6CC2309F449C0A1E033B129B1F5 618 | :102690003295369537703A2730FB442440F8512C58 619 | :1026A000449EF001459EF00D549EF00D1124022E23 620 | :1026B000000C330B209530952227330F221F332730 621 | :1026C000289FB001299F700D389F700D11249F0124 622 | :1026D000262B372B232BD1F6F8940E9412084B9B04 623 | :1026E00012C01CC08091D006811118C08FEF90E0FD 624 | :1026F0004B9914C00197E1F7F89481E00E948E0590 625 | :1027000081110E94A7108091D006882331F080911A 626 | :102710006E00816080936E00E89A7894DF91CF918B 627 | :102720001F910F91FF90EF90DF90CF90BF90AF90EF 628 | :102730009F908F907F906F905F904F90089561155C 629 | :10274000710571F448B121E030E0B90102C0660FB3 630 | :10275000771F8A95E2F7CB018095842388B9089585 631 | :102760006130710539F498B101C0660F8A95EAF7B6 632 | :10277000692B68B908958F929F92AF92BF92CF92C2 633 | :10278000DF92EF92FF920F931F93CF93DF93042F6B 634 | :10279000A62EB12C11E001C0110F6A95EAF7C7E02F 635 | :1027A000D0E0E22EF12CC82ED12C87E0882E912C7F 636 | :1027B000013029F4C4018C1B9D0BB70102C0B70185 637 | :1027C0008C2F02C0759567958A95E2F7617077271F 638 | :1027D000C6010E949F1388B1812B88B960E070E028 639 | :1027E000C5010E949F13219718F7DF91CF911F9188 640 | :1027F0000F91FF90EF90DF90CF90BF90AF909F90A0 641 | :102800008F900895CF93C62F599A682F70E083E078 642 | :1028100090E00E949F1345982C2F40E064E081E0F7 643 | :102820000E94BB13459ACF910895599A61E280E0C6 644 | :102830000E94021460919C06606880E00E9402146D 645 | :1028400064E080E00E94021464E180E00E940214CF 646 | :102850006CE080E00E94021460E280E00E940214BA 647 | :102860006CE080E00C9402148FE280939C0610923E 648 | :10287000A0061092A10610929D063D9A3B9A399AA5 649 | :102880003C9A0C941514CF93DF93C8EFD1E060E02D 650 | :1028900081E00E9402142197D1F7DF91CF91089532 651 | :1028A000CF93C62F682F606880E00E9402146C2FBF 652 | :1028B000606480E0CF910C940214CF93C0E060E09C 653 | :1028C0008C2F0E94501461E081E00E940214CF5FBF 654 | :1028D000C435A9F7C0E065E08C2F0E94501460E871 655 | :1028E00081E00E940214CF5FC435A9F7C0E06C2FCD 656 | :1028F00083E50E9450146FEF81E00E940214CF5FC5 657 | :10290000C630A9F7C0E06C2F80E00E9450146FEF32 658 | :1029100081E00E940214CF5FC630A9F7CF910895DD 659 | :10292000EF92FF920F931F93CF93DF937C018CE084 660 | :102930008E9D80018F9D100D1124C0E0D0E08FEF9F 661 | :10294000E816F10439F0FE01E00FF11FEF5EFD4FD4 662 | :10295000E49101C0E0E08091A0068111E0958091B2 663 | :10296000A106813011F060E001C060E881E0909143 664 | :102970009D06913009F080E0E82B6E2B81E00E94EB 665 | :1029800002142196CC30D105D1F661E08091A006E9 666 | :10299000813009F060E0862F81959091A1069130F9 667 | :1029A00011F090E001C090E861E020919D06213097 668 | :1029B00009F060E0682B692B81E0DF91CF911F91D6 669 | :1029C0000F91FF90EF900C9402140F931F93CF93ED 670 | :1029D000DF9325E0829FC0011124C0E0D0E08C018C 671 | :1029E000005A1109F801EC0FFD1FEB59FD4FE4915E 672 | :1029F0008091A0068111E0958091A106813011F0AF 673 | :102A000060E001C060E881E090919D06913009F09E 674 | :102A100080E0E82B6E2B81E00E9402142196C530E5 675 | :102A2000D10501F761E08091A006813009F060E0F6 676 | :102A3000862F81959091A106913011F090E001C010 677 | :102A400090E861E020919D06213009F060E0682B5C 678 | :102A5000692B81E0DF91CF911F910F910C940214AB 679 | :102A6000CF93DF93EC018991882319F00E94E5143C 680 | :102A7000FACFDF91CF910895CF93DF93CDB7DEB733 681 | :102A80002A970FB6F894DEBF0FBECDBF4AE0BE0155 682 | :102A90006F5F7F4F0E94D91DCE0101960E943015B5 683 | :102AA0002A960FB6F894DEBF0FBECDBFDF91CF914F 684 | :102AB0000895CF93DF93CDB7DEB72A970FB6F8947A 685 | :102AC000DEBF0FBECDBF2AE0AE014F5F5F4F0E9459 686 | :102AD000E41DCE0101960E9430152A960FB6F89497 687 | :102AE000DEBF0FBECDBFDF91CF910895CF93DF93AF 688 | :102AF000FC018491EF012196882321F00E94E514C6 689 | :102B0000FE01F7CFDF91CF91089581E09091A0066B 690 | :102B1000911180E08093A006089581E09091A10634 691 | :102B2000911180E08093A106089581E090919D0627 692 | :102B3000911180E080939D060895519A549A559A78 693 | :102B400050981092D206089528E030E090E840E2D4 694 | :102B500050E160E3782F792319F05BB96BB902C0BB 695 | :102B60001BB84BB9969521503109A1F71BB80895B0 696 | :102B7000CF93DF931F92CDB7DEB780E18BB9198277 697 | :102B800080E020E330E19981983051F02BB999B180 698 | :102B9000880F9170892B3BB999819F5F9983F3CFFF 699 | :102BA0000F90DF91CF91089582E38BB982E18BB9C9 700 | :102BB000089528E100002A95E9F70197D1F70895D3 701 | :102BC0000895DF92EF92FF920F931F93CF93DF93BD 702 | :102BD000082FC8E0D0E010E880E2F82E90E1E92E5E 703 | :102BE00020E3D22E802F812339F0EBB881E090E0F2 704 | :102BF0000E94D915DBB806C01BB881E090E00E94A6 705 | :102C0000D915FBB81695219769F781E090E00E94ED 706 | :102C1000D9151BB8DF91CF911F910F91FF90EF90C5 707 | :102C2000DF9008959091D206911103C00E94E115A2 708 | :102C300002C00E94A41580E00895FF920F931F9395 709 | :102C4000CF93DF931F92CDB7DEB780E18BB981E0E0 710 | :102C500090E00E94D915198210E000E380E1F82E7F 711 | :102C60008981883091F00BB981E090E00E94D915FC 712 | :102C700089B1110F8170182BFBB881E090E00E94A0 713 | :102C8000D91589818F5F8983EBCF812F0F90DF91D9 714 | :102C9000CF911F910F91FF9008958091D2068111DD 715 | :102CA00002C00C941D160C94B81582E38BB981E018 716 | :102CB00090E00E94D91582E18BB981E090E00C94FC 717 | :102CC000D91581E08093D20608951092D206089516 718 | :102CD0000E94B81587FDFCCF0895CF92DF92EF9246 719 | :102CE000FF92CF93C82F6A017B010090D40604C0E5 720 | :102CF000CC0CDD1CEE1CFF1C0A94D2F78FEF0E9457 721 | :102D0000A4158C2F80640E94A4158F2D0E94A415F9 722 | :102D10008E2D0E94A4158D2D0E94A4158C2D0E942D 723 | :102D2000A41585E90E94A4158FEF0E94A4150E94A6 724 | :102D300068168093DF0681508E3FC8F3CF91FF90D5 725 | :102D4000EF90DF90CF900895AB01BC011092DD06AB 726 | :102D500081E10E946D160E94B8158093E0068E3FB7 727 | :102D6000D1F70895CF92DF92EF92FF92CF93DF9346 728 | :102D7000C82F6A017B018091DC06811113C08FEEA0 729 | :102D80008C0F823040F088EE8C0F823020F080EE85 730 | :102D90008C0F823038F489E0CC0CDD1CEE1CFF1C5B 731 | :102DA0008A95D1F78FEF0E9412168C2F80640E94B3 732 | :102DB00012168F2D0E9412168E2D0E9412168D2D26 733 | :102DC0000E9412168C2D0E941216C83011F487E84A 734 | :102DD00001C085E90E941216F12C0E944D16D82FD1 735 | :102DE0008F3F21F4FA94F110F8CF1DC081111BC060 736 | :102DF000CA33C9F40E944D161092D40686FF05C04E 737 | :102E000081E08093DC0682E006C01092DC0689E057 738 | :102E10008093D40681E08093DE060E944D160E94C6 739 | :102E20004D160E944D160E944D168D2FDF91CF91A9 740 | :102E3000FF90EF90DF90CF900895CF92DF92EF92C6 741 | :102E4000FF92CF93DF93C090D606D090D706E09044 742 | :102E5000D806F090D906C616D706E806F906E1F1BD 743 | :102E60006B017C016093D6067093D7068093D806D9 744 | :102E70009093D90659988FEF0E9412168FEF0E94F7 745 | :102E80001216B701A60181E10E94B216811125C078 746 | :102E9000C0E0D0E00E944D168E3F29F02197D1F777 747 | :102EA000599A80E01AC0E12CF12CC091DA06D09139 748 | :102EB000DB06CE0DDF1D0E944D1688838FEFE81ACA 749 | :102EC000F80AE11482E0F80681F70E944D160E948C 750 | :102ED0004D160E944D16599A81E0DF91CF91FF90D7 751 | :102EE000EF90DF90CF900895CF93DF93AB01BC01BB 752 | :102EF00088E10E94B21681113DC059988EEF0E9460 753 | :102F00001216C0E0D0E0E091DA06F091DB06EC0F9B 754 | :102F1000FD1F80810E9412162196C11582E0D807FC 755 | :102F200091F78FEF0E9412168FEF0E9412160E94E7 756 | :102F30004D16982F9F71953079F4C0E0D0E00E9433 757 | :102F40004D16811103C02196D1F706C0599A8FEF13 758 | :102F50000E941216599808C0599A0CC09E012F5F02 759 | :102F60003F4F2196C9F3E9010E944D168823B1F322 760 | :102F7000599A81E0DF91CF910895AB01BC0180E1C6 761 | :102F80000C94B216CF92DF92EF92FF920F931F93A1 762 | :102F9000CF93DF931092D30685E08093D5060E94ED 763 | :102FA0009D150E9465164B9998C080E185B9599A84 764 | :102FB0008FE097E2A0E0B0E08093D6069093D7062A 765 | :102FC000A093D806B093D906C4E60E945516C15006 766 | :102FD000E1F75998CCE08FEF0E941216C150D9F753 767 | :102FE00000E018E040E050E0BA0180E00E94B21634 768 | :102FF0000150110931F415B8599A81E08093D30634 769 | :103000006DC0813079F7CCE08FEF0E941216C1506D 770 | :10301000D9F7C1E0D2E04AEA51E060E070E088E030 771 | :103020000E94B2168A3A49F481E08093DE06C12CF0 772 | :10303000D12CE12C80E4F82E09C08130A9F321972E 773 | :1030400051F71092DE06C12CD12C7601CCE08FEF27 774 | :103050000E941216C150D9F701E012E040E050E0A2 775 | :10306000BA0187E30E94B216B701A60189E20E9465 776 | :10307000B2160150110931F482E08093D30615B8DD 777 | :10308000599A2CC08111EACF1092DC0689E0809316 778 | :10309000D4068091DE06813081F040E050E0BA0134 779 | :1030A0008BE30E94B21660E072E080E090E00E9444 780 | :1030B000BD1715B8599AC1E011C0C5E6D0E08FEF31 781 | :1030C0000E94121640E050E0BA018AE30E94B21654 782 | :1030D000219719F38111F3CFE0CFC0E08C2FDF915E 783 | :1030E000CF911F910F91FF90EF90DF90CF900895B7 784 | :1030F00080E185B9089515B808950E94B8154B99D7 785 | :1031000002C08F3FD1F708958F929F92AF92BF92E6 786 | :10311000CF92DF92EF92FF921F93CF93DF9360E005 787 | :1031200070E0CB010E941D17E091DA06F091DB06FA 788 | :1031300080818D7F893E51F1DF01A250BE4F8D917C 789 | :103140009C9185359A4A11F086E014C0E254FE4FF6 790 | :1031500084818093E50660857185828593850E94D0 791 | :103160001D17E091DA06F091DB0680818D7F893EA4 792 | :1031700029F083E08093D30680E0A7C08091E50624 793 | :103180008B3021F0863011F084E0F4CFC091DA0664 794 | :10319000D091DB06438554855093EF064093EE06AD 795 | :1031A00015851093F40686859785C48CD58CE68C9E 796 | :1031B000F78CC80ED91EE11CF11CC092F006D0920B 797 | :1031C000F106E092F206F092F3068091E506863071 798 | :1031D00019F4A689B78902C0ACA1BDA1208930E04D 799 | :1031E0002A9FB0012B9F700D3A9F700D112446014C 800 | :1031F0005701860E971EA11CB11C8092E106909289 801 | :10320000E206A092E306B092E4068630D9F08CA5DF 802 | :103210009DA5AEA5BFA59C01AD0122503109410974 803 | :103220005109A12FB0E00E94981D860E971EA81E7E 804 | :10323000B91E8092E6069092E706A092E806B09248 805 | :10324000E90624C00E94891DC60ED71EE81EF91E7D 806 | :10325000C092E606D092E706E092E806F092E90610 807 | :103260008189928935E0880F991F3A95E1F7BA0173 808 | :103270000E94531DC60ED71EE11CF11CC092E10630 809 | :10328000D092E206E092E306F092E406812F90E00D 810 | :1032900020E031E0320F8130910521F0969587953D 811 | :1032A000232FF7CF2093F5068091E6069091E7064D 812 | :1032B000A091E806B091E9068093EA069093EB06A8 813 | :1032C000A093EC06B093ED0681E0DF91CF911F91C2 814 | :1032D000FF90EF90DF90CF90BF90AF909F908F9036 815 | :1032E00008954F925F926F927F928F929F92AF92CA 816 | :1032F000BF92CF92DF92EF92FF92CF932091E5069B 817 | :10330000263039F488248A94982CA12CB12C21E001 818 | :1033100007C088248A94982CA82C2FE0B22E22E093 819 | :1033200004C0660F771F881F991F2A95D2F7209136 820 | :10333000EE063091EF0640E050E00E94671D6B0101 821 | :103340007C018091F0069091F106A091F206B09177 822 | :10335000F30629013A01480E591E6A1E7B1ECAE077 823 | :10336000C301B2010E941D17882311F0C150C1F79B 824 | :103370008091DA069091DB06FC01EC0DFD1D808149 825 | :103380009181A281B381BC01CD01682179218A217B 826 | :103390009B21CF91FF90EF90DF90CF90BF90AF90A7 827 | :1033A0009F908F907F906F905F904F9008954F9275 828 | :1033B0005F926F927F928F929F92AF92BF92CF92C5 829 | :1033C000DF92EF92FF92CF9388EEC82E83E0D82E43 830 | :1033D000E12CF12CC701B6010E947119611571052C 831 | :1033E0008105910591F030EAC31636E8D30631E045 832 | :1033F000E306F10431F02FEFC21AD20AE20AF20A10 833 | :10340000E9CF60E070E0CB0151C040EAC41646E865 834 | :10341000D40641E0E406F10409F448C08091E506D1 835 | :10342000863011F481E001C082E0A701960104C05A 836 | :10343000220F331F441F551F8A95D2F7CA01B901C5 837 | :103440002091EE063091EF0640E050E00E94671DAB 838 | :103450002B013C018091F0069091F106A091F206BB 839 | :10346000B091F30649015A01880E991EAA1EBB1E8F 840 | :10347000CAE0C501B4010E941D17882311F0C15094 841 | :10348000C1F78091DA069091DB06FC01E40DF51D91 842 | :103490008FEF90E0A0E0B0E080839183A283B383BC 843 | :1034A000C501B4010E947417C701B601CF91FF9006 844 | :1034B000EF90DF90CF90BF90AF909F908F907F90D4 845 | :1034C0006F905F904F9008958F929F92AF92BF92AE 846 | :1034D000CF92DF92EF92FF920F931F93CF93DF93E0 847 | :1034E000EC0155E0CC0FDD1F5A95E1F78E01012F5D 848 | :1034F000112706952091F406622F70E0C8010E9402 849 | :10350000531D7B018091EA069091EB06A091EC0699 850 | :10351000B091ED06672B09F44EC03091E5063630C8 851 | :1035200071F48090E6069090E706A090E806B090CF 852 | :10353000E90688159905AA05BB0509F45AC08090CB 853 | :10354000E1069090E206A090E306B090E406BC018C 854 | :10355000CD01681979098A099B0930E040E050E003 855 | :103560000E94671DCA01B9016E5F7F4F8F4F9F4F49 856 | :10357000C12CD12C0E9471192FEFC21AD20ACE147D 857 | :10358000DF04C1F79B01AC01225031094109510907 858 | :10359000A091F406B0E00E94981D8090E106909002 859 | :1035A000E206A090E306B090E406DC01CB01880DB2 860 | :1035B000991DAA1DBB1D9801322F2227330FC21B54 861 | :1035C000D30B4091F4064E9D90014F9D300D112478 862 | :1035D000021B130BBC01CD01600F711F811D911DDA 863 | :1035E0000E941D178091DA069091DB068C0F9D1FBB 864 | :1035F00002C080E090E0DF91CF911F910F91FF908A 865 | :10360000EF90DF90CF90BF90AF909F908F900895F4 866 | :103610000F931F93FC01892B49F48091E60690914A 867 | :10362000E706A091E806B091E90639C09385892F95 868 | :10363000807194FF3DC02091E506828D938D2B30E3 869 | :1036400079F424893589A90160E070E0BA01552731 870 | :103650004427A0E0B0E0842B952BA62BB72B02C00B 871 | :10366000A0E0B0E00097A105B105B9F29C01AD0161 872 | :103670002250310941095109A091F406B0E00E949D 873 | :10368000981D0091E1061091E2062091E306309129 874 | :10369000E406DC01CB01800F911FA21FB31F8093B2 875 | :1036A000EA069093EB06A093EC06B093ED0681E05A 876 | :1036B0001F910F910895FC01892BB1F0808188231F 877 | :1036C00099F0853E89F08E3221F481818E3219F095 878 | :1036D0000BC0853049F083858E3131F08F3021F079 879 | :1036E000883211F0CF01089580E090E008950E94A3 880 | :1036F000641A0C945B1B0000000000000000000036 881 | :10370000000000000000000008950000000000001C 882 | :1037100000002091D5062A95F1F70895AF93AFB731 883 | :10372000AF93BF932F93A091CF062091CE06A22BEB 884 | :10373000A8B9A4EBA6BD20E0E8DFA091CE06A8B909 885 | :10374000B091A306BB2341F02093CF062F91BF91E8 886 | :10375000AF91AFBFAF911895A0E3ABB9A9B1A1707C 887 | :10376000AA0F2A2FA0E1ABB9A0919106B0919206C1 888 | :103770001196A0939106B0939206A03989F4BC30BB 889 | :1037800079F4A1E0A093A306CF93C0E7A8E0B0E34B 890 | :10379000BBB9B0E1BBB9AA95D1F7CA95B9F7CF913A 891 | :1037A0002093CF062F91BF91AF91AFBFAF911895E6 892 | :1037B0002F932FB72F9330995BC03F933091990689 893 | :1037C00026B124702327E1F326B1247020939906B3 894 | :1037D00028E02A95F1F700004F935F936F937F9352 895 | :1037E0008F93EF93FF9360E0E091A406F091A5061C 896 | :1037F0003DE541E00DC05091990676B17470752792 897 | :10380000E1F376B17470709399067EE07A95F1F7E2 898 | :1038100027E081E079B17470D9F4000000007BE109 899 | :103820007A95F1F776B17470509199067093990674 900 | :10383000752776957695880F872B2A9559F7853DBC 901 | :1038400009F461E06030B9F281933150404099F65B 902 | :103850009F93AF93BF930E94F804BF91AF919F9144 903 | :10386000FF91EF918F917F916F915F914F913F9178 904 | :103870002F912FBF2F91189581E00E9457028FEF53 905 | :1038800080931501CBE80E94B311309B03C00E94C6 906 | :103890007B18F9CF0E94781883B18F7090910B013B 907 | :1038A000891759F180930B01883049F0843009F46D 908 | :1038B000F1C0823009F4F0C08130F9F4EFC082E049 909 | :1038C0009091A206890FE82FE770E695F0E0E459A1 910 | :1038D000FF4FE49180FFE295EF708E2F887009F022 911 | :1038E000E86FE90FE53C08F0DBC0E093A2068091A9 912 | :1038F000A2068C3810F0C093A2068091D0068823CF 913 | :1039000009F4C1CF8091A306882309F4BCCFF894B1 914 | :10391000809193068F5F8F70809393062091A2060B 915 | :10392000269526952093D10690E030E1239F800DC7 916 | :10393000911D112490939B0680939A060090F506A2 917 | :1039400002C0969587950A94E2F7909317018093A9 918 | :103950001601880F991F880F991FFC01EA55F94F2E 919 | :1039600080819181A281B381809394069093950682 920 | :10397000A0939606B0939706809115012817B9F089 921 | :103980002093150163E08CE00E94501482E791E0DF 922 | :103990000E9476158091D1068A3020F483E091E070 923 | :1039A0000E9430158091D10690E00E943C158091D4 924 | :1039B000930690910C01981306C0209111019091EB 925 | :1039C000D106291741F190910D01891306C020916C 926 | :1039D00012019091D1062917F1F090910E018913EF 927 | :1039E00006C0209113019091D1062917A1F0909162 928 | :1039F0000F01891306C0209114019091D106291757 929 | :103A000051F090911001891308C090911501809197 930 | :103A1000D106981302C00E94900480919406909160 931 | :103A20009506A0919606B09197060297A109B10953 932 | :103A3000AC01BD010090F50604C0440F551F661F80 933 | :103A4000771F0A94D2F78091E1069091E206A09147 934 | :103A5000E306B091E406840F951FA61FB71F2091BF 935 | :103A6000F40630E02150310940919A0650919B06AE 936 | :103A700024233523BC01CD01620F731F811D911DCD 937 | :103A80000E94A41610929206109291061092A3061C 938 | :103A90007894F9CE84E014CF86E012CF80E010CF86 939 | :103AA0001092A20624CFAA1BBB1B51E107C0AA1F7C 940 | :103AB000BB1FA617B70710F0A61BB70B881F991FCF 941 | :103AC0005A95A9F780959095BC01CD010895A1E282 942 | :103AD0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F88 943 | :103AE000FF1FA217B307E407F50720F0A21BB30BD3 944 | :103AF000E40BF50B661F771F881F991F1A9469F74F 945 | :103B000060957095809590959B01AC01BD01CF01AA 946 | :103B10000895A29FB001B39FC001A39F700D811DA6 947 | :103B20001124911DB29F700D811D1124911D0895C6 948 | :103B30000E94891DA59F900DB49F900DA49F800D9C 949 | :103B4000911D11240895FB01DC0105900D920020C8 950 | :103B5000E1F70895FB01DC014150504030F08D91B8 951 | :103B60000590801919F40020B9F7881B990B089566 952 | :103B7000FB01DC0104C08D910190801921F44150BA 953 | :103B80005040C8F7881B990B0895DC01FB01415098 954 | :103B9000504058F049F001900D920020C1F7E61B0B 955 | :103BA000F70B3197CF0108951C9201900020E9F79F 956 | :103BB000F6CFBB274A3031F4992322F4BDE2909529 957 | :103BC00081959F4F0C94161EBB272A3051F49923E0 958 | :103BD00042F4BDE290958095709561957F4F8F4F2F 959 | :103BE0009F4F0C94F41DBB27FA01A62F6217710595 960 | :103BF00081059105330B30FB66F0AA27660F771F0E 961 | :103C0000881F991FAA1FA21710F0A21B6395385096 962 | :103C1000A9F7A05DAA3308F0A95DA19336F7B11109 963 | :103C2000B1931082CA010C942F1EBB27FB015527AC 964 | :103C3000AA27880F991FAA1FA41710F0A41B839509 965 | :103C40005051B9F7A05DAA3308F0A95DA193009780 966 | :103C500079F7B111B1931192CB010C942F1EDC01B5 967 | :103C6000FC01672F71917723E1F7329704C07C91B3 968 | :103C70006D9370836291AE17BF07C8F30895F999E9 969 | :103C8000FECF92BD81BDF89A992780B50895262F61 970 | :103C9000F999FECF1FBA92BD81BD20BD0FB6F89431 971 | :0E3CA000FA9AF99A0FBE01960895F894FFCF94 972 | :063CAE00FFFFFE200000F4 973 | :00000001FF 974 | -------------------------------------------------------------------------------- /firmware/src/sub.S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suaide/SDisk2/c9626c43db3af47e874c40ad89d2ba20e2c10b08/firmware/src/sub.S --------------------------------------------------------------------------------