ìZ3MSG1 Z80 �ùZ3MSG2 Z80O™Z3MSG3 Z80Í{Z3MSG4 Z80TÙZ3MSG5 Z80xZ3MSG6 Z80!©xZ3MSG7 Z80&\Z3MSG8 Z80,½½Z3MSG9 Z801 ³Z3MSGA Z808yŒZ3MSGB Z80<À+Z3MSGC Z80DëZ3MSGD Z80JiØZ3MSGE Z80P€&Z3MSGF Z80U—ÝZ3MSGG Z80[™Z3MSGH Z80a Z3PCL ZQ0gÍ6Z3PCRT Z80u4Z3PDUOK Z80{(#Z3PFIND ZQ0áZ3PFNX ZQ0– Z3PMDISKZ80žH¥Z3PMUSERZ80¢ÿLZ3PPRT Z80¦–hZ3PQUIETZ80¬îûZ3PRGLD ZQ0°#Z3PRS1 ZQ0¿I|ÝZ3PRS2 ZQ06™Z3PRS3 ZQ0>"XüZ3PSPEEDZ80`ŘZ3PWHL Z80d‘Z3PZNC Z80ià¯Z3PZR Z80qM&Z3QCOUT Z80xÏPZ3QCRLF Z80|eZ3QNDR ZQ0€ °%Z3QOUT Z80�©�Z3QPRINTZ80‘µ3Z3QPSTR Z80—cØZ3ROOT Z80›æõZ3SHEMPTZ80£ñ¤Z3SHFULLZ80§‰IZ3SHPOP ZQ0¯ x¥Z3SHPUSHZQ0¹’\Z3SNDR ZQ0Éd�Z3W1 Z80سÂZ3W2 Z80ß/ûZ3W3 Z80å¯Åÿ ÿ ; ; Z3LIB Module Name: Z3MSG1 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public geter1 ext getmsg ; ; GETER1 returns the error flag message in A. Zero Flag is set ; accordingly. ; geter1: push hl ;save HL call getmsg ;get ptr to messages ld a,(hl) ;get error flag pop hl or a ;set Z flag according to error flag ret end ; ; Z3LIB Module Name: Z3MSG2 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public puter1 ext getmsg ; ; PUTER1 sets the error flag message in A. No registers are affected. ; puter1: push hl ;save HL push af ;save PSW call getmsg ;get ptr to messages pop af ;get PSW ld (hl),a ;store message pop hl ret end ; ; Z3LIB Module Name: Z3MSG3 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public geter2 ext getmsg ; ; GETER2 returns the error code message in A. A=0 and Zero Flag Set ; if No Error. ; geter2: push hl ;save HL push de ;save DE call getmsg ;get ptr to messages ld de,6 ;offset to code add hl,de ld a,(hl) ;get error flag pop de ;get DE pop hl ;get HL or a ;set flag accordingly ret end ; ; Z3LIB Module Name: Z3MSG4 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public puter2 ext getmsg ; ; PUTER2 sets the error code message in A. No registers are affected. ; puter2: push hl ;save HL push de ;save DE push af ;save PSW call getmsg ;get ptr to messages ld de,6 ;offset to code add hl,de pop af ;get PSW ld (hl),a ;store message pop de pop hl ret end ; ; Z3LIB Module Name: Z3MSG5 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public getcst ext getmsg ; ; GETCST returns the ZCPR3 command status message in A. A=0 and Zero ; Flag Set if command status is normal. ; getcst: push hl ;save HL call getmsg ;get ptr to messages inc hl ;offset of 3 inc hl inc hl ld a,(hl) ;get command status message pop hl or a ;set zero flag accordingly ret end ; ; Z3LIB Module Name: Z3MSG6 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qshell ext getmsg ; ; QSHELL returns the ZCPR3 command status message in A and the ; Zero Flag Set (Z) if this message indicates that a Shell has been ; invoked. Only the PSW is affected. ; qshell: push hl ;save HL call getmsg ;get ptr to messages inc hl ;offset of 3 inc hl inc hl ld a,(hl) ;get command status message pop hl cp 1 ;set Z flag if shell ret end ; ; Z3LIB Module Name: Z3MSG7 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qerror ext getmsg ; ; QERROR returns the ZCPR3 command status message in A and the ; Zero Flag Set (Z) if this message indicates that an Error has been ; encountered. If such is the case, HL contains the address of the ; first character of the error line. The PSW and HL are affected. ; qerror: call getmsg ;get ptr to messages inc hl ;offset of 3 inc hl inc hl ld a,(hl) ;get command status message push af inc hl ;pt to error address ld a,(hl) inc hl ld h,(hl) ld l,a ;HL contains error address pop af cp 2 ;set Z flag if error ret end ; ; Z3LIB Module Name: Z3MSG8 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public getzex ext getmsg ; ; GETZEX returns the ZEX message byte in A. A=0 and Zero Flag Set ; if ZEX is running normally (intercepting chars). ; getzex: push hl ;save HL push de ;save DE call getmsg ;get ptr to messages ld de,7 ;offset to message byte add hl,de ld a,(hl) ;get message byte pop de ;get DE pop hl ;get HL or a ;set flag accordingly ret end ; ; Z3LIB Module Name: Z3MSG9 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public stopzex,strtzex,putzex ext getmsg ; ; STOPZEX suspends ZEX processing. No registers are affected. ; stopzex: push af ld a,2 ;suspend ZEX call putzex pop af ret ; ; STRTZEX resumes ZEX processing. No registers are affected. ; strtzex: push af xor a ;A=0 means to resume ZEX processing call putzex pop af ret ; ; PUTZEX sets the ZEX message byte in A. No registers are affected. ; putzex: push hl ;save HL push de ;save DE push af ;save PSW call getmsg ;get ptr to messages ld de,7 ;offset to message byte add hl,de pop af ;get PSW ld (hl),a ;store message pop de pop hl ret end ; ; Z3LIB Module Name: Z3MSGA ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public geterc ext getmsg ; ; GETERC returns the address of the error command line in HL and ; A=0 and Zero Flag Set if no entry in command line. HL and PSW affected. ; geterc: push de ;save DE call getmsg ;get ptr to messages ld de,10h ;offset to buffer add hl,de ld a,(hl) ;get first char pop de ;get DE or a ;set flag ret end ; ; Z3LIB Module Name: Z3MSGB ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public puterc ext getmsg ; ; PUTERC stores the string pted to by HL into the error command line ; buffer. Return with A=0 and Zero Flag Set (Z) if string (incl ending 0) ; longer than 32 bytes. Affect only PSW. ; puterc: push hl ;save HL push de ;save DE push hl ;save ptr to string ld b,32 ;check size put1: ld a,(hl) ;get char or a ;zero = done jp z,put2 inc hl ;pt to next dec b ;count down jp nz,put1 pop hl ;clear stack and return error code pop de pop hl xor a ;return Z ret put2: call getmsg ;get ptr to messages ld de,10h ;offset to code add hl,de pop de ;get ptr to string put3: ld a,(de) ;copy string into buffer ld (hl),a inc hl ;pt to next inc de or a ;done? jp nz,put3 pop de ;restore regs pop hl xor a ;OK return dec a ;return NZ ret end ; ; Z3LIB Module Name: Z3MSGC ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public getreg ext getmsg ; ; GETREG returns the value of the register specified in B. This ; value is returned in the A register. Zero Flag is set accordingly. ; Only PSW is affected. ; getreg: push hl ;save HL push de ;save DE call getmsg ;get ptr to messages ld de,30h ;offset to registers add hl,de ld a,b ;get register number add a,l ;make HL pt to register ld l,a ld a,h adc a,0 ld h,a ld a,(hl) ;get register value pop de ;get DE pop hl ;get HL or a ;set flags ret end ; ; Z3LIB Module Name: Z3MSGD ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putreg ext getmsg ; ; PUTREG sets the value of the register specified in B. This ; value is input in the A register. No registers are affected. ; putreg: push hl ;save HL push de ;save DE push af ;save value call getmsg ;get ptr to messages ld de,30h ;offset to registers add hl,de ld a,b ;get register number add a,l ;make HL pt to register ld l,a ld a,h adc a,0 ld h,a pop af ;get value ld (hl),a ;put register value pop de ;get DE pop hl ;get HL ret end ; ; Z3LIB Module Name: Z3MSGE ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public erradr ext getmsg ; ; ERRADR returns the address of the first char of the command line ; in error which ZCPR3 attempted to process. HL affected. ; erradr: push af ;save PSW push de ;save DE call getmsg ;get ptr to messages ld de,4 ;offset to buffer add hl,de ld a,(hl) ;get address inc hl ld h,(hl) ld l,a ;HL = address pop de ;get DE pop af ret end ; ; Z3LIB Module Name: Z3MSGF ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putcst ext getmsg ; ; PUTCST sets the ZCPR3 command status message to the value in A. ; No registers are affected. ; ; PUTCST is intended to be used by Shells to indicate that the command ; they are passing is a "normal" command or whatever type of command ; (normal, shell, or error) is desired. ; putcst: push hl ;save HL push af ;save A call getmsg ;get ptr to messages inc hl ;offset of 3 inc hl inc hl pop af ;get code ld (hl),a ;set command status message pop hl ret end ; ; Z3LIB Module Name: Z3MSGG ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public getshm ext getmsg ; ; GETSHM returns the value of the shell message specified in B. This ; value is returned in the A register. Zero Flag is set accordingly. ; Only PSW is affected. There are only three shell messages, so 0 <= B <= 2. ; getshm: push hl ;save HL push de ;save DE call getmsg ;get ptr to messages ld de,13 ;offset to registers add hl,de ld a,b ;get register number add a,l ;make HL pt to register ld l,a ld a,h adc a,0 ld h,a ld a,(hl) ;get register value pop de ;get DE pop hl ;get HL or a ;set flags ret end ; ; Z3LIB Module Name: Z3MSGH ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putshm ext getmsg ; ; PUTSHM sets the value of the shell message specified in B. This ; value is input in the A register. No registers are affected. There are ; only three shell messages, so 0 <= B <= 2. ; putshm: push hl ;save HL push de ;save DE push af ;save value call getmsg ;get ptr to messages ld de,13 ;offset to registers add hl,de ld a,b ;get register number add a,l ;make HL pt to register ld l,a ld a,h adc a,0 ld h,a pop af ;get value ld (hl),a ;put register value pop de ;get DE pop hl ;get HL ret end vÿ¨¾Z3PCL.Z80D ßÿ öÿšÿòÿ�ÿõÿ‘ÿ‹ÿ“ÿœÿ�ÿÄÿ›ÿžÿ�ÿ–ÿŒÿ—ÿ’ÿ™ÿ "!Óÿ#˜ÿŠÿ%$'&�ÿ(*)ˆÿ+-,³ÿ.Åÿ/10×ÿ¼ÿ‡ÿÖÿ•ÿ243¥ÿÌÿ5…ÿ9678‰ÿÎÿ±ÿºÿ;:Àÿ<”ÿ†ÿÑÿ½ÿËÿ¯ÿ@=>?Íÿ·ÿÏÿØÿoÿ°ÿ»ÿA­ÿ¾ÿüÿ²ÿCBÂÿ¶ÿÈÿ©ÿÊÿÉÿ¹ÿ´ÿåÿ«ÿÿþ¬ÿÝ´#'—çl~,…Ý�cuŒ# '7ï:Ï´ãPöÒŽ€Cüj+X"ÓŽœ\ž³ùç£�^ÇØqíàÏ—kÚq°vœ�vz!cÇE´#€?¿i7ýÄ.¶ŸŸØ;·©éÇÊ}&îÜüwn¦¦Ý´ãà:›œ¦Ý4±·1?ÖÙÄô{¿˜¦ŸØsø¦ŸØsøa›~PMM™¸�ù±Î&¦Ÿ$ý°M?Iú¦Ÿ$ýbš~PMM»iÿœÜ¼ë<œWZœ¨˜2Ž• ¶§€'Ü!�³ž÷�\LÇJÛS`ÁfY´|¦nü‰)ãX©`{ øéFÁ,–Ã!/à”Ðâ²�8êŒ#T*ȉ&8Ü® Ü×´Ãg˜2Ž• ¶§€ðE˶¸àO$9O¿Ø�5Ì¡¸‚)ãX©`{ŠÕ|¦Ý4±wî#ÓOìmÌ;9¨Ÿ•/Ђñç�vš~¬| nØÿý°ãH÷ÄP¸°=…éϺ÷3qçæÿïþÄ”q¬T°=*_õ».v0ý¥ôäÎ¥¹ùM»iÇñÖ¤á�¸l#ÓnJ2÷‘é3qóNê-Î+-Ђñç�všþŠ´¯ÿ½ÅEŽé·¸¦Ý´#o“ç‰uÇJwÔ†óÖ¹Ìô—Ò“Ìýß§Œc¥‚í)pE°…ÓnÚqèÅq*� ÇÂ…uÇJ·1ïä Þâ¼Ò-˜ÓôW¤}ýïg\Ë1ýó«é·¸¦¦TLÝæn¿Ë/¸úßçP¦°tá ùM?; ; Z3LIB Module Name: Z3PCRT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putcrt ext envptr ; ; PUTCRT stores the selection of 0 or 1 in the CRT Selection buffer ; in the Environment Descriptor. ; On exit, A=0 and Zero Flag Set if invalid selection value (not 0 or 1) ; putcrt: push hl ;save regs push de cp 2 ;range check jp nc,pcerror push af ;save selection ld hl,(envptr) ;pt to environment ld de,2fh ;pt to entry add hl,de pop af ;get selection ld (hl),a ;store selection pop de ;get regs pop hl or 0ffh ;set NZ for OK ret pcerror: pop de ;restore registers pop hl xor a ;error return ret end ; ; Z3LIB Module Name: Z3PDUOK ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putduok ext envptr ; ; PUTDUOK sets the DU OK byte from A. ; No registers are affected. ; putduok: push hl ;save regs push de push af ld hl,(envptr) ;pt to environment ld de,2eh ;pt to byte address add hl,de pop af ;get value ld (hl),a ;put byte in A pop de ;restore regs pop hl ret end vÿ¤›Z3PFIND.Z80H ßÿ öÿ  ºÿòÿõÿ­ÿ«ÿ»ÿ¬ÿ¾ÿ±ÿ¼ÿ³ÿÄÿ°ÿªÿ¯ÿ¶ÿ¹ÿ·ÿ½ÿÓÿ "!¸ÿ#´ÿ$&%Åÿ¥ÿÖÿ'²ÿ×ÿ)(*Îÿ+©ÿ-,/.10§ÿ23µÿ4ÏÿÂÿ56¨ÿ98Ìÿ7¦ÿšÿ:ÍÿÒÿ;�ÿŠÿ–ÿ�ÿØÿÀÿ‘ÿoÿ<=@?AB›ÿ>“ÿC’ÿ�ÿFEGDÑÿ—ÿžÿœÿÊÿ®ÿÛÿËÿŒÿüÿ™ÿ�ÿÁÿåÿùÿÃÿÿþÈÿûÿ‹ÿÉ8‰ž©Gw7fq;553GUFšDÏä/2�qÒ¸=[³|ãm4éÝ�ù,gî¶,TnÜj+ã$z¦Ji;ãmY»áÆ­4o§ŠêŒ·Ñ¤ý,e2Nº»1‹Û©É¨íŒ·e톷Ҽ�*ª3ÞF“ö³´oœŒAíÛ©¦æ†ÌƒÚÔºa«,Œ�Ñ·>výýø¹±q2NRg6ŽßË8;',tf#2clœŒ“Dæï7G•¯«ß2NÆ%¾®ŸfŒ³°�¤²S ïô“ÿO?¨Ä÷z~ùñsuí»žßxõx%>š1ÎÂ>’ön9aîñµz¼’«Ä÷z~òŒË!kC3ÆYØGR‰ïõü:dm4ã�ÓϸÄÕ�fŒ³°�¤ßëùW?Íxçô3þ‡¬ ÍgaI¿ï¼YÍxçô3þqõ£ã,ì#é÷�W\ý4ã�ÓÏØ8'É_dQ¡¢ÂFWxºHmeÏÃj]ÅYò¿�~�“A§5j˜;ùñsãré"µu…8�«×?¾©CÖF3Þ9ýD¦WqõÓŒwN?‘©âjÌcœ@ïtÕ±S©=žî'�¢ìäç[ö^WžD.Íðu…8�«×?¾©ìäç¢÷ ºêØ'¬þº§S4æÑز7‰\ê÷ÂsõúÇ7•�ü\ý^x*á´î÷]ên&ŠÆ<štãdœ@¦�ѤÓòé]Åq5D–®:v4�-{E.Í ßëùµz¼’kÔ\ã„­³)›³m¯È¥ßëùµz¼’'„ø}ü‹&9[YWeK\ýD.]!Îcœ°uÖéý‚®:vZýuO§ˆ\šáë qã„­³NïtÕ±S©=žî'�"ré qãdì/2Í>®y’ÖØn½Þ-cø¸rœ6F=¸_=^‰�â$­þºêØé­¯ä*ñ½žß·ÂÃ’V²6šñÎé§Tâ{=¿1êÁýiŠ;€¤’�¹k]Å1†�+Çi i�íÖUùÿŒQŠK=3@Ò®¿J|¯ç×!kcŒ2j…sÂÊ�QîË!kCq’ÖØn•ø^ϯCÖÆõàþ²6w iõ×ï;¯CÖÆõ ¸™¨I»þ*ñ½ž_qõ3F=hwïuåÆ(£V8'¬Üõà¾ÄÕ�â$­±Ý*ñ½ž_qõ3F=¸ÿqõ£¸Ikl·~ßyÅÕÏ>xœ’výuGþ?c”Q+výýø9�´ë¯qÎëµ.õ­ßoŽ*?~.2•WcÔƒáÞ¯¯ÄGAÒêñJ®ßëù÷4Fx@ÒÞ-3ã¦Ýõ×¾q2Nª!lt…§‹ÔVö<¬ÖU‘%ÿûè9tÚ8ûk/Íõ ¸ûÙ$­¯äºÂÓEÞúÆ(£V8'¬Üd é"µu…8ϞƸé1鮿®yŒ“qÒ8Ûc–Öš}ë«kßõü"S~üÜ8ûkŸfŒz0Üû¼R€¤]�G¶[3Þ9ýt½p'?~nŒð0€¤½[N˜½å"µ5Ã×â<ƸéAwý5¯yŒQF­Øõ?HÚõ׉"SN1Fµ¢lNô@RÉ»lt…§}%e|¦Â%?~®žÿe0™y’üך}ëË�Ÿ«çŒAfA^�qÓƒîúkH*a~2c‹\:ÑWRÆ'a*\òãçêù_cø¸rœ’ÖØn]Å‘ÿÏ>®N’ÖØn9Åõ`¸�´úë�µ1F=¸ÿ‡¬ ÅƨícÔƒâîgHZ]»|²6Æ(£V8'¬Ü>x8HÚõ—SŒQ†[€¤Õ_qõ3F=¸ÿqõ£¸Ãõ ÝaŒzPÜLÔ�¤ÕµËW\ýŒQF­pNX¹1|ð8 $íúë*ŽüƸé᯽@R ó“[«Ç+¹q2NÒEjë q]uì´ú2wÆÉØ_×<4cÜ HºBœG¯|S%œ6Æé‚$­þštcÜô¸æé[ä'ã$]¤¶føºBœGý^xÆÉØ_óš‡fŒ[áaI©­¾®ç1¾æé[äÓŒáãÊ1. i�íÖëßT §�Q†{_Y ’^¯^«Ä÷z~²6ƨí i�í™jcÔƒâîgHZ]»|²6"SmŒ2j…sÂ2F=î}‰«I¯×¯Uâ{=¿âêgŒzÐî’ÖØn‘©6F=(n&ê@ÒêÚå+®~"SmŒ2j…sÂ2F=îý?dm(HZýu…8�YcÔÇƨýÿqõ£ iõ×â<Š«Ÿ1êAq‡1|ð�´ë¯×?¾©NÃ�Ó@ÒëõÃk½Þ-cøà‘Wc¼þÆÆÉ8I%ï²Ñ¨aîäÇÏu…§}%e|¦Â¥žÿe0NÚ:[^ÿø¦²“Ÿ‹.riãd\6'zš1|\9ò $­±Ýòÿ-cø¸rœ’ÖØn]Å1†�+‡S€¤5¶['£ ·Ikl·jÈN%¼ÓOãœ×k£Ü—øº~Š;ŒQF­Øõ÷ãç@’ÿúAyë«kßõü —üø¹qÙœè÷iƨý/ñuý$íú«Ä÷z~uí»žßÅ£Iãµ²·~Þ¯÷4ÆMº;ÉÞeÔŠ]ÿ�¤]uí»ž_dÊ)Æ ³ ¯@’ÿúA³o}ùñsuí»žßdäÕ>xœ’výUâ{=¿N™:m WŽÓ@ÒÛ-ò5vƒLcÔƒá:@R w~¼ÖØ 2×—?W×¾ëù�Q<Ž1nzLº[6'ú}cÔƒác�6ÆM�IwËæD¿�¤t7~É]­ æ'3¶q2NRöV>¶[C'úJÊø-*zý㛢'cøàá éõúáµ^ï–1|ð8m <òjŒ[áaI«¿èÆxý�“q’fЉ¾’2~/QÑëßÔ¤'ãNô4cøàá éõúáµ^ï–1|ð8m <òjŒ[áaI«¿&ݧ †1^cãdœ¤×?¾©E¦œ¢+<•ø^Ï/?~®®}×óËÿ>úANåÕ8ïúŸH3F=î}^)@Ò®¿Yc�=²²�Tâ{=ÿžÆ¸é1éî®ÿ‰ûƨý/‡¬ I«k—¯ßëùuÈڃ̂$�s3®o¼ëâ>ͧ �´úë�µÑžÆ–½Æ¨Ž;€¤CÖFdÊ1™y’ü׊«Ÿ1êÁpïóJ’výW?cœ.È+�俜Q6úA‡¬�1ŠÇYÙH*ñ½žOcÜô˜tw×ÿDêÆ¨ý/qõ£ i×_%¾×ó+®~Æ»þ'R§£wIqõ™*Æxý��“q’ʨUÎ KcÍðUò1w­¼'cç„•ÓŒáãÊ‘W ©ŒZ地\9ñk�íV^�áãÊqÚeÔ ç„e =A@²ÿ?Âÿ¶ÿ§ÿÒÿ¯ÿ©ÿ´ÿ…ÿºÿ”ÿªÿ»ÿ­ÿ«ÿÿþÊÿåÿoÿA4`ز]ÝŠ:«Msâí/æ¶T1¿Õ x™|\qÔÕwã¶Ö½¢ÖíêV jƽ_oSq“q”¯Ñ€:«Ms¢jƽ_oSq“q”¯¥hå™6sßñLþ\[T”i;ó¾�¢¢A4°J=u›ßjaOßácâúˆ§ŸóþÅ|uÓ�/ø˜0oYkçõhÂñlð…� •Û¢æ-ë§ý޳úëÙà *·k^ƒ‹þžÉ¿x©VÂ>ã¿ •Û8¾ÃÌ[ÖOå«h€ÁÅšüLþÅK5Cü·a8ã‚yþ�ØÓÑ?èï™/øøïX“c=ˆÿ5æ«h=“?׈²eÇŸ ݘ]ýˆÿ5¦(»ÃÏd0„/XÐïxÿ羉²ððvßó\;ce;þdØÓ±žgO‡/”µ?ã7þýå™ö‘-Ey¦}ä8‹òLûÈÿ!Ãþ¿'^D97Žó·"ïûñXÃp¾�÷½�ëóº(çÆ–ß¡?Œd8_xú9qÿb"¯G“(ÿÖ8Îß–¢œ[~Ë’ ëyötøÂMÛqÿbŠò¬Ãÿ!ƒ1/¢ç¹v9eËŽ?º5]G[¯(  ~Ïsí¢ü[ã8[’á8|á¦í¢,<<ϵKÑó\ûÃ@”g¶$ƒ1Ç#|Á¼eýTŠòLûÈ–¢<Ó>rÓ‘aÿßÖ-QÎ�›oY’¡,±1yîxâ*¢Þúà •Û¢ç¹¶e ʹñÿV´¬!C·ŽI”scÅ8×|Qö·ã8“á8|á¦í¢ìoÇ–¢lÙqC†nM×ÑÖÇ+ÊÂÃ[ð{žk[DyÖá¦#CÌÝWLÄ4î¢<ëpœEyÖaKQ®HÃçɰ§ãmÏŠ0( ʘ.zžkgŒQÚ+ò'CƸ¢(cº¨(ó6Ñ!†œ‡«Ÿ1êAq‡1|ð�´ë¯×?¾©NÃ�Ó@ÒëõÃk½Þ-cøà‘Wc¼þÆÆÉ8I%ï²Ñ¨aîäÇÏu…§}%e|¦Â¥žÿe08V31N; ; Z3LIB Module Name: Z3PMDISK ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putmdisk ext envptr ; ; PUTMDISK sets the maximum disk in A (disk A = 1). ; No registers are affected. ; putmdisk: push hl ;save regs push de push af ld hl,(envptr) ;pt to environment ld de,2ch ;pt to byte address add hl,de pop af ;get value ld (hl),a ;put value pop de ;restore regs pop hl ret end ; ; Z3LIB Module Name: Z3PMUSER ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putmuser ext envptr ; ; PUTMUSER sets the maximum user in A. ; No registers are affected. ; putmuser: push hl ;save regs push de push af ld hl,(envptr) ;pt to environment ld de,2dh ;pt to byte address add hl,de pop af ;get value ld (hl),a ;put value pop de ;restore regs pop hl ret end ; ; Z3LIB Module Name: Z3PPRT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putprt ext envptr ; ; PUTPRT stores the selection of 0 to 3 in the PRT Selection buffer ; in the Environment Descriptor. ; On exit, A=0 and Zero Flag Set if invalid selection value (not 0 to 3) ; putprt: push hl ;save regs push de cp 4 ;range check jp nc,pperror push af ;save selection ld hl,(envptr) ;pt to environment ld de,30h ;pt to entry add hl,de pop af ;get selection ld (hl),a ;store selection pop de ;get regs pop hl or 0ffh ;set NZ for OK ret pperror: pop de ;restore registers pop hl xor a ;error return ret end ; ; Z3LIB Module Name: Z3PQUIET ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putquiet ext envptr ; ; PUTQUIET sets the quiet byte in A. ; No registers are affected. ; putquiet: push hl ;save regs push de push af ld hl,(envptr) ;pt to environment ld de,28h ;pt to byte address add hl,de pop af ;get value ld (hl),a ;put value pop de ;restore regs pop hl ret end vÿØZ3PRGLD.Z80M ßÿöÿšÿ›ÿ�ÿ�ÿ‹ÿõÿòÿžÿ“ÿŒÿÄÿ‘ÿ –ÿ�ÿ!œÿ—ÿ"$#%�ÿÓÿ&('*)+™ÿ,Šÿ»ÿ-’ÿ.†ÿ/10˜ÿ2½ÿ³ÿ3ÏÿÎÿ45¼ÿ×ÿÖÿ¾ÿ67¹ÿ98°ÿ­ÿ:‡ÿ;<ºÿ…ÿ²ÿ¯ÿ?=@>‰ÿÅÿCˆÿBAÍÿ”ÿ•ÿoÿËÿ¥ÿ¸ÿÌÿÑÿŽÿDEHFIG·ÿ¬ÿÉÿÔÿØÿ±ÿüÿ¶ÿKLÆÿJªÿ©ÿÕÿÇÿÊÿ«ÿÛÿûÿÀÿÒÿåÿÂÿ´ÿÿþyŸÌºUý·ú˜¤v�Á G+dɺU“Û«ø;ûdÞ\±Q�%Û—¾`”«ûdÖ­ê¿ÕG:P¼ðÚJdIGµªûd&©]gÐù€²¨à…×V K:ª9öÉûüzMçÒÿ ‰©ÃöÙ'ï“Ùæ”Õ¯£ì“÷IMËGõë;³®ã£úõnw³Ï>yŸüÉíUüm7NVˆMpMÀhq¶ôØֈMð¾@A:º1­a®FÔ}2Ó;\*[ÑR¨q n·aD¢Ü {:‰Ê«í“ÿÖ;ïË šF¡PdÔ/=&·Wñ·Ýt�W%s¹ó¾Ì iFýRÐcr{ÛMgŸÌ~Æ€Bl‚Gß�zç‚…xÁaQ ‡0" Qî…½ �D%6Á4£µOæ¸c§[D‚ òö‚ ± ö3„±àè»sb\A0Z}÷jûä}VHL&»Ï¯×Ò¼Å.C&¸"•—r%� é>?í›éIRÓr±Cú9Èt”à0ƒ(…z§¯ÓætŸŸöÃkþ³k\G" Ó˜z›¾N›SJ¹ŽD0�©·)—'K÷ùrMßµ}~Ú7ÞØç§ýô\v7ÿÙ‰Ÿ+¢rê03ˆRöùi/™6 ¤^3?—@NÆaQÊ>?í-¼:îæ?—@^Ê}f¥ìóÃì›éYìóÓ^2íÞ§R¯™Ÿ‡D)Ô;/å¾}~Õõ-þóŠD¥Â’XƼ”ûöùi/i¦ÔsÿçÈû™Ö0ˆJ7%ý Ò–Ò]ºÏ/¢ÿfþç‰J1Z±Ï/¢‹ÿ¼"Q)F+öùiŸzÇv8˜Ö0Ê>ß�9¿¥2‘þgSöºÖöùiŸzÝêüçû2'EÔ#»ÕaZÃ(” ²½›”·lX Qöù~Ìù•úŸ±à2æRôw.å¾}~Ú7Ó“L»÷©ôóŠDå¥Ü·ÏGý[xÍüÏÕºÞÂE°S±ÏOûÞs8óŸjD¥®!x_fìóý˜óSÓ²Ï÷ë»ï÷æ?€‚ëöyüÊÿß�9¿¥2‘þgSbìu­íóÓÞÂs¸ÝÍ^âì$Ýp˜A”²ÏOûfz’iÃ@úaˆr`¯A'Q‰Mpê°®  ­}¾Ëú’fJÿ3ÂåÀ^‚N¢›àÔa\A0Zûä}2åºÖèÄOTv*xW �i £ì“÷i©L¤²ûü´žÄBúŸ�Lkûü´—4Sê�ÿ¼^‘i cŸ_DÿÍüÏ+•"êqŸ_Dÿû¼Eÿéîõ*�¦·Å>ße}QéµT&Ò}÷ÉûdÖ P^Ê}¼/1­pÅ0¢2­Ñ‰Ÿ¼Oe€ÊîóÓ^ÒL©çþÏ‚•ºÏ/¢ÿfþç‰Jõ¸Ï[ôŸþç^¯iz[ìó]Ö•^e€îó¸OÞ'ӯØ š€ÑÚ'³ë-έ*õÑ_qQá›à0ƒ(…z§¿í¦SÑÎ¥Ðß¹é´ï“Ùõg›à¥ÜÇk cZ£¿í¦SÑÎ¥p ý�K¹oŸ¼ÏÔa²ûü´ï½nýçÈNÒÍ>¿^Kóÿ¹ ™à0ƒ(eŸïÇœŸš–ÿ¼ÜZôuÚœò~=.*ö™vïÓ�ê×wábÇ>?í-<÷^‘¨¼”ûöùiß{ÝÜÿbEÔ#!zÛçû1秦eŸ_uýfþçD ;I7f¥ìó ?þ³Û•m®Ú绬/*=\Ç6ÁÛ 6œ:ÌcQÂUpMÀhíóÓÞÂsÙÝüça2CôATЍGBô ¶Ï³o¦g±ÏGý[xÍüÏ�¤3ˆR¸v*ö™6 >ª_ß…‹û|—õÝÿ¹W�‹¸§Û'ï“™-…“t ëy©ÀŠQjôk?pQA½3Ií:ƒÂöÉû¼¥�K]]d]yr{U&·Wñ·ÝtèRW/ØgŸaû¸¢k½«å¾}~Õõ-þóŠD¥Â’XƼ”ûöùi/i¦ÔsÿçÈûvÿ^¢Z3PRS1.Z80T ßÿöÿºÿòÿ«ÿõÿ­ÿ±ÿ¾ÿ»ÿ¼ÿ°ÿÄÿ³ÿ¶ÿ¬ÿ¯ÿ¹ÿªÿ²ÿ !·ÿ"Óÿ#½ÿ%$'&)(+*,¸ÿ.-´ÿ/0ÅÿØÿ§ÿ×ÿÖÿ21¥ÿÎÿ¦ÿ3©ÿ465šÿ7�ÿ89‘ÿ:µÿžÿ;�ÿÂÿoÿ<>=‹ÿ?–ÿ¨ÿ’ÿ®ÿ@™ÿÏÿABüÿÀÿŒÿCÍÿ›ÿDEÌÿFœÿ“ÿGHŠÿÇÿÑÿûÿI�ÿJK˜ÿÒÿËÿÔÿL�ÿÕÿM—ÿNÐÿ†ÿÉÿO”ÿÊÿÃÿŽÿPQÁÿRSÈÿúÿ‡ÿÿþ‰ÿˆÿøÿåÿE°°¯÷šLfVš_HŽ0Ù×;<±_°pš/�V—ÀäÉÕk A.]Äiei)XØ×{M&™pÉh.+K®@s€p Lö[ß»`afuQ ù0/à’Ñ\V–\�æ%à˜ì·¾_°>ìÌšæ÷ÁïeÃ}¢AÁw þqí†=7Œzì ëèšÁºf#EƒtͺèǺ®q‹`¡ b4W¯ô@$_€QÁ"8³¾çìP_zµÊ‘Äò" ÈÈ%�|V—õžæ{Îî{i†_îiÒ 4pà€K‚zOô{ÎîA=Ã/ -/â=Mš�pIPÍî¾ßsvo�µð‹äÈŸÕ%�K ¢hàÀ—‹`!Ü':µ|ªj£Ùð2-m¼§I¨>¨�f‡ –o‹iÁNmÁòVæ/ŸQæ³b>«‹ °´`yQ.Ë‹3—%A,AÅ‹$¿\ñ¢€üråÈ•/à’`ùÎüå3Ê|VìÔ½TùxOS°üo^æ�ÈÅÁ‚å/XܼLk̘F{±d`«Ké0°Õ¥% °Õ¥ŽN°ü‹›—ÙÏ\�i´WK¶ºÄÑ1°Õ¥% °Õ¥ŽtË·ÅÖ)ìÔ,ÿaeþòe>+öH�K l•_~Vc.Ë‹3ŸÕÅX –ÿÍË\�æ%à­3g Fóå²²dréb�2—%ï\ùp�ä ˆåEì ¸dÅ;?�‹3ä,ÁâîµW«Kå²¼x~ ,‚}ðÄ{�v1|sþ—¸óœæü:þjtw:Q¯íý%ºò®;(øs×úsèç¿Ì “îšúœiÁNv1üáÿ%î<'ÔCm¼§)øs×úi%½§ù_ÒJʤ‚üáÿ%èJ¨‡æžÁ¶óû¿Œ¶Ê»v1d[Œs¯åGðëø«8ïÚÅðÚÞ‚»þðÿwžêáî´îZ?ν–Ÿÿç^¬i¹àÃø9µ'Ô#ø°Á7ç9µ§9¿ŽßöUÎl.½þ2CŸÞí0gçQS[Ìö1DÁoç·àWAÁ"X÷‰ÎÙ²l¯Áš–ªj£Ùðò*¨JA,�_@ŽË|´ LKf³^ –o‹iÁNmÁòVæ/ŸQæ³b¯V9r€X^ÄürY0Àò¢\–g.KZ,ÿ›—yçrq°`ù 7/Ós¦Ñ^A,ØêG: lu)A lu)€£,Áâæeö3W`íÄ’�­.qt lu)A lu)€#Áòm±u ;µËX™¿|F™ÏŠ–"{µÊ‘Äò"æ²d6«`ùÎüå3Ê|V¼§É^­,ó�ä²Ìeyqöj•#ˆåE´ÉÀ«@€\pÉúÙ²kÁò¿y™w~  –¿`qó2­Äò"ö\²â�ÈÅò1W`6ƒ`ù 7/Ó2Р\¢U`B Fóå²²d�Kk” –qõ1W`2䢀K‚å/XЫ•e>�\–Fie@«KÌau)€�h€Ñ|¹¬,™äÒÅ,‚pŸè,ø°‹á›ó¿Ä�ç4§àÏ]ëÃ}¢ÿ—Ѩ¡3w;Á¯ãÃj_éN5æ] ºê¡6Ζe{ êNUðëøá¶šÝ}™ öPwªLKÕìî[ðëxÓ¶ö_¢+g¸gë– >ìbøÃÿKÜyN¨‡Ú¨fwß‚ŸÖüáÿ*µñN'*g¸a‹IS[‚1Owª`Á¯ã·}Öëÿtår r†ûþܵ¾FõVÿ‹¯Áv³¦åFß~Ÿó´_ðëø«á×öþ/qç9g¸�à§5?¬ÿ*µq9P?­ùÃ?­ùæIkÏ|)g¸gë– ¾1ü˜§;UÁ˜§ý`Á¶óû¿DmÇék¤¤5Á¯ã¯†_Û[ðaƒÖÿt%ÔCmT³»oÁ¯ã¯Âzm›ÿ%ºr†ûp¶n©àÃßœÿåxÔvœæü:>¬öÕê Ïõ¨ÔÆå@å ÷aZ «à×ñÃí{šc}�Jm¼§É´8\ðëøm_ù9w ^ ºÒÏi‡wÝA¦Å-øíüþ/Ñ•}~ﺃ‚\‹`a¶Óâi�¦å‚Eî,X ãÎsŽÎÂ#¶3üð®;Ƚç†IwM}δ`§¬i¹`ü:þjtw:Q¯íýÅÚå‘ït¢Ú´vßáåÑñN'ªàÏ]ëÏ £žÿ27LºkêsÖ´\°FWƹ×òûv1ä]wP°~¿mk÷ ~ç]»^ÛûKtå]w�Ú¸úxýÜíd¼kÃkÁ"X˜VÒ´kêsjèœ-ËöÜkP›ÁïiFÁ"øuüpûžæX_ Rg˲½ïi þܵ~ZIïiþ—´’2©à×ñÃm½§ù_ Rµ|ñž¦àÏ]ë§•ôžæI+)õž&A,/¢ÞÓ-X ¨gOålY¶×àÚ™ Á¯ã‡Û÷4ÇúëžÎÙ²l¯Áµ3gZÚ8[–í5xOSðç®õãÜkùù/Ô³§r¶,ÛkpíÌ¿ŽßöUÎl.½þ]™³ó¨©-fû8[·Tðëø+?ç®Ák{IKýœvx×,‚…Ñ•Ú�íælY¶×,‚»~XÿKÜyN¨‡Ú¸¨4{Ô¿Ž«=[–ÅàX÷t¿wW•wªNí�Ϋٲk¦¥�÷4¿ŽnßÓ¼õ Tjã�ªS{  ~oÚ½ÿ—Þiö¨GÁŸ»Ö¯#Á‡ ~XÿKЕPµq9Piö¨ ÁÂèÊ‘˜ðø�€¼ë Á¯ã·}•õÌVÛºþ�ç¥ÖEj3øâlKwZ>¸9[mˈà×ñW³Õ¶®íý%ºò®;È»ŽÌv8Ò¿P°Æ�ç„--õCmœ-ËöÔ�*ïvX·úál°‡ii£šÝ}s¯Á;­A_ƒí,¼`q¶,Ûk°¦å‚Eðëø+ݩƼk;¬_âÎsB=ÔÆÙ²l¯AÝ© >ìbøaý/qç9¡Á©;U°à×ñÛ¾ ëõ ºr†ûþܵ¾FõVÿËVz«Fß~Ÿ=u§Ú/øiÍë�Jm\TÁ7†?u§*8u§Úü:þju†çÚë—¸óœPµq9PYÓrÁ‡ ~XÿKЕPµq¶,ÛkPwª‚E°�Ô³§òN'*µ| ÁŸ»Ö�†ÿK4$È–ç‡îéQð�ë÷ý—Ñ–3ÝôVÙ} ¶›³eÙ^Cðëøá¶ÞÓü/QÛqÞéD¥6ƒ/¦E½§)øs×úqîµüüêÙS©ÍàK°Ò�zöTFŸm j3ø,‚?w­ þ—hH�-Ï#ÜÓ£à×ïû/£-gºé­²úl7g˲½†à×ñÃm½§ ú Tj#è5xO“{ Þ»Vjx:jcœ{-?‚E°Ð�zöTj3øâ}ZÆÙ²l¯Áš–s¯AX÷t&eZÚxO“P}PÍ,¼`ñn'ÛÊ{šcñž&ÓMm_<=3«GÞ©:×Μ{ jt^Ý©úÚ™[¯=ðZ°ðB n‹iÁNm†•P#µq9P9Ã}¸×àpB�ÔÆ{š‚…q[l�ÂNm†•P#µqxMYR?Ü·ú¡6ƒ/î5Øç§ñ®;Èy<º ^¸˜ÒM€SdZÔfð%X }éé!lii –�s¯å‡½am{P›ÁÓÒÆ{š„êƒÚhöp¸`ù¶èÀ¤6ÃJ¨‘Úèk¤ä𚲤~‹`œ{-?`Á¶óû¿ìËÖ¿Ž¿~mïÿ]9üÞ]UŽ“ò\ðëø«¬g¶ÚÖµ½¿DW®ÆÙj[‚_Ç_©gpœk{‰®TÏ`;ûôpœ”ç\]fú¡6¿wWUðëø«œÙ\zmï/}~sv5µÅlgë–úü¹kýãÚ�ÿteýXx¤hü:~Ûó¿]ÙE?‚_Ç_©g°‹çÚÞ_¢+Õ3ØÅ#ø°‹áÿ/qç9¡jã�NTš=êl7ïi ~oÚÖýë8Ã}"³ ü¹ký8÷ºÿ ¬{:ït¢R›ÁÓÒÆ;UçÚ™óN^‡àÃø ºê¡6ÞéD¥Ù£Îvóž¦à×ñÛ¾ ëõ ºRýdimM+Èî#øuü•¯1Ã}®íý%ºÒ×H+Èî#ø> ø/³Õ¶Œ¾1üÕgǹWÿ—Õlæv†;Ϲy§ê\;sÁ¯ã¯²žÙj[×öþ]9[mKðÓšÖÿ•Ú8Ã}¸oõÃÙj[‚E°p†> ¼ÛáèÀ¼ÛÉx§U°~¿í«ÑÝéD½þ2CŸŽîN'*ﺃ‚ßÎoÁ7†ßgǹúîZtqîõ_fèÓÀ»ŽÌ»�Lð�á÷Ù±ýÿ%Ø”I‹`á }x·Ã‘˜w;£Ï¶Ûá�NTÁ"çê þܵþH'νþË }x·Ã‘˜w;™àÃï³c7úÿK°)“ ÁÂú4ðn‡£cœ{ñn‡£‹>Û‚Eðëøm_�îN'êõ—ú4pt¼ë ~;¿ßþê³c7ú‹`á }x·ÃÑ�y·“1úlkÁŸ»Ö]œ{ý—ú4ðn‡£ón',‚…¹�áÎsnæíšGÇv8Òao¨žÁq,¬žÁ.ζt§Å±u ÁØ�~°à×ñÛ¾RÏà8×_¢+ÇIy.øuüÕðk{ÿë/XdZ¼§)X �§•”÷4 ÕµÑìápÁ"ø°‹áÿ/qç9¡ÁOkþðÿ•Úx/ÞÉëü¹kýtOó¿´U{÷Ñ´+ÓJÊ«þ@D³G=R›îz-ø°Á.X ¨gOå�ª¯�9ïäuÁ¶ó[ðëø«œÙ\zmï/}~sv5µÅlgë–ú|ØÅð‡ÿ—¸óœPµñN'*Íu¶›÷4¿Ž7mëþ‹uœá>‘Ù þܵ~œ{Ýÿ%j;Î;UçÚ™ >lð‡ÿ— +¡jã�NTš=êl7ïi ~¿í«°^ÿ— +Û}ûi9Ã}¿Ž¿ò5f¸Ïµ½¿DWúi9Ã}‹`a4$Hm¼SujtÞÉë,¼`1¬„©�Ë�Êîcs8¡FjãX¼“×Ávóž¦`Œs¯~°à×ñÛ¾ò5f¸Ïõ— +}�´‚œá>‚ïÀn‡UðëxsÚÖý¨ÔFÓïvœwªNí�Î;yl7ïi þãÃj›SðøÃí° ÁBêÙSy§êÚ�wò:‹à×ñ¦Ýû�Çá>Nmt ž=•wªNí�.ø>ÀzÀI7Ölæv†;Ϲ©=Ðßþê³ãÜ ´à§5?¬ÿ*µq†ûpßê‡ë‚»þpÁŸ»Ö�s¯û¿]yO“wªNí�.ø°Á.ç^ Á‚E°0º²‹~¸ºÌôÃã·_Ó‡`á‹a%ÔHm\TÎp›Ã 5RM¿ÛqÞÓä­‚EðøÃí° ~oN»—þ Tjcìç�¼Áßc|Xms ¾¸VÁ¯ã·}¥žÁ.žë/QÛqvÑW—™~úqÁ¯ã¯†_Û[ðëøm_Åy×.†×_îÚÅ�ÚážnÓuüv~ÿk—W|cø}vœ{õV°FC‚ÔÆ÷t›3܇ûV?¼l“íÐ[,¼`1¬„©�Ë�ÊîôXÓrÁ"ç^½ƒ¿ŽßöUX¯ÿKЕË�Êî#ø>€€^ôÿ—Ñ–3ݬ#5Ü‹îé‚o ÚqîÕ[ÁŸ»ÖרÞêñV�¾1ü>;νz+øiÍë�Jm\TÁŸð—ÿÅsv[݈àÃ_}vœ{õ.X £+ûü4Þu©�i�4·:áñèk:ÛM€ÓâH|§êkgn½ö@Á"ç^½ ~¿í«œÙ\zýeu™é‡ífÎΣ¦¶˜ícˆ‚ßÎïÿ]Ùç§ñ®;(øÇU°2νnö¦7Œs/j3ø"TÔF³‡aåÝ7³ d»iÒìQ�…°îéLÊ´´ ^°àNÕ¹v漓×A¨>¨�f‡:î5¸×`ZêWæNupî3"Û-XxÁ@þÜk`PØ˜ÔæpB�ÔFõ“¥µ5­ ‡×”%õ#XãÜë þܵ~^³ÿ2Úr¦›ÃkÊ’ú¡¯Ùº¥~|þqý>ÁOkþðÿ•Ú¸¨4{Ô™ïi þ„È?࿤ȫá×ÜÌ�êàÜg|cø«ÏŽs¯»ÿËlKÓêœéæj*X ýFuæNuðN^‡`ü:~Û#€ÿëžN€Óâ=Mî58Ú(÷ÈÛk:ÃÊt36Á¯ã¯†_Û[ðç®õãÌù_âÜkùálÝRæì†(øÆðãÜë-X ýFu®v²]9Ã}¢Í´f%À@°ƹ×Ýü:þjøµ½ÿKÔvœwª¾væœá>L‹÷4?­ùaý/P©�Ë�Êîô8[–í5XÓrÁŸðFÿe†> ¼ÛaÎΣ¦¶˜ícàUîTǵàÏ]ë÷Ùqæü/qîµüp¶n)sv5µÅlC,‚…³uK9ZîÅî‹`œ{Ý Á‚?|¾ù_fë–r´ÜKð�á¯>;νî/ÃçñÌ—r†ûp¶n)»¥©Ò:zÝ0ú,‚…wíbHm\T¯)KêG°ƹ×Ý;Xðç®õãðšýë8Ã}"ÛaÖŽ³7Œ†Ù-M•ÃkÊ’úüãú}ÿ¥ÏOã]w�Ñ•éæðš²¤~x·n ÁOk~Xÿ Tjãr r†û0-Ζe{ Ö´\ð�áǹ×Ý»`,dZóxæK™³ó¨©-fû8[·”w;Œs¯åG°ð‚¦ÈÓ:MË™Ö<žùÒH �³uKÙnjè\]fúa»™³ó¨©-fû"Ó,¼`�†ÎÙ�ãKyO“¾ôôÁ8s‚v1ü°þ—¸óœaü:>¬vÎl.ýtålÝRÁOkþUX¯ÿKZóxæK6øaý/AW†Uð�«`,dœ{ñn‡{ :PϞʑ¢ÁÂ]ôôîÆc—¥äèÀ¼ÛÉ /XÐ}éé±9œP#µñN'*Íu¶›÷49ÛÒ�VZAÂc2«st¼ÛÉ /XИÔfŸŸÆ»î £+3ß‹ÍÀ½Õ38÷TÏ`£«`]œ{�v1ü°þ—¸óœÇƒQðaÃ.øs×ú£‹ÿe4ƹ—àÃø9µçñ`|Øà‡Uð�«àè"Xðç®õƒ®£k†ÿÒ ¼Ûáèx·“|cø}öH'ú9_¶ÙŽ2Ý\Mß�?Üë�z˜Ã*øiÍë�Jm¼Ó‰J³G�íæ½îZ?èš� _‚®Ì6�#Eƒà×ñ¦½ÿ‹õ,2-š‚ŸÖ|󿘗³ äHÑÀ^°_ðëøm_…õú¿]y§•3ÜGð'|Àü—ÙVž%l1&³:ÇIyÎ}RW—™~ßþ´GûÿKºY=Fj¸`3ë¢ÒtŽL*X ]9R4pu™é‡Wûrÿµ`üؙ؀Þôÿ—ÙVžå8)ϹºÌôCmìïM?¨Â7ÿËlÜǹƒ;­¨Ì6�#E{Á~Á7†¿¦=ºèý_ÒÊÛ5 Ž \]fúü:þJ=ƒã\ÛûKt¥zÛÙ§‡ã¤<çê2Ó�à§5?¬ÿ*µq9P9Ã}¿ŽßöUX¯ÿKtgº™”)r3Â=]ð'|‚\¿Oðç®õG NÙ¡Oïv8R0©àן‚E°�Ñ•]ôÃÕe¦Á"8ºØ|ØÅðÃú_âÎsB=ÔÆ‘‚I£à×ñ¦ ú¿t�Úš#“FÁÑÅþ ü:~ÛWa½þ/3ôiàÝG &e;ŒpOü @ÀI7#ÜÓmjè‹«q¤`RÁ7†ßg�.‚ü¹ký‘‚Óð_fèÓÀ»ŽL*øÆð§=ºè‚ŸÖü° þðù¦àÃ_}öèbÿþ2[·”£å^‚_Çoû*¬×ÿ¥÷38Ã}Âð_².*Mg„{ºàÃ_}öè¢ Ž.‚ >lðÃ*øs×úA׬‹~¾]™m »è‡«ËL?‚_ÇO{ÿë/XdZœ‚ŸÖüù_² ìâéE¿àÏ]ë¯.û/AW®.3ýþ„?ÿËlÜǹƒ;­¨Ì6°‹§ý‚o M{tÑû¿Ž¿RÏ`ϵ½¿Ä�ç좮.3ý>°�ßÿ%º²ÿ¸ Ž.:XðaƒÖÿ2«ïè{G½,øÀv~ þðù[ð�«`,dœ{ñn‡#Þíd‚…,h‹¾ôôØN¨‘ÚxO“³-Ýi¥äÚ™SgèÓÀ»Á ´E&µ™nÞ­[Ãf÷TÏ`÷TÏà8Œ®‚Ep¤ç^`Á‡] ?¬ÿ%î<çñ`|ØÅð‡ þܵþH'þ—Ñç^‚üáÿåxÔvœÇƒQðaƒVÁ?®‚#�ü¹ký ëç¿@¥6®�ùàHGð�á÷Ù#�èç|Ùf;Êtsµå‚ïÀn‡õ¿@=L‹aü´æ‡õ¿@¥6ÞKp¤ûÁ‚_Çoûjøõ ºr9P9Ã}¿�ßÿ¥ÏOcºék°Ýé¾1ü>{¤ýÁOkþðÿ•Ú8ÒáÚ™ ~Zó‡ >ìbøaý/qç9¡jã�ªsíÌv1üáÿ%î<'ÔCméЗžÁ¯ãMÛºÿ’m�¡Á‘N ü:~ÛWïÿKЕf�ºàOøWa½þ/³ep|cø«ÏéÄÞ?­ùaý/P©�Ë�*øiÍ.øÃ盂o õÙ#�úËlÝRŽ–{ Žtbï`Á‡ þðÿrø�Jm)¿ŽßöÕðëÿteRÁ¯ã¯Ô38ìËý‚lç÷‰®ìüã*(X £!A¶€€^ôÿ—á5eL7{ù2{9B |cøÓîóÓÂ\üÀeÀåá5eIýþqý>ÁŸð{éÿK·†Ÿ8ÛñËÃkÊ’úüãú}‚?á¬ü€õ€ËÃkÊ’úüãú}‚?áÀ€ÿ.¯)KêGð�ë÷ þ„°ÿ`.¯)KêGð�ë÷ þ„èeÀô2àò𚲤~ÿ¸~ŸàOø ü€….¯)KêGð�ë÷ý—{×J OGmÔ¨Þª`,œ¡Oµ1º3Ýœá>L‹›)Ò[e;œÙˆ‹ FõVÁ‚ßÎïÿâ­üãú}ÿå¸vg1wÒ�wÝAÁŸðg6¢Ãÿ2[–í5î³µ#‚\‹`áqíÎbî¤!÷ekÜk°O°öùi`Á¶ó[ð�« `,œmåùQ®.3ý0êI+H¨>¨�fÃÊ´´qsu™é‡iq ÁÕe`Á‡] ßœ‚_Ç›Óîï·f-ü2/ï9»¬«[}0o×Îmš—g¸gë– þ ¯æek6ÍËýýׂ«ËúÁ‚_Çoû*¬×ÿ%èÊî#øs×úqxÍþËhË™n¯)KêGð�á÷Ù«Ë@ ~ZóÃú_ R—•3ÜGðç®õG NÙ¡Oïv8R0)Óâ|cøÓ^]æç~?ìý_F &eZ‚_Ço{þ—å¹™·kç¼ÌVóvíœùg¿5Á?uî¿`±ä´àßöê2?GðO�û/X,ùï­àßöê2?Gð÷¿íù_òßK‚o Ú«ËüÁ?uî¿`±ä¿ßšàßöê2?Gð÷¿íñ_–çfÞ®�ó2[ÌÛµsæŸýÖØ ŽL*øÆð§½ºÌÏù2CŸÞíðìtú9í~?íý_¢+—çfÞ®� þðù¦àÃ_}öê²þÿ2[·”£å^‚E°ð¸vgñ>-ãê2Ó�`\],øuü¶ç ºrÏÙe]Ýêƒy»v.ø°Á7§à·óû¿Ìêûpîszÿ¸ ÁÂãQÛqFÝÓÀ½�kws' 9÷9=Œ®‚Epu™Ÿ|Øà›Sðã¼ÿ¸ ÁÂú4P£;ÓÍ͹9R0©`á‹éfl6�kw“FæíÚ¹`á‹éæjjó¸vg1wÒ�sŸÓÃè*XG NXðcg>À࿌LjDð�ëÏÿâç´#ø~¿µÿrö ºÁ7†¿¦=RpúÎû/X,wM�sŸÓ#øÇUp¤à4ôƒ?Îû/X,Ñ•sŸÓ#øÇUP°¦•”÷4 ÕµÑìápÁ"˜VÒ{š`Á¶ó[ðëø«á×öþ/Ñ•ÃïÝUåHÑÀ«±hö¨3EZ»ü´æÿ/P©�wªÎµ3ç�¼ÁŸ»ÖO÷4ÿË�jeTÂ}”íæ=MÁ¿`A¹w­ÔðtÔÆtO“ÚxºÅÜi ÁÂ;ÕÊ{Ù¼Õ¦mÆ~›´Í3mî5x·Z[î´‚œ‡Wíp¬kÞÉ눂E0ÝÓ ~oÚýýÿ%j;Îþ~F¸§GÁ¯ã· @ðç®õïT«àÛù-øuüÕðk{ÿ—èJRûü4ÁOkþpÁŸ»Ö?®Ýø/AWÎî_Ê.úü:~ÛSðëø«á×öþ/Ñ•±ŸÚ8»s|)»èGðÓš?\ðëxÓîý¿DmÇÙ;ûü4�‚lç÷¹w­ÔðtÔÆ;Õ*X ïT+3ÏÚé!li©j£ÙÃáÌ�4ä ÷aZܼۡI³G= Á;Õ ü:þjøµ½ÿË�jeî¤!Íu¦Å-øiÍþ_ R—Uð‡Ï7ÿËlÝRŽ–{ ¾1üÕgß©VÁ?®‚E°p6ØÃ°R‡ón‡&Íõ(XëH,øuü¶¯Âzý_‚®‚_Ç_ ¿¶÷�� ~ZóÃú_ R—UðÓš?\ð‡Ï7ÿËlÝRŽ–{ ¾1üÕgבŽàWÁ"Xhv÷í' ÁÙ²,Á‚?ÌÌ–þË�ªS{ ³Ýœ-ã�ª ÎVÛ þˆßÿ_ÒinõH ·rvçøRj3øâlKwZ‘# �Nptw:QÁ‚?â÷ÿ—ÑñN'*/ÓÚ}‡6G:¼Ó‰ÊË´&èkÌp°à�øýÿEýdimM+Èîôç^‚~Î]ƒ`Áñûÿ‹ŸÓﺃ¼Z]fúa»™³ó¨©-fû"Ób8εà=ͱÀ‚?â÷ þˆo�à=Í[Á‚?â÷.ø#~oÄïµà�ø½Ìzf«m�Äïÿ/i�4·zälY¶× éÁ´"s' 9ÒáñÛ�¯é‚ ¨3<`ÁñAÿ¨‡Ú¸¨œá>L‹³eÙ^ƒÑsv¾¦ æÌæR°à�øýÿ%gçQS[Ìö1p¶n©`œwíbü¿ÿ¿Üµ‹!µ1Â=ݦë´ÙãÜkùᕵ˫] êN5æ�Äý_ jãlY¶× îTÕ38XðGüþÿ¢žÁvöéá8)ÏyüTÏ`XðGüþÿ¢žÁvöéaýpu™é‡ÇoAÁ÷5/æ ½[HsŸÓÃè*XG NXðcg>À࿌LjDð�ëÏÿâç´#ø~¿µÿrö ºvÿm&Z3PRS2.Z80S ßÿöÿºÿòÿ«ÿõÿ­ÿ»ÿ¼ÿ¾ÿÄÿ±ÿ¶ÿ°ÿ³ÿ¬ÿ¯ÿ¹ÿªÿ ²ÿÓÿ·ÿ½ÿ!#"%$'&)(*¸ÿØÿ+´ÿ,.-ÅÿÎÿ¥ÿ/0§ÿ1¦ÿ×ÿÖÿ32©ÿ4657µÿ98oÿ:;šÿ<Âÿ�ÿ¨ÿ=�ÿ>®ÿ@?Ažÿ‘ÿÍÿ‹ÿBÏÿC–ÿüÿD™ÿEÀÿ’ÿÌÿÑÿŒÿÇÿFGŠÿœÿ›ÿH“ÿJûÿÕÿIKÒÿLÔÿM�ÿ—ÿ�ÿN˜ÿÉÿÃÿ†ÿÊÿOÐÿ”ÿËÿPÁÿQRÈÿúÿˆÿÿþŽÿ‰ÿøÿåÿM°pd¬Ë…n/0»ý#€A$àHx½]ÁÆY¸™ÂX "¯‘B cq¡ìØl«E/^ÔÈ;ì…±`àÅ ¼È‘‚�å�B ·˜À‹5rÀ{áG,x1ˆ/l‚W+Öñ€³Ï2?�õoêº�1¡×ëS÷LN1µÜÕ›œbj¹ú¼N1µï+Ø-û‹)„i ·oxQÁ&8Êí~.\ßÖlß 9pÄöíÊE� k±}3 ê9¬Ï…ë›u¸ßÎaÑ*ܰaàÅ‚zËîçÂõ�7ÜovíÊsX´ 7lx± Zëy~.\cî7>¢°Û_lZ…6 ¼XP° 6Ây}Rƒ);¡æ¦Z‡t#k×ÀsX„š›hr§`ûÐY;\ÕlÿndaÍ,J3hæ€í8¶S¨;ö¤;´oÇ,´‡öí5R( ¶×ÈFÌ/lÿ;YX3‹ÒÌi‚ 6|`10÷*ØÞÀèäQ‚iÄ0-ľ>°˜{¥á‹�à‚� X Ì]¯`ûÐV…«:‚íß�,¬™Eiæ )ŒýÅ4|À^{,#vìI3€lG°ýOe/üˆ/æÃ\X8ð¢fŒ°ÃÒþb ,J#vx±˜ÝþÀ´o§P€ài¯}{Ò›lo`tRÈ�Å…±cO{Í"ØgŸe‚®Þ}kü7? ’Öü¸i¯g½^—�ùͧòŒ³(øcÆøcB¯÷¿� «ÎXÉÚ᪂WïþÎÿægA꥞Ãü1cüÚ«žÃúoµWeUÁ‡þÎÿVL%ÔKk“àÃÕ»¿ó¿ùY�„z9‹³vÁ3Æ÷cöž÷¿ù1;cí)ø0Àßùßnz 7 õ > ð­ñßnz 7i Á�û§³´°]—¿ 7‡‰g¸\¸¦×:ËyM^ðÃý)ø7UP° 6æ±Þ9”LÙyÞPr„²œ}3Öžœ}Æ9’UY»žÃ"ÔÜÔ@ë�; Œžá–SykwžÃb=©Á”�7}–VLϳÆdŸeröM=„É¥³Æì³ÌEô. 6b謮êÐ�„ê©�=�•Ã�—³oî$TO <‡%Øh`ˆ¡3¬ WuèFBõÔÀ�±–Uóržš—LÙ9û& oàg‘Õó¦Ol4°Gõ¤ ¨�Õ³vj0el‚�Ùõ†ÚÕƒÛû1{ÏKCÃÜÔ`ÊÎÚ5ð¡æ¦Z‡Ü)Ø>tæqU‡n$TO ̾k/rg¬eÕ¼‚MÐ�Ù{^�à‡ûó¿Í£Æ?î_Ú¹ìÌÿæS¹óœkTî[ Rðãþ%Íî»ìÌo>•š% wÞCî[ ’}-­¼ÔÀ�ç\£ ~Ü¿´°]—�ù �7páš^kè,ç5q„µk^Á3Æ¿©ëþoÅT®>¯!wõ&Á�û§3þ[1•«Ï+øqÿ’f W—�ùͧR³„«¿‚WïþÎÿægA꥞õz¥u¨Épò–àÇý–³À[€Ã�׳œÇ‚?fŒïÇìçƒqŽäY¯Wj0egíxÖ˜ì³Lž5ã|àïüoÅTB½ÔÀ³^¯´5NžÃü¸:Kn\þoÅTjÞ²ö©µ9Üy?î_ʾ‡;ï²3¿ùTfßµ9ÜyÀ·�lÿm„:PÁ7‡ß޳ƒ¿õàð`Ò�ÉɳÆdŸe ~íãÝøß R‡;/ç©y9B ]° 67‡‰g¸Ü+ˆg¸%Ïz½ 6Á�û§³´×³^¯Ë߆›ÃĽžõzågQðÃý)øæðŽ,øcÆø{õcöÿ6Ü&žár¯ žá–‚oàøuƒÿ[1(« 6ÁÆáæ0ñ —»^ÏpKú¡o†Ë³^¯‚MÐ� þ˜1þ®×�ÙÿÛps˜x†Ë]/ˆg¸¥à›Ã8~ÝàÿV ʪ‚M°q¸9L<Ãå^éÇì<Ãå^}ŽÐ·`ü¸:K{=ëõºüm¸9LÜ+Ï8‹‚îOÁ7‡ßŽ_7X° 67‡‰g¸Ü+ˆg¸%}ŽÐ·`ü1cü½ú1ûnÏp¹WÏpKÁ&Øx0é΂ädÁŒus¯ —»^JÍîkHÍ®þr„®³vî©S° úuƒA‚÷OgI³„û.ó©Ü·¤àÇýK;—�ùß10ÊÚyK° 6Þ¬½*Ïajnj uÈ�‚MðáêÝßùßü,HB½‚_ûø�ÿ *5ðìË|àïüoÅTB½ÔÀ³^¯´5NžÃü¸:Kn\þoÅT†ó̾k/r¸ó ~Ü¿”}wÞeg~ó©Ì¾k/r¸ó 6ÁFoª�xÖ˜ÔC˜•«Ï˾–V^Þ<óf¹ Œº‘P=5°ç±r¸ó:ÜI¨žhånòOl‚ŸÇ¿Óq£àÇýÖpÌúß R=˜g͸îýnt¬!øyü;7 ~Ü?�%Í®þ.ónrõyÙ×ÒÊK7o ~Ü¿´sÙ™‚M°Ñ§�7ðŒ³H ¬}×15 oúì#NÚ€ÚX;w½ ³Æì³ÌEô 6Á�û§³´°]—¿õµ´ò2œ\¸¦×:ËyM^ðÃýùß|*yÏ8‹‚S›`#ý˜ý¤¡†Ò�Ù©Á”�PsS­Cº‘g¸œ,ç1ÃI‹Ö¡¦o„qŽdUÖ®A°ÑÀì³ÆdŸeò¬7¡æ¦Z‡ÜÙ˜ÇpöÍÙ7k×¼ð¦ò`�›cÞíNÁF³mÆÙ8û¦ ¨­1tæqU‡; ÕS5oYûÔÚ‹ÜkY5¯`ôcö$øcÆø~g,ÿÛ=YO¬š—ÙGX»æÍ-ø7õ‚_ûø�ÿ *5°ç±Ò:Ôdí<‡%ø¾Í8Û«žK;—9y°ÆÍ1ï*øæð;Àñcöüm„®µ¯Éz²l‚�îì;&Ö¸yÖŒ[° ~Ü?PÛƒqޤ ¨�µógßܡ۔sÌ>’nd=éƒàÇýK;—�)øcÆø~,üo~ÌÞór„µ+®éµ†Îr^“|sø~Ì~Úl‚�îì;&{¸åŒî¼Þaí#ÒÔ&Øý˜ýƒ?î_Ú¹ìÌÿæ5ÜäYcöY&‡;/kç9,Á¯}¼ÿTj`Ïcåpçeí¡,gߌµ§àø6 ¶ÿ6Ü&žáráš^kè,ç5qé`�{YðÇŒñŽ ÿ›³÷¼aíÊ…kz­¡³œ×ä›`ãkWîp°s¸ózÁ&èÇì§]�àïoý·Ö®Üá`|søàø1ûùmç¸YfWw^ްvåÚµF.ÀŒúÜ‚M°ñŒ«w©�=�•;c-«æl‚~Ì~ ü1c|¿3–ÿmw^ÏpY†›4”ÞT!×®5rg¬eÕ¼‚SðßyÏ8‹ô©¬'wÆZVÍË3¬} ~íãÝøß R{+‡;/kçe9ûf¬=ß¾³ŸG 6ÁFÖ>n–Ù• ×ôZCg9¯‰#¬]y†K?fïy ÌV·zÞ°jíÉÚÇÍ2»zª›aíÊpRÝd_K+/ÃÉ…kz­¡³œ×äY»`£�Ùê&Çzovå9,f×{(ØýX|¸z÷Ýøßü,HºQðã~7: ËÑõ[1•#¬]¿öñKn\þoµ�›ev|à»ñ¿SéFÁ¿©‚M°‘~ÌÎ3\ξ™ÇzçPîêM†\}^Ö~Nïײö"÷ ân)Øh`vèÌ®÷ÐáNBõÔÀ³^¯´5NžÃâ]gíµ ƒ÷Պɽò ·l40;tæqU‡€¼�gœEúT–9;ƒ‰³oj–p_ξ©YÂÕ_úTÁ&¸W?f >\½ûnüo~$o½àÃÕ»¿SðÇŒñ÷êÿÛôcvÁ‡þÎÿvÓk¸É›E/ø0Àw£àßTÁ½z�à�ãS÷Lÿ-˜x†Ë½ò ·*øæðή×ç½ß¦®²žìA?�§ãÆÿõ²vºQðkïÆÿ•xÖë•Ö¡&Ãɳ þ˜1~1µÜÕ›¾SYÎcîêM‚÷[Îüo‹eí´¿öñֳޖó˜»z�$Xðãþé,¹qù¿SyÖë•Ã�Wð|Û´ý·zA^% ÞW+&÷­IsPûZZyßþpöêÁÿ­žŒé=Õ��¶isX®^i%w-Vl‚�ô©ÜÕ›Ø×ÒÊË¥y¼,Ø߯ÖÛ¦ÍPð¡äUî[ ’}-­¼Ô@°¡`ã þ€oý·J8orgí^YÎcîêM’`Á7‡ß‡³WŸàoµÌX7wõ&öµ´ò ~Ü¿¤YÂ}—�ùͧR³„áÎ{È}kA²¯¥•WðkïÆÿ•ØóX9Üy?îŸÎ’—ÿ›Ïd=Y•ÕsÒÃ9Rð|m‚S øcÆø»‡é¿ 7‡‰g¸ÜµXUðoêÁ&ØHŸÊÕçe_K+¯`Ü«ƒ®Þ}7þ7? ’P/5p×bU/øq¿åØýo+¤Úå®Åª^p¯U° îzý˜$øpõî»ñ¿ùY�¼Yô‚WïþNÁ3Æßõúÿ¶ý˜]ða€¿ó¿ÝônòfÑ > ðÝ(ø7Up×ëA‚?fŒ_Líûþ7¨ÔÀ>ËÜÜõ ¾9|€³ëõyï·i…«¬'{è)øyü;7þ7¨—µÓ�‚_ûx7þ7¨ÔÀ³ îz=$øqÿt–v.ÿ·b*{+‡;¯à‡ûó¿òÖ“Ù7ÃÉ]¯à›Ã8»^Ÿ÷ ~íãwþ7¨ÔÀ]/û,Sðk¿SðáêÝwãó³ õRÏ“}–)øpõîïüo~$¡^jà®—Ùõ ~Üo9 ü·rêp� îz½]�àÇýÓYÚ¹üߊ©´5À_rãò¡„ó¦à›Ãïg×ë�üÚÇ»ñ¿A¥ö•Á¿©‚‚M°q¸9LÔ@ŸÉzÒ�„ê©�;c-«æm¬'}pxSyÐ�€¼�gœEúTÁ&èwÆ$øqÿt–ܸüߊ©ìy¬î¼ÀékiWðkïÆÿ•ØóX9ÜyÌ×â0ý·áæ0ñ —»«²vNÁ7‡?œ¾–y¯àÇýÛ™ÿm×bUÖÎ-øqÿtÆëy�3®É£ q³`Æ5iÁÆÿÆ1ßÀh3ήà›ÃN_˼Wðoó Œ6ã€(øæð‡Ó×2ïü¹÷Ogü7ãÌ*øæð‡Ó×2ïüÇ|£Í8°1Á7‡?œ¾–y¯àϽ:û¿õ<È‚×äQ†¸Y0ãš4Ž`c’»« ¾9üáôµÌ{¿ 7‡‰g¸¼³“yo¸‚÷gþ7ŸÊžY0ãš‚¿s¼%øæð;Àék þo#¬]¹ÃÁ.Øoêz;ÏJöµ´ò 6Á¾–vA‚÷Ogü·b*çk¹Æ©¹Y0ãš‚|k~¸?ÿÛˆ9/Ǽ÷Pðoª`l¼é5ܤ×9Lœ}󦮷ó`U—cÞ{HŸ*ØûZæ½ Á‡¾5ß�Sðoª `ln5Ðg²žœ¬ž“»« 6­'}pxS×ÛYÕ³`Æ5 ŒÖ“=¨Ã›ºÞ΃U]Žyï!}ª`ܵ8L Á÷«õ6c¶ÿ¶k±*PÁ¿©?þ[Þ®àø`cÿíÎ^L ‚o¿g×â0�Œó Œ¶3VÈ1ï=ü›*¸kq˜À Á÷ã|£Í§rÌ{ÿ¦ 6ÁÆÚ«ò¡æ¦Z‡Ü)Øk¯z $øÇáþü¸iç²3ÿ›OåÎs®Q¹«7qiwZ‡š¬žÆ–¿öñ;ÿTjàYc²Ï2yÖŒ[ðÇŒñë9¬ÿvÖ öJ8¯2œ<‡%øcÆøõÖ;kŒ´Û7á¼Êpò–àÇýK;—�ùß`œ#iŒµs\ž5ãü›*ØÏ#ÏîðT‡yìЃz»ïp8ûæb k/r\.…ËÝ—yÖŒÛ 6Áz $øq¿å€ÁÿÍk¸I0˜Α^ðãþéØhü1cü³Æ(øÇáþü¸iç²3ÿ›OeSyƒà×>~§à�ãßÔuÿ·b*Çzovåêó ~Ü?�!øqÿÒÎegþ7ŸJ¦ŽõÞìÊÕçüÚÇïü¸ßrŽüo^ÃMI@Þ�^ð�ÃýùßÎ#Õ½+5ð¬1 6ÁƳÆÈ2Ëp Cíš›hr'Vu9ÜyY;'ÏpiÑ:Ôô‚Mð¬1‚?î_Ú¹ìÌÿvÖy°ªKëP“µs ~íãwþ7¨ÔÀžÇ*ø;Ç[ÿm„µ+w8Øß~8g�Qðoª`lÒ�ÔÀ�<Ã¥EëPÓ 6Á¸ë ~Ü?�%7.ÿ·bªàÇýK;—�ùßં_ûx7þ7¨ÔÀžÇ*øµ�ß)ø;Ç[ÿm„µ+w8Øß~8q×+ø7U° 6Zëyæõ‚Mp¯g½^A‚¿ýƒÿÛ^yÖë•Giì<]‡»^žõzåQ̾‡;/Hð·ðÓ¼eíSk/r¸ó²vú1»àÂrt þöþo ×ôZCg9¯‰#¬]5K¸/Hð·ðÓ,a¸órßZ�¼y j–põ$øÛ?ø¿i–0Üy¹ú¼ìkiååÍSPð³oA{l`wAy¯àϽ:û¿õ<È‚×äQ†¸Y0ãš4Ž`c’»« ¾9üáôµÌ{¿ 7‡‰g¸¼³“yovÿ–Z3PRS3.Z80K öÿßÿºÿ­ÿòÿõÿ«ÿ»ÿ¬ÿ¾ÿ¼ÿÄÿ±ÿ°ÿ¶ÿ³ÿ¯ÿªÿ²ÿ¹ÿÓÿ! "·ÿ#½ÿ%$&¸ÿ(')¥ÿÎÿ´ÿ*Åÿ,+Øÿµÿ§ÿ-Âÿ./©ÿ¦ÿ0Öÿ12×ÿ3oÿ¨ÿ45Ïÿ7698üÿ:;<Ñÿ=žÿ>ÍÿÇÿ?šÿA@�ÿ�ÿÀÿBÌÿÒÿC’ÿÕÿÔÿûÿŠÿ‹ÿDE‘ÿ—ÿFœÿ›ÿŒÿÃÿG–ÿËÿÁÿHÐÿJIÊÿ�ÿ®ÿ“ÿåÿÉÿŽÿÿþÝÿ�ÿ]´Ÿ¿ —Á[6Ù¼ïe»ëU ¥ïнó—�l”!ÚoúŽÑ.6Ù{geßÜ.€lºùk› ´h?.ƒwå»nº™²oôUßKßå]7ÅÞy0”!ÚoÙdó¾—í®W¾ë¦›)û&@_õ½ô]ÞuSì�ƒG´‹AÐåÆ_G›µøp´Y‹Ÿm´YEE;�þ¢M4Šm¼“·ØÆ[~Þbo�#¬ØÆ«ßDE»h?Èfʾ¹  òF»nF´‹¶å�@Œ²�Üë{ìm“ÒKôæoì ”@6‚Ñ&›ŠŠvÑ~¿Ž6ë•y£Ízk²ûyx¯Î%½ø÷Ò�%‡;ÑÎT/W_q¸;ôƽt?ïÕ¹Äa¾†O·ÌÑNÎ�ÕÍíaîÞmÖûðÖlã·{]ñ�Ñf½ŸíÖlãùˆv¦z±“_qsc÷ÍúÏ–nus{#ÞåõjzW>]þ÷³]�Kˆvrnì^WüfýWý—×+Ÿ.ÿâfý¶�snìöí¢]ô×ÑfÅŠÁ�wd³<Î%g±¢Dpàü!J÷‰ùášm<Ÿb²�x÷ášm¼[ÝÜŠÒ}þ(~¶Jvôî¥ûÙ®Î%„ë&J÷ €Éø>mÜ2wD‰àÀùC”m:ÇÑf]ÉŽÜlq?ÛÕ¹ÄåúÒýlWçÂu %Jˆ¸#;î½q/ÝÏvu.q \×0Ñ.Ú¯áѼ·&»±·&[nÍ6žh¥ûœæ‡k¶ñ|ØÍ{®ÙÆ»ÕÍ­(“qŠrÑ_ŒV=¢lÓ9~8Ú¬dox4ï­ÉîCì­ÉQî#V1à÷�}›Þå'Ê6�ãÏ6Ú¬dox4ï­ÉîgÃÞšlå>bõ~�hí÷³]�K\MïÖëí¢a– +Ê�dœdñ.Ì’ÝêæV”ûˆ±“Ÿhí×ðhÞ[“Ýφ½5Ùr#Zªÿ’Ýšm<Ñ.:Zõ`EÙ¦süÙF›•ì �æ½5ÙýlØ[“-¢ÜG¬þbÀï!û6½ËO”m:ÇG›•ì �æ½5Ù}ˆ½5Ù"Ê}DfÉÈfÉ.¯WÓ»5ÁúE»h?€8|–ÇÍ+Ÿ.ÿûð’ÝÏveÞ‹}Ãø‹Áa×R}3×ûóMÑ.:à÷`Eé>g±{]q²�x—¼·º¹í¢ýb'¿+óF¼Càfýg1^²8‹íí¢±“V”(!þ »ÅxÉâ,¶C”(!âN”É8Énñ Õȿ꿼ޚ`ý¢´x¢]´ß�6ëze–y£Íz/y£zñï¥Kw·&»yËܹ´x`ɋѹÙâò»\_íì×5ìЋ/Xr?D»èh³®XQ¶éÇ·�ý§—×ûáò’_ØEm Ö_”ûˆþb´YWû@³Å­Ù9QºOÌ>Å$ûxÉâÀ’¢ÌµwdGï^º;O”¹6þå�F�ì-Áúî'€*Ê}Äê/F›u¥ÅmÖÕƒ¥ûœÅÞí‘}ÍÎ×5ìòÃo ÙbˆÒ}bþð)¦(smüAvô±óDù£${K°¾û  Šr±ú‹Ñf]=¢´x¢]´ß�6ë­ÉnÖ±ól¶w?/Æá»\×ts ¸äº½±·&[Dûû–êE}VRî½q/Ýšm¼K^\Zp™`É‹Ẇ‰v¶TßÌ5×í¡4F]܇·&[Dûû–êÅN~ÅUÿ-1ë¸ä½Yÿ�mãÃKvþ�0K&ÚE?mV¬(8qGö1Ëã,¶C”œ?DÙ¦sÜÆû0yÉž¼·&»oM¶”%Ê}DñáÙ'˜ì]^¯¦'Ê6�£ÅƒŸìÛx× YÔw?ïÍúŽ0QºÏY€dñîÅ‚®|:C”îóÅ‚¾ùS”îsM”îóÅ‚à0ŸbвMç¸�·ü<¼ìÛx·Ì�ûyxEé>Áb’p©Ëõ@QºÏY`â·ìÛx·fï>M”‚Ü›{do©–‡½CiŒ º¸o¹áaϵ|ºüïçá½ 0L”îóÅ‚¾ù“}Ä» J6­ä¾åò¸ 0L”¹6âŽìèÝKWcç]牲Mç8~¸…ì �æ½5ÙýpyÉ/L”ûˆþâѼ¢lÓ9þ¼m^²7<š÷Öd÷ó6?Qî#¶âò‡Y²ËëÕôD»h¿ñް«pÃD»è‡Ãƒ%‚'îÈ>fyzv/ÝÏÛü†(Ý'X";D÷ÒºŸ·ù чgbEÙ¦s?ÜBö./ù…•%Ê}Dñá$Ê6�ãÏÛæ%{ãyoMv?oóå>b+>!Ê\q'Ê� (÷«¿øpx&{K°¾û  Š²Mç8~¸…ì ïÀ¸./ù…‰r±ú‹Gˆ~8aE‰"îDÙ¦sÜÆ[àc߯»eîaWᆉÒ}¶b’p©Ëõš(smld_ææ«G”m:Ç ²oã]… &Ê}ÄV|8ÂCö 0ìÂ,™(b#{K š7·3×ñn™;p˜¯Qî#ÖV|8Â#J÷‰ùbAp˜O1ÙÇ,�ƒ#ì*\À0ÑGòbEé>g�ùbAß|Ø·ñîçá¥û‹Iv À¥.×Eé>g�ùbAp˜û6ÞÁ&J÷ÙŠIv À¥.×k¢D ñÙ-ÆKg±¢D w¢ÜIÆIöï’W”?'Ù«_”OôÃXQ¢„ˆ;²7Ón¼Ù¼¢Žð`E‰â²[Œ—,Îb;D‰"îD¹“Œ“ìþ�0K&J‹'ÚEûÝh³Þšì~¶[“-¢ý€}Kõ¢>+)w‡Þ¸—p™`É‹Ẇ]KõÍ\sÝ^�KÜK×ðhÞ[“‰öö-Õ‹�üŠËë­ Ö_\õ߬ÿÀ¶ñaqáFœÿòz5½[¬_´‹þl£ÍŠ%‚'îÈ>fyœÅvˆÁ�ó‡(c‡? Ü‘ýÇ¡7s Q¶é·ñê7²£w/]�KüûÙD¹�è/~¶fìLö.¯WS QƸ#;zv¹îs‰â~ÜK÷³×5lˆþlÃ¥ûœæ²oã]��w Ÿ&Êdœd÷‡¥ËëEý—ÖûÙD¹�è/~¶f¢ÌµñÙÑ»—îg»:—e®�?D‰àÀ‰;²�Y‡žÝK·fWç¢DpàüAö1Ëãг{é~¶‹ú¬D”î,“}™¯áe‰þlV”îs˜?|Ⱦ�w`É Q6DLÜù�½¥M Qî#Vñ³�2D™k#îÈŽÞ½t5vž(smü!Ê� (÷«¿øÙ ö–`}÷@ýÙFXQ¢„øƒìã%‹³ØQ¢„ˆ;Qî#ú‹Ÿm”F”±ÃîÈ>ù¬-±ó.ê³QºO°Œ%;àK^Œ[“]�Kœ¯øÀ’ãÖd‡æɾ(çÿÄ]6QƸå>âÏ6<¢]´_M÷³]é@0ÚÜ.D»èÏ6 +J”�Ýb¼dqÛ!J”q'Ê�dœd·xÐêùEiñD»h¿ŸíJ‚Ñæv!ÚE¶Q¬(4þ ;z÷ÒÁ&J÷9 Ì>d߯;8ÂDé>[1ÉŽ¸ÔåzM”?�½{é~^QºÏY`þð!û6Þý<¼¢tŸ`1ÉŽ¸Ôåz (4‚dŸ»E‰â²[Œ—,Îb;D‰"îD¹“Œ“ì#ÞU¿(4NQZQûÖ³mì.Üðx|D+\M”m:ÇŸ·ÍKö†GóÞšì~Þæw¹Þå>b+*\ÂL”îó“ì?oó»\ï‹Ò}΢‘½À•Oã6.¹åÓÁ8_γ[”æÚ$p©î Qî#¶¢Â%ÌDi®M—ê¾”F”ûˆ­¨p 3QÎÿ9‹Fv_vI”ûˆ­¨p 3Qšk“À¥º/žÝ¢ÜGlE…K˜‰rþÏY|²×¸òé`ÜÆ%÷¯|:çËyvŸ¯÷ó6?Qî#¶¢Â%ÌÈÞðhÞ[“�ͺ� ³d¢tŸ­˜dñ®À•OC”?AQî#VQáâ!{K°¾û  ŠvÑ~Z½ÕÒr.`˜h­p„¥ûœE#û6ÞÍÖàÝ|ñ¯|:¢D l¢LÆIöæbÚµiV"J‹'ÚEûYŒ—,n¼Ù¼7ë?‹­@~øµiVr#žh­p 3¬(QB›(G[EiñDE»h¿†GóÞK7".¯7/�›÷ó6?Ñ~À¥òz#gñ ÕËo\ùt0Dû—ÊëÕôгxÐêä‡_›f%7â‰vÑŸ·Í‹å€ ÷vï‘ýçm~e‰Òⱑ=Ì’‰²!zv“ÝfÝFY¢ÜG¬­øyÛ¼Q¶¶¸T_]FצY‰(-žèÏÛæõ`E9ÚJàR}Ä»6ÍJDiñDE»h¿Ẇ Ñ.úášm<¬(ÿ ‡ìÞšm¼Û¸ÝëŠ÷³Ýšm¼Û¸Ý¢?[ÅŠò&ûÏí%+¹:—8®k˜è‹}ÊòzÈþbAɦ•Ü·\g±Š¾X†åô�ýÅ‚’M+98®Â ;‹UT”Q¿(ÆPüpyÉ/L”�~Q6Ä]Zq²ÃúÃFK?\^ò ¥Å£_; ; Z3LIB Module Name: Z3PSPEED ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putspeed ext envptr ; ; PUTSPEED sets the processor speed in A. ; No registers are affected. ; putspeed: push hl ;save regs push de push af ld hl,(envptr) ;pt to environment ld de,2bh ;pt to byte address add hl,de pop af ;get value ld (hl),a ;put value pop de ;restore regs pop hl ret end ; ; Z3LIB Module Name: Z3PWHL ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putwhl ext envptr ; ; PUTWHL sets the wheel byte to the value in A. ; No registes are affected. ; putwhl: push hl push de push af ld hl,(envptr) ;pt to environment ld de,29h ;pt to wheel byte address add hl,de ld a,(hl) ;get address in HL inc hl ld h,(hl) ld l,a pop af ;get wheel byte ld (hl),a ;put wheel byte in A pop de ;restore regs pop hl ret end ; ; Z3LIB Module Name: Z3PZNC ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putznc ext getenv ; ; PUTZNC sets from the address in HL the ptr to the next character which ; ZEX will return. Carry Flag is Set if data not available. ; putznc: push hl call getenv ;pt to environment ld a,h ;any environment? or l jp z,error push de ;pt to message byte ld de,34 ;offset to message ptr add hl,de ld e,(hl) ;get address of messages inc hl ld d,(hl) ex de,hl ;HL pts to message pop de ld a,h ;any messages? or l jp z,error push de ;pt to Zex Next Char Address ld de,9 add hl,de pop de ;restore DE ex de,hl ld (temp),hl ;save DE ex de,hl pop de ;get ptr to next char ld (hl),e ;get address inc hl ld (hl),d push de ;save ptr ld hl,(temp) ex de,hl ;restore DE pop hl xor a ;set Z and Clear Carry ret error: pop hl ;restore HL scf ;set carry ret temp: ds 2 end ; ; Z3LIB Module Name: Z3PZR ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public putzrun ext getenv ; ; PUTZRUN sets the ZEX run message byte with the value in A. ; Carry Flag is Set if no such message available. ; putzrun: push hl push af ;save value call getenv ;pt to environment ld a,h ;any environment? or l jp z,error push de ;pt to message byte ld de,34 ;offset to message ptr add hl,de ld e,(hl) ;get address of messages inc hl ld d,(hl) ex de,hl ;HL pts to message pop de ld a,h ;any messages? or l jp z,error push de ;pt to Zex Running Flag ld de,8 add hl,de pop de pop af ;get byte ld (hl),a ;put byte pop hl ;restore HL ret error: pop af ;restore A pop hl ;restore HL scf ;set carry ret end ; ; Z3LIB Module Name: Z3QCOUT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qcout ext getquiet,ccout ; ; QCOUT outputs the character in A with control character processing ; if the quiet flag says it is OK to do so. ; qcout: push af ;affect no regs call getquiet ;get flag jp z,notquiet ;not quiet, so print pop af ;restore PSW ret notquiet: pop af ;restore PSW jp ccout ;perform normal output end ; ; Z3LIB Module Name: Z3QCRLF ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qcrlf ext getquiet,crlf ; ; QCRLF outputs the CR-LF sequence if the quiet flag ; says it is OK to do so. ; qcrlf: push af ;affect no regs call getquiet ;get flag jp z,notquiet ;not quiet, so print pop af ;restore PSW ret notquiet: pop af ;restore PSW jp crlf ;perform normal output end vÿ¤ŠZ3QNDR.Z80@ ßÿ öÿšÿòÿõÿ�ÿ›ÿ‹ÿ‘ÿ�ÿžÿœÿÄÿ�ÿ–ÿ—ÿ“ÿŒÿŠÿ™ÿ Óÿ!#"’ÿ$&%)'*(˜ÿ+�ÿ,/-»ÿ.±ÿÅÿÎÿ†ÿ‡ÿ0­ÿÂÿ•ÿÖÿ…ÿ×ÿ31³ÿ24Ñÿ65·ÿÍÿ¥ÿ”ÿÏÿ7Çÿ8¶ÿˆÿ½ÿ¼ÿ9¾ÿ:;Ìÿ°ÿ²ÿ<=ªÿ>?´ÿ‰ÿ©ÿ¹ÿºÿ¬ÿ«ÿÒÿoÿÿþåÿ®ÿÁ4 &N_¿ ølðüDM(1'ϢȖi@ÞùÉAb`Ë'Ùˆ1q¬e§¯ß ¾¢Ý�Ñ,äŠÄÀW~Ó€ÏÏ!¾¢Ý�Ñ,äŠÄÀWþ—i0=7ç~ŸŽ=-¦ŒçÅdjzõñ®V¼îQÖ«·˜²ÔÜnjL>k‰ÆnLÝü¨wBK4LÏÍ»<ù›ž›wy\¦çæ]^.™^-LM{õ¨wBK4LÏ w¹dzn¸ã2=7ÜÉßôj±`jLÃEúm‰"[Ø«Q’µãIsOâÉBš‰j=¬&ƒ=Uzƒ¾Ñ “…Õ„2 è/Ç^ÈÍ]W¿Ã ¿^1Þ@îQ}ùÀd¤ß±šPð;Úü†ÐžOíÿ¿‘šó¯ý~£8ß4 ªîíxmaÒd“lÔÒ+Bnîº"¤±^ó˯ž,¬&ÞÀ^�’D7(ß4 îB}ø—!ïö'´Åˆ)ˆÿo=|¾|‡Õ„Â~!7w]a ˆ"[ÈÍ]W”oЯC7æÅ&LÄ6"“c“ý‹¼ØÆ×4Ú¾�äÛ+Fÿ$V m1¢ú°�ÆLµï�i€(²…Z�¾óMƒ){ZLbÓsó.�Ëô~¾M^M¨éLþöoÁ=ÂXM(ÓKíÿ¯Wo1Ý…^=¸Gx¢È–éM¹ÛÈØS}˜²§/±éý|-Û”ÿô]H²R,ºAà±Êô]» Ÿ¶y¬2½)w{ªÓKíÿ/ Á±§»�†àØVj7½)w{о ݘ›ÞÏÇ•}Mº îá ¬úx¨õèÛôóÉ?ã2½)wìéË”=E‹MïçËe›òŸ¾ ¶ÙﱦçW:ù›ÞÏ—²MùOß…‰Ûó^dz\éä¢ú°�ÆLµïj=ú6½A÷©ëä]Å „¸ñ˜²§ú›žî¸L�ê™Ó€‰Cp� µ}ýb¼�Ü7¢úÐß?‰'Ûƒ_ÈÍ]Wd°Uo¦…þþIÄÀwÚKÒ4˜¦!8ö$6=7ïòäoznÞåq™ž_éäÜÃXM(Óó+�üM¯>Ž+“ÿ]ˆ|îíxì µ}gˆêƒ{;ÞÀkÔ«gz?Ÿü³M^M¨iÓûùrÙ¤»0 I6ÚM{ú›ÞÏײMùOß…^=¼F½z¦—Úÿ_jn¿ ©9ÿÚï7Êô~¾”5ÓûùZ¶É5}zõ°�™R™^r—LoÊÝÚÈ{Š6=¿ÒÉÿ.¸‡7°ê㙞_é¸L�+]î.¤1¯ý—éM¹[YbO_¦‰=E‹MÏ w\w�jƒ T½ÝôÜp'Ó£z¦¦Á4\drQd {5J²vl£1Sí;FQd µ}ç›Sž“ØôܼËã2½ÔþÿzõÓ]èÕƒ{„7 Šl™Þ”»�Œ=Õ‡)Ï_bÓûùZ¶)ÿé»�d¥XtƒÀc•é ºv>móXezSî62öT¦—ÜåîB’•bÁ~�5½)wk#ã9ú.¬¡½$ñ]ÏôüJ'ÓûùZ¶)ÿé»Ð«‡y/2=®tò7½ä.Ý…$+ÅbÞ‹LoÊÝÚÈx޾ k¸·ã ÔzômzTÏ”çh±éý|\Ùפ»àÞÀª�‡Z�¾M¯1Ÿü3.Ó›rÇó—©i0 ˆ´×Lƒ)¯&”øx¿è»à†_¯oà5êÕÃjB!7w]‘©éÕbÓ<åÁç~!7w]a ˆ"[ÈÍ]W; ; Z3LIB Module Name: Z3QOUT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qout ext getquiet,cout ; ; QOUT outputs the character in A if the quiet flag ; says it is OK to do so. ; qout: push af ;affect no regs call getquiet ;get flag jp z,notquiet ;not quiet, so print pop af ;restore PSW ret notquiet: pop af ;restore PSW jp cout ;perform normal output end ; ; Z3LIB Module Name: Z3QPRINT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qprint ext getquiet,print ; ; QPRINT prints the string at the return address if the quiet flag ; says it is OK to do so. QPRINT returns to the byte following this ; string on exit. ; qprint: push af ;affect no regs call getquiet ;get flag jp z,notquiet ;not quiet, so print pop af ;restore PSW ex (sp),hl ;get ptr to string push af ;save PSW qpr1: ld a,(hl) ;get next char inc hl ;pt to following char or a ;end of string? jp nz,qpr1 pop af ;restore PSW ex (sp),hl ;done ret notquiet: pop af ;restore PSW jp print ;perform normal print end ; ; Z3LIB Module Name: Z3QPSTR ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public qpstr ext getquiet,pstr ; ; QPSTR prints the string pted to by HL if the quiet flag ; says it is OK to do so. ; qpstr: push af ;affect no regs call getquiet ;get flag jp z,notquiet ;not quiet, so print pop af ;restore PSW ret notquiet: pop af ;restore PSW jp pstr ;perform normal print end ; ; Z3LIB Module Name: Z3ROOT ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public root ext envptr,retud ; ; ROOT returns the DU of the root directory in BC. No other registers ; are affected. ; root: push de ;save DE push hl ;save HL ld hl,(envptr) ;pt to environment ld de,9 ;pt to path entry add hl,de ld e,(hl) ;get path address in DE inc hl ld d,(hl) ex de,hl ;HL pts to path call retud ;get current DU ld a,h ;no path? or l jp z,rootx rootl: ld a,(hl) ;get next path element or a ;end of path? jp z,rootx ;done if so call retud ;get current DU cp '$' ;current disk? jp z,root1 ld b,a ;get disk in B dec b ;adjust for A=0 root1: inc hl ;pt to user ld a,(hl) ;get user inc hl ;pt to next path element cp '$' ;current user? jp z,rootl ;advance ld c,a ;set user jp rootl ;continue rootx: pop hl ;restore HL pop de ;restore DE ret end ; ; Z3LIB Module Name: Z3SHEMPTY ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public shempty ext getsh ; ; SHEMPTY tests the shell stack to see if it is empty. If so, ; A=0 and Zero Flag Set (Z), else A<>0 and NZ. ; shempty: push hl ;save HL call getsh ;get ptr to shell stack jp z,noshell ;error if no shell stack ld a,(hl) ;check first element noshell: or a ;set flags pop hl ;get HL ret end ; ; Z3LIB Module Name: Z3SHFULL ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public shfull ext getsh ; ; Macros ; putrg macro push hl push de push bc endm getrg macro pop bc pop de pop hl endm ; ; SHFULL tests to see if the Shell Stack is full. A=0 and Zero ; Flag Set (Z) if so, else A<>0 and NZ. ; shfull: putrg ;save registers ; ; Get Shell Data ; call getsh ;get ptr to shell stack jp z,noshell ;error if no shell stack ld e,b ;size of element in DE ld d,0 ld b,a ;number of elements in B ld c,0ffh ;set not full code ; ; Check to see if shell stack is full ; fchk: ld a,(hl) ;get next element or a ;last element on stack? jp z,fchk1 ;stack ok add hl,de ;pt to next element dec b ;count down jp nz,fchk ; ; No Shell Error - Say that Shell is Full ; noshell: ld c,0 ;set full code fchk1: ld a,c ;get full code getrg ;restore registers or a ;set flag ret end vÿ‡ÖZ3SHPOP.Z80C  öÿßÿšÿõÿòÿ“ÿ�ÿ‹ÿ�ÿŒÿžÿÄÿ�ÿœÿ‘ÿ›ÿ—ÿ–ÿ "!#Šÿ$˜ÿ’ÿ%&Óÿ'(¬ÿ)†ÿ™ÿ�ÿ*,+Åÿ-/.”ÿ0213456¯ÿÎÿ¥ÿ‰ÿ87…ÿ×ÿˆÿÖÿ·ÿ9oÿ•ÿ‡ÿ±ÿ;:<=Ìÿ³ÿÑÿÏÿüÿ¾ÿ°ÿÂÿºÿ>¼ÿ»ÿ?²ÿ@A¶ÿB¹ÿÍÿ©ÿ½ÿ¸ÿÒÿÁÿÀÿªÿåÿ­ÿ«ÿÿþÃÿÙ-ÝŠ•@¿ö-Sš/Â$þëV,´–Ö-¹å_›"Üœø®‰°°ü*[)·üu+Vüh¸7[½x*Ô†ÿË«V¸å×¾eJó€†{³Õ‹§Bm8ñ¿¼jÙ-»]HkÔÄë0ìàæv#†§vèæ–Ýòk/‘wwËn!EÖO(‘·Û…´Ãƒäv!íðä¸]H;¼Zt»QRpÓY?¡DÞnv¸Zt»°ÃÉq»°ÃAr»QRpsËnùZKë–>ìÐá<îðC#ŒÂßíöïö#œ_À!ú–(ú¦ýa÷ÞÔhV¹å_h-­[zLYõOjþÚõ«¿(ùuÃûPÑ1ø•uÉß´?ìðMÿžÆ8½·SÝòõù…ÖÒº¥çÁ”Uÿ¤á¯Z›Õ_”üºáý¨è_…¦ðWŠ×%Óþ¢~˜7ÿŽ1e¹Ê-?ðp¾½‰vR£ôæÍ·œþ…çy0e52á–ï–¿úWûpˆ~�%Š¾Ô—†J�Æ-ßüê‡èX¢è›þ#l¹e·Ã · )²~kr/õóøùq‡CôK¹�f¸ Pí‡èò0oþ¦ýj‡CôK¹É‹`¹Ë½ÔÏ«T¨ ÿnÿУ°£¾ŠÛ‘¼VBJ¾Ëúà·îøC#ŒB·Û|å.�°õKiëvšá*À¶ÜŽä X»ËU«­ïMÅün‡CôKý(ä–Û‘< ®v»;9 ¤»¬µr½œŽnW¤¼ÿ»ÿ?²ÿ@A¶ÿvÿÚ=Z3SHPUSH.Z80F öÿ ßÿšÿ‹ÿòÿ�ÿõÿ�ÿ“ÿŒÿÄÿœÿ‘ÿ�ÿ—ÿžÿ›ÿ–ÿ˜ÿŠÿ "!$#&%™ÿ’ÿÓÿ”ÿ('¬ÿ�ÿ*)Åÿ+‰ÿ,.-0/·ÿ†ÿ•ÿÎÿ1…ÿ3245Íÿˆÿ³ÿÖÿ6×ÿ87‡ÿ¼ÿ¥ÿÌÿ:9oÿ;<±ÿªÿÏÿüÿ¯ÿ>=@?¾ÿÑÿ»ÿAÀÿ½ÿÂÿÒÿB²ÿED¹ÿC©ÿºÿËÿ­ÿ¸ÿ¶ÿÁÿåÿÃÿ«ÿÿþ°ÿôÿ´ÿÕµþ�»tðãRìþ¸üÚ‘ÿ;wK7±c”n\ëS(ŒÉ‰üSº$Æùû’³ký;wé>à?e}æ"ùã×rŸÈÿ0Å»®õãRì~ÊúÌEòÇ-®å>‘ÿaŠÃ®Õ¡(ï%a²PLæêоgÛ&‹ru­®õãäéÈt­®¡°3âÊÓW„b2°íŠPLÒ®Åd('Wt&Wױ팸òtÄAÊÉAH»"HÛ®èL®®®Õµ¢t;FéæC1YÏ7Ö?í,y|ê%§ý�É’Ç�IÿÁš¼É—oÿ†î%›¸Ö7Ö_b½÷—Œ§õ/—2çRÞMñ¿t;FéæO[qòüèÅØSˆ/æóLþNy*6]ë—Úžúý/—Åd¿ÌŸEJ=ç¥Ø«ï=ûK7±c”nþ´'Ï�^Œ=*Å!æóL\ëßé#OÅæãßßÍÏSǽCÿËåyþ>GÎKJÅ9M(þS™õ_do‰^òø}Ž×úIHÏç§ÿ´'7‰¸V`øãÿ,_b½÷—Œ§õs_6/ïv­@ÔÇÿ%Ö{ÉxZÿ2ÿRìíZ�»ÿO;K™o"¿%�‘ó%Ö{ÉxZg;·®Õu²PLqE(쌈«NNë?=.ÓúL×êZ`m_b½÷Ä�ÿEÎÓqëó1f»VW„b2° ÔÉiýÁΛü´³äщï�±m²( Žmì¼ÉOÖ{ÿ4žÖ®À6PǶvÞä§�%�® \e™¬÷Físäürù,?YïýÓxZ»V×ú¥î_.?í,yüe¾‰ü–<ºVW„b2° ÔÉiýÁΛü´³äÑ5­ç2ØWl¾¢f›¨cÛ÷6W,9�m {“Ï}Ï\!¨�ÉËå§�%�¸b(`p•Ösؤ¨IŠlO$:»b( ®Òz.ƒíŠ¡)/#P§�%�¿Ì7‘ß’G×´žÃ×êZÿ>ë´~“ŸÝ¿\~²Þû§ñ´þeþ¥ØÛµº"ñ½1¶MÔ±íi|=ÿ"ç“„[×Kbëˆ+6_Q³MÔ±ísß³ïÝ×Îæ 9à@Ý|Ú÷îkg{É?�§õ® \][uOë—µ+8!`{E¨ÁÞäsß³ïÝ×Îæ Ò e &)²=‘è슡€<¸º$¶vÅP@–#rêd½÷/ó/ÅÞ®—ÄÖÃ×êZÿ¾„ÛOÅ9�í'ë½Oë/‚kuEâ{cl›, ¨cÛOÖ{ÿ4žÖOã»èéZ]ëÇ–%Û›|gòrùÜÑo¾w_;›kuE(&C9¹^…Ö1#®Ø|Ujb�Ö‘óDr»" »b(`puZ»‚¶W¤�ìM>÷=sé„2P“ÙžHtvÅPÀUhÓõ*´ޏ"H@9¹b¤Uulû$E¶—Ë÷îkg›¿ä¿ï Ò l5Ø›üe9Ó¾|ký&Ÿ$ܺ¢ï�ôŠm Dù›oòSŠ“Úœ°½" Ôº6ßäIO[2·E²ku­_ÂíOãiýExÉý�íÜþ\Ûµº^…ÖQWl¾*5±Në¿Èù$áö‰ävE ªäþÝs~ï¾v6W  ®®BkJ\A:¡ Ô$E¶'�]ŠÉPN@0¾\\Ë}^.ß»¯�mþî‹ýêïÇ7—Á~¹|óÄ\¯Bë»Wl¾¢&MԱ͛€šmúj(̤Øj™§õÁ¤H»‚tBj’"ۉή ȃ««Ðú®+‚”PǶ§ñ]ôtÅPÀUhåzZSqEâ{cl›, ¨cÛ;oò“õÞ?�§µ+‚�êØöÁΛü´³äѵºÖ¿/áösGÿd½÷w¶sû—#׈ò7ù:×êš$ÜF\± øŠš4=PǶ/ßZ»bP³M¿â@ …}ùÖÚKN`¨ÁÞäsß3W,9�´+䀕Hî\1�WI­+ƶ3"^¬zzšœþÓã2­ÏtÅ=9à@¥:Uÿ´'»â´¹V×úqåK¬÷þ’ñ´~ 4¾l^ÞíZ]³LÖ{G\$€m žž&§ÿ†ÎcÛ/V==MNÿéq™ÖgºbðÕ0Pû9Ÿ„´+䀻ⴹV×úqå)¹¾ä/±ÞûKÆÓÚµºf9"׈+‚° ÔÓÓäôßйbl;#âŪ§§Éé?=.ÓúLWl¾ŠjŸ#ç“�v…pWœ6×êZ¿dgÉã/óMä7?c»VW)/cÄAØêéirúoè\1¶�ñbÕÓÓäôŸ—i}¦+6_ÝjŸ#ç“�v…pWœ6WWt&®qŒGª’G×´žÃ×êZÿ>ë´~“ŸÝ¿\vÿìÝZ3SNDR.Z80B ßÿ öÿšÿòÿõÿ‘ÿ‹ÿ�ÿ›ÿ�ÿÄÿžÿœÿ�ÿŠÿ“ÿ’ÿ–ÿŒÿ ™ÿ!�ÿ—ÿÓÿ#"%$'&)(*†ÿ˜ÿ+Åÿ,-‡ÿ…ÿ.0Îÿ1/Öÿ×ÿ32»ÿ±ÿ4•ÿ657³ÿ¥ÿ89Çÿºÿˆÿ­ÿÂÿÍÿÌÿ¾ÿ·ÿ²ÿÒÿ‰ÿ:¼ÿÏÿ°ÿÑÿ=;”ÿ<>¬ÿ?½ÿ@A¹ÿ¶ÿ©ÿÀÿ´ÿÈÿªÿÐÿoÿÿþåÿÕÿ-¼A㩾æcÈ?ì- æ©t€ÆS¾ƒá ÃYÿêŽÙXù$û"á Oõ5ïУî8Á ›Òº:€›ôixÃ�Ø[Уî8Á ›Òº:€›”ÞÂW±ô�ÍŽ,•sÃ÷´´%];Q$çÚ&«1<¼…7 Éæþ1¼…+F7±S6÷‡¯b£µÖ¾Š�Öž _ÅFkS¾%g OÝÄNÙܾê«MMøª¯öTøª¯Öz÷äLáá-¼-ߎt<8À�‘¥t³¡g¾eèß.$Oú « yªƒ3ß2ôo)ëûº6æ>¼AýqœÓ·’Ãõ¡h}dÿPcå› ÕEÊú¾.Ìʳ̒YÉS�>N½E•oH"(íL6†q&G–�ºš½9¾E˜{Hž ò ³ e}_ÿB>8�²¾¯›4¼…·M"˜E1²ÃÛîp}p"Ÿskñ{ð5V¾�8ð/$Où„Y08ÀñÞÂG–ʹºðUŒn"|ß³�GòT¶õns‡‚¢ ú8ó…ä©Â×ä÷ÝD‘œ»ÛEPtA’§:8ó-Cÿv‘²¾¯¾�jyöÈÒº7¼…7$û“bTPçô-›Òºø=JèÎ5bœù–¡»ámù„Þñ(lJëâ÷à>ášv©pËü{Ƈð¾ïÙÔæs·™Ï„ lJëâ÷8óE ݹÆð}Ï;ï6aSZ¿Ç-óï1 †…¯ößÍ»�W÷#Ã&öfªƒùe>²T¸ºðÍçl¶ÓÝ–ÏÁ,æÖTBá{ʬÙmæ3!œÿ\·S­ð쑥 ß÷¬±ón›²¦´.~�ºs�˜ÉÂ[xƒþÿšÐÿ‹º]“�º|‹0÷˜2+¼…›?)É“.|£›ßÒî)ÛzwÛÀ3(A’§Â,HYß× ßYÌžÚmŠ@’§ÂLc½}øÎböTø¾g­×~<’§zØ6\ŠFÐÇÀà°!Ï·´{ʶÞpó'ÅÕ…ï{6Û�§v[¢GòTákòû®ÉjÜm&«™ò;ó*|�ÚGë}ØmS&cé¾�j…g›?©Ò†ï,f­w·)}Hi)|g1{*|O™Mw›ùLç?—ðíT+<ÛüIqÃÍŸTiuá›(º‰ð½Eáá-¼ƒy*ôŸÉÑ…·®Näsn�#~�)“±ÂÛ<'¸üxg^á÷(¡Û}oáýgrtá[Ú=e[oøæsÖzíS»m¸>� )-¡„nׯÀ3(A%t» �Sox oHf•Ñ„þ_˜?©·hþÞÂûÏäpuáûžMm.ÿn3_u;ÚÏï .ÿдK…ºÝð}ÏfûÑzv›±ÊhBÿ/J~�3ßðýwónKÎYr·S-Ïî?“ó4¼…7 ù %t»`*¼…÷ŸÉy¢ ß÷l¶­÷a·™¯ºáûž}<õ`çð�Ŭõî6E )-…ï,fO…ï)³én3Ÿ áüç¾�j…g÷ŸÉy¾�jûÏäpw›±Êh‚”–Â[xƒFÝ?T³ù}qê-ªƒ7�„ºÝðÞ&ç©.|ß³�§ì¼ÛxuÿÐ~~_”Ðí‚>N½E¾³˜=¾§Ì¦»Í|&„óŸKøvªžÝ&çix oHÂJ;Sx ßDÑM„ï¿›¼ï­Ý6¨�[Ä®„ï- oá ™rx ?’§Òí÷ÉnStA’§}œz‹*<|KN¸Þô’D¯{Ƈð¾ïÙÔæs·™Ï„ lJëâ÷8óE ݹÆð}Ï;ï6aSZ¿Ç-óï1 †…¯ößÍ»�W÷#Ã&öfªƒùe>²T¸ºðÍçl¶ÓÝ–ÏÁ,æÖTBá{ʬ; ; Z3LIB Module Name: Z3WAIT1 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public wait1s ext getspeed ; ; WAIT1S delays for approximately 1 second. The ZCPR3 environment ; (particularly processor speed data) is assumed. ; wait1s: push af ;affect no regs push de push bc call getspeed ;get processor speed jp nz,w1 ld a,4 ;assume 4MHz if none given w1: ld b,a ;speed in B loop0: ld d,50 ;50 outer loops = 50*20,010 = 1,000,500 cycles loop1: ld e,230 ;230 inner loops = 230*87 = 20,010 cycles loop2: ex (sp),hl ;18 cycles ex (sp),hl ;+18 = 36 cycles ex (sp),hl ;+18 = 54 cycles ex (sp),hl ;+18 = 72 cycles dec e ;+ 5 = 77 cycles jp nz,loop2 ;+10 = 87 cycles dec d ;outer loop jp nz,loop1 dec b ;speed loop jp nz,loop0 pop bc ;restore regs pop de pop af ret end ; ; Z3LIB Module Name: Z3WAIT2 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public wait1ms ext getspeed ; ; WAIT1MS delays for approximately 1 millisecond. The ZCPR3 environment ; (particularly processor speed data) is assumed. ; wait1ms: push af ;affect no regs push de push bc call getspeed ;get processor speed jp nz,w1 ld a,4 ;assume 4MHz if none given w1: ld b,a ;speed in B loop0: ld e,20 ;20 inner loops = 20*51 = 1020 cycles loop1: ex (sp),hl ;18 cycles ex (sp),hl ;+18 = 36 cycles dec e ;+ 5 = 41 cycles jp nz,loop1 ;+10 = 51 cycles dec b ;speed loop jp nz,loop0 pop bc ;restore regs pop de pop af ret end ; ; Z3LIB Module Name: Z3WAIT3 ; Author: Richard Conn ; Z3LIB Version Number: 1.3 ; Module Version Number: 1.1 ; public waitp1s ext getspeed ; ; WAITP1S delays for approximately 0.1 second. The ZCPR3 environment ; (particularly processor speed data) is assumed. ; waitp1s: push af ;affect no regs push de push bc call getspeed ;get processor speed jp nz,w1 ld a,4 ;assume 4MHz if none given w1: ld b,a ;speed in B loop0: ld d,5 ;5 outer loops = 5*20,010 = 100,050 cycles loop1: ld e,230 ;230 inner loops = 230*87 = 20,010 cycles loop2: ex (sp),hl ;18 cycles ex (sp),hl ;+18 = 36 cycles ex (sp),hl ;+18 = 54 cycles ex (sp),hl ;+18 = 72 cycles dec e ;+ 5 = 77 cycles jp nz,loop2 ;+10 = 87 cycles dec d ;outer loop jp nz,loop1 dec b ;speed loop jp nz,loop0 pop bc ;restore regs pop de pop af ret end