@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( 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  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `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.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS 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 } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 164ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u05  15 2 2151^116115ύ011$r2ԭ5 3)5)5ԭx GT}@@L00)+& 2 L0=ɛ -L!1LV1L1 /3 3ȹ441L-4 v3 25 2H 2h͔5U}L3L3 2 k3U hh`DOC`QL3P1Lk0S1H /3h0B k3@ VL0LU!#$53 1181118V}1111Ε5 1Lk0552 1Ȍ1i111i11115Lk0pppB4f5&&&&&&&&^6f^6&&&&&W}&&A1@BJ D2ELVK@BHILV^Щ6 2BD2EJ VBD5EHI0 V0%5X}5 2iХiL[2 25 25`D:*.*` i@`8 ``@i `8@`0 BLV525<4Y}5`HH i ԍΗ552 ԍhh@ Lح1Э1Ѣ 24.4 24Z}4`D4E` 2BJ k3LVRH` 2BD4EhK)I JLV333 BASIC languag i}e OBJ > MACHINE language DOC > DOCumentation PIC|MIC|FNT|MVM > Graphics AMS|MUS|MBD > Music LST j} > BASIC LISTing -Some MACHINE language programs can only be run by booting the disk MENU "without" BASIC! -For s k}ome programs, XL/XE models may require a "TRANSLATOR" program to be booted first! [Also available from BELLCOM] - l}Most programs are relatively self-explanatory; however, some have separate DOCumentation files available. Some BASIC m} programs may contain instructions in their program listings. -To use this great MENU program on your own disks, n}simply copy the file "AUTORUN.SYS" onto your disk. * MENU written by DAVID CASTELL * program on your own disks, ^ ___________ BASIC WEDGE ___________ WHY? ---- BASWp}DG is not The Ultimate Program. Just a modest effort to make my XE a little friendlier for Basic programming. We gotq}: -Quick access to Disk Functions without using DUP.SYS. Tricks include an alphabetized directory. With DOS 2r}.5, if you DON'T have D8 installed, you're right back in the "Bad Old Days", aren't you? If you DO have it, no banks} switching. Why should you be forced to make the choice between convenience and power? -An easy way to change LOMEt}M in mid-session to meet different program requirements. Setting a protected block in low memory is an alternativu}e to the venerable PEEK (106). It makes for fewer hassles, ESPECIALLY since you can shrink or expand it at will. v}-Low Free RAM consumption while doing the above. If you eliminate Bigblock, you'll find BASWDG takes up only 80 bytew}s or so. NITTY GRITTY ------------ BASWDG SHOULD ONLY BE USED WITH DOS 2.0 OR 2.5 IN A 'DEFAULx}T' SETUP (2 drives plus optional D8.) STARTING ADDRESS IS $1CFC (7420) RENAME THE DOWNLOADED FILE AUTORUN.SYS y} NUMBERS ------- Critical Memory values are noted on the title screen. BASWDG.HLP has the same iz}nfo for quick reference. ABSOLUTELY RESERVED MEMORY -------------------------- Starting at $1CFC, this block{} is quite small. It should NEVER, EVER, be overwritten. BASWDG runs in the noted block of 'shadow RAM', UNDER the in|}ternal Basic ROM. When you call it by typing DOS, Basic is disabled, and BASWDG runs. Exit, RAM turns back to ROM, an}}d you're READY. NOTE: Page Six, the Tape Buffer, the Magic Zero Page Free Bytes, and the bottom of the stack are lef~}t alone. OPTIONAL RESERVED MEMORY ------------------------ BIGBLOCK is a large chunk of RAM that is reserv}ed at boot up time. It's 'Protected', just like Page Six. Some uses: -Since there's an even boundary, and LOTS of r}oom, you can install a character set or single line PM graphics. -If you're an ML programmer, you can use it for }stand alone routines (see WDGREN.BIN) or subroutines for Basic programs. The Bload command makes shuttling in cod}e easy. -Hardcore hackers can even use it for stuff that normally requires'AUTORUN' files, like device handlers.} LOMEM ----- Best of all, you can change the size of Bigblock at will. ELIMINATE it f}or maximum FRE(0). Or EXPAND it to make room for double line PM, PLUS a character set, etc. Endless Possibilities! P}OKE the BASWDG LOMEM shadows with your new 'bottom' of Basic memory (lo/hi), RESET, then NEW. (Don't forget the NEW whi}ch resets Basic pointers.) For simplicity, keep the lo byte at 0, and use Page Numbers for hi. NEVER SET LOMEM LOWER} THAN THE LIMITS NOTED ON THE TITLE SCREEN. DOING SO WILL SEND YOUR COMPUTER TO THE LAND OF LOST BYTES! } HELLO ----- To enter BASWDG, type DOS. Once in the menu, access a command by pressing the appropria}te key (RETURN not necessary.) DIRECTORY --------- Type the drive number. DE}FAULT DRIVE ------------- The Default is the drive that doesn't need a Device Spec (eg. D1:) when typing i}n file names. In DUP.SYS, the Default is always D1: In the BASWDG menu, things are more flexible. THE BASWDG DEFAULT} DRIVE IS THE LAST DRIVE FROM WHICH YOU READ A DIRECTORY. The intent is to default to the drive whose files are curr}ently listed on the screen. This can be confusing until you get used to it. So there are a couple of helps: D: is }always translated to D1: This extends to other devices, too. E:=E1:, P:=P1:, etc. The FULL FILESPEC, as translated,} is printed on the screen. LOOK AT IT! If it's not what you intended, you can bail out. CHANGED YOUR MIND? } ------------------ The all purpose Quit Key is [BREAK]. At any prompt, pressing it will exit to the menu. BR}EAK disabled? There are a couple of alternatives: FOR FILE NAME INPUT: you can Quit with a 'Null Input'. Press RETURN} ONLY with no name. AT ANY OTHER PROMPT: you can abort by hitting ESCape. CONFIRM -----}-- Before BASWDG acts, it will ask you to CONFIRM. Two options: 1) Want to quit? Hit BREAK or ESC. 2) Go ahea}d? Any other key. FILE COMMANDS ------------- These are E (Erase), R (Rename), B (Bload), and }M (Move File) At the command prompts, INPUT the filename (remember, no device spec needed if you're using the DEFAULT}.) Abort by pressing RETURN only, or BREAK. ERASE zaps the selected file. RENAME works in the normal fashion. Type} the old name, a comma, and the new name. Sorry, you STILL have to watch out for duplicate names (don't blame me..I'm} just using XIO 32!) Use RENAME with the target directory on the screen to make sure you're not doing something nasty.} BLOAD works like the L command in DUP.SYS, and is only for Binary (Machine Language) files. If INIT or RUN addresses} are used, they WILL be executed. Terminal RTS returns to the BASWDG menu. When you Bload, be careful of over- writin}g vital memory. If you have any doubts about an object file, (L)OAD it from DUP.SYS. Please make sure that any Custom } Interrupts are INACTIVE if you exit to DUP.SYS. The Bload function uses the resident DOS 2.x routine, SFLOAD. To ci}vilize it, a small patch is installed (details on request.) This is ONLY in place while BASWDG is running. That means i}t is ALSO in effect during any INIT or RUN of Bloaded files. DO NOT 'WRITE DOS' WHEN THE PATCH IS IN PLACE! DON'T} PANIC. The patch IS AUTO- MATICALLY REMOVED on exit to Basic (C), exit to DUP.SYS (@), and RESET. If your bloaded f}ile uses SFLOAD, it may not work properly (hasn't happened to me, but you never know) BLOAD FUN } --------- Since Basic is disabled during BLOAD, the SHADOW RAM IS OPEN FOR LOADING CODE. (Don't zap BASWDG!) }Of course, you can't use it while Basic is running (or can you?) There's 6k+ of shadow RAM down there. }MOVE IT! -------- The MOVE command combines the functions of COPY FILE (C) and DUPLICATE FILE (O) in the} DUP.SYS menu. It's Especially Useful with D8. MOVE uses 'Free RAM', starting at the top of your program, for its buf}fer (do you have data up there? Careful.) The smaller your program the bigger the buffer. (Error 2 means your RAM is fu}ll!) There are SEPARATE PROMPTS for FROM and TO filenames. Remember to use the Default to cut down on typing. Any} legal device (E:, P:, C:, D:) can be used. If you don't specify a number, 1 is assigned. THE LEYENBERGER OPTION} ---------------------- If you want to use the SAME FILE NAME for both files, then you can type ONLY the Device} Spec (INCLUDING THE COLON!) at the TO prompt. The FROM file name will be appended. COPY or DUPLICATE? } ------------------ COPY FILE (no swaps) is automatic- ally assumed with files going to E: or P:. Otherwise MOVE c}hecks the Device Number for FROM and TO. If both use the SAME number, MOVE assumes a DUPLICATE FILE, and will prompt }you for swaps. Swap prompts work like CONFIRM. BREAK/ESC to exit, or key to continue. Depending on exactly where you} are in the process, an exit may leave you with a partial file on the TO disk. Erase as necessary. For severe problems,} (inserted the wrong disk?) use DISKFIX.COM. EXITING THE WEDGE ----------------- Cart exits to B}asic. To go all the way and exit to DUP.SYS, type @ (SHIFT-8.) That's intentionally a two-finger combo, to avoid acc}idents. DUP.SYS NOTES ------------- I try to avoid DUP.SYS, but some- times it's necessary (DI}SKFIX!) IF MEM.SAV IS ACTIVE WHEN YOU EXIT DUP.SYS WITH THE B COMMAND, BASWDG is still there. However, it has been }unhooked (safety first) To rehook it: From BASIC, POKE 12,252: POKE 13,28 Now RESET. BASWDG is back. Do this BEFO}RE any drastic action like a RESET, LOAD, or NEW. DO make sure that MEM.SAV has restored the RAM. LIST if you're not} sure. Remember that using options C and O in DUP can zap MEM.SAV (That's why I wrote MOVE) IF MEM.SAV IS NOT ACTIVE, }you can usually Reload BASWDG with the L command. If in doubt, reboot. Running DUP.SYS on D8 with no MEM.SAV, alters} the sector count for that file(??) Beats me. Even if it says DUP.SYS is taking up 156 sectors, it's really only usin}g 42, as confirmed by FREE SECTORS. So far, this seems harmless. RESET DEFAULTS -------------- } These control values implemented on each RESET. TEXT and BACK set 709 and 710 respectively. KEY DELAY and KEY REPEAT a}re for 729 and 730. OKAY, IT'S A LITTLE ROUGH AROUND THE EDGES. DOES THE JOB, THOUGH. THE WHOLE WORLD IS A BETA TES}T. /don BASWDG 2.86 uses the resident DOS 2.x routine, SFLOAD for it's bload. To avoid problems, a small patch} is installed (details on request.) This is ONLY in place while the Wedge is running. That means it is ALSO in effect }during any INIT or RUN of Bloaded files. DO NOT 'WRITE DOS' WHEN THE PATCH IS IN PLACE! Don't Panic. The patch IS} REMOVED AUTOMATICALLY on exit to Basic (C), DUP.SYS (@), and RESET. If your bloaded file uses SFLOAD, it may not w}ork properly (never happened to me, but you never know) The answer is the same as for files that can't be bloaded} because of memory conflicts, or those that you're just not sure about. (L)OAD them from DUP.SYS. As always, please }make sure that any Custom Interrupts are INACTIVE when you exit to DUP! /donm from DUP.SYS. As always, please WY E N0 ./`$ E L Nl NL ` $)`Eغ Q)Z[}jk ) @< H h̤ ) դHȹդH`hd} Zg 5c ȄT} 0 )U ٥)J N W8 NiԐ WO D܄ Dڄ۠} Ԅ ұԐĤڠHܑh܈0ПL 輠`XYԄ`i(ԝ՝` )w }! ǣà ) 54TU S LT L9CD  L?LLT8}) ǣɛ ǣP"Eɛ 礑ɛ У 0 à }Z 5BHI  LTHܽI Qڥ0 J 7 BܝHݝI 0}00 LL B;DE/ȱ)ȩ BDEH)I V0` `Hn Dh} LгԄՠޱ `LL N 0bLU`U ~ ֣ L/0@Hޱ:}ުi椨gުi1`Lw`1 2 8 Era Rename Bload Move Cart @DOSD}1:D1:*.* Error > > > FROM > TO > FROM disk? TO disk? Right? 128ERBMC@___{p}á$$  CDii$i%i l 0 A1Τ  % ND lBASWDG 4}.86 don lebowRESERVED MEMORY:$1CFC-$1D59 (7420-7513)RESET:TEXT 7450 BACK 7452KEY DE}LAY 7460 KE$%Y REPEAT 7462CONFIRM ('Right?' prompt): CANCEL with BRK,ESC, or 'N' any other key to GOBIGBLOCK:$1D5A-}$23FF (7514-9215) is FREELOMEM SHADOWS: 7470,7471 POKE value, RESET, and NEW NEVER SET BELOW $1D5A (90,29)!k$Ԅՠ} `$ELOMEM SHADOWS: 7470,7471 POKE value, RESET, and NEW NEVER SET BELOW $1D5A (90,29)!k$Ԅՠ10 .OPT NO LIST20 ;30 ;XE BASIC WEDGE 2.8640 ;DOS 2.x/internal basic rom50 ;60 ;don lebow [70717,720]70 ;80 ;90} **0100 BOOT? = $090110 DOSVEC = $0A0120 DOSINI = $0C0130 COLDST = $02440140 RUNAD = $02E00150 DINIT = $02E2}0160 MEMLO = $02E70170 SFLOAD = $15A4 ;internal bload0180 LOADZONE = $1DF4 ;default buffer0190 **0200 PATCH1 = $15}CB0210 PATCH2 = $15D00220 PATCH3 = $15EE0230 PATCH4 = $15F30240 **0250 LBUFF = $05800260 DIRTAB = LBUFF+$20 ;sor}t buffer0270 INBUFF = $F30280 **0290 ICCOM = $03420300 ICSTA = $03430310 ICBADR = $03440320 ICBLEN = $03480330 ICAU}X1 = $034A0340 NUM1AUX = ICAUX1+$10 ;#1 aux0350 CIOV = $E4560360 **0370 OPEN = $030380 READ = $040390 GE}TREC = $050400 GETCHAR = $070410 WRITE = $080420 PUTREC = $090430 PUTCHAR = $0B0440 CLOSE = $0C0450 RENAME = $200460 E}RASE = $210470 BLOAD = $29 ;ghost of dos 3!0480 *堰*0490 FR0 = $D40500 Z1 = $DA ;wedge temps0510 Z2 = } Z1+20520 LEN = Z1+40530 COUNT = $F50540 HOLD1 = COUNT+10550 HOLD2 = COUNT+20560 FLAG = COUNT+30570 FILENUM = COUNT}+40580 BUFFLEN = $FC0590 HOLDBUF = $FE0600 **0610 PORTB = $D3010620 CVFPA = $D8E6 ;fp to asc0630 CVIFP = $D9AA };integer to fp0640 ZFR0 = $DA440650 INTLBF = $DA510660 EPUT = $E406 ;E: put byte0670 KGET = $E424 ;K: get byte068}0 **0690 TXT = $02C5 ;text color0700 BAK = $02C6 ;background0710 ROWCRS = $540720 COLCRS = $550730 CRSINH }= $02F00740 **0750 INVFLG = $02B60760 SHFLOK = $02BE0770 KRPDEL = $02D90780 KEYDEL = $02DA0790 **0800 LINEN}D = 0 ;end print0810 PROGTOP = $90 ;end basic program0820 CR = $9B ;RETURN0830 MEMTOP = $02E5 ;end free ram}0840 ;0850 **0860 ;label ADDRESS to a,y0870 ;GETADR (of) LABEL0880 .MACRO GETADR 0890 LDA # <%10900 }LDY # >%10910 .ENDM 0920 ;WORD to a,y0930 ;GETWORD (from) LABEL0940 .MACRO GETWORD 0950 LDA %10960 LDY }%1+10970 .ENDM 0980 ;a,y WORD to label0990 ;STORWORD (to) LABEL1000 .MACRO STORWORD 1010 STA %11020 STY} %1+11030 .ENDM 1040 ;text print..max 256 characters..terminate with 01050 ;PRINT LABEL1060 .MACRO PRINT 1070 } GETADR %11080 JSR SHOWME1090 .ENDM 1100 ;insert OS vector1110 ;OSVEC [from] VECTOR ,[to] LABEL1120 .MACR}O OSVEC 1130 .IF %0<>21140 .ERROR "OSVEC!"1150 .ELSE 1160 CLC 1170 LDA %11180 ADC #}11190 STA %2+11200 LDA %1+11210 ADC #01220 STA %2+21230 .ENDIF 1240 .ENDM 1250 ;126}0 ;1270 ;protected RAM code1280 ;1290 .ORG $1CFC1300 **1310 RESET1320 JSR $FFFF ;DOS init1330 JSR B}ASOFF ;open shadow ram1340 JSR BASON ;to off patch1350 SHADOWS1360 GETADR WEDGE ;set1370 STORWORD DOSV}EC ;DOS vector1380 GETWORD SAVEMEM ;set1390 STORWORD MEMLO ;lomem1400 LDA #0 ;set1410 LDY #$9C } ;colors1420 STORWORD TXT1430 LDA #$15 ;debounce1440 LDY #$03 ;repeat1450 STA KRPDEL1460 ST}Y KEYDEL1470 RTS ;bye1480 SAVEMEM1490 .WORD NEWLO ;lomem shadow1500 ;1510 **1520 WEDGE1530 } JSR BASOFF ;turn off basic rom1540 JSR PATCHON ;patch sfload1550 JMP DOWEDGE ;run the wedge1560 **}1570 GOBAS1580 JSR BASON ;turn on basic1590 JMP ($BFFE) ;do warmstart1600 GODUPSYS1610 JSR BASON1620 DUPE}XIT1630 JMP $FFFF ;go run dup.sys1640 ;1650 **1660 ;1670 BASOFF1680 LDA PORTB1690 ORA #$02} ;bit 1=11700 STA PORTB1710 RTS 1720 ;1730 BASON1740 .OPT LIST1750 JSR PATCHOFF ;restore sfload1760} LDA PORTB1770 AND #$FD ;bit 1=01780 STA PORTB1790 RTS 1800 .OPT NO LIST1810 *}*1820 *= DINIT1830 .WORD BASOFF1840 ;1850 ;**1860 ;1870 .ORG $A000 ;heh1880 ;1890 DOWEDGE}1900 TOP1910 CLD 1920 TSX ;save stack pointer1930 STX HOLDSTACK1940 JSR INTLBF ;set lbuff pointe}r1950 ;1960 AND #0 ;just in case..1970 STA NUM1AUX ;clear aux bytes1980 STA NUM1AUX+1 ;#11990 STA N}UM1AUX+$10 ;#22000 STA NUM1AUX+$112010 LDX #$102020 JSR CLOSEME ;close #12030 JSR CLOSE2 ;close #22040 } STY CRSINH ;no cursor2050 AND #02060 STA INVFLG ;no inverse2070 ORA #$402080 STA SHFLOK ;all caps}2090 DOMENU2100 PRINT MENU ;command line2110 JSR GETKEY ;well?2120 **2130 PHA ;'scuse }me2140 JSR ZAPLINE ;clear menu2150 PLA ;retrieve key2160 TAX ;save2170 ;2180 LDY #JMPTAB}LE-KEYTABLE-1 ;number of legal keys2190 NUMLOOP2200 CMP KEYTABLE,Y ;match?2210 BEQ FOUNDKEY ;yup2220 DEY } ;no2230 BPL NUMLOOP2240 EXIT12250 JSR UPONE ;start2260 BPL TOP ;over2270 ;2280 **2290 }FOUNDKEY2300 CPY #3 ;directory?2310 BCC D1 ;yes2320 AND #0 ;no2330 STA CRSINH ;turn on cu}rsor2340 D12350 TYA ;y2360 ASL A ;*22370 TAY ;indexes jmptable2380 LDA JMPTABLE,Y };hi byte of routine address2390 PHA 2400 INY 2410 LDA JMPTABLE,Y ;lo byte2420 PHA 2430 RTS ;}go run routine2440 **2450 DODIR2460 STX DRIVE+1 ;set number for dos2470 STX DEFAULT+1 ;and title2480 } LDA #$7D ;clear screen2490 JSR POPCHAR2500 DIRAUX2510 LDY #7 ;dos 2.52520 STY NUM1AUX2530 STUFFIT}2540 LDA DRIVE,Y ;directory spec2550 STA (INBUFF),Y ;to lbuff2560 DEY 2570 BPL STUFFIT2580 LDA #OPEN } ;open directory2590 JSR ICHIBAN ;kudasai2600 **2610 PRINT DEFAULT ;show drive2620 STA COUNT} ;init filecount at 02630 TAY 2640 INY 2650 STY ROWCRS ;start at row 12660 READER2670 LDX #$102680 } JSR GETLINE ;get filename2690 BMI GOTIT ;end of directory2700 LDY #$12 ;default length2710 INC COUNT2}720 LDA COUNT2730 AND #$01 ;check column2740 BNE COL1 ;left side2750 LDA #$14 ;right side2760 } BNE PRINTNAME2770 COL12780 DEY ;to strip CR2790 LDA #12800 PRINTNAME2810 STA COLCRS ;set position}2820 LDA #LINEND2830 STA (INBUFF),Y ;terminate print line2840 GETWORD INBUFF ;point2850 JSR SHOWME ;an}d print2860 BPL READER ;always2870 **2880 GOTIT2890 LDA COUNT ;how many names?2900 CMP #1 } ;not enough2910 BEQ EXIT12920 CMP #$29 ;too many2930 BCS EXIT12940 LSR A ;divide by 22950 } STA HOLD12960 STA HOLD22970 JSR FINDSCREEN ;init pointers2980 LDX #02990 JSR MAKETABLE ;first column3}000 LDA COUNT3010 SEC 3020 SBC HOLD2 ;remainder in second column3030 STA HOLD13040 JSR FINDSCREEN3 }050 LDA FR03060 CLC 3070 ADC #$13 ;offset to second column3080 STA FR03090 BCC FINISH3100 INC } FR0+13110 FINISH3120 JSR MAKETABLE3130 **3140 SORTINIT3150 LDY #03160 STY FLAG ;clear p }ass3170 LDY COUNT3180 DEY ;0 offset3190 DEY ;ignore 'FREE SECTORS'3200 STY FILENUM ;maste }r counter3210 ;sort loop3220 NEXTPAIR3230 LDA FILENUM3240 BEQ CHECK ;pass completed3250 JSR FINDME ;addre }ss of 'bottom' string3260 STORWORD Z2 ;to pointer3270 DEC FILENUM3280 LDA FILENUM3290 JSR FINDME ;and }the 'top' one3300 STORWORD Z13310 LDY #2 ;init pointer3320 STY HOLD23330 CHEKTOP3340 INY };top first3350 CPY #$0D3360 BCS YOURTURN ;end search3370 LDA (Z1),Y3380 BEQ CHEKTOP ;ignore spaces3390 } STA FR0 ;save char3400 YOURTURN3410 STY HOLD1 ;hold index3420 LDY HOLD2 ;bottom name3430 CHEKBOT3440 } INY ;as above3450 CPY #$0D3460 BCS NEXTPAIR3470 LDA (Z2),Y3480 BEQ CHEKBOT3490 STY HOLD2} ;hold index3500 CMP FR0 ;compare3510 BCC SWAP ;got one!3520 BEQ NEXTCHAR ;try again3530 BCS NEX}TPAIR ;move on3540 NEXTCHAR3550 LDY HOLD13560 BPL CHEKTOP ;always3570 SWAP3580 LDY #$113590 STY FLAG } ;pass not clear3600 MOVECHAR3610 LDA (Z1),Y3620 PHA 3630 LDA (Z2),Y ;new character3640 STA (Z1),Y ;mo}ves up3650 PLA ;old character3660 STA (Z2),Y ;moves down3670 DEY 3680 BPL MOVECHAR3690 BMI }NEXTPAIR3700 CHECK3710 LDA FLAG ;clear pass?3720 BNE SORTINIT ;no3730 EXIT23740 JMP TOP ;dot's it375}0 **3760 FINDME3770 ;entry: a=filenum..exit: a,y=screen address3780 ;3790 ASL A ;index*23800 TAX }3810 LDA DIRTAB,X ;low byte3820 INX 3830 LDY DIRTAB,X ;high byte3840 RTS ;slick3850 ;3860 FINDS}CREEN3870 ;load pointers to top of screen ram3880 GETWORD $58 ;point to start of screen ram3890 STORWORD FR03}900 RTS ;thank you3910 ;3920 MAKETABLE3930 ;construct address table for file names in screen ram3940 ;entry: }FR0=screen address, HOLD1=number of entries to add3950 ;x=table index..on exit:x=last table entry+13960 ;3970 ADDMORE3980} LDA FR0 ;current address3990 CLC 4000 ADC #$28 ;down one line4010 STA FR04020 STA DIRTAB,X ;t}o table4030 BCC HIGH4040 INC FR0+14050 HIGH4060 INX 4070 LDA FR0+14080 STA DIRTAB,X4090 INX 4}100 DEC HOLD1 ;counter4110 BNE ADDMORE4120 RTS ;finished4130 **4140 ;4150 DOBLOAD4160} PRINT XBLOAD ;'bload'4170 LDA #BLOAD4180 BNE DOXIO4190 ;4200 DOERASE4210 PRINT XERASE ;'erase'4220 } LDA #ERASE4230 BNE DOXIO4240 ;4250 DORENAME4260 PRINT XRENAME ;'rename'4270 LDA #RENAME4280 ;4290 D!}OXIO4300 STA HOLD1 ;save command4310 JSR GETNAME ;which file?4320 STY CRSINH ;no cursor4330 PRINT XC"}ONFIRM ;get4340 JSR WAITKEY ;confirmation4350 LDA HOLD1 ;retrieve command4360 CMP #BLOAD ;special case4370#} BEQ LOADME4380 ;4390 JSR ICHIBAN ;else XIO #14400 BPL EXIT3 ;errors trapped4410 ;4420 LOADME4430 LDA$} # LBUFF4460 STA ICBADR+$114470 JSR SFLOAD ;get it%}4480 LDY ICSTA+$10 ;check #1 status4490 CPY #1 ;ok?4500 BEQ EXIT3 ;yes4510 JMP ERROR ;show error&}4520 ;4530 **4540 DOCART4550 JSR UPONE4560 JMP GOBAS ;exit to basic4570 DODUP4580 GETWORD DUPEXIT'}+1 ;zap wedge4590 STORWORD DOSVEC ;by restoring4600 GETWORD RESET+1 ;default4610 STORWORD DOSINI ;vector(}s4620 JMP GODUPSYS ;aloha4630 EXIT34640 JMP TOP ;upvector4650 **4660 DOMOVE4670 ;init move buffer)}4680 ;4690 GETWORD PROGTOP ;top of program4700 INY ;bump for safety4710 CPY MEMTOP+1 ;room to move?*}4720 BCC SETBUFF ;yup4730 LDY #2 ;no room4740 JMP ERROR ;quit4750 SETBUFF4760 STORWORD HOLDBUF ;+}to pointer4770 LDA MEMTOP ;top of free ram4780 SEC 4790 SBC HOLDBUF ;start of buffer4800 STA BUFFLEN ;av,}ailable ram4810 LDA MEMTOP+14820 SBC HOLDBUF+14830 STA BUFFLEN+14840 ;init4850 AND #0 ;clear...486-}0 STA FLAG ;swap4870 STA HOLD1 ;status4880 STA HOLD2 ;dest open4890 ;get 'from' file4900 PRINT X.}MOVE ;'move'4910 JSR GETNAME4920 LDY #04930 MOVEFROM4940 LDA (INBUFF),Y ;move input4950 STA FROMNAME,Y ;/}to buffer4960 INY 4970 CMP #CR ;done?4980 BNE MOVEFROM ;no4990 ;get to5000 PRINT XTO ;'to'5010 0} JSR GETNAME5020 ;check device5030 LDA LBUFF ;destination5040 STA CRSINH ;zap cursor5050 CMP #'P ;pri1}nter5060 BEQ NOSWAP ;pass5070 CMP #'E ;editor5080 BEQ NOSWAP ;pass5090 ;same name?5100 CHEKSAME5110 2} LDY #35120 LDA (INBUFF),Y ;first character after spec5130 CMP #CR ;not5140 BNE CHEKSWAP5150 CLOOP51603} LDA FROMNAME,Y ;append5170 STA (INBUFF),Y ;'from' name5180 INY 5190 CMP #CR5200 BNE CLOOP5210 J4}SR SHOWNAME ;Reprint5220 ;duplicate file (1 drive)?5230 CHEKSWAP5240 LDY #15250 LDA (INBUFF),Y ;device number5265}0 CMP FROMNAME,Y ;same for both?5270 BEQ READY ;yes5280 NOSWAP5290 ORA #$80 ;bit 7 set5300 STA FLAG 6} ;=no swap5310 ;5320 **5330 READY5340 LDA FLAG ;swap?5350 BMI MSG2 ;no5360 MSG15370 PRIN7}T XFROMIN ;'FROM disk?'5380 BPL OPEN15390 MSG25400 PRINT XCONFIRM5410 OPEN15420 JSR WAITKEY ;standby54308} GETADR FROMNAME ;'FROM'5440 STORWORD INBUFF ;to pointers5450 LDA #READ ;set5460 STA NUM1AUX ;aux549}70 LDA #OPEN5480 JSR ICHIBAN ;open #1 for read5490 ;5500 READ15510 LDX #$10 ;#15520 LDA #GETCHAR5530:} STA ICCOM,X ;set command5540 LDA BUFFLEN5550 STA ICBLEN,X ;max len5560 LDA BUFFLEN+15570 STA ICBLEN+;}1,X5580 JSR LOADBUFFER ;do it5590 ;status?5600 CPY #1 ;read ok, not finished5610 BNE CHEKERR5620 ST<}Y HOLD1 ;flag more to read5630 BPL WRITE2 ;move on5640 CHEKERR5650 CPY #$88 ;eof..read complete5660 BNE=} COPYERR ;uh oh5670 STY HOLD1 ;show done5680 BEQ WRITE25690 COPYERR5700 STY HOLD1 ;save error5710 JS>}R CLOSE2 ;close #25720 LDY HOLD15730 JMP ERROR ;quit5740 ;5750 WRITE25760 LDA ICBLEN,X ;how many bytes ca?}me in?5770 STA Z2 ;save5780 LDA ICBLEN+1,X5790 STA Z2+15800 JSR INTLBF ;reset pointer5810 LDA @}FLAG ;swap?5820 BMI CHEKOPEN ;no5830 PRINT XTOIN ;'TO disk?'5840 JSR WAITKEY5850 ;5860 CHEKOPEN5870 A} LDX #$20 ;#25880 LDA HOLD2 ;file open?5890 BNE GOWRITE ;yes5900 LDA #WRITE ;set5910 STA ICAUX1,X B};aux5920 LDA #OPEN5930 JSR TOCIO ;open5940 STY HOLD2 ;and flag5950 ;5960 GOWRITE5970 LDA #PUTCHAR ;C}set5980 STA ICCOM,X ;command5990 LDA Z2 ;set6000 STA ICBLEN,X ;length6010 LDA Z2+16020 STA ICBLD}EN+1,X6030 JSR LOADBUFFER ;hello6040 BMI COPYERR ;oops!6050 LDA HOLD1 ;are we done?6060 BMI COPYEXIT ;yE}es6070 LDA FLAG ;swap?6080 BMI MOICHIDO ;no6090 PRINT XFROMIN ;prompt source6100 JSR WAITKEY6110 MOF}ICHIDO6120 JMP READ1 ;do it again!6130 ;6140 COPYEXIT6150 JMP TOP ;all done6160 ;6170 ;6180 *ϠG}*6190 ;6200 ;closers6210 CLOSE26220 LDX #$20 ;#26230 CLOSEME6240 LDA #CLOSE ;set6250 STA ICCOM,X ;comH}mand6260 BNE CIO2 ;close channel6270 ;6280 LOADBUFFER6290 ;entry: channel,length,command defined..buffer address iI}n holdbuf6300 ;6310 LDA HOLDBUF ;point to6320 STA ICBADR,X ;ram buffer6330 LDA HOLDBUF+16340 STA ICBADR+J}1,X6350 BNE CIO2 ;call cio6360 ;print asc number in lbuff6370 SHOWASC6380 LDY #$FF6390 L1 INY 6400 LDA K}(INBUFF),Y ;character6410 BPL L1 ;last one is inverse6420 AND #$7F ;strip6430 STA (INBUFF),Y ;and restL}ore6440 INY 6450 LDA #CR ;set end6460 STA (INBUFF),Y6470 ;string printer6480 PRINTSTRING6490 LDA #PM}UTREC6500 LDX #0 ;to E:6510 BPL TOCIO6520 ;select #16530 ICHIBAN6540 LDX #$106550 *Ϡ*6560 ;N}entry: x=channel, a=command, inbuff=buffer address, aux bytes set, length=$806570 TOCIO6580 STA ICCOM,X ;set command65O}90 LDA INBUFF ;default address6600 STA ICBADR,X6610 LDA INBUFF+16620 STA ICBADR+1,X6630 LDA #$80 P};default len6640 STA ICBLEN,X6650 AND #06660 STA ICBLEN+1,X6670 ;alternate entry6680 CIO26690 JSR CIOV Q} ;do it6700 BMI ERROR ;whoops!6710 RTS 6720 ;6730 **6740 ERROR6750 CPY #$80 ;BREAK?676R}0 BEQ CLEANEXIT ;can handle6770 CPY #$88 ;eof?6780 BNE SHOWERR ;no problem6790 ORA #$80 ;set N bit6S}800 RTS 6810 ;6820 SHOWERR6830 TYA 6840 PHA ;save error6850 PRINT XBUG ;attention!6860 JST}R ZFR0 ;clear6870 PLA ;retrieve6880 STA FR0 ;for translation6890 JSR CVIFP ;to fp6900 JSU}R CVFPA ;to asc6910 JSR SHOWASC ;print it6920 ;loose ends6930 CLEANEXIT6940 LDX HOLDSTACK ;clear6950 TXS V} ;stack6960 JMP TOP ;start over6970 ;6980 **6990 GETINPUT7000 LDX #0 ;input from E:7010 GETW}LINE7020 LDA #GETREC ;input string7030 BNE TOCIO7040 ;7050 **7060 SHOWME7070 ;single characters..enX}try: a,y=text address (256 characters max)7080 ;exit: a=07090 ;7100 STORWORD FR0 ;set pointer7110 LDY #07120 PY}OPONE7130 STY LEN ;save index7140 LDA (FR0),Y ;get character7150 BEQ PRINTED ;end of text7160 JSR POPZ}CHAR ;print char7170 LDY LEN ;get index7180 INY 7190 BNE POPONE ;always7200 PRINTED7210 RTS 7220 ;[}7230 **7240 UPONE7250 LDA #$1C ;cursor up7260 ;7270 POPCHAR7280 JMP $FFFF ;os print ch\}ar7290 ;7300 GETKEY7310 JMP $FFFF ;os get key7320 ;7330 ZAPLINE7340 LDA #$9C ;delete line7350 BNE POP]}CHAR7360 ;7370 WAITKEY7380 JSR GETKEY ;waiting..7390 CPY #$80 ;BREAK!7400 BEQ ABORT ;quit7410 CMP^} #$1B ;ESCape?7420 BNE NOPROMPT ;no7430 ABORT7440 JSR NOPROMPT ;clear7450 BMI ABORT2 ;and quit7460 NOPRO_}MPT7470 JMP ZAPLINE ;clear text and return7480 ;7490 SAVECOL7500 LDA COLCRS ;column pointer7510 STA COUNT `} ;save it7520 RTS 7530 ;7540 REPEATME7550 LDA COUNT ;restore column7560 STA COLCRS7570 BPL UPONE ;aa}nd move up7580 ;7590 GETNAME7600 JSR SAVECOL ;save column7610 JSR GETINPUT ;get input7620 JSR PARSE ;legalb}ize name7630 SHOWNAME7640 JSR REPEATME ;back up7650 JMP PRINTSTRING ;print and return7660 ;7670 *c}*7680 ;entry: input string in lbuff7690 ;exit: legal filespec7700 PARSE7710 LDA LBUFF ;first char7720 BMI ABd}ORT2 ;CR..abort!7730 LDY ICBLEN,X ;get length7740 DEY ;adjust7750 STY LEN ;and save7760 LOOK777e}0 LDA (INBUFF),Y7780 CMP #': ;legal spec?7790 BEQ LEGAL ;yup7800 DEY 7810 BNE LOOK ;again78f}20 ;no spec7830 ADJUST7840 LDA LEN ;input length7850 TAX ;index old pos7860 CLC 7870 ADC #3 g} ;spaces to move7880 TAY ;index new pos7890 SHIFT37900 LDA LBUFF,X ;input character7910 STA (INBUq}b%DOS SYSb*)DUP SYSb SAUTORUN SYSb_HELP DOCbRoBASWDG DOCbBASWDG BINbBASWDG SRCbBWDGLO BINbWDGREN BINb RENUMBERBALb SCREAD BASbAUTOBOOTBASbCURSLINEBASbCURSOR BASbHILITER BASbNFCURSORBASbQUIKSORTBASb GRCHARTSBASb$SCROLLITBASb:>STRINGERBASbxBASIC DOCbC}BASIC OBJFF),Y ;3 spaces right7920 DEY 7930 DEX 7940 BPL SHIFT37950 INSERTSPEC7960 LDA DRIVE,Y ;insert default79r}70 STA (INBUFF),Y7980 DEY ;backwards!7990 BPL INSERTSPEC8000 ;check device number8010 LEGAL8020 s}CPY #1 ;specified?8030 BNE GETBACK ;yes8040 LDA LEN ;no..as above8050 TAX 8060 CLC 8070 ADCt} #1 ;adding 1 space8080 TAY 8090 SHIFT18100 LDA LBUFF,X8110 STA (INBUFF),Y ;move over8120 DEY 8130u} DEX 8140 BNE SHIFT18150 INSERTNUM8160 LDA #'1 ;default number8170 STA (INBUFF),Y ;to input8180 GETBv}ACK8190 RTS 8200 ABORT28210 JMP CLEANEXIT8220 ;8230 ;SFLOAD patch control!8240 PATCHON8250 LDX # LBUFF ;buffer8270 BNE PATCHSFLOAD ;to safe ram8280 ;8290 PATCHOFF8300 LDX # LOADZONE ;default8320 ;8330 PATCHSFLOAD8340 ;entry:x,y=address of 'header buffer'8350 ;8360 STX PAy}TCH1 ;byte lo8370 STX PATCH3 ;word1 lo8380 INX 8390 STX PATCH4 ;word2 lo8400 STY PATCH2 ;byte hi8410z} STY PATCH3+1 ;word1 hi8420 STY PATCH4+1 ;word2 hi8430 RTS 8440 ;8450 ;8460 **8470 MENU8480 {} .BYTE CR,"1 2 "8490 D88500 .BYTE "8 Era Rename Bload Move Cart @DOS",LINEND8510 DEFAULT8520 .BYTE "D1:",LINEND8|}530 DRIVE8540 .BYTE "D1:"8550 FILE8560 .BYTE "*.*",CR8570 XBUG8580 .BYTE $FD," Error ",LINEND8590 XERASE86}}00 .BYTE " >",LINEND8610 XRENAME8620 .BYTE " >",LINEND8630 XBLOAD8640 .BYTE " >",LINEND865~}0 XMOVE8660 .BYTE " ",CR8670 XFROM8680 .BYTE " FROM >",LINEND8690 XTO8700 .BYTE " TO >",LINEND8710} XFROMIN8720 .BYTE " FROM disk?",LINEND8730 XTOIN8740 .BYTE " TO disk?",LINEND8750 XCONFIRM8760 .BYTE " CO}NFIRM",LINEND8770 **8780 KEYTABLE8790 .BYTE "128ERBMC@" ;legal keys8800 **8810 JMPTABLE8820 } .DBYTE DODIR-1,DODIR-1,DODIR-1,DOERASE-1,DORENAME-1,DOBLOAD-1,DOMOVE-1,DOCART-1,DODUP-1 ;command vectors8830 ;8840 .O}PT LIST8850 FROMNAME .DS $108860 HOLDSTACK .DS 1 ;stack pointer8870 ;8880 ;wedge ends8890 .OPT NO LIST8900 ;8910 ;}reserve Bigblock8920 .ORG $24008930 NEWLO8940 ;8950 ;bottom of free memory8960 ;following code is wiped out8970 ;8}980 INITWEDGE8990 ;RESET9000 GETWORD DOSINI ;old one9010 STORWORD RESET+1 ;to patch9020 GETADR RESET ;n}ew one9030 STORWORD DOSINI ;to os9040 ;save DUP.SYS run address9050 GETWORD DOSVEC9060 STORWORD DUPEXIT}+19070 ;install os vectors9080 OSVEC EPUT,POPCHAR9090 OSVEC KGET,GETKEY9100 ;check dos version9110 LDA $}0D189120 BPL CHEKD8 ;dos 2.59130 LDA #6 ;set dir aux9140 STA DIRAUX+1 ;for dos 2.09150 ;check for Ramdi}sk9160 CHEKD89170 LDA $070A9180 BMI D8OK ;president9190 LDA #$1E ;nope-zap 89200 STA D8 ;in m}enu9210 LDA #'1 ;and9220 STA KEYTABLE+2 ;keytable9230 D8OK9240 JSR SHADOWS ;take over9250 JSR SHOWTI}TLE ;print title screen9260 ;9270 JSR BASON ;switch on basic9280 LDX #09290 STX COLDST ;warmstart ok9300 } INX 9310 STX BOOT? ;disk booted9320 JMP ($BFFA) ;READY!9330 ;9340 **9350 HELLODERE9360 .B}YTE "BASWDG 2.86 don lebow",CR,CR9370 .BYTE "RESERVED MEMORY:",CR,"$1CFC-$1D59 (7420-7513)",CR9380 .BYTE "",CR,CR9390 .BYTE "RESET:",CR,"TEXT 7450 BACK 7452",CR9400 .BYTE "KEY DELAY 7460 KEY REPE}AT 7462",CR,CR9410 .BYTE "CONFIRM:",CR,"BREAK/ESC to quit..RETURN to go",CR,CR9420 .BYTE "BIGBLOCK:",CR,"$1D5A-$23F}F (7514-9215) is FREE",CR,CR9430 .BYTE "LOMEM SHADOWS: 7470,7471",CR," POKE value, RESET, and NEW",CR9440 .BYTE " N}EVER SET BELOW $1D5A (90,29)!",CR,CR,LINEND9450 ;9460 SHOWTITLE9470 GETADR HELLODERE9480 STORWORD FR09490 } LDY #09500 TLOOP9510 STY HOLD19520 LDA (FR0),Y ;character9530 BEQ ENDTITLE9540 POP29550 JSR POPCHAR ;}print it9560 LDY HOLD19570 INY 9580 BNE TLOOP9590 INC FR0+1 ;clik up9600 BNE TLOOP ;always9610 }ENDTITLE9620 RTS ;screen printed9630 ;runme9640 *= RUNAD9650 .WORD INITWEDGE9660 ;*whew*9670 .}END TLE9620 RTS ;screen printed9630 ;runme9640 *= RUNAD9650 .WORD INITWEDGE9660 ;*whew*9670 . xMEMIMABOSIZLHNBONSIZAtpAuBS`Au } %%alter LOMEM..BASWDG 2.86 ONLY!!HHan arbitrary upper limit is set at page 60..alter MAX if necessaryBBWA}RNING: THIS PROGRAM SELF-DESTRUCTS! reset is not necessary(2o(}BASWDG 2.86 LOMEM)6-Atp56-AuI6-@`}$AVg6-F:,%F:%@,$AVo6-&<^(&(Minimum Value: 7514 (90,29))(^(Current Value:  (F:,},F:%@,)F%(%(Reserving:  BytesPO(( NEW LOMEM:"(LO BYTE&3(HI BYTE7G6-%AV}$O6-&Z  (Too Low @`d !(Too High @`nU((,)8( Reserving  B}ytes;(F(OKAY?UY to confirmxd@.@@K:;)@F@d@*A!}@`J ((LOMEM altered...$2%@>ACJADaloha..don D:LOMEM.BAS!y hة" '"BDE V ذG ٠ȱɛ,ԅՅȘeL# !ԅ >"0 a"0ꥢ ~"!} '"` >"ȱL"ȱȱ ş a"פ鱊    #  C`ȱ !?L! O"!} ! O" O"ħȄ Dڪ ٥ŖŕLh!!}0#%ee ! Y"` Dڥԥ ٢ԑ`) Y"  !`8`x"!} '" {" '!"" Dڥԥ ؠȱ) ȑHDE BILV䥈` Y"`i`!}ee`NF VR Line Numbers out of range...}FIRST LINE,INCREMENT ? >" a"`ڠ" '"`Renum!}ber with USR(8192)"R Line Numbers out of range...}FIRST LINE,INCREMENT ? >" a"`ڠ" '"`Renum 32100 REM 32110 T8=256:I=1:Z=3210032120 WM=0:X=PEEK(138)+PEEK(139)*T8:Y=PEEK(134)+PEEK(135)*T8+8*(PEEK(X+5)-128)+232130 ? %}"FROM,BY":INPUT FR,BY:? CHR$(125)32140 B=PEEK(136)+PEEK(137)*T8:X=B:M=FR32150 LN=PEEK(X)+PEEK(X+I)*T8:SOUND 0,LN,10,832160%} IF LN=Z THEN 3222032170 PL=PEEK(X+2):C=X+332180 LL=PEEK(C):C=C+I32190 GOSUB 3228032200 IF LL30 THEN 3238032310 C=C+I:D=PEE%}K(C)32320 IF D=23 OR D=24 THEN 3235032330 IF D=14 THEN C=C+632340 GOTO 3231032350 C=C+I:GOSUB 32450:D=PEEK(C)32360 IF D<%}>20 AND D<>22 THEN 3235032370 RETURN 32380 IF TK<>7 THEN RETURN 32390 C=C+I:D=PEEK(C)32400 IF D=27 THEN 3243032410 IF D=%}14 THEN C=C+632420 GOTO 3239032430 C=C+I:IF C<(X+LL) THEN GOSUB 3245032440 RETURN 32450 D=PEEK(C):IF D=20 OR D=22 THEN C=%}C+I:RETURN 32460 IF D<>14 THEN ? M;" SR,";:C=C+I:RETURN 32470 C=C+I:FOR J=0 TO 3:POKE Y+J,PEEK(C+J):NEXT J32480 IF WMWM THEN ? M;" NF,";:GOTO 3254032530 WM=RN:FOR J=0 TO 3:POKE C+J,PEEK(Y+J):NEXT J%}32540 C=C+6:RETURN 32550 ? :? (M-FR)/BY;" LINES"32560 ? "LIST";CHR$(34);"D:ABC.1";CHR$(34);",";FR;",";M-BY32570 END XT J$y0ABA@$(A@ooŧӠɠҠέ Ӡ͠)}Š ӠΠҠ1 +@@1@@9s (} (p(_THIS PROGRAM)} DEMONSTRATES AN ABILITY TO READ THE CONTENTS OF AN ENTIRE SCREEN AT ONE TIME.s(ur(jWHEN THE ? APPEARS, ENTER ANYTH)}ING YOU WANT ON THE SCREEN, EVEN USING THE CONTROL UP AND DOWN ARROWSu(ro(gWHEN YOU ARE FINISHED, PRESS RETURN, A)}ND THE PROGRAM WILL READ AND REWRITE THE CONTENTS OF THE SCREEN.r(vO(GUSE THIS TECHNIQUE IN YOUR OWN PRO- GRAMS TO ALL)}OW FULL-SCREEN ENTRY.R(v(Ġ٠͠͠Ơ --@A@ -@ ;A,;)}@@, 6.##@@ E:<-@#F-P@Z67B:,)}%@,.d n }x-@A  7@169,224,141,0,2,40,104,64FEE120,72,08,173,196,2,141,23,208,234,234,234,173,199,2,141,24,208H169,192,141}1,0,2,40,104,64U(>:A%,ZW.(&Betriebssystemerweiterung wird geladenW($In Page 6 wird ein Maschinenprogramm[B<(1}4geladen, das eine farbige CURSORZEILE installiert.?(B(_#d6-n-A6Ax"  61}-% "AcAF(>:AS,C(.IN DEN ZEILEN 40-44 BEFINDET SICH EIN FEHLER!F(@@@D1}6--AAq"  6-% "AWAF(>:AS,C(.IN1} DEN ZEILEN 50-56 BEFINDET SICH EIN FEHLER!F(@P@V",6-6-A(AS@"J 1}T 6-%^ h"A16ArF(>:AS,C(.IN DEN ZEILEN 60-62 BEFINDET SICH EIN FEHLER!F(|@`1}@b6--A`A"  6-% "A1AF(>:AS1},C(.IN DEN ZEILEN 70-72 BEFINDET SICH EIN FEHLER!F(@p@rWW(ODie Betriebssystemerweiterung ist 1}gela- den.Durch druecken einer Taste wird die**("farbige Cursorzeile eingeschaltet!X(.(#Nach RESET kann die Cursorz1}eile mitX(%Ҩ erneut aufgerufen werden.)@@ +6-?:A6,!70@1}@70@@@&D:CU*.*N.BAS0,192,64T +6-?:A6,!70@0L !CURSOAhA( #A-A6Ag"  "6-?:A6,+5},104,162,6,160,11,169,6,321 92,228,96,165,20,110,243,26110,243,2,106,106,106,106;!!46,243,2,46,243,2,765},95,228D:CURSOR,11,169,6,321 92,228,96,165,20,110,243,26110,243,2,106,106,106,106;!!46,243,2,46,243,2,764 uDLISB@dBh##**ANALOG ISSUE 26 - PAGE 48**HH**PROGRAM WILL HIGHLIGHT THE 9} CURSOR LINE IN DARK BLUE**oo**TRY POKING 710 WITH RND VALUES FROM 0 TO 255, THEN MOVE THE CURSOR UP AND 9}DOWN SCREEN** %-A6Ax"!% %%6-F:A`,%F:Aa,$AVS%@A@+%@A9}C-%@%@(OA0S (9A'A@9BBA2ZZ72,173,11,212,2339},12,74,74,197,84,208,13,169,146,141,10,212,141,24,208,133,203,76,41<KK6,165,203,201,146,208,10,169,148,141,10,212,141,24,29}08,133,203,104,64 D:CURSLIT.BAS212,141,24,208,133,203,76,41<KK6,165,203,201,146,208,10,169,148,141,10,212,141,24,28'#7$$******************************$$* *$$* NO-FRILLS ALT=}ERNATE CURSOR *$$* BY TOM HUDSON *$$* ANALOG COMPUTING *$$* *=}$$****************************** s-AVAd"!% :AF:@,OAF:@,a@=}s@@)&(}PRESS TO INSTALL CURSOR)UU169,1,133,13,169,0,133,12,169,0,141,7,212,169,1,141,11=}1,2,162,1,160,40,169,7,32VV92,228,169,58,141,47,2,169,2,141,29,208,76,0,0,216,169,1,141,240,2,169,58,141,47VV2,169,0,=}170,157,0,6,202,208,250,165,85,10,10,24,105,48,141,2,208,165,84,10,10,10VV24,105,39,168,169,240,153,0,6,238,109,1,173,109=},1,74,74,74,41,1,208,4,169,15,208!!2,169,0,141,194,2,76,98,228 D:CURSOR.BAS,168,169,240,153,0,6,238,109,1,173,109<W^ p SKRSTACRTESRE@@@ A} + ccQUICKSORT FROM DONALD KNUTH, ART OF COMPUTER PROGRAMMING, VOL 3,P 117. CODED BY E.P. McA}MAHON.JJSORTS N RECORDS R(I) BY THEIR KEY K(I) BY A PARTITION-EXCHANGE SORT.NNADDED VARIABLES K(0) AND K(N+1)ARE REQUA}IRED. K(0)ANYKEY.MMYOU MAY WISH TO PLAY WITH M TO MINIMIZE RUNNING TIME FOR YOUR PROBLEMS.eeTHIS SORTA} WORKS BY CORRECTLY PLACING THE FIRST ITEM SO ALL ABOVE ARE SMALLER, ALL BELOW LARGER.ggTHE TWO SUBFILES THUS CREATED AREA} SORTED IN TURN. THE STACK KEEPS TRACK OF SUBFILES TO BE SORTED.IISUBFILES SIZE M OR SMALLER ARE SORTED BY A SRTAIGHT INSA}ERTION SORT.__LINES 810-830 IS THE INSERTION SORT WHICH IS ITSELF ABOUT TWICE AS FAST AS A BUBBLE SORT.BB(THE ONLY THA}ING GOOD ABOUT A BUBBLE SORT IS ITS NAME...OWCH)66DROP ALL THESE REM'S WHEN USING THIS SUBROUTINE.!&&9@ ,9AA},9A,( A --DEMO CASE2!!-- DIM R(.) AND K(.) TO N+1344-- SET N TO THE SIZE OF THE ARRAY TO BE SORTA}EDc-- SUBROUTINE STARTS HEREd;6-6-@!6--6-@ ;!A7& A7- SORT SUBFA}ILE FROM K(L) TO K(RT)! 6-6-6-8,!6-8,UU- IF KEYS K(.) START OUT NEARLY IN ORDER, REPLACE LINE 210 WITH A}THE FOLLOWING--<<210 I=L:J=RT:Q=INT(RND(0)*(L-RT))+L:TEST=K(Q):REC=R(Q),$  8,6-&@$ A% 68A},-68,-% A)68,-8,68,-8,)6-%@$ 8, 6-%@$ AX9 !68,-8,!6A}8,-8,/6-&@9 Ab 68,-68,-6-U &&&68%@,-%@46-%@=68,-K6-A}&@U AK68%@,-"6-%@368,-&@A6-%@K A88STRAIGHT INSERTION SORT FB}OR SUBFILE SIZE M OR LESS ;-%@%@$6-8,-6-8,;6-&@*L  8, 68%@,-8,468%@B},-8,B6-&@L A4)68%@,-%68%@,-) H"AHIF ALL SUBFILES ARE DONB}E, WE ARE FINISHED SORTCLICK TO SHOW OPERATIONALG%2@ @@G2B}5 6-8,6-8&@,+6-&@5 ASORT IS FINISHED$K AND R DIM'ED EARLIER##( B} Š Z-@A468,-P:H:,$A,H68,-8,$@V(8,8,Z V,($B}ŠĠӠԠӡ@-@AD VAY9@'@9@ B}D68,-6@.68A,-A:6-AD AAY@4DD6-++F:@,$AV%F:@B},,$AV%F:@ ,,'@`-@ 8,8,  (( SECONDS*P(M(BLIST LINES 12 TO 99 (B}L.12,99) FOR A BRIEF TUTORIAL ON THIS SORT.P D:QUIKSORT  (( SECONDS*P(M(BLIST LINES 12 TO 99 (@CG IDOWNDELA@A S +@-@@;(@ATARI graphiF }csO-@AS < +'0@@9AR@<(( Graphics... ( (# F } (GRAPHICS 0---1.5 COLORS( (GRAPHICS 1---5 COLORS- (GRAPHICS 2---5 COLORS2 (GRAPHICS 3---4 COLORSF }7 (GRAPHICS 4---2 COLORS< (GRAPHICS 5---4 COLORSA (GRAPHICS 6---2 COLORSF (GRAPHICS 7---4 COLOF }RSK (GRAPHICS 8---1.5 COLORSP,,($GRAPHICS 9---1 COLOR(MULTI-SHADE)U (GRAPHICS 10---9 COLORSZ (GRAPHICF}S 11---16 COLORS\+( ( (+(Press [] to continue.] F:B2y,"@A_ @d Ai< +F}'0@@9AR@<(n( Graphics...s ( (x))(MODEACROSSDOWN(S)DOWF}N(F)!!(@@-@$%%(@@ @ @$%%(@@ @@%%(@F}@@@ @$%%(@@@@@H%%(@@@@@H%%(@A`@F}@%%(@A`@@%%(@A A`A!!(@ @-A!!(@F}@-A!!(@@-A+( ( (+(Press [] to continue. F:B2y,"@F}A A< +'0@@9AR@<(( Graphics... ( ((MOF}DE MODE TYPE(TEXT(@TEXT(@TEXT-@@(GRAPHICSF} )( ( ()(Press [] to review. F:B2y,"@A   A` +%< +'0@F}9AR@<())(!: DOWN(F) MEANS FULL SCREEN!**(" DOWN(S) MEANS SPLIT SCREEN!F}""(IF A (-) APPEARS THAN THAT''(MEANS THERE IS NO SPLIT SCREEN!+( ( (+(Press [] to continue.$F:F}B2y,"@$. A`D2:GRCHARTS.BASR@N!+( ( (+(Press [] to continue.$F:DGab  MESSAGEVBORDLISTDLISDLENPGDLBESPEECSCROLINITVHIGLOMEANTIOFFSECHASCROLLBYTE=A6J}nB"B"B"@AYAW A` @Q @ @H AY@@J}@$@b@A`B# ************************** * Scroll-it! * * By MaJ}rk Sloatman *( * For ANALOG Computing *2 **************************<F;A,P%6-A6;AJ},%6-C:,ZZZCorrects address of beginning of Display List if it is going to cross a 1k boundary.d*6-%@U*6J}-P:'A$,$A$n) 6-& @U)6-%+@U&,x66delete line 110 if you want the VBI in a string. DIMJ } VB$(71):VBORG=ADR(VB$)'6-AY6-AW'6-A`AUdon't scroll!9 +@AR@J!}90@Q0@@70@@@Q0@@@]-@@J"},(@ SCROLLIT!>-@@](@by mark sloatman p-@@&(@8-@@J#}V(@analog computingY(p( Just a moment...+ A0+put VB routine into memory.@ #A !-AJ$}`Ai%"+/ @INITVB routine%%104,162,6,160,0,169,7,76,92,228$6-P:'AV,$6-&$AVDAJ%}bAdDTell INITVB where VBROUTINE is located7-%@6"! 7SET UP DISPLAY LIST^^112,1J&}12,112,66,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,82,0,0,112,112,112,65,0,6P6-F:A,&@&A46J'}-%@>+PMemory for msg.l0@lchange this line if you want to use Inverse Upper case J(}in Gr. modes 1 and 2."0@@70@@@Q0@@@You may, of course, J)}use any color you wish.,44Tell Display List where memory is for display.6?%@0(%@F:@,?%@J*}F:@,@AAR@'-@@!A(Another sec please...JO'-+,$AV+%@,$AV3J+}7 OClear message memory.TAR^(>:A%, APh33Don't want old message on scJ,}reen!rP(+( Please select the Graphics modeP( desired for the scrolling line.|8(( Text modes 0,1 or 28( ANTJ-}IC mode 4 or 5 AUStop msg.%%"@)!@AP'"6-@'6-@H'J.}"@6-@'6-@$'"@6-@'6-@$+!@* @6-+6-@HZ!%@J/}(%@d%@26-P:'AV,B6-&$AVNA`ZAa A`*(&( Speed (0-fastest,3-sJ0}low) *&("( Please input message &*-@B:,*6-F:C:,%&@,88these lines convert ATASCII tJ1}o ATARI INTERNAL CODE55@*A')A$*AUA`'@16-%@d' A`'@J2}6-&@2' A`'AY6-%@d' A`&A#6-&@20+,$AV%%: J3}D55POKE VBORG+37 with 7 for GRAPHICS modes 1 and 2N7"@)"@-%@7@7 A0XddPOKE VBORG+J4}37 with 3 for GRAPHICS mode 0 and ANTIC modes 3,4 and 5 (also map modes 7,7+ AND 8)b%@7@l``VBORG+37 contJ5}ains the number of times a finescroll needs to be done before a coursescroll.v 6-?:,Start the VB!"(>:A%,(J6}"( All done.KAR@9( hit RETURN for another messageKAdAU99if message scrolls off screen J7}then scroll it again.F:,!B:,%K36-%+R:,"@,&+R:,"@,? K6-J8}!@6-@@ F:Ad,"AU2-@@P6 @ ApAdAU A0J9}%%*VERTICAL BLANK SCROLL ROUTINE*+ #Ap-%@p!"'+ ppNeed to tell VB routine where pointer is iJ:}n Display List for memory shown.(So we can do the course scroll)N6-%@)"6-P:'AV,26-&$AV@%@`J;}N%@a$ll216,173,3,1,201,255,240,60,173,2,1,208,52,173,3,1,141,2,1,206,0,1,173,0,1,48,9,141,4,212,141,0,1J<},76,98 ``228,169,3,141,4,212,141,0,1,238,1,1,173,1,1,201,216,208,5,169,0,141,1,1,141,29,6,76,98,228206,2,1,76,98,228J=}D:SCROLLIT.BAS41,4,212,141,0,1,238,1,1,173,1,1,201,216,208,5,169,0,141,1,1,141,29,6,76,98,228206,2,1,76,98,228H "DPMCURSORSTRINGPRMEMSCREENXDIRYDIRPCURSODMESTHOROLDVERHPKECOROLENTNUMBEPMBASSTARN?}PMOVEBh, 7 WYYn  AA BHq BI B @C @@N@}@AAA@ B2HBx@(@(@B AUAD@NA},, A&&Ҡ&&&&NB}Šț&&.. Delete Backup FileA @A@3@NC}D:STRINGER.BAK.. Rename file to backupJ @J@2@D:STRINGER,STRINGER.BAK ND}.. Now save new program  D:STRINGER B&Z_%%ŠΠdig +@ANE}@1AA8CA@`UA AtgAARn%%6-F:A`,%AV$F:Aa,sNF}+%@@q+%@@x##(@ Š}@(@*(@ 5(@NG}@(@""(@ ӠԠҠɠΠǠŠ(@(@*(@*(@ A UTILITY,(@NH},(@ FOR ENTERING.(@.(@ STRING STATEMENTS/(@(@$(@/(@NI}0(@0(@press start to begin$$Πӯӛ]];@D,;@,NJ};@2,;A,;@,;A,9@,9@,'@@'@@9##@@NK}K:666.,hhޠન ވ܈`6. ?!!!!!!!!?cc6.YԅhNhhEhhNL}:@',>:,{26-6-F:AdNT},2"AUAu##ˠĠҠŧ#"@R A # Au##ˠҠϯӯ̠NU}ӛS#"@`)"A$)"A5AdAUIA&@`S Au\#"@9)"A)"Ag5NV}AdAURAA(&F:A,\ Au)@6-@##ƠԠĬŠǛ F:NW}B2y,"@A##ƠҬԠǠқ*+(,A -(>:@',>:,6-%@NX})!@96-@)6-%@67B:,%@,.>:, -@@6@))2'@%NY}@@ %%2 A##ӠϠŠǠNZ}-@@""( Are you sure?? (Y/N)AdAU F:Ad,"AUA0 $6-F:Ad,$N[}AdAU"@CA`-@@""(Press to save string A$(>:A%,N\}) 67B:,%@,.>:@4,.-@B:,3(>:@',7<, 8##ŠԧԠN]}=>6-B:,&@ !@,6-@>-@@B!(!(CLOSE #3:OPEN #3,8,0,G##ӠŠҠŠN^}ӠLH+F:A(,%AV$F:A), A`>(>:@4,C:H AQ(>:@4,D:V(7@<,.STRN_}[""(>:@4,:PRINT #3;PR$:`%( CLOSE #3(((RUN"(%(e((HIT RETURN KEY ANDj(THE STRING WILL N`}BEo(SAVED AS SHOWN ABOVEt$($(HIT RETURN AGAIN TO RERUNy-@~AR$$Na}ŠҠ͠Ǜ6-&@)"@6-@9)6-&@ -(>:@',>:@Nb}2,67B:,,.-@AU@@!!2@'@ %%2Nc} AdAU$  ""ΠЯ͠Ҡ  --6-@%@$P:H:@,$@,Nd} 7 +A%A7A @ AR@( --6-@$P:F:Aa,'@,&@Ne} 6-AV$+%@, %%A@%@$@ 6-B2H B2w@ BByNf} AY@b 6-A5 6-A% !!6-?:C:,<<<AV,  ##ԠРˠӠNg}  [[0,0, 0,0, 0,0, 0,0, 4,8,4,-8, 4,0, 0,0, -4,8, -4,-8, -4,0, 0,0, 0,8, 0,-8, 0,0 #A0! -@Nh}@& "+ 68,-0 68,-5  : ? ##ԠϠҠǠԠD I :(( PLEASE ENTER THE FOLLONi}WING ITEMS:ARN -@@S (LINE NUMBER ?32000X -@@] (STRING NAME ?DUMMY$Nj}b -@@g (STRING START ?001l -@@ q ##(Your result will look like:v I(I(32000 DUMMY$Nk}(1)=>:@4,an unprintable string>:@4,{ A1 -@@ A2 -@@Nl} '7B:,,0$'67B:,%@,.$ A2  -@@  BAR@ 6.=:, Nm}67B:,%@,.  67B:,%@,. 67B:,%@,.( 67B:,%@,.=:, 67B:,%@,.)= Nn} 67B:,%@,.>:@4, -@@ (Your output will be: -(-(an unprintable string>:@4, No}$($(PRESS ANY KEY TO CONTINUE (  AdAU F:Ad,"AUA3 Np}AdAU##נŠӠΠΛ##@@S:'AY@b'ARNq}@Q0@70@@Q0@@)-@@)-Nr}A'""ĠϠРŠŠ!"@4( ! A@P(>:@',>:,  -A)ANs}6 (  (-A'""ĠϠРŠҾ!"@'( ! A@""(>:Nt}@',>:%A(,  ##ԠРӯӠǠ 6- 6-B:,%@ '@@'-@Nu}(-@@""(Press to save string"!!РϠŠҠŠ'""Nv}Π٠ӛ,1%%6-F:A`,%AV$F:Aa,6))6-F:%@,%AV$F:%@,;&&6-?:C:,<%Nw}A`<GOTGOSUTSTETHEΣ<<>ުNOOANĨ<<>STRCHRUSASVALEADATCOPV}EESIRNFREXLOCLOSQSGABINPADDLSTICPTRISTRI8ee L<8ueeeV}ee褢 ƚƜ`8IȄ墅8夕奕墅V}褢 朱`  5ğȱȄ ~Lb HH`0 Щ LLL]š V}Š` ݩ ЩLei```` ALq Al `(ʪ߷wJζ緽ؼe`ط \'5LV}KejL@~qOu0ܴc߹ԬĬˬ۱dz^ԬĬˬ۬%zxHfV}ɰ.$L8BVܰ!%)- . > L㪅/JJJJ/)Ŭ  LL`8 pHqH`V}Ȅ`樱0C`ȱȩ"ȱօȘuԩׅu՘e֨҆ӄ` (` $҅jeԨV}e` .檥 ũ ґ`L, ૥0`L2 LV ի` :ƪ ҈` L ` (ґ` &V} &ee`̪wUfNC  ;L  AL  GL  ML V}IL` &0KIB &=@ &0;4 &0/-0 &0&) &$ %  @Ԅբ֠ HڅL 0ᤩV}/L  A` fڰ` `ڰ ` ڰ` (۰` * ٰ` : L`氤hhL @$ƪŰ ư 㫥0#ԅV} 㫥ԅ0 $P`fҰ .אְ菱ِ祗ذ ] R FԤ R R$ Ȅ`ȄV}L 8 򫥱 ٥LT֤צưĘ5ŗ/8֪א eԥe$`L 6 㫥ԤV}` ԅՅօׄ פ& ٤ţĢee8包卅8墅8墅8墅 G V}8Ԩժ%אְ`ֆL&&ee`J uڕv`  ( V} ``(`ε` ֤ׅԄ ٩҅L 㫠Lѯ 8吅ԭ呅Lկ y  V}Lѯ Lկ  H 㫥heԪp : إԥՠȱ)Ȅ Vԍթԩׅ֩өL V} ҄Ԭ ҄ MLBU6 )L ð L 0 HHLǰHl L)8?Ք FکV} ;`L ?: 50 w+& ް! ް ݰ  徰L :  0L0)ԥ)8@0ܢV}8ʈJHH ްh G ݰ hԅЉ *ħ` થj .8*0/0ֆׄV}0ۄ؆ ] F0L4օפإ𴢎 8包ԥ卅 Lٱ ૥ԅՅ 髥Ԡ```  իդԅ`H V} 󥋅 h     &0=8eeŶ @L5V},ɛ` 4? >ƨ  Q N >樥0 ذ  L `L 0 . $PH dV}h $P  Lв  Qک` L&L5ɅS|xoa ƨ$0 ةH ]h0 V}0֤ _Lį eį ]L) ƨLL  _`)L󩴅 ѻ V}LP: Ƕħ-H h պL իԅħ իԅՅ 0$Ů ŭ \ ݩ ЩLV}Ҵ L 0Ư00 %Lei`毤Hɛ) h` 5 Lȱ إ󅕥 V}TȱȄ ğ` 16 = 17 / L /) 5ɨ /L6 Mƨ إ󅕥 5L /" V} / Ư" L8 1=Š) OL樤ħ`hh` LT થ H % x Ԡ DکթV}@  Ԡ hH xhıȑıȑĦʊȑ` Ƕ իՅԅ hhL_ (` L A<: H V} ;  h 5 ` 50` x 72` & A 7 "`  ȱ` "   0 V}`LP  L`` LP n 5Lt 0LrSTOPPED 𥺅 0 ݩ Щ 0L ૥ԅV}Յ` 髥  ʶԅ իƳ `L` Ȅ` A ąŅ``őŐ8` rV}H rh`L LĦ``Ƶ`Ƣ౐``䉐䈐`)V}iiРLA`湩 0éV}L n7 =ԩ 0 5Ո nL` إ󅕥 5` AT LINE 髥H ૥ H heԨh` V}: 髥 Hҩ hHԝ ૥ H hheԝ` ૥ԅUՅV 髥ԅT` ૥ԅ` ȍ ĺ JK $L V}ૢs)I ѻLS: ȢL   ĺ LH ƺJ*K+h LGHFH`L ݺL`V} ݺ`H &h `H ݺhH    8}} L fhV}`LP  ݺ 8倝偝   󥃅  L Lb LHΆ󢻆h ѻ `CV}:H ĺhKJ LQ L H hHH y hKhJ QL $L & L-& LM / NL-V} ի ԝL՝M ի ԝN%L" ૥ԦL   L-  ƺ  0`  0`ɀ LV}`Ɉ rL@] LS L& C` ի`IHEDB V`HH hh LV} `g `YDAER` ԅՅ֦󅗄`` 8`$)ԩ_eV} (ې`)8@0+̪Յ)e)e ݦ `F ݢq `ڢ ڰA @ݢ F IV}`U9>`D'RFuCU?b9dYdg@W2@?tS)%@)@0)%ԅԢ ޢ ڰ9 @ݰ. V}ڰ" fڥԅԥ k (`8`0?i (۩ ݢ `ڢ ڢ ݢ V} (ۢ `ڢl ڥ fƢ ݥ#8@ji@)j `@00 `pp00<|||ddgV}008888 000x800000000 ̸`3jɐ*j `M 1lV}`l 000x800000000 ̸`3jɐ*j `M 1lT