From 87d2b6dfced239fcce1a6c82490f7df96b4ad606 Mon Sep 17 00:00:00 2001 From: Sin Shimozono Date: Sat, 12 Jul 2014 22:45:56 +0900 Subject: [PATCH] arduino --- arduino/.cproject | 212 - arduino/.gitignore | 3 - arduino/.project | 28 - arduino/.settings/org.eclipse.cdt.core.prefs | 17 - arduino/CPLD-Xilinx/firmware.xvf | Bin 53289 -> 0 bytes arduino/CPLD-Xilinx/floppyemu.prj | 1 - arduino/CPLD-Xilinx/floppyemu.ucf | 41 - arduino/CPLD-Xilinx/floppyemu.v | 433 - arduino/CPLD-Xilinx/floppyemu.xise | 210 - arduino/CPLD-Xilinx/testbench.v | 163 - .../eagle/floppyemu 1.1.1/board-layout.png | Bin 143187 -> 0 bytes .../eagle/floppyemu 1.1.1/board-schematic.png | Bin 65454 -> 0 bytes arduino/eagle/floppyemu 1.1.1/floppyemu.brd | 4669 ----------- arduino/eagle/floppyemu 1.1.1/floppyemu.sch | 7254 ----------------- arduino/eagle/floppyemu 1.1.1/gerbers.zip | Bin 131158 -> 0 bytes arduino/eagle/floppyemu 1.1.1/parts-1.1.txt | 33 - arduino/firmware/firmware.xvf | Bin 53289 -> 0 bytes arduino/firmware/readme.txt | 24 - arduino/floppyemu/Release/Makefile | 212 - arduino/floppyemu/Release/femu.bin | Bin 126976 -> 0 bytes arduino/floppyemu/Release/floppyemu.hex | 1983 ----- arduino/floppyemu/Release/merged.hex | 1123 --- arduino/floppyemu/main.cpp | 2021 ----- arduino/instructions.docx | Bin 173116 -> 0 bytes arduino/license.txt | 3 - arduino/~$bom.xlsx | Bin 165 -> 0 bytes arduino/~$cost.xlsx | Bin 165 -> 0 bytes floppy_emu_arduino/.gitignore | 1 + .../.settings/de.innot.avreclipse.core.prefs | 0 .../org.eclipse.cdt.codan.core.prefs | 0 .../.settings/org.eclipse.cdt.core.prefs | 21 + .../Release/Makefile | 0 .../Release}/femu.bin | Bin .../Release}/floppyemu.hex | 0 .../Release/makedep.mk | 0 .../Release}/merged.hex | 0 .../SdFat/Sd2Card.cpp | 0 .../SdFat/Sd2Card.h | 0 .../SdFat/SdBaseFile.cpp | 0 .../SdFat/SdBaseFile.h | 2 +- .../SdFat/SdFat.cpp | 0 .../SdFat/SdFat.h | 0 .../SdFat/SdFatConfig.h | 0 .../SdFat/SdFatStructs.h | 0 .../SdFat/SdInfo.h | 0 .../SdFat/SdVolume.cpp | 0 .../SdFat/SdVolume.h | 0 .../examples/AnalogLogger/AnalogLogger.pde | 0 .../SdFat/examples/HelloWorld/HelloWorld.pde | 0 .../SdFat/examples/OpenNext/OpenNext.pde | 0 .../SdFat/examples/QuickStart/QuickStart.pde | 0 .../ReadWriteSdFat/ReadWriteSdFat.pde | 0 .../SdFat/examples/SD_Size/SD_Size.pde | 0 .../SdFat/examples/SdFatSize/SdFatSize.pde | 0 .../examples/SdFormatter/SdFormatter.pde | 0 .../SdFat/examples/SdInfo/SdInfo.pde | 0 .../SdFat/examples/TwoCards/TwoCards.pde | 0 .../SdFat/examples/append/append.pde | 0 .../SdFat/examples/average/average.pde | 0 .../SdFat/examples/bench/bench.pde | 0 .../SdFat/examples/bufstream/bufstream.pde | 0 .../SdFat/examples/cin_cout/cin_cout.pde | 0 .../SdFat/examples/eventlog/eventlog.pde | 0 .../SdFat/examples/fgets/fgets.pde | 0 .../SdFat/examples/formatting/formatting.pde | 0 .../SdFat/examples/getline/getline.pde | 0 .../SdFat/examples/readCSV/readCSV.pde | 0 .../SdFat/examples/readlog/readlog.pde | 0 .../SdFat/examples/rename/rename.pde | 0 .../bootldr/bootldr.atsln | 0 .../bootldr/bootldr.atsuo | Bin .../bootldr/bootldr/Release/Makefile | 0 .../bootldr/bootldr/Release/bootldr.hex | 0 .../bootldr/bootldr/Release/makedep.mk | 0 .../bootldr/bootldr/asmfunc.S | 2 +- .../bootldr/bootldr/bootldr.c | 6 +- .../bootldr/bootldr/bootldr.cproj | 0 .../bootldr/bootldr/diskio.h | 0 .../bootldr/bootldr/integer.h | 0 .../bootldr/bootldr/lcd.c | 2 +- .../bootldr/bootldr/lcd.h | 0 .../bootldr/bootldr/main.c | 0 .../bootldr/bootldr/mmc.c | 0 .../bootldr/bootldr/pff.c | 0 .../bootldr/bootldr/pff.h | 0 .../bootldr/how to configure bootloader.txt | 0 .../cardtest}/cardtest.cpp | 454 +- .../cardtest}/cardtest.h | 0 .../diskmenu.cpp | 736 +- .../diskmenu.h | 0 floppy_emu_arduino/floppy_emu_arduino.ino | 471 ++ floppy_emu_arduino/floppyemu.atsln | 20 + floppy_emu_arduino/floppyemu.atsuo | Bin 0 -> 44544 bytes .../floppyemu.cpp | 3582 ++++---- floppy_emu_arduino/floppyemu.cppproj | 189 + floppy_emu_arduino/floppyemu.h | 110 + .../millitimer.cpp | 0 .../millitimer.h | 0 .../noklcd.cpp | 0 .../floppyemu => floppy_emu_arduino}/noklcd.h | 0 .../portmacros.h | 0 .../xsvf/lenval.cpp | 0 .../xsvf/lenval.h | 0 .../xsvf/micro.cpp | 0 .../xsvf/micro.h | 0 .../xsvf/ports.cpp | 0 .../xsvf/ports.h | 0 107 files changed, 2995 insertions(+), 21031 deletions(-) delete mode 100644 arduino/.cproject delete mode 100644 arduino/.gitignore delete mode 100644 arduino/.project delete mode 100644 arduino/.settings/org.eclipse.cdt.core.prefs delete mode 100755 arduino/CPLD-Xilinx/firmware.xvf delete mode 100755 arduino/CPLD-Xilinx/floppyemu.prj delete mode 100755 arduino/CPLD-Xilinx/floppyemu.ucf delete mode 100755 arduino/CPLD-Xilinx/floppyemu.v delete mode 100755 arduino/CPLD-Xilinx/floppyemu.xise delete mode 100755 arduino/CPLD-Xilinx/testbench.v delete mode 100755 arduino/eagle/floppyemu 1.1.1/board-layout.png delete mode 100755 arduino/eagle/floppyemu 1.1.1/board-schematic.png delete mode 100755 arduino/eagle/floppyemu 1.1.1/floppyemu.brd delete mode 100755 arduino/eagle/floppyemu 1.1.1/floppyemu.sch delete mode 100755 arduino/eagle/floppyemu 1.1.1/gerbers.zip delete mode 100755 arduino/eagle/floppyemu 1.1.1/parts-1.1.txt delete mode 100755 arduino/firmware/firmware.xvf delete mode 100755 arduino/firmware/readme.txt delete mode 100755 arduino/floppyemu/Release/Makefile delete mode 100755 arduino/floppyemu/Release/femu.bin delete mode 100755 arduino/floppyemu/Release/floppyemu.hex delete mode 100755 arduino/floppyemu/Release/merged.hex delete mode 100755 arduino/floppyemu/main.cpp delete mode 100755 arduino/instructions.docx delete mode 100755 arduino/license.txt delete mode 100755 arduino/~$bom.xlsx delete mode 100755 arduino/~$cost.xlsx create mode 100644 floppy_emu_arduino/.gitignore rename {arduino => floppy_emu_arduino}/.settings/de.innot.avreclipse.core.prefs (100%) rename {arduino => floppy_emu_arduino}/.settings/org.eclipse.cdt.codan.core.prefs (100%) create mode 100644 floppy_emu_arduino/.settings/org.eclipse.cdt.core.prefs rename arduino/floppyemu/Release/Makefile~ => floppy_emu_arduino/Release/Makefile (100%) rename {arduino/firmware => floppy_emu_arduino/Release}/femu.bin (100%) rename {arduino/firmware => floppy_emu_arduino/Release}/floppyemu.hex (100%) rename {arduino/floppyemu => floppy_emu_arduino}/Release/makedep.mk (100%) rename {arduino/firmware => floppy_emu_arduino/Release}/merged.hex (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/Sd2Card.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/Sd2Card.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdBaseFile.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdBaseFile.h (97%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdFat.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdFat.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdFatConfig.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdFatStructs.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdInfo.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdVolume.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/SdVolume.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/AnalogLogger/AnalogLogger.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/HelloWorld/HelloWorld.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/OpenNext/OpenNext.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/QuickStart/QuickStart.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/ReadWriteSdFat/ReadWriteSdFat.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/SD_Size/SD_Size.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/SdFatSize/SdFatSize.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/SdFormatter/SdFormatter.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/SdInfo/SdInfo.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/TwoCards/TwoCards.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/append/append.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/average/average.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/bench/bench.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/bufstream/bufstream.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/cin_cout/cin_cout.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/eventlog/eventlog.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/fgets/fgets.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/formatting/formatting.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/getline/getline.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/readCSV/readCSV.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/readlog/readlog.pde (100%) rename {arduino/floppyemu => floppy_emu_arduino}/SdFat/examples/rename/rename.pde (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr.atsln (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr.atsuo (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/Release/Makefile (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/Release/bootldr.hex (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/Release/makedep.mk (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/asmfunc.S (93%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/bootldr.c (78%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/bootldr.cproj (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/diskio.h (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/integer.h (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/lcd.c (96%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/lcd.h (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/main.c (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/mmc.c (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/pff.c (100%) rename {arduino => floppy_emu_arduino}/bootldr/bootldr/pff.h (100%) rename {arduino => floppy_emu_arduino}/bootldr/how to configure bootloader.txt (100%) rename {arduino/floppyemu => floppy_emu_arduino/cardtest}/cardtest.cpp (95%) mode change 100644 => 100755 rename {arduino/floppyemu => floppy_emu_arduino/cardtest}/cardtest.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/diskmenu.cpp (96%) mode change 100755 => 100644 rename {arduino/floppyemu => floppy_emu_arduino}/diskmenu.h (100%) create mode 100644 floppy_emu_arduino/floppy_emu_arduino.ino create mode 100755 floppy_emu_arduino/floppyemu.atsln create mode 100755 floppy_emu_arduino/floppyemu.atsuo rename arduino/floppyemu/floppyemu.ino => floppy_emu_arduino/floppyemu.cpp (75%) mode change 100644 => 100755 create mode 100755 floppy_emu_arduino/floppyemu.cppproj create mode 100644 floppy_emu_arduino/floppyemu.h rename {arduino/floppyemu => floppy_emu_arduino}/millitimer.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/millitimer.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/noklcd.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/noklcd.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/portmacros.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/lenval.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/lenval.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/micro.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/micro.h (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/ports.cpp (100%) rename {arduino/floppyemu => floppy_emu_arduino}/xsvf/ports.h (100%) diff --git a/arduino/.cproject b/arduino/.cproject deleted file mode 100644 index eeec63d..0000000 --- a/arduino/.cproject +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arduino/.gitignore b/arduino/.gitignore deleted file mode 100644 index 9337138..0000000 --- a/arduino/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/Debug/ -/Bootloader/ -/Flash/ diff --git a/arduino/.project b/arduino/.project deleted file mode 100644 index 08b0e42..0000000 --- a/arduino/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - mac-floppy-emu - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - de.innot.avreclipse.core.avrnature - - diff --git a/arduino/.settings/org.eclipse.cdt.core.prefs b/arduino/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index 206bd4d..0000000 --- a/arduino/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,17 +0,0 @@ -eclipse.preferences.version=1 -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/LANG/delimiter=\: -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/LANG/operation=replace -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/LANG/value=en-US -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/PATH/delimiter=\: -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/PATH/operation=replace -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/PATH/value=/opt/local/bin\:/usr/bin\:/bin\:/usr/sbin\:/sbin -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/append=true -environment/project/de.innot.avreclipse.configuration.app.debug.46313178.1895685496/appendContributed=true -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/LANG/delimiter=\: -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/LANG/operation=replace -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/LANG/value=en-US -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/PATH/delimiter=\: -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/PATH/operation=replace -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/PATH/value=/usr/local/arduinotool/bin\:/opt/local/bin\:/usr/bin\:/bin\:/usr/sbin\:/sbin -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/append=true -environment/project/de.innot.avreclipse.configuration.app.debug.46313178/appendContributed=true diff --git a/arduino/CPLD-Xilinx/firmware.xvf b/arduino/CPLD-Xilinx/firmware.xvf deleted file mode 100755 index 443eb736b8dc7a347ff03ce2a61f21ab3f096867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53289 zcmaLA-Hsbqx~3UQrj$%4Em2aHE&nP~Nz0Urmg&Fq$PybvV2B1Aa|6|wzJT3#5NWZ> zY!p#DUA_UL&Fm+}aJ-Tz8X*;U^|5fesI}d*T`R7y2|MR=z$D``cN7a8JxOXQzy{l6H z*Kt;PyTClUqkm2-KmV+q{#((1|3CeY*8bg5^>5o&L*@TYy|1XpW=F}ghfd(J@&qaU z-af7Aze!pz0_IASmK(zD0oXTV+A2fgwvLq4E$RU~v2M4>vMVVzwcOKghq~r}oy+yJ zGCQ*ZHw{&!%dOJx&hBukV$GCD{;y3%2fo|kQ2)7WVChKzO$uK}97mk!5J}-_OlMhE zP11Qx7g>IDaXPDIOji-t3F?^E6C1gTzSy>hQBUwc^|5Vl_Jn2IqUwn|$Af)m2{lrG zOVV1F{d0n9G)?p3=BPB)&;c*~s9;n7P3pEHwnMkwDPr2uWZe(Qoo+mhUY7m0UCY~^ zxYJjWTY92YyW8!cCrSmoW^}%Th{K4Zh}RLv!hfYNHZ?WTE;;?FFgegH;ymIa;xghY z;yS@yPi*84d*VoTx4qdDmhDgQ=(tGF_oy1Nre>1D^@w@IMi~k>Ber7UcEloLC!*#= zdKx{&yR+K%#8F@FM8(*)nI0WSr3w4zpeM+7&8X-gVw@94qnKVt97mi)jC0~>7Snme zMV8f)vs&t2m*6T7=e*X4>?Yr_-zSbXYVUAPRI;Mvfy4G@PgwSEJkyk}9B1Xx(2GxBwa*Y3X{UCdcbv3SeM0fM`a^-I46#? zs=RM^c8A;cgk?K-njQ0cB0(x9Sc|9=`sXCgv*WaIBR18Hbz2eJS@w5HQ$TY}DxL?oyc1ur`zx*tEOtx!AJu%SLB{+=NI?A(uNz!XoPH?Q!2~M)~S@d{X zWbGuK6(>_qHF>?OGEiMxHdTY940KRgb4f-LEYLDK4J zc2}dErlW}05yufH>c*tyX-sDk=MfjN?lR&^ciW`pwd(4HsBOER*r>)~Pu#0$t9!{e zd&08)J^bFuStYsa-K(nR{+Rb32$RAOe|z+J|5S4CA{KtGs!81!G5!2?XgR*`xX1gB z%k9OTX7}QpxX1gBq-EyB`L^)3C+_vdxAa80EvDVgxv2_0d9OtBe{I5ncFDE=F{0)~ za#OkYXQfHqam4==@gH@>r0{=Hx;uRxH_nNBi!f8~En`!f6KPY-iCxP&2+tk&HgbpW zz)mVhN4t`5_Jn1-@H9I)$&Qjqa8lK?W|G#9(t$jwAMG1f-Se0}S4&CV7cp%`Y$sQv zrizFi;ibOVlyBEg(&QpH*&+c^~-sAPhg6KVSQ z`*t~_9~CBr|6_LN;eI}y#5r;DPnxYs;lBzJjC0~-5f2pS#7UeJC%4Rr6XwL>qoaDH zfmXtHbLQ$idcv~(8CBz)sKz-_t$mlyiE8~`I_lLttNi<W|^E zQ~gQLLP=fCiDW)i|FL@Xb&_gM{5C<&iN8y55wA7QiE5k^Rn3W;yO#!-`$Sc9qJG#D zdWQMMIbqrU6i!c$()+||oD-+_!=;}-jHvrW(i5k;Pb9r~8t25R=0q~gr*Tf478=9k ztU3`jC(`tmIdOXXoH%`5&z`9=+s&z}^LTVvmK^gBM@KjPt2EvxPUD<7{ZY*&b$`+n zxTINasvGCT=|3LbNv6o@U-ghp>S|8p2`5FHV$;G|JoJi6* zC*CUR^|Wv&&(gxoiKOl=bK))L#D%`t?)XmkiML+s;o)>JCoJ0*<+<~E!%~{ z@3ZV#fqe*sO-at(e9+Q7dBF zDMQ^jCu+UxeY)+5T3_yPPSnb*ENENX&4p~|gk_hW(J_O(OfT*~=;ONNT1R<6&LBz0 zw7+j^qW|t6ceQCuXPN{_I*;ihOD92X8Jk+=q2;x3cU)Z-_ler(*4Gnn>s{bY|0GqI z6PE3q@Fcurd^^4ueVg~9=Q=Ak6@C~CUqpQVxKhy+vrUD0FS@^Ny#2ZG_xrT1|0abC zVRBZTh~0?21h+l$c3HUXsQ+@t}U^PFgsRg&Pr@;aTZHE2i%B#xb2loJO2Q z)SO7(?>tz9srf*!C(`4tRQFt8Y&xrTQg_!A8%2jbar5?6>6<-a+5Y0{cU2(4>TlE6 z6ZNrD#Z zGAHV{-zVy2Rmbt|peM+ZRtGAU;4osG6ZPvn6duRI%!w;~vFTc;+9fS(PLv61PNeA~ z;xghYqUOX+UG)*q9raCq+njiq{jb0Hdcv~(89ltG&nNabqleYY%ANi9HXq)<6H-2( zND80p^N6IW2CS20JIx+8UkB8C(PTb7jC0~){A~MSM@?K=L)KI`;w^LHA#>vJ)%L?u zHEZ6`&8e#MtkqJx{hO+X0}a(Vkv5%voD&a6vdP88Iq`5D(@8|liR4c3a2C@zCmt@s zjCr_>h2xxfxK_G5XI&O^;^FOc;!&pS+iq|6gk}4Sd!&|>1Pdt|0ZEyC3W&1OFOa~=cjmVrx(t5-^ zVk2TRVk=@hViBk;#a zjfl;Nt%&W2MZ`|TZp2=KI)CmHzv|1~(i5fhc01^aQbBU*gNVb3qlniL#}OwHrx9ln z=MfhXml0PH*9q==Vk39h6Tg<-ZEyC3W&57^wOUF#=GWDTwTShIdBjG@n`Se=_Q4?J@HPzEb|L_w(U9TGpl!AS6<)r&+b%Jg*&EY zJ16{JMHBpE#J{h+esxJjZ7TeuUYhTJlH{GADzDPIe^ECjP5o1B>aXFWzIWoBcxRyl zBz2b&HJ0t1Fn+K6-Lotm^>-hHZ*{)= zID8ZJ-HVuh8oo{X?r&oH#Zl#Ta@@8~HNhfcCt^3^Epy`CzKYyjv;Gh2@?QV)cZe-Z zPT~9TlO*r{G4{lt;??{Zul1*_a+Ngomst3pBK|evT&J4UT||s?;@vnW-o52M@$QC8 z*B9HiUG>BheT;BpcZbt7Voq4LbHez&@+W8YbWS|EAMtTLo&QfXCz6N56U~X_!SW=| zi6@#9$&2qNaZWrb_7}iO#yRn%TfMnF(p%=llfH`FTr-zybK=SC`cWk}+P`Al^#s|u zXSDjgFzJ{-hWY>GPx@pgN%b=|yAG%BPxYfa|6$+MU-X{+YLEY*3s355P9#4K@?>5Q z7q?Koq;Q-QPvV?-a?6}}a{HWkFVpwy)kkbM7qaaM%l7XH-_!3CB_BwzuJE9_Brvs?i0V%6PE2y@O^&rIzgS^-x92aQ+QvWStZY+ z@8>aXL~KTEMT~Re{UWBF92f2U95m9V|}=&&rg z*5B)wbrKv>#VRrn-ycQ%vAFYpCh0h)lZexZvof?C=fwL9y)#T&UdFnsh->xJZXWM? z;`TZ5fxd_FOLM}q{V_kd8|K6Z)o{!YY7upxNN%qm&ClRL+ zXA$QS7y2#5q~&Fn{ce9-|6mmhuM^z$#O-t9!|dU1O6;e;sxaX#+aL48W<^pOk&}w(*3x8s5z0m zp7?Mc3oo+tC(b@x#$H@$fRf|hGABOVsJ+8S$47Vc3TV6CocXpVEZevG(XpOp5_~J1 z;77HHdhSRI=P_+WY({KFY)332b|S_(@lh{Hby<97^-*8$mY#U6*GEd&4tjztx%5AT z9~k{;SWkQZqmf!Tw{{rckM#4H$)n?=G41cuiT=Bv{~t|-`#JH^OmiYh=dtiYm^8JF zxQe(=aMu$Xxx=3L_~!Btd&08)F+V=8q(49UaWy%}Y4&kVc&RTo;p0l$6CdZYNmGr8 z&4?}G{v(Hv+c7O7b|Q9#N!?z)Kkl|CKJIG>Z|RBh&M&^Q`j{*^{lRZTPYjFwL3HV( zct(2eNan=H8>X>a)&+f^ndai z)3RMNr`gkcs-Iw-6Hja5jGjIWKR@v_k7*-foD)x5F^zNLX%SOhR(e*ZNBHZ5z zo=%1P`^3{(xKBJ~P9%jF!lbEX#8t#~g1esB$Q|}XzEjlLwZH8N%XaQG%kS~NRpr=( zRqYb2MSL9Ym^r1B!i`wC8L<^H&WXH;X(wVgVlTmMPvp1HiTp~xrKHkq2R%WSoc=&h z@(B*9Vim1pMiKRyRdS!m$1$BmoJO2QWKJXpT7(y~`7)-fi0cG*J#qV-IM+?_NJZG* z>

E)AC&JMUQshA34p=tE!S1L_UKXis_a=_AE$*IS(%*gvu2&s_Dyy5z9V^M^{ibl)4GM~Cdch0KNq07 z-FQ~L1h+l$j5)EpJ#HJ)d(mg*FMm>FS#r#Qe(oi~_!{%sNLQ1je-1Cr^#c**c#=fuS0N?KEpJ zClYK%Y=w8_jW{P7g$|t5)tpGN8?h(c-GPq%y=a3uaro$He0S5#!JM!xIi`MxIGGcT zVLaw2;-AA4O=BESe-aDF&$b)0n9d_Eg!}IwG?p=4MO-Ji>xqrrVNZOL4BgEbstP@6 z*}f+}IZ6Ul4LPsXxIQxoC-HQOgs;cgDA?kuLv ziKOsCm^8JF7@s>nStqG3i%)7kxqVJNSIOP>W=~kQKjw3_luUx>`r9`*HBPhVH8qnI zuE)Z;((~u9LdDEat@Xjoe{Re5!~3 zZeG6G6PE2y@YB0_cA8*yoSy!twLCrFPwP5dQdnV%pXjjr3IAzR>Fz8}vrk((=OpF# zI}#M7O?A}g$$`3hmP)XvZrtIvCqBLXcLP5yb2aSSK~IqFn$ZakH0%j#P9&c|e>y4y zUKgS8IN~JYGz*1iWx)77uum89(wDLBDz?m=*q!sPCpL12bD}A`+urO6%XZD2W=*wp z)2grNEaE)kBH~h*G_}gg^qkj8;bXr~ zG&fm(%ba+jlDqBAp0I4+6EBX7wD(_BBi7VRQdsXjQ_N%9DAUt_5q~%EMN5VE7xyC0 zi5G>^9SYniFZ^aUO6IaT;+J>&|1ki0LxoD&jgpT^7$BFE(

EWAhmu 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 QQTAw8=w}MuQ6cUA2m9OGdjJ3c diff --git a/arduino/CPLD-Xilinx/floppyemu.prj b/arduino/CPLD-Xilinx/floppyemu.prj deleted file mode 100755 index 08e89be..0000000 --- a/arduino/CPLD-Xilinx/floppyemu.prj +++ /dev/null @@ -1 +0,0 @@ -verilog work "floppyemu.v" diff --git a/arduino/CPLD-Xilinx/floppyemu.ucf b/arduino/CPLD-Xilinx/floppyemu.ucf deleted file mode 100755 index 56ecd5a..0000000 --- a/arduino/CPLD-Xilinx/floppyemu.ucf +++ /dev/null @@ -1,41 +0,0 @@ -#PACE: Start of Constraints generated by PACE -#PACE: Start of PACE I/O Pin Assignments -NET "stepAck_diskInserted" LOC = "P8" ; -NET "_enable" LOC = "P20" ; -NET "_rst" LOC = "P37" ; -NET "_wreq" LOC = "P18" ; -NET "_wreqMCU" LOC = "P5" ; -NET "byteReady_tk0" LOC = "P7" ; -NET "ca0" LOC = "P12" ; -NET "ca1" LOC = "P13" ; -NET "ca2" LOC = "P14" ; -NET "clk" LOC = "P43" ; -NET "data<0>" LOC = "P31" ; -NET "data<1>" LOC = "P32" ; -NET "data<2>" LOC = "P33" ; -NET "data<3>" LOC = "P34" ; -NET "data<4>" LOC = "P36" ; -NET "data<5>" LOC = "P38" ; -NET "data<6>" LOC = "P41" ; -NET "driveCurrentSide" LOC = "P3" ; -NET "stepDirectionMotorOn" LOC = "P1" ; -NET "driveTach" LOC = "P28" ; -NET "ejectRequest" LOC = "P30" ; -NET "led" LOC = "P40" ; -NET "lstrb" LOC = "P16" ; -NET "outputEnable" LOC = "P2" ; -NET "rd" LOC = "P21" ; -NET "rdAckWrTick" LOC = "P44" ; -NET "SEL" LOC = "P19" ; -NET "stepRequest" LOC = "P39" ; -NET "wr" LOC = "P22" ; -NET "zero" LOC = "P6" ; -NET "pwm" LOC = "P23" ; -NET "test" LOC = "P27" ; - -#PACE: Start of PACE Area Constraints -#PACE: Start of PACE Prohibit Constraints -#PACE: End of Constraints generated by PACE -#Created by Constraints Editor (xc9572xl-vq44-10) - 2013/11/07 -NET "clk" TNM_NET = clk; -TIMESPEC TS_clk = PERIOD "clk" 50 ns HIGH 50%; diff --git a/arduino/CPLD-Xilinx/floppyemu.v b/arduino/CPLD-Xilinx/floppyemu.v deleted file mode 100755 index 7721945..0000000 --- a/arduino/CPLD-Xilinx/floppyemu.v +++ /dev/null @@ -1,433 +0,0 @@ -/* - Floppy Emu, copyright 2013 Steve Chamberlin, "Big Mess o' Wires". All rights reserved. - - Floppy Emu is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported - license. (CC BY-NC 3.0) The terms of the license may be viewed at - http://creativecommons.org/licenses/by-nc/3.0/ - - Based on a work at http://www.bigmessowires.com/macintosh-floppy-emu/ - - Permissions beyond the scope of this license may be available at www.bigmessowires.com - or from mailto:steve@bigmessowires.com. - - -------------------------------------------------------------------------------------- - - Disk registers (read): - State-control lines Register - CA2 CA1 CA0 SEL addressed Information in register - - 0 0 0 0 DIRTN Head step direction (0 = toward track 79, 1 = toward track 0) - 0 0 0 1 CSTIN Disk in place (0 = disk is inserted) - 0 0 1 0 STEP Drive head stepping (setting to 0 performs a step, returns to 1 when step is complete) - 0 0 1 1 WRTPRT Disk locked (0 = locked) - 0 1 0 0 MOTORON Drive motor running (0 = on, 1 = off) - 0 1 0 1 TK0 Head at track 0 (0 = at track 0) - 0 1 1 0 SWITCHED Disk switched (1 = yes?) SWIM3: relax, also eject in progress - 0 1 1 1 TACH GCR: Tachometer (produces 60 pulses for each rotation of the drive motor), MFM: Index pulse - 1 0 0 0 RDDATA0 Read data, lower head, side 0 - 1 0 0 1 RDDATA1 Read data, upper head, side 1 - 1 0 1 0 SUPERDR Drive is a Superdrive (0 = no, 1 = yes) SWIM3: two meg drive. - 1 0 1 1 MFM_MODE SWIM3: MFM_MODE, 1 = yes (opposite of writing?) - 1 1 0 0 SIDES Single- or double-sided drive (0 = single side, 1 = double side), SWIM: 0 = 4MB, 1 = not 4MB - 1 1 0 1 READY 0 = yes, SWIM3: SEEK_COMPLETE - 1 1 1 0 INSTALLED 0 = yes, only used by SWIM, not IWM? SWIM3: drive present. - 1 1 1 1 HSHK_HD 400K/800K: implements ready handshake if 1, Superdrive: Inserted disk capacity (0 = HD, 1 = DD), SWIM3: 1 = ONE_MEG_MEDIA - - - Disk registers (write): - Control lines Register - CA1 CA0 SEL addressed Register function - - 0 0 0 DIRTN Set stepping direction (0 = toward track 79, 1 = toward track 0), SWIM3: SEEK_POSITIVE - 0 0 1 SWITCHED Reset disk switched flag (writing 1 sets switch flag to 0) - 0 1 0 STEP Step the drive head one track (setting to 0 performs a step, returns to 1 when step is complete) - 1 0 0 MOTORON Turn drive motor on/off (0 = on, 1 = off) - 1 0 0 TWOMEGMEDIA_CHECK The first time zero is written, changes the behavior when reading SIDES - 0 1 1 MFM_MODE 0 = MFM, 1 = GCR - 1 1 0 EJECT Eject the disk (writing 1 ejects the disk) - 1 1 0 INDEX if writing 0 -*/ - -`define DRIVE_REG_DIRTN 0 -`define DRIVE_REG_CSTIN 1 -`define DRIVE_REG_STEP 2 -`define DRIVE_REG_WRTPRT 3 -`define DRIVE_REG_MOTORON 4 -`define DRIVE_REG_TK0 5 -`define DRIVE_REG_EJECT 6 -`define DRIVE_REG_TACH 7 -`define DRIVE_REG_RDDATA0 8 -`define DRIVE_REG_RDDATA1 9 -`define DRIVE_REG_SUPERDR 10 -`define DRIVE_REG_UNUSED 11 -`define DRIVE_REG_SIDES 12 -`define DRIVE_REG_READY 13 -`define DRIVE_REG_INSTALLED 14 -`define DRIVE_REG_HSHK_HD 15 - -`define FIRMWARE_VERSION_NUMBER 11 - -module floppyemu( - input clk, - - // Macintosh interface - input ca0, // PH0 - input ca1, // PH1 - input ca2, // PH2 - input lstrb, // PH3 - input SEL, // HDSEL from VIA - input _enable, - input wr, - input _wreq, - input pwm, // unused - output rd, - - // microcontroller interface - input _rst, - - output stepDirectionMotorOn, - output reg stepRequest, - input stepAck_diskInserted, - - output _wreqMCU, - output reg rdAckWrTick, - output reg driveCurrentSide, - output reg ejectRequest, - - input driveTach, - input byteReady_tk0, - - input outputEnable, - inout [6:0] data, - - output zero, - - // status display - output led, - - // debugging - output test -); - - /********** drive state data **********/ - reg _driveRegTK0; - reg _driveRegMotorOn; - reg driveRegStepDirection; - reg _driveRegWriteProtect; - reg _driveRegDiskInserted; - reg _driveRegMFMMode; - - /********** serial to parallel interface **********/ - // GCR: One bit every 2 microseconds - // The exact rate on the Macintosh is actually 16 clocks @ 7.8336 MHz = 2.04 microseconds. - // MFM: One bit every 1 microsecond - reg [7:0] shifter; - reg [5:0] bitTimer; - reg [3:0] bitCounter; - reg [6:0] wrData; - reg rdHead; - reg [1:0] wrHistory; - reg mfmWriteSynced; - reg wrClear; - - always @(posedge clk) begin - wrHistory <= { wrHistory[0], wr }; - end - - always @(posedge clk or negedge _rst) begin - if (_rst == 0) begin - rdAckWrTick <= 0; - _driveRegWriteProtect <= 1; - _driveRegDiskInserted <= 1; - _driveRegMFMMode <= 1; - wrData <= `FIRMWARE_VERSION_NUMBER; - mfmWriteSynced <= 0; - wrClear <= 0; - end - else begin - // one-way switch for disk inserted register - until next reset, stepAck_diskInserted will act only as stepAck - if (_driveRegDiskInserted == 1 && stepAck_diskInserted == 0) begin - _driveRegDiskInserted <= 0; - end - // is the Macintosh currently writing to the disk? - if (_wreq == 0) begin - // was there a transition on the wr line? - // GCR: any transition - // MFM: falling edge - if (((wrHistory[1] != wrHistory[0]) && (_driveRegMFMMode == 1)) || - ((wrHistory[1] && ~wrHistory[0]) && (_driveRegMFMMode == 0))) begin - // has at least half a bit cell time elpased since the last cell boundary? - if ((bitTimer >= 20 && _driveRegMFMMode == 1) || - (bitTimer >= 10 && _driveRegMFMMode == 0)) begin - shifter <= { shifter[6:0], 1'b1 }; - bitCounter <= bitCounter - 1'b1; - end - // do nothing if the clock count was less than half a cell - - // reset the bit timer - bitTimer <= 0; - end - else begin - // have one and a half bit cell times elapsed? - if ((bitTimer >= 60 && _driveRegMFMMode == 1) || - (bitTimer >= 30 && _driveRegMFMMode == 0)) begin - shifter <= { shifter[6:0], 1'b0 }; - bitCounter <= bitCounter - 1'b1; - - if (_driveRegMFMMode == 1) - bitTimer <= 20; - else - bitTimer <= 10; - end - else begin - // init shifter at the beginning of a write, so we can recognize the framing bits later - if (wrClear == 0) begin - shifter <= 0; - wrClear <= 1; - end - // has a complete byte been shifted in? - else if (_driveRegMFMMode == 1) begin - // GCR - if (shifter[7] == 1) begin - // GCR: The complete byte is shifter[7:0], but only 7 bits are stored in wrData, since the MSB is always 1. - wrData <= shifter[6:0]; // store the byte for the mcu - shifter <= 0; // clear the byte from the shifter - rdAckWrTick <= ~rdAckWrTick; // signal the mcu that a new byte is ready - end - end - else begin - // MFM - // If we're in write mode, but haven't yet synched (framed the bytes in the bit stream), - // and we see 01000100 in the shifter, assume that it's the first half of an A1 sync - if ((bitCounter == 0) || - (shifter == 8'h44 && mfmWriteSynced == 0)) begin - // MFM: send the mcu the data nibble in the low 4 bits, and clock bit C2 in bit 4 - wrData[0] <= shifter[0]; - wrData[1] <= shifter[2]; - wrData[2] <= shifter[4]; - wrData[3] <= shifter[6]; - wrData[4] <= shifter[5]; // clock bit - bitCounter <= 8; - - rdAckWrTick <= (shifter == 8'h44 && mfmWriteSynced == 0) ? 0 : ~rdAckWrTick; // signal the mcu that a new nibble is ready - mfmWriteSynced <= mfmWriteSynced | (shifter == 8'h44); - end - end - - bitTimer <= bitTimer + 1'b1; - end - end - end - else begin - mfmWriteSynced <= 0; - wrClear <= 0; - // is it time for a new bit? - if ((bitTimer == 40 && _driveRegMFMMode == 1) || - (bitTimer == 20 && _driveRegMFMMode == 0)) - begin - // are all the bits done? - if (bitCounter == 0) begin - // is there a new byte ready to read? - if (byteReady_tk0 == 1) begin - // if there's a byte ready, but no disk inserted, then load config options from the MCU - if (_driveRegDiskInserted == 1) begin - _driveRegWriteProtect <= data[0]; - _driveRegMFMMode <= data[1]; - end - else begin - // load the new byte. - if (_driveRegMFMMode == 1) begin - // Only 7 bits are transferred, since the MSB is always 1. - shifter <= { 1'b1, data }; - end - else begin - // For MFM, the 7 bits received from the MCU are: - // 0 0 m d3 d2 d1 d0 - // From this we can constuct the MFM-encoded byte with clock and data bits: - // c3 d3 c2 d2 c1 d1 c0 d0 - // where cN = dN+1 NOR dN. - // If m is 1, then this is part of a mark byte, and c2 should be forced to 0. - shifter[7] <= ~(shifter[7] | data[3]); - shifter[6] <= data[3]; - shifter[5] <= ~(data[3] | data[2]) & ~data[4]; - shifter[4] <= data[2]; - shifter[3] <= ~(data[2] | data[1]); - shifter[2] <= data[1]; - shifter[1] <= ~(data[1] | data[0]); - shifter[0] <= data[0]; - end - bitCounter <= 7; - rdAckWrTick <= 1; - end - end - else begin - // insert a sync byte - if (_driveRegMFMMode == 1) - begin - shifter <= { 8'b11111111 }; - bitCounter <= 9; // sync "byte" sends 10 bits rather than 8 - end - else begin - shifter <= { 8'b10101010 }; // logical 0x0, encoded 0xA. Should sync byte be 0x4E instead? - bitCounter <= 7; - end - end - end - else begin - if (bitCounter == 7) begin - // Clear rdAck after the first bit is done. This gives the microcontroller 2 microseconds - // to react to rdAck before it's deasserted. - rdAckWrTick <= 0; - end - - // there are still more bits remaining, so shift the next bit - shifter <= { shifter[6:0], 1'b0 }; // left shift - bitCounter <= bitCounter - 1'b1; - end - end - /* GCR: After the bit shift is completed, update the read head state, using the MSB of the shift register. - A logical 1 is sent as a falling (high to low) transition on the read head at a bit cell boundary time, - a logical 0 is sent as no falling transition. */ - else if (bitTimer == 2 && shifter[7] == 1 && _driveRegMFMMode == 1) begin - rdHead <= 1'b0; - end - /* GCR: Half-way through the bit cell time, set the read head to 1 - to prepare for a possible falling transition for the next bit. */ - else if (bitTimer == 20 && _driveRegMFMMode == 1) - begin - rdHead <= 1'b1; - end - /* MFM: At the start of the bit cell time, set the read head to 0 if the logical value is 1. */ - else if (bitTimer == 2 && shifter[7] == 1 && _driveRegMFMMode == 0) - begin - rdHead <= 1'b0; - end - /* MFM: About a quarter-way through the bit cell time, always reset read head to 1. */ - else if (bitTimer == 7 && _driveRegMFMMode == 0) - begin - rdHead <= 1'b1; - end - - // increment bit timer modulo 40 (20 MFM) - if ((bitTimer == 40 && _driveRegMFMMode == 1) || - (bitTimer == 20 && _driveRegMFMMode == 0)) - bitTimer <= 0; - else - bitTimer <= bitTimer + 1'b1; - end - end - end - - // enable the data output only if the MCU says its data lines are Hi Z - assign data = (outputEnable == 1) ? wrData : 7'hZZ; - - /********** register read **********/ - wire [3:0] driveReadRegisterSelect = {ca2,ca1,ca0,SEL}; - - reg registerContents; - always @* begin - case (driveReadRegisterSelect) - `DRIVE_REG_DIRTN: - registerContents = driveRegStepDirection; // step direction - `DRIVE_REG_CSTIN: - registerContents = _driveRegDiskInserted; // disk in drive, 0 = yes - `DRIVE_REG_STEP: - registerContents = ~stepRequest; // STEP, 1 = complete - `DRIVE_REG_WRTPRT: - registerContents = _driveRegWriteProtect; // write protect, 0 = on, 1 = off - `DRIVE_REG_MOTORON: - registerContents = _driveRegMotorOn; // 0 = motor on - `DRIVE_REG_TK0: - registerContents = _driveRegTK0; // TK0: track 0 indicator - `DRIVE_REG_EJECT: - registerContents = 1'b0; // disk switched? - `DRIVE_REG_TACH: - registerContents = driveTach; // TACH: 60 pulses for each rotation of the drive motor - `DRIVE_REG_RDDATA0: - registerContents = rdHead; // RDDATA0 - `DRIVE_REG_RDDATA1: - registerContents = rdHead; // RDDATA1 - `DRIVE_REG_SUPERDR: - registerContents = 1'b1; // SUPERDR, 1 = yes - `DRIVE_REG_UNUSED: - registerContents = 1'b0; // UNUSED - `DRIVE_REG_SIDES: - registerContents = 1'b1; // SIDES = double-sided drive - `DRIVE_REG_READY: - registerContents = 1'b0; // READY = yes - `DRIVE_REG_INSTALLED: - registerContents = 1'b0; // INSTALLED = yes - `DRIVE_REG_HSHK_HD: - registerContents = _driveRegMFMMode; // HSHK_HD = implements ready handshake, or DD/HD media - - endcase - end - assign rd = _enable == 1'b1 ? 1'bZ : registerContents; - - always @(posedge clk or negedge _rst) begin - if (_rst == 0) begin - driveCurrentSide = 0; - end - else if (_enable == 1'b0 && lstrb == 1'b0) begin - if (driveReadRegisterSelect == `DRIVE_REG_RDDATA0) - driveCurrentSide = 0; - else if (driveReadRegisterSelect == `DRIVE_REG_RDDATA1) - driveCurrentSide = 1; - end - end - - // compute the effective _wreq state for the microcontroller - assign _wreqMCU = ~(_wreq == 0 && _enable == 0 && _driveRegMotorOn == 0); - - // cheesy: during a step request, stepDirectionMotorOn is the step direction. Otherwise it's motorOn. - assign stepDirectionMotorOn = stepRequest ? driveRegStepDirection : _driveRegMotorOn; - - /********** register write **********/ - wire [2:0] driveWriteRegisterSelect = {ca1,ca0,SEL}; - - reg [4:0] lstrbHistory; - always @(posedge clk) begin - lstrbHistory <= { lstrbHistory[3:0], lstrb }; - end - - always @(posedge clk or negedge _rst) begin - if (_rst == 1'b0) begin - _driveRegTK0 <= 0; - _driveRegMotorOn <= 1; - driveRegStepDirection <= 0; - stepRequest <= 0; - ejectRequest <= 0; - end - // was there a rising edge on lstrb? - else if (_enable == 1'b0 && lstrbHistory == 5'b01111) begin - case (driveWriteRegisterSelect) - `DRIVE_REG_DIRTN: - driveRegStepDirection <= ca2; - //`DRIVE_REG_SWITCHED: // unused - `DRIVE_REG_STEP: - begin - stepRequest <= 1; // tell the microcontroller that a step was performed - end - `DRIVE_REG_MOTORON: - _driveRegMotorOn <= ca2; - `DRIVE_REG_EJECT: - if (ca2 == 1'b1) begin - ejectRequest <= 1; // tell the microcontroller that the disk was ejected. This stays on forever (until next reset) - end - endcase - end - else begin - // clear step request after mcu acknowledges it, and get the new track 0 state - if (stepRequest == 1 && stepAck_diskInserted == 1'b1) begin - stepRequest <= 0; - _driveRegTK0 <= byteReady_tk0; - end - end - end - - /********** Revision 1.0 board: status LEDs and fake SD writeProtect **********/ - assign led = _driveRegMotorOn; - assign zero = 0; - - -endmodule \ No newline at end of file diff --git a/arduino/CPLD-Xilinx/floppyemu.xise b/arduino/CPLD-Xilinx/floppyemu.xise deleted file mode 100755 index 0f0e6af..0000000 --- a/arduino/CPLD-Xilinx/floppyemu.xise +++ /dev/null @@ -1,210 +0,0 @@ - - - -

- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arduino/CPLD-Xilinx/testbench.v b/arduino/CPLD-Xilinx/testbench.v deleted file mode 100755 index 55613ed..0000000 --- a/arduino/CPLD-Xilinx/testbench.v +++ /dev/null @@ -1,163 +0,0 @@ -`timescale 1ns / 1ps - -//////////////////////////////////////////////////////////////////////////////// -// Company: -// Engineer: -// -// Create Date: 15:13:07 11/30/2011 -// Design Name: floppyemu -// Module Name: C:/Users/steve/Documents/floppyemu/CPLD-Xilinx/testbench.v -// Project Name: floppyemu -// Target Device: -// Tool versions: -// Description: -// -// Verilog Test Fixture created by ISE for module: floppyemu -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -//////////////////////////////////////////////////////////////////////////////// - -module testbench; - - // Inputs - reg clk; - reg wr; - - // Outputs - wire [7:0] wrData; - wire rdAckWrByte; - - // Instantiate the Unit Under Test (UUT) - floppyemu uut ( - .clk(clk), - .wr(wr), - .wrData(wrData), - .rdAckWrByte(rdAckWrByte) - ); - - initial begin - clk = 0; - end - - always begin - #70 clk = 1; - #70 clk = 0; - end - - initial begin - // Initialize Inputs - wr = 0; - - // Wait 100 ns for global reset to finish - #4000; - - // send 10-bit sync byte - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 ; - - // send 10-bit sync byte - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 ; - - // send 10-bit sync byte - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 ; - - // send 10-bit sync byte - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 ; - - // send 10-bit sync byte - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 ; - - // D5 = 1101 0101 - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - - // AA = 1010 1010 - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 ; - - // 96 = 1001 0110 - #2000 wr = ~wr; - #2000 ; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - - // 96 = 1001 0110 - #2000 wr = ~wr; - #2000 ; - #2000 ; - #2000 wr = ~wr; - #2000 ; - #2000 wr = ~wr; - #2000 wr = ~wr; - #2000 ; - - $stop; - end - -endmodule - diff --git a/arduino/eagle/floppyemu 1.1.1/board-layout.png b/arduino/eagle/floppyemu 1.1.1/board-layout.png deleted file mode 100755 index b0e7ed3328872d53a8f5c12503308a6c8f530597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143187 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

@Cu%9FHGRV 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

6@8?zs~zO$T> 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 ZFA?8vyX}HsD2@XDgQ@5!mn&KZ{~wk}Zwvqc diff --git a/arduino/eagle/floppyemu 1.1.1/board-schematic.png b/arduino/eagle/floppyemu 1.1.1/board-schematic.png deleted file mode 100755 index a4f1df8f10edcf6957b3d95d850ebcc9aeb967cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65454 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 diff --git a/arduino/eagle/floppyemu 1.1.1/floppyemu.brd b/arduino/eagle/floppyemu 1.1.1/floppyemu.brd deleted file mode 100755 index bfd9c7e..0000000 --- a/arduino/eagle/floppyemu 1.1.1/floppyemu.brd +++ /dev/null @@ -1,4669 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -PREV -SELECT -NEXT -RESET -STATUS -ISP -LCD1 -LCD2 -CPLD -AVR -244 -X1 -R4 -R1 -R3 -C12 -C13 -C11 -1117 -MACINTOSH FLOPPY EMU -VERSION 1.2 -WWW.BIGMESSOWIRES.COM -3V3 -LED -CE -RST -D/C -MOSI -SCLK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -POWER -R5 -C10 -C8 -IC1 -IC2 -IC3 -IC4 -J1 -J2 -J3 -C2 -C1 -C3 -C9 -C4 -C6 -C5 -C7 -U1 -SD Card -DESIGNED AND PRODUCED BY -LIGHT - - - - - - - - - - - -Extra-long pads for easier hand soldering - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -Extra-long pads for easier hand soldering - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>SUB-D</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -1 -10 -11 -19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - -Omron B3FS SMD tactile switch - - - - - - - - - -> Name - - -<b>Shrink Small Outline Package</b><p> -package type SS - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - -<b>CONNECTOR</b><p> -series 057 contact pc board low profile headers<p> -straight - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - -<b>CHIPLED</b><p> -Source: http://www.osram.convergy.de/ ... LG_R971.pdf - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - -<b>Smal Outline Transistor</b> - - - - - - - - ->NAME ->VALUE - - - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find anything that moves- switches, relays, buttons, potentiometers. Also, anything that goes on a board but isn't electrical in nature- screws, standoffs, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - -<b>Stand Off</b><p> -This is the mechanical footprint for a #4 phillips button head screw. Use the keepout ring to avoid running the screw head into surrounding components. SKU : PRT-00447 - - - - - - - - - - -<b>Test Pins/Pads</b><p> -Cream on SMD OFF.<br> -new: Attribute TP_SIGNAL_NAME<br> -<author>Created by librarian@cadsoft.de</author> - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - - - - - - - - - - - - - ->NAME ->VALUE - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - -1/6W Thru-hole Resistor - *UNPROVEN* - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - -<b>EAGLE Design Rules</b> -<p> -Die Standard-Design-Rules sind so gewählt, dass sie für -die meisten Anwendungen passen. Sollte ihre Platine -besondere Anforderungen haben, treffen Sie die erforderlichen -Einstellungen hier und speichern die Design Rules unter -einem neuen Namen ab. -<b>Smart Prototyping Design Rules</b> -<p> -http://smart-prototyping.com/index.php?route=product/product&product_id=142 -<b>NOA-Labs EAGLE Design Rules</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arduino/eagle/floppyemu 1.1.1/floppyemu.sch b/arduino/eagle/floppyemu 1.1.1/floppyemu.sch deleted file mode 100755 index 68478da..0000000 --- a/arduino/eagle/floppyemu 1.1.1/floppyemu.sch +++ /dev/null @@ -1,7254 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Extra-long pads for easier hand soldering - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -Extra-long pads for easier hand soldering - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>SUB-D</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -1 -10 -11 -19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - -Omron B3FS SMD tactile switch - - - - - - - - - -> Name - - -<b>Shrink Small Outline Package</b><p> -package type SS - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - -<b>CONNECTOR</b><p> -series 057 contact pc board low profile headers<p> -straight - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - ->VALUE ->NAME - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - ->NAME -VCC_INT -GND -VCC_IO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -MOSI -RESET -SCK -MISO -VCC -GND - - - - - - - - - - - - - - - ->NAME - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - ->NAME -GND -VCC - - - - - - - - - - - - - - - - - - - - - - -SD & MMC - - - - -<b>8-bit Microcontroller</b> with 128K Bytes In-System Programmable Flash<p> -Source: http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>SUB-D</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>AVR ISP 6 Pin - Locking Pins</b> -This is the reduced ISP connector for AVR programming. Common on Arduino. This footprint will take up less PCB space and can be used with a 10-pin to 6-pin adapter such as SKU: BOB-08508 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Omron B3FS-10XX SMD tactile switch - - - - - - - - - - - - - - - - - - -<b>MEMORY</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>SD MMC Card holder</b> -<p> -4UCON part #06132 - easy to solder - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -JST crimp connector: 1mm pitch, top entry - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - ->Name ->Value - - - - - - - - - ->Name ->Value - - - - - - ->NAME ->VALUE - - - - - - - - ->Name ->Value - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - ->NAME ->VALUE - - - - - -<b>CAPACITOR</b><p> -chip - - - - - - - - - ->NAME ->VALUE - - - - - - - - ->Name ->Value - - - - - - - - - - - - ->Name ->Value - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - ->NAME ->VALUE - - - - - -CTZ3 Series land pattern for variable capacitor - CTZ3E-50C-W1-PF - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->Name ->Value - - -<b>RESISTOR</b><p> -chip - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - ->NAME ->VALUE - - - - - - -<b>CAPACITOR</b><p> -chip - - - - - - - - ->NAME ->VALUE - - - - - - -1/6W Thru-hole Resistor - *UNPROVEN* - - - - - - ->NAME ->VALUE - - - - - - ->NAME ->VALUE - - - - -1/4W Resistor, 0.4" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -1/2W Resistor, 0.5" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -1W Resistor, 0.6" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -2W Resistor, 0.8" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - - - - - - - - - - - ->Name ->Value - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - -<b>Header 8</b> -Standard 8-pin 0.1" header. Use with straight break away headers (SKU : PRT-00116), right angle break away headers (PRT-00553), swiss pins (PRT-00743), machine pins (PRT-00117), and female headers (PRT-00115). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>Capacitor</b> -Standard 0603 ceramic capacitor, and 0.1" leaded capacitor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>Resistor</b> -Basic schematic elements and footprints for 0603, 1206, and PTH resistors. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - ->NAME ->VALUE - - - - - - -Low cost SMT crystals, no capacitors included -<p>http://www.ladyada.net/library/eagle</p> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE - - - - - ->VALUE - - - - - ->VALUE - - - - - -<b>SUPPLY SYMBOL</b> - - - - - - - - - - - - -<b>SUPPLY SYMBOL</b> - - - - - - - - - - - - -<b>SUPPLY SYMBOL</b> - - - - - - - - - - - - - - - - -<b>CHICAGO MINIATURE LAMP, INC.</b><p> -7022X Series SMT LEDs 1206 Package Size - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - -<B>LED</B><p> -5 mm, square, Siemens - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - -<B>LED</B><p> -2 x 5 mm, rectangle - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - -<B>LED</B><p> -3 mm, round - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<B>LED</B><p> -5 mm, round - - - - - - - - - - - ->NAME ->VALUE - - -<B>LED</B><p> -1 mm, round, Siemens - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - -<B>LED BLOCK</B><p> -1 LED, Siemens - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - -<b>LED HOLDER</b><p> -Siemens - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<b>LED HOLDER</b><p> -Siemens - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<b>LED HOLDER</b><p> -Siemens - - - - - - - - - - - - - - - - - -A+ -K- ->NAME ->VALUE - - - - - -<b>LED HOLDER</b><p> -Siemens - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -+ -- - - -<B>IR LED</B><p> -infrared emitting diode, Infineon -TO-18, lead spacing 2.54 mm, cathode marking<p> -Inifineon - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<B>IR LED</B><p> -infrared emitting diode, Infineon -TO-18, lead spacing 2.54 mm, cathode marking<p> -Inifineon - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<B>LED</B><p> -rectangle, 5.7 x 3.2 mm - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<B>IR LED</B><p> -IR transmitter Siemens - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -<b>TOPLED® High-optical Power LED (HOP)</b><p> -Source: http://www.osram.convergy.de/ ... ls_t675.pdf - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -A -C - - - - - - - -<b>BLUE LINETM Hyper Mini TOPLED® Hyper-Bright LED</b><p> -Source: http://www.osram.convergy.de/ ... LB M676.pdf - - - - - - - - - - - - - - -A -C ->NAME ->VALUE - - - - - - - -<b>Super SIDELED® High-Current LED</b><p> -LG A672, LP A672 <br> -Source: http://www.osram.convergy.de/ ... LG_LP_A672.pdf (2004.05.13) - - - - - - - - - - - - - - - - - - - -C -A ->NAME ->VALUE - - - - - - - -<b>SmartLEDTM Hyper-Bright LED</b><p> -Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY L896.pdf - - - - - - - - ->NAME ->VALUE - - - - - -<b>Hyper TOPLED® RG Hyper-Bright LED</b><p> -Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY T776.pdf - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -A -C - - - - - - - - - - -<b>Hyper Micro SIDELED®</b><p> -Source: http://www.osram.convergy.de/ ... LA_LO_LS_LY Y876.pdf - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - -<b>Power TOPLED®</b><p> -Source: http://www.osram.convergy.de/ ... LA_LO_LA_LY E67B.pdf - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE -C -A -C -C - - - - - - - - - - - -<b>Hyper CHIPLED Hyper-Bright LED</b><p> -LB Q993<br> -Source: http://www.osram.convergy.de/ ... Lb_q993.pdf - - - - ->NAME ->VALUE - - - - - - - -<b>Hyper CHIPLED Hyper-Bright LED</b><p> -LB R99A<br> -Source: http://www.osram.convergy.de/ ... lb_r99a.pdf - - - - ->NAME ->VALUE - - - - - - - -<b>Mini TOPLED Santana®</b><p> -Source: http://www.osram.convergy.de/ ... LG M470.pdf - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - -<b>CHIPLED</b><p> -Source: http://www.osram.convergy.de/ ... LG_R971.pdf - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - -<b>CHIPLED</b><p> -Source: http://www.osram.convergy.de/ ... LG_LY N971.pdf - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - -<b>CHIPLED</b><p> -Source: http://www.osram.convergy.de/ ... LG_LY Q971.pdf - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - -<b>CHIPLED-0603</b><p> -Recommended Solder Pad useable for SmartLEDTM and Chipled - Package 0603<br> -Package able to withstand TTW-soldering heat<br> -Package suitable for TTW-soldering<br> -Source: http://www.osram.convergy.de/ ... LO_LS_LY L89K.pdf - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - -<b>SmartLED TTW</b><p> -Recommended Solder Pad useable for SmartLEDTM and Chipled - Package 0603<br> -Package able to withstand TTW-soldering heat<br> -Package suitable for TTW-soldering<br> -Source: http://www.osram.convergy.de/ ... LO_LS_LY L89K.pdf - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - -<b>Lumileds Lighting. LUXEON®</b> with cool pad<p> -Source: K2.pdf - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>Lumileds Lighting. LUXEON®</b> without cool pad<p> -Source: K2.pdf - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - -<B>LED</B><p> -10 mm, round - - - - - - - - - - - - - ->NAME ->VALUE - - -<b>SURFACE MOUNT LED LAMP</b> 3.5x2.8mm<p> -Source: http://www.kingbright.com/manager/upload/pdf/KA-3528ASYC(Ver1189474662.1) - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - -<b>LED</b><p> -<u>OSRAM</u>:<br> - -- <u>CHIPLED</u><br> -LG R971, LG N971, LY N971, LG Q971, LY Q971, LO R971, LY R971 -LH N974, LH R974<br> -LS Q976, LO Q976, LY Q976<br> -LO Q996<br> - -- <u>Hyper CHIPLED</u><br> -LW Q18S<br> -LB Q993, LB Q99A, LB R99A<br> - -- <u>SideLED</u><br> -LS A670, LO A670, LY A670, LG A670, LP A670<br> -LB A673, LV A673, LT A673, LW A673<br> -LH A674<br> -LY A675<br> -LS A676, LA A676, LO A676, LY A676, LW A676<br> -LS A679, LY A679, LG A679<br> - -- <u>Hyper Micro SIDELED®</u><br> -LS Y876, LA Y876, LO Y876, LY Y876<br> -LT Y87S<br> - -- <u>SmartLED</u><br> -LW L88C, LW L88S<br> -LB L89C, LB L89S, LG L890<br> -LS L89K, LO L89K, LY L89K<br> -LS L896, LA L896, LO L896, LY L896<br> - -- <u>TOPLED</u><br> -LS T670, LO T670, LY T670, LG T670, LP T670<br> -LSG T670, LSP T670, LSY T670, LOP T670, LYG T670<br> -LG T671, LOG T671, LSG T671<br> -LB T673, LV T673, LT T673, LW T673<br> -LH T674<br> -LS T676, LA T676, LO T676, LY T676, LB T676, LH T676, LSB T676, LW T676<br> -LB T67C, LV T67C, LT T67C, LS T67K, LO T67K, LY T67K, LW E67C<br> -LS E67B, LA E67B, LO E67B, LY E67B, LB E67C, LV E67C, LT E67C<br> -LW T67C<br> -LS T679, LY T679, LG T679<br> -LS T770, LO T770, LY T770, LG T770, LP T770<br> -LB T773, LV T773, LT T773, LW T773<br> -LH T774<br> -LS E675, LA E675, LY E675, LS T675<br> -LS T776, LA T776, LO T776, LY T776, LB T776<br> -LHGB T686<br> -LT T68C, LB T68C<br> - -- <u>Hyper Mini TOPLED®</u><br> -LB M676<br> - -- <u>Mini TOPLED Santana®</u><br> -LG M470<br> -LS M47K, LO M47K, LY M47K -<p> -Source: http://www.osram.convergy.de<p> - -<u>LUXEON:</u><br> -- <u>LUMILED®</u><br> -LXK2-PW12-R00, LXK2-PW12-S00, LXK2-PW14-U00, LXK2-PW14-V00<br> -LXK2-PM12-R00, LXK2-PM12-S00, LXK2-PM14-U00<br> -LXK2-PE12-Q00, LXK2-PE12-R00, LXK2-PE12-S00, LXK2-PE14-T00, LXK2-PE14-U00<br> -LXK2-PB12-K00, LXK2-PB12-L00, LXK2-PB12-M00, LXK2-PB14-N00, LXK2-PB14-P00, LXK2-PB14-Q00<br> -LXK2-PR12-L00, LXK2-PR12-M00, LXK2-PR14-Q00, LXK2-PR14-R00<br> -LXK2-PD12-Q00, LXK2-PD12-R00, LXK2-PD12-S00<br> -LXK2-PH12-R00, LXK2-PH12-S00<br> -LXK2-PL12-P00, LXK2-PL12-Q00, LXK2-PL12-R00 -<p> -Source: www.luxeon.com<p> - -<u>KINGBRIGHT:</U><p> -KA-3528ASYC<br> -Source: www.kingbright.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<b>Smal Outline Transistor</b> - - - - - - - - ->NAME ->VALUE - - - - - - -<b>DPAC</b> - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - ->NAME ->VALUE - - - - - - - -<b>800mA and 1A Low Dropout (LDO) Positive Regulator</b><p> -1.8V, 2.5V, 2.85V, 3.3V, 5V, and Adj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - -2mm SMD side-entry connector. tDocu layer indicates the actual physical plastic housing. +/- indicate SparkFun standard batteries and wiring. - - - - - - - - - - - - - ->Name ->Value -+ -- - - - - - - - - - - - - - - - - - - - - - - - - - ->Name ->Value - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - -This footprint was designed to help hold the alignment of a through-hole component (i.e. 6-pin header) while soldering it into place. -You may notice that each hole has been shifted either up or down by 0.005 of an inch from it's more standard position (which is a perfectly straight line). -This slight alteration caused the pins (the squares in the middle) to touch the edges of the holes. Because they are alternating, it causes a "brace" -to hold the component in place. 0.005 has proven to be the perfect amount of "off-center" position when using our standard breakaway headers. -Although looks a little odd when you look at the bare footprint, once you have a header in there, the alteration is very hard to notice. Also, -if you push a header all the way into place, it is covered up entirely on the bottom side. This idea of altering the position of holes to aid alignment -will be further integrated into the Sparkfun Library for other footprints. It can help hold any component with 3 or more connection pins. - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - ->Name ->Value -+ -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - ->Name ->Value -+ -- - - -<H3>JST-2-PTH-KIT</h3> -2-Pin JST, through-hole connector<br> -<br> -<b>Warning:</b> This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side. - - - - - - - - - ->Name ->Value -+ -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->VALUE ->NAME - - - - - - -Standard 2-pin 0.1" header. Use with <br> -- straight break away headers ( PRT-00116)<br> -- right angle break away headers (PRT-00553)<br> -- swiss pins (PRT-00743)<br> -- machine pins (PRT-00117)<br> -- female headers (PRT-00115)<br><br> - - Molex polarized connector foot print use with: PRT-08233 with associated crimp pins and housings.<br><br> - -2.54_SCREWTERM for use with PRT-10571.<br><br> - -3.5mm Screw Terminal footprints for PRT-08084<br><br> - -5mm Screw Terminal footprints for use with PRT-08433 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find anything that moves- switches, relays, buttons, potentiometers. Also, anything that goes on a board but isn't electrical in nature- screws, standoffs, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - -<b>Stand Off</b><p> -This is the mechanical footprint for a #4 phillips button head screw. Use the keepout ring to avoid running the screw head into surrounding components. SKU : PRT-00447 - - - - - - - - -<b>Stand Off</b><p> -This is the mechanical footprint for a #4 phillips button head screw. Use the keepout ring to avoid running the screw head into surrounding components. SKU : PRT-00447 - - - - - - - - - - - - - - - -<b>#4 Stand Off</b><p> -This is the mechanical footprint for a #4 phillips button head screw. Use the keepout ring to avoid running the screw head into surrounding components. SKU : PRT-00447 - - - - - - - - - - - - - - - - - - - -<b>Test Pins/Pads</b><p> -Cream on SMD OFF.<br> -new: Attribute TP_SIGNAL_NAME<br> -<author>Created by librarian@cadsoft.de</author> - - -<b>TEST PAD</b> - - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - - - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - -<b>TEST PAD</b> - ->NAME ->VALUE ->TP_SIGNAL_NAME - - - - - - - - - - - - - - - - - - - - - - - ->NAME ->TP_SIGNAL_NAME - - - - - - -<b>TEST PIN</b> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - - - ->NAME ->VALUE - - - - - - - - -47uF Tantalum SMT<br> -CAP-08310- 10V 10% (EIA-3528) - - - - - - - - - - - - - - - - - - - - - -<h3>SparkFun Electronics' preferred foot prints</h3> -In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> -We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. -<br><br> -<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. - - -1/6W Thru-hole Resistor - *UNPROVEN* - - - - - - ->NAME ->VALUE - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - - - - - - ->Name ->Value - - -<b>RESISTOR</b><p> -chip - - - - - - - - - - ->NAME ->VALUE - - - - - - - - ->NAME ->VALUE - - - - - - - - - - ->NAME ->VALUE - - - - - - - - - - ->NAME ->VALUE - - - - -1/4W Resistor, 0.4" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -1/2W Resistor, 0.5" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -1W Resistor, 0.6" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -2W Resistor, 0.8" wide<p> - -Yageo CFR series <a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf">http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf</a> - - - - - - ->Name ->Value - - -<h3>AXIAL-0.3-KIT</h3> - -Commonly used for 1/4W through-hole resistors. 0.3" pitch between holes.<br> -<br> - -<b>Warning:</b> This is the KIT version of the AXIAL-0.3 package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side. - - - - - - - - - - ->Name ->Value - - - - - - - - - - - - - - - - - - - - - - - - - - -This is the "EZ" version of the standard .3" spaced resistor package.<br> -It has a reduced top mask to make it harder to install upside-down. - - - - - - - - - - ->Name ->Value - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - - - - - -<b>Resistor</b> -Basic schematic elements and footprints for 0603, 1206, and PTH resistors. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arduino/eagle/floppyemu 1.1.1/gerbers.zip b/arduino/eagle/floppyemu 1.1.1/gerbers.zip deleted file mode 100755 index 840a7aa76bc45517c02f16a1ce0a81b4afdb93cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131158 zcmaI72Ut^Gvj!?6pwg@mq(nt5^nlU{BA=iFV#Ux)R6qztgb+wTML@bJO=%(mB3(ic zp(pgJA=Cf?LJuSm2%+4l=Rg1X&$;(L&k9+4X4cHCdDq_T{qB`JhMWgZ?Ay2R;68U` zte)v+`vok=zI~hr_U+?mOP{*9xw|8tz`W!iKX=OiQ13RRcmhYgu`NjLyI5-=pD+1B_V%^RN= zzsm3BGSB7jI4e=S>ZoNdaz+YMF>)w>JmmXj9 z!S|F+ixZrse1w3*vG28F>tkTz%#8BNR_7OvbzeNMiMt3%4>{co3wtwke&oa9qPL(5 z)*FA3p0uIS&DN_<`$g^e);A=5z#4bMYkl}{JBG@h%1%GFEQu(PmS)0E*CkEP8x)Qep%sa%r|Q0P(p#VK@Y)W& zzF8~zkxOx5A4NFl+{;3_#H>YbEwnAptzPTpRMq#;@`?=Sv$|JyIbIbERXgQ4(L>yo zGrdnr^;os+txtKoRj5ur0W=RJ+Fv+}$4D+rg9YXTR4rlW=Z! zJHmUX^xNngd*T6xbA{EAtz~>PV0YJI(;2eI3O~EL2m6|^qPb_M^R;%*`wSxBlta>* zQzAoe!X*7?)u$I9RKMq}p<6xk7<$=2A)4l%s}7%ZdFg#z>~n)FvL0!DIhU?qn@l$x z`Is#5{^Q}c3F|kyEvLR;aj6Zt(C^Z)x(BN^#VpPa_q1Y=fAYrgf(}pG0sJ)o%|7*pvdk$(`8`i|DA% z=g^1UR@R7^&Oq6&W-cvj7GzXYzscp4Dx3Dr{5%`Qu`c&3bzcVP#+5U2kq^y(_(VHN zOL6K$(?%?5VwoehU?2JWU3HJnQq)iDV`4@ul>{>nc%H+=AB)FpeT-M*z(M2ougKFk zkDO(hV@$?RNmpLJ zydv%P851Kbn>V6V0@^INg=it43#`_HI42wxpcg~g!j zJPtY;18AE*~+I@p9J!VxMPHM{}jmd+*QdgVXa8 zco%|-Bsh{DP_;ZOU6#?cxu+9&b3=>vd!2Y6U7Dc{4%aT`V0)WOG{>Xn4Q`dsReB*cPYm@fS)dQV>*APF;moa zkc#w)gayraf--_rE%PwqQzx5tqUy2%uejo}TeC`gMV;?ga=F@+2<6B5xzyzRb0dVr!0lbX1PM08|ht!Era;2A%XV7ws7CPq?K{;Zqp_CNBY zYT?^e%p>Y>`uVN8&ca!KJkK{9fXv;slf*Jn@;YW59yG8M3VD)Lk20XBI}XRg%wT*j z!^a#>iwd|52T7GdmHi(LX3gCh`&#+Wa9JMe=->_8VR<8$9O$sT%MX6I%kcZNk;+45 zyrM1xUKbTSSaoGqfZ?Un3C`7x-U7rj-h~Ge#IkUUV^FR(8Jc)m<}CzQTW(4*bU6O! zR5c&_QnN&4_e*oK*AKD-7U%Po!EQqSh(Jj`Kmg-)tknr$|n)Y^lK~udZwqfZ{1z5|TTW5Nj>V zNKo0L5u?0F9u~I7y($^7T$J9hDSjW!LRK5))RZCyvzU%t zo_UWr$nIQ0!{RRVmOUK1K5U9$YvQ=ju!m23${r408#aA%ge`c;7G$w41`UQyy$%eO zeK%xlQv%EK=g+e>A?dK(Dgl_quTaO~@5^lWUb1YHaJGF)WLf?kW2Kn;Kson{`O#5$ zQI=vE0asMium60y-rN*fgxhoLAvit_G�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

EWAhmu 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 QQTAw8=w}MuQ6cUA2m9OGdjJ3c diff --git a/arduino/firmware/readme.txt b/arduino/firmware/readme.txt deleted file mode 100755 index 8e480df..0000000 --- a/arduino/firmware/readme.txt +++ /dev/null @@ -1,24 +0,0 @@ -To update the Xilinx CPLD firmware: - -1. Copy firmware.xvf to the root directory of your SD card, and insert it into Floppy Emu. -2. Hold down the PREV and NEXT buttons. -3. Press and release the RESET button. -4. Follow the on-screen prompts. - - -To update the microcontroller application software: - -If you have the SD bootloader already installed: -1. Copy femu.bin to the root directory of your SD card, and insert it into Floppy Emu. -2. Hold down the PREV and SELECT buttons. -3. Press and release the RESET button. -4. Follow the on-screen prompts. - -If you don't have the SD bootloader installed: -1. Use your AVR ISP programmer to flash floppyemu.hex to the microcontroller. - -If you want to install the SD bootloader: -1. Use your AVR ISP programmer to flash merged.hex to the microcontroller. -2. Use the ISP programmer to set the BOOTRST fuse to 1 (on), and the BOOTSZ fuse to 2048W_F800. (Fuses should be Extended: 0xFF, High: 0xDA, Low: 0xBF) - - diff --git a/arduino/floppyemu/Release/Makefile b/arduino/floppyemu/Release/Makefile deleted file mode 100755 index c6ce998..0000000 --- a/arduino/floppyemu/Release/Makefile +++ /dev/null @@ -1,212 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -SHELL := /bin/csh -RM := rm -rf - -USER_OBJS := - -LIBS := -PROJ := - -O_SRCS := -C_SRCS := -S_SRCS := -S_UPPER_SRCS := -OBJ_SRCS := -ASM_SRCS := -PREPROCESSING_SRCS := -OBJS := -OBJS_AS_ARGS := -C_DEPS := -C_DEPS_AS_ARGS := -EXECUTABLES := -OUTPUT_FILE_PATH := -OUTPUT_FILE_PATH_AS_ARGS := -AVR_APP_PATH :=$$$AVR_APP_PATH$$$ -QUOTE := " -ADDITIONAL_DEPENDENCIES:= -OUTPUT_FILE_DEP:= - -# Every subdirectory with source files must be described here -SUBDIRS := - - -# Add inputs and outputs from these tool invocations to the build variables -C_SRCS += \ -../cardtest.cpp \ -../diskmenu.cpp \ -../floppyemu.cpp \ -../millitimer.cpp \ -../noklcd.cpp \ -../SdFat/Sd2Card.cpp \ -../SdFat/SdBaseFile.cpp \ -../SdFat/SdFat.cpp \ -../SdFat/SdVolume.cpp \ -../xsvf/lenval.cpp \ -../xsvf/micro.cpp \ -../xsvf/ports.cpp - - -PREPROCESSING_SRCS += - - -ASM_SRCS += - - -OBJS += \ -cardtest.o \ -diskmenu.o \ -floppyemu.o \ -millitimer.o \ -noklcd.o \ -Sd2Card.o \ -SdBaseFile.o \ -SdFat.o \ -SdVolume.o \ -lenval.o \ -micro.o \ -ports.o - - -OBJS_AS_ARGS += \ -cardtest.o \ -diskmenu.o \ -floppyemu.o \ -millitimer.o \ -noklcd.o \ -Sd2Card.o \ -SdBaseFile.o \ -SdFat.o \ -SdVolume.o \ -lenval.o \ -micro.o \ -ports.o - - -C_DEPS += \ -cardtest.d \ -diskmenu.d \ -floppyemu.d \ -millitimer.d \ -noklcd.d \ -Sd2Card.d \ -SdBaseFile.d \ -SdFat.d \ -SdVolume.d \ -lenval.d \ -micro.d \ -ports.d - - -C_DEPS_AS_ARGS += \ -cardtest.d \ -diskmenu.d \ -floppyemu.d \ -millitimer.d \ -noklcd.d \ -Sd2Card.d \ -SdBaseFile.d \ -SdFat.d \ -SdVolume.d \ -lenval.d \ -micro.d \ -ports.d - - -OUTPUT_FILE_PATH +=floppyemu.elf - -OUTPUT_FILE_PATH_AS_ARGS +=floppyemu.elf - -ADDITIONAL_DEPENDENCIES:= - -OUTPUT_FILE_DEP:= ./makedep.mk - -# AVR32/GNU C Compiler - - - - - - - - - - - - - - - - - - - - - - - -./%.o: .././%.cpp - @echo Building file: $< - @echo Invoking: AVR8/GNU C++ Compiler - $(QUOTE)C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DF_CPU=20000000 -I"../SdFat" -I"../xsvf" -O2 -ffunction-sections -fpack-struct -fshort-enums -Wall -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -mmcu=atmega1284p -o"$@" "$<" - @echo Finished building: $< - -./%.o: ../SdFat/%.cpp - @echo Building file: $< - @echo Invoking: AVR8/GNU C++ Compiler - $(QUOTE)C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DF_CPU=20000000 -I"../SdFat" -I"../xsvf" -O2 -ffunction-sections -fpack-struct -fshort-enums -Wall -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -mmcu=atmega1284p -o"$@" "$<" - @echo Finished building: $< - -./%.o: ../xsvf/%.cpp - @echo Building file: $< - @echo Invoking: AVR8/GNU C++ Compiler - $(QUOTE)C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DF_CPU=20000000 -I"../SdFat" -I"../xsvf" -O2 -ffunction-sections -fpack-struct -fshort-enums -Wall -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -mmcu=atmega1284p -o"$@" "$<" - @echo Finished building: $< - - - -# AVR32/GNU Preprocessing Assembler - - - -# AVR32/GNU Assembler - - - - -ifneq ($(MAKECMDGOALS),clean) -ifneq ($(strip $(C_DEPS)),) --include $(C_DEPS) -endif -endif - -# Add inputs and outputs from these tool invocations to the build variables - -# All Target -all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) - -$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) - @echo Building target: $@ - @echo Invoking: AVR8/GNU C++ Linker - $(QUOTE)C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="floppyemu.map" -Wl,-lm -Wl,--gc-sections -mrelax -Wl,-section-start=.bootldrinfo=0x1eff8 -mmcu=atmega1284p - @echo Finished building target: $@ - "C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "floppyemu.elf" "floppyemu.hex" - "C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-objcopy.exe" -O binary -R .eeprom -R .fuse -R .lock -R .signature "floppyemu.elf" "femu.bin" - "C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "floppyemu.elf" "floppyemu.eep" || exit 0 - "C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-objdump.exe" -h -S "floppyemu.elf" > "floppyemu.lss" - srec_cat "floppyemu.hex" -intel "..\bootldr\bootldr\Release\bootldr.hex" -intel -o "merged.hex" -intel - "C:\Program Files (x86)\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain\bin\avr-size.exe" -C --mcu=atmega1284p "floppyemu.elf" - - - - - - - -# Other Targets -clean: - -$(RM) $(OBJS_AS_ARGS)$(C_DEPS_AS_ARGS) $(EXECUTABLES) - rm -rf "floppyemu.hex" "floppyemu.lss" "floppyemu.eep" "floppyemu.map" - \ No newline at end of file diff --git a/arduino/floppyemu/Release/femu.bin b/arduino/floppyemu/Release/femu.bin deleted file mode 100755 index 798091229afc34d43088abfe213952d332a0b0aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126976 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "portmacros.h" -#include "noklcd.h" -#include "millitimer.h" -#include "SdFat.h" -#include "SdBaseFile.h" -#include "micro.h" -#include "ports.h" -#include "diskmenu.h" - -#ifdef ENABLE_ORIGINAL_COMPILER_WORKAROUND - -// work-around for compiler bug -#undef PROGMEM -#define PROGMEM __attribute__(( section(".progmem.data") )) -#undef PSTR -#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];})) - -#endif - -// I/O pin assignments -#define CPLD_RESET_PORT B -#define CPLD_RESET_PIN 0 - -#define CPLD_STEP_DIR_MOTOR_ON_PORT C -#define CPLD_STEP_DIR_MOTOR_ON_PIN 7 - -#define CPLD_STEP_REQ_PORT D -#define CPLD_STEP_REQ_PIN 0 // PCINT24 -#define CPLD_STEP_REQ_INT_MSK PCMSK3 -#define CPLD_STEP_REQ_INT_PIN PCINT24 -#define CPLD_STEP_REQ_INT_ENABLE PCIE3 - -#define CPLD_CURRENT_SIDE_PORT C -#define CPLD_CURRENT_SIDE_PIN 1 // PCINT17 -#define CPLD_CURRENT_SIDE_INT_MSK PCMSK2 -#define CPLD_CURRENT_SIDE_INT_PIN PCINT17 -#define CPLD_CURRENT_SIDE_INT_ENABLE PCIE2 - -#define CPLD_EJECT_REQ_PORT D -#define CPLD_EJECT_REQ_PIN 3 - -#define CPLD_STEP_ACK_DISK_IN_PORT C -#define CPLD_STEP_ACK_DISK_IN_PIN 2 - -#define CPLD_WR_REQ_PORT C -#define CPLD_WR_REQ_PIN 0 // PCINT16 -#define CPLD_WR_REQ_INT_MSK PCMSK2 -#define CPLD_WR_REQ_INT_PIN PCINT16 -#define CPLD_WR_REQ_INT_ENABLE PCIE2 - -#define CPLD_RD_READY_TK0_PORT C -#define CPLD_RD_READY_TK0_PIN 5 - -#define CPLD_RD_ACK_WR_TICK_PORT A -#define CPLD_RD_ACK_WR_TICK_PIN 7 // PCINT7 -#define CPLD_RD_ACK_WR_TICK_INT_MSK PCMSK0 -#define CPLD_RD_ACK_WR_TICK_INT_PIN PCINT7 -#define CPLD_RD_ACK_WR_TICK_INT_ENABLE PCIE0 - -#define CPLD_DATA_PORT A - -#define CPLD_DATA_HIZ_PORT C -#define CPLD_DATA_HIZ_PIN 6 - -#define CPLD_TACH_PORT D -#define CPLD_TACH_PIN 5 - -#define CPLD_TMS_PORT C -#define CPLD_TMS_PIN 3 - -#define SELECT_BUTTON_PORT D -#define SELECT_BUTTON_PIN 4 - -#define PREV_BUTTON_PORT D -#define PREV_BUTTON_PIN 1 - -#define NEXT_BUTTON_PORT D -#define NEXT_BUTTON_PIN 2 - -#define STATUS_LED_PORT B -#define STATUS_LED_PIN 3 - -#define CARD_WPROT_PORT D -#define CARD_WPROT_PIN 7 - -#define SECTOR_DATA_SIZE 512 -#define INTER_SECTOR_GAP_SIZE 55 -#define ADDRESS_DATA_GAP_SIZE 10 -#define SECTOR_DATA_HEADER_SIZE 3 -#define SECTOR_DATA_SECTORNUM_START SECTOR_DATA_HEADER_SIZE -#define SECTOR_DATA_SECTORNUM_SIZE 1 -#define SECTOR_DATA_ENCODED_TAGS_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE) -#define SECTOR_DATA_ENCODED_TAGS_SIZE 16 -#define SECTOR_DATA_ENCODED_DATA_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE+SECTOR_DATA_ENCODED_TAGS_SIZE) -#define SECTOR_DATA_ENCODED_DATA_SIZE 683 -#define SECTOR_DATA_CHECKSUM_START (SECTOR_DATA_ENCODED_DATA_START+SECTOR_DATA_ENCODED_DATA_SIZE) - -// 8 byte marker placed at the end of the program binary, used by the bootloader. -// Configure the .bootldrinfo address to be 8 bytes below the bootloader start address for the type of Atmega being used. -#define DEVICEID_HIGH 0xDDDD -#define DEVICEID_LOW 0xDDDD -#define VERSIONID 0x0100 -const uint16_t bootloader_info[] __attribute__(( section(".bootldrinfo") )) = { DEVICEID_HIGH, DEVICEID_LOW, VERSIONID, 0x0000 }; - -const char versionStr[] PROGMEM = "App Version 1.0 L"; - -volatile uint8_t currentTrack; -volatile uint8_t prevTrack; -volatile uint8_t currentSide; -volatile uint8_t prevSide; -volatile uint8_t writeMode; -volatile bool restartDisk; -volatile bool writeError; - -bool diskInserted; -bool readOnly; -bool mfmMode; -uint16_t crc; -uint8_t numberOfDiskSides; -uint8_t currentSector; -uint16_t driveTachHalfPeriod; -uint8_t tachFlutter; - -uint8_t writeDisplayTimer; -uint8_t cpldFirmwareVersion; - -#define TEXTBUF_SIZE 22 -char textBuf[TEXTBUF_SIZE]; - -#define NUM_BUFFERS 24 -uint8_t sectorBuf[NUM_BUFFERS][SECTOR_DATA_SIZE]; -uint8_t extraBuf[SECTOR_DATA_SIZE]; - -bool selectedFileIsDiskCopyFormat; - -extern const uint16_t sony_track_start[] PROGMEM; -const uint16_t sony_track_start[80] = { - 0, 12, 24, 36, 48, 60 , 72, 84, - 96, 108, 120, 132, 144, 156, 168, 180, - - 192, 203, 214, 225, 236, 247, 258, 269, - 280, 291, 302, 313, 324, 335, 346, 357, - - 368, 378, 388, 398, 408, 418, 428, 438, - 448, 458, 468, 478, 488, 498, 508, 518, - - 528, 537, 546, 555, 564, 573, 582, 591, - 600, 609, 618, 627, 636, 645, 654, 663, - - 672, 680, 688, 696, 704, 712, 720, 728, - 736, 744, 752, 760, 768, 776, 784, 792 -}; - -extern const uint8_t sony_track_len[] PROGMEM; -const uint8_t sony_track_len[80] = { - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 -}; - -extern const uint8_t sony_to_disk_byte[] PROGMEM; -const uint8_t sony_to_disk_byte[] = { - 0x96, 0x97, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, /* 0x00 */ - 0xA7, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB2, 0xB3, - 0xB4, 0xB5, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, /* 0x10 */ - 0xBD, 0xBE, 0xBF, 0xCB, 0xCD, 0xCE, 0xCF, 0xD3, - 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, /* 0x20 */ - 0xDF, 0xE5, 0xE6, 0xE7, 0xE9, 0xEA, 0xEB, 0xEC, - 0xED, 0xEE, 0xEF, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, /* 0x30 */ - 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF -}; - -extern const uint8_t disk_byte_to_sony[] PROGMEM; -const uint8_t disk_byte_to_sony[] = { - /* table begins at disk byte 0x96, value of 0xFF is an invalid disk byte */ - /* 0x96 */ 0x00, 0x01, 0xFF, 0xFF, 0x02, 0x03, 0xFF, 0x04, - /* 0x9E */ 0x05, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /* 0xA6 */ 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0x0B, - /* 0xAE */ 0x0C, 0x0D, 0xFF, 0xFF, 0x0E, 0x0F, 0x10, 0x11, - /* 0xB6 */ 0x12, 0x13, 0xFF, 0x14, 0x15, 0x16, 0x17, 0x18, - /* 0xBE */ 0x19, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /* 0xC6 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0xFF, 0x1C, - /* 0xCE */ 0x1D, 0x1E, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, - /* 0xD6 */ 0x20, 0x21, 0xFF, 0x22, 0x23, 0x24, 0x25, 0x26, - /* 0xDE */ 0x27, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x29, - /* 0xE6 */ 0x2A, 0x2B, 0xFF, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - /* 0xEE */ 0x31, 0x32, 0xFF, 0xFF, 0x33, 0x34, 0x35, 0x36, - /* 0xF6 */ 0x37, 0x38, 0xFF, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, - /* 0xFE */ 0x3E, 0x3F -}; - -uint8_t sectorDataHeaderGCR[] = { 0xD5, 0xAA, 0xAD }; - -extern const uint16_t crc_ccitt[] PROGMEM; -const uint16_t crc_ccitt[] = { - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 -}; - -void ResetDiskState(); - -uint16_t writeErrorNumber; - -void error(const char* msg) -{ - bool wasWriteError = writeError; - uint16_t wasWriteErrorNumber = writeErrorNumber; - - ResetDiskState(); // clears writeError and writeErrorNumber - - LcdClear(); - LcdGoto(0,0); - if (wasWriteError) - LcdTinyStringP(PSTR("WRITE ERROR "), TEXT_INVERSE); - else - LcdTinyStringP(PSTR("FATAL ERROR "), TEXT_INVERSE); - LcdGoto(0,1); - LcdTinyString(msg, TEXT_NORMAL); - - if (wasWriteError) - { - snprintf(textBuf, TEXTBUF_SIZE, "%u", wasWriteErrorNumber); - LcdGoto(0,5); - LcdTinyString(textBuf, TEXT_NORMAL); - } - - while (1); -} - -void InitPorts() -{ - // set all data lines as outputs, MSB (RD_ACK/WR_TICK) as input - DDR(CPLD_DATA_PORT) = 0x7F; - - // initialize the other output lines - DDR(CPLD_TACH_PORT) |= (1<> 4; - if (speedZone > 4) - speedZone = 4; - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - driveTachHalfPeriod = F_CPU / (2 * zoneRPM[speedZone]); - // OCR1A update will be performed during the next sector 0 read - } - - TIFR1 = (1 << OCF1A); // Clear the timer 1 compare A match flag. Not sure this is actually necessary. -} - -uint16_t trackStart(uint8_t trackNumber) -{ - return mfmMode ? trackNumber * 18 : pgm_read_word(&sony_track_start[trackNumber]); -} - -uint8_t trackLength(uint8_t trackNumber) -{ - return mfmMode ? 18 : pgm_read_byte(&sony_track_len[trackNumber]); -} - -#define BUFFER_DIRTY 1 -#define BUFFER_DATA_VALID 2 -#define BUFFER_LOCKED 4 - -volatile uint8_t bufferState[NUM_BUFFERS]; -volatile uint8_t wrTrack; -volatile uint8_t wrSide; -volatile uint8_t wrSector; - -// these variables are used only within the interrupt routine, and do not need to be declared volatile -uint8_t wrTick; -uint16_t writeCount; -uint8_t writeTemp; -uint8_t currentWriteBufferNumber; -uint8_t ck5, ck6, ck7; -uint8_t XBit; -uint8_t* pSectorBuf; - -void WriteError() -{ - writeMode = false; - restartDisk = true; - writeError = true; - writeCount = 0; -} - -// pin state change interrupt: STEP -ISR(PCINT3_vect) -{ - // step to a new track? - if (bit_is_set(PIN(CPLD_STEP_REQ_PORT), CPLD_STEP_REQ_PIN)) - { - // determine the range of dirty sector buffers - uint8_t trackLen = trackLength(currentTrack); - uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; - - for (uint8_t i=0; i= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 1000 + writeCount; - WriteError(); - } - - restartDisk = true; - } -} - -// pin state change interrupt: SIDE, WR_REQ -ISR(PCINT2_vect) -{ - // did the current side change? - uint8_t newSide = ((PIN(CPLD_CURRENT_SIDE_PORT) >> CPLD_CURRENT_SIDE_PIN) & 0x01); - if (newSide != currentSide) - { - if (numberOfDiskSides == 2) - currentSide = newSide; - else - currentSide = 0; - restartDisk = true; - - // premature end of a write? - if (writeCount >= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 2000 + writeCount; - WriteError(); - } - } - - // did the read/write mode change? RD_RW: 0 = write, 1 = read - uint8_t wreqBit = bit_is_clear(PIN(CPLD_WR_REQ_PORT), CPLD_WR_REQ_PIN); - if (wreqBit != writeMode) - { - writeMode = wreqBit; - - if (writeMode) - { - // switch the DATA pins to inputs - DDR(CPLD_DATA_PORT) = 0; - - // indicate that the data bus has been released - PORT(CPLD_DATA_HIZ_PORT) |= (1<= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 3000 + writeCount; - WriteError(); - } - } - - restartDisk = true; - } -} - -void HandleGCRWrite() -{ - uint8_t diskByte = 0x80 | PIN(CPLD_DATA_PORT); - - if (writeCount < SECTOR_DATA_ENCODED_TAGS_START) - { - // look for the sector header - // the final header byte is the sector number - if (writeCount == SECTOR_DATA_SECTORNUM_START) - { - uint8_t sector = pgm_read_byte(&disk_byte_to_sony[diskByte - 0x96]); - - if (sector >= trackLength(currentTrack)) - { - snprintf(textBuf, TEXTBUF_SIZE, "bad sector %d for t%d", sector, currentTrack); - writeErrorNumber = 60; - WriteError(); - } - - uint8_t trackLen = trackLength(currentTrack); - currentWriteBufferNumber = trackLen * currentSide + sector; - - if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) - { - snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, sector); - writeErrorNumber = 61; - WriteError(); - } - - pSectorBuf = sectorBuf[currentWriteBufferNumber]; - bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; - bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; - wrTrack = currentTrack; - wrSide = currentSide; - wrSector = sector; - - // turn on the LED when receiving a sector write - PORT(STATUS_LED_PORT) &= ~(1<> 7; - ck7 = (ck7 << 1) | XBit; - break; - - case 1: - b = (writeTemp & 0xC0) | dataIn; // A7 A6 0 0 0 0 0 0 | 0 0 A5 A4 A3 A2 A1 A0 - b ^= ck7; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck5, b); - addResult = (uint16_t)ck5 + b + XBit; - ck5 = addResult & 0xFF; - XBit = addResult >> 8; - writeTemp <<= 2; // B7 B6 C7 C6 0 0 0 0 - break; - - case 2: - b = (writeTemp & 0xC0) | dataIn; // B7 B6 0 0 0 0 0 0 | 0 0 B5 B4 B3 B2 B1 B0 - b ^= ck5; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck6, b); - addResult = (uint16_t)ck6 + b + XBit; - ck6 = addResult & 0xFF; - XBit = addResult >> 8; - writeTemp <<= 2; // C7 C6 0 0 0 0 0 0 - break; - - case 3: - b = writeTemp | dataIn; // C7 C6 0 0 0 0 0 0 | 0 0 C5 C4 C3 C2 C1 C0 - b ^= ck6; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck7, b); - addResult = (uint16_t)ck7 + b + XBit; - ck7 = addResult & 0xFF; - XBit = addResult >> 8; - break; - } - } - else - { - // verify the checksum - if (writeCount == SECTOR_DATA_CHECKSUM_START) - { - writeTemp = dataIn; - writeTemp <<= 2; - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+1) - { - b = (writeTemp & 0xC0) | dataIn; - writeTemp <<= 2; - if (b != ck5) - { - strncpy(textBuf, "checksum failure 0", TEXTBUF_SIZE); - writeErrorNumber = 62; - WriteError(); - } - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+2) - { - b = (writeTemp & 0xC0) | dataIn; - writeTemp <<= 2; - if (b != ck6) - { - strncpy(textBuf, "checksum failure 1", TEXTBUF_SIZE); - writeErrorNumber = 63; - WriteError(); - } - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+3) - { - b = writeTemp | dataIn; - writeTemp <<= 2; - if (b != ck7) - { - strncpy(textBuf, "checksum failure 2", TEXTBUF_SIZE); - writeErrorNumber = 64; - WriteError(); - } - - // success! - bufferState[currentWriteBufferNumber] |= BUFFER_DATA_VALID; - bufferState[currentWriteBufferNumber] |= BUFFER_DIRTY; - bufferState[currentWriteBufferNumber] &= ~BUFFER_LOCKED; - - // turn off the LED at the end of a sector write - PORT(STATUS_LED_PORT) |= (1<> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xFB]); - - for (uint16_t i=0; i> 8) ^ sectorBuf[bufferNumber][i]]); - } - - if (crc != receivedCRC) - { - strncpy(textBuf, "checksum fail", TEXTBUF_SIZE); - writeErrorNumber = 70; - WriteError(); - } -} - -// pin state change interrupt: WR_TICK -ISR(PCINT0_vect) -{ - uint8_t wrTickBit = bit_is_set(PIN(CPLD_RD_ACK_WR_TICK_PORT), CPLD_RD_ACK_WR_TICK_PIN); - - // was a new byte written? - if (writeMode && wrTickBit != wrTick) - { - wrTick = wrTickBit; - - if (!mfmMode) - { - HandleGCRWrite(); - } - else - { - if (wrTickBit == 0) - { - // high nibble arrives first - writeTemp = (PIN(CPLD_DATA_PORT) << 4) & 0xF0; - return; - } - else - { - writeTemp |= (PIN(CPLD_DATA_PORT) & 0x0F); - - if (writeCount == 2) - { - if (writeTemp == 0xFB) - { - writeCount++; - - // header received OK! - currentWriteBufferNumber = currentSector; // assume the buffer to write was the last one read - - if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) - { - snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, currentSector); - writeErrorNumber = 71; - WriteError(); - return; - } - - pSectorBuf = sectorBuf[currentWriteBufferNumber]; - bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; - bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; - wrTrack = currentTrack; - wrSide = currentSide; - wrSector = currentSector; // assume the buffer to write was the last one read - - // turn on the LED when receiving a sector write - PORT(STATUS_LED_PORT) &= ~(1<> 2) | ((__c1 & 0xC0) >> 4) | ((__c2 & 0xC0) >> 6)) - -// rotate left -#define rot_ck0(__ck0) \ - do { \ - __ck0 &= 0xFF; \ - __ck0 = (__ck0 << 1) | (__ck0 >> 7);\ - } while(0) - -// ADC __ckr, __in; __out = __in ^ __ckl -#define enc_byte(__in, __out, __ckl, __ckr) \ - do { \ - uint8_t __d = __in; \ - __ckr += __d; \ - __ckr += (__ckl & 0x100) >> 8; \ - __ckl &= 0xFF; \ - __out = __d ^ __ckl; \ - } while(0) - -#define SendByteAndCheckRestart(b) \ - do { \ - if (restartDisk) \ - goto restart; \ - SendByte(b); \ - } while(0) - -void SendMFMSync() -{ - // send A1 sync - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = 0x0A; // data in bits 3-0, sync flag in bit 4 - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ 0xA1]); - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = 0x11; // data in bits 3-0, sync flag in bit 4 - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 4) & 0x0F; - - //if (restartDisk) - // return; - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = out; - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ data]); - - //if (restartDisk) - // return; - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = out; - PORT(CPLD_RD_READY_TK0_PORT) |= (1< 128) - lcd_vop--; - } - else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - { - eeprom_update_byte((uint8_t*)1, lcd_vop); - break; - } - - LcdWrite(LCD_CMD, 0x21); // LCD Extended Commands. - LcdWrite(LCD_CMD, lcd_vop); // Set LCD Vop (Contrast). - LcdWrite(LCD_CMD, 0x20); - } -} - -void PromptForFirmwareUpdate() -{ - LcdGoto(0,0); - LcdClear(); - LcdGoto(0,0); - LcdTinyStringP(PSTR("CPLD FIRMWARE UPDATE"), TEXT_NORMAL); - LcdGoto(0,2); - LcdTinyStringP(PSTR("Release buttons to"), TEXT_NORMAL); - LcdGoto(0,3); - LcdTinyStringP(PSTR("begin"), TEXT_NORMAL); - - // wait for the buttons to be released - while (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) || - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) || - bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - {} - - LcdGoto(0,2); - LcdTinyStringP(PSTR("NEXT: Load firmware"), TEXT_NORMAL); - LcdGoto(0,3); - LcdTinyStringP(PSTR("PREV: Cancel"), TEXT_NORMAL); - _delay_ms(400); - - // wait for a button press - while (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_set(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - {} - - if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) - { - UpdateFirmware(); - } - else - { - LcdClear(); - } -} - -uint32_t imageFirstBlock, imageLastBlock; - -bool OpenImageFile() -{ - LcdClear(); - LcdGoto(0,0); - LcdTinyString(selectedLongFile, TEXT_NORMAL); - - LcdGoto(0,1); - - // open the disk image file - // to-do: check if the file is read-only on the card - bool openOK = true; - if (!f.open(selectedFile, O_RDWR)) - { - if (f.open(selectedFile, O_RDONLY)) - { - // TODO: How do we tell the CPLD the disk is read-only? - readOnly = true; - } - else - { - LcdTinyStringP(PSTR("error opening image"), TEXT_NORMAL); - openOK = false; - } - } - else - { - if (selectedFileType == DISK_IMAGE_400K || selectedFileType == DISK_IMAGE_DISKCOPY_400K) - { - numberOfDiskSides = 1; - } - else - { - numberOfDiskSides = 2; - } - } - - // get address of file on SD - if (openOK && !f.contiguousRange(&imageFirstBlock, &imageLastBlock)) - { - LcdTinyStringP(PSTR("image not contiguous"), TEXT_NORMAL); - openOK = false; - } - - if (!openOK) - { - _delay_ms(4000); // wait 4 seconds - } - else - { - LcdGoto(0,1); - // show disk image type - switch (selectedFileType) - { - case DISK_IMAGE_400K: - LcdTinyStringP(PSTR("400K raw image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_800K: - LcdTinyStringP(PSTR("800K raw image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_1440K: - LcdTinyStringP(PSTR("1440K raw image"), TEXT_NORMAL); - mfmMode = true; - break; - - case DISK_IMAGE_DISKCOPY_400K: - LcdTinyStringP(PSTR("400K DiskCopy image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_DISKCOPY_800K: - LcdTinyStringP(PSTR("800K DiskCopy image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_DISKCOPY_1440K: - LcdTinyStringP(PSTR("1440K DiskCopy image"), TEXT_NORMAL); - mfmMode = true; - break; - - default: - break; - } - - selectedFileIsDiskCopyFormat = (selectedFileType >= DISK_IMAGE_DISKCOPY_400K); - - if (bit_is_set(PIN(CARD_WPROT_PORT), CARD_WPROT_PIN)) - readOnly = true; - - // mount DiskCopy images read-only - if (selectedFileIsDiskCopyFormat) - readOnly = true; - - uint16_t volumeNameOffset = selectedFileIsDiskCopyFormat ? 0x424 + 0x54 : 0x424; - f.seekSet(volumeNameOffset); // offset of the Macintosh disk name in the image file - f.read(§orBuf[0][0], SECTOR_DATA_SIZE); - int nameLen = sectorBuf[0][0]; - uint8_t* name = §orBuf[0][1]; - name[nameLen] = 0; - name[21] = 0; // in case nameLen was bogus, terminate the string after 21 chars, which is the longest displayable name on the LCD - LcdGoto(0,2); - LcdTinyString((char*)name, TEXT_NORMAL); - LcdGoto(0,4); - LcdTinyStringP(PSTR("Track Side"), TEXT_NORMAL); - - // show a lock icon if the disk image is mounted as read-only - if (readOnly) - { - LcdGoto(77,0); - LcdWrite(LCD_DATA, 0x00); - LcdWrite(LCD_DATA, 0x78); - LcdWrite(LCD_DATA, 0x7E); - LcdWrite(LCD_DATA, 0x79); - LcdWrite(LCD_DATA, 0x79); - LcdWrite(LCD_DATA, 0x7E); - LcdWrite(LCD_DATA, 0x78); - } - } - - f.close(); - return openOK; -} - -void ResetDiskState() -{ - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // useless code to prevent the "unused" bootloader_info array from being optimized away when optimizations are turned on - // there's probably a nicer way to accomplish this. - currentTrack = bootloader_info[currentTrack]; - - InitPorts(); - - currentTrack = 0; - prevTrack = 0; - restartDisk = false; - currentSide = 0; - prevSide = 0; - writeMode = 0; - diskInserted = false; - numberOfDiskSides = 2; - currentSector = 0; - readOnly = false; - mfmMode = false; - writeError = false; - writeDisplayTimer = 0; - tachFlutter = 0; - writeErrorNumber = 0; - writeCount = 0; - - for (uint8_t i=0; i= trackLen - 1) - return 0; - else - return prevSectorNumber + 1; - } - else - { - uint8_t halfTrackLen = (trackLen + 1) >> 1; - - // process sectors in interleaved order: - // 12 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 11 - // 11 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 - // 10 sector tracks: 0 5 1 6 2 7 3 8 4 9 - // 9 sector tracks: 0 5 1 6 2 7 3 8 4 - // 8 sector tracks: 0 4 1 5 2 6 3 7 - // This is how real floppies are formatted, and should improve read performance if the Mac - // can't completely process sector N before sector N+1 begins. It should also improve sector-by-sector - // write performance, because the Mac alternately reads (address header) and writes (data section) in - // this mode, and proper interleaving means it will read the desired address header sooner if the Mac - // isn't fast enough to process the sectors linearly (which it likely isn't). - if (prevSectorNumber > trackLen - 1 || - ((trackLen & 1) == 0 && prevSectorNumber == trackLen - 1) || - ((trackLen & 1) == 1 && prevSectorNumber == halfTrackLen - 1)) - return 0; - else if (prevSectorNumber < halfTrackLen) - return prevSectorNumber + halfTrackLen; - else - return prevSectorNumber + 1 - halfTrackLen; - } -} - -void ReadDiskCopy42Block(SdFat& sd, uint32_t blockToRead, uint8_t bufferNumber) -{ - // for a DiskCopy 4.2 image, read two blocks into a temp buffer, then copy the unaligned data into the sector buffer. - uint16_t i; - - if (!sd.card()->readStart(blockToRead)) - error("SD read start error"); - - // read part 1 - if (!sd.card()->readData(extraBuf)) - error("SD read error D"); - for (i=0; i<512-0x54; i++) - sectorBuf[bufferNumber][i] = extraBuf[0x54 + i]; - - // read part 2 - if (!sd.card()->readData(extraBuf)) - error("SD read error D"); - for (i=512-0x54; i<512; i++) - sectorBuf[bufferNumber][i] = extraBuf[0x54 + i - 512]; - - sd.card()->readStop(); -} - -void FlushDirtySectors(SdFat& sd, uint8_t trackNumber) -{ - uint8_t trackLen = trackLength(trackNumber); - uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; - - // determine the dirty range - for (uint8_t i=0; ireadBlock(blockToRead, sectorBuf[i])) - error("SD read error W"); - } - } - - uint32_t firstBlockToWrite = imageFirstBlock + ((uint32_t)trackStart(trackNumber) * numberOfDiskSides + firstDirtyBuffer); - - if (mfmMode) - firstBlockToWrite += trackLen * wrSide; - - uint32_t numBuffersToWrite = lastDirtyBuffer + 1 - firstDirtyBuffer; - - if (!sd.card()->writeStart(firstBlockToWrite, numBuffersToWrite)) - error("SD writeStart fail"); - - for (uint8_t i=firstDirtyBuffer; i<=lastDirtyBuffer; i++) - { - if (!sd.card()->writeData(sectorBuf[i])) - error("SD write error"); - - bufferState[i] &= ~BUFFER_DIRTY; - bufferState[i] &= ~BUFFER_LOCKED; - } - - if (!sd.card()->writeStop()) - error("SD writeStop fail"); - - writeDisplayTimer = 25; - millitimerOff(); - - uint32_t writeTime = millis() - t0; - - snprintf(textBuf, TEXTBUF_SIZE, "Saved trk %02d in %lu ", trackNumber, writeTime); - LcdGoto(0,5); - LcdTinyString(textBuf, TEXT_NORMAL); - } - } -} - -int main(void) -{ - millitimerInit(); - ResetDiskState(); - - ShowVersion(); - - LcdClear(); - - sei(); - _delay_ms(100); // wait for pending interrupts?? - - millitimerOn(); - _delay_ms(100); // wait for pending interrupts?? - - // if select and next are both held down, enter contrast adjust mode - if (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_clear(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - { - AdjustContrast(); - } - - SdFat sd; - if (!sd.init(SPI_FULL_SPEED)) - { - snprintf(textBuf, TEXTBUF_SIZE, "SD card error %d:%d", sd.card()->errorCode(), sd.card()->errorData()); - error(textBuf); - } - - millitimerOff(); - - // if prev and next are both held down, enter firmware update mode - if (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - { - PromptForFirmwareUpdate(); - } - - InitDiskMenu(sd); - DrawDiskMenu(sd); - - // main loop - while (true) - { - if (writeError) - { - // report error encounted in the interrupt routine - error(textBuf); - } - - cli(); - uint8_t trackNumber = currentTrack; // save track in a local var, since currentTrack is volatile - uint8_t sideNumber = currentSide; // save side in a local var, since currentSide is volatile - restartDisk = false; - sei(); - - if (diskInserted) - { - // show the current track and side - snprintf(textBuf, TEXTBUF_SIZE, "%02d", trackNumber); - LcdGoto(24,4); - LcdTinyString(textBuf, TEXT_NORMAL); - snprintf(textBuf, TEXTBUF_SIZE, "%d ", sideNumber); - LcdGoto(56,4); - LcdTinyString(textBuf, TEXT_NORMAL); - - // sync RAM buffer with SD card when switching tracks, or also when switching sides for mfmMode - if (prevTrack != trackNumber || (mfmMode && (prevSide != sideNumber))) - { - // write any dirty sectors from the previous track/side back to the SD card - FlushDirtySectors(sd, prevTrack); - prevTrack = trackNumber; - prevSide = sideNumber; - - // Also mark all the buffers on this track as invalid, since they don't contain valid data for the new track. - for (uint8_t i=0; i= trackLen) - currentSector = 0; - - bool prevMotorOn = !bit_is_clear(PIN(CPLD_STEP_DIR_MOTOR_ON_PORT), CPLD_STEP_DIR_MOTOR_ON_PIN); - - while (true) - { - // check for disk eject - if (bit_is_set(PIN(CPLD_EJECT_REQ_PORT), CPLD_EJECT_REQ_PIN)) - { - PORT(CPLD_RD_READY_TK0_PORT) &= ~(1<readBlock(blockToRead, sectorBuf[bufferNumber])) - error("SD read error R"); - } - - millitimerOff(); - - bufferState[bufferNumber] |= BUFFER_DATA_VALID; - bufferState[bufferNumber] &= ~BUFFER_LOCKED; - } - - if (currentSector == 0) - { - if (motorOn) - { - // toggle LED during drive activity - PORT(STATUS_LED_PORT) ^= (1< 1) - writeDisplayTimer--; - } - - // "Flutter" the drive's TACH speed slightly, every time we pass sector 0 (about every 100-150ms). This avoids a bug - // in P_Sony_MakeSpdTbl in the 64K ROM (used in the Mac 128K and Mac 512K) where - // the Mac will crash if two successive TACH measurements see the exact same speed. - tachFlutter += 25; - if (tachFlutter >= 125) - tachFlutter = 0; - - // Set the timeout. OC1A will toggle after this many counts. New timeout threshold won't take effect until the next timeout. - OCR1A = driveTachHalfPeriod - tachFlutter; - } - - if (mfmMode) - { - // insert sector-to-sector gap bytes - for (uint8_t i=0; i<50; i++) - { - SendMFMAndCheckRestart(0x4E); - } - - // insert sync bytes - for (uint8_t i=0; i<12; i++) - { - SendMFMAndCheckRestart(0x00); - } - - // send the address block - crc = 0xFFFF; // reset CRC - SendMFMSync(); - SendMFMSync(); - SendMFMSync(); - SendMFMAndCheckRestart(0xFE); - SendMFMAndCheckRestart(trackNumber); - SendMFMAndCheckRestart(sideNumber); - SendMFMAndCheckRestart(currentSector+1); // MFM sector numbers are 1-based - SendMFMAndCheckRestart(2); // size = 128 * 2^N bytes, so 2 means 512 - uint8_t crc0 = (crc >> 8) & 0xFF; - uint8_t crc1 = crc & 0xFF; - SendMFMAndCheckRestart(crc0); - SendMFMAndCheckRestart(crc1); - - // insert Address to Data gap bytes - for (uint8_t i=0; i<22; i++) - { - SendMFMAndCheckRestart(0x4E); - } - - // insert sync bytes - for (uint8_t i=0; i<12; i++) - { - SendMFMAndCheckRestart(0x00); - } - - // send the data block - crc = 0xFFFF; // reset CRC - SendMFMSync(); - SendMFMSync(); - SendMFMSync(); - SendMFMAndCheckRestart(0xFB); - - for (uint16_t i=0; i> 8) & 0xFF; - crc1 = crc & 0xFF; - SendMFMAndCheckRestart(crc0); - SendMFMAndCheckRestart(crc1); - } - else - { - // ensure a short gap between sectors - otherwise once they're all cached, one sector will appear - // to immediately follow another on disk, which may cause problems for the Mac. - // Bad voodoo here: - // 1. In the Finder StuffIt copy test that sometimes dies after the first 18 tracks, the length of delay here - // seems to affect what track it will freeze on. - // 2. With a longer delay here, the first ~10 sectors of copying seem to have fewer or no "long writes". - // 3. Depending on the delay here, the Transcend 2GB SD card sometimes gets "writeStop fail" when saving tracks. - for (uint16_t i=0; i> 6)); - uint8_t checksum = (uint8_t)((trackLow ^ currentSector ^ trackHigh ^ format) & 0x3F); - - SendByteAndCheckRestart(0xD5); - SendByteAndCheckRestart(0xAA); - SendByteAndCheckRestart(0x96); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackLow])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[currentSector])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackHigh])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[format])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[checksum])); - SendByteAndCheckRestart(0xDE); - SendByteAndCheckRestart(0xAA); - - // insert sync bytes between the address and data blocks - for (uint8_t i=0; i 0) - { - diskMenuSelection--; - DrawDiskMenu(sd); - _delay_ms(200); - } - } - else if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) - { - diskMenuSelection++; - DrawDiskMenu(sd); - _delay_ms(200); - } - else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - { - if (selectedFileType == DISK_IMAGE_DIRECTORY) - { - // remember where we came from, so we can get back later - char* pSubdirName = ((char*)sectorBuf[23]) + ((SHORTFILENAME_LEN+1) * subdirDepth); - strncpy(pSubdirName, selectedFile, SHORTFILENAME_LEN+1); - subdirDepth++; - - sd.chdir(selectedFile, true); - - diskMenuSelection = 0; - LcdClear(); - InitDiskMenu(sd); - DrawDiskMenu(sd); - _delay_ms(400); - } - else if (selectedFileType == DISK_IMAGE_UP_DIRECTORY) - { - subdirDepth--; - sd.chdir(true); // go to root directory - - for (uint8_t i=0; i zw|P{G@U#QS1>YEp4mXuIp%I-jTQNSK?kW~8M#hfA+#KmV$R&l=GBDEZt0irlQS|4w zo*ktz0#$%0S?qLsGu?M&r*h#{S7-PR9jyG7g0Fsa7gmwb64_US|n2`w81 ze1WXD4Y!xC!BBTaO5;~D7+%O(%beegEx5MJgA{n|Co?v>6&bEX-ZmYKWTPYWL^2$A zPbs4$EKCrMf>93TkDk-T6n{so(U*M!T_KH~(oS5=yW9Fy+HS!H_cgDArA z_do-f?-9w9@82z2KI)91tIX%%54XVoM#$G!IDpFk&8x{1iQBH;?kK%EE$W+B1D(xn zUD(1PF5pi58JTiH7- zvkN7r{1A%atSSUGg^AIKP<`XBFER)n>(S^;AeBW{k58N=xrwRj>>0h*hRez$o&o7gQy-s0Q;?jsQ| zu2cDMcRs#FK2iV@jE94>8T|aiV-8AkhFaVojS*clc~3T=ALdNPp;}mp?kll1ks z)S`qC$2n$c8QPMqsWaW=ljo8k0u$ej&=9Dt*T~Hp504a+BQmT&$1_?bRZlGEQb2IG(bv?(idKLvtPO!dYfsbQI;V#{>`A~N4t7xGqX)Wz z3dqy(V@%+Gj2^Ko&&v15O69I~P9pfC3vJDW6dJz&PBCy0Z-ug9qAo&(s2>>pfHw+# zH=0QB;1C7d-uqb#7-KOIA6lqXG_&i7#|I6NzbI5bRy0EYoD9^qv{~EIQ)V?o8+q0e z460d#=RC$OwBIB99`c1lFWMNaEAC$D7v?9ffz=z>!WN~)-!@dsBhH`y;DdWIf_Dlk zPj7w+GsM#NM>${m6cH$WQ1uXaP!Ef>o8)j(IDdf&fYo- zTo3tEDR;-m)Z%b%Br7^INoZ?Izxwfuey*zzXKSX{!TqyMn5ggLaKmrhJ2?4vf)=eJ zUDFNT;UQ-Wf|d)4+7k<2{E#p~PTSqf=(Q-s7Kg{)=P8P`?nn*-3=fI04;uw-*OSp} zLTKGv5T~!x9j5QlN4fm4Bdk_ALS0x&)hG5x<#(0i)~B@8jl6m|ys*CZ1n!Cui78?p z+Q!ofotxBFfXS%QhzIh?1jAn2!N-J~+~PL2zqQ&2R;Ly$37u5+q4vsf8bG)&z$3=* z*ZF@*UY41-4m7t(to`YGHzy5tNlZzw zSoO)INOeynbYq6iBm;z7PsM&KoU>U^9ccdKKE|+~tND;mj4GI-+*z~hM(^!R;-ib< ze6o;Fq3C-xUe9h#w}^FTGwQmcjTxL@7=BjjjrGKXlynz&vkpC}a2R*GL8@)P3C;K= z79E2yRsIfk)>C+*g*Ck?@_h)Vj+CO2VNIP#bsZA54hPmUw}A`WQ#LZ*<)5Dis*hE>1kyp>o*7!o6A;ZUR2ugZKdk=VbnKl zj$z|SOS}l7D@U&2Tu#5@Kins}Mc8$buDa@GrdwXAyY;ADW`AvQa z;qY!+&BYw>MQhgOXeGQc4=rB&&WzwPmCe5tDs zX&2Fda!7C)m?gXR8Ah);8*&=#yjIfeaNqyUx);Wfg4dR4-=WF?+ltq>9_rg8of6Z? zQ3R;~8Lgj-{M>)r=C#!w2PYpCY+1QW-%MO7wQYr(xo71zEf?@Y>HSEOejT=1Ke%b25AQL!fMeF|GDu@6Qcf zWEr|Ok`2rv1qr)o6mq>Wi};5`i21P~4@L}Eusw|Y=L#7|8oU`MQUyZ4&8uLrFabsp zY5{q|uiaSsf-Ezv{gt{|+gi$`@s?G45Q0&$AdY{K4$uU~8LNg%W*U_5)U7q>+C4X2 z{PKs4lG8l1^K3!P$28Oa$640YNwSj5$EcWj!$|{LplC`5RZ|Q6eFPeUr+)VDbV`cm ztla4bH{=d-vAF7*!Uy#sq!9&c96aF^@u@fI;F?JOd24>mi%x*bZZ@J~VI^ zl4SekNA>0K$#d##=rXPa#~1Ko=u89&9zMAn2iBhCc|w->@@rBOOT1X+i zw+;c0VSC=T2fL|FEYO1e8%zQ~E!;&Z>2_k~6@}2Nug7K;t$9Skt!6F>q50`}ywJgh zyhMGz>5HZIgNH-O3V-OyfFsJQOyf(&Of0<;D*xoH5$C%1{#T!TI7AXfj}VgA-uj)* z$sI{fXJ6K?&&WiK90RfSt7F0Ws|NzfYP@{OPuW(xYN~tk_-yyyadvFRQO>M6?zkoy zM1$G7w^13&jq<^sYRqE!3eBI}e+IYE#{19{5qcVu^u`7T+03LhhYKhOzU%>o&h=Bg z-*HQ?y&~DN=4X7UC7m9b#bd7={5XO~ZN)QEu8nou&WtlTJdnp>R!07N9_27$Q!^+@ zWhk+97A1?4Nz{uEL^Wd;UO{ciBrb&^G`lX?r$&zM_b1?tW7K$A@MgCxp??jg@Um)J zsuf(5DcR~2-oZQ~)w?9}NZnzs^MKK$-R-+pDZ-t{j6N9mbwhlj&(N%b!J#SxdSloyHk%1HEzspWY`n5dy z2X~%8rihcsQr3d+qqmWVVT*FsVJeBD$r>$}YJzb4N*w$g^(;eUN|Jnk$z==cXa=MW z!b|>Dy%ZHd6cOs+OhZa%K=(NhZK9M5t!QZI3yYyXp$a!Rv6>N?ZGi5}B$skfSLUAM zJN!hUnT|8g2{9D-ahygy)jlxY1`HQrGP28kl46G#Z3O=;%Cp(`l%ww+2%AkFgKh_` zY2>y=l+PH*uAV*&e!}@?%;d~Nu!$MA_!QwLae_qb&X+aGI@1OX)AV2T7+OL5xE-L0 zCXccrX2#OaRVi5^6vcF5)2IxxPq}hjCC<2Nsq84ru39>*bD?EO#5b8fM_Fow_wY@RE(iFC+FS_ zJGZldQmQ_iBNf$5Z`ZrbLg^?yR*N}N;uo#AOa%rqQgXxIl;y0ctO^$`)%YERMnz4l zSc;7W`=#Z(A*CN#20qGfxQ}Fx8o%j#X!iJeU4zel(*0_I5TG6o@OApdd1Dxu-eHFt z94mf)-^NTYinjyg7?LwWq9M6 zlGjsamNnf}Q6qhmj+{N8!fuP)G|#IE`3(I2G*B|s+bv?qwDog;rmSi-g>+(X_(d7x z6S>$!;K6!W>no%aAc!u)2{1OUt?=B;bt^hSVMf&P(Ov~(kCssH9sf+p^eZm zz#MUv#c^<`zD$}cq%%4GhIYG;i|k|XR_3Wf$at91%w$+n7JF|zj7VQ}=LZ;0F5PcM zUog*P^&?{68A?dimmD{ivCAH8kihW7_!}qJh43rCq?T=C9D5@-U4iE(m5>9%16;k8%sP zil0$yp5rO@w%;bR_y{|LXrs5bVqct}tgcrOqjV%rV+uUkcJ^bwCQND5yxP-xwL#Nx zQtQTBv3U7I!3uxyicT>?xDsDVTMx0rj^FtqzG>OHD#GxBDTx9-2SXhm0HIEtm0VXnOL5`bylb1lm z8tX&J*`#!-uq5d2nyFIiLzYMR2TozdVcR9?d7_e*iUHJ?&!zM%y|pRo`9y=Xu?_B) zYW%(S>(2>1^NR&0RH{kG;tB}o;PP9s$7sU{A0HY4wO-YA8iSZ3Ikd#VI089U(-q=J z!>pfF?rDQJ!>iHO`tuuiZCTR9)HC#V^Gz z{2s4jGUjWH_pg&ZO+!OYR+#L|bYxyxsvl}-98j}>I@T|G+1c8LRmEa47@;eQB;Jep zMQ2ncJ$+p=K)IHi)4!QcyU?UroiZz=w?yFQm)FD8dsz*Nn~lWc@=Ri z0C31ru;gA=+PYG4&c6zG%OrDM&a;|$>PfR$oK68@%UtR|vO0O9F&bmb%GmVWmkaJa zw*5^U7buXI?H+(%9gEcTF*YbEWp*DUv_j3bAaLK%%BX%@?}mk$EEHX9Rz~ka2#VnD zpx2(RA?z9#>RBvdQ5=8>QXzrmlVbO=ZhP9^j%MCZ(9ja}CV&}wP+UDyc%@MfD6t>O zN!w2je(!hP%$doeeSOcc)3e#Gp12dDFeKD=&w>+2Xu^f(W6xV1agAl`&FyM?BPsRS zm`0zf78@Ja$3&Tn_-SvL9F?#zC2F!)R2POws>{=SYE@e89F*P6&`lbX65jI)_udp2 z&u3~tiLY@rDLxP}dkFqd8(Mhb+mRDPpblWo8}i84N8q0j zP=)}HC>mob<)f*a1dkf}+_bx{_m|}K8GDgUA(ar>TO6Z{A3FQV9}9U9aVVR3RT>}j zT6fc}x`E+`PBoWRu&QecWU=qOwAa{2dmmsPxe48R`i!$mxpDq}`_5e1q~`0)Ai}6Z z#KM+XTxBFuQcP8ou~%w`BibmJp^{Eyv=?1NmMFVe%odKvq=sKdW`Do=gXd~%yWqom$ni1_^Vl9o?D%cFt9J}-z9C1h$f94VQC}Fz{M*@j0vxAyB zw5iJXud4(z?I)Te_SB4&b*oUsM)cpOaN90bV)kTsT1=OIOyM*-S1qK+r>VcRl3ds9 zM$ku%uNBwt_I=+;;0?9n#=U~ zny9tJTaw^c$^9tZqFFC0UnS0aN|Un|U)IXshup3zIc12eQ9onqo`6t}X0dx4f3F=D ze-}x8o!f-{2rc|&6sYE2k3%6jT;7O>p{X<{_35NXn*Vd$T!{o)A%fDeZyLFpDtkfF z5{1lp69g>F1A@=sfi>B(bZYofZ{Tu{FH8-mRzaWM{pH`jL~B#D_vtA=mx53M@T z7!etSrToI8vtg$gmG@Y3QU)6e*Bt zcem0L$TRDbgH?*g!}|i`eY(}B@;3lRU)o1FqQPwnNby;!ETd)>O`jqGXJjr>Q0L0N zY{AaR&+f&@spXn)nba=05>w{p{Xr-Qc}Z1ltG+;E?i-v30inAxB7O*^boiczlkS?% z;}o0M+}~n2D)VXB?|XkKn+r*0TAOyiEEo1WexLsq&NR=Ipozp}CrbsiPi81JP2|gG zz^Gs97-7fW`P}jSqV|>R0rY!T_o(Q;5$=4`tFV3c;Gm6xKH57&WVb_v&ypYEW}T7x zds#7?(<*vvr}1`yU_)N@IBag89L5S_>Mu$GeR;Jq4u3XreoZxr0gTE^a$r(jC56^o zvYNfQ;Bd|2WGnx3Gf`2)#UMXtS8v&(`?qxP0di>gBiRj#5_hg?@!vh2ucj4E_qJD7 zr;N{fNMtO_b`!g03{;~c)AfwJ?x%!t;{{E2*UG4~+BA4j#+9CS?IGfH?uNk zx3V*~Fy~~mb~LwmU47jFV980zN&#SCU;rC$AHeH6Kmq^@1M~0t4}pV+`zHwR-oe2m zA|N9EYe>kb$Vf;iNQj6i=qM7T~`H+k&? zU?aigzQcusp#s2S!@yy~ybb{<000>Hx6%F^@P7ylEZjSIgtsA~puQ=zV7(0=4i5Hh zu<-BRy=nWs-3PqGhR6B9DTaWnYK%zbgvS+__ydVryrKWS+8mgM+r&8t83mt!kcgO; zj-G*$iHDbu|D(Vsi7%2;(lWAg>Kd9_+B&*=re@~fEG(_8U0mJVJv_aL2q{|7GYH(ao9Hh72l4;Kuq$6JHLeh2@769Gp| z717uUmx?P82~RxnM?*g{HMbi0y@~T23O)_bE-mCAwEvFm{~fTP|6j=dC$Rqu*BSr~ z4(82xaM%D*z~h-V^Yvdwz-7DWuwtyxOm>l0Y1@=tUO&bYl29NFY#C0k~fVO*y2 zyMkY*aEOR4ycmQB-<>^Q$eSVf9_}}{1%(=Z-vhU@p3ct$LKa~6VxGFYkN$Em)Bt#I z_pDw4bn(0zu4P?lqaw|N4x`rZ`p!|?U*1#a*1zy9DvlrbT;CFjdIuqVS&grO-$;(r z?vcb0>TZA0cm?n$J>KQQllep6fylDX!F-Ui#I;kvPCXFCjH#jo zdSI1dr$f~gx)~>EqLfH+sdNF@AO7st;=yW$-_71*KYHFtjn@VeO*NlJ#Y0)p)i z77jKLCxKQU6>w8Y54yYsmf0!~LYbpEe>G;g>=$mQ51HszBFmKlj5=;M&nxB!A z&eaO(%)Vj0F`I)>TH9!RXK(7IdO_6uZ;H+JaJn0Bel~rjbjsUn?ud?TE{d?703J9`uD!GM#{^GL~5XxLOklL|+3nbw2LygvHgE?sn zxT#vhe0s0H+Z)5{w$SW{38JehS16TXJ#B73$WrNQSfinj6Q~Qheg#13S4I`(rUhzx z-a}jV5+$m$KM<+U?oG}pjUsff+^Re$^l1tN>67JLpYtT?x@kz zdE{t0tzDfAe*?3_g4$C)D_y=^Dm!S_8*S+cdWk{Z2f( zuN-s%T(nmg?B;-Dxg`QIzX^*+4_ZA=yTbtr*-t`fpvnS?u=_bz7e*v5uYh+C&@+rZ z`T-!xJ9>MqExs4!tnK$vL*mm}9WyCle+m7pkDXny`ezP5ZubKEf&Mt_zq0MRfGzPX zwkG?2Lce?|z}opCZKxeJzQ#o3gf<`jjb8x)AM2*sBPn3JoWMcL%<=C%rH8gi+VY(2 zNIPSr2l0}=)=Qf9+cJK<<(=sFre^JR->R1Mx}0vna?i1yDKFY}mo_4wPnD+Kg*Ie940Wn(gpKAgJT%L)_kk1|%eL$N%y1lW@^Cx&1Ng zzd<0`JCtgZvxO~*tvlZ$^^eVvyr1xQgKP(h?&SD$K?6Un|IPaZ6)ZPwhc}HLvY&hf zNMc)vEH%`<0{WSS{C0n^--gGEV6IQt%T16#V~P{7?}C}72(gd!7bY8=4SwZ?VTM38 zEg_f}B8|#WW?=tC{n(a8G`Z?8$>)qpbHv0eB92dYrDAWyae_**E)@d_sIlZnc%V6D z#$)M358A`t0jKaFMKve%`1lvhje4O}2)&TU^vp;ngXm70h)C8vHDb&QrjgJzavVGE zH^~`a+d_djCLkL8OSxm4-04HB1C+UUK<9i>+G39}oydaEv39#}VrD-5h5QhlBKZm+ z_vid}_+qdNcm?bmG4H(s2m|^*3OVeUS+RHNf(r>vcQc^zmYX+>D{EC&qF^P5D00gC z=6fNyioQWc+TKVIOyJRymC!m?ZVnJP@~(2K@m{?3(5-E zn&QU8h$Zv$46)pg8K*1RDUF3!z}rhv*xdNyK$v)XIy;HZ%X1wcUje0Zj}6e3@hplb zoIB8YrM0*A57~U;yz{7enHs==gp{wF_Q$~TRV=w zG=c!Bo~y`BD7(j{ey`>O;5CsOwbb$EoiWC!;|T6Jsdg+Nwv|hL6haYGBt;ni4=FR zQClbcF26tz@#%ftuHtNF3!$%M@hNaKo{G7MQ($jDASFIvx<>YmLvz84nHnl`;xz(9AV zHU$Udi@wao)BB>jfPQunW~lS}^w0d=F3Xv|H`|tepr2(M%u=0dz%iH$1Rev?%N(k? zPf6bFPd^aA?jix&&OR?(`>gXE;5W?hwg5FgF+Pf1G(g9lw_Shh=THn-L-|#o6T7U6 ztuJ-Qy>?PNkH|W08ZrsJ^Wbfu7B9#*knAB$l%p4l*>md59s_95Z{NX}X}wZ`rEjMN z2A%}r=B*!|57!&tmLYu+oJcjEHb_e4FVyA{EIseq?{mbJu3@MIS^wl`fRLYU81e*~_HZFN1abhAI<(Ccs* z#~zlZP?yJhmcm58c3I>aJHZzeD{${nTdyhjRD>6zR8`-3^q>`TWx!)f) zH$!3Y?U{WMto`c^m)v=qHkE1IIQywGy5vfN!Hr0>DfMnSr7aCNo^SJ?7UyiS{X~O0u3`a^&60B$Y6F?S{K=ZxaD; z0p#{wpTwUpnlBvGcPV(>`1 z6G-rPVVm~4eVA?zTEreHzG$uwTc+1eKu8Z-xbE_M)40!c%FT8_)=$hbXW#kB2V2b1 zE{pRLgnDRpS@KzorZkfC#~uf^Ur>g@VFx!wte~+S6`9VLNp;k~4Z!0o0J7FDx>K3| zuB&Aogl<*y|*DbBMGK975iWB5L#+-HA<>?e5X}Y{$xZ|=34RO8)CK- zyr86mm1OoTAmkO_41+L5<^5$T-Lz~myjNzIU07zReb)^oDn_`F#zbTNQJ%!-&bzp+ z%5^qO1hX~n1IYvsZ|b&Uxy-ZW8y_dKb&xh!p7mC=^fS8D?5cFm_u_B|{$P~|v23I~ zCSiAs1DA{65HemDNCf9k$7Ti?8#Uao&gZFs5~PC^<-};d6@6RV6r6<%-yChB3`l`2 zM5zg!TvrhKt{Qd!&`@tn$Y(76GW`m$Pq}8=du#^$c{lp($ADw(b+`bVgX`*J z)iBtGy8IozBz-=N5YEBBg>GsPJS8=A_4Nf0=7XSTQNc4jZ;!D=(CFItcMh4(f@)9g zBGUp^yW-kBX@ytAITvy*XwOirXNz$(`&yi~^+UBN7cW zvLKD_NjSTliRZ*I0POvnsq5|iZT(YX2^p`v=SS~E^kxw;Bng?X*p))ma=w)HSeXhG zAT29Uc%x-!&nHQ(9z?vje8xGyqDIZnbW#?u&jb~2$K?j(iu&MFFPDC1q9-(+!dQ=6 zliWD@+0DD|wW#J$fr>>San;H&wY#51_J& zr$V<^_~NR97%#Ohc6X-8WtY4PQTm)QX8xdpE!en{<~?VOzfu3UYT7c6^!x97x2Pv;`7Ayec1F2>V^ahz+!&pwUL;{tXK0`6MXeqkek<=b ze;P`oSj!44ak`a9)iS}C$M1P;%wuODg8XUwmmO2+(- z9YWl^%k=g;chU_2Yt&HPjjUw3g>dt@dyB;Ko)&&=8%q-URYiA-6;)Z2i zb?|rvAU)>}0N1VDwF(7O%+1p$18IaRC=-9?c^{TIff|IO<~GvZ>`l*@nalShWO0iV z#$dG7Qysmrtfnw-H=mEe?7yq_G_sVc^YE5QQN21A&Iw-uRkl~SxF=7dseZ5}nH-3R z`m@!Q(wP{l#0l?d^1ODu7gF8bXIf;qJdI;eY?Hp?<~Yr_Vr>pzT}Dxl_#5AOYp}B+ zZV}dcfDVUzfFawcPhz0x)x-8?@Ikgn2@gj-jzYr+=SpRgI1cX5apejUU!T`v_hUp6 zdeGb6R`zR8e0d*thj4$9;d$hb?ahMRtFen?0Xtp!n1`7~Z!riHgwmLVv~9gTw%jw~ z7jy1++Qew!c3m8&*u}@ZllImH*jKPkgMb_jvQLx5pX~6~t9V6?=+4i4^aFEEaC|(m z_D4E>aazaa^^vNecgo(FheGBSfA| ztMtp4a$aR9yThQM89HXLKb4UkrLk#iOuS1bI^Xs%Z3TrX`+b9`g7 zb7h3@EnI5Y{5Azbn|o;PJKy~W+G&lU$-4y6nTD+widu82elvJJdI6I? zkY}wr)6>OHc*qEM;*{e1`7zJ+e1(-ste5Rp`^s%_+$Kg<{jsXOf=d$Ll21OAAuivn zR91-Jg}l#j@EFX@6qqEpM;(*ZqQ?GZHjiB1)sKG9=T8e*se?YFl6t`&m{W!QQaJRb(;M@>1b(e#cO$K_|NhpG^vx@~Mju-D&rSgS=!`cseM9l zED~Xc5+z7RDvMJsSY$rFzrBeoU-L`hYdvK-+a;k2+CVanl?GSV0>}q?Klzge^eehj ztlsS^h41F$L#0Rc;(l1h)OnSzkAPFuFL4Y5;l7gjaq8K;QSJe%w66R_)r;de6v}LF z|CUkjD=&8|l%d=5=!x)?G5%_<^$Ul%?2LvzS(#T_YvTu)E*3YW7;GIuzO;E@SEjAW z8sHNWn($*}_EYsz_E38IKNyk%HzfYFWw$y}4n-VRavT$qBZ;)!vL(O0uMDg`Vu-7= z;LE%73ZOteVk!Bq=wXNF4(5r_z;|;Qn|4I-tV{K$&IV%ovg#9RIh>)JK$U6c`7>#L zz_2rS(4<+cai1AsxDmUa(7&(RczpBG$h1$W`UaP7(T68jZZ&mq;tQS=67dd`4?UIA{|z_(lptoV2jw|UnHh$G?zfT%IN}cpcyUl-l3mMWjG_g(S$*%~N2X*U~EuJ~J zZsQ(32##gS%qI5c4ic$-KIUBOk%bO|n{GoEu9p^t^mk{7*N=M0S}w_7uEZ?Q&ZrOt z+rAom5z&xK`q5F9cn!#F1n}%$cD6vUQ;79$0)8BcHspt2-wU}^H#A7Lx6W_Y?1$eu zOUC|Q)lTpvjq|J>5&eBKlorsC^`z!NWHVtQl6tsiP!@Zkb!ijIoH0ZvPWpWlKne$B ze!_)l4~s&TciX^9E#(s+lJb%;K|4`J`AmCUhe_D4uK)~x`=wh_e_?3(c71AHe=k&p zoUJWfxg}_hS6Ea!Q@+a{IGtcmGq#^QT2_EpzeIZjw7@^NiW}#I8Z75j=}oWv{Oe^g z5`cT0$MUv>YI&0H87%R#YOAzE5gA*|0esj@=>^>#6g*QvDfk|4xuN7K0I zEM&QO#a99xJoJx`m|-=%3{M7a$-^KLpBgUE$1F@%H102Fk3IUHOc>ry!(xx>zW7~G zG2 zD{#(UE{K*%d-LqrRTRb7$#}4kBX*l!$one|2*U*eWUQA_r4f3jrdwg9Ly@4Lm_Wz%+c z#?~nQ*czewRn>zt+r(t3cFvRXoainLG#3<&%(}0`Gi7wV6#X5x^Ve_DRLv6N%Q8Qr zrL*G+WCHj~y`!31_K_2I#FIS6j<>)ltsJzX9LJlqrc62V#4!Cwq*xp9Lfeop+s1ix z3*O}Na_)@p`7O%lV{tv~CSNU43AM26t`4y8d|qUOxm;jvZW8^7m{G%BrI ziqBblWKJc)lP#7Q_Hj-BBbk$~i7}GCzVA%oE`6l6d+btk=dnkA(^e5UU3R$vqV@_< zZCi-eD_mc*bUD^0P?e`fHdCuqIa(o3~@nT};LTlb!@vc0d7HLkktL441)eACy#PrZ~pow z!|F7hK-PuG(!8IP)YLhDu*OZ|_amS0vw%r&^L>in$(bG6FytL^?o>(bQSqY+GaFeX z+$`yhNXtnc3}mJ+0IJy|)C@869*&PW??zD>pnBJ=3g>wsK6$!U2pu-@%+28V-6&?Mt{7A8TDP_Wf+>h;fK{NDl1Z zqr9sa{Ke`a=vj3lG_l#bP92}GAGRF8wzXP~^C6LPWBVsr--Gv3Ji1M5Ys03s^J>XH zK4XX!FqQE72@I(8S)E|;ai#@C~d;SFBdGz2t(ns)8 zpdU}!N2MiMWx1?v$hIhpw$|)-cawM=+e#8gIv!SZO^|x*7g0>G%&mK|;n4g)vq4 zz@LO0PE$J11ug7IN-J|v59usaeSMujO&#rV`aa1YW-@ej7|Gms&`il&2A(i`lhzg6 z=S^0Mz$;NKwb8?@Lq?{bzKbci_1zeW4I4n~sueAE7_NWDnmFLt+$nh&G|*4Hy99{x zEscoSnk8#1qsnKmZS2%UjId}o%IoK7Kd~Gr@@jrdkWUEhTKOvSz2VHL<&k0ii3^fH zq(ce)p1ck6(r2A0>UP*0LA$y2{*oMwArJ^?J2TO6Pc&gG%4(!5do3}X5%oaWB2?D zy^}2(OW)S0ZTov1dclExSCMC%;;0F^r7q7#mI?CY;`o+dQVX>E`TaO%rWGXd1=Y*o z+mhYrlK?EKgbgdb(8UCUVYH&@KnVoF#joYmWu{RBWsRCC>J2C6Zk+KtLTZ(5(~N1yO4K;m^1C?{#8_M$dtCqKC(HkeXorhDm08asHWk3ZSlZ+cUx z=Q1jzhB*4)(d7qTvEPbhgG7I?t3gPK*f+L-E)Ixo)I@ngeWoaBB!hU zz4pEnBUu{=-__unQ`GdOd8o#{6BVBdxg#dX8W@-eZ5#wu*{nHS&~!@hj`K64#UigE zndrEm3V?b{0LtZw};V+FOLl()k3^&xh7SZ z=brmRe1~vj{cW4=6GkZTRU8d~$O}2_oABcY5e!C8A!@Y+?a6lrpEeD0`Gy9cOPws~ zzq5#mdL{y=pUr`_2VPKTd7gbhW#4_7tMrd%`{{CPtmmxmI0+M^WTmMAXJf+sC5a0$ z$2}HxrhlN9B^J@?d@I7Hy5Mi&Aj9{~-Rgt>M2pRtctxw5R`~P!pRTFDO`7z;KbOB9 zC@2!#3PAJC_j<#?#Kr5``NXfC@Uj`uvND(-vE39`Qs9X?vV{h@h-@L5&~9s*<0ZVIYr~eK zwIY;Knn{%*i5RzM-kRcQNF$dkjT#;Pb5nvc=hSmJ^a^NG4k}o1mErX?2{r2s(mCX8 z{ZgGl`QW-2_56K~;MZ*PlKCqjoy6Z|J3yWdiN$)A4c3_I;`d&PW1@vqB!@SJo!S*bb zK+|_c39aQZPRK|G)>8CJ&aU!1IkB0dS6KD|%!s3+U|rzvi@tnJU*X!eI99jJmTR;% ztpv%X+sw*BpUS<-JkC9}D=qMQd>BBiuJwE{EV2s$@)IWJ5B{rUkG0ime7 z!^t4~@Y=S>_cZa3*uBjJ%8?P|=5sM10P;RRHDVld{BwE0PGde=uLWkL2-f`d;}iu5 zA-3*|y_=!>p!X#I)Q`{l)?JCxKWQ%4Q4#v488p6)A9UOzrq{m}LL@cUXSRfyr-Vcw zot`it+TpA%hN63-10B`&DMHGkku`SvhfPxFM9Srq*xFRjwf-0i+w>z2A?$52m;|d7 ze`v`^{2~ve3n)>Lo*)uZ)lT{8_bVs?*2j!8aXEqYgB zj}c3(fT;TlIJ&-uWjUCS zk7^Wan7f0a>k#(cdIJklaLVen=t*A#L$cu%B+1jJd*?FDYl->RPy@XM@;=t;#R{<+XWg@pH; zd$7kn!Bbr#E92;L%&bgSP(n*~1@lZHWkG~#eH7q?-&e1IM21`LQv$xLm^yF!c?@B1 zElX(h?hla#P#vQEHSx{c{~k!odgHo28L&UmlH-_cKx*}FUjeNtK18>ucRb(C9kLSB z6S~fX4w_6LZQi3+%YBE=5xKb-N? z=}k$0NrxTodOsz4>DewP4btgqYCl)Jmp-<}Y#FFruj9Gt??<>~c{{`PQz>HWpHylz zhAfAEGb*Z)hKoe_lQsY4q{F_5(*Hww(vf)BqhvI*--e--%PSyW^HRRv1sAUU>wMa3 zz~;v(&f;GdlWptA^vaMj*6J1XkX2LcvQ*^wG;%A~IQ$hsFu z)8XWEb0+m>6KYHv3t#-`$BLFd>V4A^fuiA0BqYI9l_R>{aB%s{C4M3xI`|)!cdi(p zXHL|A^+l4zmzOpd7TbOLL#AtN%TL|Tvs<#!$c*ZK-~QhyIPY+_zc!3(QC;|Ts4Z=+ z+Iy3Q4ja#tyg}ENPp8$i9?0N##*(LKw{GVT)=g!l5i$DC=zgCAx2<(| zD@^av`j()Eb2{sFK*TjyUMT$4U2BaN+Ov44lJChIf7Pf!kJ{LtXPlF^d*m3@-!bvUKS zl;E^Kiqb42i6*hubI78$xaismF`2?3mic4XKf9gl1i@dW z132A08d=|veK*g5kJ0bTju5+V%1Q3EPSp)oKY-OCj=*B(Un(#$&SK$KtKbClBmn#K zwm{vPvVf489tvA1_g zMbkY^wGvTRuWnK|l=kvf<>|=ytO7R=W6<#-Csgkbmd1QN^>vrd#JX>o<<-;|dd%F* zOrs=i+=GO20(Xx|W7<4VYa>oBa_=G7*ZOmU-;$?&?~+jfO}ttFWdGxzxxcN-HC0Iv z#QgF?FORFoo!?vRi1vLe3zyE{2TNPm6yd@tGNW7Mo8%evbgui^5_fabj?$uLMCPju z^Cgw`N4FI)Gm|FU8hbdRx(1G}>*~^xn#=B!UR#@RK|ha*GMEej)1`~W(=)J~1y1`t zn7O;pBg%Vz5punv2IRoV2{zls-@x}kYD`Nu)(?Aiw|YZ%X9{_5@N&lGt9gNoFRo^* zRE3_q9W%`B8XZ6bUD-DiLmDc$CS=&1+?0E>LZq?_%6J!mR?w-_-JT%11n=-v-JBg& zq+cb~&`xRWOgb5z&G+#i6<&q#ZKv}ErE*iIE1VL)gNCMk(A5(ALto;5)i0wndSuTa zmHgd~&FkmYfsa{LZl&mxdh85J3L1#4ld<2x2rOuCnJ7ikEvr4EPvGcKZJmU}|6PZ^^xG&%<>{xjWf)Gn{cGiy1V1)_PI&KkQYrUYv~|#leul)O>w5GHhF>*UqPx8psNDCIlZwOSFRaG8 zwBYsf;`8@GJ{4hIYsaw`g7*4FDe_BW2WfuqbgD}XbaYUCWDTg}v`et-p$)gr*V2~> z*S`#YO~`t6(x+_u-ZOpv65h%o)-%`qjK|-cF{-+SPs@?gC+n|8xDEa8a|??Cp)sx*YZZID1%DfX z72d0%oB^O7)USj3hL0l$0(p%Qq0^eI9JOPpRjVsymYjz?56|5`{Jet7A-SM^;zWA~ zk?1^h$ZuK1QUKUsxDD?xn^*hjO`umS6-3zUP2zYnzZ&j#ka4N&441{KDR!ql}c4)SM7lyV)b37oYatwx)s0_H_U( zSbQ(ox{}Q2Ea?Ql4b}e9oYbh@%K@zinq6%!(N8bQt!h|Scs9{ejaUx~p=jck>}rjQ zjGdDo*JPSS^8TV|_v?+e?p~ubJ1a&Bw*o%u(gY+e9odLief##~zjt}D*q0~V6{`>h zC^Ig*%mYWKR#n&9L}b_c(^+|^Q6-9d!AJhkYHbjow%Fnim~L@@oNN$lS01&U{otL` zOowr7YTR5lq5|UBcITvmpJ+&YK5is%*W#+Z{BA=~d;k-Q5Q=vv_@)1nE&jP%7Z>b! z%q_ejEWB<)ZJT3ecEblvSUo4suUv59=_JbjC5fOb(ou5ZjCQ`wf@5*6Hszcp>!Q5{z`e|$&q|A z{{VLUTdn~<*nDs0T_g6evxT?JXCAB+fPL+k>iNkcd#kOGpRakj$9#dzJDI(vn%e%x zsxS8^6aERo1X~`QAPV~6zvTRp=a|eh(xUW_s$}=1?+H?|YAA4RUmFAsiNM-qJH2K7~~O6mL&|D zflEbHkzCSKzYo;s+zx93H>1Nav|8_?rdzYQXb2kjm>_e@mT@MDRcrUk=?b8Yn#wn@ z_V_?%GV4tDSe@P|={Y^TCt0QrQRWhCbe1U;e*|;)C~dmn#-Qj4$#1aP74-PDB4;*j z(%WwhRas@5ud(k3KT268I1s^5i*f0q)fz$urrrqb`DV)YJgU{(3KNJ8T?OVomJX#M z`4;ZelvH$IH!~$heo7zp_!N5cfY%AK5)}^~QL=qW3cmX5N__Yrr>CJVqcOZgKVX(nuiTRR$Umn=z$Z}a%XFAXKswR184K^8J*X+> zX>1gJ^kpP*WYe1F6Lqr5Iw2JMT=*PBP3Bc!*+7x_M&F8AFf@~|!YNCU>rm=}$gM2* zJeka*IN(e*RUuMgWN-7qAEiLUANH(@DKpjbWlBAO%J?`Nz&vGFz3fnTdWs63Z^f=X z`w&uPlF$vGT~lc8Yh@-m8XL)Ht2hBwPmWuNG2=M8&clyvF(pU}#m$sGZgR#YUippV zAJxn&6o{70u>q^dVsPxz2R8c5dcIBEilmh=mLyL=dF{3bx(L zNVjlTpnd=SmnNZF^|pN>r``VH?LQpZ4F!MAxAriuMCh~CW%j~!>K7M2B|Um4CS4(` z!#;k?bg)|s+|{AC$g=95XUH$oh)kcWiNOCzcate9YiAi@=$CR;^4g^m|Lh8mU<@%% zlaq}Ib+=Pm$|s&mOE0sNk?BnN-NuRzy)S1BwCn!sXGA~FTv_=(himY9DZf@v$?@6# zDPx=?OO&{ue?zO^VyFknf?n;GQQV(9RSjlkWG<3dq~o`e@6F&s8z+v~!f;bmdfQtgnN>wpO(xl-6wDsUzTVB znMwBXO7UjaIQ1WF<(}<_oTEIehWr3*W1y|jGJ0k7&71d zYWj}~)0yBPTEbnJVT<+uv_tv=1LEZNz-#lqbDQJTOudwST{4xq-eVVNciFlU+6kH#F2HZ|Imw zycZLXN8$PI^>3My>~0TlveN%K2EqlHa@LCpuJ1TYrna8E~EFR<-yv7ReuiK z6dRW3q1-0Y%MZxC<^djJT@bc{*t_pYQ?`JrDp3H;bJ3=Htyi_b~dv6|Aq@;hya{g%Brk6e-i zB4Xic-<`>L!g(d|W8*(6YN*xaS2E`gn4FDbu~##((%e)#o2HBOL=cwfgP~?E6oUXWJg=| z?S25QPX4cQjhUg+VQj+6Vt!?3D>dP?MoZp)+Q*Iu9$ZywN>Q z=#zS>1CY;Eodw_iU8{`}s3<{*FX6TqfgdycMg4|#V{HPr0?16tOq_Iu@alNASp~Pc zVnZyeQAf$ylXS^tIf42~7Dl+;~%kkn}ebZB%Bw$2V_vgA}tT)qBL;E#0Wl|G@2aNA3wj zb&U^oll&icbcxlURA>_-u*Y4X>d1(~IYQD78YFs0q~`Ls6Yo&q-=@#JA@5xfZI^H$ z1CsSW0zdvo-Fz>e?L|+>KdNbyP@*`j3qTK)g}(4$oP#H1Gq(mn2NlGABH}!BjV*D^ zy>w?EDnu1ROm)*U$6*EMeD@waOtGEd6T0h4{8=x0I)VF#fYo)@D{kUqj+iDN@eDh$a zwyJZS+$SO%Aoz2Hio%j%K9$3=;-v|v^na1$BcDBXGMuWs={L*bBb2Hnk;C?3c z1%w;&gJL>fUUX^PVU$o6mLJtVny+of=Z)BQaSZij>*}4@_-T>QZc-Q8q0&l6;Kux; z+E;Q~Y2y%!HlG1ch;AYjRfhcbsybMI48;y;av6wI`9E&1eUf|pK-P@Z>sC@m9ci;2 zYcdL{a@cplLhx_2sk_sx=m}wRJ%@Cr%V_j1fy8P{cdhU1pS67KlvdG|cRm>atxhj! z&ULpkH3TD~+ukvTw_OQ!WJJs9VYymX;nAK;0l8)kkXtR~6}M%l@#39k5fe{tA4{k! z-+mjWPoTrU#4_&N5e;_C89OeOda|z&Tvl5od;xbYc9Zh)dA}5FHRGy1KaPy27(Mm! zPW~%I!GbAQ0ti?jxU1^a0v_K_%DdVre4k-- zHQ)yH-ej|0s}v3y*UCyLG-;hFuetL`4$u7l`d1Ap>NF!Bnuj6i23!<=fU-5ZbE-WM z`c`JbAVw_y5w07nN}CWP-S6hJOl$f((m!(f{Uzo>Cp5PZdK0zuT0q^zM571OiM9~x ziOY4{x<)Hs(Dq4sKKcrnopY)6c{%9Sv?Bl@Y;udk=CGgoS3-B}P42M#r-SV72XqSM z%RE8ZBb>2QSkW{#C^{rO`%_33(8Ie&Q!Yw+yPR5vGT7qNP1c`u8z-ofQV+3IRsRcv z`KPQ5Z}ySbQgik&v%?-V+b@U83eBX%45oJ!$@eE#viM%g)@Bv%uWaqDh;4wA=Bwed z6E*5u4rLndt+r|}iO7l?PP%@E&;1D~f=F8p5qqY^YzzEap9&8|H$?{bZ< zPrnWj;WoGJrS0PT{)?2VJ5!GxVR{`z(X4x{YmO+)O;09@2u(TQ^t~ zsAJNkBlfswHyFc&6PBy1AHn|Kp<)PHH|Sc)QsM75rckgCS6>7NfK)AA{SZIs)F6dH zYHA;My-NO3MQBuuO23=k)cELTo#8)+F{XB=O-P|zmJuccY8uXMkLE!q-Nh)xV*0kt z=L36tqs0rOeMNa2wJx_LN$*F>K{nXp6x%phg$|L!Eh@6@kEnq*P_xY55H2ggrNBtK zVah?=tUh(q>NfA64_@=QyTlOYFy+qj1QSLa*tY#hqt+hxUQ*Y<`CUQ5LS1T8qfLDg z9tW7*#><1@*DWC8X62#>-=Hg6o&p`*i^QO*;Lt0@Zn;CNRdENQK$kJviqru8uTq)D zk;(bLhn59n4_e?$hO`Cv%UNcp0@3zm1-0tZ`rL<1wswsfBlc|;= z8R__0he$Mr4?XuwP@VP4U{JhZ-dAL>Po>B==fN|-pItCcAyApfZxeio%;=GRp^JXW z{$$Nta4N_Jo`OFw-DaFcu87v*)<#}d6Cq4>v+9F!x~~%tnj6Beu)X9YtA${Ag8a)N zL@qw@b3|Uug6pkVGB?v69Q#`L(~=}%1G9WT0Me;=iVwHT+n=h@{FQDhydU*!Q?bn?HUrZ}z=qx5zinFx9yDV&!Qok@|602bbXJ2Rqiql9%fu z%}-=h)h@rvB;5aNUR#{6?OSAy6rAs_f}j`^Mg9M)5B*WQ@|MA6N0*WZx&o!c9=@8i zol*9!*qsn}di+J(jBT!*ibqR!la2?MbmPJ#fpmwExCV$aP-*>9__y(sUwZmZZE@){ z>DjLz?!DCyi={rTkRuvoF4tGfm%MfERYt*(S-QlVyAv?fk{AvHRY#2PL)nG@qra)O zn=&QFW_%MoaPQvzw@K8pT1@V=&>iTrHPFqS=Srb>0wPS4kOPy2761=8uHqL^(R8O( zlu+s^TUJmLpA*cS*}aY8@Tbq}j(XS2_$>YWY%QoKhfu~Wf#mV5f43R3#>mgLC^Xw? z{Yb#9(vnp@ZarZ^m%yJ8BdTmjyiby9ZE8%%Z|2)so;rV2Uf8X(~XS zi=|rt0@Y%_=Cd{B{R8;N4Op6N3wcfqW4|j5Rdlx%X3?0!RDP6-OhsJDy zrZYarE7Yq$G=L|U8U4LM-r9XP(AjzMElTNBdVaCjekFdeQKN!+z}a=otWxp| zoa^rH4<78ttV`F=*7qusePm$0(We6G6=bShT?%Ft_;}*ESG;xN8{NDTA-x z@J@_Za}5aXg1e)cH@516_D(9I_Fb-R`^({OUh$27y4|x0Pf5=Ad>r|F6ga;{Ao{s+`a@xD7b~X7vP$@=IEh1xcUkdP zJ0_;I8)p3^#zC_TxWuLuA4k?ve%|<}c!V~C)zI0g5+r*{c z5HG0UKKp87 zRJSC(WR{db%f`E)U;w8|cE@&NX*gWpDjV;d>RCHwFqlNk@+w|m(MJ3JK?MinHw1=t zIM8Ds{JSh|ZwezOVV2_(kTL~4-VA65yv6{h{+jPE&*ktngYmtM6rbF#jadx7e)ym( z&^2_hJK)mOvhriruZv7V5$xdQ8H(`OpLGAQgQBs@v_&i5TN~C{V^?_%cAhruc_-by z$TH3P_NolessVQr)riZ<@fzjY*|8c*4P~8a)@7}qdNj7DJvAh&&zgO^Tu-a+v2YR) zFM-Ob*aWR;#8JeAZkOQQjJ`3~#JtBAq9>SxlYSM6eTXT=r@+2xVn0GNtoG-P#2{bi3)s ztY3?>O7?K9RGBVZ?{?dI(|!xSEV=@I=pAdDK#Q~7qnxQBV^;2L!;Rk>2Oqjc#X}Vf zxxUS$&Y+=<`J3=RKlC~t#q;%bMG8I>ISW|lFc}?N4OkU_gAE9*{yEXK>NJz2Aovrr)N!XeW~JPu>(KA^N^g{YT}WNy zre=BE!cV@jdf%I5GtHyF8K}td!R=H^old1R>@xqx_H#hv9}SSAdmn*KGK=X2|<6?qu)({&Ze5 zSKmK`7;ze*7~Bfd47V%hzmWrA-Thk1^#x}j-$JL%`bRTub;GM0E z6CQI=%dEoW$oBRXlVvy}=$tt{`8LI~`KZig26o0H3xrTZe3w1zP%9@sTymQ+%B>aK zE%9vYToC9gV0RwzRQij$1ac#{?^36u$6qV&ONPM^b9lTi_fnO+4@z`LJFoYV z1<*j==6<~2mTL5&S##0Ar@y6r@&)F9$EpWPoo=3o^J$0sk2iwLR1DphNDuA@a%pK~ z-=I z!wEk;x-(Q6N&<_U0FQU9hkte0_~qC{yjc%f*gDQrvTw5TdhW zu;Gtjy7|1;olEoqb*6|by>fnK`9{}~x}XwRQ0e3PGH^(&gUKZmuzHPWwld8t`!C$hiUT z6{w%#@^dyX{E~}_J-Amwzkg*>1?(BaDlu`BU8d%?=fEAmgTD2(y!c@^Ll126cB}&$ zF5MKx6U>3bre@CwaihVN0)4bkZ-?Lv=LrzqJ1M~|*AB$FSpab^lBLw)N2Of!4>n@k zL~n_4gM9Q+qO1K}y-EQ9P08v|ySk`&s#v=?1t@o+QyisHo0ok5)P|*xslJH6QCD8I zp&pg58GP^YAN2283`Y!X+_Ec$#WTQLS6o(_s4Vvgis*SJ7A1Xp4ja53(yM19(?Fwd z*&wK{|9*>(8lAeqon+*c1QO=I(qx^U!SKf3l%P1G2mgz&WMu?3aZJr%xw7lP#v`=z zB&BO~ zMj6XWxySd8B?w=6_7Rpc$x}PJXBTbe@8+e$xN4Fc#v7JmgB~13tj8$8y^Io(6(6L> zXzcdf)B|nSKX{)O{~~zg_e=ivt1VIB^<$`+v6vT`)K@QIO`zs4)3}z7^09GiYm)Ed zNKfNm$iM$q?1Qj4^WOW)QmSYAF->Bfi=rBVuzveK`S~hA*pIT}vb<>7Kewe~AD$!j zb!zTN$MI-C&h@3=H5?+Q3^cJ+U}rSHsUOXvO9e@vM`N$(4X;?rI+=0`4jVA)7eis(y-RDA7qUh2TLRNui`s<8@> z+I+`9E23BFCR}=aZ`YE>;Cz79(iQ{STgzD2U>Xz>+E0`$tBak$Clp&G?m28P(N2hD z(iEr*K=+nc@>G5@G+DIA(q4?0J< z#CD9|AiojXKe5z$p&$E4YI6@rUnal#?QwSI;IYbGcH8(BcVqV;>e%!O;@w#c`KBSZ zk@aodRI_uok7UGKle?)aTZNF$YEc`T$NLs?bwSB^n%cOw6$)l~+gx^0dWk>dN|d?_ zWekMAmB}?1!R)9#p!9ZFzL?}zeCSHZPVr`>1YPqm+*gYKWL6$E@?0QI@PPUd71*E)g{B2E6U2qlLPZJxS;5<6s zwt|3Ew?=zYOjc|*!Hct5up(S~N*(|31t=@XxPeGR0yGeCYy8u|#{pHAlRORS2gmJf zA_p1#Uxazy+I}6{QBHfW$#*?+wTYU?x{6E*vdRPRL3MEq4QpQ*`3-4 z|0gYv`5M`6#V~Poi+l+;2%4l=&a@vc^Ybp}p)bc-1MEBqFQoryp2|n1S2s zfTT0+=F9kBz`%9#Fb5t)FXFqX=)nf2|KX`z{yG>%H(=O&`>IPQ^PHy{NTK<0pBV8{?z#+QaPb?ix&1qpCdfa-u7N*XpXzxixb| z>GYAVLB?end!OB^74i^HvK3D~;~P%O7_XC*CzZ{LYvMC(JVPFrYE`lf%1*KJQ)ko3 zO!Q-v1WuMKtDUQapFVhVMMwUjP3&}b0)1Rm1RF+s5)o4LOz8S*=8YB1J35XE{@By< zS1D{JyjrSknC?`?&~|(5X{M~~88iBKT3wn%b++$W+R@{ej048P;y15ROQ2-7meKym zXKpGU>_nhK+*r($Db<(ii``+V@|a|Zp1E^2GsV9t?6Tqn-ooNDN&@VWdu6_b-D88r zwUiXAoCL!ja`Rp6X4-44Lxg)if;^2?dd(MS7q{9d5m;IuDbPC>%faA+ikA>!Ftgzg z4dNfUc#W?j=x`l$(4A(IV+yej(o?QR8$;+^ve2KYc}*yT8sq z^Y*lJTWR{T@n!hw3SI0Ue!4;$V@qV`KK0XD94$UMud8rd(ejV>On_5CO2=%yMdm3e z0(w}W6-CRn*Y0~&lQ>I8BLEcpH^`%BHwg=epe`aImu2^(PUx$nCLuMc%E~@c*1XPj z&Yi6Ni+Le8Nx_vQ#rMGMDX%1OdT(Z9)s(N;ClDP)*3Y^8Dg7k{@;(gjtQ$G#UJ)z?NO7E0ur_|(Gg;)De)y0B!T*!GL1BAY=7O7Y zj`}EvFjy>NYoe7e;8@p8Cghj)J*@_dIAsnPS?#Z#N*FPBsW}!Y8UFyT6pGau0&;o# zz1{)Yi4l1HqE@vZ?3&MHP_|JH;wuOuLDlQALBUda-#!Ee{HQX1B%J}wPuvFQ3XSyL}&a;(dx{ZpqSfxWa zIh46+S%tE}1(ZT04&$nBntwA>5H;|(?!Cw2ES1gap)qK62F~zcN4~9AS!+`;ZZ-Y! zoV>+)ulf~*^<%4z)h~Uy6PEV8wY7x7^4U?}4!bktwMKf7Ud?1P=u^_t&R=^?Xo~I1 zMN%M0r)Fhx2r(A)CNywrPXJU2oo6K7Eo^tUrL@T96+@jWYm1r|!H>>JE=dH+tBJ+| zOOYmM@fiT7fP(3xk!`S#U!p~xXNnRsHRcw_ii5JrY@=^YONW%SxDMhg&ck(I`Moa8 z#cxEoIarqe8$-M8(WJ!R2INUe*A@XSbARD*eF(>5?oO{}N@@jQ)yuBQTgU5i1f=^l zgd|2_Q~IIAMAC>FaF=|&#fCL{7_IuuA8DtOqq{XJS z`8NA!wxYjGQDbD$mTzNVbl|6mZ;|mb)WSVgnSM-%q2=|(J{k$a{Cwji-F`DlT03Fc zBU-H-fuT)$dPJoxCfQxoz>}EOp8dflNli6Bw1YA^?TeZ(_7MN&n8jMDN#vex0G~cd zjZOa{%7VkX?d{LDq>a2r()=Q zziTXJK!T1^N_)i_<)|C>CQ+09n|>?=W$f7J8*2axmlwNFDuO54iemoT#tW7 zdI%ptB&gkhxib5&QeI8|-tbN}%gehwN%#t-P=hqySawHB%)=cg7gt`+#w&Rb`uUa( zu?eJVZcHi08f{U2i7DEl$Qw-s!`g-(1>zrD5kwHG=_KEAmTi7VLV?_7ezpnJoN8N% zhcNhlMxtvDxhy4*+8n1o&BHRjt~I0DL5R=@*!8XwC$9i+)#h~exgUpO(zAByb|PQR z<}|kx$ThGq$@32!*^D;Rt^AZt_)Z>fG)V!(iuf|#L0ei38Q`yAs71 zsfv7&DBdOmdjq|5`AZpsO+YU3k-Ms}m-u3pl;H)qN5nGpJ^k!mkEL9?gYb{)F0ViY z5s#i>zOhsgElI5Ls2zQ9_Wj~+W#Yxm?E0(%#>whSO9D55b#+HZA5gTi(Kgq^&3Sm% zS}1ewO-EvuTEp~ekRF0=`O66r=ht#6J?b0Eos||vXmXc@M^VcBJY5Ca1Lm$2M>44) zSF91mnpZ9+87E`kuFLKu$qMTpR}9uu9{mP5GwYks&K3fMYspJgOqYz(O(5UO!db7* zg|1qXB-jI&_*%)}zm$s$A|!1|clsyn=SE`SibL5IfA`HcG1ve9286|2yA4|oW0pj8 zT-!O@JOhC4mr+*JL#U7c36&$*mr!CjX{F1k!>Q2HdejCaAjFwdck*hR`1aA+X+Bk8 zcFH*{bfvzHIWNT+6cu`_f#uP`p^*j|bYZAVVg{{UDBF;kW;!R>-+PPT6#h}QeG4rO zKy8pzcfX+~pS}mNxi1#iEmQtd6PzFl>AhaAZ?ZbmIsN>`+QCWa-s$#o)fVYN$yWE$ zlNto!$BHGWE68pABVfObVF&zKIIDF#T>$tt`}YlG&`2R8hMSom(Cxyk4G;cp@sG+p zCAU{$B>2q(|2qp{4ITsG(SfkB(GAO&eQ!e;yy$f}YC}^3D!+WGQZ&@Iy#DxM$c}&? z{FUHS5_0_hBa7tz%_d#?0R)r1&{z}#{Hm3EAuQ^(b+P_hNMzWoIX>J0(2{EM9 z*b$AkYi;_8(jy_%<&0%PJ_t{J#HMlAE1j);sOIE2y8!!;(RBtLq0X9yPl*HVTwC1Z zg}AMKTCN6Hn-~DEEze4SDsWLKu89!EjuuCk4CP+QVA{k;+(}ju<}EIJ-Qqk}UVyz> zhT%5bRZRV5BM`S!TNL5F%w9z>`AE_yi2NoTt^o5X+U8~H9`B7$j7ySdHx*B|V(^QG z<`WZY*yRiB8`RDduekv-nZb`~`wyiwxoxYTC5Kq&kqsUwY(Q3sIreCI+L*?3W2eYBIl9 zV`Jm%`6rI3^Mm+1NzffH8#40sS3gaPnVE_zR$M+0^!fcvOnEf2G;Bk$doLiyCU2|Fx!W;35Z|MXALt~ z&MKaVv8bKs(FL7*w?nF>fsdMqfWt=(KRmB{MwlpHNxzWmwi28m-N6+%1GsWM0zLfm z(9RFM13zkL@~Dg5O6)apJnJ$^;~39ozIU6`cCxTy!R>U%InPOD-Ih@MK?BB3T@Fn$E_{ozFVaVYv0rtmY!HZxVw3-7Q$t2(}Wh%|Q{D!t6NKZ53% z46~x1f-ZfR2yKRwFwVufZ6HrglxB1Mv`}8mjy}8g{cxzq%-3i8+v6>5l&O~=JE3n= zH}c3M1Xbdi*_sE@or)L?O4j~0mbUSQg`F)DtelJCsLR|}lNwuX4u@3{+){ebIi7AhCmxP}xv{PlLoEGja z5H7@cf`c(!Je|guH-dq)4EL zCrxVYwDC>_*L8+*VBmpYO#kJNR^S4Z4GWJxnQwSF;dXi&&F7LKlZ0`74IWf~_nqus z-yvTCCOjfqkR+y*pOtfZTU28+pQHbq2`X}8H%trW(Aao%vq&Ni$sg)!GK|@^b~Y?# zfcR_4l#OKGf=y419@dl^)uqvSNvv;e(*Jdlycl5r{xh)b!P zxepxG4bN&cRZL`#5uMXXIm zcIpeXiLapoO*22o_Q~7YC#0TLj7qs7(G9>dvZ~V03780PkxQ$tAa)jDpcecR; zgeGkFK2p;8?yp#1YJubg^W!$OH?s9+@=8VYga!e=V(GU7mU+47>Yf+q@urXZ*VPZU zSF&}Vso%`fuo5X?DHU`V$zAvOc=KNGj@%PQ_LA`3*nd=yE==;zAKB`Ke!B3sNbAzt zm(#<=TD^8mQoWsYjXD)`vDw5bIiu=ihqRe)iJd15Y%K+Za#_$^nx)Z{F-O}Ho9v)h zroy%%Fj#kzNPlD2T=;8j+=~Cr+*9N>1pY@Tw9`cL0I>SaV zdDn$euayV{3y(|e$=NJ57kG7>?Wa@Cn|ORz;Hx~it0n!m>``3QqbNw3#Y>(H-CLUn z$qKiD7MIRoO`GWT#Z)Cfj?80yK1YWhH*WrexfGV$_htcQ8nC}J-RI4}XdT;k0yoPb zL*u>kaMy=;rsuYoJ4fRZD>n7NR$eVPDH%mCPKJ$6q|06}Yxz-oa$2;Jl`|DlktSdR z_->jrOQ!>#L1%dQ6?;hnt{^(LHS``i`sE7AuC%Xk{Y;OgNNbJH`26o3-<1g4*GVGF z)q{3c{E82gd7^bq+1|KxlDH8X=!!3u zbvV;M&%8G=N}R9}j}~V&R*>pAa9;n+A8liw#0mGE^err1kYP)$Z2mid9PC(N3nQKU+Yqc; z%S7gm*R^s6|F!j9`0yc@=Te{+rzumgsmDXNd2)a3aphom)AD=nl_dA1H>Q zmyYUQkK)|88F)y~MnCbuS)<ZGN63SLww9({{a<}WC z)zEb{{3;Gm${hUqli_=zMdNHCyNUa?SL?Md;_MuEhJDPy-0r&f=f={VZaXuXu0K&g z3-%;MuMdR;Wed#QlWE>k0oRk+ivB#V`6K=tF1c@!jN~iPb+rE~nVFmUggVj0*h3(1 zzNSu~4`u!`xv%zh={0vr##?W+?0jm1O)-u*?kcJ|Vv*2uIpRohk#j-{&rhBip+oPD&4bZ;u_=`Mve?K$+jT@u^>0q|O6(RoiKMd-Ddbm-5oj zm|PFGY6JEB+QcSrSxtNoxQffu3Uc=LZSt_z>})+~Z0&B9s7YpW?4`h%>C2UuL)jKl zLWg7~;_u$AW#Wo4^vN3Dfy=SS1k?QvCb=+T}LtVm?)64`M zcug5mC5oz%c=PwE1`G9Q-8SSJxeuoy*X{ITJ{L6WuMGf+u2w~!RE&Z)ufjgA(tDfJ z|D%#5p-kv}mewZ$f0lN234$7(fmhF6Mxzo}w1~(^Kym(VAk8%MFIVT&$ zsWl-cq3oBRn%}K5e&J%p9n_RK1~GOW-rOAxNYle%cCa!j8_kC22Y*-3G~zwQ-Sj}18#i5adAk9GJcWXwq5 zJ;ArqPWhZGTduTdt<`)cT9f4dw9p5>-SO9~Pd&=^jZM;LepEjkAYG}_64&y{&!i1q z<|i_Jg}tVy`=I0QqV*2M|B7dlj?f17o8udAtMLo4dlo9FIWLFF4P>}C=rJ3Plw0P2 z^uW>SMs1(gXWCY|>j@EjWmmWVN6}e_HT|_=97RE-6s2QG3L~UJN<~UQO1gy6DIg7- zihv*tX=## znk+rxD^v%lmq(`A?pAvoFB|e@0w$o8Fq^@uV(XuGSv|Ujika>vQbpjEhXY(>a|1ju z;t%H*o=ZN=6j<`BZ12)oczfFGm9+BjMN5uz;dE}jRNrJy!NchcaY&~G7QJOe_*tcL zfhOMDp}QBL$gf85*z{1;(E51--DZ+m4_a#@K{h^_5w|dcz5guIrtzy>OdxG($hf59hpZ6QcPv?DXA}y76P)Qo;}m$ zJTS^|v=OEO$8iS0T-#VP)Fg2!CP%k(X6oD;4CJ!kGH4iNf=-gZHl}UoIMh~IJg+#D z_A_l!>LY6NW{3(l{%K zF3IYb@-&r-oT>3@a^_U-wOHsz#8!)_yAFtQ$4}J#i-^H2M_x(WF}E=-2dg@L!kwdD z*EZL^RI$|hSH?G-*jyR9HQrWnB)BKFR>eRa#tJ{6wdSvUvG^A5>?6cHpY!%ip??_c zLF`AEHMDbG^Kzbzl%3BhX%;=F$_sij-*xd9^+-Y9bBdTyvX9`*7Wt;e ztC9S8O?~e<<0aHSw(qSIn|si%|G(d-hmBPsfhs~NM5?V)kH5np-!gL+9|7hE!gWze zllI!Ex5~=9q*mcd%HIW>pLTnX_cIZ7N+(zVmV*m^URxT!kA8#MN4$e^ zIYjlQTYiq|zId>GT-3#Q;(VWj{5ZN}gidPqB<>2xjaBfvq8Ui5Dh(}3bylsb0Ww7zmG2KfiY}qDy^DG}?V0>% z+}mvK?~TE*Ew}=l1uJTACtBnkfA1#bDRTTde@n$v)aHB9PR<&`8y-#`K8=LGF9ysu zJkJCfH~SZN-oKnUJev$U7ZZs0PC&3EKX27km)}mwi*AO|xOwp>bbMy1F1ZBJFuT*N zdv|Vp!cWsh7G5qRL+*Lq$kYUg&lGuCJSSv?u~?XDBwU~nn}GMwwno(vtVi23wjf1Mx{tUyxAK_su7nLm(z~7*E7Qx=eYA@430ZrdKhBgkC;c4p_i=1W z$mI*M1HIlDrwgp9lG_nL=a4e0>OcT`tl6AeXev7v-PHEYh08KBeLHWKBgc%oMY3v+ zJ;--SGqccZZ1#spQkSKAYR+4)Q5L0mm$=0VyS*gsyLo83}XCojdyQ zQ1ei+*Qn7opmG#^96S=9bYGUxI3AC!V%*4_Z_g6f-LT#tI2)88vkeQJ|o7jZ}Iz~~3;es1(EsL|<6 zLb5ud3^g>G!H=BJ-Vk(?SGWo_`{(jS)j2ULXb0x9svydw&8AEH+Co-ng<^rMqf-eI zY@(w-ySqA44vNAgcj{(;iLV2aJ*6;R&x@4bstN-fan@#gP;ulR(bOc^Wdg{xIli=* z0^v?9hU+y;5l;ik3vA}N3BwB!%R^BafTD=)0Q{3{soHd>+C##%#9XQuLJqs7E%y4t zrsOVCoFfmOFTR(tLQs2?G5kAuvEar3$XfH%>f)h2Clf_RNArS+P9C$U*%_Fmir`lx zj~Mo!nKuBB@AysbF6#Ykyj*RJ)&+6th^-Pluomr3^fxpg%2Agr`j{%gPo(PJVmRL4 ztRr=jT>w|gaQxVkZe10XG)GdZ357&Bk-$W zoM+XXCChq-n-`u=pCe$i4J|k@PeRGy?*zvk^w`yGb+cE@Wv#9G(4r|*&mzi=^YNRl zu~g>gGo;J^PK5ya25_G$?O;HnZm`+r;)e`|(*Cox*6q~t4aKuzuyK~gZ01#78#~T5 zG(u|r@w*mO;KLq7SX}y6 zg1bl=QT4Hw+DKIxg{}YXKN;R(v{j?4SwHgYDEsOuRBLc?RFuQ9_YY&*o|9)0ETNZ^ ze#8G1ex7N75+(JP4+1Ke^z|y(CPsG!4*+TRiNoy=r7P0q#LHOu`lx~w1pi{&HGSsfVJr^b^k1vscqT zXD}%aaWT&1ExqyTGF34OUpV>Hy*-Z1?%|@I#Mb9h_8<(FB4Xaafi6Nf3exP~!cNJO z;s`p^?W7}o3>SX`bP3-<1SGRy*Xv(uEisxqDg<|EkO8^0%FXg?5#96oH__>K(zE-^BwOWkn5#Q5@>J~nS5h*w349|Oi zEZ#g`zh~Ee3WLK))x$E)=12S5l%6ctH;+rOW$zy5VTN8nEK64NaRSbftIC0Ec%37e zo?%~a?wfdh4c9Mk!+RZ_x{nfOw@s|*<3C$|HmvP?D=6ksw}Kb{++3W9VR5w9JC|b^ zyu&h35kPrZRtfiE3pd2!5nX|j?#U*%{G@ z$DaIp%s!JB-7X4QseGUbSxZpW{PZ#k_RDIHU4FsA?+4(#y(l!8MhRmW_BzH|s%(<5 zFm^aRTx(NiC+1*pJ<#D~mP218d%o!PLp@qx1g=Gw-rLBrpNj~YJ_(fVTMg&v*SjD z@E1I{YB=Mg=MPO}u2&UCN~%923Hp%iY1UR5W5ny2unI0!41jexcpw5@n7m}8Etn}f zlz{J_{U2FaL&TAFdoCfjLS(v(TEwwdd_ULO+Vb$V9MDxE$@B2(^ zv+2$WCP#z7dm3gn!+-}!9a1&Lv4c({A?n+ytro4lZFu#>ygaoGig=gPJGt}AWJcNj z!(?hIe~oX3rEUH`{G9dDNnGY1{I?R5L1?|*s} z;X0YlF}i7kg^C)lKD`cXkcz)DqZa?TC$8$|v&XV#Uf-|u{9NW4*pQBBrm7p)CsV*5 z_P+5ct@4PndL=@|Gi$0m&8DTTTVT0Fcgo_lN_IzpA^6kdnH0FlM*meV`~VC%1Vq=9 z(g)ff7PtLLvdAh!%OyHrX82H%HEEsdTr%ZGX|DE?pyz zbXXo7i2z39OgqE%cuKAhLD1Q?mRLi-fu~za7cgcL5?|F}MOkudXGE>Xc^hfIWKCK| z-@i4{{zGD-l5{jY^s*aB6OLR5sM-C9R`!JOrcm3xw{wJb7c*NI%;E6f6K1{dg6R$Qy$r`C0hyR33fO(}pO z>_O=j7iLXGvb*P=XZu-g! zgixx$DQEq_Ccwy#qp#Yst346@4UYq(F91<`w}&JwND5yaw*2okmv88epIP_cv!=XT z5;RN##BRUwaWX&PqGJDpp1&h0rj7D6-KaoCcq;-`496Pn(RFYbrJ6u1?V6Nmk2jya z;7Ia^!ic5Zt0~1(W=Zb)hT~a#unFreI=J+bJ$j@f(SYR7*wxCq-vC&oN9y}$B~J@P zw0Q?XLdzu_HZ`10c;7fDjhYxOxLlu?C8k8Y1ARj^Goqh!tY1w>_2sf5Br21zm*#nA zfH_{P^Tmzw=JmG2Ct>6VmXGV52daK(xGW4dy>a0-iEc<{hsc->|GCZlZbaGR_0q8D zKA*Q^R7T4?cc6T-wk%ft{^1AzkF$oQp=r}c1+ME(N;$InuYRAq1xT9&0^YiqSTHWeIU zueHxqK1EF??A+rcjORE)BN?qL&4laQ9NmvySV(`3)MgRFd`~J=!twgxNuEkvs9b(UKJEy+jvO6HF3e6-d792M*QH zNQ@4E)9e{d9aw{05{t;*)ZSYn9?LFt1Cu2Zi!9@LYf(*LyEc9II=2!H$JIbAADK|U z3kS%(yllauu|mW7y`;LYQcc&OVEU~8$eZcfl3X9S2`T=MjIgTvX$gJdlOho#`Dt80 z#gnvgR{}^9y&f|N!|9@x9%*+z%??L}fp{W0`sK<@MT>9c#h)H{1hCEbfi(im&Z z3(RB6Y3VdsuU<{oyb1F}K(%IxCpjRc$d|8_hLIE_H@8@Sl(uaIMurdFaGeXL(F{#T zbF@eoiY<}9AB9`!Xxz0LBCMS*Je`o;)h<#f8ig?reYKjN-eI{+^wt)Z zYKBR$oB2QWyYmO%Jza6@e!fIn;U3jqMEOS1g0Yt^W5HfX>2H6Y-u<_YiyUrz@hx&I z7d3?EA~hwUiEcWEBiLD0r)+3=UhXuoJc-8TS{oSz`ZWB5Qwa?QglN;D+Bf zM<9LOP;Qqm2n$;(o4>3mB^5MlliqfV#Kmg~?kC|)bQ&@5s-(@GRDqH6+cuoNDcU0Q zAPr~LC!!w{-TRvBzK!zg^o>7AA|(R#nf^BCF->&KdYmd8ttz%ZONu#I6xWk|SNRQd z;L~Z?d0^NOqe!w84h{URwwThVoXB_oSLIodAX@?Sx>bA5DE92_vL$JYgVRL)eixxQ zjq3c0u|JA=KHtn;_uDT=ZkU~{J+?!})J6qo%cx@IZI@**SL_oigCXA> zkUT7vcrRE|pB%SZ*a)9|)cU(VYu*sL0}$d3k-cr-_D_^jsBj`hu4?QLAk z)s%1?OYPesk@110?I0V@fCHQ`eK)&Bn%U4%maZR)&X7L|jI0u^BSm~=Lgm*o&ISLA zJiKj*dt*b&6jm^?hTM5Fn)pw+QSMdUsY**9?2_5|Oz8rJuJf>Cdyg->Y|b!keW1wj zvIPGEl#-Vz2#-)BiPA1`^S_8AB&QkzGx|Uep>c@n`yZK@eu|%^PDr7i7vuC2@ny0| z-n^v3%{E8eXmN4k(e#q!K!s1$&g}xwXM^UVj=K?u3b0o=|ANsq2#!C$?_cHn-6~60 zqNHoW?V@s~WH-Uc!8ZwJ>CVn%Hzt$p>@6kAwEHXt5;re((w@(kKTV8WuF;IIPmF70 zKPs;BE&gYF_pqUr@(T?7NWZ-MoYm_`qs4j>pV_;`l-t`d$*V@DPO`ZTPbA@P-;yLz{M%ue;}Pi%fq`LnnPk z!je5C!t2$N|d9%5eVhM0j-DAWYFo#J%?o2GcF~%-koGi{H{;+YLUejS5OQ4~x5O+!|Cm ziQ9u$0JH6IypWHT``GoGrg5;8`}73*brfGzTd&x<6Zbu}z+SK9)zU76lDof5QEcy< z?091}$jbK_qis7@qVSGHqQd*-&!MM@Ty)Gq$>sk0`k|L?XuT|(1`vD0_A4@ zcCK(zfSi4@_?EjO%>!E=Ql@CkXRm4yaJ8&Bnw1gAYrf_u6zVsVgHN9}dny%r5(E-dqE%WaG#-NJIB zs;eF~UiDS-2rC?*%=1h*(z z&McoeRX1g(83TmJ=V(a7ONXSi$v$c_iTQV=&ia_E99^u3gdq>o-snM&pZsWRxY>iT zco!B_&A~ccoYLR^Odd{!;LEm8YFPc~^*M0Zvfe3nHD1JDfKbW!nnWr1g~Bo|?@X&u zJqkvxno6feKVVJvh)&t`Su7b)j#Z979*T)Z>Syjjz~b^Khg(Q3jMWusylww|8r&d_36KK#_p|JIKI=+g&#^n`k+R0c=tPaH5wy?Yck z6{nFzG+8;r$X`^7Z2TM+1kODOmph~)@$8^TbzjlXvR7U`HQB6e=8Nk$o($YP{=$-< zim48p%qJH~Q9FwHT0bYcik#>x9Y^yh1tV@etbDEpBHJSKlhp3@vibLJ=NvFstF2s_ z@?r!byIvWi+WSp*f1Lv`T^&rm+LyU1%G1}!Zoww1q!fJ|OqR6H9i5^aB>P%xH>-4; zF9etMHK|N_q+K)1IjT5%T7IJuB15!q_Cy0e#}z;zkz4?WY3&yDgmjth~j<#O#K?XXs4L$Clj0>|P6HYG2DdbGadnr*G0t zM|~J7v^SqZtymVosX(l^uwzo9YM0{7{96pWO`c=+?L@#K*Xf4fycc^=$xNKdGt<^M z!&<2sU&F}vW##S3j6}P>BFVR=yY|$N){ryjc@w>(9it2(B`P)*T2y2!Q1wuS6yNQG ztdm5vrS=9%j#i{j`;|&In(Gr%j3-s4^b$IBn}D?3Ztb}8k;(MRy~W|3Em1a&dvuZ%PoY!Cq#E$2R=cN-g4106ZqLB* zx0|)?>#sGp>}-ciY(1XJrj&~2CRFGBX4g~j(t?`N#yAB6kZ%n>QF7{mb$X9l*<_Rw zXKU|5W!yDeB*HzyX#28@kkc0f=ZD;_cxx_WTP>+g5wLkz`Qv!|-+tY3o#R#5_lw?u zT5Io5JB~?9CTXTKLF)D&UQ^IfQq(JHt^u&wVPODaT2(zMZOKHTRH>YsK{cX@8Q;R< zr|vw0kGa4T4WRqZF8o#2&6VY#N9@7t;k^*y>wP1y6M&s&mh@$4!V$aq_S2$`gi^eH z-n0I|twGn54{GJ>PxdLore7lROfcF!l`z&@6xPwaGm{Z+juZA{u>X;b7afQ9Hz?j# zxb=P%yqqTU09&r3DINB4XjWB{hPGSUJ7D6g_C0OkoebSaPEfaxEIutcM78m{0u|4% zck@NB4QLxy1-xjha|)z@AR4ty+nTbc%d=h)ND5PXSoFhz}Sh9jx#`U z1QFHDp_ocYd^3q1C|&gpdPIbu@g&~{JLQU>H^HRFI|oiv_!!saqvC2+ z)Ti3gEBvRVEx43x(IN;4${#5>W})369iA+AYL$)$t;-V{FSCn)UetNQnWF8b*LuPV z#yj+7#kaq8zyPm&Q>gQe(Pf3BEJQZ8)sKULKQbH+Gh~NF-~4J`QgITb zObq>|9kqB8@tAKM`p!6UbiCSpso856wQH^u)cANq8^h?ggjan`(6wTH8=Z|N z_|d2(Uh|V!`WsOW!%Xs&3ynMdryMhzBoc@Y{ywhYJa^Jt$)@F zgKEL)?g(p)ygVi21*#WvPg^d^$E2@M>-7R%(^~~tWH{&AE+oMyIHRLEVKZO#i}Xh8 zr1VA9tEv=K>)P!g7Z#h6;t-fPyO8=49jYY5eoANg=ZPH&Q!;0)gIhgnJ6Vkfb5F{M zf5~ze3A}pPAj+`ghVXykV*RC|%o?-Vc`Io+2u*p-5N*fec2(7uz0w}H^xz2cX@9Hk z=qVu&een$LMDg-v?%*ryoq{`rm^Ogyu*GffLivnCOPNC#4%yLOj zY}461@5QmoT8#Hv2n!4Bw>}o=x&S&`8%qjtJJ-1!+k0?-&2j_>l zV|_Ur(Io?oyj<4VHs)M!PDWW^oHc|bi4x?AyPxe4hl8R)i=Fc8kQFnmH2|TyclI;< zW<$df3d-J_HC^R>;PFH6NmJvPsQy)UhzVF-_@`gbJ}Ad*WJ#G&5PttC<5g~bt6gU( zXI_TupwnGkgndhU%Erx`V>gmR6z4x4WSs%m1YgDF=pHJKmkIm1blBZ(2YKi-*IXCruN#{SiUU?Fg;@5)i@2#%s?q>~+R=(7>RvkmX zv>!6a)v#j7$j94_NH$Gc(CU6uAdzEQx_%;HSjQ-K!VIr{T%5R{m-fcAYuayt@jidS3L%)~o{rc&X z@2~i5W_?T={_)oYjJDFRC}+I4LC0_B*`w604MCpYKMuRn=C(xQy0^epS+j=$6}x$l zp}py{)`}eAg;5%y>++e{Yenv`fQkM3c?-U%@0s~-4iX)s{s*>0ZiV|$Au}Hh`{C8f z54>+>t0_6M&RD@uw`+n`pO057G5^>VEwDhjBiO#SD0*VJ#dXg%k@}WLjQ=BxhM~uu z6CCy1lXgcb%Jnch{j7`)c?y_ss#mAw_87U4Ura*XFGt-YF$ptY+T{M(@=r4@@3C?G z{4s$wbLeEDyc^Y=bCNO*=f@#dSOVIyVRke-71dTdf+jj8jix6>i!DCynCCg1+rq#0 z1Tl=lO~NpfW@-i2A@?hE+dxk`S@6ifN~g$@rb3B{*2LF;+g*Wray?*~_O>w)(vDHM z9IZ9~!&-vhao_CL`(2ARW!zlJZrj}m!Dok9STu2}e!2c`ks#T7BL#95csFiBS5L6( z96@yMuikjC)tV|aN>siwllrx5Y-{sNi}1x(2t}zE_D7{jZhrx*!aDz5Nt@)#UvwYr zz^0K%V>X2Yq{(t)WYyZ`BfEFQFyi*xw-RTJ(}WTaXp1?B7ao4@4znf{eBAJCAbP?A zhx5}yFV0|N^f*DUGJUd;PIEBM{{R6PXjdvWJ&|ewCVf&l1ILoqYNchDu8t7r5En;ioKA4&`;(0_V?l0s z2s4&+r@pOP%iR4hAi<`fy=_wGdC|5j-nsSr&5(Uw&Up?q6{h%I{kaLty0snCDESjz zEK&5@`mnu=_NJFrujO<`;p~ed7ZgF*Q~3`Ry~g# zfs6!_&25p;@z#-d`DPmsw|JD%vs^EixUZzX*3y7%PO77AhM?N=nf!PYLdjHHC-e0D zodL?!KtM)Pp1++}m=Wwe|71|{KnBLwF`_p1=QX8ZImuj_ns2OPyxJNU?tlPai0^B&- zsImJVUa(1CErhO{*ZNyk@_nFGsW0V5ZqpW5Zh5+9%wE*l0AaNBKLh%3xOPk9ec0!4 z)>|}%QaYkTG0J{Vg16&M9*}+=ip#4)eI}LRh@8QI4ttky>H-6zYk z{w9PNwOZcY0DQg?04D5Z|Kq6WashN*nD5wUkwo^89MCR9HeLVNe zxJeJ&8Lscydm&8O;HMWpA!0Qe{xLt*SXS~+)509bIwmjFnAqJN2$-(8 zP|3H$0WW$V$g+2M<+?w?Ft#W%HeT!tFIrmIoqt z)9`iM(WJ3JUB7CKA*!q1(O_mt@D@|;%OxFWGI7a+g4c#iv`!*V+9IZJ9E`WQh~~~~ zZoLq=i#T$bsG{fTR{7$=Xmh5LOS1ThAMr2*1p~W4`7N9qU0ciYs%fwC4=w3qDYOcF zC~^7+PO&YG*NP5pw(pJFg9Md(`D+ufA1bvuOd+%K;O?s_r^%~oeVj;p&sSh#MwiNc zr)Ys@|D0H zSCXypALOx!llRsXsh@Rd2>^6~A-94Z>~og|3gkPKW9P5SG_RTJ)|it>7Dw@z&VL;{ z{%7Zxq~y5*4$q&jFus?e21nALz45Id9zrTk73p`=TJmi)NfWr{D65ZTCPV`To{R*z z1rcN8+({GC8|hfd3I=S`bt3HHvHAcz5q~?LOWlOylO2iIPzvGYbYIP@R<+;6R;#A7 zb=5;_edby(yBpiV{wI`E>x-zifn<7|n0VYupbyT>R1)|g>M5pr=wdV@(hdMGy`y63 z=Y>|WokeTDQk~l2j5^yv&HhJo7(e=IRq1=J{F_}{!OLxgBv1nHSpDZ!{OZ+q(d{LT zy~T;1{G3AixHsI3$?N>Oz*|!guBUj3P|Wt1^7Hf41MCp!x~{OGJ$)P)5pP6Wb-1g? zueI(WisB@aP?Rfew$fJLN>-P$H}X@+&F%Y?F|hc#8!RYg-`585s#B%ToH3Re-IJ=R zu<9w5sTd;l?%GG5ez|UHK__1M=|9U@Vx^hWst-RCNA5Tgv?tBJj2G0nv ztJ3UF11qhrkKN2x(C$?E<_n)XLaWuohSJlI(c0Ye+~oYs)tapkg}@6rHmAkbjlvnG z(6snGFZf1%v;sD}Mw26saE~R{ssxvX`1gJyMFmhA0emcwNJL{ zxDAh4I#&k!ORvru+K#8AN}^C@csN(dHe*KSyV}S2!mZm+$#*TTI4jeaA6_d4TgrUJ zjzy_;QoaL}VU9{HamlL-m!gQF{lQ6-MWEMA;%RUL>QUSp55*o(cGXViwaQuM&ikg5 z3@rE8|B>BAog-Kqy&s|iJu{k#FWWlseRUo(@&jB=Ehgedar74_bm!b|pEye7HOgzBc;MJEofmzzr6C_{7WIAceL@cl-Iz{0U*OGpti4 zQAJ#_HcEzg(|-s{gM_G=I2oCbuLE0ToBZA|DEr;08qB97b$<_EFDC?1+xz;;w4GL`|coZRY4$kS;ehh5gw{3yWh{2p3G%uEc@xb%*6 z`(2z}&%5C0i#3JzIAs+Nt^HfaBZ7VL`1q%@y`=kI~)Z1o|3trN0FNT14oomZHyk8Ml(us0Y?w^9Iggeor=p^OyLj- z$7N|f!Hms2YI3P%jSLiiQnvJBtsYK=gkNhTJ4;%zAG%6)zY46i$btfod&Cx8lpNZE z$X{fqVn)M&;m}HTjb8I?0;lF?O)jdeX4UsNcB}_k3=e53&yrC0u;jb@%AiY0`z$xlC=lQ z8B=;SLt6E_D~ZC|g=#Lci9g(~qR!gqe;qm!h2oT*U)r|>&60zBtvO>TT9iY(v{YA; zmhX=1SX6mS!$_XNiS_zCRiTwYgu|bK5Sk*ZME8Gx4&S@YY?(ap&*hWAIGI%8$`W?- zLq9Ss%5tmMc++gpa~@|p>c0c|+J2~~Q=uU31=4Oi(x@rKePpu|eL?K4%F{yKh~Bp& z=U53~`Ll^EAnA{4M2PJ5c~<>C1t}u4O`j`NCMI((u(lx>dT86@$#bAPTh7;wO844@ zmXOEtH(m#m|1}c~J7Ts?tLAd6E;eY9`_ubzd-oK^_Qsd_qENSqVMFupf8stFoIlv5L7irr&YVS}4EIe&bGtnAJS_02oOp-5Aga3r%-hkp}n z%UU>(pR?qqAFvwmngcwaZg)`ul%VU`0~RV<7$ttYFdi-FF%_pKLiiE9GH~i$U@&z1 z(KpEyF3g9Lt1QokhC{7dtKm(N?Hx#(>%TTi;$rPIH`LXOh;kBLcS?PdtlpvSpm5hB z+IQr3$U68IF4O1TxNOmi#tX1{`p7?${P5-y{c7CdZyZ}1XqX&!|GQCvigsOn9C1mv zuRO4V?4gUBN^!ks(aEd2+vwJtzQf^1c*}4TToRt=nqrd3Yi)6@O3I?wTdb;Z>*vIl z*(+ts`7A8bJCu-e)QTfXi{A9nW~-01DM{!b&J2=Pj7>VLC=rb8yLn?K?)34x{J`La zZ&S>9A9K^y*CLU(Yg+5T9130qm8r6GC#d;cfnD}~3!T|Da1i1s{@)E*y(S6$PJk%Yf=2;OS<(=Cx$nca&rGpOW(QSDvupNC1Iov{>CLsM* z1%$vCKz*mH;rtIlLrcYdX&xNOeB)YT0=B$2ez$0vavtrTR#UDq$4FncyNb$){cOlu zwme+yF-A!Og^o8~uyFlM%!EqBn-y%|lSGHe?$-Xl`Zko)qA)8J8^HX-j!W-Q#0f2uX>8C`C` zlVsg4y0QD-+Q5!}h0RvbDx}8-u!e})XddTlOdnPav62K`Dzwh@^Be6 zpSg&u=n&)_4#hpZtPVEWoBC=Hf66I;HTgH)m1vL1lh`(So5;=38=-Ff97k%*Gh#ra z-wvOI8cB{r-8|+tYUKX06c0$&?-yqc>pN=2>|Z%F(xWvr0Jp*o*ULk`mb~f?QahfB zXlopWHcN*hx?uNS4B#DWzTayFZ^QCOVIm?;uZI|0>+P~s>BB?M8|>ic`CHzuRyGKR zC${gFVrG);Y%D-s!dOD)|?ts8CIR8}8^kej|UzM#pbO(SCG>1{)?@R^L! zH@D{`>$)Va>g*Lmm?di0Lb8G9^_Ik%9^?Bv`vDYreaD#LB({D>4TRtjuRBcaN7xx7 z2o;LT5@S0Tbx>s2`GUS<_Xq!m`nRLE2|0VLFxAQplYrep8!0O(_JBsKcL@+Sy>$^7 zT$`5X6YuS?Z@xysS({4(13xZ6YD~qjBk(|rXiovUaL2j~_1UM{b|*@o{Zq77{!L96kOKCZy#Q@iMhFiskR@r5yN9mw^0z?&03<;oW$5^ zSaH(JTD$O;M0sFxget*=aBLNB+kY7dzsqZ+X2E!{LE(y;DEDK zukRmWq+)C(#cVhXue5X2Qkjg#6(5;L&Pa4UKV4_LLeF~ICmpY~%Z)PDq$t*2;8V?C zbZWj5mK@Cj_A4f4I*Rm~fdB32Y4Q<482Pmivo=55RZg{-EWj7z&Gbrq-<*Ok-(Unj z${ooKZ|iM97p~h*qbv#ll7DagIJk^i+Ky8va^$5>esvvLJuT^p`(k$TBhT3(c!x05Q`(d|~;4Smq=v$5QO;)aAE{;D27HDADzDf=tD$yW%YT#Og(RLh#{o7I*o z+as|IH^J!jNodiQ?ZPX^`-JT~EF=FTdv)|5WSS@V{hYLgh|v=DPuU*`y1~sCKQ_!b z&N{DwY+0Pro)=G-S#fCXHm;o+;{_f5$!KXcUdM0r_QX)L&Cxz;Er>IWE8G&7T1UvY zJc?*MyolOk{NT13oN8_Rgt+d$7?uP*yMR}ht+qe>mkd9LgZ$Z=8xhcx0arWn8t%MS zg@fLZpdONz8`7nUX14Zu;E^?xAbu8m-)oI2kB3VS2^?d1az}mCe!9sFSnLP4tJHKwIQF25uA?KBWaQ8iz8Ov7^o09o1G2~fmA8jJSf?YMRk896 zHq|d#T^b3$mPJ#|SWNNrI%Rz%fkwB*QT$kEh*V##-uw0XNSsAB-v{O0e+gl$quq8? zxN}UmSsUk6VRP0X)-*_5`INoQXx1@^#kX(6;2B@srGKxkXhD*kh=X?Ul5Bn}%GP7J zz$l|36~tw>+%#{|WDx&rza>!7E(#$j+ai)ktnpfZJ2<&<2es}FgL;2<<|8cs`EiZ% z{r8^+j3v`~iZjg-sw`tnisVoWtWkmxRzZV=&%h>1SK-(=3s#NHDXaveMcEo##HGZGH$!xDynfDy= zaG0%U;m_g6)7QATxlh;K{^QEz=gRVLv{g^}xX{Q1l z&WDyIc#IO+$})P!oni*PHJHmT zGxEDy4lX?sn{%mP>7?2;9=zSDPkg{!@hJDZH5l6l>QH{-acW1TT6B(CP5x7>)$9Gi zlS|HvmH47vp_q3_54ABO1)aJwCY{EyA7EX(W^bs7DH(3`&!JOmp!Vqa;B1W6Rp8^7 zPx@tgj^^gN*+>0>hul#QNh!`ZVEurEJo)VNc3epq26zVft$X0}>v?kcSMJ%@^cwHT z0j02U)p43C`qJx4qMn zk-m62Q_TO{P4UTViTDTFNiDt=k0u(SDAIM<(>>xl; z>Gh6!XL-6P!Vv*93^mnH0-)a5$k?lFT4%ujhOnL8ah!+037;E&ojxqKHb5TA1-C~7iu7+ zDG4$>!gItMBr`(*U$*rDwaZb3&Lp~)Kg&@xiNMEkiaCTC$@VG+ttY+;6`=NF_fz0I zD<@9&LKK-|QWNK_x@tVj$uX1D`#^Zxv`mUyP7OX*1 z4^n0x&fb&QZQLS9f7$$Aaz1;iRINIv-*p_d=;ND4`B6;jitT-VEhMVzLqi=6{lVQc z4a8DQS{rDA>r;`b{AD&bmxShdgP7Qk=j);42Y8`iTWM1(3-(E7K?+g>o2F=0VTPzw zNZr9FL5T2}URrdtBiTPD8xAED-^re?pI52EkMc+QH#C!<TT@}ouClNw5zXsVZ-|n9&-!?mM zle(Nslvr0gH$E(HPxsp5$P0Ss7DGx^t3Fe8%69hC%#5F@*0)ENd9{mk1i0tSmv>1P zt{m!7%l1JO8OPS|6Z>tMEhN8PkOpGMm)T!M2?K1*87sjM0gR@_D`c41Mmk z&ULmyR3zl>oel~l^C!!nL_0auzU2uARrCWF-DAz(W8;>?ig(3$oJd#1GZzw_T2Zb>r9U`@wjR+8B3h!tXn!mItkyZPViFsq--&p%kl@=pDB?@ocp^>zM8mEmbLdKXQ%+ zLjN&(Ou6GYhWK(JvR&P+fHqmtuh2!ud+}t8AmXrZYleA$(kvCK$!tE~s1R;$(1w z7MDZxLpQwcq7`h@7&f+%5)PdIOq*2*N{K&yl+~N|?a_eHB?m`=C5_bN><(DUoT9X| zaBdC-JyJ%KY24@9dz4n_uc}S@%Vje)V}e;Wcv9*&_6!I7E^Fo;#*eRk6Fn26cKkKb z@twO5FT{%PEPr-@yDAzm8AOfOv2H8{u7B(PMW?)bb{0M8R46IO%*6iDLeDw6N!& z!E71aKEBx~wDTW*M^`1Unua?v!_Ql#C3CmH4d9U;S{VU`371!5y8}SLMg22Sy)iIs zUo~ZBOe8ba!6)Yz^Jl{1gc!5tG0Z!iULe7p$9=fGOY4t{wF zx~I}f|W9ERD7qW7Tlmdp1OYe1Mtm$FlxPq@Z?hLCqb!&eGZ^(U3f#WdZ#Qflia z>C&_c8xvg9^<~!zxp~X5M{#X8Iun)sC?`H==b~ijz_2g6u1ht#dOcqL} zCpC})<*<{Jw*(UK-gh)noIH|WaB|dMQRDgW#w6oSkm#{kMaEcYARFo`$e*`TB>b3{ zOVZmq;IXcrrAT#$o`qSIG9xWbO@}i(9ItM~YH=ea)g|8qMCrAlq2lILVmk>VE?Nsb zweWb8I>}*oV3xrf1_NRs5Vx z>Ab|@5kdrh(L;;B-k)53n2-ChHJf<|#Cqm}9NZOhYf-al-n9bC9^75{X$I7z_&CIB z`logqWy)Gl-6mB|n0>%U_#oDxTRn`@dTu&>Qh$jB^~y_Y;3(X-oxbbehw|-v%;)eQ zEzjv@w|P5GqJ8n>;Wj6D2K(AxuLBP3qH16*daNPxZ-D%9O^b+J=nNEZe?>Lcejr&V z#_77cMLHRMr>LQk>609vJCJXqteHDil=B6{j(!WGErqqo0bZ;c$$Q`uFV)B=+h_9= z5i?aohm_S8hcH`3E(Qv8*3#EV)*96G(f-Rn zHoF82$k?e@o}1azr&o96T_+vzSM87YoYq%~Fgyma!WWyX+>f}! zB;;Ibr7yPD(Gz*poe<`3vd~!lnq(*_P>vXxR$_ej3HulE@$hw6U1{C)#dP1FNn^uT z0?~zAo47e&p9E@R?8d)O^K$1UQe8)A(hN3iUO;EYBCaU0n&M6lkBAe9!?EBsH)KLV zpK;UeOP;r+v+wJ>oNCL7J9+0kZJ~Is&To%`7AbDLUQ9W*Zf@TISYnD&%A0Pn`UkvF zE0Z~3he1dKVf~h>)<@3BESH=PovB1yZN39efyI7tiqD&lYG1*)CVb#dW|#yL_wq4H zP{5EDUP1U%Nd0;j2fYnfjwjY z-UB=0|8mb^^jE*NEDOlI#EKmc>7LsBw%BA2{MjG~c{+2@**?Z;P_$8E?vys>$%MMt zsd1>3{9{_5;W-Zg6K1su7^J)%eG)&^WGR_4^k>MW1L1hFrEthRalZE*hwI8fcikv# zxyNNx{0b7SY#=twk;D~!Rlw#sL;oI;yA`)m_qd~WvG{~)NSj6V1m33<<7EQ2E;D(@3zu`=f%LQh;niCPZ8X1qU_}T^tZZpdFg0Rqbl>)r9*i8iQ?Aj z`5SN|n;T67(5ros=ECE6CqAwEW=_eVA6z(n^rPcH6mVyX*jZhMDEhDUz2u0)^I9=1 z5Z!$ljn=7iDNSF4_I%G%6_6{OZ<&cykB$yUoZ@N&YsJ4fj0QyCOczey_iogM)(tK) za#c(3RUf|Z zxwDsAGC;zhDW5KC|MZvV?PLOV6>a;KdK4FT;0QzK>#}M#9IfhCa#zr{&h^EgNs`yf zRVnD-sy;=-!kNd19lfggkAJ;0ooKVLlGz3b0Dlzl(Sa|@^zCEoz^~I7-?+fA<$(ie zNbYniP1$0GS{5@tV@cV4^ACRiLQCb^4Yfc(Q;P#7t z9TZ7swaVpcH6yR(7#lja1KK}Si}Grx#<+osK>+)@$(`onqBwcFz#l@IBiXd#e?GQ;1*#V1@M)U0 zB}2V+^4KA7C2Xl8ad@=llRy;*g$&&;RPT>5sYU)12_l#4c1r5{9jIUtz&|6E8~mDk{wi6)|T}@WETl7T0TbX#slPae|p{rxev+(i(Z z27O=z1PmsKk+l3BQ`*s8dMw4+*^3g^(&o<(n{bgD=B36u<@u-!vcy^d08IA8#HH@e zggw_rLjwURe?@4WWKiUvSMLo(JLqPk11BkwWq0ppq{p4k#nnBj&*9xRP>9x8I&F(%g})5MkMb%WJPgI`1bzv`eH?p%Ry| z6GnFw*5KP5o-vIuF>TU2M>Lm zhsuGnO#ykBH47bj`WYIXprzaC7KwO%jpESU{P9+fX0=G6p;(iiuXUBb4C7hnp5T$3 zmWUz`XIio8RkD?-hAsC$77f zAe318%KjZw{$d3G%*G0nLra6So<@h?tX?q_$aCU2!8}~$$q%p2e$kE#Ht0lwav`>! zeqj3)f=n}$wYvV3G#6ke_H|M8Hh#Xln|nh{NDM#f=p^HN94C-;by0?fz6Zp^?|s;- z3`S+>H=s7V3;aK$lf!Zq7lo!gy#}b4lQkIVhjBJj1}-W`6%7S-92j{<$5L#d`bJ}kL42&fR8z* z>kz#lZYvOLJ&LgRH<(|kLC3Sk0!;9RND3n~tw_IdppK>82nRW9zaV*5**}baI2nB^ zb*QB;3!{pD3tQ|O$Z6|eyMI^Z26*wX+Wa3*PgsMI<85a)efX`gjD4!}Vb_kL*BaSt z*qboVb7pIyGoj*$*{@-KNKgmm_*ejuzQLdG+0H=%Vbo8+j$fK66pA4q#VE;RsF|dzNkrz^EdZc zJHOx5)lJmuQp2AW{aW*vfrg%UoJ9t@>c{TVwAsp$uhlqR6a7r(o;_f}I;ul#H(-Ii zJoB+tc+Gntu%sZePjHlk$yV0HQE2TqMbVxXaheK!|87>4)r`=PuT7;S)5TQEER`I zcU)G$X$Er^)%&UJ%6>MAvAr#Ilv$LiLX%>Ydqkuk)uUf8(+lbua(DeW2n4M-_q)aZ zh{2}kDq#&?O!6r0ShSfeidjQu{i!(VuzHDWkxw^3-9)o$Zr5fY^frafcq2QD%)l(~I% z7+2kpDqU?Bw^-$AIq;x$%64@78oQ|Q*Y;7@_Qfp5FH>VxTG&X4pAh}ZoLj;Jy`|xW zk-v=`G%htVIUQHfIH2{8%({11wUv!|KNFNbuvlnc35ZHP19J2Y+#hJ*zh>#kO2jWi=5Sa=sHvDy@SpI@>f` z7lq%6JnxG4SMubmL+3e?^t{~8anmgrX=uxkqMavdafaK~SB-S;W!q-N zTu-&=O0hJX=4Y?s<;A(p!cQ#LPP`c1O-A?P)YG|=#pJb_NCQ`&geSejp05Na70K1* z_)nD?WdR!A6!dX*AkS0oy6xme`Pi=K6Ao!x*0xyJu1`F|NJpbR9mM@w1l8TW`W)sr0{W6w(9j%Xq{cba;`^kZDJ}@)^u5U^Y`Z8t z|B2q#YNOxH3kWO3+ME;8djZLK!X>$%EJCc_cn&2;uObOI0@&1(zW#&2u(Q@EiluNk zVt9fq{ypE4*r>~CT-L!Dl5kCe-mOz-g|+?Ltz~jT6f>5tcB{*@_S#*5#S!k0O*JBn z)a*igsyKUw-Zu8L|19v`T`3|h^GBpO5|>nRt`pwrQ+0Dvrhg6_9UZXrT5WvGVHt6W z^Lj0iDR8oRI$fpA+i^^`1+{cY?&;-ryv$s&C4BsGG3b6JzqFW+Zkz4dIscAV^)W}^ zcjvjUE>Uia6|RoV?)y__jerO+6?mOu;)}jvx_dh_y#DO`P|r)yOLtRjGrnz!ffLwi zLegpprmX%C=lRn}OFNBM_9Hd?)ea%`t|JL8xVZ*cMv#CyRojq4{bPH2EzW8qL$rrxM_lw}0wgqaw~}Mj-Jn+|zUIeLuY$ z_8tihkSH`BD6y@E{e!f|@bBj|d+)E5RZ>hS-G9pGN#W~;J5fsoa1d}ijv^l;JS?4C zlS#12kvJ}yk5xHRqtdpV~UG$b%G(^1f>nb=(?tvB;_W8c?{L7+OUS7^vPaEQ)r zIB-yFTRr$Ev18NUY>IF3eBX{X7Nu(i<`0hgGN557bOm>RKD%A6Z(*2WVfG zGdwOUqbL%zA>YaMvQWC*8VLjIEQTtn4UIox0Q@O5L( zjnxG={i#+>miV9NNMap1*cnNowKcyreyAm_JpGxT38lXbR(<~Cg5K7=-a&H6gWZbJ zAhwLI7z)mXFa;+c-NY>%1UxhPlFzmutp2!^Q600>2n=5lpJ_G4)@CJ+PPcMyb=_DV zBw99FjUL4=@fOomZs47{`c*X>uYn!AxK|{-bKR`#?*B zX53US9wNcW5%*0$*<^>L)mlZw~{ z!~&)D6NVhHVnwF=Y%R4OAV6Wft7f3wqGr%2(|=jc8#iaP?We`*#vs)A!+BY$TEbjC zGEdvB?$2@8ZVAm!6Eq?{@YY68tAP(FQUoeFjVW+k{2}e+yCWIkESqT$=Tra3kaO=l zaw+aybHBcY_4C5NW3T2AZ^hOD5uaJhdFe|$#-zLQOFtQaY13r;=!#*W{TB$6|J+)3 z`!r_cmZggqxb~NUB-BF73AUWVGp8Xvia6ajsUpGrv_?B7SX&n@85+Ko7fiVJOZdC= zh;cVNrxdCwu)+{=>3mvazxMFffNKGOjCDA3aC$!AT4o>_vGrZP0o(`YcEA2yUtJTn zBLoz|qW$emhL40l5;@Owf+M&;vByzc);YBL1->QhL;Ug33Y4YpF+ok7Js!F+js_Z?YW&^Sm1~wYLfjpprguU!nGJ-|2y{5I_KkOl7Q2{p}Fj}7l>k+Spo8}BYKFDogh*!Ae_jV1qg z=MR$FMOb?o9tP9qa4U9@N`?M|JmHd_wnd$Lrz_Nfd41uT3$_j|dbsc7PhR<2M_sQF zD$Od5vo@wHAWiG!&P3Q%GQ2rH(%`ux4AF*-l3a8JZGSzrC(pzJV8X@p~okLKxI5HJU3b4NaGlmtqH+p8N$ z0=CRj?g=Dr3%iwX!AzF)T%{yp+1Mr7zdjnnZBek2U8dllvffmoKvUiYfHp=8B#f2s zQ|Q@<7nZiyqtIw^-Q|_VswH~&N&aeW{5MK3Z`_QGLVsgxz3@zGWvf%VRM<8hmRt0f zKA3^L0(dO>YUn69T%U<{Qus&{Wr>eEmlVvT$Zl{pP_xkU1Zdro@1Nx?oLrj64~E(c z0p}+*>LVWA?pxeGY4|hjD)$`lj(P(w=$@&+P~rR+rcOppeOo{(cH<761k7702>yo? zZ&G7iX#b!x4L>?8m#7%jaVtuFwkc^YCh19WoxGm*Fl}u&A#AKg$`}8u=M=1Ie5uJ} zqj(J;&eVFSUpNIS!A%MI5gHh+TjpL5AAUzQ3f0FBRyO{n9T6zc;DG_?h{1C&+j2Th zLs^D>s%=*Sp0i(A?cTnLU*J$X`Q+sK>`|l_MSHE#_OLW_Th_Ol`5_L1k=%g}JR}Yx zr&+*+{f-KY^mg-7W6akZ!aR^72w~sp8Au5XC*jDH(ox1+33NyOLt zc%fK|Y#P=nYUH|qFf};P`^31S`nL}(VePbuEf4X~O*C+;;Vo+p^gJRgu4eqcRKr$>br)-nMv$w?a5K>CUJ1~TNI!Nq9!}dT?ohg3edvWosG1=_|AnQP%OlIkcE*>QW=HBaidX&xb@Las>y)AEzDgxEp< zwvm{teG{XPwnWM6Y7~nh$>5C~xI=Wx@@=KdY{EjtA~tFwHuVx7d?!+L#}7J`rJ~}7 z8X5=u-C=*uHyBH5`g{F%ws1{C)OA#1@w>@n?TNMrYgv2c?ot2x7KOXU`vRaXoPzDB zdIJ!mvqBQKGLpSa^-VzBkT>~VAl30Nmw0`QnsU%+d4S{k=$6B%{K&t!Hu%lOP2{cp z0|G$9eFxltQXZy*yCo#(xs8z_;>q1Y!{2}Oz4~fF*i9n_9iew&#zHHDCNM6(){^1z z&OW#7=^M4jJHOFFmedk^{tpfz?)!a^2B0l)E!k_;={`uBYJ?di=x{~n*Mg4tvc(^S&P?t|pFY39+G2UTDHG+wB>bLJ@)IvV-Y~|w zkaROqwY^F1{Ia-|#@6tdt3S|I@vCl3+=nr?1-QVd#?7`GTHxrtYhV{|f09~VfU-(j z%7|$OzD0lICnE8!%U)%oVCPAB2?fZjm%{OB3IwxGbQk;kI$TFgwYqC(Pz@Rpi5mB` zp#DxKhPlms9m2NmdBodpa*ZAryq*M}=QyaRxD4__>!V6LSjjROCUBXO_T5(8?2r{d zyV5D4#q>%~3Imy+1Bk@1 z>y6fn@gtVZoXbccuWIH@u%Z4Q$?&WW<&DqM2LYwBnjA9(AXJaw(r=>bm{q+xLTo__ ze6JP1xr!~3Mn5Fo=Rj>Ped`M3-9bK7>EE&&uONSYG$HIt6TajXcOLosEGa57G7ZCF z8smmCQ!#|yKmk&~gT{fE}08U=~>84a4=mW`3 z%zv-blCv^y!d6fQb9N7E!p-|2JiWKBm7=B9BOh%tfH^{9TRMB>(7{S)LjJo&zsX>$ zyjy82;^u76-XUT9CJ2*PBQcZE%V17T+;k8TA&w4vom#n;L_)^%4xkThP8Y;5jPTcz z2h&XXZ>^x;^~jE3q%o_6+&xX5)Hufc)~}AfS4tMef7wb1#~*i8V5 zO*&6bsZ2o27i_Y~DsbWGZQS(t(_uV0a(oXh4=eM2Cr8dM@LJ&v$>PJf8*w^g!^g0b zk8BXX;wYz+O6k|S`{~_t@uM0eV z4BpFp1c{_lw{nFDa8&+>!yW7@e1V%ZHCw3f9jHd+T}i{s4Tiy%`Nz31c8dGLG>tlRcwuth#pT1v|3FnOK zYd6lcd|e-RCEb;!Fv^=_eIF>_d?$VnJ0E$`Cpg31-w0Fou*rKl`-I+rur3wQ;rj8! zIIG~!8wKsbQ>+kb^z6zr4fFO7kK-2zZuyrew$rE*OYME(_uEAh+3Q7;^6X6@2v($L~y6<1P@>gaRlSKpDKPRt`o7sZut- zMtwdduT;D(W;QQ&Gv0E0HW>{uPKpKvj1g|vR3y_0dAuvGwf^IMhIQnIfG;!97fakt zPCPv+^l~kK!;U-@(1RF!8#o@z~_8|%7uPWvpqZ(P7&Y|*X`5p(} zO|Pf|baGuLB^KijV$!tb*_)3;PME?Y8~hOqO=|J_(#3!ytSh^GJFIU56u@tNmfRqz z3t+{ucRP9x?XuknXn56C0n7@tJ~AG49yDZwvtPsW!<$g&M=eQ1O?Y`uEoYbbcW2sx z0;NErtt1J!55S(oe+eA_@0(`Xf^BorWwImTq_l9@w=Hly!~oMv8Xs~sJ6Z8-iSY+B zHLac^!5HQWdh){Lc^CT)NF9z-M^MaZ{zb_2uKcqi)NV8~WP%#AmzEr2mKYr-QMT1!?NC zpWm8^3hMmyrIc2GR~@^Qv;Wa@03hs^sTmSaz1&GJ=l3;^)i9?O!4{YN&so_ya@O`b z&hJ(OtEMpKQx}KXufE$!eYgfFHAV!^bY55G$M{Y>AAFRZC1*=uIV)MRuh?+a8RwE6 zUdR5(La`PECL@9|7Z2^Lw*j_;Q3mK%+tI~iK1pVfpz zg&aw)757!jfLXXkva^8`p^iI@~ zKH`ooo4KL2u`kL0A5V5j=?4-%CYLk+;bq#}I@Sacp1ivDDGdo3W?_=hms@x92rjkK z-N#9427X9Yg|wphFWM{yG*$?+fH6&FikMU#z#M8g(us_QKx7c|kOB9 zn1})rHnJW5g#oLL+$cyR{U~1LQ^}-GC-y8q*-Vr|P&2=GMytAS%Qxf|EG_a5KcdD*+rS%`rbFn zB*?q6xNz<+y%Ac2o-55K7FLI|Y`9ZseL`1=wPUvGe4ZD73Q)j;Fn_NRn1$ny1xub# zr;cEJ2rImZiVn0i42}^o^&jqtH)Q=~ARGt2l({dXpA=TeyJ2@k@|=AW3vlO`x_8^C z?a(Ypxr|h&O0S$(@@>zJI|Vu?hPEHIe7e|2Z(jeqziBffP7zA{z7`5dIKTd;QzePN z-o6Ku(jBhxNxf`0J zr@AT@6(XH^rtf<+sk@4_v~1L!(OOnW6D zcOU?BNnb`SFDhCxUlG(>B!7IFzeB6)9Pq>n)Q}WVF?8Ga66|S^H4v{>XdM_fb6~N^ zJexXLO2b98f^R(S)*DEXGPv=`<84J{jPs+-iDupxHVz(KZci-DR{59+XciN4CgLNU zm(?J)o~iuILqYuKG_=*TjUAE~dCDt9vO{ir#33t>aykI?(p1YTPA|K4F&=-HLfjX; ze40ZXi>0oJ+QVAO9$rXs%su?m);2%U-&baO`JMih0Z5p9Y(fa7+Mq%b=heeS(s*KX z_czA|;A8}ZWHQ8NXJ-lE=!;yLcfOMK9)p|X-z(aqmR}+ev%~KMd>_6qT zW$;4PuqLUuq=-uZg4FjmXa4*l&@pk+1^>YMc{VoNpWS48z4Eucroti;5GR3$zC`(#hg)EW zMajH48Wi+2-tL-d4R6IHR7*~>t@MoHSw|n|5dgz!)UXIQGuTfN*0hBfDCx3(Ba(Z5 zwQTbC?)f8s_SY~l4|z_%=R@-0H*9{W*#(fN4@`GF?WLgoUgRZ7k~*m+qxf(8P4X*~ z_ZE&Cjgr1oZ^klGjD}{#4oyU;>s=e%Lho}e$GTQuIdQ(e580wvUUJ8prKmbs2-lQp zWaL(xzId#=ESbk;ahSx93$DHtLjD>NjJ4CEe3M3+ix*Cwo-n%59GyaP11|{t;^gYN0zRcN(-rMiJ)Bv;s zh;JaoOHHC&AYdF}=%zVvYf5JQ~=(Oi|AsbuKvRoyAwRLF~@&6^~}Q9cnY)KhyN zxDyX-rbXoT41=uJ#J_~#X(-Wq`dr$O(N8gr#|V}XfB;hk4@z6 zQW92J6O6T*UEhsnL!Cqyg`KF?#VtC(UZs(;>;9yEiTm$trj6|K2PXXQ{t8L+xb~*Q z)Xb0|DRuOxgPQNVt8tk#7FcsGTiD4wj}=O_WHx5pk*9xHH+ZQs@GFo*MP~CP?7})? zWQ|+N`m0h?0?~VyhUAl3+^D_ZJ_Q9c-P>L*cO%enX|ZbbRd=k6(!`4Ol;G`0t0S~S zL`#pe95E9!w!m-XJj-}-Jty+mAGm3IbS!x2{RUwDllQ&gs0>qFs4B5rAE+6tz_jHi z>xPOXtszxc-4gw)GBRE~+oT>-*V?|%Z_0~G}<;1xYW90AjiZL0&hwCFx2inJX9y=-vxKx=_Ux#Y|UmyEFLPyJB5?Jnw zQn`@aKjKI9m^g?~3Y{k%Lc7i3NQ1v)WS>_EXAAV0{O|U@KCyR4Fka-V-50ltAq8)C8nY;XFO5|qPWxATn4OPA?aQGN=Hb3uBwKK#E}n| zLB@kleu~i_E+6g0VSK8FYh+lTIZLAsjcG)XOzRoZnBz)Gic&*`y}}uFT0Su*yyU(7 zOzppcbK=q&4xy;*dUJ*4Y0}TvQRg_X#K$!&fCK?Qcs%&y)}THT_tR|@cV zOp-1a6w!YJ#~En<72aCHgH9lhl69hS?_}Plc4&M67zWn4vk#Kk=JhJd&0sAI(ZZ+u zK>Q1qw0vTQl!MOr<4r~!w}%n7u0{vPcKm%_7eUr#SXG}w=fbA#DE_|T3Iv->;ai}? z>9L+=XQSJkEUk(E5y63NdP|4HPQo{;l(kT!Ros{u#%EDMsm$Nqaf{DOF5O(JGh!eh z22k;8tPTR3LeK`1&?~AMX>1DV^R^=H#1BSn8?hmuTl#FMz4BJ=T8Egnw>G4_XWsNf zClWh?={zA0z{_A1IP^nvElRGSrXt`gVu!4SR$k3~rqT`o!w$d~+%m&WsK5pnmZoG4 zZQVauOOtE0MA&hrS#wiCx~;vfkMX5AbpFJob{q-l>;tJoyd4*ww8Skdb)Rj;7RRf~ z+g(r(ZawKcI_vdjO~7JECJIf78>?N-jg1*YXO?`uEeVKWF^9%o=~nHe!1)D}-?buP zcZzj?m$&2JNgu5dslJyN8&ldXmD5P&8{lwlN7R3oJO?ftHz5^tDQ@dF6CUPn+~3ST zklg#3ebM9^FQ>rqzwaYfZQ2OEhrz@uQ$*bf1N8jse${?1Kf}#xb8CQKR6IcVrIKal ziRQZAZ(Tk7-ZL>B5Zd$t*2l#@2^PSBdR`t7tn0r;WaU0exN45MJpXI5DDcUkUK^X? zA}l7yRUOn7eE4q{cO_@qjZfkl%$s;T9Q?y?9&6R}sMX$VwQXZld}LCt+S8LG zVlv*Fn!(S8j-zs3Bz;yfb*v8c@~G4k*FXvFpY$#Dr|)Im21T$U>Z^!T@H_d;r+u*a8=`)v60*d~%?*RR~l>1~z`y_T| ze1tM&a^qh$93IO4K$*0QW=OvI567#(*v|8{&fHxez^>lM%;ehPb#p2pMa9=AyjP`m zF~7pX#|U}9QusG;M&Widj`+FB{N3igMMB?N)qgnc;cK#iR{N#fi!vv#FE61}zzAQ8 z-qa9mj`skvf|qjIU%+>=|TT<_>)PumX7LuLuQsirYJEa03k%w*m2oJGn|j3K#ELtR(ROt#`)9RLP9&jv56!(q^tG@}SN zZ%XN(%btA36gK?A03j6aWda6Ng1NfP#AH=2^R%Jr0kMG$Ga61!blFx+bxjF0uH*6o z@^3Vre)d6{WCLNvG5KgOq%2xft2V_Jaxq4IFgvcsY$cK+#*>v?pGk7M`STI6F68^R}y_pou@BQec$W1gC{ZHA%-ZEBQNq1_jm2XhSz$`SGwNHtq&MapWVlx5V-?yeZI=P$PsY8HhqtU$N%id z%|Y>>1QoLna74}<$c#hujYni57t&MrML=sn)GC(rvNs_GE%3x|aD#e`-_ERlL+wU$ zF#&4Z=O=%M^;ImJQ;pwq2z{;wD$$?!cYwtmoK7d_ zHn$itLWT#sf4-J=^xJ6HMG+stZ)NO&_~s_WdvJ1yKUs+ZZ3(O#{3?U`1k&HnHz(B9 zKb}0$)%OTLZ^Y3Xs9BADqJPSGx5$CO)k8k$s0C5Tc4VISu)al@EXRj#!s6h669cE1 z$%?I_93CudQtbU{AEJJ_d$d|mw;BUCzb!8rujGYW8~HL@utX9REr#|>UGAcVuKiGx zJ(Rwzwd?dU8WTs3g3E*{%0uRVW;G+dNE3f~FK0T^#k{!JzW)vJUyTA*4JXmGwyXw; zFPD|qYkk`P<=$~lan0*w$2_@Hr$_wzOLhLc+gxmu;vwn*#&Yl5>S&?7!nJ|6wF~l7AdbDA9YxiX6WxwC+0F@Kpq--a7Oy+NfYheA zkQ-W!=@UW`AAa>IA1^cxnEWaC=(XnhOSPL}J8*SJR3XPcI^Yi2R9nPG+_k*D&+iT7 zoXW3#x-z5OrX=^A6h-0}6yx_D8Of=JQl({s}yKdP?Mbo%(6%Q)*fI0OZW+l1FeCvD;#J9 z)-?BI?*hWLFVd7U+nGYRqd<{sRDreY zt8%VmYB=~~psY?NfCbGdG%gw_635h6y}z;=IDUl>YI++Gs@3d$mH2Nx(+W zMhemDx~swVDcxX9u5$zLeuZfdm{s7iOUBT72pyU{caL_W1nDeLoQWir+olRvxcXyz z*`u1+FwW2S+(!J*isY@!0!LSk<;kblgB)e`BoL~X)qI?8rU%U(pX zUe=tmPc+ABW}g9w{X+0CksAO!Ti?sXh0AJ)t@N9g_sfe4W{HfS9#>T8aMEx?JUqGF^se#Rnvd7fH4&u&-SO z`zogSdAX2)b?GQQ;~ARa|z)`_c#uLhxgrWvQl2G z;#NwDP-|LUEwd~m-?DFQ=_R&PXp@HG&8g|HXDOD6iq!pQj}qcUabsd$k}b5p&WgRJ z?B9DcT?CUh=ZdS|5|`-{p^HhHeOxaHDi5m<6U&RcTw_W}`w-96P`V2&bTg*T-s@}` z70Gsaes%{*SVG^`_JZ_%bkq$-d}#HT^|OZY;4Rv8Ie*NZZ=(LlYlf4k-V?=*eYLuk zba;zk&T;1mn805i15e~PqF<`_)^E^gY}%%Mdqva1=+Y;i&<7$t)7N8R&{#GYXk@y6 zqA&e?Y-CLI0OvsVyT1Wyr)i^&++gqZOmW_UKIlFVFhEE#x*j8~6^WaOgAkghUOLml zTfUSSA=6L)566AX(#7d@=A$>7jlMBt7ZB@dupdQK&BzC&-&r??0{yl~HpxNAw=J*%>{Ozc*o@W=V*vKNA&}hBUs}Ij<(!b6> z`an&MjGHb9SdKvpvKOPdTgN_!-G4umwsNQ-&l6i%$%zFSEGd$H45XK2`RbhzsX)q46;gqD7hq|5906c3JCU9%TC;CcaRfBdbm8c z>}-D@(`@3sE@W;IAs(YYINx>|+y7?qNDsbnIN~kVHZfTZ;U4S8w$`}UD5F;{g5I_4 z7*)8zDk{JLh;JP<61FVUr7zW&hbyr!JjRoPl5f_dgYwlRIurcrKyKPzK>v^HRO%K& z`)+sQWcjXBMZLs2NE;t=3O#`@VtjdHVFcwt)@9NVQmSgo#Njs)9egb|V_)jm52G+& zEa*@q$}K?4_0_9zp0aoUP-BrPw_1}st*v#_LduPWiw>^&W1r1>C}}vLF!OAen4n&j z67R6n)h;RmC(-o2>2zBM9(}E(@24S=4ALf>9}{ty88{tR<(gaD)5p3m-yb+^Jl|>i zLm(V>-0}O79-VyGcXu;^iKghB;O5kjrM$NV2Y{^-rf zj7#1yJ`v;a&D-gjbC6APv+Zj8VRx8QZQNMzt!f55+je>+J?9qln^xJ_Sg zk|~q(7|P*o`_~z1o&!oSAP>7Rl{vVW*R@3tPw{f6$#$3jSkVt-{9e_8H?>*=N1FJc ziZ$Y9HYmcC8XMCkM5m<uNZe z(CK&1eMuw*x}X=}c<-ECOe-P1yG`*aC5B7ji~S?$>KrEaVm+xZhzWGJZt)REIGus zk%M9T@-kwD8tpL}%)1b}l}frmL(l(=q%8c!SH6C%M0ghFPmaL`IKv6B1-HVb9uPxA z)mhRdg$xnCj;@kXeEI?AGvj&&(StfmIt}BI{9V5IM@s1_L@J|K((js3UU%&97->cn ztwCM!T!G(Q4kxo2RdUo5&WF+G{nR6-cc#q(cN}QxUXTw!K8yKT?;pa}Uw&kJ0>+!S z`r-zG6SGvpuMhTc;;vd6R4z4QGE&|o~ZEGPLWyD zi{V$H16d^W54*vW?}9|3$99xA6@Wxwa<$!DB(K0Z?!z;?YYg9p?DvXQo0`-e`&z4~ z#$det6O(|?ofH8QFYZpTr;1{X;EoslS-m{cJYI#LkNW!Z3oX3ruKZja|60cxX+qMY zbF)?Hz83fxW0rqn7WEk?_irn1%kOKIX~kX9zfxt$Lz$NzcYDu+nw#U;9p%i2glQWX zC(Xj$l~eZI(zVwce9>ON)g-4 z{I=FfFH{VpIQnmqzG^_qrqo;$3D&=nf${;Qollw7O`fXZW5_Y`#F+PmPWE{O@N^w zM{_1`HGOBGJ7vVq!B~a)k`lGp`&yZ_DP49)p5FK7-P452qE5St>Z8Z&vpGHY-sJl# zZNV_U!O6NiWAjSkGCnrfz`r?{=H!XClvj_o8of99+0eK#qygj?V|itKiEo-Iy~O{; ziR#mHePMB!XB#?}hHri?i1rYuP0@AuXfy3wr`rTeTsQ8c$+yy@7AyYtn=N}sS<9B=git6`p&7cp4s#1AaFYOvOt{h&6af((+)lstVd}m&kKTv zbXQJS^g{Ypn5ZOv|1gloJjk_wL@!hZtrnfhI@KSaX1kq{8QN>vBNoqM5tv4mitXd$c zXsNuiKYtx*Vv(1KA41Ogz8*poHo~;ctCZh7NmEr*(;r^xo5`r4 zmG~b;XTi{9|95c|6=_B3R7&aYP`GIU=?3W--7!ExxMZanu9Zh{-N;Sb5tV-ALp{_^R&_a0Cw58nDGCp;JYI z;yz4sac@O@W-v5kTl$uy;gJRvzTiCtRk48{Oi+gEI^%i9a?s$7Y4&@gb%=m$BR3uk%KO|G98@%0za|XIuSzm#m{lVI}!}$^)rfJy2p6o|4b({5_VG8s`mE72Ogku#(3? zI@U?y3e9=cd5pGxU>`UY&|I(K6y%q_z|(X#NJ=#R@6!Lr!~Zj@QJm%NE4(Kv(y>tQ zkhNNv!iA!_m;rO9^pC@|)z~|O&4xP$()d4{&u|JzRqq=y1pmXSTs00EGWa{z&Uri{ zFZ0PTcFHYjO85fWf2=6;)`;>P7*4$vVv$7(Tm+k76jH8b`JtiI`9ibj8JcJH$6B@g ztBM5so>#_!FplE9{X~yg=jbo7nH$T=4%;X+GZORKWVt-U8s ziG%pnq4^VJ`T5{tD4Ec~bxL`265AiyhCcNK*9b+=z>LWN>4cz-NbBJQg1S9h4NW@` zhr%$2!K#nrMOoE5#A&VIi17^F7_~Oe@sx$?;2he1vx{99KnqfnYw3&_BvWFkW}qDY zWVw`bY{pacrmK6QH;K{Tha8JcQ2H*^C226r`%XFIR&TCBag6fZzIpv>#hMZfEhm z5Rb=IN^hNcY++DP&v@Ytk zzIz5Oq?T~5lgb6qnociW-Fb7%=%&z2u5}J1@8Z3k-CC2jPm~9c?BYCM?!~RpxZe36 z4tJw060ji2^Pej>}03zDir_ZBY~n{;C=yTEvgY21ub|v zZwv_VhPhBU{*J^I{+)6Wy6`k`2fcI{uMZ~WaWxzP+j1TR-azb&5AK79b}t=oe0^)O z?ec0pK1>Rzz@McoF4P#VI!K(akWIpsIvo&pCRVA=Ya{IRg0XvPU$JIVC>Y{eFQU=qu!hjKc_NUx%-gOvMyI`(;o2*XXkcUa>1jb#HFKH zJQ%j2GY8>z>tB%?v#&IFXwGzca#4{@Ax9f=r*ggmq5M2+Ur&4^sjq+Fi`xfPMKZ2L z_2#%l7OcP(2#$2tVJ2gejV?=q5RU>V`SGF*djrDl2g@9|+|c>z;J-$JDywQ7Y8;!w z-{b=Nu^u*~(loZai1I=XR{*WPGn`E-P0nBK%P$E?dh>#`D$$QabKx4yzXG9pWJDZn z^*|p(zaT8O-Q>tMpu*io&CIfE8ot<4<`YWR&E-^Ys$PULJJ~_%ek7ibbQl{>eslRI z^~uPUl!x9)wPWS3s)=BS+snh5PxX(nOA+iSMRzAn)PLU7WG8&(x3u!vfU8=Q7jh9h|VbR)V z&CMuwS%Jv6Hwf2k_c59kSfx%%#IVP)L0FTS;`t{@-RRQc4R4Brpjh!NFPYufo2Oj7 z6V}eq|*fiwV=i8|mLr~;O*Q(#RG_|}rK(K!$p>?H6P9JQZ^p&zmkJd?3s9ZBn3 zF~_?n?wOc-OXci6VQ;3gMJQfCUDqi~G%Yh~6_j=R-=n*t7m8-|@pq?7@FrK1%H;7meJFU3;kPo#RFYrvgyBXSt=I(cZ~lvBq|ark#lr@`Ys$SEnu zV=7B3BkF_FPut53I@9$tPjRdZT}AN;I@I{F4CUd~q5p4r!GJKx6>DVQ%2&Du4^Ay- zI82>hZbE3MvTHP7`wZ9wXIO=NM_M$kQ{9nGur&8L^T!H%0I~K*HU#~@7Z-~s=lpLz;lt)|7Y{A+s>D;x)|Pe(&C{W|;I*Mb z2uhaiaN*h_RhWxg;34#2AWvbJK$$iK=$=%>i}Y#&}O~j;DDlbFbKp2le6M za)-l&*Gwju`E+Ji;jwTG#o-nEw`k=V=S0a&y}KBeyuiH0*+PWM2DQJz zmS3M{^g0(3{o2f*jFiz|anU$dMNglpp(%NS$*t$DA2F_g4@c?66Y@*OQ`rDE@Pjs5 zvy+gH~8Ens}?Dxa0|ZFKA*slDon0GHFtz_FcW9CIWI zK_8DLm7(MMc(_jJ(kDZ{E9_|Uj%|Z*p9ztv{sKk>=}+t@sBA9T0+r{!T~S|s_WHe= z$9w7(rO`3uKVSt2c*FRAp53O;@r;?m|Z5rzcw~FqIO-(7y?VuC~T(!i+`aG;&C|NV;61H(lS>k zbp3+*n(;)Cd|F#fwrh$x>@&E)=NwkNcfReK7W^Cap7#an#V{lDS5!cme;r1e){s49 zKj3Xtl4Ry?{PR1$&l85Iwg;O7jQC^jHp+6VC%k|dWwHf9(uJ_+9jtWC!_~c0+CAAA z2N}}}<`WH)7YF8V(iv797w3*a@p{ZuiqblB56m}`sB-Lfvh{#_*xU@FlL+k(b{((( zw(e-gt@{UBl~lB!gNCY00LF3;nJu_j2Y12(@Ftw&0}T#ZPV604cn85t`nD--t)Y?T z?A^X(oG-0hWb_s2_T8CC&AYGfIx5yx*b2&Q+#B6wKi=hfrFsHpMh-7@Qq4B@CXE;T zGp0Rh9l3`YIpe>*!LBn?f4TqR=w)K?X%WN6pF6uDNW3T+&Lab3=bMH*ZFw=r*j6T& z$xq_W@iqpdBFUYpibh%0c|?JWJ{4#qqn^&PjED)}o0Q${2|e&lodV>}K^J*rtrH<1RMS;^}GtGZ-3$4>JK?Ea;Cm`kJ>V)Hg>5oUH49bL|WTv8L zFT{gaZ|@%gS@WIz&(iAb5`An4M2PH}Wp@^dzi{mBb?{Z3)vzRKA(Uc-^3~u5kqXhN zA}*dAR!`FL_nw3W18$kO#wCH|R`KMab|SSdV8jL*{Es`z$YC zyO(r@e(E7Q)028rKKcf|NEo(-`6f82)KUqK-u?^htoUc++3tKjwS2_NNY0HO*-@cb z&|A^a^As$ElK1^T<)qQAmyrrHUVz_)RKl7Sah+%)y3=V_h4-Uo_5xPZy5)SycB9#) z7EKW0CN8ww!r7}VDcjlB+8(Vx+3$k^lv{~Kczv?p1KBb`YjUZMG(dNCwh+0$otyVI zixegrZ~BEr0j8IiRjOjYO6HmOvCy=ntY&h%_FET*;K!x~Q9q|}f+ z0d?a)%0v18%WH@n#>U&@32s{PcoU?6HM8kgwtE)N+LpeR#!b@45F0&T*GE z%Xo5}5*TIOMJ0X@^vXH#?vfCL7e2BBB&lP3$Ep)GG~uy3MLq3*y7eM=M&IBVze^bO zz3Wnv(*M)ZI#-(Hw!GtTVFFxwKJw7Xm=(W|H@niw@oRaW6DIHP@8g5Zl5t@wmwGA| z>GItVEqH8D*Hj6i-cJm$zu38BP>vD%ibtR%-SHHVUGHB!Uu5EQ>FOF5&m0g(@nmx! z3EGJ|@pG?F`Whz3H_lFLAgw`}21^Q5CEBg=vQSBMG2WbV^I_SrVd2v5MV|Vce8&01 zm+)Ft+9RUo2ekoJq~dg$2;Ii8CgFOfU9C z9R-AZ&*Ff-fWqH3b$w7KUFxMNZrdwWjS7ctvQfZjz|fWay`UN}wMa z0YtE7>&a+sFn&JP7wX97Ue3ZGs_5*Apm+L7uy^g|#7rQV1KO zRtg$x$Z5ZG35G9Zxr~N(&Ca9|a$4JSu18N+``R3c9O)&zWakLn)YqtoDiZ^VU61fQ+r}sJ@uUSe>nX28Y&;FF?;C3qT9lO1R7$> zElfszXsIcrVT^S-p`_q;9Cy#Ui3m3(v4WnnLc)|npC+Wr$DRf@<@pT3B=-6vHIseS z4oNT|4Mn+~vTgC?!0ScECko0~s@+Rwxl&gH+zi~5JF8B{oAY+0(vNO7bASNr_CZTB zE2L+6FF0d=+&S!32GyC|t{?{xpbz2_5 zPD|*vhyyCrOV;`cm(7hTBNfI%sp$AN?R#)%y4@DL=}`kW=A9Yal4GMy(PvVn^R9L2 z{{q&erV&)SfZ1;lJN1;S!swyatPshZW^~y;=I`IpKR2m@>HC0F)bm8%T@$ z&6|uMcwdCfn+q-gHOccvO98||9}+22h@5F@qwUOJ_DUh18=^o+*fu!qTTVbHJ5P4S z&hyp=&1QkEULF{si@C}*vLc6?3pJg&$*C2{|0E=6S>TAfmc_Nc z_8)I<8=w5C81w?|w4WsWwg+WaDVn)Ea-&B5vgbpuPTHA=)`|kvoNIPzlFdR@Q`%*C z^Tai&ZLfHU^|U}QhvqbjIs73(Z^R|3p|tsVLkkzo8j$|4?UD}hV?ECYa^~T%}1XL(f%Pm z_rX>k1o^AqNc+2GW0;-w9*Ox<+a3NGDIta5rdm7$1_VGMeE&9c&gTK zI$*G_kK&fS1YP_ZoKtJiGVcP1A-cY#4 zXruJ_k+dYWvOnjE)ih&w2HyVJX_O8{-ohj zyXriXA4-qW7c#@fgpWQ9EOrl$ZEBP&cEw9&#db@I@tMkAMF~ zPQzG*lEfeVoNeyk1xC8}K}hXGY_{x+Q}rzW-LJySiDx6T%@K9Z**T$XYG41ejN!r5 zBxziScyTSrIwbBp$2IU#?M6eN1zIzLbR&0vzEHNbNY^v^ewfxLYYM-pF}QtgVrm+Y zF`Z?Hvn_a0f7a1q4TkH{kILXacAeQQ%5d}Mi)atV__nPM)x zriKE!y$zz&v~zYLXe8}8o(gOUhL8BjW?<U)|o=YQ_;&5OXLFi#I)g3;8r!W*!829#B%>9>#}{ z&-{3@&&3yL_Xi{Hq`z4BDhK-zSH5}(=Ae4|V?I4k&}P5NHTcL!W4wi%v^Ip$TzKl# z5BZ!GLM9X#wH*F@a$b#))%1~blQ+rl!W=Wr_{uKL6}e3~$U+Zm{%asx77_vEMWh`v zHdhQOw6?o78=?{~#Hri~x%4Yb7&SOAleSG|42Hl|aL2W}^}HVgp{262pg^sl0@;=N zdPLS;@>=r(eycm4xip|DL$0z~WTzl&hX5Y(3Y4}dcUB4!eizjhSelMv6QPNDeJIbu$ z58^z#a9uaGR>H4eLgr}GbmTtg) ze5%4>!^T%LA`_K^ux3g5t3S813}Dh}m%8{2rbTJc4t0wm1&$iKi`*=0B$nb@8*e-k zQ{MdZrltqLh$}@-dIDv!bR0bwZ+~vhY&zM_lVHx`d<|XnK;bW-7Sz!ZQp#VAQ&^lGJbqqFy*_%tZco@W{R<} z={^-M7_LKTJPyrfkbd~j>;sbbr!^O|qcEkZwR>j7IqcXRTr`M0%vdt}TmONI{<*qO z$-urqQ>edf3mv?GPj2^q#g|9qKc+)SFVNstXNL9ys5TIDo;fv)y!KVQ} zL^7>H2XkLD1?g-`YNVLAH3!Em7(*s0B_i5aO=_p8_*Gu5wr0A0at|pkLI!V#_PcCS zncO=6QziI0;_SSCywDvLH?R;#Lh6C;bb*Y^K;mH1XC5uDz0Yt?>4kl)kR?-FV)l3Twb+ExO zMYL*bddwc0RiiXDyD}#pxV{a`e}rAy9~%@m{wOk>$L8PhK)OhS*cidevSJwztkh|t zj!+t0^PD_VtEmzWHg^DRjN!=XChOiZZ>;=AB_Vm%XW=AOFWNl(st%2?S$@T@|N59e z+$Gc5Tu+q+Qvq46xfgCC>6fOM+=HDe(C>_0W~*}kt}E(~aAkusIOtXvxOHO#nFm9j zqh{3+ynUxSy6ve)YC)2V9&}nEh_IugPvp6XOn69K2~cxxIbslMJ}0LH!Mm3vXW!qS zjlW-<&ggzQdxau@*P@JoHO8lE_Uvjc`-`fz2%I+lu(3{+`&NHlyUxKq3Tfjg#Tud_ zFtf5$-U)I+NyJ0@th@O`kO2*(-TRj#T2tlqb@zP!(mrN;iH-Kf`YeEjXyH3;j&gG6N5L>R=Ah(E0}EWM_y z9xC>KH+m_4Lm%iZWwh{NoZE2>FMDVIc@o&o}ygkc3a{{1^oKYW3OsS^h*-C zRzdc&rJ}!Iu!xWaB)vSyVFkrc02^0+hspg3i~n1~0$e*@goKi;0Ae>B zB3Sig2W4p{At3d>s_92TX=bnT0>o_q)QYPOQe%UR&3Hd~en+^#=S3Si zf2ZPfh`PTJoREJITI0rYPB^ofa@IZDLH+y+D{qmD^dXQV03vO`OEPq@dQxQ4lbJEy zsPkVfw#sz0xh0H_{2}_Shy-pd4E9-PC)!Kip#-bu*i}3z4U#g*)8apq$f;tZkEh+6 zT9o!OpQk*3jST}AK;VUqb23UpjEs#!@_ct zz0HhrN?)@3;Of}aZ&1FCf{l9-mwb7*6hmj@b84D2n6&m&x-svj&eeq^o*}JmYon32 z)}m!9Y(d4yI!Py&s6=d{X@C)YXwlq5VyBiMFP~Kv$yz{77(Vs)?`KAxShV_MA(2QS z;;SZ3^Ijswf^9;#IaRJvJ+y-SA+&6Wt+3XSr~b^X$)xplonEgkJ5CTTw9C)V;@j_(*{kB3)UB11j^apz8e^4sc4`t|YtXY1mr)Mw^;B=Iu(Pa*?^9D5LIj4{S*E0Dry z8GM+C;%(YCd5PlwoC`Ibbv(_TXRye^o_zPr#K>_stIYbZ2hA6bes5gN*fnw-jjR)Z z(Zkz=Peyy`l~^_nj#A3+oI`m(eN4wLG!S45FCo-EUuVdi8D&C|jp*oKe~&mFTqxj=y*=G?nnbRHe>kisB{L_=`o zMWb*ip3`Whx#1`wmx!O-q$z322JVWb)C$%`O z=L-t33jtTN-Z$~vopt9oj*Cr>Y>vFIpSk=QrE{jl`}b!Uuz;P50D&3^i%4f6BWXND zZ33^qVS*u-M!7(tga6&QtwGA-v$Xg;gI~x0!-4d~0`+Hjih?UGfVKORY3|mEomcD& zov|2L?wZ3pSM$;k9F&RIW>U1V^wr{1Yx>9HlmDKxGk792zXnV(q(8JEa#bVHPbyYJ z>G)h&;NvUOGHv$;n=L;=SY)Gt)@8#n>cduHy(Ca8cD)0*?IzG=nl7Gz0KS# zxv6hC5}xv}O44ELC%2(8hL>l-4DxT!t(#F6vMF#*@$@>P1eO9_ZvIC&RUuB|ce)VB zWzR703!oL!Af6f9^Q?pjDRLu{@qv_OMpGy_DiblKjVrv|)%a`~Z!ld*;GC(A+{@+i z?Z^xg&1U~9CyKfPlcL_i|A+HBWcD5!%ggH~`)9ZaurEdN+STwTfM3yb`2e2*y*RaH zt?e!TZuM*^h{He0Q6`3w0ka?y`l|bbOi`5ukpDuDNxwCqQ|TFqrudZLX(cX>`)?f1 zEqb4`->9Dn9)KHhsXyyRY2&?L@z&2cuP$%eQD9KW1cgLoE(3^oA&!|lFV*Z&YxT>? zkwG4*E99;P4szx8+kRf6aA|V-fyH(yK(am&a?N|RgXj13hRG*38!pGxjyoj1{}{7h`Z`lT-d3+%)bS{>~(P_)%tO_ z2<<`qcgKA-wG=3v032mPGE_Kk7T2>(PAp0hz4BBD_A57zGupA>Ht}{|T5cuzA5H~1 zBKs=9i)P_$>NoZ@T(b-r%FX{^@^bHz<}i&28ZqqE^h(l0pF3qg1vA-CztJiC?pv(5 z<&TX&!rGHm`lLK6EV&N7R(#8JS62+_C2td0K}`S#ED0!0oZVH75an}hE^4Mx7Xg#~ z=xXu`O62#F&{XLOQHVLd%>QsEo6wThBn2t?|CB1APqS7OLnWnL@x=OXMU#ZDY-ngOcdwJ zShr$%eJ3W@HpN|_as%4yN*hZldc7*D7oT6Gxp==QXvr}U;6?`^Sn2=#b?y6(H$3*h z#l9txS77UHj5r%RE1v|TwFbw2wlQ7pa#JU^PxdbEC5!9Y<rST186;M4N2= zYiS41KQ-LEZ)po%UnnFX>}QQ(UC-d-J}si^WPW4(TXrJcG4Ko#=$3nNQ8Z`)j z3bdcDE&Nm{#pZd5esZ1&AHN!Q{+}7SCgsiAwD#)Z%gE72zb?r-8sigzAk@i1(?FI=q^!+a`Q4 zZ&3-@0Dv}3z7YURAltPu`?^~C)NlUji6hY@(U7e8_n+?IqO~`=9q;5g27~UUn?wEg0^BdaJ!ycb5 zgOn>hftS_|OP2MV>j&qJG9xH3!V`*(?iNJ?juT|gXrn7)&z5-eU&Y#Fj@|vZGyIKL zp<^afNHLa?^4(T^J!?25{Sth#`=I55fOLUl%M;M4)ABx)FP;-$)E4~aMFuX;w3{xp zCuZ*rv4}qX{40ZPwbbX?s{rttXC90=q2%;~^sUm?-JV+f*wF*cu|nekF!Lek;Lj3f z+MK?u011jl?I6ks0(y7k{XEUAat6K0tb zCgqqSZv)}%@mJtsK^Rp04m|$Y7-2n;TK+$r^uod_tJ`&^&Xz<08ZmNa0vRQ(jzaS% z+o1I&lOqcf;|-e$5Au}chSX2*_zaNj!T^I<6`=7ueH%yI;rEu8;L+4MoR$zR58hS%e=rlY{Q# z!{C0HtnplZ*MmsOPD+-c&6{3g^rr=vh#iUa-4g*DHJVC>ngahvPPw-jSOfprvUkGh zk)ORdvyB*S#PY=yl0JO#N%)6ccX524R6X2dB44_LX>uNL1;_Kasw_aQnmb1|srCm|+ z5X74H>b?H?Rna>2E<<#D5F3oggCCBaf(vxu8NQmPf3gjEGe(&ei#qceAT~sd9Fu4 z7~+MQr}Q*OJGDiPCp`*3n@alijzA3k0&k&H^Cm8xD+Kpgf9zqZ@iSSXILmlgSNKg* zy9w4ba6g!9R9Bi3{|zD4{j&FVQr&;*RCad-jW=g$qa~EK!Zp}4(K=Fr3&UkJzRM{* zw-7w3?65Q_+UtJFHnjx|idDh8S>a!vQdacB1kMMC`W6+dHYm1Goc!J9N*GJS(vD}E zq)2&}FeFAQZ`GIzjnd5w&!`RO;IMOosTQPksk>=#m1V+UuqHu=JmdHk`I?Smt(VTF z_^DEVpe=NuOYN&kkfD7`i&61A_noxkI|DNikb9Qv%&sL-?94X7n$5>^-P}@t^J+LW z-7_#M-n$0G586@5!B^HN5IMD|0tNGK)5jx%3plHa$T$?wd6nLIqz1PWfCKx^E*&gT zZhKh%J`cCcWvApI+wdMPd(vX;B$B6Ksy1JGFI7L=Dj}{yK>$Z-v8pa=t1iZ43pR3U zaY{<`UG0s>=y{k#BC)-5j%HkyQ_5rck(m>rLPE@4oay`DQ)qkuWr($Aqu0p>kyDr( zj1w*bqI*5zV!xeWrJp}cOK|i(5%nC;LKR)tFvqrF*Vf%`b!(tKDg;XPlazdOpYte! zlHQiypzanC`BURGv3BpgMOkL4J2lV}4)olTrwc0bCX4XVh`RxfnB zE~i7t1l4T4MIsmio+XM8`3i_F=LN5KN49SKRQfwp$6uIZ<@dTzjC@IU>h(Ss2_8LQ zryhII*q^TomYZn)YbkDC)A+02!<$o@ENNqK>~;cp6WU)fW0Rsg@&kTn@I2YN@bb_i z_5STQfIfc(`_w1h!psb64CH?Kff@RkjR;pVTVe7m@{{w)`;+yEQy8`{~JEv>_V>J-%|<5P zUbiTKP)eg3Sd&W8qP0{hzhVws4*LdW)9>oB^s>H+c@Y#PnI-D$Ut-{K+tIF{7krZI>kd$sm;rEg*n&w;M8dXY1`4%Ffq| zPj0w!R(EuZj7&gUPXZS#!lbwXTl9=4H;4g1#8=B0_p10Sx=o^-e+%!8xG{>X>BIg5 zufOiJ)g`*DO_8>t9^pa%!=XKw=h{+Uo{y%q~>`o*d)$ADrAzt0f3jRA59rXs z$@)R1j1uL^QtkAV?H;mjDSv41x>#EzH?L-rd~3%m$BRjP(T{)l;l6(M(w`2^{K93} zj%Y%EFfT|sH_I^E{wf)vy5k^BVXRv9d?BswS=coB9Gmde@#HzRaaqqzAMJ(zOKiKT zk!^yGB9co~UcJ~}I!n8ahK2{B9RKBH+ z{u+kfy2M9_=}zHyl1-ME!6j$2Goc#INF>ISq>^cS~Qj}cvxte zS)r!A?S0zI&}M~GElUdI+}vP5izF_pHC=kQv2(I$GY{AO?M({{+%Ht!>Bd1zPG4Kl zpmNmWOoEb5%=ET?V1seoe~c70y)NLb6*PRenU>JyrJF7{IBx`yyGpI%DCefIVy&MN zsKd|I(S5-3^ojVR11fFXOmhH3)>HUjW8(jC^j{}6{O4}%%O$as$X{^1y+H-!E%C2` z-nLsr!NX+9jn&*d0=UOLopW$nKhd61JoJ1quz!&8-_S>b2ja4QVk|pT7r$n#e`Nkl zy;Q_UTJ@|&(<%F_R+0pp?rBvK!URszfyC2W1o^m#EKCOT7?wN^=4Mfl_V|fyRt{ML zEl{U$*(ZQZ0HEaXxVSP_5|EqHGVUuY=9bGuC0D>joW6t{l4m0smWw{xr$&`W9uuK`xBY{*tmgi{u!Vx{oK8Ig=3|H8+!^TY_!W7 zXzv>A5pFKKo#uh0g|lGZEbzGO{41)DJTQ6>TzB7>jB3N927f^XVI?S(t+jM>3gE`j z)%M}PUjDlsrl$eybWdiAb?5XuvgRtNeCCcy9L6oyQvBH$qQ%?=p{6?4A(TJzJcd-L zAC?|qK{vJW{a>pevi*29@Kl{597E3kY6g01*W0a@xIN9~Ocy&}`WJ2I7B8i4y*WV! zSd()&bv{MdX2@UEDUvWAgmY@IuCFt&7+Nv!G3m zlB@~25SzO*60mn*u)4-YUz&lx3yoAD*fQH?*~cMq9O9Vg2Y|ZQs&uEc56$W&qir|Gg3jJT2i9p$sa&KF8-?S#@6Uy#lDtix%Q#v3L|oN~55ZYzBr z{ss>N;*j8z!>u*HK^><>U+pzhGvy>fYAXDvL?6VYTZe2zpw-i8$<8F7Hp6RbjNy}) zBud%=+{Xqdo16Qu|MKnb#lX-KC>6jay`Rw>$gVZjC2+@7gC%(EHE!`eQEDj7$xf5V z0nATic6Oz>$&{|TMWd^_FBce;g#&*FUi+AUr^kKv!I)9mWUInreyBOtY9WM$_33lH?1$nVf}DvEn+zMB{QdB%=gC~zU} z8D$XVn8U2MKS3}`{JJi7ozI4f%lhQg5kPW_G0L+0u^4T_lBwSy=zu)eq$<>B25{Sf>;$wXV%5J3S5AU8gN7DcXCajdsnOj5b z>A!FEZ;W_A?2E*85*{8N6Tv0;X~+~t3YD-WDeb4Z*iE*ybc7RKG>^8luUIGIx5&W@ z9vy*8!Se_fa&Od8*#K-8TK9`lh=w4NR_zXxoyl0h*;^w+r!gBlE5BGKA1zuT5=_5s zf%+hv87(7l%pfKo;1;k=C@nX9s|lznpWQKO)#u)$UpI2NIn#;10AMfW(FLy&7K!N4 z8dR!u;H?T~K7}=Pg_axHFISz4FTPI=OT^zUk!`pg>IfEE=S6?Kt4(hXNJcA6kFYO2 z7FYYnZ88q=;v45qC{Ar{EN?|k*g=qI2_8(Q_AR#9>kp5fnvpS!tM?0;? zT#1L%CqUXd6c*gGZDt~ez=T&G{+rk-Y%-Nzb$*-G+xsNR9J04T2z*o8)SO9Kz?9MN z!gEb%0;viWQ-aj@FjI@48VH@kG+^=w;mJgyXw0&3g9$a}pGtHMZkzx0PH^C2wh7Su z(rvRvjn$eZD`5O*23O!I8Za?no2?*aQ^>u=oupk3$Q^q^HLRbrdJpJpXHAM>MvCN@ zI3XvhQE7T=C_9l@15KL`W7Kx6*3S|K-NYrslmU0d#k~B9Y(R*3550GUDXL1EkIbXHyhve zNpT1@rOEuc_kqFww^EI9T-%%T4?QuPN5KEKN}X54=FR#0WH_N(M@M=~Q{ za*svw)fLzlWtwJ&)&JF;9{__;FNC{tLW*1oUG=0y049nGhND?clIkBfBMR0=B-y`>ZYcn0{M zzlSWwxb5fq>%^aDp;a= z?(@Wl$!Gf6y+hJN`(E){=iYGUE8UL(wW^Asa#AxJ{O5CCr?C&BpBh@b(wt#sW>{iS z=G=wy4RqJyb!Z>4@Q~)R*PsaJLzBhZ_0FIy3d@VsQWA;%jhu(TkLXn{FPVAEkvqfv zIugNCi|2#&yAzzeBEcjEb!5ahLfre2Dg+}7U+Vw9y|ZRD^hylCqgRs8fdqLGpGdlt zf33db|H<+B+D&W9RbrOg&PL5AHGo{I*CwI=k0&1ei$I;tPLoSo`5GsFLD{}so-xnAS`o=w_BJi7WEZktc~@J0?mXfYcj=sCwOeT+g-&F5 zmO=_)cwXF!@eKpxSBSLViC+~o`{dCPCZ(&wyN#S0?un6Cc-mA9P# z0H6N3t=l~|&RC(@BH|tbBYc5})A?5`q_vfnk7imq?p`+I&n8w)$2cdc$4+yK+LKm} zJv=(DCN9iF!?A`*_36e2aa+=ru6UTJ$-5l}oenpApn5)YyVkBk86@jjnl;H=2z@wYJBJ$N%HS%rnra)UQ^LSkDsK5g!=~~+7i>9-^k5DTGj;N#&C9HweMpO|AP<8>k48t7bn&o_5;q60P zlG)nVY+h1qxtcjG)(DWh5>>X2bArSZ++wu6Oqyb*?@~ONht;2V#$qbhZGP$!28)0zl`S*E`{jb~{~qOL-)? zxmHt!T?B#`)TP(+Po^AYW0m4Rho zOK`)WQUN(Vz^%`Sk;kU|UY%uyqb`LOa2ORW2rBd)3TH9&!w3A!M3oNRk zw=_<7ouP(vk8@w$IYh6P)BgYpKaX>bGYPLZ`JJEq5#3rJ+FRk*%M5BYeO?2G$py5@ zNMFoX?1qo~>t%0K*ERT`{{RG>yIWt{$Kl+cyNs`iuA^KZm4nz^fw#Z5YxciEiN44I z#^vI?9w>|FhoOcJ-qJ?0M4<%~ioY*vE9Ci3>$Bw;*?=QIr8sTd^0ztssi6RG=TAVY z4;<$t`d2~3DsIL$=e~Vu%fj^Q(0Wja6@S{Gs}#vNT=k#=B+k?PMC4Vd7i0b3nYvRU zfkO{p>sM`|Q2Uv_eB%@VTicJBLg2MYENT;G)(z7YV%pkB;PV8ZKe6pl-a#U5lW<_% z8irhUDzcEE_g=Lbbzhqwh@wYe-|Y9Mq&{nG+w(|pIjE7ME81Hm(p_F#ZQQbLanpYo zIju-lt>hD1t4ORdHr2}}dK~*!UXu#x_Y*3&?(QUQnCQ+r)`p2>wv$|1?vreTAO^UD+2`eV4aAOweQDZf z+U3%wv00j1g=BU-Cj;)eZv9W?O@z&JZ}uB?Z#p+JHU>};@}0-rAJ;S)%Hx*SH@K44 zW-%?PB?0-j4x=5p^{K6FKGSH|Ehg8uTq2LWM}9rJ(?s%J>DKWorfp+pV1xL2o_)Wi zUmAq&@mxi2l0&s4I~Svl2Jfiv>s1nZjJIId(B4OLBFJ1WNCk#QcPZ_jpN&`eiDs>& zJ)2%_w3$uMmu|=H3xI!eTe_ZG9dTDJz!(1j@$U;P@-wV)?((_hsVAH+YbW9h{hPs; zHmb&ZcA9^D;kbaw+HdTuNM8TrD5=j6@A&c z)-BN&vjq%TkL6!3^~B%I`x|oM(p`=}!oTuGbeNZHajvm@aLu2Yvm6Wf_aB9FI>6Ka z0JSvxd&H4!x#MPfbK120J>ki;tsGgMlPa*04!|2MIr+bcR$jf~ zt6fg=DFoAg?E<#kDI+~IQ=)s7XKjy1@VAGf(Cu{fZAqJLx(N!u%?q#v;~z}ovb+x| zx&5eoKl|01IXqjYHsXF_1>7y1j{H_Xg|z+iTx@UMr~w9fUtFJGrE31pHvVVreelZG z=~`H0_=BRg!U8v3MsJ{EhuDrP9``{hHBQz(r}zzjYvO4>H)>JaixXt#@EFkw(OiLbdug@RcK*;0MQTY8%PzT0JMk0vMBl8cRLnZR5BA z9o?(*vqyo_h`jb{2-p&NsT$ zuad^b6=#-0rJIg`0m&rvu1Dcf+u@ST8Fx(C$Kh8#B->3lfbJR<`|~1k{9OM4g?z1e zsp5HA`^H~dSbULHhUzy&o&xxVYvP|AT3Xx1Dh9hyjO2XlyVJ47e#3spptD3rvLuE-hPq2hl`e#p#(3hmGum*c zI&p^AJ|2cLzA7@Qh}`kt_$?-<=lB!hEx(x3GHSQR1lz-5V#zKb;w=8~ks^IS7nT!E&J+`pVy>Q+DEPOL>Cze!$)Sk7zGfV|D z<#BKK(l++&+ITCB9(q%vg&sEfzUa<9DXtj7xGqTkwA*<$#83JI)*oDG$!55iHuuRVA2BBbwn?tDSn(F0qpiQ&F0E}o*u^dU`BpzT zjAw3s@fjQnH2qfBTCk4d#`X)_Sr_D%83c(YJ=cR;LzzcKp%$_{tv(0%y!g-UQh2Iq z^!YC*oZCnkqeUTNA=+53(UIGr>0X_u_;33MP8Rl&!EO|M>j>Jp0Q36xsc*bVr|8ov zUurgXZ8EdQmlG^ym3on$xbAyW-T1di((SEhn^Lk{eL$jHO4BcwbkFxfHgLrD0<@J` z$yuP6GdX{T9t79C4WP|$scTYek8yD%;!BOk%LMR%F*sEmb;mWsuk7LCH}UnxsJimQ zX?1>YCxIg%%7;I?Y#b5E=N&8Cgt6@3{oj{^R3-8Lg=Khcb3~;K9u#I+teuMF=vb52ckyqwWFdMxkrl)DBK^)e% z5L`zf%1aD^(Y}RvsmpGIq1w41{dufqcdIhi`koi#pMV}O@t=(+zi$yo_8Bh?)up_O z%rxP&4Xg8W&RCI-O=@3!67eRZ@QwU4b*{&Cc$10azm`4hzq~F6GoAs*CcSWNfMbyv zz@poK#0D(%Bwatb7^OHLnr)e)>H^82GNI1axEPUiEa^a!A5_Jo|ya9?V%Pzm{6>}`8lZF3mw>BmydF2 zjv{e)MEiN83rz5(uZDa%Z*OaB3_elItV3ugInD>KAC-B2hwuZ%8ZV6|)FbgCrLD#E zx6cG|ZS$3hAs;6P0QJRtfngMTany1>O;w*-wbQO`;kcgOIq#X42--zgoPn0w4<`fC zigl%TZo84~q_#Xy#(x03S>iv4mzu_#tu2f?gGRErK zDrb&K@cK2hDaAaE-f?GEX&Y;+Mgn z8+iM~_jAXq#=2z95AGZgh+`bGjNlS|yVtkd-lfP^S6MvHQGo;z*n>}qpKqlL5j6R% zDPkplW6it)@QYT{ycv0>c$ZL3ZEhxM7BUNY5oaqKZX_@qS0SeU&fY51JZE*NX*%7$ zo2SowmnPmA*>f8I0LvnC$m2eo;=TC^DmJmlJYteKytvQZF2v^))+SJPT}-{ZJmW+7 zN2w>q8;=p(UBYeUvyRd>-yD1qsd(GL_d0f-&_{7{ z=tPpP^*|UC$N1NrS$r+{wPkI#KNdHVq^xj>2ob1Vp+-h=#(D2v{cua2&9|tcBGQ)6 z-)@8+m9%R(s}=2>RgVGx0EJ!gQfN{syj3ApVHj7ClP{|hF^u&5E6~0Hd^Oa57x+c2 z^$9KRo@=RY3q++=Hxb7@dRL$%ZD`6$hWGWwG*0p`RTd1Foueo5?_B=?iehQg9${4j zo;z1TE>7c(&7Lcn@pZt86+1}V*EKBb!u)5?p9`-F{@lI=WcgY@5=XFq5Bj+V52b$C z+06vn#)tOy+ZtTLOT+_g!!CV~<6nt?4IN+hk(%^s@`z9*Fm-{4Dv`{t74Y?#JM#?J?u;5o*@6UcsyQS5wg$Ap^_} zJ-WuNo|pz%o;J@8hoWu*SvH`e-u)7rzUS}l^v5^pT~71VQ#1GJ3#n)Ey|l8$o+CVl6R(Qk&I zD(ZSi?Gd2=0BiUwge=ld%mDd7UZ?!?Uq$>%@bC78 z^{u|vjJzu%sq2n#N2sjZPXR5SpZmxin2y-U&3|BGuu-iQQ^@}SI20Oz3l83>9Y{F@9%`q?k3Z%*)!zYl0oDVladGK zE9f}Z6kZCPXYpS{=Qu8{Xyz4peh$B(%Y1P7bFX+4U3j$(aB2&DJjgCBnS$I#dOHl9 z6P`tRp0Q^xpMMzs*K3R_u_{<>{{Uo@=quPfS^G11o5Pxg$@_JNu&}8IY_6&fIv@6j zOdMAOar-}bp6Q^TIPByX1<5IKoE7D=F~$XcGg(G88b4p5Ry?V#Opk?^GhX=m#%U&) zt+m851%I1%W<|k2j%)e}_<3<0o(j|8`J|3D3hWQ-$2jTvSKy9=@NdPQ3D$I-YWq!+ z-$T@H5f=0YYj+DOG1}v!0sz75n*H$jZFQ%wgsfzbZh9{& zD1GU(u1`~zuTc1JEH?iD68t#jV~u9N3lVvaNGiji;PcQL^B;y@9`T35UxfEp-|((= zzYs@jb#?Z%)3pmVky&LZs;eY}du<9x2aMybczI0W3@dZ)ZJhIadq=VIfBY2Yd9)kr z+pRWhOIzPEJV_*eVwK6rDhTBI_OH$_9qLz_kB#i)ypTyZE0vFG;~${^0QFbjKehI^ zuY6e5?~*@;zA~{236(CSv{|EM&PD`>rF4Fa67j5ZI>#lqizN%@9QlLn@Hh1X@UOfqZ=tq= zCA3A6d&OgZ}mue8(LAuoLV3jOygrp7?o~vN$>vv z)~ot{R^)k?1tUz#3Xm9)kCcADonmPcK`f?a$}p4X%Xyoz-|O|QCZBX;d`HV>C4Nto zjP?Fi^XT*o0>|yLTp!)}Do$L#1bUj((GoZq$s}epRA1h5c;o;(W8dDg?KMdJ_@R#6 zG{ltvFUre<=sIzlyJxMfrP|MPG?tC!vI2@(Hl8z%`Njb4)~Y5o4L7=b?yOBTG<~B{677+ zEvNBs#SKeYv-2-Jb7yU2r%gMp?4*oKzbed2FU~m`_E+&2hWrVj_`}Q79^b?oyxMJ@yd?diCtdg~F}E$Z z0|fQ1qre^();tgK$4k@ot5|IH1)2qTuE38nhmC;)`@m=G&3jbiNyFXV$FV9jnr@%< zZ4c9kp^j1 z&b&UFADh4MTuVsJ-kM`vd6z2B$KP)!9DWtxKeD_}dGJTV(?d0lz2%kU$f2?&oBbwJ zxiO3|8RI;~3uc|9@KybOEh%jO&Z%eK{0rw!Qb-mIx!g@pmnd! zqjuA0>)1LxoUnZs?Ag+^%Rd!ZX_h`%-we(qyp$0XtAnr(e}s2EbIo(sx`pPyVQ*`3 zDf52OvT6#MDX65H`uNwjf)s(xsb96dKmz~0fu-LPV(B@SnyQR zTHDDD#f-}p!=#&*R&vKXK*$7~7A@BvxU1#2-gUy7UwI|gpFAn3+p|Lg+sfETNo7Hv zaB_EZ-zPlL;Bzg7g~jE(8={Bi3>)Pn9=&pLjPdDNz8KW!DsAS3K^X=GoueZ-Aal=b zbj22O+nriZC1ajAcP8d166g4_?mJe!(bLImqUVM6x!YEr;iXw7yetWjWP0)V_oi!U z4xQro{?BzC)SKfAA}`Fm44iv5N4_ck7P+@KeteNztdPh1ghnf|hjWl}csU;Rk9Dj< z{vfwlVDe^H@|>q1XeG0j_vk)?x^TKzO?O6hA$2c9=Rb={9k<3UN=dkpFYZvH4oMOW z0bI|9?3F40yq=uj8HTLGeRURfc>*KlFl(RO$6Iai#RzuK*!2XF^c}}$gc9*U*SjbKM{MmjYPkhomc!4{w1*etb7kK z{o>mA(P4J}5U+1?qaNoNuiM=cUGQz>9o+g?;uriA)9o5R#g7i^QbN$J_l@+4AYwqk zXrw^T&OQE>p~M9wLIV88q>Fc$-8yF;wAlC@H_h6mSo61O z$74VXZS%8yyeagnutBh_fpRnX(nB8kHvQZjA46JNc=Kfa4Ve+?X zg6eIIRPo#j(h{_>%B_!=mCt(2ypzw1KPYAEj`f*pJxVe@^()C81?n6s|L6J%Cx$Tnnd!$vw`=)87yl~+WH%2Td3Vu8L^O5mFR>N*Q zI$#c&0B6&sHuBC(i*=Q4N1p@o9kT7$Ab&r?sR*?MYc7P-$#Q}1Tre!WIsX8jKxA^? z;atbW%ksVv`*)uksRatNe5^YK^xK-~?Qdg(_SW({Xw_p=x>CECXYR-spgpoV=D5F% z7jfF?voN5QcHEx70W`&Wzp*LP8;hBP>0 zjg=PsmTdgY!5caKYv(EJiMjSO{sQ?NUDe#N{5kOAN@NVt+{^}e8Jwu&{sT~HUMre3 zo+dzB$dE_9bIUN~d-Gbi)(QUr3dh4fbc>0tOL8#88;Lm1E1bWJ?D5J=Zf`8@&tc{c z{{Tw%B^x8lS0uh$i|s9(`H}g?IKzG2nPpzRvQ25+>6aR%^xj%3c_#%6U;sGdKT2ZG z+V+6U2x%ly8Hr16RVg5Dz50H2p?|JPX?!P^6NfhCt4AKzjY(|% z)~(;zM*U#@vVIZWT(t67+W5xS>&jK%otxVLd*D>1sQI*KsQ5Ec)HLtdi{q8`t%Eu@ zhjj=%-+3pw+;QpUl5_800oY+|#up2oIP1lI)!@GtSZLqyP0xxqw^uVkr|Mc9QHy9> z_tH%}GAexzVK5>|)I^Wy#XdauJ>5p6ykTHPPJadj%I`GK>y zZbsgtuT$2wHT@R%T=12`*xOBXZJ+HDM-pVDY6)jP!mxf9L!Sp*vmRO8@O$RFj}3T= z>%;OimQplRO%#x`e|Z@QBl6ER@%W0IwcL^W<`SBgO&Iry$NV;cUHIEgWl0D6Lb$*` z!^!eCUfhK zYxI})YPW%Y73e-s?__A%W!;bo`d5{iVm-2i&xegKWzPfWANVW{+iH5}!YJinWsqLH zLnNqCB5pp%?$;~eS>zrcg?5fc2Nl$R!DJyZc+24ocJ}PC2(Nd^o{VN*p4^^3mCASp zjNTcxZOp2tl6rxYUYctZ16{V`O_;hwx@9=v|?;|g$_#e=sH)-@aldb*M2kjeY{a)XK#6L1l~@@9%4nk zum%r&p7r$I)v-3)n=H&SSGVO}8SyFMZ`wP}d@*J0FU_3$(w88fC2dplIRJL)@!xDq;Bs;y!_US0nI7=3NU_j@!ak_P3u8<+1`9 zLlY{@U*=*C2pQZt?rP8N9pk&d2PcL+y-BQe`^n}@)bbKfwj!eC4&lcP-3UJQYv9kt z{{RJQGcJpvLvd#}*_Pp>Hoja4yMWjVk^^Mt9{J|FAr`1z>LnM-aNiL0?MugZQd#)A z*3G;@C)$(4>ayTT5kDw?+<-CNWCDUk{J7-VDu zK*dzjz9mWHU3%)u>rzXv5L`=gnl1d6i~j%;;H2OJpb>=~N}T$d+W75hs>k5(4%%y1 zcCV>RbddR~xk;aH0qNB7&NEvm^2#xgOYEbv@Sns@Z^m9Iv28Q#_Z|;xQW`;zv?a)6 zyE!@AjiaYr^ISj1PlS3dkMT!9TR2uW@fFp~_p0xb=jGg2Ju|%Y^{%7#e%5V#0eu&Q z^&csQLEn&Bm zA2!`j%1$x?#&gX_@u%U&r|}2Ex?QfBHH;r)yIZM6;*yUTQ;;}6H>Gj@6w+k)t>XPB zU(wB~>AGw(S;-Xfx7xP?K_HBPypE(A#+)N0+suXs}6~cI$ zPxw=M*1K`y2`x-ME0*Zkm=x{@%OI?W1D}{2^IYzycWr6=G3k;u+!3N*+u{6@6@it8 z(4=H=Yo$?yl1UDwI6YD79s~HB@iS5JU6SAEx^y}d&pS&hDBtAs<%Ri)&q7Hbg?lBV z`O*F0q=3ZYviu_o!=olwo~MtL3eEAq#Z4FCy!u+|lUzsrt#~Y;F+kFVax?Rh_gCE4 z6-{MijyZeJL}>W8#~N>ev}e>cOPH-}BPy~=`2kBEqu(T+E9XsX#QMjIzBl+*<5;uP z%n@oAAK7vt3m|~!X&m(8srzy$9EmTEFg`*;Bqj;5rfm3!T6oxFB5o=_IuWkinRMXJNbxV403LU zSiI#38wUz;@7NmTzCY?77alHaT|Hrk#FpBu3wt!MGZt-$<&5$VRq4{YUx@a8BGSKR z{XzU)cc#sC9MQ43jYtTMFu))H4hMX7tv!rlqSsRC#aSH>f_^CK8nm7ju<*ooH?}%_ z!rx!serrgCOS54l6VbW@+P#@RZKZ)$;E|4ozJK@$s9F3YzqN;2l~eu`3xWNZupv9y zP-H#^2VOJBHS`jk$GKOb>U)o+bK+xXq0L=8j%H;40B4L;mX18cJ6j8!9+@=wU|C;w zdhkI#Dn)`g&&pe_2NliBp~y3qfx*e+Z_d@ATl+6D>9o11vjnl^mRm)8LcKmv^=R1DaJ;k$QLJb~O1Xj1qQypmB-_ z)q_aKYiE@h$?Z@%-9F~dG4$f4E9WNVW!!lptC;Zx&sm+{+qL1bA1jl?m=ax1Bo z@(Qrranx5WgF{vO7=3b%?O0Z8GF9D({*?WUh@ z&_Sgv(|MaEh>{Q9JBBOp{{Z2ck{{c<;qxxt%i_ydRqRjCk;Q)4TWN?c?CzFXpLEbM zStQD-1y2L(UYHqw(IVt@pOSn~|2li1+*}^Pl!8zW&Yqq-=}jVhQPm`UyK^BRcV8e8pTr-+zc>E?V!$N*rF6~b z<%-Kg3=u{{V%5`%vHOA7@+7vqv7qbN2~}eqrcEVd3BW zjbnWe+B|e$@s8Wj`oqMRVBYBST}c^|(@I#Givqbvaf-F8T&(elpu(#tBaR!2r~d#1 z>-eV^$G?wyj2Bu>yf(TPgL5^{+7>zO+(=a;#zzcWcW+wmrSKKLo2KfJqO6Y&t9*$O zP*x@TL+w>QnCL6}7LH{`RMj;0OH=&bd0rt`l~%g5%x&%xRGvlJ(dTJD?F!-kBu@;t zD5$}5IsWlA*=zdkuAT80`wv#tbbkuk&7@pvF<#%>O)A{Zg@ksYVpb~BFbWuq4s%>L zjWmm;x3`{Uja`viKpQ(4fN}3%8=Gd7D%70_y<&ZyQI*%F7*?9nTO7r_rru1m46h$r ztEpTxM+(1q{MZ$}WuPtQmnG9O{_Om~gYx=QhlQuqej3H%nB>wwvgFlUMi7ls5A6>* zQJlH8-R6kCQa6!;NUw^mjHN}ccWdZZ|8E;cjY2jB=jdy(C z-aXC_O1t8HJ~q}LdYKGuk-N1+q`((dP}yc2jl&o?uR{patrm`Y+EbG9K8F35(QSMe zs54vnjWqL=>;nj}IQrn%ns{1BZQ}4eI+g6!wm)uGnnjQOOn?Bg6$d;wr{!L!`z-3w zXHse2WYZ(z^nNJ58xofzi^ zySU-WDlR*t%HW$x;uN+!uZ{lzwZ+%O&3gX;TD+T2yS~0~ZcKKbNg8cSKn;oB<@HWi&+ zL1@!?V8C)4JZHJD*x!Y7t)Ih-J)kwml(B?G1x6REH(sW{6@DOo!~QJ&n!X~4b-I1MLd7?>%^q-Zn>oX)uThV z*7YcKKln-RY{iPqL<<=+IZeOy)1O-KvZ`^OAC_Is^NNym^ zY}0*$eX>bvjL66Eyq8gua{?7sQctNTfnQ_6`E5EG zk2DWAGR*2?Fuu-5=nwo5ws>OrPw@)gR%s+(75?b3`-Iv+Sp7NgU!XRU#<4WhM+7nN z*f(R4Fi0Mm$j?gr_5T2ZB_+ML!*7Vlv8zuXiB*?#5JDSEbI-3i{VVTHHhVj$#EmOR zu(?Z!%5^(I$j?#E0Un0F7mBI>0K%nL=6z05+QLK7=%BTd8zs(d+CY4*iX`&KP!4gN zinTSJypS|jo4#caw`Rs5edovbazLs&UF3GtpDaitnqml@@q>YkXP_drA^Son+FCgz z5-3)Y0r|NY1D>DZUp>lt3^e$^vz@-rav_l+VIzoH!j1`C`kz|pG|fuhZ?mh&s=HaD zc3d-H9C4qo;aR$A{{Tywe8W79G8B-j5`)Hjcj?}*>4G@+#Ut)zVpd5LG4DKKFgPDt z4C-uKwA7zZk~0e1++17$V`)*B1e_6^9DO_1r-&`)zVOze3QH7|Ut7r#M@2xzkf|Bx z1Da&3VPLA?D+K2NpL(N@c6{-re$75I z)BgZu-v{_!XzW*9(EL{xrtnXC1ZLP=Z`vhLK|4t!k81C3{sdfWKef%riZx9)Nz^&B?(}F8DYsGk@TU(2ExrKvD0MEFd`Ot);6hO02s`)Y0-+z&2gNW*!D9J-RfpG?=2 zij$MOH>J7oAN&^@8K&?>n&Ll};@CyJ^1~0iA4>Ss_HFSE^nbIv*sO6an(J4$F?q6J zB#W>Rqa2psj-!hEH~tHZ%zO)M(){YOTNs0MQ@Qd-*P+dRZ0Nrb^=|}z&w3l__eL{6 ziFHMkJYkVYirA(<5>FM)m*q7xDs?clekneu-{pCgEDEEEt?;F(^^UdSy;?mk;t^{! zQ!JJ?c9zyIW?RWTxg~i(BafS|-acHCYZFwqy3}g0 z_pg|*e`_BY!tmUGYCvSP0w_Oq^Cm$Dk;o)*>B*!&wbzX`2;uWCt=>Ci+Wuv_<7YWg zPd(`W0Ej=FzQ@*4@jEGx#NXU~K|TG(rQw9JI&6M(NVhNuPN0K{#wOdacFPO2hF}NpoIOx0%2=uQ8U)tlvH@2;B4c)l;3XDO*9)q6Xb49o9 zMdF0ht_RyR`J|cDmUuTX+w0HQueCV%Kb9^zJ7+z?=O(JzT+MH*NX;3JM^+9)0vwKVE5mJnX&)15R+1Zebk>gLhV(EJryPuo z_B57%v<|hWublH~>%0^(EF=eVPftODKU%N&ggM>YvN!(#h^dlYzGwFy-==F&{jJ__ zwl&0(pg>e@Wj}b9&m45(v%E*CTIdr=eKN}&7Jt5x%Y4t=D*F0YjW@?VdKsC5>8&C# zV9yH;nCZrUn5-Rp;tsFkyUY$!=#FDW%`NWLccp3lU$P~L60hVtU&*~nZC>Oa6&Jz)umx9;MUOr;5u zFu`(pJpTZmYHdSOoBMfVNh5|EbPDHh-frZ5Ip^M+Z>la9Lkw~(Cm|b!X7{h@d@dbO zqNziovHaDH#5(omT3fesw)hsY>E9K67ct$s*Ts56Aypn)p}R$G-@n*3An9qig)i?njh3ds(&rQIbY8bDF1R1kj(A zhUq%ijFywyfEW0>kZCf}75hT5ERp1GTsC{wP1+{*Wo?_kO1*n+HKdIjDfx#U^_Mwd ztfX>(O3FsDA({*wxfnGB$gsg8k-3=<1obDiJZ@jFrBd-NnZD3&O3ZC@5&h`vA8e0$ z$-9~s?QJBoRfUz2HgqF^F@nF&u2@ML%Fr~CtRa41NB;ozRdI19p$Cy8GP4cq&hBlz`i?vYS?(OLCi{{VsE%)7s_e9gb! zChBp!@&dUnN5pMyEviP5NwzYwhbJsIX1bpmTK$_%@WRU+vHhRJ@Uo%ckX}a5>s-Ep zX9lt2>ol4*5qVBz1-kHY&({_2?#~`Fb~U^u;t1u2c>I-xV?fx>dY*!ttayl9>q{Tm znoCiFSh2`CImL6L((A$UK<=fiq+-#R9RNKK`zIB0{{UTwQno^42+aG~_D)ISrcu-* zC1ZNt;S3YJZNKCosq7AV*K_*`Y2R%9tG*koVYXT7*B6iN3O*w{I2L zr<6|$7T92)a$3G^3Aay-uRVFL*?b2bJ42pvk61G4~54{FKyZFT2(3dS}?SrwR!ah2c?$NN}4YoPxCg3D^MUjEQO3UsNi z3rBCGPSKz_2n_3-k5CT>+}0<6BMISKRZ+J9ou{A#`uo>rKTHiIe2sl;$lO)i)8=1s z(wOY#W5!C6fICx?Vps0`tJKtY20)?ra65t2SI^juEI#6KYU{azvmciyY0tG~U3hCv zxYQ%MlHSH?**;kvkjSf(-#G)5UQhd8TRx+rczzPEzFkWSQf;MvPX4?c;=JR=9|A3O z9}Fv4>erfvtk9{4P5VNbwlkf?DEYD173yJd{Lxar=8BqU(z^cug!J8C{y(j4uA`42 z2?DyPBbs%mfizt-y}q^bpTbXu5O~K|y0z7{8?74hJEnpd z4aoB*kS-V$CpjE+tiOq#7C#Ssae1Xfb9;FWiGZxnaDRL9hUh&B?Ol<;+Fs2_J(cvi z_E7M4if`KD9XCsY=0I}E6l%xUpIrX{T9Qoy$5K^RhR*A0zzwmsAIG8kSHpK+8`ZSS zd9EbWHG61dj#nkw_NaFmC+bN2=+gA9UtGD8J9}M1-o@+ZfC%12sOeuK5>H+FA?OzA# zmb#XdMZMH|g}j2=HE5=tm5ATCXFUggeJil>=fkV73g78J+4Aa_w|dkw%`9c}A~4!G z1Fk{hl(05y-WS!EbL@#@f_rU-AD0;moNfeTBmV%cRdn3~&%=t|L@?VdgzhQ=XFi^_ z@h*koeQR6P+R3c-hMLk?M2M`#;8DlSJ7bi$}6ke$ZjoGapq68 z!Dj8x9Xr%43g+cfGkA5i&#?7>1nGLk!kf!GTceUAGb*;+jGP1C9+a0p0nvqmTc(?2 z@Tm_ROB$8qrU$KjsjPe?8a?-hnY9f;n_ikmpM1YHsoE5>bSHz3Yez@;JS6ywsCad? zElKTQirQtJro%gI+&JhkNfazCmXan|dv!jo(>$1>F)!}YKDjsotLlCq(r>T!-9v9P zTexk^RrWqQkA9rj$rfG*mh0hev8_pUc(Z9zO8|{7cdVP8a>csmllcmt;fKPBd}Dig zE~RyUpvKa~)-y=!{+Rm+B0QdO0MFD@cr|Oe2i4Sdx%LEBvCRmN%O*TzDL*J31#|Iy zHt_TsgIo(65g;UQD7&I#*B$bGtK^@G-WHeP--ssDzTK&6G27a}1oF?ba}o*Q9^BV5 zmvber*@T2sKgUNR4>_GjDB{4>yv_ni7|tk+F2m^_gNWpHv1 z(tqo7ZdVZ;IBo}bQac&Ogid9!bjB-KFYvL~oSZdn!`bTMPs!q!+Ox{bho=_P1 zh#iMt!nJ-d_&K}@;utMcP}Hu3`f5uvNijo~k%1WY+73-Og?!wuT9fs4dvj`ij65Z! zTU^5B*+XV{x6i>GGDr_OH*Wd_i?I?I)e63Cl>^zR-4p z%2%g;wE28RbS90K=T%jWi$ zp}AqsayuH5J`{%g-My%WWeA~Hjt)J2>B%5=W*BGa+;rx=!|-(+V!2eorQ5GN^W z27XokRn{?6kfQ;yk&d;>{7sCllCqt-InT8RRv-9?`Lp4vYj4||;rzjy&2JT3NH+0- zhR%Ol{j-YMr?%6i$i(tQLg%L|Ux{7`nV0s}_=U*Y^nui0&hW(TDL5DM$E<_Pb!$9DfgQ zYPqa<5^ol3hg6y?a;t3xylA5Uszw(-Qb8ovo*CfdUon;XBlW)?F;0#{AMqo~KV|;_ z+Z)B7v5n5Y+AoGYDXuq&79_kH#7@ks9(Jm-o);vXcQxtS*X`HhFNq!mH<0N%M~7}T zOZo3!9XvBEGCQ*|M`N9&<$yga#{M^G-`G05n2lTH#xu(HuG8SR!z-TG&1(4DOSik#rf6Ssem5?`9|9}Bl%Y`;$MZDFM&KU@VfIy@x`XOs(7oziK|H^ zjDIzTp_SQgq#u>OY+=4^u6x%>@I`*p@KaooRL0V2I;g?^A>>Fg`DgR41K>7`rt2OD zwbZ55G+P~8!uODB)*61LF@_%y2*@VdIRGI}6^Y0>%HzFu_=E2I7kw;wyax_tUdyRl z#-9y*V{xO4i|a2JM<>oCibZx2y85>`Cw6-Z@?qf*6KEHa>R)5lwAGtFRm}0UUT_)v zrLnks^slKV{{VuPc!N>!JH@Bj_-ft@hh@07n&Zqc{aCI}cH z`7S&^s5gefy`8MqKWemu?<``LDL9c%NXB{|2sQbyEM(=+@;>^~f=VVw!Y>wUTJOZI zE*Z70Oa4AqIQ)lSnq2&YJuq9ZJG8TBHEOUZzHiQGsriVkh5<2v&cEG z$BXaU(oc&XBe#z8;g7*x15%vrT}wvM=F%P~<%F2~K~2LM9CB;*@BRt}C{`qN+y#9z zq=;1cC9THPSe)-ZTMQ04=ZgGQ_=)=rc=qo} zowVNy__OWS#7PL3OLPv07#YW3ewFsw9$|*V;(6-HA2~b~dXQ=&I%Cql@6)XJuGU!s?#}Nk{A?vi?XB)EBe!Govq|%Y9fKcIYvA~rq-x{p zP7dj_?lQV^h8i)KM0GlRe{Z~56+D~*z^L6HZg6?cYFOqs+^KaMw(62{cBPH_9V&s?W-O>Zdr)OIsGf<#p+l>nX&I-0X>sKXo~qq&i0kZ@IU zF^)n10PEHAvz}2_v9+RHwoX)T+!rNwvZ3U5=hmI5Pv)beL+8U7z(5De4{$nZ?svkkIrNMs$k0@6j@sd)-}}e;^4(g#x|L?2l#eb^*FtNXkFv(c48cZlIW-U3%I-c}b-?G6 zDYvjkb`_YgWpF`O$0M~z4Yw>9{{R_3GW5x=TJ>b#x?B=0T(hDPzzot#3CDgh?O&LhmBf?&&R$BzBS~Z8%cfcJkOa22{{SiD zAHq$3fq%hUzCHL4$FggdHa;@&t@YKsHnA)g+MH86vPk6P2dD>;+P^wHPvaq@d~|GvJyK0Vc}qj+Olr8q|BE^H&+AWN%M>HLI$r+L^!wFi$_yrL?|l1X9K}X63TK&bjG)MXJdv zi8M`EN1egSZrVL_(Fnob0Iad3oNz}_ zI@O&!Se7@EIKs%=w`XQZ!N@$Yn!PIo?g$p@(vYy0&AcD0EF4% ze>3|7SXSBrQvo102UF=#-+1EemRK}>Sz?reVq14Vr+R$!`ZP~0wmL7jZ5U{hRzh|h zU@k^EsRSyPsL_YryLNc@70bcn#z=84ld8rtK6xN22evWS@u`o+7;S83U+jHqO~qSt zTb1(9w@wa!N?h>1=$&>w1H#a>!a2lk=f`_vGdX>@33VAO@1IYle%)y&4DJ2nxMsg0 z{{Uf++3&>PwTHyr5_QovEhoS_E%X=K)}wU`M7MrSiy}b?AZ4A^K_eh8>iu-GRu>G) zyH%Sw^zUCC#TB70SjF9=vjrJ*HqFJHZ4^`}-!Jg~Vv6}A(B@~%@wOY=8TwR*=3|eo zG>_f=;q?_DIorlKtqjFTmQo2{yU*6ISq0tmZtGQ{Y=zs%2DG&9Tb;X9cc4}@bco|Y zx=rPnVMSgGZ5$Irx!#H+pugWX+(6C6!R_Q`)h-W2}F|KcGo` z+nP0=1!Yl|A*MwQ$tmp+&`NheqaXS z+;%3V4(L^(3Vg!5`QtvdOtR^7NffdTj&mL}_fK!Y)Yg%urs&<7q+{1TeJBYdblfeY zByffDWjVy0?HC*IJxS^9S0wvAq_Nn|3w@SPnOa!)ZHWEW0Ciy9&q~G8;F3FkvowU= zNatgLxQ7EH@T;+ip%xu+C~IyJP?GNfCXSnxyk z`F+RcGe?^h^_tAiH$nTb4t`;uxCgQ3q&E@X`E9wCk|463nUW}6W6dA#s*Erpzl3@ob6z|9RPNJ!8LC^D&zt1{7#;in03TtT)X(8& z*mdut;h80EUgfVOWb*CjA~Fs<&AbDTPHV$|YukygwZ9BWD=(EQPSK6sK*oOz*S5tJ zb6wj*3o_a5Z!y5<9rO5sULE^oOtN_ULAOEsxa{OAopy|m=U+F1cde=Q*u5y6zr>9~ zYt_+~;e?91Oc5v@fZTtsYnivPZ?`SiG5wh2IBtXxdHUB;@ewWVuJoAHD@?XABPt!L zzq?+w%<92q)!NQSF|1qI* zKw9d*W^F_!wc^R-jLj5(4!lvZ6*IJ*Hg0p<8L8#>%eCOnYvNDED~s>=CntgQP^_`* z9xRj1I3GIM*`UYZ?kmGyO}cz|`GWD%yKjm5tZ(}=d?M1}m&}S8b<4L={{SqcdF|Kr zQCussuAdt0?VNPoTfc_JG~=z0TKIQv&*2R{zFf&3az3P1tA>f$es7fY^{np(BU$)A zOvIllh!p_m9G)vm;&A@}Gj(nW0=_1*{p&xX^4Qx6O+Lul_+@az$GT#M!nDdr?O(88 z1>=sx;pU3cNx2Qa^#Fa*)A}FIzaKspss8|ljitz|yKLZN9dpOi-oIcz7TeqD{{RiN z7Y&cJ*`u5e{MVn3_~LwCaF@54@!$Lv{_tJ?)BgYq)JEGzfjmTo7;@7_#fj~Xl|#W0 zN&f%{owG0=T!=QExi}dE`BjhjD@Dvd@YEj;qm22!M~94zjK9RvFChD3o8V&iJ`=Z) zHw=N*N$Z|#)Xcx#DK8`QnxDp>sdwzmZIw%If8roxG~`1ZO^wg9oMWX)Ewk<28nNgb z+M#=vb@Wx>;B%VrdKtYmJX7|qgwFmIj}YQbVN~w^9DoKr`ORSbL$T82)a`CGb+?np zmiADaZPFDVXEKmODfv$sJ$jne{j4wT^w;pjlFhenr0&Ygzj)XQ$D;r^JYzM%`0wLi zgY~TrJBxi;GRBSoSb0p5$@Y(!DuN zs@Aaiz3qnNp0=Q+#UWY1jGtMg`;YOGL00>u) zd~NnP?Zi5Kt>p8D+L5_k{{V{P=~iw2K72EHZEr4YuCBFygktEaAyU(w+bbc)Tplo&PjUv_^LPgQzx0)SF z!R-Sr*UUDa{`>+cojK^E(66*)_;=$Tt)P5Sn^=a=O^$tH>H#w6a=Ng=$2=T#J&j5G zPF|f$;t!nB#ujZh1uE`Fa>Qb}U1wU+=kd!=q|a|}r~R@yA&H_fm{b6EfzNSM{9^Il zkB;^AzO|SOb+n2j8^eOE80YZGuBArl6w0qwI_}(uMrPir#+NPg5hQ$(R zMv85VxMR4$=xaJ{XGQS;0PQia-0C-0){tzowpm=A?tHlL7%q4xCpfPZ@L!1_(0oT{ zdo0$zO`XfT;w{cVQVu!{`_`YtUl>~Wv&Q#&g`LD-XSjGIPcl3|5vrV%*Qe!KeOYs~ zo|ZG@P1{r0{9WO%2Ukj~ERF39Nk*m!jazHp80QId;9P54^)aSKr2V?>mq+5lO z4Tf1aXCsmgchj_DlQy-Lndn{|fB00M8SvhMhP`zKt<%co)>PTiIr&Xm_~B!t z>z^B8ZxLKaZ=}hjK`p@!+oE04WPGEM$Ln0r!yk%TJZx+Sy z7w?0?9l5KXBKW1?zZLvZ{@1=}?(`MYVzp=_wJ$R`VmEEiL7theXHL_*Ib|Ps^ly&( zuD7E2YTDPs+I_v(hwilb*HE2^8zLcmymOvGVsX%8)~WnF_(udFkH%k*_ImVontz7%GjFBGZ#A{tGTYi zTcF$k{Ya;@@P_%OwQbI!c;tM)*EEvPZ;!ofa-l#2r_G*!5mn5ASeb3Xi|)qXcxTM$ zXiyBjBgzy6Z|{m|kz}|ri6L1q`2OxdH2Y~|5+qF}s*!lC$DY4xvDUZ&CsZ6#9Pnw+f(5Tw7TY^a$ZZa`db=+DK zydWwcDm4Hm2LAxUy(ji*ji&h5psXto?qj+qGW_@`LC0h3^cCh3T}JF$NnpTO!k(K) zZ_d3V_FKNU{{V&0p~L4{`SL|~u|$8oU?Vxf$8Iy4#UgySH$}j=ky9m62JwRR@8NO?;{3p`vl+46o1DxnGGf$tIr6 zoT%eImDC9qSob!4Fe{b#gChN$1>CWd)4l};2v={d>XdUa!mbIxRNktgdpcjfXiM#dexa+J9uLERp{Jx_W{~fAiY7OKrQr zW!=wiwR2U}X0x4s%B8<{yb&~@o8?ez$3rAa4zg@v;x%y52g4l$0^^0&nQ01({X zUR@>9`7$auL5zR;>mS2D9=+8(9cLQM65d4I6}iaC&IjXPtYPX_o-(VW9a;RFUX>_N zrmD+h-u@x@{{TU{_}QvmX?haA-ja6ntWP*(i%69@0mAqxL^V6 zS=zsb?eDar*7L>@hCm?jewCl$9}QkXcFiM4x9-M4!LJ6kQw1M!w0jWEs!m_Lv-upC zj`awxJa4Q$jM7bO_Srm!lZI%)!je64QFvMzuXPqXw+)2g^&Hht6nJXt4R+#2;iQ$A z;l5r;r}#fkn!@)i%vT4$eE0URrOIP!kWBFN344=~^>6IoG(H{hPMdQiktBBU%JRGY z(4??peX;#(h0;7v;j0fC>e_{xL#KE?Ep92J1u)T~KHwwAE4$`9M+9JTTiy{XFYMu~ zw43AGqTGO2_;^33JuAZIzm7i)+S;n5k@TZwOWg6e2MXOv z)s(cotbHrv-`gwUH}+T9>~vZ68;L`_%@w-Fj_K2==c)Yb=X>vre+qm<i!_M)Em=3EFo}n(>WFT zrTZ6rZ17#L?1kVvpY53JUTbC#Zu2Cs0arN=atJ3m>0g!q00MpvCx}mq8Vwsq)~_sD z#6*{&N7<5BDAF!QIAWO<>bmFbqjBNQ%_Y8@4Xgx@Fs#avwsLSz1~XqNnqXsD`#QH> zyw6VyiF6WicRx<=zi8hFsy6QsX}($DZIlN554fh-{?pzKwkqH7l3Ju}GQ-UD>C^D$ zzbF^1O^!%O}2T@Op0_-(24AYrE*+Kf;p`KVxaZSO$|v*@Y5Q1wIkma9Z}>>G@eGN$ERrAHxCgJ+rPBWZYySWM%NxaU z;*CDuH6_)Ipobvy`d9Pob@3|5SwgVtI;Qp*Bcid!I6Jxe5Gn|Ka4nTXUTX`qE{nII`9F+^9^LGeYAU;Zi&5Hny8oe5xl2hIA_z6-w7{0wSi zxz(CKr|kpwtN3V-JS*dE9hylufWN!)@-PE>oP*C5wFm8A@X_H|o5mUvvl1T{L2>RY z`DK^lozeM+i9Ar7zHF?FgyW`g+|!T79YzM+o*>tXk&+~GbN>L3RY!zn4X5}Vl9VOA z&+39-+RNeX#k<2Fi?o$(!9nxEZ2dEu=k;IsC_lm93w%=1JR5)GEiMgnUy4_=K>3J- z2YfrH}@h%OdM6J6GJ!^^Ug1Z4Ei5A&&fSMfr}Redh+O|aE;{Zhut zIInKy)MdIiw+cRK{$u;C$0us=Gg`-os>WC5+sKy+Epkd10+Bw?6lkEy^AGfe z`H$25Dj7d$uLB*d-XzlgU@#1W9Cxqfqv5xYyi?=P6jMKB9a-MK-%M=Y-f(N zs$|tA*YG*zDlm4`{*EU7qI?uqKlrLNRr7Fi*DJ{X06w+L{A~TMJR9K;hZ?QLpNKTu zi?ItNX&VViCye90ej50L_GvE4Q{{U$Z1Nh(e zUDLcTtoXA}y0_50OC96b$k#7$E+n>S_wEh@CO4@c-s%q(lyZ6Vd_nCft#vB{x4r56X86-UNrCCWMJ!|zF!2bXZ z)?W(PrmJ@P#o&QVw=$qz?7%U=9S1xL`b;JkwHMCxN1uqT)4BQI7yJ^o#o<+LYfzJL z-LMnM{{ZV$i~j%wv9XQ-2DPgO>z6qnr#1RzVesosjujteM%njw4C1F>0_piXt=Hd* z^j;=?&U5ntf8dpNuepD>HH`0Ak)D z@3)#4!5U~?qSh~%_1Zeo^{Mv*^Buq7l@@_l{wKP>?%0rWIs7qCAMi@3<+$9wBi5r; z;aIAl%D+#CgY@{o{{Tmik7_~TixVExYZ{ODYQD8oxF4AC{{X=%;f;66;w@>Lp>pEA#{{Ro#m61F@;q++Ra*?J( z$NoEAYg?|sdKy-JoC;FK)RWxj_A$N6?``D;PnA`8SkXeF4`4VSg-ru0@zkw6h9Eb~ z!Q|5x-I2Ysl4~a>)}Yn4ClT@0zd9%f1HBY;4(HATXe_&al>2zMMpvI~)F@hJ+;}x& zApZa_%)b8hv5_^rYCd1jioI=Uvr0Z=wNFvns-R>)FF#7t(`A)Ofg{{x=Q!k01)Erw zId?3MBL^9x@;@q8+anm{JbP8Ed8c%1UnVdK>yAmPa^AJXO%IX-#>XcWm>G8wvKB(e z8RDosjH=!C@mH^IH>T~pkAAgEODfEh6s7`D&)8WA?VURan|jIaxvV z88vISABVj|eKeLyZE~utvD~UYdZ=K)W7e`YB|#Wae=G@yr<#W{f)bLy})t2x{nDMwF>AHYq_Vam`@!Uz~B%7EJhqq%| zR@W_S6n7z7IVN3>pz-u4-l^E?2Tr~>5;SdZ<*-C?g$25kk4|dsgnwg_%keXSGu%VUOUB>ZL!6&eu6h7B z&VIGxf3`lOZ>RVtQkcmjMzFS7Ps`?GgY^Ej6+Q-QhKu&7_^#3Z$>r&3BD|YiGcPL4 z4o*+w`Wo*w#< z-NauQZDD40E2Kv(fx1TS?Z@OR=d%53-1@wBlu|1ER1w+uz$-Gtw$9r>FAM&SA0LVS zb;av;V^x$)CE0NpATZ@$rZPP%tN6umvv~IICi!DnV1SRkf+9{w*0@c#GT%C&R*!xW zckLak-;}-M!HTgoT5h3XeYJKxe5U1;g*fYu4Ns+8+%vRSKqr*PB^{ieed*S^CHA2u z(v99_oJL)~VcNquKSNXK4K2R26nD`Eib1rMl#&VQ+n=RNkxNp}<+9W66;AA<1!n8g zyH9|Vww<7SMVj4}e$VjR#9;IDoz_KiI}T6lT&(w2`eNL>L|tPHLNMvv{*}~xBt$VxF461j+N5UcP+dF{#YA}*;(`Mb}9N- zFE7n#nE8g>{VSqZv7R4UBiH;jBA*E9iWO8x0SpDT$ zAzW_yRKftVFLDoR_*%cjXY_^zf3s6wNZWPotM%K#7jl2X8Kmxv10AGGh3&^$^Ro$B zq!*F!`N#3*d{6%X1xkiXZ`&WiJGU~&;lv>dpOY`2*A=DUbn-MyMGVdRlns%9zS#Dx zfA}eN%U%B3UKx%_Bw20zJr3iHt{XTQ^&5NoirVm$>Y630use)PoY%9PX@;b{kIm)$ zX&N^L)>FBL)jVeyG}z!-)we$0bAUKB$>Ud2vS*%|J$un`e3+D{ZU6_7_*c*LB3qd{ z?}Rkp5GVRgoO3TbRmUU$0M}TSUkZFGv+e%G(#CMX6%mSooObs#{{V{DlP7>Rq+c{Y z_I1YGHq(%Yzu{ju{4uq>@NS5@=7SC9wc-Yj8+o+9w5+Wh8_rm5`M4N7=dF5JN^*4D zPQc>ieIXCR{{Rc1ky}O5)o^)eg6-}|>FLx|*8czsd^0u6O&*J-v6FzW7UUW9&*@%c z@$0}a_~XLTc#28&3tQbD$(1dmZK)t;T<`qx?OlJtomx#h;cbID++E2Hk|!m*;PdM=zY%blDRB5=(ifdE1)YyD(l4&4LF~JJ*$b5b^tbJ@|2~ zrk`%wrllRl&BPjWTyK)>7gBcflicx~VyZOiwCwdjqTf^7Pr^S9MxZW@rpF%a{{X2N zKTQ7sN<;9A!hp1&*qV7}`3jha0CV?!y=%#SIe4z)UDA9Ld39}broFzTWSts(2xKv- zIXq=Xd(>JMteU6o5p91R#Fs&|c+qZRx>iy$xf@jDcOtHy9&(R2Gwb*h?A@<(*vGI?kayH&zpP zR9!=B3^yB+;ZIWh=OhoqHNB(!QNQ?o@NdJbYXe<1;D*a&lYglNIbeEZA6~+rv8ijP zsQsL_x$9E=E%2SoxBN-;nHiNrA0c+A_27RhkbEQX%!wklji*Rh6)ez>GuI!bct69B z0H=UHHfZ)Xx0lxt{{UvoA(mNpFfQZ}K)^hV=DwOm-2q&dP%)nW09u;LP}1gAIimMD zwD>*YtCnW|$xPjWzWJd4avB!i>9~F=57#zMtuqA+L*rwyekoAeH%+fPyhx5UVU@_0N1W} z;@|BN{{RZ?*u$skwz}l^cOFdfi=C}*0MA9wCyofNC*uc>HBX3N0WU5!4HoN3zLMr5 zZH%RMrtUGj9Y-~#I8~Levl4|%9=rbl3QNLUzFh}RUCV-ek(?S?J_vYXWXouF8D2p0 zRDth<)9|iSN%+5gXMf>+H&4@BSh2bcx|Q@&?iM>yc7wM(pPPb3dXyJ@t8V#N0zl^# zocZGH*_`>J>~bIQqx>x+mHx)FRoj5RUQ~TODbjow@UAxh0Ag7Dxg+;r44+?LrFFr> zwpnliJv!3@s6+S0)5*qoCZ*M%a|upIINt_5A0${B1&Xo38)E}JVwgS)cwRK;M6qMg z?ukfI=m8v8Pk5eWUoRVY$f07}_nRd9)q7d@C!R+teh2tgebP6F^wuHE=gS!ywPfJ?pI(%&AMZZ+!*V?Z9@c%so<}5p0(eg1 zHF-2mJ+bnDVi?<=pZ>ZBz>f*X2En1}t=E$XB-dW7qD{C8G04waa!9^d{`P%3iao6R zi`q-M$3MVd3kY_9VCltV020uyPp2lY=|2p-KjE9m<+IW(ZR84ZBE$rVoM#6a8T77( zTZT)2-*)!tRqiKQ%Cf62I5c}ncONr*lL@|Gm3Y9|I%1l|SZ>G6yyG+~;x1dV-AkC@}Vj!)Y6!R;c+AD7}g9H<{LJH`R}{{UM3p3@?4Ce@W=U*99hGlA3|_4v=B zTSqtTk>HhR)vaXlMT1OvQd7+zi0xmp&n$3g@JP}aZR3A9wldfa)A1ZvrHuaomwt!P z(_ZT`{{U&74YiNkQ^i+OKG`(C0P5*E}8gtKZA@HS7SIar|84uUhK_dTZH0*9_6Pk0XPC2V-1*n)`0oCmi)X4OsAf z-R`yHFB8Pld6v3k+QSlO!-}MONgh@EOlebC z-ZMvSBr(W<@7h2;`u!`^{sa6Bhs0k7JT0o+$YWcJRh5AlVU{@q*B_No{iOUQeeokt zPwf3eMzogM{%9`lJee*R%L)6uf(|j0(*mh@Q}&IU;itmwA4fJew{4=^i(L7nhsJ#f z<2?w+75jv!)4*mGV%yfo@y;5(Y{M>u;}v~RUD7-QW34ZYmrt?r2BBf#T{b;SS--W0 zAq|9b1F*K|4E&BnYQz9Zz^@bdqXcbu(b}#&u&C+|7%&4lt9}OYy}!iYh?e(P+HRV& zYFi_eWq?@KLBKn{WAXw4$j>#q@h8IzscUmgwy{kkV2!W0a6Y*HzLoO0srkt_zFJ^HN=znb}d2mhP7ozKWb>&J>jvq4Xk+1E6c@u zc=EbR`s?U*(2N^=%*OFO>^jb%tc6so9-NBJfmYsgwaIRn>NjSvFT7nGSCfA2*Y~A} z{_SXZQ(2Ety=5x+kxPJ1InFEG%A@=E9#&y>LTAw$8-1JhT-9Bl=l;i(e7*AB@%dMR z#i~Q%9}iiyP`chLyOmSB_h52QraJRp?WHt7@XMFs-J_067m32KMT_@<43p4jsrRp* zG~!cCjxxSfys0tq*BRt>&3YVh6zkLUIeb08C1>Vex4l^{S~gyHe-}Ydv(av~yHa%M zWV^ldHYL0enIwFIeozKa0Ps3fEHte{S%O8kSp2&b^Cl%Wh!hYvNXLQB2RQ3Z()F!N z!rJS{Z$FWB3KoicSK9F8ef4$v^{<0{Qa?_o%$4kY1^Xa)0^>ux@ZX61PTGfuv>zE- z-dXCJ#Ea$05}{|bo+z=%Mu!6cQa#lIYUW#c~*X>-LMo2A=$ zU9{ajEb;rsk+v*s`N%8|NF$2*OHA?ZsUC=$cBy@@-f4EWrVAM1xm~u-8JS7mt(Dx& zc8q5yn#a;K?Q_Ihq?YzK*HcY$!3DPFX>Lo90wNE*bB+hCd3dZpwzHO&3@jZPN>;xy z_qXi!zp_4`HlHVtz7%-3#SzUE>3@F~xYJuhBN628wvJRW;XwhH13a9X`Iq*x(|iZv zuM?!68MW1}EpFtQH0iIdM2%@?9Bf0k@0I(%HhR|wbMW6<_-CqG$#o{BZ*i$e*2x_%06z`{PD$T-`mGyB#^qW zk}-~+qmS{Z67Jn@?3s~##eBs5HlOlqxa;MylWC&EY-ClAIUgsHj401aw;ip#_TMxr zySN;6#Y3ifYaf^9ZDAt@<9AN}n9W^j6{BeWTyFc=8CnWaL^5f%;zivYE0RBhis(KY zc*|7yMdQsU#U2`-8y#~;m(I76NK$BI1QmGXMg%l&g_Vb);{*d)BG=4=bAJfV)8EpX zp=I0Uh9#Gi{VHVzC1zE$WQMwR&es$}gASToT5-B^3tGr_d&4jbDhx?6bs zo#9#WkgP{f@+#2MEmc{CyjVHORSR0Wm%|vZZsWf2wd7N1_lWXK9o*}0CY14lUMY8x zf(XDJPfEnKpK_m@EI#lDJlC;KN^6-MJ3AA@Z3I!S$RZ2LAVvm$wI|rEW`Fqiw^r@~ z0iRln6FA`QEDDY~8Wu98RhhRh7#+{0XjYfhZQhA(Z8PnKWAhG3*~JN@TDUCM(Qa-7 z?HLtoQE9%_`{H+W!5sTgmr=3%yf>hrzjUu2l?ABVqjP zW@bBCN6p-01Fum|F^h>Xs(9mrS1h!@vfe=Q36a=>6yrGc9`%f%wPkW9ju*jtWR{n= zaB4P<8d|YQ?dBLHblO4s*Vq353jYA$uHO>87vPiOJxgAL#(oJ~1=HKZo+Hw2uPjUv zrp1gp#;%|Ye-Y>pCcLBL2ZMeR=)Vaq;n6g?wQm|;YRxVFxvA<`cJta>KGGvdR$n7( zfJRsr!O1zL@OSJ%YQGG%i|tohx755ruWNSR8u0a(hx}h<3TU^pOsO2&gfm87OKDa} z$d)z=qjqvZt_fC(iP{;G!D8?QQU7Z2WPrcpgdq9K4!cjf58F4NF>E zkO$g|<7;7J48=CCTcvREe#agc@PyjtgX7PN-VgXE;|~d4-B{k}dZwqTYX1Q6kUU6@ z9MH6Ck$G-O8&!`^aniYehTj-`LGY);{v@@~?R+D7XW|Ql)Gt=|MvCjtk{Be7V}Z%t z6gymfV7z11eA7X1DFRsk462`tXwK=3n@hX>7uDWnjPA*6p+g z?dW^vzj8hoU46g78bqab`IZ*X_?VQ};otleTT^Xcwl&9`c+$)sAl z06Pw%zi_@1NVgvkJU=4sD<+p_>y9uQ2+00*?$=+rx0&VQKZ#?ea-jZ{XDrHiUdEA$ z-;8}~P0J%~>A>q=X(UcC+i}i1_MxN1i|dU2YDM`AZtQue=9NsFz3AltM)Mc0Iiqd? z&tr;)V#@RxGxxLW^`---`Im1`N@vN%ma7Jnta14f!d>G`A0oDBi5-Ik6V{Pj(DPl zg^JNfC?7hL<*?`F^r@j}!xQ{RpeCSCnNCMe-nBiv86mdh`e&_dW?r?ORY}};R+gQ4 z6cKIS-e5m?3e2~IVg_YDPfEKKA7*8d^v20SZwsJ_msuC1P&Qn=K0BfOvH&k7iHtoxY?xn09=YMx7d@wVn|%hTSeT#$43 zzF$hsnxSNUiSBw;3#5U(L8tlK4$&^eJeE6fNFKnNy3qN+HzY5uQo7Q<+pk)_-``rr zERhr0j?wuM#bjt+iquB_NoL!O4Ej`%1(rhtF3%$eB=yfqZSpnkqj_KJ0)v6q-}=*< z$X?lkq{*-V{-tOF#^|*Oe3lF(kBkwFpQoi+cqF~kS?%#0kf{;wUCQGaAdf-U+ZA6@ zvwQes*(crFtl)B(=--zgja_I-o+%?IYcSkYb#D0{^cn73wMo9uYjZP3(ndl!ApGQX zap}$g6+OXk?FG2b=947u>%Z6OimI_~yeg<8w`V0($m⪙H7P?7@s`-6M7(bJSP0KZx<^!$RQIX49^& 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ÐjXL-!keSaL-kV?J^AsFldwWJ^5i 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 -#ifdef USE_BOOTLDR_MAIN - int main(void) { while(1) { //TODO:: Please write your application code } -} - -#endif +} \ No newline at end of file diff --git a/arduino/bootldr/bootldr/bootldr.cproj b/floppy_emu_arduino/bootldr/bootldr/bootldr.cproj similarity index 100% rename from arduino/bootldr/bootldr/bootldr.cproj rename to floppy_emu_arduino/bootldr/bootldr/bootldr.cproj diff --git a/arduino/bootldr/bootldr/diskio.h b/floppy_emu_arduino/bootldr/bootldr/diskio.h similarity index 100% rename from arduino/bootldr/bootldr/diskio.h rename to floppy_emu_arduino/bootldr/bootldr/diskio.h diff --git a/arduino/bootldr/bootldr/integer.h b/floppy_emu_arduino/bootldr/bootldr/integer.h similarity index 100% rename from arduino/bootldr/bootldr/integer.h rename to floppy_emu_arduino/bootldr/bootldr/integer.h diff --git a/arduino/bootldr/bootldr/lcd.c b/floppy_emu_arduino/bootldr/bootldr/lcd.c similarity index 96% rename from arduino/bootldr/bootldr/lcd.c rename to floppy_emu_arduino/bootldr/bootldr/lcd.c index fd19604..b73a8ea 100755 --- a/arduino/bootldr/bootldr/lcd.c +++ b/floppy_emu_arduino/bootldr/bootldr/lcd.c @@ -146,4 +146,4 @@ void LcdInit() LcdGoto(0,0); LcdClear(); -} +} \ No newline at end of file diff --git a/arduino/bootldr/bootldr/lcd.h b/floppy_emu_arduino/bootldr/bootldr/lcd.h similarity index 100% rename from arduino/bootldr/bootldr/lcd.h rename to floppy_emu_arduino/bootldr/bootldr/lcd.h diff --git a/arduino/bootldr/bootldr/main.c b/floppy_emu_arduino/bootldr/bootldr/main.c similarity index 100% rename from arduino/bootldr/bootldr/main.c rename to floppy_emu_arduino/bootldr/bootldr/main.c diff --git a/arduino/bootldr/bootldr/mmc.c b/floppy_emu_arduino/bootldr/bootldr/mmc.c similarity index 100% rename from arduino/bootldr/bootldr/mmc.c rename to floppy_emu_arduino/bootldr/bootldr/mmc.c diff --git a/arduino/bootldr/bootldr/pff.c b/floppy_emu_arduino/bootldr/bootldr/pff.c similarity index 100% rename from arduino/bootldr/bootldr/pff.c rename to floppy_emu_arduino/bootldr/bootldr/pff.c diff --git a/arduino/bootldr/bootldr/pff.h b/floppy_emu_arduino/bootldr/bootldr/pff.h similarity index 100% rename from arduino/bootldr/bootldr/pff.h rename to floppy_emu_arduino/bootldr/bootldr/pff.h diff --git a/arduino/bootldr/how to configure bootloader.txt b/floppy_emu_arduino/bootldr/how to configure bootloader.txt similarity index 100% rename from arduino/bootldr/how to configure bootloader.txt rename to floppy_emu_arduino/bootldr/how to configure bootloader.txt diff --git a/arduino/floppyemu/cardtest.cpp b/floppy_emu_arduino/cardtest/cardtest.cpp old mode 100644 new mode 100755 similarity index 95% rename from arduino/floppyemu/cardtest.cpp rename to floppy_emu_arduino/cardtest/cardtest.cpp index f24bdd6..c08effc --- a/arduino/floppyemu/cardtest.cpp +++ b/floppy_emu_arduino/cardtest/cardtest.cpp @@ -1,235 +1,219 @@ -/* - Floppy Emu, copyright 2013 Steve Chamberlin, "Big Mess o' Wires". All rights reserved. - - Floppy Emu is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported - license. (CC BY-NC 3.0) The terms of the license may be viewed at - http://creativecommons.org/licenses/by-nc/3.0/ - - Based on a work at http://www.bigmessowires.com/macintosh-floppy-emu/ - - Permissions beyond the scope of this license may be available at www.bigmessowires.com - or from mailto:steve@bigmessowires.com. -*/ - -#ifdef ARDUINO - -#include - -#include -#include -#include "noklcd.h" - -#else - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "portmacros.h" -#include "noklcd.h" -#include "millitimer.h" -#include "SdFat.h" -#include "SdBaseFile.h" -#include "micro.h" -#include "ports.h" -#include "diskmenu.h" -#include "cardtest.h" - -#ifdef ENABLE_ORIGINAL_COMPILER_WORKAROUND - -// work-around for compiler bug -#undef PROGMEM -#define PROGMEM __attribute__(( section(".progmem.data") )) -#undef PSTR -#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];})) - -#endif -#endif - - -#define STATUS_LED_PORT B -#define STATUS_LED_PIN 3 - -#define TEXTBUF_SIZE 22 -extern char textBuf[]; -extern uint8_t sectorBuf[512]; - -void CardTest() -{ - LcdClear(); - - //SdFat sd; - SDClass sd(4); - - if (!sd.init(SPI_HALF_SPEED)) - { - snprintf(textBuf, TEXTBUF_SIZE, "SD card error %d:%d", sd.card()->errorCode(), sd.card()->errorData()); - LcdGoto(0,0); - LcdTinyString(textBuf, TEXT_NORMAL); - while(1); - } - - cid_t cid; - - uint32_t cardSize = sd.card()->cardSize(); - cardSize /= (2L*1024L); - - sd.card()->readCID(&cid); - - snprintf(textBuf, TEXTBUF_SIZE, "CID %d %c%c%c%c%c %lu MB", cid.mid, cid.pnm[0], cid.pnm[1], cid.pnm[2], cid.pnm[3], cid.pnm[4], cardSize); - LcdGoto(0,0); - LcdTinyString(textBuf, TEXT_NORMAL); - - csd_t csd; - sd.card()->readCSD(&csd); - - uint8_t writeBlockPow; // write block length, log2 - uint8_t sectorSizeCnt; // minimum erasable size, in write blocks - - if (csd.v1.csd_ver == 1) - { - csd1_t* c = &csd.v1; - - writeBlockPow = 4*c->write_bl_len_high + c->write_bl_len_low; - sectorSizeCnt = 2*c->sector_size_high + c->sector_size_low; - } - else - { - csd2_t* c = &csd.v2; - - writeBlockPow = 4*c->write_bl_len_high + c->write_bl_len_low; - sectorSizeCnt = 2*c->sector_size_high + c->sector_size_low; - } - - sectorSizeCnt += 1; // these all seem to be 2**n - 1? - - uint32_t writeBlock=1; - for (uint8_t i=0; ireadBlock(imageFirstBlock + b, sectorBuf)) - { - LcdGoto(0,2); - LcdTinyStringP(PSTR("SD read error"), TEXT_NORMAL); - while(1); - } - - // alter the data, to prevent any kind of compression/optimization on the card - for (uint16_t i=0; i<512; i++) - { - sectorBuf[i] ^= sectorBuf[i+1]; - } - - // blink the LED - if ((writeCount & 0x7) == 0) - PORT(STATUS_LED_PORT) ^= (1<writeBlock(imageFirstBlock + b, sectorBuf)) - { - LcdGoto(0,2); - LcdTinyStringP(PSTR("SD write error"), TEXT_NORMAL); - while(1); - } - - uint32_t writeTime = millis() - t0; - - // update stats - writeCount++; - writeTotalTime += writeTime; - if (writeTime > 20) - above20Count++; - if (writeTime > worstTime) - worstTime = writeTime; - - // pseudo-interleave - if ((cnt & 1) == 0) - b += 6; - else - b -= 5; - - _delay_ms(3); - } - } - - uint32_t avg = (writeTotalTime + (writeCount >> 1))/ writeCount; - - LcdGoto(0,2); - LcdTinyStringP(PSTR("AVG.ms/MAX.ms/LONG.%"), TEXT_NORMAL); - - snprintf(textBuf, TEXTBUF_SIZE, "512B RRWI %lu/%lu/%lu", avg, worstTime, above20Count*100/writeCount); - LcdGoto(0,3); - LcdTinyString(textBuf, TEXT_NORMAL); - - // Card: actual capacity, block size, erase size, best test result (random read-write interleaved) average/max/percent "long" over 20ms - // ---------------------------------------------------------- - // PNY class 10 8GB: 7708 MB, 512B block, 64K erase. 512B RRWI 10/189/1 (random read-write interleave) - // SanDisk unrated Ultra II 2GB: 1938 MB, 1024B block, 32K erase. 512B RRWI 7/79/0 - // Transcend unrated 2GB: 1875 MB, 1024B block, 128K erase. 512B RRWI 3/103/0 - // SanDisk unrated 128MB: 120 MB, 512B block, 16K erase. 512B RRWI 5/94/1 - - // enabling the TACH stuff seems to cause some cards to get errors during this test. Coupling between traces? Why doesn't it happen during normal operation? - - // Transcend unrated 2GB: Finder consistently "goes to sleep" after copying first 19 tracks, but worked twice after 3 tries. Maybe it's too fast? - - - - while(1); -} +/* + Floppy Emu, copyright 2013 Steve Chamberlin, "Big Mess o' Wires". All rights reserved. + + Floppy Emu is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported + license. (CC BY-NC 3.0) The terms of the license may be viewed at + http://creativecommons.org/licenses/by-nc/3.0/ + + Based on a work at http://www.bigmessowires.com/macintosh-floppy-emu/ + + Permissions beyond the scope of this license may be available at www.bigmessowires.com + or from mailto:steve@bigmessowires.com. +*/ +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "portmacros.h" +#include "noklcd.h" +#include "millitimer.h" +#include "SdFat.h" +#include "SdBaseFile.h" +#include "micro.h" +#include "ports.h" +#include "diskmenu.h" +#include "cardtest.h" + +#ifdef PROGMEM_WORKAROUND +// work-around for compiler bug +#undef PROGMEM +#define PROGMEM __attribute__(( section(".progmem.data") )) +#undef PSTR +#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];})) +#endif + + +#define STATUS_LED_PORT B +#define STATUS_LED_PIN 3 + +#define TEXTBUF_SIZE 22 +extern char textBuf[]; +extern uint8_t sectorBuf[512]; + +void CardTest() +{ + LcdClear(); + + SdFat sd; + if (!sd.init(SPI_HALF_SPEED)) + { + snprintf(textBuf, TEXTBUF_SIZE, "SD card error %d:%d", sd.card()->errorCode(), sd.card()->errorData()); + LcdGoto(0,0); + LcdTinyString(textBuf, TEXT_NORMAL); + while(1); + } + + cid_t cid; + + uint32_t cardSize = sd.card()->cardSize(); + cardSize /= (2L*1024L); + + sd.card()->readCID(&cid); + + snprintf(textBuf, TEXTBUF_SIZE, "CID %d %c%c%c%c%c %lu MB", cid.mid, cid.pnm[0], cid.pnm[1], cid.pnm[2], cid.pnm[3], cid.pnm[4], cardSize); + LcdGoto(0,0); + LcdTinyString(textBuf, TEXT_NORMAL); + + csd_t csd; + sd.card()->readCSD(&csd); + + uint8_t writeBlockPow; // write block length, log2 + uint8_t sectorSizeCnt; // minimum erasable size, in write blocks + + if (csd.v1.csd_ver == 1) + { + csd1_t* c = &csd.v1; + + writeBlockPow = 4*c->write_bl_len_high + c->write_bl_len_low; + sectorSizeCnt = 2*c->sector_size_high + c->sector_size_low; + } + else + { + csd2_t* c = &csd.v2; + + writeBlockPow = 4*c->write_bl_len_high + c->write_bl_len_low; + sectorSizeCnt = 2*c->sector_size_high + c->sector_size_low; + } + + sectorSizeCnt += 1; // these all seem to be 2**n - 1? + + uint32_t writeBlock=1; + for (uint8_t i=0; ireadBlock(imageFirstBlock + b, sectorBuf)) + { + LcdGoto(0,2); + LcdTinyStringP(PSTR("SD read error"), TEXT_NORMAL); + while(1); + } + + // alter the data, to prevent any kind of compression/optimization on the card + for (uint16_t i=0; i<512; i++) + { + sectorBuf[i] ^= sectorBuf[i+1]; + } + + // blink the LED + if ((writeCount & 0x7) == 0) + PORT(STATUS_LED_PORT) ^= (1<writeBlock(imageFirstBlock + b, sectorBuf)) + { + LcdGoto(0,2); + LcdTinyStringP(PSTR("SD write error"), TEXT_NORMAL); + while(1); + } + + uint32_t writeTime = millis() - t0; + + // update stats + writeCount++; + writeTotalTime += writeTime; + if (writeTime > 20) + above20Count++; + if (writeTime > worstTime) + worstTime = writeTime; + + // pseudo-interleave + if ((cnt & 1) == 0) + b += 6; + else + b -= 5; + + _delay_ms(3); + } + } + + uint32_t avg = (writeTotalTime + (writeCount >> 1))/ writeCount; + + LcdGoto(0,2); + LcdTinyStringP(PSTR("AVG.ms/MAX.ms/LONG.%"), TEXT_NORMAL); + + snprintf(textBuf, TEXTBUF_SIZE, "512B RRWI %lu/%lu/%lu", avg, worstTime, above20Count*100/writeCount); + LcdGoto(0,3); + LcdTinyString(textBuf, TEXT_NORMAL); + + // Card: actual capacity, block size, erase size, best test result (random read-write interleaved) average/max/percent "long" over 20ms + // ---------------------------------------------------------- + // PNY class 10 8GB: 7708 MB, 512B block, 64K erase. 512B RRWI 10/189/1 (random read-write interleave) + // SanDisk unrated Ultra II 2GB: 1938 MB, 1024B block, 32K erase. 512B RRWI 7/79/0 + // Transcend unrated 2GB: 1875 MB, 1024B block, 128K erase. 512B RRWI 3/103/0 + // SanDisk unrated 128MB: 120 MB, 512B block, 16K erase. 512B RRWI 5/94/1 + + // enabling the TACH stuff seems to cause some cards to get errors during this test. Coupling between traces? Why doesn't it happen during normal operation? + + // Transcend unrated 2GB: Finder consistently "goes to sleep" after copying first 19 tracks, but worked twice after 3 tries. Maybe it's too fast? + + + + while(1); +} diff --git a/arduino/floppyemu/cardtest.h b/floppy_emu_arduino/cardtest/cardtest.h similarity index 100% rename from arduino/floppyemu/cardtest.h rename to floppy_emu_arduino/cardtest/cardtest.h diff --git a/arduino/floppyemu/diskmenu.cpp b/floppy_emu_arduino/diskmenu.cpp old mode 100755 new mode 100644 similarity index 96% rename from arduino/floppyemu/diskmenu.cpp rename to floppy_emu_arduino/diskmenu.cpp index 046b09a..0f5780e --- a/arduino/floppyemu/diskmenu.cpp +++ b/floppy_emu_arduino/diskmenu.cpp @@ -1,368 +1,368 @@ -/* - Floppy Emu, copyright 2013 Steve Chamberlin, "Big Mess o' Wires". All rights reserved. - - Floppy Emu is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported - license. (CC BY-NC 3.0) The terms of the license may be viewed at - http://creativecommons.org/licenses/by-nc/3.0/ - - Based on a work at http://www.bigmessowires.com/macintosh-floppy-emu/ - - Permissions beyond the scope of this license may be available at www.bigmessowires.com - or from mailto:steve@bigmessowires.com. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include "diskmenu.h" -#include "SdFat.h" -#include "SdBaseFile.h" -#include "noklcd.h" - -#define SECTORBUF_SIZE (23 * 512) // use the 24th buffer for directory breadcrumbs -extern uint8_t sectorBuf[24][512]; -extern uint8_t extraBuf[512]; - -typedef struct FileEntry -{ - char longName[FILENAME_LEN+1]; - char shortName[SHORTFILENAME_LEN+1]; - eImageType imageFileType; -} FileEntry; - -bool dirLfnNext(SdFat& sd, dir_t& dir, char* lfn) -{ - uint8_t offset[] = {1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30}; - uint8_t lfnIn = 130; - uint8_t i; - uint8_t ndir=0; - uint8_t sum; - uint8_t test=0; - bool haveLong = false; - - while( sd.vwd()->read( &dir, 32 ) == 32 ) - { - if( DIR_IS_LONG_NAME( &dir ) ) - { - if( ! haveLong ) - { - if(( dir.name[0] & 0XE0 ) != 0X40 ) - continue; - ndir = dir.name[0] & 0X1F; - test = dir.creationTimeTenths; - haveLong = true; - lfnIn = 130; - lfn[ lfnIn ] = 0; - } - else if( dir.name[0] != --ndir || test != dir.creationTimeTenths ) - { - haveLong = false; - continue; - } - char *p = (char*) & dir; - if( lfnIn > 0 ) - { - lfnIn -= 13; - for( i = 0; i < 13; i++ ) - lfn[lfnIn + i] = p[offset[i]]; - } - } - else if( DIR_IS_FILE_OR_SUBDIR( &dir ) - && dir.name[0] != DIR_NAME_DELETED - && dir.name[0] != DIR_NAME_FREE - && dir.name[0] != '.') - { - if( haveLong ) - { - for( sum = i = 0; i < 11; i++ ) - sum = (((sum & 1) << 7) | ((sum & 0xfe) >> 1)) + dir.name[i]; - if( sum != test || ndir != 1 ) - haveLong = false; - } - if( haveLong ) - { - for( i = 0; lfnIn + i <= 130 ; i++ ) - lfn[i] = lfn[lfnIn + i]; - return true; - } - // else if( dir.reservedNT ) - // return "Reserved NT"; - else - { - SdBaseFile::dirName( dir, lfn ); - return true; - } - } - else - { - if( dir.name[0] == DIR_NAME_FREE ) - break; - haveLong = false; - } - } - lfn[ 0 ] = 0; - return false; -} - -eImageType DiskImageFileType(dir_t& dir, const char *filename) -{ - if (filename[0] == '.') - return DISK_IMAGE_NONE; - - if (DIR_IS_SUBDIR(&dir)) - return DISK_IMAGE_DIRECTORY; - - if (!DIR_IS_FILE(&dir)) - return DISK_IMAGE_NONE; - - uint32_t size = dir.fileSize; - - if (size == (unsigned long)1024 * 400) - return DISK_IMAGE_400K; - else if (size == (unsigned long)1024 * 800) - return DISK_IMAGE_800K; - else if (size == (unsigned long)1024 * 1440) - return DISK_IMAGE_1440K; - else if (size > (unsigned long)1024 * 400 && - size < (unsigned long)1024 * 1500) - { - // get the 8.3 filename - char shortName[SHORTFILENAME_LEN+1]; - SdBaseFile::dirName(dir, shortName); - - // read the first sector of the file - SdBaseFile f; - if (f.open(shortName, O_RDONLY)) - { - f.read(extraBuf, 512); - f.close(); - - // is it a DiskCopy 4.2 image? - if (extraBuf[0x52] == 0x01 && - extraBuf[0x53] == 0x00) - { - size = ((unsigned long)extraBuf[0x41] * 65536 + (unsigned long)extraBuf[0x42] * 256 + (unsigned long)extraBuf[0x43]) / 1024; - - if (size == 400) - return DISK_IMAGE_DISKCOPY_400K; - else if (size == 800) - return DISK_IMAGE_DISKCOPY_800K; - else if (size == 1440) - return DISK_IMAGE_DISKCOPY_1440K; - } - } - } - - return DISK_IMAGE_NONE; -} - -uint16_t diskMenuEntryCount; -uint16_t diskMenuOffset = 0; -uint16_t diskMenuSelection = 0; -char selectedFile[FILENAME_LEN+1]; -char selectedLongFile[FILENAME_LEN+1]; -eImageType selectedFileType; -uint8_t subdirDepth = 0; - -#define LONGFILENAME_LEN 130 - -void InitDiskMenu(SdFat& sd) -{ - dir_t dir; - char name[LONGFILENAME_LEN+1]; - - diskMenuEntryCount = 0; - - // use the sector buffers to hold the filenames - uint16_t maxEntries = SECTORBUF_SIZE / sizeof(FileEntry); - FileEntry* pFileEntries = (FileEntry*)sectorBuf; - - sd.vwd()->rewind(); - while (dirLfnNext(sd, dir, name) && diskMenuEntryCount < maxEntries) - { - eImageType imageType; - - if ((imageType = DiskImageFileType(dir, name)) != DISK_IMAGE_NONE) - { - strncpy(pFileEntries[diskMenuEntryCount].longName, name, FILENAME_LEN+1); - SdBaseFile::dirName(dir, pFileEntries[diskMenuEntryCount].shortName); - pFileEntries[diskMenuEntryCount].imageFileType = imageType; - diskMenuEntryCount++; - } - } - - // add up directory, if not at the root - if (!sd.vwd()->isRoot()) - { - strncpy(pFileEntries[diskMenuEntryCount].longName, "..", FILENAME_LEN+1); - strncpy(pFileEntries[diskMenuEntryCount].shortName, "..", SHORTFILENAME_LEN+1); - pFileEntries[diskMenuEntryCount].imageFileType = DISK_IMAGE_UP_DIRECTORY; - diskMenuEntryCount++; - } - - char file1[FILENAME_LEN+1], file2[FILENAME_LEN+1], temp[FILENAME_LEN+1]; - eImageType tempType; - - // sort the names by longname - for (uint16_t i=0; i file2, swap them - if (diff > 0) - { - strncpy(temp, pFileEntries[i].longName, FILENAME_LEN+1); - strncpy(pFileEntries[i].longName, pFileEntries[j].longName, FILENAME_LEN+1); - strncpy(pFileEntries[j].longName, temp, FILENAME_LEN+1); - - strncpy(temp, pFileEntries[i].shortName, SHORTFILENAME_LEN+1); - strncpy(pFileEntries[i].shortName, pFileEntries[j].shortName, SHORTFILENAME_LEN+1); - strncpy(pFileEntries[j].shortName, temp, SHORTFILENAME_LEN+1); - - tempType = pFileEntries[i].imageFileType; - pFileEntries[i].imageFileType = pFileEntries[j].imageFileType; - pFileEntries[j].imageFileType = tempType; - } - } - } -} - -void DrawDiskMenu(SdFat& sd) -{ - // scroll menu if necessary - if (diskMenuSelection < diskMenuOffset) - diskMenuOffset = diskMenuSelection; - if (diskMenuSelection > diskMenuOffset+4) - diskMenuOffset = diskMenuSelection-4; - - LcdGoto(0,0); - LcdWrite(LCD_DATA, 0x7F); - for (int i=0; i<19; i++) - LcdWrite(LCD_DATA, 0x40); - - LcdTinyStringFramed("Select Disk"); - - for (int i=0; i<19; i++) - LcdWrite(LCD_DATA, 0x40); - LcdWrite(LCD_DATA, 0x7F); - - if (diskMenuEntryCount == 0) - { - LcdGoto(0, 1); - LcdTinyString("no image files found", TEXT_NORMAL); - } - else - { - FileEntry* pFileEntries = (FileEntry*)sectorBuf; - - int row = 0; - for (uint16_t i=diskMenuOffset; i= barStart && y <= barEnd) - b = 0x80 | (b >> 1); - else - b = (b >> 1); - } - - LcdWrite(LCD_DATA, b); - } - } - - // prevent moving selection past end of list - if (diskMenuSelection >= diskMenuOffset + row) - { - diskMenuSelection = diskMenuOffset + row - 1; - if (row == 4 && diskMenuOffset > 0) - { - diskMenuOffset--; // scroll backwards - } - DrawDiskMenu(sd); // draw again - } - } -} +/* + Floppy Emu, copyright 2013 Steve Chamberlin, "Big Mess o' Wires". All rights reserved. + + Floppy Emu is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported + license. (CC BY-NC 3.0) The terms of the license may be viewed at + http://creativecommons.org/licenses/by-nc/3.0/ + + Based on a work at http://www.bigmessowires.com/macintosh-floppy-emu/ + + Permissions beyond the scope of this license may be available at www.bigmessowires.com + or from mailto:steve@bigmessowires.com. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "diskmenu.h" +#include "SdFat.h" +#include "SdBaseFile.h" +#include "noklcd.h" + +#define SECTORBUF_SIZE (23 * 512) // use the 24th buffer for directory breadcrumbs +extern uint8_t sectorBuf[24][512]; +extern uint8_t extraBuf[512]; + +typedef struct FileEntry +{ + char longName[FILENAME_LEN+1]; + char shortName[SHORTFILENAME_LEN+1]; + eImageType imageFileType; +} FileEntry; + +bool dirLfnNext(SdFat& sd, dir_t& dir, char* lfn) +{ + uint8_t offset[] = {1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30}; + uint8_t lfnIn = 130; + uint8_t i; + uint8_t ndir=0; + uint8_t sum; + uint8_t test=0; + bool haveLong = false; + + while( sd.vwd()->read( &dir, 32 ) == 32 ) + { + if( DIR_IS_LONG_NAME( &dir ) ) + { + if( ! haveLong ) + { + if(( dir.name[0] & 0XE0 ) != 0X40 ) + continue; + ndir = dir.name[0] & 0X1F; + test = dir.creationTimeTenths; + haveLong = true; + lfnIn = 130; + lfn[ lfnIn ] = 0; + } + else if( dir.name[0] != --ndir || test != dir.creationTimeTenths ) + { + haveLong = false; + continue; + } + char *p = (char*) & dir; + if( lfnIn > 0 ) + { + lfnIn -= 13; + for( i = 0; i < 13; i++ ) + lfn[lfnIn + i] = p[offset[i]]; + } + } + else if( DIR_IS_FILE_OR_SUBDIR( &dir ) + && dir.name[0] != DIR_NAME_DELETED + && dir.name[0] != DIR_NAME_FREE + && dir.name[0] != '.') + { + if( haveLong ) + { + for( sum = i = 0; i < 11; i++ ) + sum = (((sum & 1) << 7) | ((sum & 0xfe) >> 1)) + dir.name[i]; + if( sum != test || ndir != 1 ) + haveLong = false; + } + if( haveLong ) + { + for( i = 0; lfnIn + i <= 130 ; i++ ) + lfn[i] = lfn[lfnIn + i]; + return true; + } + // else if( dir.reservedNT ) + // return "Reserved NT"; + else + { + SdBaseFile::dirName( dir, lfn ); + return true; + } + } + else + { + if( dir.name[0] == DIR_NAME_FREE ) + break; + haveLong = false; + } + } + lfn[ 0 ] = 0; + return false; +} + +eImageType DiskImageFileType(dir_t& dir, const char *filename) +{ + if (filename[0] == '.') + return DISK_IMAGE_NONE; + + if (DIR_IS_SUBDIR(&dir)) + return DISK_IMAGE_DIRECTORY; + + if (!DIR_IS_FILE(&dir)) + return DISK_IMAGE_NONE; + + uint32_t size = dir.fileSize; + + if (size == (unsigned long)1024 * 400) + return DISK_IMAGE_400K; + else if (size == (unsigned long)1024 * 800) + return DISK_IMAGE_800K; + else if (size == (unsigned long)1024 * 1440) + return DISK_IMAGE_1440K; + else if (size > (unsigned long)1024 * 400 && + size < (unsigned long)1024 * 1500) + { + // get the 8.3 filename + char shortName[SHORTFILENAME_LEN+1]; + SdBaseFile::dirName(dir, shortName); + + // read the first sector of the file + SdBaseFile f; + if (f.open(shortName, O_RDONLY)) + { + f.read(extraBuf, 512); + f.close(); + + // is it a DiskCopy 4.2 image? + if (extraBuf[0x52] == 0x01 && + extraBuf[0x53] == 0x00) + { + size = ((unsigned long)extraBuf[0x41] * 65536 + (unsigned long)extraBuf[0x42] * 256 + (unsigned long)extraBuf[0x43]) / 1024; + + if (size == 400) + return DISK_IMAGE_DISKCOPY_400K; + else if (size == 800) + return DISK_IMAGE_DISKCOPY_800K; + else if (size == 1440) + return DISK_IMAGE_DISKCOPY_1440K; + } + } + } + + return DISK_IMAGE_NONE; +} + +uint16_t diskMenuEntryCount; +uint16_t diskMenuOffset = 0; +uint16_t diskMenuSelection = 0; +char selectedFile[FILENAME_LEN+1]; +char selectedLongFile[FILENAME_LEN+1]; +eImageType selectedFileType; +uint8_t subdirDepth = 0; + +#define LONGFILENAME_LEN 130 + +void InitDiskMenu(SdFat& sd) +{ + dir_t dir; + char name[LONGFILENAME_LEN+1]; + + diskMenuEntryCount = 0; + + // use the sector buffers to hold the filenames + uint16_t maxEntries = SECTORBUF_SIZE / sizeof(FileEntry); + FileEntry* pFileEntries = (FileEntry*)sectorBuf; + + sd.vwd()->rewind(); + while (dirLfnNext(sd, dir, name) && diskMenuEntryCount < maxEntries) + { + eImageType imageType; + + if ((imageType = DiskImageFileType(dir, name)) != DISK_IMAGE_NONE) + { + strncpy(pFileEntries[diskMenuEntryCount].longName, name, FILENAME_LEN+1); + SdBaseFile::dirName(dir, pFileEntries[diskMenuEntryCount].shortName); + pFileEntries[diskMenuEntryCount].imageFileType = imageType; + diskMenuEntryCount++; + } + } + + // add up directory, if not at the root + if (!sd.vwd()->isRoot()) + { + strncpy(pFileEntries[diskMenuEntryCount].longName, "..", FILENAME_LEN+1); + strncpy(pFileEntries[diskMenuEntryCount].shortName, "..", SHORTFILENAME_LEN+1); + pFileEntries[diskMenuEntryCount].imageFileType = DISK_IMAGE_UP_DIRECTORY; + diskMenuEntryCount++; + } + + char file1[FILENAME_LEN+1], file2[FILENAME_LEN+1], temp[FILENAME_LEN+1]; + eImageType tempType; + + // sort the names by longname + for (uint16_t i=0; i file2, swap them + if (diff > 0) + { + strncpy(temp, pFileEntries[i].longName, FILENAME_LEN+1); + strncpy(pFileEntries[i].longName, pFileEntries[j].longName, FILENAME_LEN+1); + strncpy(pFileEntries[j].longName, temp, FILENAME_LEN+1); + + strncpy(temp, pFileEntries[i].shortName, SHORTFILENAME_LEN+1); + strncpy(pFileEntries[i].shortName, pFileEntries[j].shortName, SHORTFILENAME_LEN+1); + strncpy(pFileEntries[j].shortName, temp, SHORTFILENAME_LEN+1); + + tempType = pFileEntries[i].imageFileType; + pFileEntries[i].imageFileType = pFileEntries[j].imageFileType; + pFileEntries[j].imageFileType = tempType; + } + } + } +} + +void DrawDiskMenu(SdFat& sd) +{ + // scroll menu if necessary + if (diskMenuSelection < diskMenuOffset) + diskMenuOffset = diskMenuSelection; + if (diskMenuSelection > diskMenuOffset+4) + diskMenuOffset = diskMenuSelection-4; + + LcdGoto(0,0); + LcdWrite(LCD_DATA, 0x7F); + for (int i=0; i<19; i++) + LcdWrite(LCD_DATA, 0x40); + + LcdTinyStringFramed("Select Disk"); + + for (int i=0; i<19; i++) + LcdWrite(LCD_DATA, 0x40); + LcdWrite(LCD_DATA, 0x7F); + + if (diskMenuEntryCount == 0) + { + LcdGoto(0, 1); + LcdTinyString("no image files found", TEXT_NORMAL); + } + else + { + FileEntry* pFileEntries = (FileEntry*)sectorBuf; + + int row = 0; + for (uint16_t i=diskMenuOffset; i= barStart && y <= barEnd) + b = 0x80 | (b >> 1); + else + b = (b >> 1); + } + + LcdWrite(LCD_DATA, b); + } + } + + // prevent moving selection past end of list + if (diskMenuSelection >= diskMenuOffset + row) + { + diskMenuSelection = diskMenuOffset + row - 1; + if (row == 4 && diskMenuOffset > 0) + { + diskMenuOffset--; // scroll backwards + } + DrawDiskMenu(sd); // draw again + } + } +} diff --git a/arduino/floppyemu/diskmenu.h b/floppy_emu_arduino/diskmenu.h similarity index 100% rename from arduino/floppyemu/diskmenu.h rename to floppy_emu_arduino/diskmenu.h diff --git a/floppy_emu_arduino/floppy_emu_arduino.ino b/floppy_emu_arduino/floppy_emu_arduino.ino new file mode 100644 index 0000000..16803eb --- /dev/null +++ b/floppy_emu_arduino/floppy_emu_arduino.ino @@ -0,0 +1,471 @@ +/* + * floppy_emu_arduino.ino + * + * Created on: 2014/07/12 + * Author: sin + */ + +#include + +#include +#include + +#include "portmacros.h" + +#include "millitimer.h" +#include "diskmenu.h" +#include "noklcd.h" + +#include "floppyemu.h" + + SdFat sd; + +void setup() { + millitimerInit(); + ResetDiskState(); + + ShowVersion(); + + LcdClear(); + + sei(); + _delay_ms(100); // wait for pending interrupts?? + + millitimerOn(); + _delay_ms(100); // wait for pending interrupts?? + + // if select and next are both held down, enter contrast adjust mode + if (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && + bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && + bit_is_clear(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) + { + AdjustContrast(); + } + + //SdFat sd; + if (!sd.init(SPI_FULL_SPEED)) + { + snprintf(textBuf, TEXTBUF_SIZE, "SD card error %d:%d", sd.card()->errorCode(), sd.card()->errorData()); + error(textBuf); + } + + millitimerOff(); + + // if prev and next are both held down, enter firmware update mode + if (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && + bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && + bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) + { + PromptForFirmwareUpdate(); + } + + InitDiskMenu(sd); + DrawDiskMenu(sd); + +} + + +// main loop +void loop() { + if (writeError) + { + // report error encounted in the interrupt routine + error(textBuf); + } + + cli(); + uint8_t trackNumber = currentTrack; // save track in a local var, since currentTrack is volatile + uint8_t sideNumber = currentSide; // save side in a local var, since currentSide is volatile + restartDisk = false; + sei(); + + if (diskInserted) + { + // show the current track and side + snprintf(textBuf, TEXTBUF_SIZE, "%02d", trackNumber); + LcdGoto(24,4); + LcdTinyString(textBuf, TEXT_NORMAL); + snprintf(textBuf, TEXTBUF_SIZE, "%d ", sideNumber); + LcdGoto(56,4); + LcdTinyString(textBuf, TEXT_NORMAL); + + // sync RAM buffer with SD card when switching tracks, or also when switching sides for mfmMode + if (prevTrack != trackNumber || (mfmMode && (prevSide != sideNumber))) + { + // write any dirty sectors from the previous track/side back to the SD card + FlushDirtySectors(sd, prevTrack); + prevTrack = trackNumber; + prevSide = sideNumber; + + // Also mark all the buffers on this track as invalid, since they don't contain valid data for the new track. + for (uint8_t i=0; i= trackLen) + currentSector = 0; + + bool prevMotorOn = !bit_is_clear(PIN(CPLD_STEP_DIR_MOTOR_ON_PORT), CPLD_STEP_DIR_MOTOR_ON_PIN); + + while (true) + { + // check for disk eject + if (bit_is_set(PIN(CPLD_EJECT_REQ_PORT), CPLD_EJECT_REQ_PIN)) + { + PORT(CPLD_RD_READY_TK0_PORT) &= ~(1<readBlock(blockToRead, sectorBuf[bufferNumber])) + error("SD read error R"); + } + + millitimerOff(); + + bufferState[bufferNumber] |= BUFFER_DATA_VALID; + bufferState[bufferNumber] &= ~BUFFER_LOCKED; + } + + if (currentSector == 0) + { + if (motorOn) + { + // toggle LED during drive activity + PORT(STATUS_LED_PORT) ^= (1< 1) + writeDisplayTimer--; + } + + // "Flutter" the drive's TACH speed slightly, every time we pass sector 0 (about every 100-150ms). This avoids a bug + // in P_Sony_MakeSpdTbl in the 64K ROM (used in the Mac 128K and Mac 512K) where + // the Mac will crash if two successive TACH measurements see the exact same speed. + tachFlutter += 25; + if (tachFlutter >= 125) + tachFlutter = 0; + + // Set the timeout. OC1A will toggle after this many counts. New timeout threshold won't take effect until the next timeout. + OCR1A = driveTachHalfPeriod - tachFlutter; + } + + if (mfmMode) + { + // insert sector-to-sector gap bytes + for (uint8_t i=0; i<50; i++) + { + SendMFMAndCheckRestart(0x4E); + } + + // insert sync bytes + for (uint8_t i=0; i<12; i++) + { + SendMFMAndCheckRestart(0x00); + } + + // send the address block + crc = 0xFFFF; // reset CRC + SendMFMSync(); + SendMFMSync(); + SendMFMSync(); + SendMFMAndCheckRestart(0xFE); + SendMFMAndCheckRestart(trackNumber); + SendMFMAndCheckRestart(sideNumber); + SendMFMAndCheckRestart(currentSector+1); // MFM sector numbers are 1-based + SendMFMAndCheckRestart(2); // size = 128 * 2^N bytes, so 2 means 512 + uint8_t crc0 = (crc >> 8) & 0xFF; + uint8_t crc1 = crc & 0xFF; + SendMFMAndCheckRestart(crc0); + SendMFMAndCheckRestart(crc1); + + // insert Address to Data gap bytes + for (uint8_t i=0; i<22; i++) + { + SendMFMAndCheckRestart(0x4E); + } + + // insert sync bytes + for (uint8_t i=0; i<12; i++) + { + SendMFMAndCheckRestart(0x00); + } + + // send the data block + crc = 0xFFFF; // reset CRC + SendMFMSync(); + SendMFMSync(); + SendMFMSync(); + SendMFMAndCheckRestart(0xFB); + + for (uint16_t i=0; i> 8) & 0xFF; + crc1 = crc & 0xFF; + SendMFMAndCheckRestart(crc0); + SendMFMAndCheckRestart(crc1); + } + else + { + // ensure a short gap between sectors - otherwise once they're all cached, one sector will appear + // to immediately follow another on disk, which may cause problems for the Mac. + // Bad voodoo here: + // 1. In the Finder StuffIt copy test that sometimes dies after the first 18 tracks, the length of delay here + // seems to affect what track it will freeze on. + // 2. With a longer delay here, the first ~10 sectors of copying seem to have fewer or no "long writes". + // 3. Depending on the delay here, the Transcend 2GB SD card sometimes gets "writeStop fail" when saving tracks. + for (uint16_t i=0; i> 6)); + uint8_t checksum = (uint8_t)((trackLow ^ currentSector ^ trackHigh ^ format) & 0x3F); + + SendByteAndCheckRestart(0xD5); + SendByteAndCheckRestart(0xAA); + SendByteAndCheckRestart(0x96); + SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackLow])); + SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[currentSector])); + SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackHigh])); + SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[format])); + SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[checksum])); + SendByteAndCheckRestart(0xDE); + SendByteAndCheckRestart(0xAA); + + // insert sync bytes between the address and data blocks + for (uint8_t i=0; i 0) + { + diskMenuSelection--; + DrawDiskMenu(sd); + _delay_ms(200); + } + } + else if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) + { + diskMenuSelection++; + DrawDiskMenu(sd); + _delay_ms(200); + } + else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) + { + if (selectedFileType == DISK_IMAGE_DIRECTORY) + { + // remember where we came from, so we can get back later + char* pSubdirName = ((char*)sectorBuf[23]) + ((SHORTFILENAME_LEN+1) * subdirDepth); + strncpy(pSubdirName, selectedFile, SHORTFILENAME_LEN+1); + subdirDepth++; + + sd.chdir(selectedFile, true); + + diskMenuSelection = 0; + LcdClear(); + InitDiskMenu(sd); + DrawDiskMenu(sd); + _delay_ms(400); + } + else if (selectedFileType == DISK_IMAGE_UP_DIRECTORY) + { + subdirDepth--; + sd.chdir(true); // go to root directory + + for (uint8_t i=0; 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 literal 0 HcmV?d00001 diff --git a/arduino/floppyemu/floppyemu.ino b/floppy_emu_arduino/floppyemu.cpp old mode 100644 new mode 100755 similarity index 75% rename from arduino/floppyemu/floppyemu.ino rename to floppy_emu_arduino/floppyemu.cpp index 672f147..7315d98 --- a/arduino/floppyemu/floppyemu.ino +++ b/floppy_emu_arduino/floppyemu.cpp @@ -1,1990 +1,1592 @@ -#include -#include - -// I/O pin assignments -#define CPLD_RESET_PORT B -#define CPLD_RESET_PIN 0 - -#define CPLD_STEP_DIR_MOTOR_ON_PORT C -#define CPLD_STEP_DIR_MOTOR_ON_PIN 7 - -#define CPLD_STEP_REQ_PORT D -#define CPLD_STEP_REQ_PIN 0 // PCINT24 -#define CPLD_STEP_REQ_INT_MSK PCMSK3 -#define CPLD_STEP_REQ_INT_PIN PCINT24 -#define CPLD_STEP_REQ_INT_ENABLE PCIE3 - -#define CPLD_CURRENT_SIDE_PORT C -#define CPLD_CURRENT_SIDE_PIN 1 // PCINT17 -#define CPLD_CURRENT_SIDE_INT_MSK PCMSK2 -#define CPLD_CURRENT_SIDE_INT_PIN PCINT17 -#define CPLD_CURRENT_SIDE_INT_ENABLE PCIE2 - -#define CPLD_EJECT_REQ_PORT D -#define CPLD_EJECT_REQ_PIN 3 - -#define CPLD_STEP_ACK_DISK_IN_PORT C -#define CPLD_STEP_ACK_DISK_IN_PIN 2 - -#define CPLD_WR_REQ_PORT C -#define CPLD_WR_REQ_PIN 0 // PCINT16 -#define CPLD_WR_REQ_INT_MSK PCMSK2 -#define CPLD_WR_REQ_INT_PIN PCINT16 -#define CPLD_WR_REQ_INT_ENABLE PCIE2 - -#define CPLD_RD_READY_TK0_PORT C -#define CPLD_RD_READY_TK0_PIN 5 - -#define CPLD_RD_ACK_WR_TICK_PORT A -#define CPLD_RD_ACK_WR_TICK_PIN 7 // PCINT7 -#define CPLD_RD_ACK_WR_TICK_INT_MSK PCMSK0 -#define CPLD_RD_ACK_WR_TICK_INT_PIN PCINT7 -#define CPLD_RD_ACK_WR_TICK_INT_ENABLE PCIE0 - -#define CPLD_DATA_PORT A - -#define CPLD_DATA_HIZ_PORT C -#define CPLD_DATA_HIZ_PIN 6 - -#define CPLD_TACH_PORT D -#define CPLD_TACH_PIN 5 - -#define CPLD_TMS_PORT C -#define CPLD_TMS_PIN 3 - -#define SELECT_BUTTON_PORT D -#define SELECT_BUTTON_PIN 4 - -#define PREV_BUTTON_PORT D -#define PREV_BUTTON_PIN 1 - -#define NEXT_BUTTON_PORT D -#define NEXT_BUTTON_PIN 2 - -#define STATUS_LED_PORT B -#define STATUS_LED_PIN 3 - -#define CARD_WPROT_PORT D -#define CARD_WPROT_PIN 7 - -#define SECTOR_DATA_SIZE 512 -#define INTER_SECTOR_GAP_SIZE 55 -#define ADDRESS_DATA_GAP_SIZE 10 -#define SECTOR_DATA_HEADER_SIZE 3 -#define SECTOR_DATA_SECTORNUM_START SECTOR_DATA_HEADER_SIZE -#define SECTOR_DATA_SECTORNUM_SIZE 1 -#define SECTOR_DATA_ENCODED_TAGS_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE) -#define SECTOR_DATA_ENCODED_TAGS_SIZE 16 -#define SECTOR_DATA_ENCODED_DATA_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE+SECTOR_DATA_ENCODED_TAGS_SIZE) -#define SECTOR_DATA_ENCODED_DATA_SIZE 683 -#define SECTOR_DATA_CHECKSUM_START (SECTOR_DATA_ENCODED_DATA_START+SECTOR_DATA_ENCODED_DATA_SIZE) - - -// 8 byte marker placed at the end of the program binary, used by the bootloader. -// Configure the .bootldrinfo address to be 8 bytes below the bootloader start address for the type of Atmega being used. -#define DEVICEID_HIGH 0xDDDD -#define DEVICEID_LOW 0xDDDD -#define VERSIONID 0x0100 -const uint16_t bootloader_info[] __attribute__(( section(".bootldrinfo") )) = { DEVICEID_HIGH, DEVICEID_LOW, VERSIONID, 0x0000 }; - -const char versionStr[] PROGMEM = "App Version 1.0 L"; - -volatile uint8_t currentTrack; -volatile uint8_t prevTrack; -volatile uint8_t currentSide; -volatile uint8_t prevSide; -volatile uint8_t writeMode; -volatile bool restartDisk; -volatile bool writeError; - -bool diskInserted; -bool readOnly; -bool mfmMode; -uint16_t crc; -uint8_t numberOfDiskSides; -uint8_t currentSector; -uint16_t driveTachHalfPeriod; -uint8_t tachFlutter; - -uint8_t writeDisplayTimer; -uint8_t cpldFirmwareVersion; - -#define TEXTBUF_SIZE 22 -char textBuf[TEXTBUF_SIZE]; - -#define NUM_BUFFERS 24 -uint8_t sectorBuf[NUM_BUFFERS][SECTOR_DATA_SIZE]; -uint8_t extraBuf[SECTOR_DATA_SIZE]; - -bool selectedFileIsDiskCopyFormat; - -extern const uint16_t sony_track_start[] PROGMEM; -const uint16_t sony_track_start[80] = { - 0, 12, 24, 36, 48, 60 , 72, 84, - 96, 108, 120, 132, 144, 156, 168, 180, - - 192, 203, 214, 225, 236, 247, 258, 269, - 280, 291, 302, 313, 324, 335, 346, 357, - - 368, 378, 388, 398, 408, 418, 428, 438, - 448, 458, 468, 478, 488, 498, 508, 518, - - 528, 537, 546, 555, 564, 573, 582, 591, - 600, 609, 618, 627, 636, 645, 654, 663, - - 672, 680, 688, 696, 704, 712, 720, 728, - 736, 744, 752, 760, 768, 776, 784, 792 -}; - -extern const uint8_t sony_track_len[] PROGMEM; -const uint8_t sony_track_len[80] = { - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 -}; - -extern const uint8_t sony_to_disk_byte[] PROGMEM; -const uint8_t sony_to_disk_byte[] = { - 0x96, 0x97, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, /* 0x00 */ - 0xA7, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB2, 0xB3, - 0xB4, 0xB5, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, /* 0x10 */ - 0xBD, 0xBE, 0xBF, 0xCB, 0xCD, 0xCE, 0xCF, 0xD3, - 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, /* 0x20 */ - 0xDF, 0xE5, 0xE6, 0xE7, 0xE9, 0xEA, 0xEB, 0xEC, - 0xED, 0xEE, 0xEF, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, /* 0x30 */ - 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF -}; - -extern const uint8_t disk_byte_to_sony[] PROGMEM; -const uint8_t disk_byte_to_sony[] = { - /* table begins at disk byte 0x96, value of 0xFF is an invalid disk byte */ - /* 0x96 */ 0x00, 0x01, 0xFF, 0xFF, 0x02, 0x03, 0xFF, 0x04, - /* 0x9E */ 0x05, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /* 0xA6 */ 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0x0B, - /* 0xAE */ 0x0C, 0x0D, 0xFF, 0xFF, 0x0E, 0x0F, 0x10, 0x11, - /* 0xB6 */ 0x12, 0x13, 0xFF, 0x14, 0x15, 0x16, 0x17, 0x18, - /* 0xBE */ 0x19, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - /* 0xC6 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0xFF, 0x1C, - /* 0xCE */ 0x1D, 0x1E, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, - /* 0xD6 */ 0x20, 0x21, 0xFF, 0x22, 0x23, 0x24, 0x25, 0x26, - /* 0xDE */ 0x27, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x29, - /* 0xE6 */ 0x2A, 0x2B, 0xFF, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - /* 0xEE */ 0x31, 0x32, 0xFF, 0xFF, 0x33, 0x34, 0x35, 0x36, - /* 0xF6 */ 0x37, 0x38, 0xFF, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, - /* 0xFE */ 0x3E, 0x3F -}; - -uint8_t sectorDataHeaderGCR[] = { 0xD5, 0xAA, 0xAD }; - -extern const uint16_t crc_ccitt[] PROGMEM; -const uint16_t crc_ccitt[] = { - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 -}; - -void ResetDiskState(); - -uint16_t writeErrorNumber; - -void error(const char* msg) -{ - bool wasWriteError = writeError; - uint16_t wasWriteErrorNumber = writeErrorNumber; - - ResetDiskState(); // clears writeError and writeErrorNumber - - LcdClear(); - LcdGoto(0,0); - if (wasWriteError) - LcdTinyStringP(PSTR("WRITE ERROR "), TEXT_INVERSE); - else - LcdTinyStringP(PSTR("FATAL ERROR "), TEXT_INVERSE); - LcdGoto(0,1); - LcdTinyString(msg, TEXT_NORMAL); - - if (wasWriteError) - { - snprintf(textBuf, TEXTBUF_SIZE, "%u", wasWriteErrorNumber); - LcdGoto(0,5); - LcdTinyString(textBuf, TEXT_NORMAL); - } - - while (1); -} - -void InitPorts() -{ - // set all data lines as outputs, MSB (RD_ACK/WR_TICK) as input - DDR(CPLD_DATA_PORT) = 0x7F; - - // initialize the other output lines - DDR(CPLD_TACH_PORT) |= (1<> 4; - if (speedZone > 4) - speedZone = 4; - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - driveTachHalfPeriod = F_CPU / (2 * zoneRPM[speedZone]); - // OCR1A update will be performed during the next sector 0 read - } - - TIFR1 = (1 << OCF1A); // Clear the timer 1 compare A match flag. Not sure this is actually necessary. -} - -uint16_t trackStart(uint8_t trackNumber) -{ - return mfmMode ? trackNumber * 18 : pgm_read_word(&sony_track_start[trackNumber]); -} - -uint8_t trackLength(uint8_t trackNumber) -{ - return mfmMode ? 18 : pgm_read_byte(&sony_track_len[trackNumber]); -} - -#define BUFFER_DIRTY 1 -#define BUFFER_DATA_VALID 2 -#define BUFFER_LOCKED 4 - -volatile uint8_t bufferState[NUM_BUFFERS]; -volatile uint8_t wrTrack; -volatile uint8_t wrSide; -volatile uint8_t wrSector; - -// these variables are used only within the interrupt routine, and do not need to be declared volatile -uint8_t wrTick; -uint16_t writeCount; -uint8_t writeTemp; -uint8_t currentWriteBufferNumber; -uint8_t ck5, ck6, ck7; -uint8_t XBit; -uint8_t* pSectorBuf; - -void WriteError() -{ - writeMode = false; - restartDisk = true; - writeError = true; - writeCount = 0; -} - -// pin state change interrupt: STEP -ISR(PCINT3_vect) -{ - // step to a new track? - if (bit_is_set(PIN(CPLD_STEP_REQ_PORT), CPLD_STEP_REQ_PIN)) - { - // determine the range of dirty sector buffers - uint8_t trackLen = trackLength(currentTrack); - uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; - - for (uint8_t i=0; i= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 1000 + writeCount; - WriteError(); - } - - restartDisk = true; - } -} - -// pin state change interrupt: SIDE, WR_REQ -ISR(PCINT2_vect) -{ - // did the current side change? - uint8_t newSide = ((PIN(CPLD_CURRENT_SIDE_PORT) >> CPLD_CURRENT_SIDE_PIN) & 0x01); - if (newSide != currentSide) - { - if (numberOfDiskSides == 2) - currentSide = newSide; - else - currentSide = 0; - restartDisk = true; - - // premature end of a write? - if (writeCount >= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 2000 + writeCount; - WriteError(); - } - } - - // did the read/write mode change? RD_RW: 0 = write, 1 = read - uint8_t wreqBit = bit_is_clear(PIN(CPLD_WR_REQ_PORT), CPLD_WR_REQ_PIN); - if (wreqBit != writeMode) - { - writeMode = wreqBit; - - if (writeMode) - { - // switch the DATA pins to inputs - DDR(CPLD_DATA_PORT) = 0; - - // indicate that the data bus has been released - PORT(CPLD_DATA_HIZ_PORT) |= (1<= SECTOR_DATA_SECTORNUM_START) - { - strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); - writeErrorNumber = 3000 + writeCount; - WriteError(); - } - } - - restartDisk = true; - } -} - -void HandleGCRWrite() -{ - uint8_t diskByte = 0x80 | PIN(CPLD_DATA_PORT); - - if (writeCount < SECTOR_DATA_ENCODED_TAGS_START) - { - // look for the sector header - // the final header byte is the sector number - if (writeCount == SECTOR_DATA_SECTORNUM_START) - { - uint8_t sector = pgm_read_byte(&disk_byte_to_sony[diskByte - 0x96]); - - if (sector >= trackLength(currentTrack)) - { - snprintf(textBuf, TEXTBUF_SIZE, "bad sector %d for t%d", sector, currentTrack); - writeErrorNumber = 60; - WriteError(); - } - - uint8_t trackLen = trackLength(currentTrack); - currentWriteBufferNumber = trackLen * currentSide + sector; - - if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) - { - snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, sector); - writeErrorNumber = 61; - WriteError(); - } - - pSectorBuf = sectorBuf[currentWriteBufferNumber]; - bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; - bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; - wrTrack = currentTrack; - wrSide = currentSide; - wrSector = sector; - - // turn on the LED when receiving a sector write - PORT(STATUS_LED_PORT) &= ~(1<> 7; - ck7 = (ck7 << 1) | XBit; - break; - - case 1: - b = (writeTemp & 0xC0) | dataIn; // A7 A6 0 0 0 0 0 0 | 0 0 A5 A4 A3 A2 A1 A0 - b ^= ck7; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck5, b); - addResult = (uint16_t)ck5 + b + XBit; - ck5 = addResult & 0xFF; - XBit = addResult >> 8; - writeTemp <<= 2; // B7 B6 C7 C6 0 0 0 0 - break; - - case 2: - b = (writeTemp & 0xC0) | dataIn; // B7 B6 0 0 0 0 0 0 | 0 0 B5 B4 B3 B2 B1 B0 - b ^= ck5; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck6, b); - addResult = (uint16_t)ck6 + b + XBit; - ck6 = addResult & 0xFF; - XBit = addResult >> 8; - writeTemp <<= 2; // C7 C6 0 0 0 0 0 0 - break; - - case 3: - b = writeTemp | dataIn; // C7 C6 0 0 0 0 0 0 | 0 0 C5 C4 C3 C2 C1 C0 - b ^= ck6; - - if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) - *pSectorBuf++ = b; - - //ADDX(ck7, b); - addResult = (uint16_t)ck7 + b + XBit; - ck7 = addResult & 0xFF; - XBit = addResult >> 8; - break; - } - } - else - { - // verify the checksum - if (writeCount == SECTOR_DATA_CHECKSUM_START) - { - writeTemp = dataIn; - writeTemp <<= 2; - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+1) - { - b = (writeTemp & 0xC0) | dataIn; - writeTemp <<= 2; - if (b != ck5) - { - strncpy(textBuf, "checksum failure 0", TEXTBUF_SIZE); - writeErrorNumber = 62; - WriteError(); - } - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+2) - { - b = (writeTemp & 0xC0) | dataIn; - writeTemp <<= 2; - if (b != ck6) - { - strncpy(textBuf, "checksum failure 1", TEXTBUF_SIZE); - writeErrorNumber = 63; - WriteError(); - } - } - else if (writeCount == SECTOR_DATA_CHECKSUM_START+3) - { - b = writeTemp | dataIn; - writeTemp <<= 2; - if (b != ck7) - { - strncpy(textBuf, "checksum failure 2", TEXTBUF_SIZE); - writeErrorNumber = 64; - WriteError(); - } - - // success! - bufferState[currentWriteBufferNumber] |= BUFFER_DATA_VALID; - bufferState[currentWriteBufferNumber] |= BUFFER_DIRTY; - bufferState[currentWriteBufferNumber] &= ~BUFFER_LOCKED; - - // turn off the LED at the end of a sector write - PORT(STATUS_LED_PORT) |= (1<> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); - crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xFB]); - - for (uint16_t i=0; i> 8) ^ sectorBuf[bufferNumber][i]]); - } - - if (crc != receivedCRC) - { - strncpy(textBuf, "checksum fail", TEXTBUF_SIZE); - writeErrorNumber = 70; - WriteError(); - } -} - -// pin state change interrupt: WR_TICK -ISR(PCINT0_vect) -{ - uint8_t wrTickBit = bit_is_set(PIN(CPLD_RD_ACK_WR_TICK_PORT), CPLD_RD_ACK_WR_TICK_PIN); - - // was a new byte written? - if (writeMode && wrTickBit != wrTick) - { - wrTick = wrTickBit; - - if (!mfmMode) - { - HandleGCRWrite(); - } - else - { - if (wrTickBit == 0) - { - // high nibble arrives first - writeTemp = (PIN(CPLD_DATA_PORT) << 4) & 0xF0; - return; - } - else - { - writeTemp |= (PIN(CPLD_DATA_PORT) & 0x0F); - - if (writeCount == 2) - { - if (writeTemp == 0xFB) - { - writeCount++; - - // header received OK! - currentWriteBufferNumber = currentSector; // assume the buffer to write was the last one read - - if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) - { - snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, currentSector); - writeErrorNumber = 71; - WriteError(); - return; - } - - pSectorBuf = sectorBuf[currentWriteBufferNumber]; - bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; - bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; - wrTrack = currentTrack; - wrSide = currentSide; - wrSector = currentSector; // assume the buffer to write was the last one read - - // turn on the LED when receiving a sector write - PORT(STATUS_LED_PORT) &= ~(1<> 2) | ((__c1 & 0xC0) >> 4) | ((__c2 & 0xC0) >> 6)) - -// rotate left -#define rot_ck0(__ck0) \ - do { \ - __ck0 &= 0xFF; \ - __ck0 = (__ck0 << 1) | (__ck0 >> 7);\ - } while(0) - -// ADC __ckr, __in; __out = __in ^ __ckl -#define enc_byte(__in, __out, __ckl, __ckr) \ - do { \ - uint8_t __d = __in; \ - __ckr += __d; \ - __ckr += (__ckl & 0x100) >> 8; \ - __ckl &= 0xFF; \ - __out = __d ^ __ckl; \ - } while(0) - -#define SendByteAndCheckRestart(b) \ - do { \ - if (restartDisk) \ - goto restart; \ - SendByte(b); \ - } while(0) - -void SendMFMSync() -{ - // send A1 sync - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = 0x0A; // data in bits 3-0, sync flag in bit 4 - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ 0xA1]); - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = 0x11; // data in bits 3-0, sync flag in bit 4 - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 4) & 0x0F; - - //if (restartDisk) - // return; - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = out; - PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ data]); - - //if (restartDisk) - // return; - - // SendByte - // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups - PORT(CPLD_DATA_PORT) = out; - PORT(CPLD_RD_READY_TK0_PORT) |= (1< 128) - lcd_vop--; - } - else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - { - eeprom_update_byte((uint8_t*)1, lcd_vop); - break; - } - - LcdWrite(LCD_CMD, 0x21); // LCD Extended Commands. - LcdWrite(LCD_CMD, lcd_vop); // Set LCD Vop (Contrast). - LcdWrite(LCD_CMD, 0x20); - } -} - -void PromptForFirmwareUpdate() -{ - LcdGoto(0,0); - LcdClear(); - LcdGoto(0,0); - LcdTinyStringP(PSTR("CPLD FIRMWARE UPDATE"), TEXT_NORMAL); - LcdGoto(0,2); - LcdTinyStringP(PSTR("Release buttons to"), TEXT_NORMAL); - LcdGoto(0,3); - LcdTinyStringP(PSTR("begin"), TEXT_NORMAL); - - // wait for the buttons to be released - while (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) || - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) || - bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - {} - - LcdGoto(0,2); - LcdTinyStringP(PSTR("NEXT: Load firmware"), TEXT_NORMAL); - LcdGoto(0,3); - LcdTinyStringP(PSTR("PREV: Cancel"), TEXT_NORMAL); - _delay_ms(400); - - // wait for a button press - while (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_set(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - {} - - if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) - { - UpdateFirmware(); - } - else - { - LcdClear(); - } -} - -uint32_t imageFirstBlock, imageLastBlock; - -bool OpenImageFile() -{ - LcdClear(); - LcdGoto(0,0); - LcdTinyString(selectedLongFile, TEXT_NORMAL); - - LcdGoto(0,1); - - // open the disk image file - // to-do: check if the file is read-only on the card - bool openOK = true; - if (!f.open(selectedFile, O_RDWR)) - { - if (f.open(selectedFile, O_RDONLY)) - { - // TODO: How do we tell the CPLD the disk is read-only? - readOnly = true; - } - else - { - LcdTinyStringP(PSTR("error opening image"), TEXT_NORMAL); - openOK = false; - } - } - else - { - if (selectedFileType == DISK_IMAGE_400K || selectedFileType == DISK_IMAGE_DISKCOPY_400K) - { - numberOfDiskSides = 1; - } - else - { - numberOfDiskSides = 2; - } - } - - // get address of file on SD - if (openOK && !f.contiguousRange(&imageFirstBlock, &imageLastBlock)) - { - LcdTinyStringP(PSTR("image not contiguous"), TEXT_NORMAL); - openOK = false; - } - - if (!openOK) - { - _delay_ms(4000); // wait 4 seconds - } - else - { - LcdGoto(0,1); - // show disk image type - switch (selectedFileType) - { - case DISK_IMAGE_400K: - LcdTinyStringP(PSTR("400K raw image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_800K: - LcdTinyStringP(PSTR("800K raw image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_1440K: - LcdTinyStringP(PSTR("1440K raw image"), TEXT_NORMAL); - mfmMode = true; - break; - - case DISK_IMAGE_DISKCOPY_400K: - LcdTinyStringP(PSTR("400K DiskCopy image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_DISKCOPY_800K: - LcdTinyStringP(PSTR("800K DiskCopy image"), TEXT_NORMAL); - break; - - case DISK_IMAGE_DISKCOPY_1440K: - LcdTinyStringP(PSTR("1440K DiskCopy image"), TEXT_NORMAL); - mfmMode = true; - break; - - default: - break; - } - - selectedFileIsDiskCopyFormat = (selectedFileType >= DISK_IMAGE_DISKCOPY_400K); - - if (bit_is_set(PIN(CARD_WPROT_PORT), CARD_WPROT_PIN)) - readOnly = true; - - // mount DiskCopy images read-only - if (selectedFileIsDiskCopyFormat) - readOnly = true; - - uint16_t volumeNameOffset = selectedFileIsDiskCopyFormat ? 0x424 + 0x54 : 0x424; - f.seekSet(volumeNameOffset); // offset of the Macintosh disk name in the image file - f.read(§orBuf[0][0], SECTOR_DATA_SIZE); - int nameLen = sectorBuf[0][0]; - uint8_t* name = §orBuf[0][1]; - name[nameLen] = 0; - name[21] = 0; // in case nameLen was bogus, terminate the string after 21 chars, which is the longest displayable name on the LCD - LcdGoto(0,2); - LcdTinyString((char*)name, TEXT_NORMAL); - LcdGoto(0,4); - LcdTinyStringP(PSTR("Track Side"), TEXT_NORMAL); - - // show a lock icon if the disk image is mounted as read-only - if (readOnly) - { - LcdGoto(77,0); - LcdWrite(LCD_DATA, 0x00); - LcdWrite(LCD_DATA, 0x78); - LcdWrite(LCD_DATA, 0x7E); - LcdWrite(LCD_DATA, 0x79); - LcdWrite(LCD_DATA, 0x79); - LcdWrite(LCD_DATA, 0x7E); - LcdWrite(LCD_DATA, 0x78); - } - } - - f.close(); - return openOK; -} - -void ResetDiskState() -{ - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // useless code to prevent the "unused" bootloader_info array from being optimized away when optimizations are turned on - // there's probably a nicer way to accomplish this. - currentTrack = bootloader_info[currentTrack]; - - InitPorts(); - - currentTrack = 0; - prevTrack = 0; - restartDisk = false; - currentSide = 0; - prevSide = 0; - writeMode = 0; - diskInserted = false; - numberOfDiskSides = 2; - currentSector = 0; - readOnly = false; - mfmMode = false; - writeError = false; - writeDisplayTimer = 0; - tachFlutter = 0; - writeErrorNumber = 0; - writeCount = 0; - - for (uint8_t i=0; i= trackLen - 1) - return 0; - else - return prevSectorNumber + 1; - } - else - { - uint8_t halfTrackLen = (trackLen + 1) >> 1; - - // process sectors in interleaved order: - // 12 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 11 - // 11 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 - // 10 sector tracks: 0 5 1 6 2 7 3 8 4 9 - // 9 sector tracks: 0 5 1 6 2 7 3 8 4 - // 8 sector tracks: 0 4 1 5 2 6 3 7 - // This is how real floppies are formatted, and should improve read performance if the Mac - // can't completely process sector N before sector N+1 begins. It should also improve sector-by-sector - // write performance, because the Mac alternately reads (address header) and writes (data section) in - // this mode, and proper interleaving means it will read the desired address header sooner if the Mac - // isn't fast enough to process the sectors linearly (which it likely isn't). - if (prevSectorNumber > trackLen - 1 || - ((trackLen & 1) == 0 && prevSectorNumber == trackLen - 1) || - ((trackLen & 1) == 1 && prevSectorNumber == halfTrackLen - 1)) - return 0; - else if (prevSectorNumber < halfTrackLen) - return prevSectorNumber + halfTrackLen; - else - return prevSectorNumber + 1 - halfTrackLen; - } -} - -void ReadDiskCopy42Block(SdFat& sd, uint32_t blockToRead, uint8_t bufferNumber) -{ - // for a DiskCopy 4.2 image, read two blocks into a temp buffer, then copy the unaligned data into the sector buffer. - uint16_t i; - - if (!sd.card()->readStart(blockToRead)) - error("SD read start error"); - - // read part 1 - if (!sd.card()->readData(extraBuf)) - error("SD read error D"); - for (i=0; i<512-0x54; i++) - sectorBuf[bufferNumber][i] = extraBuf[0x54 + i]; - - // read part 2 - if (!sd.card()->readData(extraBuf)) - error("SD read error D"); - for (i=512-0x54; i<512; i++) - sectorBuf[bufferNumber][i] = extraBuf[0x54 + i - 512]; - - sd.card()->readStop(); -} - -void FlushDirtySectors(SdFat& sd, uint8_t trackNumber) -{ - uint8_t trackLen = trackLength(trackNumber); - uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; - - // determine the dirty range - for (uint8_t i=0; ireadBlock(blockToRead, sectorBuf[i])) - error("SD read error W"); - } - } - - uint32_t firstBlockToWrite = imageFirstBlock + ((uint32_t)trackStart(trackNumber) * numberOfDiskSides + firstDirtyBuffer); - - if (mfmMode) - firstBlockToWrite += trackLen * wrSide; - - uint32_t numBuffersToWrite = lastDirtyBuffer + 1 - firstDirtyBuffer; - - if (!sd.card()->writeStart(firstBlockToWrite, numBuffersToWrite)) - error("SD writeStart fail"); - - for (uint8_t i=firstDirtyBuffer; i<=lastDirtyBuffer; i++) - { - if (!sd.card()->writeData(sectorBuf[i])) - error("SD write error"); - - bufferState[i] &= ~BUFFER_DIRTY; - bufferState[i] &= ~BUFFER_LOCKED; - } - - if (!sd.card()->writeStop()) - error("SD writeStop fail"); - - writeDisplayTimer = 25; - millitimerOff(); - - uint32_t writeTime = millis() - t0; - - snprintf(textBuf, TEXTBUF_SIZE, "Saved trk %02d in %lu ", trackNumber, writeTime); - LcdGoto(0,5); - LcdTinyString(textBuf, TEXT_NORMAL); - } - } -} - - -void setup() { -} - -void loop() { -} - - -int main(void) -{ - millitimerInit(); - ResetDiskState(); - - ShowVersion(); - - LcdClear(); - - sei(); - _delay_ms(100); // wait for pending interrupts?? - - millitimerOn(); - _delay_ms(100); // wait for pending interrupts?? - - // if select and next are both held down, enter contrast adjust mode - if (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_clear(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - { - AdjustContrast(); - } - - SdFat sd; - if (!sd.init(SPI_FULL_SPEED)) - { - snprintf(textBuf, TEXTBUF_SIZE, "SD card error %d:%d", sd.card()->errorCode(), sd.card()->errorData()); - error(textBuf); - } - - millitimerOff(); - - // if prev and next are both held down, enter firmware update mode - if (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && - bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && - bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) - { - PromptForFirmwareUpdate(); - } - - InitDiskMenu(sd); - DrawDiskMenu(sd); - - // main loop - while (true) - { - if (writeError) - { - // report error encounted in the interrupt routine - error(textBuf); - } - - cli(); - uint8_t trackNumber = currentTrack; // save track in a local var, since currentTrack is volatile - uint8_t sideNumber = currentSide; // save side in a local var, since currentSide is volatile - restartDisk = false; - sei(); - - if (diskInserted) - { - // show the current track and side - snprintf(textBuf, TEXTBUF_SIZE, "%02d", trackNumber); - LcdGoto(24,4); - LcdTinyString(textBuf, TEXT_NORMAL); - snprintf(textBuf, TEXTBUF_SIZE, "%d ", sideNumber); - LcdGoto(56,4); - LcdTinyString(textBuf, TEXT_NORMAL); - - // sync RAM buffer with SD card when switching tracks, or also when switching sides for mfmMode - if (prevTrack != trackNumber || (mfmMode && (prevSide != sideNumber))) - { - // write any dirty sectors from the previous track/side back to the SD card - FlushDirtySectors(sd, prevTrack); - prevTrack = trackNumber; - prevSide = sideNumber; - - // Also mark all the buffers on this track as invalid, since they don't contain valid data for the new track. - for (uint8_t i=0; i= trackLen) - currentSector = 0; - - bool prevMotorOn = !bit_is_clear(PIN(CPLD_STEP_DIR_MOTOR_ON_PORT), CPLD_STEP_DIR_MOTOR_ON_PIN); - - while (true) - { - // check for disk eject - if (bit_is_set(PIN(CPLD_EJECT_REQ_PORT), CPLD_EJECT_REQ_PIN)) - { - PORT(CPLD_RD_READY_TK0_PORT) &= ~(1<readBlock(blockToRead, sectorBuf[bufferNumber])) - error("SD read error R"); - } - - millitimerOff(); - - bufferState[bufferNumber] |= BUFFER_DATA_VALID; - bufferState[bufferNumber] &= ~BUFFER_LOCKED; - } - - if (currentSector == 0) - { - if (motorOn) - { - // toggle LED during drive activity - PORT(STATUS_LED_PORT) ^= (1< 1) - writeDisplayTimer--; - } - - // "Flutter" the drive's TACH speed slightly, every time we pass sector 0 (about every 100-150ms). This avoids a bug - // in P_Sony_MakeSpdTbl in the 64K ROM (used in the Mac 128K and Mac 512K) where - // the Mac will crash if two successive TACH measurements see the exact same speed. - tachFlutter += 25; - if (tachFlutter >= 125) - tachFlutter = 0; - - // Set the timeout. OC1A will toggle after this many counts. New timeout threshold won't take effect until the next timeout. - OCR1A = driveTachHalfPeriod - tachFlutter; - } - - if (mfmMode) - { - // insert sector-to-sector gap bytes - for (uint8_t i=0; i<50; i++) - { - SendMFMAndCheckRestart(0x4E); - } - - // insert sync bytes - for (uint8_t i=0; i<12; i++) - { - SendMFMAndCheckRestart(0x00); - } - - // send the address block - crc = 0xFFFF; // reset CRC - SendMFMSync(); - SendMFMSync(); - SendMFMSync(); - SendMFMAndCheckRestart(0xFE); - SendMFMAndCheckRestart(trackNumber); - SendMFMAndCheckRestart(sideNumber); - SendMFMAndCheckRestart(currentSector+1); // MFM sector numbers are 1-based - SendMFMAndCheckRestart(2); // size = 128 * 2^N bytes, so 2 means 512 - uint8_t crc0 = (crc >> 8) & 0xFF; - uint8_t crc1 = crc & 0xFF; - SendMFMAndCheckRestart(crc0); - SendMFMAndCheckRestart(crc1); - - // insert Address to Data gap bytes - for (uint8_t i=0; i<22; i++) - { - SendMFMAndCheckRestart(0x4E); - } - - // insert sync bytes - for (uint8_t i=0; i<12; i++) - { - SendMFMAndCheckRestart(0x00); - } - - // send the data block - crc = 0xFFFF; // reset CRC - SendMFMSync(); - SendMFMSync(); - SendMFMSync(); - SendMFMAndCheckRestart(0xFB); - - for (uint16_t i=0; i> 8) & 0xFF; - crc1 = crc & 0xFF; - SendMFMAndCheckRestart(crc0); - SendMFMAndCheckRestart(crc1); - } - else - { - // ensure a short gap between sectors - otherwise once they're all cached, one sector will appear - // to immediately follow another on disk, which may cause problems for the Mac. - // Bad voodoo here: - // 1. In the Finder StuffIt copy test that sometimes dies after the first 18 tracks, the length of delay here - // seems to affect what track it will freeze on. - // 2. With a longer delay here, the first ~10 sectors of copying seem to have fewer or no "long writes". - // 3. Depending on the delay here, the Transcend 2GB SD card sometimes gets "writeStop fail" when saving tracks. - for (uint16_t i=0; i> 6)); - uint8_t checksum = (uint8_t)((trackLow ^ currentSector ^ trackHigh ^ format) & 0x3F); - - SendByteAndCheckRestart(0xD5); - SendByteAndCheckRestart(0xAA); - SendByteAndCheckRestart(0x96); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackLow])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[currentSector])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[trackHigh])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[format])); - SendByteAndCheckRestart(pgm_read_byte(&sony_to_disk_byte[checksum])); - SendByteAndCheckRestart(0xDE); - SendByteAndCheckRestart(0xAA); - - // insert sync bytes between the address and data blocks - for (uint8_t i=0; i 0) - { - diskMenuSelection--; - DrawDiskMenu(sd); - _delay_ms(200); - } - } - else if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) - { - diskMenuSelection++; - DrawDiskMenu(sd); - _delay_ms(200); - } - else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) - { - if (selectedFileType == DISK_IMAGE_DIRECTORY) - { - // remember where we came from, so we can get back later - char* pSubdirName = ((char*)sectorBuf[23]) + ((SHORTFILENAME_LEN+1) * subdirDepth); - strncpy(pSubdirName, selectedFile, SHORTFILENAME_LEN+1); - subdirDepth++; - - sd.chdir(selectedFile, true); - - diskMenuSelection = 0; - LcdClear(); - InitDiskMenu(sd); - DrawDiskMenu(sd); - _delay_ms(400); - } - else if (selectedFileType == DISK_IMAGE_UP_DIRECTORY) - { - subdirDepth--; - sd.chdir(true); // go to root directory - - for (uint8_t i=0; i +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "portmacros.h" +#include "noklcd.h" +//#include "millitimer.h" +#include "SdFat.h" +#include "SdBaseFile.h" +#include "micro.h" +#include "ports.h" +#include "diskmenu.h" + +#include "floppyemu.h" + +#ifdef PROGMEM_WORKAROUND +// work-around for compiler bug +#undef PROGMEM +#define PROGMEM __attribute__(( section(".progmem.data") )) +#undef PSTR +#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];})) +#endif + +#ifndef FLOPPYEMU_H_ + +// I/O pin assignments +#define CPLD_RESET_PORT B +#define CPLD_RESET_PIN 0 + +#define CPLD_STEP_DIR_MOTOR_ON_PORT C +#define CPLD_STEP_DIR_MOTOR_ON_PIN 7 + +#define CPLD_STEP_REQ_PORT D +#define CPLD_STEP_REQ_PIN 0 // PCINT24 +#define CPLD_STEP_REQ_INT_MSK PCMSK3 +#define CPLD_STEP_REQ_INT_PIN PCINT24 +#define CPLD_STEP_REQ_INT_ENABLE PCIE3 + +#define CPLD_CURRENT_SIDE_PORT C +#define CPLD_CURRENT_SIDE_PIN 1 // PCINT17 +#define CPLD_CURRENT_SIDE_INT_MSK PCMSK2 +#define CPLD_CURRENT_SIDE_INT_PIN PCINT17 +#define CPLD_CURRENT_SIDE_INT_ENABLE PCIE2 + +#define CPLD_EJECT_REQ_PORT D +#define CPLD_EJECT_REQ_PIN 3 + +#define CPLD_STEP_ACK_DISK_IN_PORT C +#define CPLD_STEP_ACK_DISK_IN_PIN 2 + +#define CPLD_WR_REQ_PORT C +#define CPLD_WR_REQ_PIN 0 // PCINT16 +#define CPLD_WR_REQ_INT_MSK PCMSK2 +#define CPLD_WR_REQ_INT_PIN PCINT16 +#define CPLD_WR_REQ_INT_ENABLE PCIE2 + +#define CPLD_RD_READY_TK0_PORT C +#define CPLD_RD_READY_TK0_PIN 5 + +#define CPLD_RD_ACK_WR_TICK_PORT A +#define CPLD_RD_ACK_WR_TICK_PIN 7 // PCINT7 +#define CPLD_RD_ACK_WR_TICK_INT_MSK PCMSK0 +#define CPLD_RD_ACK_WR_TICK_INT_PIN PCINT7 +#define CPLD_RD_ACK_WR_TICK_INT_ENABLE PCIE0 + +#define CPLD_DATA_PORT A + +#define CPLD_DATA_HIZ_PORT C +#define CPLD_DATA_HIZ_PIN 6 + +#define CPLD_TACH_PORT D +#define CPLD_TACH_PIN 5 + +#define CPLD_TMS_PORT C +#define CPLD_TMS_PIN 3 + +#define SELECT_BUTTON_PORT D +#define SELECT_BUTTON_PIN 4 + +#define PREV_BUTTON_PORT D +#define PREV_BUTTON_PIN 1 + +#define NEXT_BUTTON_PORT D +#define NEXT_BUTTON_PIN 2 + +#define STATUS_LED_PORT B +#define STATUS_LED_PIN 3 + +#define CARD_WPROT_PORT D +#define CARD_WPROT_PIN 7 + +#endif + +#define SECTOR_DATA_SIZE 512 +#define INTER_SECTOR_GAP_SIZE 55 +#define ADDRESS_DATA_GAP_SIZE 10 +#define SECTOR_DATA_HEADER_SIZE 3 +#define SECTOR_DATA_SECTORNUM_START SECTOR_DATA_HEADER_SIZE +#define SECTOR_DATA_SECTORNUM_SIZE 1 +#define SECTOR_DATA_ENCODED_TAGS_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE) +#define SECTOR_DATA_ENCODED_TAGS_SIZE 16 +#define SECTOR_DATA_ENCODED_DATA_START (SECTOR_DATA_HEADER_SIZE+SECTOR_DATA_SECTORNUM_SIZE+SECTOR_DATA_ENCODED_TAGS_SIZE) +#define SECTOR_DATA_ENCODED_DATA_SIZE 683 +#define SECTOR_DATA_CHECKSUM_START (SECTOR_DATA_ENCODED_DATA_START+SECTOR_DATA_ENCODED_DATA_SIZE) + +// 8 byte marker placed at the end of the program binary, used by the bootloader. +// Configure the .bootldrinfo address to be 8 bytes below the bootloader start address for the type of Atmega being used. +#define DEVICEID_HIGH 0xDDDD +#define DEVICEID_LOW 0xDDDD +#define VERSIONID 0x0100 +const uint16_t bootloader_info[] __attribute__(( section(".bootldrinfo") )) = { DEVICEID_HIGH, DEVICEID_LOW, VERSIONID, 0x0000 }; + +const char versionStr[] PROGMEM = "App Version 1.0 L"; + +#ifndef FLOPPYEMU_H_ + +volatile uint8_t currentTrack; +volatile uint8_t prevTrack; +volatile uint8_t currentSide; +volatile uint8_t prevSide; +volatile uint8_t writeMode; +volatile bool restartDisk; +volatile bool writeError; + +bool diskInserted; +bool readOnly; +bool mfmMode; +uint16_t crc; +uint8_t numberOfDiskSides; +uint8_t currentSector; +uint16_t driveTachHalfPeriod; +uint8_t tachFlutter; + +uint8_t writeDisplayTimer; +uint8_t cpldFirmwareVersion; + +#define TEXTBUF_SIZE 22 +char textBuf[TEXTBUF_SIZE]; +#endif + +#define NUM_BUFFERS 24 +uint8_t sectorBuf[NUM_BUFFERS][SECTOR_DATA_SIZE]; +uint8_t extraBuf[SECTOR_DATA_SIZE]; + +bool selectedFileIsDiskCopyFormat; + +extern const uint16_t sony_track_start[] PROGMEM; +const uint16_t sony_track_start[80] = { + 0, 12, 24, 36, 48, 60 , 72, 84, + 96, 108, 120, 132, 144, 156, 168, 180, + + 192, 203, 214, 225, 236, 247, 258, 269, + 280, 291, 302, 313, 324, 335, 346, 357, + + 368, 378, 388, 398, 408, 418, 428, 438, + 448, 458, 468, 478, 488, 498, 508, 518, + + 528, 537, 546, 555, 564, 573, 582, 591, + 600, 609, 618, 627, 636, 645, 654, 663, + + 672, 680, 688, 696, 704, 712, 720, 728, + 736, 744, 752, 760, 768, 776, 784, 792 +}; + +extern const uint8_t sony_track_len[] PROGMEM; +const uint8_t sony_track_len[80] = { + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 +}; + +extern const uint8_t sony_to_disk_byte[] PROGMEM; +const uint8_t sony_to_disk_byte[] = { + 0x96, 0x97, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, /* 0x00 */ + 0xA7, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB2, 0xB3, + 0xB4, 0xB5, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, /* 0x10 */ + 0xBD, 0xBE, 0xBF, 0xCB, 0xCD, 0xCE, 0xCF, 0xD3, + 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, /* 0x20 */ + 0xDF, 0xE5, 0xE6, 0xE7, 0xE9, 0xEA, 0xEB, 0xEC, + 0xED, 0xEE, 0xEF, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, /* 0x30 */ + 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +}; + +extern const uint8_t disk_byte_to_sony[] PROGMEM; +const uint8_t disk_byte_to_sony[] = { + /* table begins at disk byte 0x96, value of 0xFF is an invalid disk byte */ + /* 0x96 */ 0x00, 0x01, 0xFF, 0xFF, 0x02, 0x03, 0xFF, 0x04, + /* 0x9E */ 0x05, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + /* 0xA6 */ 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0x0B, + /* 0xAE */ 0x0C, 0x0D, 0xFF, 0xFF, 0x0E, 0x0F, 0x10, 0x11, + /* 0xB6 */ 0x12, 0x13, 0xFF, 0x14, 0x15, 0x16, 0x17, 0x18, + /* 0xBE */ 0x19, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + /* 0xC6 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0xFF, 0x1C, + /* 0xCE */ 0x1D, 0x1E, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, + /* 0xD6 */ 0x20, 0x21, 0xFF, 0x22, 0x23, 0x24, 0x25, 0x26, + /* 0xDE */ 0x27, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x29, + /* 0xE6 */ 0x2A, 0x2B, 0xFF, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, + /* 0xEE */ 0x31, 0x32, 0xFF, 0xFF, 0x33, 0x34, 0x35, 0x36, + /* 0xF6 */ 0x37, 0x38, 0xFF, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, + /* 0xFE */ 0x3E, 0x3F +}; + +uint8_t sectorDataHeaderGCR[] = { 0xD5, 0xAA, 0xAD }; + +extern const uint16_t crc_ccitt[] PROGMEM; +const uint16_t crc_ccitt[] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; + +#ifndef FLOPPYEMU_H_ +void ResetDiskState(); +#endif + +uint16_t writeErrorNumber; + +void error(const char* msg) +{ + bool wasWriteError = writeError; + uint16_t wasWriteErrorNumber = writeErrorNumber; + + ResetDiskState(); // clears writeError and writeErrorNumber + + LcdClear(); + LcdGoto(0,0); + if (wasWriteError) + LcdTinyStringP(PSTR("WRITE ERROR "), TEXT_INVERSE); + else + LcdTinyStringP(PSTR("FATAL ERROR "), TEXT_INVERSE); + LcdGoto(0,1); + LcdTinyString(msg, TEXT_NORMAL); + + if (wasWriteError) + { + snprintf(textBuf, TEXTBUF_SIZE, "%u", wasWriteErrorNumber); + LcdGoto(0,5); + LcdTinyString(textBuf, TEXT_NORMAL); + } + + while (1); +} + +void InitPorts() +{ + // set all data lines as outputs, MSB (RD_ACK/WR_TICK) as input + DDR(CPLD_DATA_PORT) = 0x7F; + + // initialize the other output lines + DDR(CPLD_TACH_PORT) |= (1<> 4; + if (speedZone > 4) + speedZone = 4; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + driveTachHalfPeriod = F_CPU / (2 * zoneRPM[speedZone]); + // OCR1A update will be performed during the next sector 0 read + } + + TIFR1 = (1 << OCF1A); // Clear the timer 1 compare A match flag. Not sure this is actually necessary. +} + +uint16_t trackStart(uint8_t trackNumber) +{ + return mfmMode ? trackNumber * 18 : pgm_read_word(&sony_track_start[trackNumber]); +} + +uint8_t trackLength(uint8_t trackNumber) +{ + return mfmMode ? 18 : pgm_read_byte(&sony_track_len[trackNumber]); +} + +#define BUFFER_DIRTY 1 +#define BUFFER_DATA_VALID 2 +#define BUFFER_LOCKED 4 + +volatile uint8_t bufferState[NUM_BUFFERS]; +volatile uint8_t wrTrack; +volatile uint8_t wrSide; +volatile uint8_t wrSector; + +// these variables are used only within the interrupt routine, and do not need to be declared volatile +uint8_t wrTick; +uint16_t writeCount; +uint8_t writeTemp; +uint8_t currentWriteBufferNumber; +uint8_t ck5, ck6, ck7; +uint8_t XBit; +uint8_t* pSectorBuf; + +void WriteError() +{ + writeMode = false; + restartDisk = true; + writeError = true; + writeCount = 0; +} + +// pin state change interrupt: STEP +ISR(PCINT3_vect) +{ + // step to a new track? + if (bit_is_set(PIN(CPLD_STEP_REQ_PORT), CPLD_STEP_REQ_PIN)) + { + // determine the range of dirty sector buffers + uint8_t trackLen = trackLength(currentTrack); + uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; + + for (uint8_t i=0; i= SECTOR_DATA_SECTORNUM_START) + { + strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); + writeErrorNumber = 1000 + writeCount; + WriteError(); + } + + restartDisk = true; + } +} + +// pin state change interrupt: SIDE, WR_REQ +ISR(PCINT2_vect) +{ + // did the current side change? + uint8_t newSide = ((PIN(CPLD_CURRENT_SIDE_PORT) >> CPLD_CURRENT_SIDE_PIN) & 0x01); + if (newSide != currentSide) + { + if (numberOfDiskSides == 2) + currentSide = newSide; + else + currentSide = 0; + restartDisk = true; + + // premature end of a write? + if (writeCount >= SECTOR_DATA_SECTORNUM_START) + { + strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); + writeErrorNumber = 2000 + writeCount; + WriteError(); + } + } + + // did the read/write mode change? RD_RW: 0 = write, 1 = read + uint8_t wreqBit = bit_is_clear(PIN(CPLD_WR_REQ_PORT), CPLD_WR_REQ_PIN); + if (wreqBit != writeMode) + { + writeMode = wreqBit; + + if (writeMode) + { + // switch the DATA pins to inputs + DDR(CPLD_DATA_PORT) = 0; + + // indicate that the data bus has been released + PORT(CPLD_DATA_HIZ_PORT) |= (1<= SECTOR_DATA_SECTORNUM_START) + { + strncpy(textBuf, "incomplete write", TEXTBUF_SIZE); + writeErrorNumber = 3000 + writeCount; + WriteError(); + } + } + + restartDisk = true; + } +} + +void HandleGCRWrite() +{ + uint8_t diskByte = 0x80 | PIN(CPLD_DATA_PORT); + + if (writeCount < SECTOR_DATA_ENCODED_TAGS_START) + { + // look for the sector header + // the final header byte is the sector number + if (writeCount == SECTOR_DATA_SECTORNUM_START) + { + uint8_t sector = pgm_read_byte(&disk_byte_to_sony[diskByte - 0x96]); + + if (sector >= trackLength(currentTrack)) + { + snprintf(textBuf, TEXTBUF_SIZE, "bad sector %d for t%d", sector, currentTrack); + writeErrorNumber = 60; + WriteError(); + } + + uint8_t trackLen = trackLength(currentTrack); + currentWriteBufferNumber = trackLen * currentSide + sector; + + if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) + { + snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, sector); + writeErrorNumber = 61; + WriteError(); + } + + pSectorBuf = sectorBuf[currentWriteBufferNumber]; + bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; + bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; + wrTrack = currentTrack; + wrSide = currentSide; + wrSector = sector; + + // turn on the LED when receiving a sector write + PORT(STATUS_LED_PORT) &= ~(1<> 7; + ck7 = (ck7 << 1) | XBit; + break; + + case 1: + b = (writeTemp & 0xC0) | dataIn; // A7 A6 0 0 0 0 0 0 | 0 0 A5 A4 A3 A2 A1 A0 + b ^= ck7; + + if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) + *pSectorBuf++ = b; + + //ADDX(ck5, b); + addResult = (uint16_t)ck5 + b + XBit; + ck5 = addResult & 0xFF; + XBit = addResult >> 8; + writeTemp <<= 2; // B7 B6 C7 C6 0 0 0 0 + break; + + case 2: + b = (writeTemp & 0xC0) | dataIn; // B7 B6 0 0 0 0 0 0 | 0 0 B5 B4 B3 B2 B1 B0 + b ^= ck5; + + if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) + *pSectorBuf++ = b; + + //ADDX(ck6, b); + addResult = (uint16_t)ck6 + b + XBit; + ck6 = addResult & 0xFF; + XBit = addResult >> 8; + writeTemp <<= 2; // C7 C6 0 0 0 0 0 0 + break; + + case 3: + b = writeTemp | dataIn; // C7 C6 0 0 0 0 0 0 | 0 0 C5 C4 C3 C2 C1 C0 + b ^= ck6; + + if (writeCount >= SECTOR_DATA_ENCODED_DATA_START) + *pSectorBuf++ = b; + + //ADDX(ck7, b); + addResult = (uint16_t)ck7 + b + XBit; + ck7 = addResult & 0xFF; + XBit = addResult >> 8; + break; + } + } + else + { + // verify the checksum + if (writeCount == SECTOR_DATA_CHECKSUM_START) + { + writeTemp = dataIn; + writeTemp <<= 2; + } + else if (writeCount == SECTOR_DATA_CHECKSUM_START+1) + { + b = (writeTemp & 0xC0) | dataIn; + writeTemp <<= 2; + if (b != ck5) + { + strncpy(textBuf, "checksum failure 0", TEXTBUF_SIZE); + writeErrorNumber = 62; + WriteError(); + } + } + else if (writeCount == SECTOR_DATA_CHECKSUM_START+2) + { + b = (writeTemp & 0xC0) | dataIn; + writeTemp <<= 2; + if (b != ck6) + { + strncpy(textBuf, "checksum failure 1", TEXTBUF_SIZE); + writeErrorNumber = 63; + WriteError(); + } + } + else if (writeCount == SECTOR_DATA_CHECKSUM_START+3) + { + b = writeTemp | dataIn; + writeTemp <<= 2; + if (b != ck7) + { + strncpy(textBuf, "checksum failure 2", TEXTBUF_SIZE); + writeErrorNumber = 64; + WriteError(); + } + + // success! + bufferState[currentWriteBufferNumber] |= BUFFER_DATA_VALID; + bufferState[currentWriteBufferNumber] |= BUFFER_DIRTY; + bufferState[currentWriteBufferNumber] &= ~BUFFER_LOCKED; + + // turn off the LED at the end of a sector write + PORT(STATUS_LED_PORT) |= (1<> 8) ^ 0xA1]); + crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); + crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xA1]); + crc = (crc << 8) ^ pgm_read_word(&crc_ccitt[(uint8_t)(crc >> 8) ^ 0xFB]); + + for (uint16_t i=0; i> 8) ^ sectorBuf[bufferNumber][i]]); + } + + if (crc != receivedCRC) + { + strncpy(textBuf, "checksum fail", TEXTBUF_SIZE); + writeErrorNumber = 70; + WriteError(); + } +} + +// pin state change interrupt: WR_TICK +ISR(PCINT0_vect) +{ + uint8_t wrTickBit = bit_is_set(PIN(CPLD_RD_ACK_WR_TICK_PORT), CPLD_RD_ACK_WR_TICK_PIN); + + // was a new byte written? + if (writeMode && wrTickBit != wrTick) + { + wrTick = wrTickBit; + + if (!mfmMode) + { + HandleGCRWrite(); + } + else + { + if (wrTickBit == 0) + { + // high nibble arrives first + writeTemp = (PIN(CPLD_DATA_PORT) << 4) & 0xF0; + return; + } + else + { + writeTemp |= (PIN(CPLD_DATA_PORT) & 0x0F); + + if (writeCount == 2) + { + if (writeTemp == 0xFB) + { + writeCount++; + + // header received OK! + currentWriteBufferNumber = currentSector; // assume the buffer to write was the last one read + + if (bufferState[currentWriteBufferNumber] & BUFFER_LOCKED) + { + snprintf(textBuf, TEXTBUF_SIZE, "buf locked %d/%d:%d", currentTrack, currentSide, currentSector); + writeErrorNumber = 71; + WriteError(); + return; + } + + pSectorBuf = sectorBuf[currentWriteBufferNumber]; + bufferState[currentWriteBufferNumber] |= BUFFER_LOCKED; + bufferState[currentWriteBufferNumber] &= ~BUFFER_DATA_VALID; + wrTrack = currentTrack; + wrSide = currentSide; + wrSector = currentSector; // assume the buffer to write was the last one read + + // turn on the LED when receiving a sector write + PORT(STATUS_LED_PORT) &= ~(1<> 2) | ((__c1 & 0xC0) >> 4) | ((__c2 & 0xC0) >> 6)) + +// rotate left +#define rot_ck0(__ck0) \ + do { \ + __ck0 &= 0xFF; \ + __ck0 = (__ck0 << 1) | (__ck0 >> 7);\ + } while(0) + +// ADC __ckr, __in; __out = __in ^ __ckl +#define enc_byte(__in, __out, __ckl, __ckr) \ + do { \ + uint8_t __d = __in; \ + __ckr += __d; \ + __ckr += (__ckl & 0x100) >> 8; \ + __ckl &= 0xFF; \ + __out = __d ^ __ckl; \ + } while(0) + +#define SendByteAndCheckRestart(b) \ + do { \ + if (restartDisk) \ + goto restart; \ + SendByte(b); \ + } while(0) + +void SendMFMSync() +{ + // send A1 sync + + // SendByte + // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups + PORT(CPLD_DATA_PORT) = 0x0A; // data in bits 3-0, sync flag in bit 4 + PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ 0xA1]); + + // SendByte + // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups + PORT(CPLD_DATA_PORT) = 0x11; // data in bits 3-0, sync flag in bit 4 + PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 4) & 0x0F; + + //if (restartDisk) + // return; + + // SendByte + // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups + PORT(CPLD_DATA_PORT) = out; + PORT(CPLD_RD_READY_TK0_PORT) |= (1<> 8) ^ data]); + + //if (restartDisk) + // return; + + // SendByte + // TODO: what if an interrupt has switched the data port to an input? This will turn on pull-ups + PORT(CPLD_DATA_PORT) = out; + PORT(CPLD_RD_READY_TK0_PORT) |= (1< 128) + lcd_vop--; + } + else if (bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) + { + eeprom_update_byte((uint8_t*)1, lcd_vop); + break; + } + + LcdWrite(LCD_CMD, 0x21); // LCD Extended Commands. + LcdWrite(LCD_CMD, lcd_vop); // Set LCD Vop (Contrast). + LcdWrite(LCD_CMD, 0x20); + } +} + +void PromptForFirmwareUpdate() +{ + LcdGoto(0,0); + LcdClear(); + LcdGoto(0,0); + LcdTinyStringP(PSTR("CPLD FIRMWARE UPDATE"), TEXT_NORMAL); + LcdGoto(0,2); + LcdTinyStringP(PSTR("Release buttons to"), TEXT_NORMAL); + LcdGoto(0,3); + LcdTinyStringP(PSTR("begin"), TEXT_NORMAL); + + // wait for the buttons to be released + while (bit_is_clear(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) || + bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) || + bit_is_clear(PIN(SELECT_BUTTON_PORT), SELECT_BUTTON_PIN)) + {} + + LcdGoto(0,2); + LcdTinyStringP(PSTR("NEXT: Load firmware"), TEXT_NORMAL); + LcdGoto(0,3); + LcdTinyStringP(PSTR("PREV: Cancel"), TEXT_NORMAL); + _delay_ms(400); + + // wait for a button press + while (bit_is_set(PIN(PREV_BUTTON_PORT), PREV_BUTTON_PIN) && + bit_is_set(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN) && + bit_is_set(PIN(SELECT_BUTTON_PORT),SELECT_BUTTON_PIN)) + {} + + if (bit_is_clear(PIN(NEXT_BUTTON_PORT), NEXT_BUTTON_PIN)) + { + UpdateFirmware(); + } + else + { + LcdClear(); + } +} + +uint32_t imageFirstBlock, imageLastBlock; + +bool OpenImageFile() +{ + LcdClear(); + LcdGoto(0,0); + LcdTinyString(selectedLongFile, TEXT_NORMAL); + + LcdGoto(0,1); + + // open the disk image file + // to-do: check if the file is read-only on the card + bool openOK = true; + if (!f.open(selectedFile, O_RDWR)) + { + if (f.open(selectedFile, O_RDONLY)) + { + // TODO: How do we tell the CPLD the disk is read-only? + readOnly = true; + } + else + { + LcdTinyStringP(PSTR("error opening image"), TEXT_NORMAL); + openOK = false; + } + } + else + { + if (selectedFileType == DISK_IMAGE_400K || selectedFileType == DISK_IMAGE_DISKCOPY_400K) + { + numberOfDiskSides = 1; + } + else + { + numberOfDiskSides = 2; + } + } + + // get address of file on SD + if (openOK && !f.contiguousRange(&imageFirstBlock, &imageLastBlock)) + { + LcdTinyStringP(PSTR("image not contiguous"), TEXT_NORMAL); + openOK = false; + } + + if (!openOK) + { + _delay_ms(4000); // wait 4 seconds + } + else + { + LcdGoto(0,1); + // show disk image type + switch (selectedFileType) + { + case DISK_IMAGE_400K: + LcdTinyStringP(PSTR("400K raw image"), TEXT_NORMAL); + break; + + case DISK_IMAGE_800K: + LcdTinyStringP(PSTR("800K raw image"), TEXT_NORMAL); + break; + + case DISK_IMAGE_1440K: + LcdTinyStringP(PSTR("1440K raw image"), TEXT_NORMAL); + mfmMode = true; + break; + + case DISK_IMAGE_DISKCOPY_400K: + LcdTinyStringP(PSTR("400K DiskCopy image"), TEXT_NORMAL); + break; + + case DISK_IMAGE_DISKCOPY_800K: + LcdTinyStringP(PSTR("800K DiskCopy image"), TEXT_NORMAL); + break; + + case DISK_IMAGE_DISKCOPY_1440K: + LcdTinyStringP(PSTR("1440K DiskCopy image"), TEXT_NORMAL); + mfmMode = true; + break; + + default: + break; + } + + selectedFileIsDiskCopyFormat = (selectedFileType >= DISK_IMAGE_DISKCOPY_400K); + + if (bit_is_set(PIN(CARD_WPROT_PORT), CARD_WPROT_PIN)) + readOnly = true; + + // mount DiskCopy images read-only + if (selectedFileIsDiskCopyFormat) + readOnly = true; + + uint16_t volumeNameOffset = selectedFileIsDiskCopyFormat ? 0x424 + 0x54 : 0x424; + f.seekSet(volumeNameOffset); // offset of the Macintosh disk name in the image file + f.read(§orBuf[0][0], SECTOR_DATA_SIZE); + int nameLen = sectorBuf[0][0]; + uint8_t* name = §orBuf[0][1]; + name[nameLen] = 0; + name[21] = 0; // in case nameLen was bogus, terminate the string after 21 chars, which is the longest displayable name on the LCD + LcdGoto(0,2); + LcdTinyString((char*)name, TEXT_NORMAL); + LcdGoto(0,4); + LcdTinyStringP(PSTR("Track Side"), TEXT_NORMAL); + + // show a lock icon if the disk image is mounted as read-only + if (readOnly) + { + LcdGoto(77,0); + LcdWrite(LCD_DATA, 0x00); + LcdWrite(LCD_DATA, 0x78); + LcdWrite(LCD_DATA, 0x7E); + LcdWrite(LCD_DATA, 0x79); + LcdWrite(LCD_DATA, 0x79); + LcdWrite(LCD_DATA, 0x7E); + LcdWrite(LCD_DATA, 0x78); + } + } + + f.close(); + return openOK; +} + +void ResetDiskState() +{ + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // useless code to prevent the "unused" bootloader_info array from being optimized away when optimizations are turned on + // there's probably a nicer way to accomplish this. + currentTrack = bootloader_info[currentTrack]; + + InitPorts(); + + currentTrack = 0; + prevTrack = 0; + restartDisk = false; + currentSide = 0; + prevSide = 0; + writeMode = 0; + diskInserted = false; + numberOfDiskSides = 2; + currentSector = 0; + readOnly = false; + mfmMode = false; + writeError = false; + writeDisplayTimer = 0; + tachFlutter = 0; + writeErrorNumber = 0; + writeCount = 0; + + for (uint8_t i=0; i= trackLen - 1) + return 0; + else + return prevSectorNumber + 1; + } + else + { + uint8_t halfTrackLen = (trackLen + 1) >> 1; + + // process sectors in interleaved order: + // 12 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 11 + // 11 sector tracks: 0 6 1 7 2 8 3 9 4 10 5 + // 10 sector tracks: 0 5 1 6 2 7 3 8 4 9 + // 9 sector tracks: 0 5 1 6 2 7 3 8 4 + // 8 sector tracks: 0 4 1 5 2 6 3 7 + // This is how real floppies are formatted, and should improve read performance if the Mac + // can't completely process sector N before sector N+1 begins. It should also improve sector-by-sector + // write performance, because the Mac alternately reads (address header) and writes (data section) in + // this mode, and proper interleaving means it will read the desired address header sooner if the Mac + // isn't fast enough to process the sectors linearly (which it likely isn't). + if (prevSectorNumber > trackLen - 1 || + ((trackLen & 1) == 0 && prevSectorNumber == trackLen - 1) || + ((trackLen & 1) == 1 && prevSectorNumber == halfTrackLen - 1)) + return 0; + else if (prevSectorNumber < halfTrackLen) + return prevSectorNumber + halfTrackLen; + else + return prevSectorNumber + 1 - halfTrackLen; + } +} + +void ReadDiskCopy42Block(SdFat& sd, uint32_t blockToRead, uint8_t bufferNumber) +{ + // for a DiskCopy 4.2 image, read two blocks into a temp buffer, then copy the unaligned data into the sector buffer. + uint16_t i; + + if (!sd.card()->readStart(blockToRead)) + error("SD read start error"); + + // read part 1 + if (!sd.card()->readData(extraBuf)) + error("SD read error D"); + for (i=0; i<512-0x54; i++) + sectorBuf[bufferNumber][i] = extraBuf[0x54 + i]; + + // read part 2 + if (!sd.card()->readData(extraBuf)) + error("SD read error D"); + for (i=512-0x54; i<512; i++) + sectorBuf[bufferNumber][i] = extraBuf[0x54 + i - 512]; + + sd.card()->readStop(); +} + +void FlushDirtySectors(SdFat& sd, uint8_t trackNumber) +{ + uint8_t trackLen = trackLength(trackNumber); + uint8_t firstDirtyBuffer = NUM_BUFFERS, lastDirtyBuffer=0; + + // determine the dirty range + for (uint8_t i=0; ireadBlock(blockToRead, sectorBuf[i])) + error("SD read error W"); + } + } + + uint32_t firstBlockToWrite = imageFirstBlock + ((uint32_t)trackStart(trackNumber) * numberOfDiskSides + firstDirtyBuffer); + + if (mfmMode) + firstBlockToWrite += trackLen * wrSide; + + uint32_t numBuffersToWrite = lastDirtyBuffer + 1 - firstDirtyBuffer; + + if (!sd.card()->writeStart(firstBlockToWrite, numBuffersToWrite)) + error("SD writeStart fail"); + + for (uint8_t i=firstDirtyBuffer; i<=lastDirtyBuffer; i++) + { + if (!sd.card()->writeData(sectorBuf[i])) + error("SD write error"); + + bufferState[i] &= ~BUFFER_DIRTY; + bufferState[i] &= ~BUFFER_LOCKED; + } + + if (!sd.card()->writeStop()) + error("SD writeStop fail"); + + writeDisplayTimer = 25; + millitimerOff(); + + uint32_t writeTime = millis() - t0; + + snprintf(textBuf, TEXTBUF_SIZE, "Saved trk %02d in %lu ", trackNumber, writeTime); + LcdGoto(0,5); + LcdTinyString(textBuf, TEXT_NORMAL); + } + } +} + + diff --git a/floppy_emu_arduino/floppyemu.cppproj b/floppy_emu_arduino/floppyemu.cppproj new file mode 100755 index 0000000..2f2d5e5 --- /dev/null +++ b/floppy_emu_arduino/floppyemu.cppproj @@ -0,0 +1,189 @@ + + + + 2.0 + 5.1 + {e27520eb-9b21-411f-b8c6-71c8e4b8b1b6} + ATmega1284P + none + Executable + CPP + $(MSBuildProjectDirectory)\$(Configuration) + + + floppyemu + floppyemu + floppyemu + com.atmel.avrdbg.tool.ispmk2 + com.Atmel.AVRGCC8 + Native + 2.11.1 + ISP + + com.atmel.avrdbg.tool.ispmk2 + AVRISP mkII + 000200006259 + + 127.0.0.1 + 49229 + False + + + JTAG + + 1000000 + 1000000 + 150000 + false + false + 0 + 0 + 0 + 0 + + + + + + floppyemu + .elf + + + True + True + True + True + True + True + True + True + + + F_CPU=20000000 + + + + + ../SdFat + ../xsvf + + + Optimize more (-O2) + True + True + True + True + + + m + + + True + True + + + .bootldrinfo=0xF7FC + + + + + True + C:\Users\chamberlin\Documents\floppyemu\AVR\Release + C:\Users\chamberlin\Documents\floppyemu\AVR\Release\Makefile + + + floppyemu + .elf + + + True + True + True + True + True + True + True + True + True + Default (-g2) + True + + + m + + + Default (-g2) + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + Sd2Card.cpp + + + compile + SdBaseFile.cpp + + + compile + SdFat.cpp + + + compile + SdVolume.cpp + + + compile + lenval.cpp + + + compile + lenval.h + + + compile + micro.cpp + + + compile + micro.h + + + compile + ports.cpp + + + compile + ports.h + + + + \ No newline at end of file diff --git a/floppy_emu_arduino/floppyemu.h b/floppy_emu_arduino/floppyemu.h new file mode 100644 index 0000000..bdcc75f --- /dev/null +++ b/floppy_emu_arduino/floppyemu.h @@ -0,0 +1,110 @@ +/* + * floppyemu.h + * + * Created on: 2014/07/12 + * Author: sin + */ + +#ifndef FLOPPYEMU_H_ +#define FLOPPYEMU_H_ + +// I/O pin assignments +#define CPLD_RESET_PORT B +#define CPLD_RESET_PIN 0 + +#define CPLD_STEP_DIR_MOTOR_ON_PORT C +#define CPLD_STEP_DIR_MOTOR_ON_PIN 7 + +#define CPLD_STEP_REQ_PORT D +#define CPLD_STEP_REQ_PIN 0 // PCINT24 +#define CPLD_STEP_REQ_INT_MSK PCMSK3 +#define CPLD_STEP_REQ_INT_PIN PCINT24 +#define CPLD_STEP_REQ_INT_ENABLE PCIE3 + +#define CPLD_CURRENT_SIDE_PORT C +#define CPLD_CURRENT_SIDE_PIN 1 // PCINT17 +#define CPLD_CURRENT_SIDE_INT_MSK PCMSK2 +#define CPLD_CURRENT_SIDE_INT_PIN PCINT17 +#define CPLD_CURRENT_SIDE_INT_ENABLE PCIE2 + +#define CPLD_EJECT_REQ_PORT D +#define CPLD_EJECT_REQ_PIN 3 + +#define CPLD_STEP_ACK_DISK_IN_PORT C +#define CPLD_STEP_ACK_DISK_IN_PIN 2 + +#define CPLD_WR_REQ_PORT C +#define CPLD_WR_REQ_PIN 0 // PCINT16 +#define CPLD_WR_REQ_INT_MSK PCMSK2 +#define CPLD_WR_REQ_INT_PIN PCINT16 +#define CPLD_WR_REQ_INT_ENABLE PCIE2 + +#define CPLD_RD_READY_TK0_PORT C +#define CPLD_RD_READY_TK0_PIN 5 + +#define CPLD_RD_ACK_WR_TICK_PORT A +#define CPLD_RD_ACK_WR_TICK_PIN 7 // PCINT7 +#define CPLD_RD_ACK_WR_TICK_INT_MSK PCMSK0 +#define CPLD_RD_ACK_WR_TICK_INT_PIN PCINT7 +#define CPLD_RD_ACK_WR_TICK_INT_ENABLE PCIE0 + +#define CPLD_DATA_PORT A + +#define CPLD_DATA_HIZ_PORT C +#define CPLD_DATA_HIZ_PIN 6 + +#define CPLD_TACH_PORT D +#define CPLD_TACH_PIN 5 + +#define CPLD_TMS_PORT C +#define CPLD_TMS_PIN 3 + +#define SELECT_BUTTON_PORT D +#define SELECT_BUTTON_PIN 4 + +#define PREV_BUTTON_PORT D +#define PREV_BUTTON_PIN 1 + +#define NEXT_BUTTON_PORT D +#define NEXT_BUTTON_PIN 2 + +#define STATUS_LED_PORT B +#define STATUS_LED_PIN 3 + +#define CARD_WPROT_PORT D +#define CARD_WPROT_PIN 7 + +// global variables predefinitions + +#define TEXTBUF_SIZE 22 +char textBuf[TEXTBUF_SIZE]; + +volatile uint8_t currentTrack; +volatile uint8_t prevTrack; +volatile uint8_t currentSide; +volatile uint8_t prevSide; +volatile uint8_t writeMode; +volatile bool restartDisk; +volatile bool writeError; + +bool diskInserted; +bool readOnly; +bool mfmMode; +uint16_t crc; +uint8_t numberOfDiskSides; +uint8_t currentSector; +uint16_t driveTachHalfPeriod; +uint8_t tachFlutter; + +uint8_t writeDisplayTimer; +uint8_t cpldFirmwareVersion; + +// public functions predefinitions + +void ResetDiskState(); +void ShowVersion(); +void AdjustContrast(void); +void error(const char* msg); +void PromptForFirmwareUpdate(); + +#endif /* FLOPPYEMU_H_ */ diff --git a/arduino/floppyemu/millitimer.cpp b/floppy_emu_arduino/millitimer.cpp similarity index 100% rename from arduino/floppyemu/millitimer.cpp rename to floppy_emu_arduino/millitimer.cpp diff --git a/arduino/floppyemu/millitimer.h b/floppy_emu_arduino/millitimer.h similarity index 100% rename from arduino/floppyemu/millitimer.h rename to floppy_emu_arduino/millitimer.h diff --git a/arduino/floppyemu/noklcd.cpp b/floppy_emu_arduino/noklcd.cpp similarity index 100% rename from arduino/floppyemu/noklcd.cpp rename to floppy_emu_arduino/noklcd.cpp diff --git a/arduino/floppyemu/noklcd.h b/floppy_emu_arduino/noklcd.h similarity index 100% rename from arduino/floppyemu/noklcd.h rename to floppy_emu_arduino/noklcd.h diff --git a/arduino/floppyemu/portmacros.h b/floppy_emu_arduino/portmacros.h similarity index 100% rename from arduino/floppyemu/portmacros.h rename to floppy_emu_arduino/portmacros.h diff --git a/arduino/floppyemu/xsvf/lenval.cpp b/floppy_emu_arduino/xsvf/lenval.cpp similarity index 100% rename from arduino/floppyemu/xsvf/lenval.cpp rename to floppy_emu_arduino/xsvf/lenval.cpp diff --git a/arduino/floppyemu/xsvf/lenval.h b/floppy_emu_arduino/xsvf/lenval.h similarity index 100% rename from arduino/floppyemu/xsvf/lenval.h rename to floppy_emu_arduino/xsvf/lenval.h diff --git a/arduino/floppyemu/xsvf/micro.cpp b/floppy_emu_arduino/xsvf/micro.cpp similarity index 100% rename from arduino/floppyemu/xsvf/micro.cpp rename to floppy_emu_arduino/xsvf/micro.cpp diff --git a/arduino/floppyemu/xsvf/micro.h b/floppy_emu_arduino/xsvf/micro.h similarity index 100% rename from arduino/floppyemu/xsvf/micro.h rename to floppy_emu_arduino/xsvf/micro.h diff --git a/arduino/floppyemu/xsvf/ports.cpp b/floppy_emu_arduino/xsvf/ports.cpp similarity index 100% rename from arduino/floppyemu/xsvf/ports.cpp rename to floppy_emu_arduino/xsvf/ports.cpp diff --git a/arduino/floppyemu/xsvf/ports.h b/floppy_emu_arduino/xsvf/ports.h similarity index 100% rename from arduino/floppyemu/xsvf/ports.h rename to floppy_emu_arduino/xsvf/ports.h