@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H  }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREIE SEKT.  G) *Gȩ GȽG GȌ*jj >G}J,}Λ "d\DOS SYSCOPY3TO2COM0}B}}CDOS SYS} C C*(> C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSLADEN NUR MIT MEM.SAV MOEGLICH.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VJ8 B V  @  /DE `E:D1:DUP.SYSPROGRAMM-SPEICHERUNG FEHLERHAFT!DOS DENNOC&}H LADEN? >J/N B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu }ABBUC # 60TRIAL.COM5. Sieger der letzten Party im Dezember 1999 in Polen in der Gruppe DEMO. d*} trial ----- aids+ng cooperatd+}ion at last party'99 in opalenicacode - lewis.quakoon.rolandmusic - sologfxg}X/ʽ "2Հ!43#VTDU K4!E4B"FvxwTC2"#DC3!`;"!xUCHVf ge3EgvEB2\ěh-}U3&%u!TEDVSVgTT!"I 2#\f{Wjc!YDD4TF"A4PdE1!|xhC$D25C"#`>eDcX@T4U23xBt%CCt5Uh.}М$#HT@ 352"ETB'T%g d2%wTDȱw8TȆ"$E42@(!6u24Y{C(S@433"2IR`"D"ivU24Y$7.#6h/}ǐ@U52DC#UzLJU3t""Egw3S7SfT5yyVTEݘeGeuDx̷Vd5TaN 7ˇxehUf܉wDw1#3`%j@bwefUDT%h0} w`vC2#`"5ˆffgvTC4!8eFwTGˈ4P3efCFd21'UE{ʇwkyEwwfTB"!V[vc3UT2#TD4Yvh1}zzveUC1!uwCkTHޫ@V#Jvfevfwe C!W%UfVζt:U#heTFVwVvxuC"eV(VgwtREb&&GL4gw1h2} %*VUwwT" X(3VevdV4RgB#EeUz5UhuD3d$@v$uETUXuTf,12/3!L#"3E VfUS!W2H|gTVC41$A}C1\x̻ih3}E9|̶d5IfeRXGTC$6vhUTRT3̹`B#6vdIdUUXDDϱ&D81‹wDt@3DG22#ͺ4IFDYh4}pVUGff3!{lgfZ$VdFfDhB!I#Y&mUU 5guHT23FVIxjuoC)ET4EeyxeeD3zTh5}2DDVDEgd3"$-N!`P$g\EfTfPCXH&eEjfwxv@e$ 3$ &X,eUgDgh6}۾ %cRigU$DUfSf ,bUTVTDEvUVv(%UED3""3ETG=J)Vw"#4h7}6ֱAD*^guT3D3X32`TD,: EwUC2%אN@AYɂ4EB4U0tzs&DwxTh8}"!VUguEeU!"we6ӻѺ3D3 nӱy `!"!!d32#UDC"?# 4FfgvD2"4C3?h9} 4!^EB8tUeVU3DEVB""{$e!TDC!#4VgTC Ż"]V2 TFibHJ$4UFV1 b gB$3y2$3EV d4Bh:} bGCK#E2#ht2d!%v4U`dClC~724:4SBDhgS$fwd2)"#4(z5t14HH^!z'3"ID2*@#Vh;}Die#I1ı^ 6P1K#Ez˷wT2d"Egg#C07B]!VS4xhED̗d7de3h˄Fd%S#6vgdXwEV̉wfu3vT5Ch<}@!2""%ifgeeUDC$zyKf31#|uVeWuD34!(eFfSFʇw4"2A!jC6TC݅VjhvE@weT23[Ƅ#h=}CC#@IfhyyuU1`@!ewBZ@2uC2"JvVTwd3@z%EeFͦdSAvT3!hUT5wFfURwthTEy@UWvtB5bh>}6uge4gw@d8!"1eD1UtS""4XTC"FUfT4eTV1`EUDC5EguuD4"udDG30"!84.p3DUIVNDBWe@H"4VuTU C4!}h?}*E315Tg}x#ViݺC{̵d4U2HUdQ`GSB5wfhZ ~RC#|uA5fc8TEDG4ϱC7@ a#EX{gtEC336h@}b"q49DHzp UreDTQ"L&ڲ[ogUZ$VT5f3Xu2JY J]TUaUT%feGQv^#Vw`$jtnCX)ES3ETxwhA}UCN3DE1@C4E34"wXDS# TCXλaCEgC$vEeT篱87ae5gfVgwwx2vU rn`3T&XhB}wUVUefDg~R*iWTDEUEEbWe eaESVD34EuTFwAf$UDC2"4A<hC}Ff!#332%``ֱ~D)Ʊ^gtCcY(4,9EfU2EdאM0 I3D23"!ETDD hD}tys&DfgSlEUVe4eT  fd!"HC2${pO08O]((PuPxx]Ȉpr19hE}O@@hh2:O]00XuX􀸀]Јpr 3;OHHpphF}4O]@@huhhG}\7?O00XX?A@V8 * * J XhH}`ɻ  0@1@oA` P\\râ2bĒ"RłŲBrƢ2bǒ"RȂȲBcqɏɜɪhI}G|ʑʣʶ ,/Pjqˍ˫ JPZhJ}xrke_ZUPKGC?<852/,*(%#! οzqke_\VPMGD><852/-*(%#! hK}yspfaZURKHC?<9730-*(%$! yrlf`[UQLHD@<952/-*(%#! 4hL}    hM} ? hN} ??  hO} ? !BBbbhP} !hQ}!B a hR} i}$t%}i$݉$L$ BIBD$E V8`Error: No DOS 2.5 - Can't start menu! ? T}.  t`: [ BD$8%:V% g%~F J @  U} ʎDLt`i7xө$CL:؍@$mii@C'X@ԩ͑L^0`  l D1:MENU.OVV}L$`i7xө$CL:؍@$mii@C'X@ԩ͑L^0`  l D1:MENU.OV VW HV  V V V wW V W*E' h `+",#-.V-`++,`$"%#Ɗ$e*X}*)M$%`&-"+#,*$ %!ߥ$%$$-ʝV-ަ+,++LV. UV? UVI0 UVI1 dWpW dWpW2Y}W SW*H SWh*Z?? {V010?Ms%(')+-#3m1r/1C2)n46N7K8:;<>@B!gCQEFGIPSLN P^}8SUWY[]a^`bdfgEhjlnprsuwihzH}~<`ɎL𱳵Dž_}d8#!SƻnYoL;ċ-#oIu}xPLPLSޮH*ј`Z<"ؔ`}"R1lǂPg[" _0I%.|‹KHx >"D5&x3;0L=CDgYXjmɍ'&hhdƷFo`l~˞ǃėBZa}ia~ E<+rF*w;y10qJc2jL-Cc0xT@E*됁XcP*}5Hy5{5&p*mxs6 $3]Qשb}CpdFRmH@-'Py7Q|.vέ&f(rv&f93cPz Gqж (*7|-/uh{q&/\Ooytu{RLg2*IҔ )ca!8?e}3^VkKUտ?( WcO#`d9j4/>VT 1^[2f$H ͈ov,[ h!$gtVitUW85-ef} /ɚ%@U.y$؈)y5IHc|@]_$ Ŵ{{O>=#ӞbcVXMBG ZqWY+c%c^I+`p^ g}w]rD^!MyGWBRFb(<\Jfuž{L7f9 ؜tv`Fi5AZX9iN<9nZixr)r+TP^h};rKS]@9)eS,܊~[L%Rlˬz[lj[eS-FۙFe3k2Vhi;l/)3WotvWg];od'ǡi}5( RՈⓁ9/O_%sm;\͠:]AQ?{[2]NliPB'3ŠV >Xe7yJ(j}`v~?֓FkA74F`&dPj 78,5^v#bFڛ:6  M&ihTM6̂@B84G5{mkI k}) 0_Ѻfi9,$`|3ՙ+^4Gi:Äj(WߣQ%zz9bO3UYX~#o~7# M$'Vt^4iT.j4\T{rSRu l}U_84hrprps$Ga8rZG.{p .p糛1ݾ$ R#aՄG_PU*]&  'lG@0W1:,m}KaA~Ft/ 'P3UY/bBs*i%;9flu A1 1zW\B~0+S9q'b.#=3#-տ(rmV+^Y ׵劶>Un}R%5M2J*2ðɨ @_^٤>TʀRvp?ؠA|I9aag 9܌1,,0h e@sd8O6Åo}fEtڴ(,9*d\4]r [4VT0 OL`6MwIWPogD(60y(lMЃ#ǘ>o1?-@:Ce2 u{p}!s i> }eCz'_^~[W;L'Yj/sέ!:QȚ,4X.v_}A"(.]CD".v@3dM q} kKݨ4=D&/_S|P 휹VZ[sGPɪ,jS n =7 YZ[ad.^RP u, GŒEFI\Rr}HpMF3+[rrIw>;P 8!t^j4P_ Ța;qc~.X0KÎkקMB<: pCBs}^[ |&CszWBh{X%`JRd2:Q^RJK"uk ).TL*FiL9 P|<4N4>t}Mr\Y .Lf'ͮΠ2ԮӨ >E$ԢIU(ňF#G.-Q%a1lE-5UK_||w =O/r"u}bޑpԓbqg[,gr]LY8W[l[u`ϯ4ɷqgI8R@$/ #@/5ol-C"Tj`>o[>v}eU[.9){K& Kp ;!'1)V4hg.Wm~rRASfAd7ہVEȀ|TL*@=Q`0D(W,Rw}D\)y$ !Kjd,\ez!}f5&Ch5> n5Vɴj#KxР,PIϭ!US 8SPM1H ت]q[ h2ix}U# y̧y$؈ 8KeaV8j)(e{2{X:)P[\a8&Q;_ci-T/Kuo_fGrm [ aðg EtfkJE0:Q;eYP`髙aaH{}/H @Z * <缐Cm`N 3A$ ҴK N O]6#h]ڕif΍ұ6i6.4"2o$ 'WV($Ȥ|}qm+@KPbJ,֓g76 skIY631'Pxt=J`h=,[O ta:5\nm+A\Ƞ+5EHZ0'aTWWPAu}}92RmWYy=8bd׋ҽ[6ex ɵ\:/l`Pa1dMdhPW z]C}Mw=sh\/AzMuvw +~}b$ _\(<+^ J08SH~f*bf53p#1N:wv@ i[#@Vqd/Jq]X 4`(l]p@1ġˇe8(81 ͇}/%8:*bE7oVIg|8S*Օ5*4pi(KRJo39LÛR4W@\;f&tSNS8<}}BZqdP<ڕQU{n+\M*ϵ_Ӕ2survNꥡ.e4ovc@F@XУ\rk-}X7;mhks*x xy8m3_mlmrck9 T1Ec}raȱTZaG\P 000 6Iu}>p'n\۽RET[`: $F#G~f<ߖL Qi(Q(@M`KR,H0گ}JDa1SVr,J(JB1ʥ RfZ厌l`BM}v-Lz+={*۽{=Hvgp#˧^sf=ə)XAd[,!Ajj}GYNlKGYN,_bZKD:ϧYl1t, ̳cnő6 l\4 pM}4GSycbz6`,S# "tGF}7{CiRL4h h ¬+^LkO)Aw6U^JΡ*>1CT- /8ėJ\ %"UJ[GU@A6yD @Z}C+se[_kޘ8cIS8UL&x3;[e{vD`&i&iM^*ߌu 0#?/j* [SH& .wۏ4oHjq}% -w-jɤӯlniU-;5"a9 pEpxtYm5]o] G] [McmcU&9l  ].^`Gf2 'dI3}-y4[-, yD'(z)Y{,^#-QJ s"L:dkczdΝ{r7ǔud9M@@$ 3?i||DBaO ~|L7^*K&􂸑}oXdI*k dX{Y cw>AYx7@&2p@<KT,Pa%E>3µ9=qޠ Sp#?*7IC"L ĶoTr"Jd /ɩϯ}ЄYO-R>g;pȺuO/.[Kzx-C:>‡ $$Ϋ.@=2I͹rP nP1ݔp }" ;2MHٛ8jo&Ҵuٛp''x{4|CY' - GZhW^-Th# rq H`b ؎39$CIMDۢf"g*z}S]"_>y4HG+2PP%Yke8tR!È#ڠ1)TFQJewy*(!#Cc;9SeR_7$ _6d}w¥-n( u_x}xܡP)= [-d7P'.;C BWAHcwR,u/_d'%K櫠a5"I "kD &ΠD& "jm}L`Fa@ p& Pn^5GGaԘ I|8ϕC9wYj}9i>Tj| ]pդCFNN'%XX+g}~;#_mv_oXAԓP+/ȑ-hL9/SS'XHg.ka^&?|1@<( 5=O"鞲_|–-3bk_~k9/A};^ס>ۉ0OP31 \ Y3%+< s!_+#o6-d 6o fŭ>H>l/:+=o5]!NJ+w; _vrQz2}CCVYMhd<(L?ڝMeZmcpcֈ'ţCOֈش=?558֨Ƌ7{ d`WC5/bŭR!<]HZ exF*PỾQcrp9}  `1ġI:2(kBح4G[; =ܳ@KlXmN݀ʘy֢WS"45t;t]]@KyuGCWvZu.cJ}.["Eq!a &A֥1hX@(3$3BK4M|T΃1˲N.16%IGfV-;5:c0Nh[/=XұV&E HiJ}I8RZ$e%-@R@@6$a*݇cEpLdKr["ײbegv H~6qdTԄԀPlVV^0aUO1V^0 HiJwMAGAZIN NR. 60 Seite -B- DOS SYSDOS 2.5 AUTORUN SYSDas Auswahlmenue ------- }-------------------------------------HP TXTBeschreibung IDE-Files HPNEW LSTSourcecode }HPNEWD1 OBJIDE-Intern HPNEWD5 OBJIDE-extern ------------------------------------- }-------IRG TXTBeschreibung IRG-File IRGDEMO C Source in C IRG M65Source in Mac65 } IRG OBJOBJ-File IRG H Datenfile IRGDEMO COMInfrarot Dem }o Prg. IRGDEMO RC Datenfile IRGSCAN BASScanne Deine Fernbedienung IRGSCAN M65Sourc }e in Mac65 --------------------------------------------TRIAL TXTBeschreibung TRIAL.COM TRIAL C }OMGrafik/Sound Demo --------------------------------------------OWCA2 TXTBeschreibung OWCA2 OW#}0100 ;THIS PROGRAM COPIES ROM TO RAM.0110 ;SIO IS PATCHED TO HANDLE0120 ;IDE-DEVICES AT PAGE $D10130 ;(OR $D5, CHANGE LI,}NE 280)0140 ;0150 ;CASINIT AND CASBOOT ARE USED0160 ;FOR RE-INIT RAM-OS AFTER RESET.0170 ;0180 ;USED MEMORY:0190 ;$,}0570-$057F RESETCODE0200 ;$CC00-$CDFF PATCHCODE0210 ;$CE00-$CEFF RESERVED0220 ;$CF00-$CFFF PARTITION-INFO0230 ;0240 ,};LAST MODIFIED 23/01/000250 PART = $CF000260 PH = PART/2560270 PL = 0-1*PH*256+PART0280 PORT = $D100 ;INTERNA,}L0290 *= $4000 ;FREE BOOTMEM0300 ;COPY ROM TO RAM0310 SEI ;DISABLE IRQ0320 LDA #$000330 ,}STA $CB0340 STA $D40E ;DISABLE NMI0350 LDA $D3010360 ORA #$010370 STA $D301 ;START WITH ROM0380 ,} LDA #$C00390 STA $CC0400 LDY #$00 ;C0-D0,D8-000410 RLOP LDA ($CB),Y0420 STA $CD0430 LDA $D3010,}440 AND #$FE0450 STA $D301 ;OS OFF0460 LDA $CD0470 STA ($CB),Y0480 STA $D01A0490 LDA $D301,}0500 ORA #$010510 STA $D301 ;OS ON0520 INC $CB0530 BNE RLOP0540 INC $CC0550 LDA $CC0560 ,} CMP #$CC0570 BEQ SPEC0580 CMP #$000590 BNE RLOP0600 BEQ REDY0610 SPEC LDA #$D80620 STA $CC0,}630 JMP RLOP0640 REDY LDA #$40 ;READY0650 STA $D40E0660 CLI 0670 LDA $D3010680 AND #$FE0690 ,} STA $D301 ;OS OFF0700 LDA $090710 ORA #$020720 STA $09 ;SET CASBOOT0730 ;COPY PATCH TO $CC000740 ,} LDX #$000750 COPHP LDA $4100,X0760 STA $CC00,X0770 LDA $4200,X0780 STA $CD00,X0790 LDA $4300,X0,}800 STA $CE00,X0810 INX0820 BNE COPHP0830 ;SET SIO TO PATCH0840 LDA $E45A0850 STA NOHD+$8B010,}860 LDA $E45B0870 STA NOHD+$8B020880 LDA #$000890 STA $E45A0900 LDA #$CC0910 STA $E45B0920 ,} JSR INIT+$8B00 ;GET INFO0930 ;NOW RESET THE SYSTEM0940 JMP $E4740950 ;****************************0960 ;* (C) S,}IJMEN SCHOUTEN *0970 ;* MAXIMUM SIZE IS 768 BYTE *0980 ;* ALL JSR/JMP/LABELS +8B00 *0990 ;* 4100 --> CC00 IS +8B0,}0 ! *1000 ;* VERSION WITHOUT BOOT-EMU *1010 ;****************************1020 *= $4100 ;SIOPATCH1030 ;1040 ,} LDA $0300 ;CHK D:1050 CMP #$311060 BNE NOHD1070 ;1080 LDA PORT+7 ;CHK ACTIVITY1090 BMI NOHD1100 ,};1110 LDX PART+4 ;CHK PARTITION1120 BEQ NOHD1130 CP TXA 1140 ASL A1150 ASL A1160 ASL A1170 ,} TAY 1180 LDA PART,Y1190 CMP $0301 ;WITH DRIVE-NR1200 BEQ HD1210 DEX 1220 BNE CP1230 ;1240 ,}NOHD JMP $ABCD ;PATCHED LATER1250 ;1260 HD STY PART+$FF ;SAVE PART1270 LDA #$801280 STA $37 ;128 X RET,}RY1290 LDA $03041300 STA $32 ;SET BUFFER1310 LDA $03051320 STA $331330 LDA $03021340 ,}CMP #$521350 BEQ CREA1360 CMP #$501370 BEQ CWRI1380 CMP #$571390 BEQ CWRI1400 CMP #$531410 ,} BEQ STAT1420 CMP #$211430 BEQ FORM1440 IOER LDY #139 ;DEVICE NAK1450 STY $03031460 RTS 1470 ;,}1480 FORM LDA #$FF ;PUT FF,FF1490 LDY #$001500 STA ($32),Y1510 INY 1520 STA ($32),Y1530 IOOK LDY #,}$011540 STY $03031550 RTS 1560 ;1570 STAT LDY PART+$FF1580 LDA PART+5,Y ;DENSITY?1590 BEQ STA2 ;0=,}SINGLE1600 LDA #$20 ;DOUBLE1610 STA2 STA $02EA1620 LDA #$001630 STA $02EB ;CONTROLLER OK1640 ST,}A $02ED ;NOT USED1650 LDA #$FF1660 STA $02EC ;TIME-OUT1670 JMP $8B00+IOOK1680 ;1690 CREA JSR $8B00+S,}ETU1700 BNE CRRR1710 RINI LDA #$21 ;READ1720 STA PORT+71730 JSR $8B00+BUSY1740 BMI CRRR1750 LDA,} PORT+71760 AND #$011770 BNE CRRR1780 LDY #$001790 CRE1 LDA PORT1800 STA ($32),Y1810 INY 1820,} CPY $03081830 BNE CRE11840 JSR $8B00+VERY1850 BNE CRRR1860 JMP $8B00+IOOK1870 CRRR DEC $371880 ,} BNE CREA1890 JMP $8B00+IOER1900 ;1910 CWRI JSR $8B00+SETU1920 BNE CWRR1930 LDA #$311940 STA PO,}RT+71950 STA $D40A1960 CWR1 LDA PORT+71970 AND #$081980 BEQ CWR11990 LDY #$002000 CWR2 LDA ($32),Y,}2010 STA PORT2020 INY 2030 BNE CWR2 ;ALWAYS 2562040 JSR $8B00+BUSY2050 BMI CWRR2060 LDA P,}ORT+72070 AND #$202080 BNE CWRR2090 JSR $8B00+VERY2100 BNE CWRR2110 JMP $8B00+IOOK2120 CWRR DEC $,}372130 BNE CWRI2140 JMP $8B00+IOER ;-ERROR2150 ;2160 VERY LDA #$01 ;ONE SECTOR2170 STA PORT+22180 ,} LDA #$21 ;READ2190 STA PORT+72200 JSR $8B00+BUSY2210 BMI VERE2220 LDY #$002230 VER1 LDA PORT2240,} CMP ($32),Y2250 BNE VERE2260 INY 2270 CPY $03082280 BNE VER12290 LDA #$002300 RTS 231,}0 VERE LDA #$FF2320 RTS 2330 ;2340 SETU LDA #$002350 STA PART+$F6 ;HD2360 LDY PART+$FF2370 LDA PAR,}T+1,Y2380 STA PART+$F4 ;CL2390 LDA PART+2,Y2400 STA PART+$F5 ;CH2410 LDA $030A2420 STA $302430 ,} LDA $030B2440 STA $312450 DEC $302460 BNE CAL12470 LDA $312480 BEQ SET12490 CAL1 SEC 2500 ,} LDA $302510 SBC PART+32520 BCC CAL22530 STA $302540 JMP $8B00+CAL32550 CAL2 LDX $312560 BEQ S,}ET12570 STA $302580 DEC $312590 CAL3 INC PART+$F62600 LDA PART+22610 CMP PART+$F62620 BCS CAL126,}30 LDA #$002640 STA PART+$F62650 INC PART+$F42660 BNE CAL12670 INC PART+$F52680 BNE CAL1269,}0 SERR LDA #$FF2700 RTS ;OVERFLOW!2710 ;2720 SET1 INC $302730 LDA $302740 STA PART+$F32750 ,}LDA PART+$F5 ;CHK SIZE CH2760 CMP PART+4,Y2770 BEQ SET3 ;CHK CL TOO2780 BCC SET2 ;OK IF <2790 JMP,} $8B00+SERR ;2800 SET3 LDA PART+$F42810 CMP PART+3,Y2820 BCS SERR ;ERROR IF =,>2830 ;2840 SET2 LDA #$01,}2850 STA PORT+2 ;ONE SECTOR2860 LDA PART+$F32870 STA PORT+32880 LDA PART+$F42890 STA PORT+4290,}0 LDA PART+$F52910 STA PORT+52920 LDA PART+$F62930 STA PORT+62940 LDA #$002950 RTS 2960 ;297,}0 BUSY LDX #$002980 BUS1 STA $D40A2990 STA $D40A3000 STA $D40A3010 STA $D40A3020 STA $D40A3030 ,} STA $D40A ;0.4 mS3040 LDA PORT+73050 BPL BUSE3060 INX 3070 BNE BUS1 ;MAX=100mS3080 LDA #$,}80 ;BMI=ERROR3090 BUSE RTS 3100 ;3110 INIT JSR $8B00+BUSY ;GET INFO3120 BMI NOINI3130 LDA #$003140 STA,} PORT+43150 STA PORT+53160 STA PORT+63170 STA $0308 ;256 BYTES3180 LDA #$013190 STA PORT+2320,}0 STA PORT+33210 LDA #PL3220 STA $323230 LDA #PH3240 STA $333250 JSR $8B00+RINI3260 NOINI R,}TS3270 ;3280 *= $05703290 RESET LDA $D3013300 AND #$FE3310 STA $D3013320 JSR INIT+$8B003330 RT,}S3340 ;3350 *= $023360 .WORD RESET3370 ;3380 *= $02E03390 .WORD $4000 JSR INIT+$8B003330 RT,b@@xˍԭ ө̠˅ͭ)ӥ͑ˍЭ ̥؅L@@X)ӥ  A̽BͽCZ0}"̭[#̩Z̍[ LtAB10 Lͫϩ723RBPpWlS!`2ȑ20}`Ϲ L[ &! 0)ё2 L[7LL -1э ԭ)2 0)  0}L[7LL̩ѩ! 02 ``ϬϹύϹύϭ 0 101280ϐ0LHͦ1!01ϭϰ0}ѩ`00ϭ Lbͭϰѭύѭύѭύѭύѩ` ԍ ԍ ԍ ԍ ԍ ԭ橀` 0!эээ0}эѩ2υ3 `p{) `p@ύѭύѭύѭύѩ` ԍ ԍ ԍ ԍ ԍ ԭ橀` 0!эээ0-@@xˍԭ ө̠˅ͭ)ӥ͑ˍЭ ̥؅L@@X)ӥ  A̽BͽCZ4}"̭[#̩Z̍[ LtAB10 Lͫϩ723RBPpWlS!`2ȑ24}`Ϲ L[ &! 0)Ց2 L[7LL -1Ս ԭ)2 0)  4}L[7LL̩թ! 02 ``ϬϹύϹύϭ 0 101280ϐ0LHͦ1!01ϭϰ4}ѩ`00ϭ Lbͭϰխύխύխύխύթ` ԍ ԍ ԍ ԍ ԍ ԭ橀` 0!ՍՍՍ4}Սթ2υ3 `p{) `p@ύխύխύխύթ` ԍ ԍ ԍ ԍ ԍ ԭ橀` 0!ՍՍՍ4-/* IRG Daemon to translate IR remote functions. Listens for * recognized packets, and sends out other packets. * * Copyri@}ght 1994 David Deaven version 0.1 * Permission is granted to use, copy, and distribute this code, * provided that the use i@}s non-commercial. * deaven@iastate.edu */ #include #include #include "irg.h" #ifdef M6502 #define voi@}d int #else int start(FILE *f); int hextoc(char *s); int which(char *s, char c); void printp(char *s); int gettok(FILE *f, ch@}ar *t); int iswhite(int c); void *pmalloc(size_t n); int getkey(); #endif /* These values work well with Mitsubishi, Sony, a@}nd Sharp remotes. */ int sample = 2; /* timebase */ int ton = 20, toff = 20; /* pulse width -- sending */ int repeat = 3; @} /* repeat send code */ int tonmin = 10, toffmax = 30; /* pulse width -- receiving */ int qtime = 100, totime = 25; /* quiet@} time, timeout */ struct IRcode { char *name; /* user-defined string */ char *packet; /* IRG buffer */ void *map; /@}* pointer to a mapped code */ void *next; /* next code in list */ }; struct Program { char act; /* action type */ vo@}id *action; /* pointer to that action */ void *nxt; /* next action in program */ }; enum acts { NONE, CODE, EXEC }; str@}uct IRcode *vocabulary = NULL; #define BUFLEN 16 char buffer[BUFLEN]; char *digit = "0123456789abcdef"; /* Search for a pa@}cket in the known vocabulary. */ struct IRcode *identify(packet) char *packet; { struct IRcode *p; p = vocabulary; whi@}le(strcmp(packet, p->packet))if((p = p->next) == NULL)return NULL; return p; } /* Search for a packet by name in the known@} vocabulary. */ struct IRcode *nameid(name) char *name; { struct IRcode *p; p = vocabulary; while(strcmp(name, p->name@}))if((p = p->next) == NULL)return NULL; return p; } /* Execute a program. */ void doProg(p) struct Program *p; { struct@} IRcode *irc; printf("(execute: "); while(p != NULL) { switch(p->act) { case CODE: irc = p->action; printf(" @}%s", irc->name); IRGwrite(irc->packet); break; case EXEC: printf("[no EXEC yet]\n"); break; default: break; @} } p = p->nxt; } printf(")\n"); } void main() { int r; struct IRcode *irc; FILE *f; printf("IRG driver d@}emo version 0.1\n"); printf("David Deaven c.1994 deaven@iastate.edu\n"); if((f = fopen("D:IRGDEMO.RC","r")) == NULL) @} fprintf(stderr, "Cannot open init file\n"); else start(f); printf("starting IRG\n"); IRGinit(sample, ton, toff, repea@}t, tonmin, toffmax, qtime, totime); while(1) { if((r = getkey()) > 0) { buffer[0] = 0xff; buffer[1] = r; @} r = 2; } else r = IRGread(buffer, BUFLEN); if(r) { buffer[r] = '\0'; printp(buffer); printf("..."); @} if((irc = identify(buffer)) == NULL) { printf("unknown packet\n(copied)\n"); IRGwrite(buffer); } else { @} printf("%s\n", irc->name); if(irc->map)doProg(irc->map); } } } } /* Read definitions from file f */ inA}t start(f) FILE *f; { struct IRcode *irc, *ircn, *v; struct Program *irl, *vl; char s[64]; int i, n; vocabulary=NULA}L; while(gettok(f, s)) { if(strcmp(s, "def") == 0) { if(gettok(f, s) == 0)goto eoff; if((irc = pmalloc(sizeA}of(struct IRcode))) == NULL)return 3; irc->name = strdup(s); if(gettok(f, s) == 0)goto eoff; for(i=n=0; ipacket = strdup(s); irc->map = NULL; irc->next = A}NULL; printf("define %s = ", irc->name); printp(irc->packet); printf("\n"); if(vocabulary == NULL)vocA}abulary = v = irc; else { v->next = irc; v = irc; } } else if(strcmp(s, "map") == 0) { if(gettok(f, s)A} == 0)goto eoff; if((irc = nameid(s)) == NULL)goto unk; printf("map %s to (", irc->name); while(1) { A} if(gettok(f, s) == 0)goto eoff; if(strcmp(s, "end") == 0)break; if((ircn = nameid(s)) == NULL)goto unk; ifA}((irl = pmalloc(sizeof(struct Program))) == NULL)return 3; printf(" %s", ircn->name); irl->action = ircn; irA }l->act = CODE; irl->nxt = NULL; if(irc->map == NULL)irc->map = vl = irl; else { vl->nxt = irl; vl A }= irl; } } printf(" )\n"); } else { printf("input error near: %s\n", s); return 1; } A } } return 0; eoff: printf("unexpected end of file\n"); return 1; unk: printf("unknown tag %s\n", s); return 1; } A }/* Convert two hex digits to a char. */ int hextoc(s) char *s; { int hi, lo; hi = which(digit, s[0]); lo = which(digitA }, s[1]); return lo + (hi << 4); } /* Determine which character in s is c */ int which(s,c) char *s; char c; { int i; A}for(i=0; s[i]!='\0'; ++i)if(s[i] == c)return i; return -1; } /* Print a string in hexadecimal */ void printp(s) char *s; A}{ while(s[0]!='\0') { fputc(digit[s[0]>>4 & 0xf], stdout); fputc(digit[s[0] & 0xf], stdout); ++s; } } /* ReaA}d one token from f */ int gettok(f, t) FILE *f; char *t; { int i, n; do { i = fgetc(f); if(i == EOF)return 0; A}} while(iswhite(i)); t[n = 0] = i; do { i=fgetc(f); if(i == EOF)return 0; t[++n] = i; } while(!iswhite(i)A}); t[n] = '\0'; return 1; } /* White space on the Atari */ int iswhite(c) int c; { if(c==' ' || c=='\t' || c==155 ||A} c=='\n')return 1; return 0; } int getkey() { #ifdef M6502 int r; char *ch; ch = 0x2fc; if((r = (*ch)) != 0xff) { A} (*ch) = 0xff; return r; } #endif return -1; } 502 int r; char *ch; ch = 0x2fc; if((r = (*ch)) != 0xff) { @:; irg.m65: CC65 functions for the infrared gateway (IRG) Version 0.1 ; ------------------------------------------------------E}------------ ; Copyright 1994 David Deaven version 0.1 ; Permission to use, copy, and distribute this code is granted ; proviE}ded that it is not used for commercial applications. ; David Deaven -- deaven@iastate.edu ; ; This ra65 library package proviE}des access to an infrared gateway, ; or IRG, connected to an Atari 400/800/XL/XE 8-bit computer. A ; description of how to bE}uild the IRG circuit, which simply plugs into ; a joystick port, can be found in the file README.HARDWARE included ; with thE}is distribution. The functions defined here are: ; ; void IRGinit(int sample, int ton, int toff, int repeat, ; int tonmin,E} int toffmax, int qtime, int totime) ; int IRGread(char *buffer, int size) = # bytes returned ; int IRGwrite(char *buffer) = E}0, or 1 if IRG is active ; ; See the file README for more information, and the C program ; irgdemo.c which demonstrates the uE}se of these functions. ; ------------------------------------------------------------------ rdblen = 128 ; internal read buffE}er length (<256) ; Some device things that the standard CC65 headers don't have PACTL = $D302 PORTA = $D300 TRIG0 = $D010 GRE}ACTL = $D01D ; ------------------------------------------------------------------ ; Start the vertical blank service routineE } and set parameters. ; ; void IRGinit(int sample, int ton, int toff, int repeat, ; int tonmin, int toffmax, int qtime, int E!}totime) ; _irginit: jsr enterfun ; get all arguments ldy #16 jsr ldaxysp sta sample ldy #14 jsr ldaxysp sta ton ldy #E"}12 jsr ldaxysp sta toff ldy #10 jsr ldaxysp sta repeat ldy #8 jsr ldaxysp sta tonmin ldy #6 jsr ldaxysp sta toffmaE#}x ldy #4 jsr ldaxysp sta qtime ldy #2 jsr ldaxysp sta totime LDA #%00111001 ; set up PIA STA PACTL ; output bit A0 E$}LDA #%00000001 STA PORTA LDA #%00111101 STA PACTL LDA #0 ; turn IRG output off STA PORTA LDA #0 STA nread ; clear reE%}ad buffer sta nwrite sta rdbuf sta irgstat ; no invalid events LDA #6 ; new immediate VBLANK LDX #VImm^ LDY #VImm\ JE&}SR SETVBV LDA #7 ; new deferred VBLANK LDX #VBlank^ LDY #VBlank\ JSR SETVBV jmp exitfun ; -----E'}------------------------------------------------------------- ; Read the IRG buffer safely into a user buffer. ; ; int IRGreaE(}d(char *buffer, int size) = # bytes returned ; _irgread: jsr enterfun ldy #2 ; get arguments jsr ldaxysp sta blen ldy #E)}4 jsr ldaxysp jsr psave sta ptr1 ; set to point at buffer stx ptr1+1 LDX nread ldy #0 ; # bytes transferred fine: cpE*}x nwrite ; end of buffer? beq rddone LDA rdbuf,x ; transfer one byte STA (ptr1),Y iny INX CPX #rdblen BNE skip1 ldx #E+}0 skip1: cmp #0 ; end of buffer? bne skip2 dey ; zero byte is meaningless, remove jmp rddone skip2: cpy blen ; bufferE,} overflow? bmi fine rddone: stx nread ; update next read position tya ; return # bytes ldy irgstat ; bad buffer? beq rdE-}do2 lda #0 rddo2: ldx #0 jsr prest jmp exitfun ; ------------------------------------------------------------------ ; SeE.}nd a buffer out (null-terminated string). ; ; int IRGwrite(char *buffer) = 0, or 1 if IRG is active ; _irgwrite: jsr enterfuE/}n ldy #2 jsr ldaxysp jsr psave sta ptr1 stx ptr1+1 LDA CRITIC ; is anything else BEQ ok2 ; going on? ldax #1 ; if soE0}, don't send jsr prest jmp exitfun ok2: JSR IStop ; stop DMA etc. lda repeat sta nwr wr0: LDY #$FF LDX #8 loop: INY LDE1}A (ptr1),Y BEQ eot STA bytbuf sloop: LDA #0 ROL bytbuf ROL A STA PORTA TXA LDX ton loop1: JSR DELAY DEX BNE loop1 E2}STX PORTA LDX toff loop0: JSR DELAY DEX BNE loop0 TAX DEX BNE sloop LDX #8 BNE loop eot: ldx qtime eot8: jsr delay E3} dex bne eot8 dec nwr bne wr0 JSR IStart ; restart DMA etc ldax #0 jsr prest jmp exitfun nwr: .byte 0 ; -------------E4}----------------------------------------------------- ; Immediate vertical blank code. Unlike the Atari OS code, if CRITIC iE5}s ; set, _nothing_ gets done. This state should not be maintained too ; long, but for the length of an IR packet it's OK. ; E6}VImm: LDA CRITIC BEQ cont JMP XITVBV ; outta here cont: JMP $E45F ; OS Stage 1 ; -----------------------------------------E7}------------------------- ; Deferred vertical blank code. Examine TRIG0 for new IR input, ; catch all input by keeping TRIG0E8} in hardware latch mode. When TRIG0 has ; been low, display DMA is turned off, CRITIC is enabled, and this routine ; becomesE9} the "mainline" code with the interrupt return info still on the ; stack. An attempt is made to read a valid code into the buE:}ffer, then ; control is returned to the interrupted code. ; VBlank: LDA CRITIC BNE leave ; never happens? LDA TRIG0 BEQ reE;}c ; IRG has been active LDA #%100 STA GRACTL ; set TRIG0 latch leave: JMP XITVBV ; outta here rec: JSR IStop LDA #0E<} STA GRACTL ; clear TRIG0 latch still: LDX qtime ; detect record gap LDA #1 ; IR input bit is LSB wait: JSR Delay BITE=} TRIG0 BEQ still ; (input not quiet) DEX BNE wait ; we'll wait as long as it takes! LDY totime ; looking for a "1" bit tE>}o start retry: LDX qtime mark: BIT TRIG0 BEQ st0 ; got "1", go for it JSR Delay DEX BNE mark DEY BNE retry JMP exE?}it ; time-out, no harm done st0: LDY #8 ; bit counter start: LDX #0 wton: JSR Delay INX BIT TRIG0 BEQ wton CPX tE@}onmin ; bit long enough? BPL okbit LDA #1 ; bad "1" bit STA irgstat JMP exit okbit: SEC ; store a "1" bit JSR store EA} LDX #0 ; wait for "0" to end wtoff: JSR Delay INX BEQ eott ; never? forced EOT (very long "0") BIT TRIG0 BNE wtoff CPEB}X qtime ; the space is EOT? BPL eott CPX toffmax ; a "0" bit? BMI start ; normal space CLC ; store a "0" bit JSR store EC} JMP start eott: CPY #8 ; normal EOT BEQ done ; last data byte has been written CLC JSR store ; pad buffer w/zeroes JED}MP eott done: ldy #8 ; terminate buffer with zero pad: clc jsr store cpy #8 bne pad LDA #0 STA irgstat ; normal opeEE}ration JMP exit ; ------------------------------------------------------------------ ; Store bits MSB to LSB in memory at rEF}dbuf ; ; C = bit (0/1) ; X = not saved ; Y = #bits in bytbuf (0-7), 8==0 ; A = saved ; store: ROL bytbuf ; store byte pre-buEG}ffer DEY BEQ byte RTS byte: TAX ; save A LDA bytbuf LDY nwrite STA rdbuf,Y INY cpy #rdblen bne byte1 ldy #0 byteEH}1: cpy nread ; buffer full? beq over sty nwrite LDY #8 ; new byte TXA RTS over: dey ; back off one cpy #$ff bne oveEI}r1 ldy #rdblen dey over1: lda #0 sta rdbuf,y ; insert artificial terminator sty nwrite PLA ; pop "jsr store" retEJ}urn address PLA LDA #2 ; buffer overrun... STA irgstat ; ...fall through to exit exit: JSR IStart ; restart DMA etc. EK}JMP XITVBV ; outta here ; ------------------------------------------------------------------ ; Wait one delay time, saving AEL}, X, Y ; time = (20+5*sample) clock pds ; Delay: PHA ; 3 cycles TXA ; 2 LDX sample ; 3 dloop: DEX ; 2 BNE dloop ; 3 EM}TAX ; 2 PLA ; 4 RTS ; 6 ; ------------------------------------------------------------------ IStop: LDA #0 STA DMACTLEN} ; prevent DMA LDA #1 STA CRITIC RTS IStart: LDA SDMCTL STA DMACTL ; enable DMA LDA #0 STA CRITIC RTS ; -------------EO}----------------------------------------------------- psave: ldy ptr1 ; save system pointer sty svp1 ldy ptr1+1 sty svp1+1EP} rts prest: ldy svp1 ; restore system pointer sty ptr1 ldy svp1+1 sty ptr1+1 rts svp1: .word 0 ; ----------------------EQ}-------------------------------------------- nread: .byte 0 nwrite: .byte 0 sample: .byte 2 ton: .byte 20 toff: .byte 20ER} tonmin: .byte 10 toffmax: .byte 30 qtime: .byte 100 totime: .byte 25 repeat: .byte 3 bytbuf: .byte 0 blen: .byte 0 rdbES}uf: .blkb rdblen irgstat: .word 0 .globl _irginit .globl _irgread .globl _irgwrite bytbuf: .byte 0 blen: .byte 0 rdbDYO_IRGINIT _IRGWRITE_IRGREADzENTERFUNEXITFUNLDAXYSP C E [ E \ EIU} ] E b E ^ E _ E ` E a9өө=өө Y Z e !="= \!IV}G"G \LD C E d E A Y Z eL  d0 Y IW} LLD C E AB  LLD , b <ȱ* c. c*ӊ \ !Ӯ ] !IX} ` ! < 6 LLDBLbL_B Lb , ` !,IY} a `,  !L  !, ^ L 8  !, `  _IZ}0 L  L   L . c` c Z e Y Z`I[} e Zhh  6LbH [h` ԩB` /ԩB` W X` W X` dI\}I]}H/* irg.h: CC65 functions for the infrared gateway (IRG) Version 1.0 ; -------------------------------------------------------M_}----------- ; Copyright 1994 David Deaven version 1.0 ; Permission to use, copy, and distribute this code is granted ; providM`}ed that it is not used for commercial applications. ; deaven@iastate.edu */ #ifndef _IRG_H_ #define _IRG_H_ int IRGinit(/* sMa}ample, ton, toff, repeat, tonmin, toffmax, qtime, totime */); int IRGread(/* char *buffer, int size */); int IRGwrite(/* charMb} *buffer */); #endif /* _IRG_H_ */ ffmax, qtime, totime */); int IRGread(/* char *buffer, int size */); int IRGwrite(/* charL$ ?Lf%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±Qd}HȱhL!``e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL Qe}HȱhL Hȱh ` ` .!HȥhL! .!L! `HȑhL!L!HH hhL!HH Qf}hhL! H*h`L!`L!`HIhIi```IHIh`e` !L `Qg}` !L! !L! !L! ! !L ! !L  &L!L! 󨥂fjL! eHehL! Qq}``à֮``堭­`b%DOS SYSbSAUTORUN SYSbDWMENU OVL# MENU DEF`-----------#HP TXTb9HPNEW LSTbHPNEWD1 OBJbHPNEWD5 OBJ`-----------#IRG TXTb-IRGDEMO C b?IRG M65b TIRG OBJb^IRG H bAcIRGDEMO COMbIRGDEMO RC #IRGSCAN BASbIRGSCAN M65`-----------#)TRIAL TXT#,TRIAL COM`-----------# WOWCA2 TXT#\cOWCA2 COM8H哪hL! HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&łQr}'% 0ł 䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 Qs}L H hL lHh` !L !L hh捠ilŕŔ Qt}liL#`L!  ! Ɣ !$ \$& $ \$& 򦓥 !`HQu}eeh`` ! ! ! !Ńł &&L$FfFf3ōQv}Ō8包卅FfFfͥ !ĕ !` t$L! ` Qw}`S L L L i?H ihL%  4l  dI'Qx} k# M %% B! u  u  !  9( u  ! B! "  Lq#L% u  Lq# k# M %% B! u  uQy} !  9( u  ! B! "  Lq#LG& u  Lq# k# M Z'  [5 u "L7' u !L' u  !Qz} B!e'  u !  [5 u  !  2L%'i'  [5L%'L%'L%' #&'L' u  ! B!L&x'  [5  Lq#0123Q{}456789abcdef(execute: %s[no EXEC yet]) k# i S)  [5p)  [5) )  q: B! ":: )Q|}  5L' u  ))  [5%% %% %% %% %% %% %% %%  1 1 B! Q}} #3Ģ% i!Ģ%  Y"  u i! B!L(Ģ%   j2 B! u !LJ)Ģ%  u Y" i!Q~}%  T/̢)  [5Ģ%  % B! "Т)  [5Ģ%  2LJ))  u !  [5 u  ! ! u  Q}!  &L;( + Lq#IRG driver demo version 0.1David Deaven c.1994 deaven@iastate.eduD:IRGDEMO.RCrCannot open init fileQ}starting IRG...unknown packet(copied)%s k#N 7 %%P u   \0L. /  9 "L-Q},P u   \0 "N  L*.  >:L B! " N  Lq#L u   ; R!P u  Q} \0 "N  L*. B! B! u   M% "YL+ u  Y" B!L*  u #  B! $ Y"  Q}  u Y"  o. i!L*  u #  B! $ Y" i!L u   ; !L u  !L u  Q}!/ N u !  [5L u  !  T/0  [5%% "L u H B!%%L*,H u N u  !L u H B!L.Q} 0  9 "L-P u   \0 "N  L*.  6&L B! "N  LJ.0 N u Q}!  [5P u   \0 "N  L*. 0  9 "L-  6&J B! "N  LJ.Q}  >:F B! " N  Lq#0 L u !  [5F u L u  !F u  i!F u  !L u  ! Q} "L u H u F B! !L-D u H u  !F u D B!L,0  [5L.0   [5N  Lq#L)N Q} Lq#L/.N 7 40  [5N  Lq#LO.N 7 L0   [5N  Lq# k# a %%  u !  . B!%%  uQ}  Y" !  . B! u  u  " Y" # Lq# k# M B! u  u Y" ! "AL/ u B!L.Q} u  u Y" !  " u  Lq#L /  Lq# k# u ! "L/%%  u !  8"  " Y" ! Q} ::  a;%%  u !  " Y" ! ::  a; u  B!LW/Lq#defdefine %s = mapmap %s to (end Q}%s )input error near: %sunexpected end of fileunknown tag %s k# a  u  ; B! u " # Lq# u Q}  I1Lb0 u  B! Y"  u i! u  ; B! u " # Lq# u  u  B! Y"  u i!Q} u  I1 !L0 u  u Y" i! # Lq# k# u "3 u  "" u " u "Q}Lq#Lq# k# a  B! u ! B! " u i! u # Lq# # Lq# k# u K4 u L4 u M4Q} u R4 u N4 u O4 u P4 u Q49өө=өөI4J4U443- \37 \Lq# k# u T4 u 14I4JQ}4U4L2T40I44 <4Lq# k# u 14B  <4Lq# 4R4,3ȱ*S4.S4*ӊL4 4ӮM4 Q}4ݢѮP4 4,3п &4 <4Lq#BLbL_B Lb 4ЮP4 4,Q4P4, 4L 4 4,Q}N44L 48 3 4,P4 O40 3Ly3 3L3 34L 4.S4`S4J4U4I4J4`Q}U4J4hh4 &4LbHK4h`ԩB`/ԩB`G4H4`G4H4` dQ} k# !44  #> 44 Q}  {'Lq# k# a    }! Y" ! }! Y"  }! h" B! u # u  B!  5 # Lq# k# M ::   Q} }! Y" ! }! Y"  }! h"  5  Lq# k## 7  B!% u # % B! $ ! B! u ! !L9 u #% "3 uQ} #  B! $ #) ! a; u  B!L5L/6 u  B! u #% "0 u #  B! $ #) ! a; u  B!L5Q} u #- " B! u  B!L6 B! u #0 " 0 B!L6  B! u # >B u #  B! $ Q}  < B! u # > u  B!L6L#7 B! u #. "< u  B!  < B! u # > u  B!Q}LN7Ly7 B!% u # % B! $ !! B!  B! u #  B! $ # >Lu8 # u i!  Y" i!L8! u Q} B!L8! !  =L8! !   : B! ! ! -% ! u Y" i! u # Lq# Y# a  u # 3? u  B!L< B! u !Le=  u $  u #  B! $ ! Y" 0 h" B!L{< Q}! u $ # Lq# a# a  u  B! ! 8" B! ! " B! ! 8"  " B! ! ! u #%  " Q} u Y" i! u # " u #0 Y" i!L= u #7 Y" i! u  B! ! u t$ B! !L< ! i! Q}! > # Lq#? Ԇ !Ԇթ- ؠ0L=)ȑ` 0:`` NQ}HɛD >ȥi揠 >Hhɛ`!8`` A[i ` Y# a  ! ! M%Q} Y"  h" B! ! u "O u ! B! u #  B! $  u ! i! u #  B! $  u i!L> # Lq# Y# Q}! ": ! "" ! " ! 3#Lq# i! u #  B! $  u i!L> # Lq# Y# PMdef vcr_chup ab6edf def vcr_chdn ab6eef def vcr_volup abddee def vcr_voldn abddb7 def vcr_play ab6f7e def vcr_rew ab6f5b80 deU}f vcr_ff ab6f77 def vcr_pause ab6f5780 def vcr_rec ab6f5f def vcr_jogfwd ab6f6ac0 def vcr_jogrev ab6d7560 def vcr_jogon ab6ebU}6c0 def vcr_jogoff ab6eab60 def vcr_qv ab6dbb80 def vcr_cancel ab6d6f80 def vcr_enter ab6db5c0 def vcr_inpsel ab6ed5c0 def vcU}r_index+ ab6eaf80 def vcr_index- ab6eb780 def vcr_power ab6efe def vcr_dos ab6d5dc0 def vcr_n0 ab6ddf def vcr_n1 ab6ffc def vU}cr_n2 ab6fbe def vcr_n3 ab6fde def vcr_n4 ab6faf def vcr_n5 ab6fee def vcr_n6 ab6fb7 def vcr_n7 ab6fd7 def vcr_n8 ab6fab80 deU}f vcr_n9 ab6dfe def key_space ff21 map vcr_qv vcr_dos end map key_space vcr_n0 vcr_n1 end r_n7 ab6fd7 def vcr_n8 ab6fab80 deT[67XmBUFLESAMPLQTIMTOTIMREPEADSMEBUSAMPLEQTIM@@@@#AAU@Y}AB(H B1 BQ @ $$IRGSCAN.BAS (c) 1993 D. DeavenSample IRG driverZ?6-@@Y}6-@#'6-A36-AU?6-@dF B-6-+@d%@$,'@xF6-P:$@,'@nY}U +@/6-F:A`,%AV$F:Aa,U6-F:%@,%AV$F:%@,o6-%A x''(T=usec [S]ENDY} OR [R]ECEIVE;#@@K:0)@;@5"@:S,-@16-?:A6<<<,5 Y}@:R,A0""6-?:A6<<<%AV$,%(TIMEOUT% A  A0': #B!-Y}A#%"3A6%7 :$'AA169,0,120,141,14,212,141,0,212,133,213,169,57,141,2,211,169'BB1,141,0,211,169Y},61,141,2,211,104,168,192,3,48,30,104,133,204'AA104,133,203,136,104,104,133,205,136,104,104,133,207,136,240'CC119,104,1Y}41,223,6,104,141,222,6,136,240,10,152,240,90,104,104'CC136,208,251,240,83,160,0,169,1,32,212,6,44,16,208,240,244,200'CCY}204,222,6,208,242,172,223,6,174,222,6,44,16,208,240,14,32,212'EE6,202,208,245,136,208,239,160,1,76,155,6,160,0,162,8,173,1Y}6,208'EE106,38,206,32,212,6,202,208,17,165,206,73,255,145,203,162,8,200'CC196,205,208,231,160,0,240,7,32,209,6,234,76,1Y}19,6,132,212,173'BB47,2,141,0,212,169,64,141,14,212,88,96,160,255,162,8,200,177'CC203,133,206,38,206,169,0,42,141,0,211Y},32,212,6,202,208,10,162'EE8,196,205,208,231,160,0,240,208,32,209,6,76,179,6,234,234,96,72',,138,166,207,202,208,253,17[}; --------------------------- ; Infrared gateway code (IRG) ; Simple version to be used ; with IRGSCAN.BAS ; (c) 1993 David D]}eaven ; --------------------------- include bufadd = 203 ; and 204 bufsiz = 205 bytbuf = 206 sample = 207 org]} $600 PROC ; BASIC "USR" entry USR LDA #0 SEI ; stop IRQ... STA NMIEN ; ...and NMI STA DMACTL ; prevent DMA STA FR0+1 ]}; zero return LDA #%0011_1001 ; set up PIA STA PACTL ; bit A0 output LDA #%0000_0001 STA PORTA LDA #%0011_1101 STA PAC]}TL PLA ; get # args TAY CPY #3 ; need 4 args BMI :badarg PLA STA bufadd+1 PLA STA bufadd DEY PLA PLA STA bu]}fsiz DEY PLA PLA STA sample DEY BEQ Send ; 3 arg --> SEND PLA STA totime PLA STA qtime DEY BEQ Receive ; 4 arg ]}--> RECEIVE :badarg TYA ; pop all args BEQ Exit ; and return :nexta PLA PLA DEY BNE :nexta BEQ Exit EPROC PROC ; ;]} Fill the buffer with data. ; Receive LDY #0 ; detect gap LDA #1 ; IR is LSB :wait JSR Delay BIT TRIG0 BEQ Receive INY ]} CPY qtime BNE :wait LDY totime :mark0 LDX qtime :mark BIT TRIG0 BEQ :start JSR Delay ; wait -- first pulse DEX BNE :m]}ark DEY BNE :mark0 LDY #1 JMP Exit ; timeout :start LDY #0 LDX #8 :loop LDA TRIG0 ; 4 ROR A ; 2 ROL bytbuf ; 5 JSR ]}Delay ; 6 + delay DEX ; 2 BNE :no ; 3 LDA bytbuf ; 3 EOR #$FF ; 2 STA (bufadd),Y ; 6 LDX #8 ; 2 INY ; 2 CPY bufsi]}z ; 4 BNE :loop ; 3 LDY #0 BEQ Exit :no JSR adjust ; 6+10 cycles NOP ; 2 JMP :loop ; 3 EPROC ; ; Exit -- restart DMA,]} interrupts ; Exit STY FR0 ; return code LDA SDMCTL ; enable DMA STA DMACTL LDA #$40 ; enable NMI STA NMIEN CLI ; enab]}le IRQ RTS ; ; Send the buffer out ; PROC Send LDY #$FF LDX #8 :loop INY ; 2 cycles LDA (bufadd),Y ; 5 STA bytbuf ; 3 ]}:sloop ROL bytbuf ; 6 LDA #0 ; 2 ROL A ; 2 STA PORTA ; 4 JSR Delay ; 6 + delay DEX ; 2 BNE :no ; 3 LDX #8 ; 2 CP]}Y bufsiz ; 4 BNE :loop ; 3 LDY #0 BEQ Exit :no JSR adjust ; 6+10 cycles JMP :sloop ; 3 EPROC ; waste 10 cycles adjust N]}OP ; 2 cycles NOP ; 2 cycles RTS ; 6 PROC ; ; Wait a delay time, preserve A, X, Y ; time = (20+5*sample) clock period]}s ; Delay PHA ; 3 cycles TXA ; 2 LDX sample ; 3 :loop DEX ; 2 BNE :loop ; 3 TAX ; 2 PLA ; 4 RTS ; 6 EPROC qtim]}e DB 0 totime DB 0 assert * < $700 END ample ; 3 :loop DEX ; 2 BNE :loop ; 3 TAX ; 2 PLA ; 4 RTS ; 6 EPROC qtim\+i}i}i} i}i} i},i}  i} J@ K@MG @G@ K@MG @CDBDBABDABDABDP=Ni}L DBDJ M J M JMJ M J M JMJMJMJ M F G FG FG F G FG FG F G F  G F  Li} BJ M J M JMJ M J M JMJMJML ML MN MLMLMNMLMNML ML M N M LNB i} O  O%SO ))O%SO  JL N LNLNJL JLJNÁBABDBDBAi}BA BDABDABDBY ABDABDABDB%%%TUT UT"UTUT DZ)DZ))G&Di}G KJL N LNLNJL JLO  NTȁUT UT"UTUT TˁUT UT"UTUT ABFi}BFA GFA BGFBGT΁UT UT"UTUT AʛF G _\_ 㱩01@o"/ i}΅0 Ǹ , ٢$٩8٩٢4ٱ٢+٩٩ #$٩ FưL` )i`i}"͚ z eUvʔ(=f޵nPom cj6>///Lڰ`o{p|i} H퍏(6 @R鍆 *rrv(Zjn'dh]`V0Ф` P6恥ɏTɜȩ (i}p O7ȥ{O+iRi.x0煥 0Ж8ݩAIPx$|^O,KKi}K䢵s"@??81 (JuvJ򅑂@Mx@@U !"U#$%&Ui}'()*U+,-./`  00@@PP``ppx@ lewiSsol0iorAndquakOOi} nV8 * * ϢJ ϰ υϐ歑`koҍ) ۾>۹}i}ҎҌҌҥҍҥҍҭۍҍҭۍҍҭۍҍҭۍҍҢ٩ ܐUL؎bة۝۽ 0 i}ؐ ۱Ȍذ@b`-۹A@Lڽ۝ݩbآ)L٠#=;(} h8i}}ە0҅ۅ `}, )ȱȔ)e'ۍ]٥JJJJJ (uL bڕLٕ7 L- ҕLi} )" ۵)Ji$ bڕیټLة) - ۝uLص8ە8۝Lؽ۝u}۝i}Lؽ8 eLژ8Lٽ}L DL D} eڕLؼ۽0ȈI۽`}۝)?ۨ`) ۹ۤi}ȱ0L bذА)i1P)?@}۝ۘ۽Rۅ )۱JJJJ)/۝۠! )?Eȱi}ܩ۝۽۝)?ۨL'!2JW_io@ 38jjFAn0R"ȠzU4ؽw`N8'øxpjd^ i} i}΋o~}||| {zyywxwwvv}a{`xvdutte}{azzxa^auc }|_7ywZ^uwi}i`^{xyy_|`^aeigyx?vu eaaywwvvc myxeua &bjgedctai} sB&zziwbdpusq  m_B9yyldtso_qpow xtpqstxqtzzbxwuhbrgXqop~}u"pcd`ai}crrpswxmeiendbtjrqpY Ijpoc}z?jgidfab`ddegffdha[ihxvyyxt\psjpaXZD@eo`nW}|]Yg[^U\VZ]\`<_d |xw{i}ealswqSjtmeelonb[MUS54bnni[@{|^Y^T[UXWY\YLcyy{{m`X]dpxl@PfOYR\pnNJNXP42U8mjogr]`]Z[hXZXZ_aTjzxU=LNPQ@Si}dVDGIG,XMThgUHMME&$=VGxp{oV{vibb[V[PWTT!NOU^]{ueb]O8;=>?=;3(%Y_strmrrttjlj XUZPUOH@EFZQSouyRxi}romlmIJ6@KG?@CIL65!.A<336<;4" VZYW\TRRNLMSPSQRMNJA@HKMOiizldlzykow]3@=203=D:n(II@99.-351'"NUJHMPQi}Zf`_]ZM8JJ;B?CFGL]bdmhK@L^WH@C;7>EH:;127B>* %!MM;46=CNb]\[YRNIKJIC=<8?@HDHIQ@KN<5A=9.025785+,BG(i}.-*(-8=5964,./+?6$)!.JHB/-;99:9ROE"OR`>E5AFGFKQbSED6";<7>?BCCA@=@LD?<@:=:24-5p162/*$5&$ AAE:1h2.68FA;EEDBi},:<>DFDSNP3/*DE9/36B43%:6D6,.GJ@26X>98349D5/+$$)#"8:8*/E5Ws9cGkB>JNn]A^bkV=1>?:/9/3801)'<&* %!/F- 2 ,A?=FIGKQQRVLb\d_MM%!Z F>'92.-9#T&`!%;PdkjifcDXQ`efi}fdb`Y#3```C udOOK<"3RME?6' #M= \.63(/%D %(*/#$!$@9Z:@FMX]bZ7G`a`{{p^IFH? %?KTG@:.L7#/1B@3#!+76B !i}($'%! =9374J' 3?;G,K@,:AB6'!$$.99K  -+!"#  63A=18CdcfzoUKDGI<.#0j}!%08ASPLEB2+('*&1>=L +#32^Z A>23+tjzsUXQDJGC"DI $$8EZ_X[UHHIGNI=J\[[\_^VQLQFDA2#Dv: D$` iqOVaKCE(@=;B@1GGLS^ZG33< 7+`C1+(. *'! 2 '831.$,.$&-C* wxwt_C[X>C' j}&*09:>JI>1&-0IE-**-95/+,A$'.! '4." -9vufAA 3:=+` #66@@=BA>5$& `& #$#"1!  $*$ '@ 09;~(,27694@B>:#!! "%,B@%j} !!% 8r^#D _*@V 95 (*2d72<?<8 !%&,@C` ` Ȧ !& `2F /V @!j}+2420;>=9)# "&-Ax?$d1:0&"V P9(^ 3D0 pV8 * * j }J 밽 `o    8 ! ^Zj } #   > l`~   : @%fo j } H . ß  ID< "   `- `W   Lj }V& NH "  @ , 7@`4Tl "h j } Y n \ &f#C H  @`3 s2jq |j} L $p, л$0?  5_ j})'|  )&  $ f h<N ? 0# B 呏 7j} F> ` F      s 2@r < <rM ď t| d ? 8F6w|} ɑ w " c  > Lj}   ݘ  "f ̑     1  f NFA3  j}  @0 m  # ٕ l  > ٘9j} |  `   $ -  o$S@> ¿j} ؗ~cQ V hC ׂ!  o  Vj}8 * * J 򰽨 `o p fd j} ѿCf9x2-JPp;0 Oy8h0iل<j}2p!61 18a80 9>,ß 0aA1? 0F(yǘ& pqj}S! i ! )ט3a?r0>< ρ???{j}-   3 p0v88 ?=< t>j}cp'f8 f<8n 8a0 G 0añOñ$ `& ~qj}CHh4@ )bP'(΄c3a{ j}-> ?b70##  p౱?a%0D`j}oD0:3:8@ ѱq~?~8  q18`?Jj }a0 50Ѐ'&6@a?=`0?@ı>Jؼg~~ v} lj!} 78G ϱgp8 <,s 80bw :j"}𘱱8c pcp p3@ s@ g bpp @a0`;@< 1`D#1 p @  "`" j)}#" @kŀV = Vq 88&Ppp@"L0kcACfj*}@LHz=р8! EaDDL! Și00)BL1!!,D@DȌA BHe!@a@2)j+} ` )x`@  8`  @0  ҴH!@$±  R(@8DAj,}8Bx s ``@౱@C0U` c± B!" AC@9@ # s0s (!aAıydžr"fj-}cߞ!0"w<8x<p  B8  F  0s s`@j.}e ϱj ̱2x2Aș7@2B ,@9'$ `p   @ш``Fqj/}9  `a@!0`tv QNV8 * * J j0} `p}pxԩө惥ɠk؅惥pPj1}惥`ԍX`pUoUfw@gu!$UUD3!`ExeeB#\VA6wb3"gfwvUd j2}fCQ"3De2"$gx^FDW0#D vd6xfVTh w91#%EUxe!eC#5h AYg7~Tƀ(cvT!$ x j3}H'wbvvwf`w vC6 BFW&Vw?Vt@ZEg@&6w*x^sVgn P7eVj4}=hwQØ@}HeLfpw|g>@B2hX`IfhgXꉬ(Yyvgiwxynj5}wfwdrwgČW@vh[ veUU fucZ˹ Oyc\ibw}وEdTVhfVjx̹wgDe#d0j6}vfWb$w Bkx߰DU3eVg@feifxwo4֞BEUDuffz xzn{ڇUEuWvPVf!w+ wz j7}w vxxx@Ehv@ufghy`{˻y BUUFg`efhehhw&wjVwvuUeGPffiexuxL|hx{wfj8}deeXvijfvxUgUfdiw@vi܈xyPfg4hVfT5&gxȰ`zePB&wuVgVwU0jٞ!j9}əvBeXbfiw']UfeS!#VxVwey UVw&1x R"!"$geg@wxwf xeVz\`A뻻2h5$ubvYBvj:}f1YyçxLJvU4DUevvn$B9J鍖cxfUhh`RgS(&"N7eUgVwc+LW>$ yh᰻j;}Jwgg erKYtfSw$gjyixy hw r!vd ڳyhre|/ﰙnqfgZfhj<}a)ήsgVPWxPl{v ^+lsfeUVUi0fofVeϰ&[g 6sɉ}j=}-Z0xVVyW@A@&g~vbt@ȺyH&W]0ebPbV%8 4&*j>}J 5&6&`o̺xwfyfw@Ԉ ˫%ӗwvw ̱ݼwpsj?}wg<0^b׍fgXgͻ: kh3: j0fXб\@`Egcy$6 y^ʫj@}$JWj ̩w mWg^˫"4׳w({K~_H@wj~63݈wocD4fN Lg}fi'jA}Jku˳۱+f|@ wxbԒE|˗ef(ј.~m"w @RձJ*g wjB}ͮfy4eҜ`jfckgٙvEf#"ً仺w fgp}jC}Y|g*vv g~Č`%xձp-fgϱvЖxaRK}cyqw|ȇw" tjD}gNظ`@fkyƄgɰwx.^=`LHg7@Ow` cQBwn?fwL AjE}ʘ>:<·0"hɪ‹ݸAfڵ ʚ~a_X*x;Ϫyv؉~bB؇wfcbH}ߐvjF}igc&by\4yƵcwWdcc2h w6&c gHwH̲3 *c?c\}g>jG}阯c+ޱ  (_јxV*;8 +*5JjH}@& + +`     &iQ9.%&iQ9.%   jI}  &iQD;%&iQ;.%6Q% 8Q%jJ} <L    ^aa@#:xjK}h|yvrolifc`jL}]ZWTQNKHEC@=;8530.+)'%"   !#&(*-/1469<>ADGJLORUX[^adgjnqtwz}/ jM} {0 1@oe!ٱFPpi(~i ij(ߋ@}jN}}J}Z(imJ(X i8%OУ9@r$)%,.-B> ""**ʅ !jO}!’!ʥ (J! &(=@:m87ছƱ@L(` )|. pP OjP}i&Wi"$Ē煥 (&Ж8ݩAI x)|.ĢN$(@G생''''AeA@*`)*+jQ},-x./012Z@TABCDEF:UGHIJ@KLе`  ࿿ 00@@PP``p6pjR}¿𿿿8pP0hH`K/  60 "1@o!ǩd[*]_a"\^"` b&mֱjS}eުߐcy߼f^zQ߼dƆLW ̱AА`(^p)m>0?F5GeiPiCjT}ѲтъуLqJ`<|fl0fF68of;p88pf< 80 0 ~~`0 ve}0```nf>ff~fff~~f<flxxlf`````~cwkccvf}fv~~nff><```<`<| ~ 0~~ ~0~vi}<>f>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8vj}<fkc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~vk} 0 1 $`7szyscyjakowcezbLAdziliSmy kaZdynadrogEswAobrvl}OciliSmysiE)zajaszowcadwaowcamaltimedjastudiosppppppppB ppppppppppppppvm}pA  dVs8 * * J s歾`?#DC 4vn}D22`kQ0Ve5VUgCE +wvTDZEgFwweB*$4q˲xu$X\S >5xvaBFyC2#Wvo} ٩(4h d1ML ̺c4g2f!蛫ε Ey˹K{uBԃe26{* $gcb 5hB'vp}b4 5{41H cF2@ Eˮ*F2VʱŎNv)H)xn<'w~NCvq}LGx wvd=%fxn` iveMۨEgUT1`e$ދFTD9^e!DVC!Cʅ#Ec;,|3"#Ioe4vr}Va(!ʗSEr+ "#!ImۦB!#WQՀd1#F+0S!Z\4g""e2$W,d41 {J8EJx`̴ @vs}C@5y̹cFAʱIu@BWPJ wX˨5xaܡHd`1(y`hwz,˗4gܑ7T6"5"qd- ʖ"!W6T2vt}LhC`ұ#"#=ʆDDz3qBhTܻ#32TVgeװa7eSބff}UFUftMh@Q8wuݖwhߐw vu}eBw=˨{PڱAIEx uFaA1J5D4.ᘰ*޶x$4!\g㔱e2\$,]Lvv}08d!xZ4loiGCFnig"cb@+`W~j~*2˳+gvw}P ` 몘Hg˩  岰N*٘uy*{a$촱e BVfrVm$qffxJ߱uB4$vx}EbDLADUx!߈ yvR+>2#$2T!xxqFC5b+TynܷgܹQ3"!Es;d#F\vy}U1ܣVRB$W@;wZ Ed1SN$h0̷@%x`)y$(C" ˩@uwˤZ7weR2 bd˒vz}#:ݰĎTh4BcA;#E<@|$2"$W!vC""3[`3E+`(؆~332T#34U0fSEUD Dfu0v{}8TBFfVg4bfh͖Ohw0߇"!bfiͥIK#.4D2fjܤbpSWSJfk.@ η:bQ_pYSJga T͖=S<°kXE^jj`0*TUMDE<v}|X(ځLjm:"]( ׬*@n[n`9})H`<[`{~{`Y~*aD[v}P[`@iέ@;Qk4@sނ[AZ7۵^`d@4`x*\AT㰴8>ov}T$QK5|߰`[9u,`D(İBX׿tk;`V t۱4PC߱ʿT[|qUVBf4b%DfxA\ݰ!0@`Rv}UERI&beBFEf1VV!]BeD)ByTadCtR1FDV@fgDExUfR#D! Ve`e Ue`Fg5Uv} $C`DT\넀SkE|"3`DRH%b?RIdc SYv} =djQ 3k0 R|!E}Z W`L!PF@pOۡG pj>/v}MSpmn _TAe1p`$N${ T%PH|@ b  xv} X "c ګ˼d!@Z pax "POst =`,?x1_0+8Hv}t {5x۩c@O7O 4ߩߑpv4'D3 @$gە_EMP#f}Rnh`ܰZLTThv}x7vZF 0V dIFd8\2Kp@ oxgSѱ A MOhbJgS4"  P@&p]h!5Xv}33OP "6rQ ˺Eoo0 C0GO7dk[A`8{ ov}O/`, bYuʿ  Ʒ& , ɨ t x(P,p  0B/XQ `@r ڏv}ﰄ_0( d\@6c$H Oom (B[XF` B`+߿$( zfv@ @OpZϿ@ބv}Pp Vd.DO@,5,e0-2*M g@fRHt} 0ҿ.` "d`r+  "a},v}ZPi{w5@"S(m1wsu`J^˘z "ׯ!\r2v}3"w 2  "!4D0~4p@DCg ww2ffUQձh"DSxwfeUձDRw8w_v^0ӱ*Ev}bhePӱ"#`Ubi t^p"3Vq`Gfa fp̻ @7v%gp0@G2v}=#36wp+00Hwx1˪`4Fx`,q" VxP-1̺PH Wv}@@0c#2!0g0@32 1 /ω1fx-3 BVx,w3C,v}av+v;"3DUe*33G013 4E# `7v0 @S"@7fDp #4DRv}")Q#3DB" 06u"A*xweϱ32wsf"wU   "@fs@wf0%UD!0VbXv}fT 33  URöe $D2 DSUU{ ":/DU@2!90C01334ov}3 U3#O!I32B7(D@DA!H0A$K Jд6{l\ T v}^Dv @[0ϳ챱`yDPC߳JڱȨ´$`@338' $p v} (\ `Ÿy뻧wr@?ػ "C {NkUO>˱̱*-_~/±v} o` L±K<`ԢŸk JF Z ¯{`%"+O21$Z̱ʱF48 >ٱv}$iñ`,`KFi88`T` Fz$;бڱ{{{`>l@뱱2͈{v}`QpѱE{`U3v{d늖b`j߱4e0{EF a3}ET0 {`&G `pv}#ޢC>0{:|F;AαB@{Dͱk+ ` ͱ1P"{~ˊ[ Pͱ ``{ۺ[K!pv}{˺oj*& >NJa+{@˱<Z }M*αNMM {~ͱֱ 0`]ZPko"U v}%^L[_T ޱ,&`Ka2L2ZPL;G˻?p*+0d| v}DP"˰,FEP|L, Lű@{-U4@`⳱A ,'0kZ$@5^ ,2O [[v}"pKpo @+`>,@`V*P,jR[N@ffeU , fbסd0ۧ v}(2]a@  ,2 0Wowtvkr v}*=6B@p"M.8_~ ]oPp Bw; ́Lv} k `<~ EVqVuvHHy*x `XqWuSEFaH U9, 0v}7jaetFf3EWALwvv0H)0 0ZQWRUqXZfgZ0fy*!0EFz`TwQg\jj0YȐک!H0eUPXdv}Agh0`(̋ @JxwF0Uyu @|@+ Lj@K[WEe1Ahg[ `{@,P`ܰ 90tUvagvz;B|{Qv}_@-λ W1DVuuhf;b{{|Rn - 5FcTgQxw\a =whixFuaaxfBc*|Kfv}f`WdQ6yYux(f Eg uh9Ljyŀڸ (EfX*Q*+FVDha\&Wgkv}`"2zfbb UHaJ'g,: `K{EBRVQEzUx"08qEQUVutz,y"@Hv} tf`ahqTvz̃#@ZA UG0VaT`Gy )j{2h0Hi :E@ fqWku`z+"ziftaHv}Xg@(g#y@8a UGgQ uguY@w j)2yP*jaUcfUT@Yvz`{"0G#QEdgxve0Fyv}"PEa@n}ǭ` ^\# =͙ްDސ ޽?쀰v}ñ |@t,PL* ұ  @b(_\`=@ bWff!gg gaWuWgutv}Mfqma rf" 3!p 2^C4U1'n!#T$SFfR*`"tES0v}TFweFUgwc<-.EU gU@%eWwv0Vvu > ECwf1FeV@gd˱Pi¸Vbqx,vf2S`i P?5|ݓv}}ݪvi@7w2a5 8 v 2W{ =F}7r%y2W$ V센G5mW#33mUZ2Qop p@'Znd`EA5"P3v}1"&4225V}UC̀#C5G0wع ;݄nD2$3#S3Z mS"$&T3LnC#aE3<` n2"-v}5S; `0 ݪT1}ݍ$Sݮ:` 4s!JK!U$w - 5B#!EC2V M4S"+1 'v}KǹN"!+ #D2aDa?DC142!"" :51G"Z"3!Ǽ3#ݻr43Dv}4D0mq#!4C07DDT1">3C3#ED1F4T#DSE4Un312Ehc5T|EaP4FETUGUEE$Dz4YBDv}bDbZ~RGHm@$JRnۦ+̾ۻp͇BºrX+!=$"!ffv}RfB"43FPVf 6fbgbQFfMffcxa%Bf"gdbe3ZP  yʇU&0 b0ψ f@# ${ r6bv} )igu#gx@Hb˙˖Ghq(`!pTziʘv͵ڪ`Ws5fwfqV}픍@v}Rw cxgW`ݽߐdP3ܻ8˜xʭ!n̰wv"gBqހ|حuv}Fj,(۱ߘwt3gkgv2g<8#v#0Vib)q!#u`fza̿ˡѾcdv}f0ɱ ܱPQv f;4񡊡>* D6 ڱJu>#0FfR٦N1ЩAu32`VfKPIv}/5BC3S' ءQCرٰa!@vٞwȋ1Rj؋@ƫͷ0 ؆30cyx܈v}r߀=ݧﷅ3 bzr빪@ x ːt3`qf,N˚̻c1&H4v}}.e fyGlNCܦ˽cfci5]6NIڽ5SaBɏ̬ͱ x`gxv}d&eguzޠdhv߸@nnw733432~б8D~zx YC:n3a 7u%]i jKۏv}`AIbs0&3UywQ"C3VTTC "FC 330@ 32gx!333#316xu2׳`!sWwc 2i5we1 j2!#v}0{"1# XDDB"";"!UT" jdz#D3!b"#C  b^+U23g2DC 30$fU34}Cv}a (b #EgvpEhl44UTԱh#"B$$FvD#E2D5e"D2DTC!#XuhT T3hC5UD&U!$XdfE82z.%Vxwgev}feEffTFgd"D34C$hUSVfd!5fxwgvUV05LV>S#ֶgxuR6y۪w`WhA$Vgw0UehfxuSFݹexchd1Eg~vSXv}heCGe4hvNf~vTcVfwywuEwuGfy2DRb]d6he0db#Vy̻۪fʨwd{d9v}x@b4fˬ`gfTzcHzA"gwyvDUSDizydp `ܺVgvie4EtAeYdl$VzܪH(v}6fiu4FdhuxTt6vT "5fFtZe$5vdBgewUxGeDEVxˇpFheSYU%fgs1UVdFUfcGT"4UgiuYwB6tagx!DVv}օefBF0!34VX ,eVtHg!5$c`"DWq(VCgUD`@Fv@(vCHwd&UXu3TfbTgvSз4fCEC3!6eD"$T2#DDUT uD2%4 ""44Sv}33U!#DD33%2DB~T1"!ȱf#T"FUR"TUfn35B%A##ER! f2!VV d"eCE28 H`#R32:FB@y^#S$fTV1FT413E>ET Vv}FR34VTCFc1G$geC5D23"8Tǀ ShvD]CDFeUVReDSegDhRT3$2D!$D5Q$0C!%e1@4hfveR27gg!DC#A3! TQ"!B"%f1v}UuS!#!7!e E!4"$PUTRQET2DEVUwSTFR!?G@C4D@D34BD fCB#GAsBFA3dD5a%efwwt4 D2VgfuwyeVSf@C.%Q&fgt34RD@ DVwTdFjC4U3e"U!T3Wt2C$0#5e 3x(S5wUVu42fB5w}@TT"DDj$14"S%&6 fex2E1E 4UUD&C9C !"3"4 N12"cw}!"a ˻b wwfgwxv̻ w }eѱa"wwSax"gx ̳s_2Vg(ff>"dHhS2@eTg wTX yw }0DxܼgD3`uUgwvegt"$r82XˆxUE34tFt!b&TV17w17{TiuF7U5y321&R#62D 6f0@%w }5H̃$ԴT"1Ltt|#!͛kT @zSG + az UZ` ! >c{̀h ̦[w }g ZP5" ˺ 삜 -,7@0?o `K`.^a\f`Z$$.pR `"PLpc Zw } Hn  ZBZ`A  |  @Z !`H T T  "0%2@ w}k Qkp0% V K˱[40$0A `;ɱPI&RR0L`ȱ pB0h]w} $1Ba M _]#%1  Jʱ&y0$H! R }'`! & !w}` q@" % Y ,p @ 0 I@ g ` '@}p9`F|P)<w}O1(`=< Y`I \vX|`πq`  `@0j;"@aPۨ1xw ! N  @ w}"iDs,j 0(a U )AC`#p!J'fy#`vVR1: 4H훼vEfCDgT"33E20E4cw}4!뙘eUU4DDhu46BWCfQC_ETFeWvTf#ږhyVCC3Fgww7sgbEwfwfx^̹D4VwDtg6sT ౱˻w}ψvvwgWwx]ܰ?q`=˳`x]@3cm?}뮡Vw}8 * * J `?ڽT?Xi w}ʇhDfyadڸܺDy[__8,a wx__α캘wweVx̼ڇ0J`w}ۨeUUWx2˳aձchwfwVww_cbpbvghuDVUihz #"˼bP`gvxHUCWEJvgw} b"@ yg@FuCG"`ܨxfZwfKJHɜrufxfE`vɉs`D|0Vw}gDw@v xw_ab_tfBgkDDW@hɵ &"#cVxU|xDA34Ќ1Df#fgy %fi[x@%w}{yvfxxsCQ5yvɆafB"_emrfhcDBF:a=b".y 6`gc4Ch۱b?"՛ىyw@BeWS44ܹw}Wc_"8ʉ2s"@G'R4%d!$F ʉo#4"uGR$8Dw}s"&=t5 E*gR3(Twt"$N#^Dw}DX b#(ܔDHۀw:#!^"kEJ b"(hD`J5 ldu!J˩d^rr"8tLekvG hC!&`E"HcGvgkg w}Z#24ߐT!"Xuxfhjw LsVUD`_n"hUTcbfii@)WfdJhٱ DUU#ETccfjyܹw!'xveEZɰ^fEdUFw}ciexˆvT{^fgShcexVx"wfvdIݹb^`ucWcV{2$xg@dVfxb`e W0igED{dc TUV&w}D_fTWVB$23HZddDTDX24fv`EHu 6dEcE e4WhhwDkgl4$V C34EfSQ333X`*Ftqpw }b g`Fgf>C[DW$fd"%`4Wx`uUD2̗ncfb"F4ԙH0w`3>vwgB#g33F@gUeC gcth\ Ew!}HUg<7fib8@b>UTC23ufjw!4|FCC!J`kqJcY4UUXd@vfg'w4E e#EDw"}DC=abz} ˻It yYK ѹ^bVLaba w#}¹b˺^mdgʙ4pd] B`W` ]a˰` F_affTD6h;ۻܙ`:aS"#EUUS1w$}vz`ే_s#Gp,Rx[mNa8ۙaR84kKr۩c\ȵJ1Je̻˩N)Zw%}_3\ q A˻QH@˪,`1! Fޤ)qC-Ux`Hw&}^Ao_`˺bp߄^P1*#^ pa^`h.'ۺABdz˔aow'}!ϢN۔Pa) }fxA pAg/`3ސFpLfݱ`phwM}103Uw@bewUU 3bhPf"D3oh=""{"DFDFfgdUTkdD@~`EU~Dj̕ނ`C@"wN}B$4ۑ""Dڲ$B ۮ D#Tf7wO}w7pwpFhh1`qnnhH1f3 fp11138U3kۊwP} P U@ U.dDFD_@k>DFGdEUDڎٲC$^T"ێ"B$DB$wQ}@2 DٓUTTU@\Uhffhw~ppt7hXwsjhpwR}0pp3`k k f @1  0 3 DdDFd@߲dwdDDgFb$wS}$FEPA¾۹e"DB"B$B""" $D2@U@@TwT}fffhpspݍsww0Fݍ0q@dbkpkd30pp 1PU3wU}id13@10 P tUDF@dDd@FFٶDdFdD ۵Fdx"}HdB ET$D"DBB" Df""BwV}"q$B$߳l [DoU.(UI۾T۬Dgfh؀w<wسf`Gpqwp`33wW}s0&J7qڂf1U1311psOUUcUPkk0j 03yDDfbB30hݐP1PwwX}pUpP3@U1Uwb3@"fb^p{"w^"fDFfd7DdDȵEUDDDj@D<@PB$'"D"wY}""$B   D@@EP۽Dkfffph`w>qwZ}DFdF30D f`7qUN P@*13kf0kjP0pUtێ3Us1Dw[}nۀۀf@30pPwpۀD3@p BKPUwP "DڸWwpu"&f`۶WFdfDDdd`yEdF;PDDFFUw\}"d$@"ڦ@یZ@߳l{  ̑T.PUk >fw]}hs0dDfDFb qw0ePF`7s1wspeTEP3pp1sUPwSsp3 :PvWuU0T@ w^}UHxeh:"0d0`Pp1 P@xp1UwpuPww@#3PގLu@B>:fLfUW"U:d@UW_ufw_}wTFfFb%cE.eP@TeD@cE@DBDDD"$ "g $$"@B"$ {BD2@U@@w`}T ㈆h݈fawp`fDfD Ffh@@77PP7w0fh߰Ux71/3`wa}ݍ߳7g~g>u30g҇T@sӟ@30Cۼ6wpUu ^F$PP@3WuU#T90&ww҇TB,wWwb}"bldd@dF@T@KTfD`TVFDDDCD:B @$D"T?B"vp|$wc}D@\U@8TU‘Xfwqw`w,وf733ٳsdfhwU01puUwd}P3U97ؼpf0gg܇DP3fٴB&ph10p3Uw @߈wUU 3hPf"D3hUWwe}v"u"ۊDFDFfgdUTkdD@~`EU~Dj̕ނ`C@"B$4ۑ""Dڲ$B ۮwf} D#TCffhwpwٳ7swx۲773qwswg}U3083pAU UP3U7̍D@/1OppD3120&wP<0Bu UPB 1̑dwh} PfC"DF9Dw"IDUWUk" DPߊNfb@FD"DD&Db.U@B DD< @"B$$ݶD@ٴ$wi}$ds@PTf۴ـwpOwfh7swٍ773qwxsU303pwj}uUP3gAUv7q۳،D@1ۍpp3120&wP<0Bu UP 1ؑ Pf"Ddw"fFwk}%DWU"ܬDDߊDbD`GFD"Dۯ@DbnEPU@bBD<$ D@@"B"عٴ$fUU@Pwl}fw>qw`%wوf733ٳsdfhwU01p۠P3{U7wm}U0ggUDP3fB&pw103 D@ۺUU 3hPf"D3" "DF+DFfd;wn}UTd_D@~`Dj̕ނ`@"=B$4ۏ""Dڲ$B ۮᲈ Dy#T۽wo}cfGwqw`wوf733ٳړsdfhwU01tpP3aU7uwp}U0ggیDP{3fݳB&ݘ103 U@! 63hP'f"D3"ޑ"DFDFYfdUTdDwq}@~`Dj̕ނ!`@"B$4ۑ""|Dڲ$B ۮ D#TAwr}fw?pw7swو773qwٳ&sdfhuU303ppUUP/3&U7ǐUgۂUD@ws}1fUh۳!PD310&!P0B۶ 1dhf"Dhz"" DFDFfgdUDidE@D~@wt}D|ݕނ`@"B$4ۑ""D"ڲ$B ۮ~ uU>f}wpwwu}7swو773q|wٳsdfhwU303ppuUP/3wU7ǐgUgUD@1vfݳ~۳310&wv} #wPP0Bm f1h߶fL"Dhw"WU"ߞDF+DFfd;UDdOE@D~@Dݕނ`@"=B$4ww}""D"ϲ$B ۮᲈ~ U ݜwp߇W݈s0Pxw UU`wqUwx}&z8ې #30Fیcm@ h۲^D>b/ D>b"H dRdD zDBPD$/DUֈ"gB"ffwz}Bu$ڠ@"۳¹ݳ   g@EP wpWs0Pxjww{}UU`wqUb Db"H dRdDo DkBD$׵Pw}}"UB" UfB$E7"De¹/D@=   @4%/fyw~}pwws0gqppw$hs0D03Gh9p p  @ d3 D0 F@Dhw}hj0d0ddFDhWdgD޻۵-B$" gD""tqBVBܑoh"ِߍ D@$tw}NUU>P TM fhwh᷹bsphqa^rw}hpf3k `00 põ D0 dDEF1d DFdd3ndhۊUpDBbGD"B < w}۵" ETۀ.D$$ڈgDqp"g"$bBbBD*B  q D /T@  fw}hwhbsph0q^hhpf3 `00 ap D0ۇ dDEMF1dw} DۈFdd3ndhۊUpDBbD"B < ۵" E|Tۀ.D${$ڈgDqp~"g"v$bBbBDw}*B  q`yDT@ }fhw݇hbsp`hq\^w}hpyf3 `00 p D0 dDEF1d DFdd3vndhۊUpDBbD"B w}< ۵" >ETۀ.D=$$ڈgDqp"g;"$brBbBD*B q<DT@  w} wpfUwPmw0xUWL`w7sU߁-xw}slf`ZUQKHC?=:730%$~~ yr[LHD@<952/%#ZAB j3 w}g_ o{ !  w}y +!BB`$?߱ !`@#X !BBw}&L!dpAA> ` !w}BBBEQUE$0߷Ta> `!BBKow}$cAd!?6'A%E$Dw}A@yF@IAJC5 B>w}>D@IJKIJ pBCe@FMOriН&& j䵴CC ێ,ۨۜLڢw}/OBٺ8if)iJi(0йsA蹯^`Ӎ# P!#6L )!# LbS@HPX`w}hpxBV(*L@" !?2R4S4SR V RR T 2 4 S w} * $ 3 '~" 4g32 &*{$,23#%'&!] w}/#! )'&%"!+'$(&>0#4()*+,-*)!1,"23#w}p %@@ : &$?*-2Rrw}AppOLTLP/R`ŗCLPŕ͵vLT0 L2Pʕ߈z3w}$,rnŅ 7RȘ8ɂ4LQ=S("u lS8uٕ) S>sҹ=TFT4>G5w}:٥ETNT<P T t)OTD _T);WBg`w՝oTϛ҂ם輖Tۼqϩ֭ҭ w}`LP >8, 3RȔ)6SQ QJ ( y )x֝#\Bi%)>u w}nSLRL RL ST*9ASLGS- $`А DI ɀ)?@Ș) Aw}L7Rpu9 ` pJJ Hmh)Օٵ lS`)@HuLP8ѽ8չuw}8\eSLS "0ȈBvIB`)?`5MLS `- wuz.@ w}38jjFAn0R"ȠzU4ؽw`N8'ø:xpjd^  * ZM`RRRi@oPw}auPpPvP܀rSsS荽TT  T/RƘ`fҝ4 T=T`w}> N j }\ 5! #w}01Ӡ@ Pөۢ \ $!Ҷ붅 ") $0q@PLwLmL@w}pL@o")Pp")")JJJ01 Lw ) I@ow}")01 Lwo ")01 Lw01 $LY ) w})ة` u/'i(ii(i`%M҅$w}iii(i`@%Mii  L/Oȥȥȩw}ȩOȥȥȩiii(iйAȩȩ`Ӎ# P## )! !w}# !Lb@HPX`hpx@HPX`hpxBV(*Lw} 2RRR2RRR2RRR2RRR2RRR2RRR4S4R2RRR4SRS4SRS4SRS4SRS4SRS4SRS4S4S4SRS       w}  R  R R  R R  R T  R 2 4 S 2 2 4 S 2 2 4 S 2 4 4 S 2 * 2 $ 3 ' 4 " 3 * 2 $ 3 ' 4 " 3 w}4323 &*$ &,$ & $ 2&3 #$%'&w}#! )'&%"!'$(#w}(&"!'$#4()*+,-*)()*+,-*)!1!!!"1"2"3"2!1#!2#w}!3#!2#!1#!2#!3# 1% 2% 3% 2% 1% 2% 3%w}  &$  &$ *-&*- *-&*-2Rr2Rr2Rrw}Apppppp$  &$ *-&*- *-&*-2Rr2Rr2Rrt ` )&0b *? JH Oh̕v˽ Z 6 ~m^061! ZH z ` ζk}ٖ U$=VI0olMMƱ ưХ`..@) 0@ <Ƃ֓P6?I?k}~XILbꉠ큊D9&ehPИ)?J,D ~z%r7 LJj?SSk}$01JCm <ƄÄ6 );L) i B惗܀݀݁`nt 莙_ҚӥӗҖJbmːk}R轿^YH`X_@}PRHX? AQIY!BWRJZϪ"CSK[#UDTL\$EUM]%膐Lk}`m– &?@mÖ'@Ɨɪ-FHʧU.5G+ŠU)EBPmƥU*uC+̢k}U0IjXͧ1J+.@HHJ)擓6ϓP.ӓ 𓓓?~@@܀܀k}?B٬l:Rؠ"X &i !/@`o`HHp. gGZ vi k}~)AhhL9O@{2` 0@P`pb & k}|yvrolifc`]ZWTQNKHEC@=;8530.+)'%"  pk} !#&(*-/1469<>ADGJLORUX[^adgjnqtwz} ~  " D k}3$|DB뭯UJT8$ŭf^8wj߫YrT<鵯w\k}|2w]\Ź黭쯰V.)$Z(]Y۽|݈,%$TؗmU]qۆk} VwmDfἾ-ůa~ɒ=騣sH(+ѩhT  ߱& یpk}ͬȹj;`oJtb@  VyvX v(:6~{ dѥ0,؀pN k}a&筀HJD á_㳅Ɂᳯ Kǁ@ڏTF~ ~54pk}׷2 L  ~‸  v0jv JG}z. s 402  ~HKɀp ,}.? wFgxk}4۾3{ TF~Pt . _  {ǃ D t(οX| :Z 0f k} h~5  |n F  x (כ s~g /ׁсP k}l}P& 큑|Z r7۷& t!   a7B+8 8ׁRx N ޳V   k}@w܁@ֱ V'@|{ P,~ l Bz{ݷ8 P B tض  0k}L     4f`Ăz ѷu ׁϐŁۅz  q m t = | Tj k}A* X? T > ? y ̱ Bnv|B|,D)P hţ|@_~k}ÌX~p ,Cى̋Hyn7S 0G )bfݗR 8f~sFk}|:̓L@h~ @uPϋ X~0?Rс),~}lrA w<~ wˉk} ؛(;<FxV@f߼8 *J `wk}/ @ꅀp ^p恦Ѫѫ!!o @oZ01JJ  Ʊk}`HHop@, " i AhhLO㒲$X/zX`|.&žXPXP@iPk}н0?) O`8)ߩ@L`8Si+ O "P1^04, ĥij*$FRk}`8噪 $08uC($(]\@ #1(^u 1^k}+69~ /<6%!r / Dw_'p4ja(%/#9<2md'@4 ^ #= 28g`v( $0n*<:<;) |s0"1e k} '6&2 (58` [ X2b9*:;05<6 , R_ %@3 # $"'!&" *@)k/3!8 ` k})49D <   4 6<;H!8$ B > >-6; 070%--\ $b 3L:1&1+ F$17:a2 <4.@.;  B k}a #R u P4R )48$c6 `w+!9%;:,@#S7<>P\ .69*@X0+<4** 6-(]^6&27:[ VT (2/+k}42 *%l#33aTf+59cZYV]n 8R:  8 a \!/6X ;]\Z "''(:` (7:s:!:9\[Nk} \LO 3<6 ` a)48g87H654678]JY ^ aa,59d641/-A+-0379\a]]X c;`/6ae974/)$ k}6 ?(0*`N X":@h852+"@&17X%D$168988753/'c  +59,X#b b'146654320.+& "k}-<< %27:Xj )/11k(%#"  l<81/! ? y ̱ Bnv|B|,D)P hţ|@_~D}